opcode.h 2.9 KB

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