Subversion Repositories Kolibri OS

Rev

Go to most recent revision | Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
4680 right-hear 1
/*
2
** opcode.h
3
** TeCGraf - PUC-Rio
4
** 16 Apr 92
5
*/
6
 
7
#ifndef opcode_h
8
#define opcode_h
9
 
10
#ifndef STACKGAP
11
#define STACKGAP	128
12
#endif
13
 
14
#ifndef real
15
#define real float
16
#endif
17
 
18
typedef unsigned char  Byte;
19
 
20
typedef unsigned short Word;
21
 
22
typedef enum
23
{
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;
71
 
72
typedef enum
73
{
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;
83
 
84
typedef void (*Cfunction) (void);
85
typedef int  (*Input) (void);
86
typedef void (*Unput) (int );
87
 
88
typedef union
89
{
90
 Cfunction 	 f;
91
 real    	 n;
92
 char      	*s;
93
 Byte      	*b;
94
 struct Hash    *a;
95
 void           *u;
96
} Value;
97
 
98
typedef struct Object
99
{
100
 Type  tag;
101
 Value value;
102
} Object;
103
 
104
typedef struct
105
{
106
 char   *name;
107
 Object  object;
108
} Symbol;
109
 
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)
118
 
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)))
129
 
130
 
131
/* Exported functions */
132
int     lua_execute   (Byte *pc);
133
void    lua_markstack (void);
134
char   *lua_strdup (char *l);
135
 
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);
143
 
144
#endif