lua/opcode.h

167 lines
3.1 KiB
C
Raw Normal View History

1993-07-28 17:18:00 +04:00
/*
** TeCGraf - PUC-Rio
** $Id: opcode.h,v 3.6 1994/11/09 18:10:58 roberto Exp roberto $
1993-07-28 17:18:00 +04:00
*/
#ifndef opcode_h
#define opcode_h
#include "lua.h"
1993-07-28 17:18:00 +04:00
#ifndef STACKGAP
#define STACKGAP 128
#endif
#ifndef real
#define real float
#endif
#define FIELDS_PER_FLUSH 40
#define MAX_TEMPS 20
1993-07-28 17:18:00 +04:00
typedef unsigned char Byte;
typedef unsigned short Word;
typedef signed long Long;
typedef union
{
struct {char c1; char c2;} m;
Word w;
} CodeWord;
typedef union
{
struct {char c1; char c2; char c3; char c4;} m;
float f;
} CodeFloat;
typedef union
{
struct {char c1; char c2; char c3; char c4;} m;
Byte *b;
} CodeCode;
1993-07-28 17:18:00 +04:00
typedef enum
{
PUSHNIL,
PUSH0, PUSH1, PUSH2,
PUSHBYTE,
PUSHWORD,
PUSHFLOAT,
PUSHSTRING,
PUSHFUNCTION,
1993-07-28 17:18:00 +04:00
PUSHLOCAL0, PUSHLOCAL1, PUSHLOCAL2, PUSHLOCAL3, PUSHLOCAL4,
PUSHLOCAL5, PUSHLOCAL6, PUSHLOCAL7, PUSHLOCAL8, PUSHLOCAL9,
PUSHLOCAL,
PUSHGLOBAL,
PUSHINDEXED,
PUSHSELF,
1993-07-28 17:18:00 +04:00
STORELOCAL0, STORELOCAL1, STORELOCAL2, STORELOCAL3, STORELOCAL4,
STORELOCAL5, STORELOCAL6, STORELOCAL7, STORELOCAL8, STORELOCAL9,
STORELOCAL,
STOREGLOBAL,
STOREINDEXED0,
STOREINDEXED,
STORELIST0,
STORELIST,
STORERECORD,
ADJUST0,
1993-07-28 17:18:00 +04:00
ADJUST,
CREATEARRAY,
EQOP,
LTOP,
LEOP,
1994-11-06 18:35:04 +03:00
GTOP,
GEOP,
1993-07-28 17:18:00 +04:00
ADDOP,
SUBOP,
MULTOP,
DIVOP,
POWOP,
1993-07-28 17:18:00 +04:00
CONCOP,
MINUSOP,
NOTOP,
ONTJMP,
ONFJMP,
JMP,
UPJMP,
IFFJMP,
IFFUPJMP,
POP,
CALLFUNC,
RETCODE0,
1993-07-28 17:18:00 +04:00
RETCODE,
SETFUNCTION,
SETLINE,
RESET
} OpCode;
#define MULT_RET 255
1993-07-28 17:18:00 +04:00
typedef void (*Cfunction) (void);
typedef int (*Input) (void);
typedef union
{
Cfunction f;
real n;
char *s;
Byte *b;
1993-07-28 17:18:00 +04:00
struct Hash *a;
void *u;
} Value;
typedef struct Object
{
1994-11-07 18:20:56 +03:00
lua_Type tag;
1993-07-28 17:18:00 +04:00
Value value;
} Object;
typedef struct
{
Object object;
} Symbol;
/* Macros to access structure members */
#define tag(o) ((o)->tag)
#define nvalue(o) ((o)->value.n)
#define svalue(o) ((o)->value.s)
#define bvalue(o) ((o)->value.b)
#define avalue(o) ((o)->value.a)
#define fvalue(o) ((o)->value.f)
#define uvalue(o) ((o)->value.u)
/* Macros to access symbol table */
#define s_object(i) (lua_table[i].object)
#define s_tag(i) (tag(&s_object(i)))
#define s_nvalue(i) (nvalue(&s_object(i)))
#define s_svalue(i) (svalue(&s_object(i)))
#define s_bvalue(i) (bvalue(&s_object(i)))
#define s_avalue(i) (avalue(&s_object(i)))
#define s_fvalue(i) (fvalue(&s_object(i)))
#define s_uvalue(i) (uvalue(&s_object(i)))
#define get_word(code,pc) {code.m.c1 = *pc++; code.m.c2 = *pc++;}
#define get_float(code,pc) {code.m.c1 = *pc++; code.m.c2 = *pc++;\
code.m.c3 = *pc++; code.m.c4 = *pc++;}
#define get_code(code,pc) {code.m.c1 = *pc++; code.m.c2 = *pc++;\
code.m.c3 = *pc++; code.m.c4 = *pc++;}
1993-07-28 17:18:00 +04:00
/* Exported functions */
char *lua_strdup (char *l);
void lua_setinput (Input fn); /* from "lex.c" module */
char *lua_lasttext (void); /* from "lex.c" module */
1994-11-04 13:47:49 +03:00
int yylex (void); /* from "lex.c" module */
1994-11-09 21:10:58 +03:00
void lua_parse (Byte **code); /* from "lua.stx" module */
void lua_travstack (void (*fn)(Object *));
1994-11-07 19:34:44 +03:00
Object *luaI_Address (lua_Object o);
void luaI_pushobject (Object *o);
1993-07-28 17:18:00 +04:00
#endif