Imported from ../lua-2.4.tar.gz.
[lua.git] / src / opcode.h
blobd42ff3ee84bb91ed45e89c5c900204162765c48e
1 /*
2 ** TeCGraf - PUC-Rio
3 ** $Id: opcode.h,v 3.20 1996/03/15 13:13:13 roberto Exp $
4 */
6 #ifndef opcode_h
7 #define opcode_h
9 #include "lua.h"
10 #include "types.h"
11 #include "tree.h"
12 #include "func.h"
15 #define FIELDS_PER_FLUSH 40
18 typedef enum
20 PUSHNIL,
21 PUSH0, PUSH1, PUSH2,
22 PUSHBYTE,
23 PUSHWORD,
24 PUSHFLOAT,
25 PUSHSTRING,
26 PUSHFUNCTION,
27 PUSHLOCAL0, PUSHLOCAL1, PUSHLOCAL2, PUSHLOCAL3, PUSHLOCAL4,
28 PUSHLOCAL5, PUSHLOCAL6, PUSHLOCAL7, PUSHLOCAL8, PUSHLOCAL9,
29 PUSHLOCAL,
30 PUSHGLOBAL,
31 PUSHINDEXED,
32 PUSHSELF,
33 STORELOCAL0, STORELOCAL1, STORELOCAL2, STORELOCAL3, STORELOCAL4,
34 STORELOCAL5, STORELOCAL6, STORELOCAL7, STORELOCAL8, STORELOCAL9,
35 STORELOCAL,
36 STOREGLOBAL,
37 STOREINDEXED0,
38 STOREINDEXED,
39 STORELIST0,
40 STORELIST,
41 STORERECORD,
42 ADJUST0,
43 ADJUST,
44 CREATEARRAY,
45 EQOP,
46 LTOP,
47 LEOP,
48 GTOP,
49 GEOP,
50 ADDOP,
51 SUBOP,
52 MULTOP,
53 DIVOP,
54 POWOP,
55 CONCOP,
56 MINUSOP,
57 NOTOP,
58 ONTJMP,
59 ONFJMP,
60 JMP,
61 UPJMP,
62 IFFJMP,
63 IFFUPJMP,
64 POP,
65 CALLFUNC,
66 RETCODE0,
67 RETCODE,
68 SETLINE
69 } OpCode;
71 #define MULT_RET 255
74 typedef union
76 lua_CFunction f;
77 real n;
78 TaggedString *ts;
79 TFunc *tf;
80 struct Hash *a;
81 void *u;
82 int i;
83 } Value;
85 typedef struct Object
87 lua_Type tag;
88 Value value;
89 } Object;
92 /* Macros to access structure members */
93 #define tag(o) ((o)->tag)
94 #define nvalue(o) ((o)->value.n)
95 #define svalue(o) ((o)->value.ts->str)
96 #define tsvalue(o) ((o)->value.ts)
97 #define avalue(o) ((o)->value.a)
98 #define fvalue(o) ((o)->value.f)
99 #define uvalue(o) ((o)->value.u)
101 /* Macros to access symbol table */
102 #define s_object(i) (lua_table[i].object)
103 #define s_tag(i) (tag(&s_object(i)))
104 #define s_nvalue(i) (nvalue(&s_object(i)))
105 #define s_svalue(i) (svalue(&s_object(i)))
106 #define s_avalue(i) (avalue(&s_object(i)))
107 #define s_fvalue(i) (fvalue(&s_object(i)))
108 #define s_uvalue(i) (uvalue(&s_object(i)))
110 typedef union
112 struct {Byte c1; Byte c2;} m;
113 Word w;
114 } CodeWord;
115 #define get_word(code,pc) {code.m.c1 = *pc++; code.m.c2 = *pc++;}
117 typedef union
119 struct {Byte c1; Byte c2; Byte c3; Byte c4;} m;
120 float f;
121 } CodeFloat;
122 #define get_float(code,pc) {code.m.c1 = *pc++; code.m.c2 = *pc++;\
123 code.m.c3 = *pc++; code.m.c4 = *pc++;}
125 typedef union
127 struct {Byte c1; Byte c2; Byte c3; Byte c4;} m;
128 TFunc *tf;
129 } CodeCode;
130 #define get_code(code,pc) {code.m.c1 = *pc++; code.m.c2 = *pc++;\
131 code.m.c3 = *pc++; code.m.c4 = *pc++;}
134 /* Exported functions */
135 void lua_parse (TFunc *tf); /* from "lua.stx" module */
136 void luaI_codedebugline (int line); /* from "lua.stx" module */
137 void lua_travstack (int (*fn)(Object *));
138 Object *luaI_Address (lua_Object o);
139 void luaI_pushobject (Object *o);
140 void luaI_gcFB (Object *o);
141 int luaI_dorun (TFunc *tf);
143 #endif