opcode.h 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143
  1. /*
  2. ** TeCGraf - PUC-Rio
  3. ** $Id: opcode.h,v 3.19 1996/03/06 13:11:23 roberto Exp $
  4. */
  5. #ifndef opcode_h
  6. #define opcode_h
  7. #include "lua.h"
  8. #include "types.h"
  9. #include "tree.h"
  10. #include "func.h"
  11. #define FIELDS_PER_FLUSH 40
  12. typedef enum
  13. {
  14. PUSHNIL,
  15. PUSH0, PUSH1, PUSH2,
  16. PUSHBYTE,
  17. PUSHWORD,
  18. PUSHFLOAT,
  19. PUSHSTRING,
  20. PUSHFUNCTION,
  21. PUSHLOCAL0, PUSHLOCAL1, PUSHLOCAL2, PUSHLOCAL3, PUSHLOCAL4,
  22. PUSHLOCAL5, PUSHLOCAL6, PUSHLOCAL7, PUSHLOCAL8, PUSHLOCAL9,
  23. PUSHLOCAL,
  24. PUSHGLOBAL,
  25. PUSHINDEXED,
  26. PUSHSELF,
  27. STORELOCAL0, STORELOCAL1, STORELOCAL2, STORELOCAL3, STORELOCAL4,
  28. STORELOCAL5, STORELOCAL6, STORELOCAL7, STORELOCAL8, STORELOCAL9,
  29. STORELOCAL,
  30. STOREGLOBAL,
  31. STOREINDEXED0,
  32. STOREINDEXED,
  33. STORELIST0,
  34. STORELIST,
  35. STORERECORD,
  36. ADJUST0,
  37. ADJUST,
  38. CREATEARRAY,
  39. EQOP,
  40. LTOP,
  41. LEOP,
  42. GTOP,
  43. GEOP,
  44. ADDOP,
  45. SUBOP,
  46. MULTOP,
  47. DIVOP,
  48. POWOP,
  49. CONCOP,
  50. MINUSOP,
  51. NOTOP,
  52. ONTJMP,
  53. ONFJMP,
  54. JMP,
  55. UPJMP,
  56. IFFJMP,
  57. IFFUPJMP,
  58. POP,
  59. CALLFUNC,
  60. RETCODE0,
  61. RETCODE,
  62. SETLINE
  63. } OpCode;
  64. #define MULT_RET 255
  65. typedef union
  66. {
  67. lua_CFunction f;
  68. real n;
  69. TaggedString *ts;
  70. TFunc *tf;
  71. struct Hash *a;
  72. void *u;
  73. int i;
  74. } Value;
  75. typedef struct Object
  76. {
  77. lua_Type tag;
  78. Value value;
  79. } Object;
  80. /* Macros to access structure members */
  81. #define tag(o) ((o)->tag)
  82. #define nvalue(o) ((o)->value.n)
  83. #define svalue(o) ((o)->value.ts->str)
  84. #define tsvalue(o) ((o)->value.ts)
  85. #define avalue(o) ((o)->value.a)
  86. #define fvalue(o) ((o)->value.f)
  87. #define uvalue(o) ((o)->value.u)
  88. /* Macros to access symbol table */
  89. #define s_object(i) (lua_table[i].object)
  90. #define s_tag(i) (tag(&s_object(i)))
  91. #define s_nvalue(i) (nvalue(&s_object(i)))
  92. #define s_svalue(i) (svalue(&s_object(i)))
  93. #define s_avalue(i) (avalue(&s_object(i)))
  94. #define s_fvalue(i) (fvalue(&s_object(i)))
  95. #define s_uvalue(i) (uvalue(&s_object(i)))
  96. typedef union
  97. {
  98. struct {Byte c1; Byte c2;} m;
  99. Word w;
  100. } CodeWord;
  101. #define get_word(code,pc) {code.m.c1 = *pc++; code.m.c2 = *pc++;}
  102. typedef union
  103. {
  104. struct {Byte c1; Byte c2; Byte c3; Byte c4;} m;
  105. float f;
  106. } CodeFloat;
  107. #define get_float(code,pc) {code.m.c1 = *pc++; code.m.c2 = *pc++;\
  108. code.m.c3 = *pc++; code.m.c4 = *pc++;}
  109. typedef union
  110. {
  111. struct {Byte c1; Byte c2; Byte c3; Byte c4;} m;
  112. TFunc *tf;
  113. } CodeCode;
  114. #define get_code(code,pc) {code.m.c1 = *pc++; code.m.c2 = *pc++;\
  115. code.m.c3 = *pc++; code.m.c4 = *pc++;}
  116. /* Exported functions */
  117. void lua_parse (TFunc *tf); /* from "lua.stx" module */
  118. void luaI_codedebugline (int line); /* from "lua.stx" module */
  119. void lua_travstack (int (*fn)(Object *));
  120. Object *luaI_Address (lua_Object o);
  121. void luaI_pushobject (Object *o);
  122. void luaI_gcFB (Object *o);
  123. int luaI_dorun (TFunc *tf);
  124. #endif