sqcompiler.h 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162
  1. /* see copyright notice in squirrel.h */
  2. #ifndef _SQCOMPILER_H_
  3. #define _SQCOMPILER_H_
  4. struct SQVM;
  5. #define SQ_KEYWORDS_LIST() \
  6. ENUM_TK(3WAYSCMP)\
  7. ENUM_TK(AND)\
  8. ENUM_TK(ARROW)\
  9. ENUM_TK(AS)\
  10. ENUM_TK(ATTR_CLOSE)\
  11. ENUM_TK(ATTR_OPEN)\
  12. ENUM_TK(BASE)\
  13. ENUM_TK(BIT_AND_EQ)\
  14. ENUM_TK(BIT_OR_EQ)\
  15. ENUM_TK(BIT_SHIFT_LEFT_EQ)\
  16. ENUM_TK(BIT_SHIFT_RIGHT_EQ)\
  17. ENUM_TK(BIT_XOR_EQ)\
  18. ENUM_TK(BREAK)\
  19. ENUM_TK(CASE)\
  20. ENUM_TK(CATCH)\
  21. ENUM_TK(CLASS)\
  22. ENUM_TK(CLONE)\
  23. ENUM_TK(CONST)\
  24. ENUM_TK(CONSTEXPR)\
  25. ENUM_TK(COMMENT_BLOCK)\
  26. ENUM_TK(COMMENT_LINE)\
  27. ENUM_TK(CONSTRUCTOR)\
  28. ENUM_TK(CONTINUE)\
  29. ENUM_TK(DECLARE)\
  30. ENUM_TK(DEFAULT)\
  31. ENUM_TK(DELETE)\
  32. ENUM_TK(DESTRUCTOR)\
  33. ENUM_TK(DIVEQ)\
  34. ENUM_TK(DO)\
  35. ENUM_TK(DOUBLE_COLON)\
  36. ENUM_TK(ELSE)\
  37. ENUM_TK(ENUM)\
  38. ENUM_TK(EQ)\
  39. ENUM_TK(EQ_IDENTITY)\
  40. ENUM_TK(EXTENDS)\
  41. ENUM_TK(EXTERN) \
  42. ENUM_TK(FALSE)\
  43. ENUM_TK(__FILE__)\
  44. ENUM_TK(FLOAT)\
  45. ENUM_TK(FOR)\
  46. ENUM_TK(FOREACH)\
  47. ENUM_TK(FRIEND)\
  48. ENUM_TK(__FUNCTION__)\
  49. ENUM_TK(FUNCTION)\
  50. ENUM_TK(GE)\
  51. ENUM_TK(GOTO)\
  52. ENUM_TK(IDENTIFIER)\
  53. ENUM_TK(IF)\
  54. ENUM_TK(IGNORE)\
  55. ENUM_TK(IN)\
  56. ENUM_TK(INLINE)\
  57. ENUM_TK(INSTANCEOF)\
  58. ENUM_TK(INTEGER)\
  59. ENUM_TK(INTERFACE)\
  60. ENUM_TK(UNSIGNED_INTEGER)\
  61. ENUM_TK(UNSIGNED_LONG_INTEGER)\
  62. ENUM_TK(LONG_INTEGER)\
  63. ENUM_TK(UNSIGNED_LONG_LONG_INTEGER)\
  64. ENUM_TK(LONG_LONG_INTEGER)\
  65. ENUM_TK(UNSIGNED_SHORT_INTEGER)\
  66. ENUM_TK(SHORT_INTEGER)\
  67. ENUM_TK(LE)\
  68. ENUM_TK(__LINE__)\
  69. ENUM_TK(LOCAL)\
  70. ENUM_TK(LOCAL_ANY_T)\
  71. ENUM_TK(LOCAL_ARRAY_T)\
  72. ENUM_TK(LOCAL_BOOL_T)\
  73. ENUM_TK(LOCAL_CHAR_T)\
  74. ENUM_TK(LOCAL_DOUBLE_T)\
  75. ENUM_TK(LOCAL_FLOAT_T)\
  76. ENUM_TK(LOCAL_INT16_T)\
  77. ENUM_TK(LOCAL_INT32_T)\
  78. ENUM_TK(LOCAL_INT64_T)\
  79. ENUM_TK(LOCAL_INT8_T)\
  80. ENUM_TK(LOCAL_INT_T)\
  81. ENUM_TK(LOCAL_LONG_DOUBLE_T)\
  82. ENUM_TK(LOCAL_NUMBER_T)\
  83. ENUM_TK(LOCAL_SIZE_T)\
  84. ENUM_TK(LOCAL_SSIZE_T)\
  85. ENUM_TK(LOCAL_STRING_T)\
  86. ENUM_TK(LOCAL_TABLE_T)\
  87. ENUM_TK(LOCAL_UINT16_T)\
  88. ENUM_TK(LOCAL_UINT32_T)\
  89. ENUM_TK(LOCAL_UINT64_T)\
  90. ENUM_TK(LOCAL_UINT8_T)\
  91. ENUM_TK(LOCAL_UINT_T)\
  92. ENUM_TK(LOCAL_VOIDPTR_T)\
  93. ENUM_TK(LOCAL_WCHAR_T)\
  94. ENUM_TK(LOCAL_WEAKREF_T)\
  95. ENUM_TK(MINUSEQ)\
  96. ENUM_TK(MINUSMINUS)\
  97. ENUM_TK(MODEQ)\
  98. ENUM_TK(MODULO)\
  99. ENUM_TK(MULEQ)\
  100. ENUM_TK(NE)\
  101. ENUM_TK(NE_IDENTITY)\
  102. ENUM_TK(NEWSLOT)\
  103. ENUM_TK(NOEXCEPT)\
  104. ENUM_TK(NULL)\
  105. ENUM_TK(OR)\
  106. ENUM_TK(PLUSEQ)\
  107. ENUM_TK(PLUSPLUS)\
  108. ENUM_TK(PRAGMA)\
  109. ENUM_TK(PRIVATE)\
  110. ENUM_TK(PROTECTED)\
  111. ENUM_TK(PUBLIC)\
  112. ENUM_TK(RAWCALL)\
  113. ENUM_TK(RESUME)\
  114. ENUM_TK(RETURN)\
  115. ENUM_TK(SHIFTL)\
  116. ENUM_TK(SHIFTR)\
  117. ENUM_TK(STATIC)\
  118. ENUM_TK(STRING_LITERAL)\
  119. ENUM_TK(STRUCT) \
  120. ENUM_TK(SWITCH)\
  121. ENUM_TK(TEMPLATE)\
  122. ENUM_TK(THIS)\
  123. ENUM_TK(THROW)\
  124. ENUM_TK(TYPEDEF)\
  125. ENUM_TK(TRUE)\
  126. ENUM_TK(TRY)\
  127. ENUM_TK(TYPEOF)\
  128. ENUM_TK(UMINUS)\
  129. ENUM_TK(UNSAFE)\
  130. ENUM_TK(USING)\
  131. ENUM_TK(USHIFTR)\
  132. ENUM_TK(VARPARAMS)\
  133. ENUM_TK(VIRTUAL)\
  134. ENUM_TK(VOID)\
  135. ENUM_TK(VOLATILE)\
  136. ENUM_TK(WHILE)\
  137. ENUM_TK(YIELD)
  138. //ENUM_TK(VARGC)
  139. //ENUM_TK(VARGV)
  140. #define ENUM_TK(tk) TK_##tk,
  141. enum SQKeywordsEnum {
  142. TK_FIRST_ENUM_TOKEN = 258,
  143. /*
  144. the above token is only for internal purposes
  145. like calculate total enum_tokens = TK_LAST_ENUM_TOKEN - TK_FIRST_ENUM_TOKEN -1
  146. */
  147. SQ_KEYWORDS_LIST()
  148. /*
  149. the next token is only for internal purposes
  150. like calculate total enum_tokens = TK_LAST_ENUM_TOKEN - TK_FIRST_ENUM_TOKEN -1
  151. */
  152. TK_LAST_ENUM_TOKEN
  153. };
  154. #undef ENUM_TK
  155. typedef void(*CompilerErrorFunc)(void *ud, const SQChar *s);
  156. bool Compile(SQVM *vm, SQLEXREADFUNC rg, SQUserPointer up, const SQChar *sourcename, SQObjectPtr &out,
  157. bool raiseerror, bool lineinfo, bool show_warnings, SQInteger max_nested_includes=10);
  158. #endif //_SQCOMPILER_H_