| 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 | |