root/lj_bcdump.h

/* [<][>][^][v][top][bottom][index][help] */

INCLUDED FROM


   1 /*
   2 ** Bytecode dump definitions.
   3 ** Copyright (C) 2005-2017 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

/* [<][>][^][v][top][bottom][index][help] */