lj_bcdump.h (2011B)
1 /* 2 ** Bytecode dump definitions. 3 ** Copyright (C) 2005-2016 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 2 40 41 /* Compatibility flags. */ 42 #define BCDUMP_F_BE 0x01 43 #define BCDUMP_F_STRIP 0x02 44 #define BCDUMP_F_FFI 0x04 45 #define BCDUMP_F_FR2 0x08 46 47 #define BCDUMP_F_KNOWN (BCDUMP_F_FR2*2-1) 48 49 /* Type codes for the GC constants of a prototype. Plus length for strings. */ 50 enum { 51 BCDUMP_KGC_CHILD, BCDUMP_KGC_TAB, BCDUMP_KGC_I64, BCDUMP_KGC_U64, 52 BCDUMP_KGC_COMPLEX, BCDUMP_KGC_STR 53 }; 54 55 /* Type codes for the keys/values of a constant table. */ 56 enum { 57 BCDUMP_KTAB_NIL, BCDUMP_KTAB_FALSE, BCDUMP_KTAB_TRUE, 58 BCDUMP_KTAB_INT, BCDUMP_KTAB_NUM, BCDUMP_KTAB_STR 59 }; 60 61 /* -- Bytecode reader/writer ---------------------------------------------- */ 62 63 LJ_FUNC int lj_bcwrite(lua_State *L, GCproto *pt, lua_Writer writer, 64 void *data, int strip); 65 LJ_FUNC GCproto *lj_bcread_proto(LexState *ls); 66 LJ_FUNC GCproto *lj_bcread(LexState *ls); 67 68 #endif