2 ** Bytecode dump definitions.
3 ** Copyright (C) 2005-2023 Mike Pall. See Copyright Notice in luajit.h
12 /* -- Bytecode dump format ------------------------------------------------ */
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*
25 ** khash = ktabk ktabk
26 ** ktabk = ktabtypeU { intU | (loU hiU) | strB* }
28 ** B = 8 bit, H = 16 bit, W = 32 bit, U = ULEB128 of W, U0/U1 = ULEB128 of W+1
31 /* Bytecode dump header. */
32 #define BCDUMP_HEAD1 0x1b
33 #define BCDUMP_HEAD2 0x4c
34 #define BCDUMP_HEAD3 0x4a
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.
39 #define BCDUMP_VERSION 2
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
47 #define BCDUMP_F_KNOWN (BCDUMP_F_FR2*2-1)
49 #define BCDUMP_F_DETERMINISTIC 0x80000000
51 /* Type codes for the GC constants of a prototype. Plus length for strings. */
53 BCDUMP_KGC_CHILD
, BCDUMP_KGC_TAB
, BCDUMP_KGC_I64
, BCDUMP_KGC_U64
,
54 BCDUMP_KGC_COMPLEX
, BCDUMP_KGC_STR
57 /* Type codes for the keys/values of a constant table. */
59 BCDUMP_KTAB_NIL
, BCDUMP_KTAB_FALSE
, BCDUMP_KTAB_TRUE
,
60 BCDUMP_KTAB_INT
, BCDUMP_KTAB_NUM
, BCDUMP_KTAB_STR
63 /* -- Bytecode reader/writer ---------------------------------------------- */
65 LJ_FUNC
int lj_bcwrite(lua_State
*L
, GCproto
*pt
, lua_Writer writer
,
66 void *data
, uint32_t flags
);
67 LJ_FUNC GCproto
*lj_bcread_proto(LexState
*ls
);
68 LJ_FUNC GCproto
*lj_bcread(LexState
*ls
);