ljx

FORK: LuaJIT with native 5.2 and 5.3 support
git clone https://git.neptards.moe/neptards/ljx.git
Log | Files | Refs | README

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