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