Operation.h 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. #ifndef OPERATION_H
  2. #define OPERATION_H
  3. #define OP_INTEGRAL(TYPE) OP_##TYPE##_INT, OP_##TYPE##_LONG
  4. #define OP_NUMBER(TYPE) OP_INTEGRAL(TYPE), OP_##TYPE##_FLOAT
  5. #define OP_TYPE(TYPE) OP_NUMBER(TYPE), OP_##TYPE##_BOOL
  6. #define OP_CHANGE_NUMBER(TYPE) \
  7. OP_PUSH_PRE_##TYPE##_CHANGE, OP_PUSH_POST_##TYPE##_CHANGE, \
  8. OP_##TYPE##_CHANGE
  9. typedef enum Operation {
  10. OP_NOTHING,
  11. OP_NUMBER(PUSH),
  12. OP_PUSH_TRUE,
  13. OP_PUSH_FALSE,
  14. OP_NUMBER(ADD),
  15. OP_NUMBER(SUB),
  16. OP_NUMBER(MUL),
  17. OP_NUMBER(DIV),
  18. OP_MOD_INT,
  19. OP_MOD_LONG,
  20. OP_NUMBER(INVERT_SIGN),
  21. OP_NUMBER(LESS),
  22. OP_NUMBER(GREATER),
  23. OP_NUMBER(EQUAL),
  24. OP_EQUAL_BOOL,
  25. OP_EQUAL_POINTER,
  26. OP_NOT,
  27. OP_AND,
  28. OP_OR,
  29. OP_INTEGRAL(BIT_NOT),
  30. OP_INTEGRAL(BIT_AND),
  31. OP_INTEGRAL(BIT_OR),
  32. OP_INTEGRAL(BIT_XOR),
  33. OP_INTEGRAL(LEFT_SHIFT),
  34. OP_INTEGRAL(RIGHT_SHIFT),
  35. OP_TYPE(PRINT),
  36. OP_PRINT_POINTER,
  37. OP_LINE,
  38. OP_GOTO,
  39. OP_IF_GOTO,
  40. OP_PEEK_FALSE_GOTO,
  41. OP_PEEK_TRUE_GOTO,
  42. OP_GOSUB,
  43. OP_RETURN,
  44. OP_TYPE(RETURN),
  45. OP_RETURN_POINTER,
  46. OP_RESERVE,
  47. OP_LOAD,
  48. OP_TYPE(LOAD),
  49. OP_TYPE(STORE),
  50. OP_DEREFERENCE_VAR,
  51. OP_REFERENCE,
  52. OP_DUPLICATE_REFERENCE,
  53. OP_ADD_REFERENCE,
  54. OP_NEW,
  55. OP_DELETE,
  56. OP_LENGTH,
  57. OP_STORE_POINTER,
  58. OP_INTEGRAL(PUSH_PRE_CHANGE),
  59. OP_INTEGRAL(PUSH_POST_CHANGE),
  60. OP_INTEGRAL(CHANGE),
  61. OP_FLOAT_TO_INT,
  62. OP_INT_TO_FLOAT,
  63. OP_INT_TO_LONG,
  64. OP_LONG_TO_INT,
  65. OP_FLOAT_TO_LONG,
  66. OP_LONG_TO_FLOAT,
  67. OP_CALL
  68. } Operation;
  69. #endif