opcode.h 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173
  1. /*
  2. ** TeCGraf - PUC-Rio
  3. ** $Id: opcode.h,v 2.2 1994/07/19 21:27:18 celes Exp celes $
  4. */
  5. #ifndef opcode_h
  6. #define opcode_h
  7. #ifndef STACKGAP
  8. #define STACKGAP 128
  9. #endif
  10. #ifndef real
  11. #define real float
  12. #endif
  13. #define FIELDS_PER_FLUSH 40
  14. typedef unsigned char Byte;
  15. typedef unsigned short Word;
  16. typedef signed long Long;
  17. typedef union
  18. {
  19. struct {char c1; char c2;} m;
  20. Word w;
  21. } CodeWord;
  22. typedef union
  23. {
  24. struct {char c1; char c2; char c3; char c4;} m;
  25. float f;
  26. } CodeFloat;
  27. typedef union
  28. {
  29. struct {char c1; char c2; char c3; char c4;} m;
  30. Byte *b;
  31. } CodeCode;
  32. typedef enum
  33. {
  34. PUSHNIL,
  35. PUSH0, PUSH1, PUSH2,
  36. PUSHBYTE,
  37. PUSHWORD,
  38. PUSHFLOAT,
  39. PUSHSTRING,
  40. PUSHFUNCTION,
  41. PUSHLOCAL0, PUSHLOCAL1, PUSHLOCAL2, PUSHLOCAL3, PUSHLOCAL4,
  42. PUSHLOCAL5, PUSHLOCAL6, PUSHLOCAL7, PUSHLOCAL8, PUSHLOCAL9,
  43. PUSHLOCAL,
  44. PUSHGLOBAL,
  45. PUSHINDEXED,
  46. PUSHMARK,
  47. PUSHOBJECT,
  48. STORELOCAL0, STORELOCAL1, STORELOCAL2, STORELOCAL3, STORELOCAL4,
  49. STORELOCAL5, STORELOCAL6, STORELOCAL7, STORELOCAL8, STORELOCAL9,
  50. STORELOCAL,
  51. STOREGLOBAL,
  52. STOREINDEXED0,
  53. STOREINDEXED,
  54. STORELIST0,
  55. STORELIST,
  56. STORERECORD,
  57. ADJUST,
  58. CREATEARRAY,
  59. EQOP,
  60. LTOP,
  61. LEOP,
  62. ADDOP,
  63. SUBOP,
  64. MULTOP,
  65. DIVOP,
  66. CONCOP,
  67. MINUSOP,
  68. NOTOP,
  69. ONTJMP,
  70. ONFJMP,
  71. JMP,
  72. UPJMP,
  73. IFFJMP,
  74. IFFUPJMP,
  75. POP,
  76. CALLFUNC,
  77. RETCODE,
  78. HALT,
  79. SETFUNCTION,
  80. SETLINE,
  81. RESET
  82. } OpCode;
  83. typedef enum
  84. {
  85. T_MARK,
  86. T_NIL,
  87. T_NUMBER,
  88. T_STRING,
  89. T_ARRAY,
  90. T_FUNCTION,
  91. T_CFUNCTION,
  92. T_USERDATA
  93. } Type;
  94. typedef void (*Cfunction) (void);
  95. typedef int (*Input) (void);
  96. typedef union
  97. {
  98. Cfunction f;
  99. real n;
  100. char *s;
  101. Byte *b;
  102. struct Hash *a;
  103. void *u;
  104. } Value;
  105. typedef struct Object
  106. {
  107. Type tag;
  108. Value value;
  109. } Object;
  110. typedef struct
  111. {
  112. Object object;
  113. } Symbol;
  114. /* Macros to access structure members */
  115. #define tag(o) ((o)->tag)
  116. #define nvalue(o) ((o)->value.n)
  117. #define svalue(o) ((o)->value.s)
  118. #define bvalue(o) ((o)->value.b)
  119. #define avalue(o) ((o)->value.a)
  120. #define fvalue(o) ((o)->value.f)
  121. #define uvalue(o) ((o)->value.u)
  122. /* Macros to access symbol table */
  123. #define s_object(i) (lua_table[i].object)
  124. #define s_tag(i) (tag(&s_object(i)))
  125. #define s_nvalue(i) (nvalue(&s_object(i)))
  126. #define s_svalue(i) (svalue(&s_object(i)))
  127. #define s_bvalue(i) (bvalue(&s_object(i)))
  128. #define s_avalue(i) (avalue(&s_object(i)))
  129. #define s_fvalue(i) (fvalue(&s_object(i)))
  130. #define s_uvalue(i) (uvalue(&s_object(i)))
  131. #define get_word(code,pc) {code.m.c1 = *pc++; code.m.c2 = *pc++;}
  132. #define get_float(code,pc) {code.m.c1 = *pc++; code.m.c2 = *pc++;\
  133. code.m.c3 = *pc++; code.m.c4 = *pc++;}
  134. #define get_code(code,pc) {code.m.c1 = *pc++; code.m.c2 = *pc++;\
  135. code.m.c3 = *pc++; code.m.c4 = *pc++;}
  136. /* Exported functions */
  137. int lua_execute (Byte *pc);
  138. void lua_markstack (void);
  139. char *lua_strdup (char *l);
  140. void lua_setinput (Input fn); /* from "lex.c" module */
  141. char *lua_lasttext (void); /* from "lex.c" module */
  142. int lua_parse (void); /* from "lua.stx" module */
  143. void lua_type (void);
  144. void lua_obj2number (void);
  145. void lua_print (void);
  146. void lua_internaldofile (void);
  147. void lua_internaldostring (void);
  148. void lua_travstack (void (*fn)(Object *));
  149. #endif