| 1 | /* | 
|---|
| 2 | ** Bytecode dump definitions. | 
|---|
| 3 | ** Copyright (C) 2005-2014 Mike Pall. See Copyright Notice in luajit.h | 
|---|
| 4 | */ | 
|---|
| 5 |  | 
|---|
| 6 | #ifndef _LJ_BCDUMP_H | 
|---|
| 7 | #define _LJ_BCDUMP_H | 
|---|
| 8 |  | 
|---|
| 9 | #include "lj_obj.h" | 
|---|
| 10 | #include "lj_lex.h" | 
|---|
| 11 |  | 
|---|
| 12 | /* -- Bytecode dump format ------------------------------------------------ */ | 
|---|
| 13 |  | 
|---|
| 14 | /* | 
|---|
| 15 | ** dump   = header proto+ 0U | 
|---|
| 16 | ** header = ESC 'L' 'J' versionB flagsU [namelenU nameB*] | 
|---|
| 17 | ** proto  = lengthU pdata | 
|---|
| 18 | ** pdata  = phead bcinsW* uvdataH* kgc* knum* [debugB*] | 
|---|
| 19 | ** phead  = flagsB numparamsB framesizeB numuvB numkgcU numknU numbcU | 
|---|
| 20 | **          [debuglenU [firstlineU numlineU]] | 
|---|
| 21 | ** kgc    = kgctypeU { ktab | (loU hiU) | (rloU rhiU iloU ihiU) | strB* } | 
|---|
| 22 | ** knum   = intU0 | (loU1 hiU) | 
|---|
| 23 | ** ktab   = narrayU nhashU karray* khash* | 
|---|
| 24 | ** karray = ktabk | 
|---|
| 25 | ** khash  = ktabk ktabk | 
|---|
| 26 | ** ktabk  = ktabtypeU { intU | (loU hiU) | strB* } | 
|---|
| 27 | ** | 
|---|
| 28 | ** B = 8 bit, H = 16 bit, W = 32 bit, U = ULEB128 of W, U0/U1 = ULEB128 of W+1 | 
|---|
| 29 | */ | 
|---|
| 30 |  | 
|---|
| 31 | /* Bytecode dump header. */ | 
|---|
| 32 | #define BCDUMP_HEAD1		0x1b | 
|---|
| 33 | #define BCDUMP_HEAD2		0x4c | 
|---|
| 34 | #define BCDUMP_HEAD3		0x4a | 
|---|
| 35 |  | 
|---|
| 36 | /* If you perform *any* kind of private modifications to the bytecode itself | 
|---|
| 37 | ** or to the dump format, you *must* set BCDUMP_VERSION to 0x80 or higher. | 
|---|
| 38 | */ | 
|---|
| 39 | #define BCDUMP_VERSION		1 | 
|---|
| 40 |  | 
|---|
| 41 | /* Compatibility flags. */ | 
|---|
| 42 | #define BCDUMP_F_BE		0x01 | 
|---|
| 43 | #define BCDUMP_F_STRIP		0x02 | 
|---|
| 44 | #define BCDUMP_F_FFI		0x04 | 
|---|
| 45 |  | 
|---|
| 46 | #define BCDUMP_F_KNOWN		(BCDUMP_F_FFI*2-1) | 
|---|
| 47 |  | 
|---|
| 48 | /* Type codes for the GC constants of a prototype. Plus length for strings. */ | 
|---|
| 49 | enum { | 
|---|
| 50 | BCDUMP_KGC_CHILD, BCDUMP_KGC_TAB, BCDUMP_KGC_I64, BCDUMP_KGC_U64, | 
|---|
| 51 | BCDUMP_KGC_COMPLEX, BCDUMP_KGC_STR | 
|---|
| 52 | }; | 
|---|
| 53 |  | 
|---|
| 54 | /* Type codes for the keys/values of a constant table. */ | 
|---|
| 55 | enum { | 
|---|
| 56 | BCDUMP_KTAB_NIL, BCDUMP_KTAB_FALSE, BCDUMP_KTAB_TRUE, | 
|---|
| 57 | BCDUMP_KTAB_INT, BCDUMP_KTAB_NUM, BCDUMP_KTAB_STR | 
|---|
| 58 | }; | 
|---|
| 59 |  | 
|---|
| 60 | /* -- Bytecode reader/writer ---------------------------------------------- */ | 
|---|
| 61 |  | 
|---|
| 62 | LJ_FUNC int lj_bcwrite(lua_State *L, GCproto *pt, lua_Writer writer, | 
|---|
| 63 | void *data, int strip); | 
|---|
| 64 | LJ_FUNC GCproto *lj_bcread(LexState *ls); | 
|---|
| 65 |  | 
|---|
| 66 | #endif | 
|---|
| 67 |  | 
|---|