#ifndef OPERATION_H #define OPERATION_H #ifdef __cplusplus extern "C" { #endif #define OP_NUMBER(TYPE) OP_##TYPE##_INT, OP_##TYPE##_FLOAT #define OP_CHANGE_NUMBER(TYPE) \ OP_PUSH_PRE_##TYPE##_CHANGE, OP_PUSH_POST_##TYPE##_CHANGE, \ OP_##TYPE##_CHANGE typedef enum Operation { OP_NOTHING, OP_NUMBER(PUSH), OP_PUSH_TEXT, OP_NUMBER(ADD), OP_NUMBER(SUB), OP_NUMBER(MUL), OP_NUMBER(DIV), OP_MOD_INT, OP_NUMBER(INVERT_SIGN), OP_NUMBER(LESS), OP_NUMBER(LESS_EQUAL), OP_NUMBER(GREATER), OP_NUMBER(GREATER_EQUAL), OP_NUMBER(EQUAL), OP_NUMBER(NOT_EQUAL), OP_EQUAL_POINTER, OP_NOT_EQUAL_POINTER, OP_NOT, OP_AND, OP_OR, OP_BIT_NOT_INT, OP_BIT_AND_INT, OP_BIT_OR_INT, OP_BIT_XOR_INT, OP_LEFT_SHIFT_INT, OP_RIGHT_SHIFT_INT, OP_LINE, OP_GOTO, OP_IF_GOTO, OP_PEEK_FALSE_GOTO, OP_PEEK_TRUE_GOTO, OP_GOSUB, OP_RETURN, OP_NUMBER(RETURN), OP_RETURN_POINTER, OP_RESERVE, OP_GRESERVE, OP_PUSH_STRUCT_REFERENCE, OP_NUMBER(LOAD), OP_NUMBER(STORE), OP_DEREFERENCE_VAR, OP_DEREFERENCE_GVAR, OP_LOAD_ARRAY, OP_DUPLICATE_REFERENCE, OP_ADD_REFERENCE, OP_NEW, OP_LENGTH, OP_STORE_ARRAY, OP_PUSH_PRE_CHANGE_INT, OP_PUSH_POST_CHANGE_INT, OP_CHANGE_INT, OP_FLOAT_TO_INT, OP_INT_TO_FLOAT, OP_CALL } Operation; #ifdef __cplusplus } #endif #endif