Imported from ../lua-1.0.tar.gz.
[lua.git] / opcode.h
blobb32969d5f455654b357ebb862747a1f50c3afba7
1 /*
2 ** opcode.h
3 ** TeCGraf - PUC-Rio
4 ** 16 Apr 92
5 */
7 #ifndef opcode_h
8 #define opcode_h
10 #ifndef STACKGAP
11 #define STACKGAP 128
12 #endif
14 #ifndef real
15 #define real float
16 #endif
18 typedef unsigned char Byte;
20 typedef unsigned short Word;
22 typedef enum
24 NOP,
25 PUSHNIL,
26 PUSH0, PUSH1, PUSH2,
27 PUSHBYTE,
28 PUSHWORD,
29 PUSHFLOAT,
30 PUSHSTRING,
31 PUSHLOCAL0, PUSHLOCAL1, PUSHLOCAL2, PUSHLOCAL3, PUSHLOCAL4,
32 PUSHLOCAL5, PUSHLOCAL6, PUSHLOCAL7, PUSHLOCAL8, PUSHLOCAL9,
33 PUSHLOCAL,
34 PUSHGLOBAL,
35 PUSHINDEXED,
36 PUSHMARK,
37 PUSHOBJECT,
38 STORELOCAL0, STORELOCAL1, STORELOCAL2, STORELOCAL3, STORELOCAL4,
39 STORELOCAL5, STORELOCAL6, STORELOCAL7, STORELOCAL8, STORELOCAL9,
40 STORELOCAL,
41 STOREGLOBAL,
42 STOREINDEXED0,
43 STOREINDEXED,
44 STOREFIELD,
45 ADJUST,
46 CREATEARRAY,
47 EQOP,
48 LTOP,
49 LEOP,
50 ADDOP,
51 SUBOP,
52 MULTOP,
53 DIVOP,
54 CONCOP,
55 MINUSOP,
56 NOTOP,
57 ONTJMP,
58 ONFJMP,
59 JMP,
60 UPJMP,
61 IFFJMP,
62 IFFUPJMP,
63 POP,
64 CALLFUNC,
65 RETCODE,
66 HALT,
67 SETFUNCTION,
68 SETLINE,
69 RESET
70 } OpCode;
72 typedef enum
74 T_MARK,
75 T_NIL,
76 T_NUMBER,
77 T_STRING,
78 T_ARRAY,
79 T_FUNCTION,
80 T_CFUNCTION,
81 T_USERDATA
82 } Type;
84 typedef void (*Cfunction) (void);
85 typedef int (*Input) (void);
86 typedef void (*Unput) (int );
88 typedef union
90 Cfunction f;
91 real n;
92 char *s;
93 Byte *b;
94 struct Hash *a;
95 void *u;
96 } Value;
98 typedef struct Object
100 Type tag;
101 Value value;
102 } Object;
104 typedef struct
106 char *name;
107 Object object;
108 } Symbol;
110 /* Macros to access structure members */
111 #define tag(o) ((o)->tag)
112 #define nvalue(o) ((o)->value.n)
113 #define svalue(o) ((o)->value.s)
114 #define bvalue(o) ((o)->value.b)
115 #define avalue(o) ((o)->value.a)
116 #define fvalue(o) ((o)->value.f)
117 #define uvalue(o) ((o)->value.u)
119 /* Macros to access symbol table */
120 #define s_name(i) (lua_table[i].name)
121 #define s_object(i) (lua_table[i].object)
122 #define s_tag(i) (tag(&s_object(i)))
123 #define s_nvalue(i) (nvalue(&s_object(i)))
124 #define s_svalue(i) (svalue(&s_object(i)))
125 #define s_bvalue(i) (bvalue(&s_object(i)))
126 #define s_avalue(i) (avalue(&s_object(i)))
127 #define s_fvalue(i) (fvalue(&s_object(i)))
128 #define s_uvalue(i) (uvalue(&s_object(i)))
131 /* Exported functions */
132 int lua_execute (Byte *pc);
133 void lua_markstack (void);
134 char *lua_strdup (char *l);
136 void lua_setinput (Input fn); /* from "lua.lex" module */
137 void lua_setunput (Unput fn); /* from "lua.lex" module */
138 char *lua_lasttext (void); /* from "lua.lex" module */
139 int lua_parse (void); /* from "lua.stx" module */
140 void lua_type (void);
141 void lua_obj2number (void);
142 void lua_print (void);
144 #endif