Prechádzať zdrojové kódy

refactored typed operations

Kajetan Johannes Hammerle 3 rokov pred
rodič
commit
08b2a83c58
1 zmenil súbory, kde vykonal 19 pridanie a 32 odobranie
  1. 19 32
      Compiler.c

+ 19 - 32
Compiler.c

@@ -51,38 +51,25 @@ typedef struct {
     const char* name;
 } TypedOp;
 
-static const TypedOp TYPED_MUL = {OP_MUL_INT, OP_MUL_FLOAT, OP_NOTHING,
-                                  OP_NOTHING, "*"};
-static const TypedOp TYPED_DIV = {OP_DIV_INT, OP_DIV_FLOAT, OP_NOTHING,
-                                  OP_NOTHING, "/"};
-static const TypedOp TYPED_MOD = {OP_MOD_INT, OP_NOTHING, OP_NOTHING,
-                                  OP_NOTHING, "%"};
-static const TypedOp TYPED_ADD = {OP_ADD_INT, OP_ADD_FLOAT, OP_NOTHING,
-                                  OP_NOTHING, "+"};
-static const TypedOp TYPED_SUB = {OP_SUB_INT, OP_SUB_FLOAT, OP_NOTHING,
-                                  OP_NOTHING, "-"};
-static const TypedOp TYPED_LESS = {OP_LESS_INT, OP_LESS_FLOAT, OP_NOTHING,
-                                   OP_NOTHING, "<"};
-static const TypedOp TYPED_LESS_EQUAL = {OP_GREATER_INT, OP_GREATER_FLOAT,
-                                         OP_NOTHING, OP_NOTHING, "<="};
-static const TypedOp TYPED_GREATER = {OP_GREATER_INT, OP_GREATER_FLOAT,
-                                      OP_NOTHING, OP_NOTHING, ">"};
-static const TypedOp TYPED_GREATER_EQUAL = {OP_LESS_INT, OP_LESS_FLOAT,
-                                            OP_NOTHING, OP_NOTHING, ">="};
-static const TypedOp TYPED_EQUAL = {OP_EQUAL_INT, OP_EQUAL_FLOAT, OP_EQUAL_BOOL,
-                                    OP_EQUAL_POINTER, "=="};
-static const TypedOp TYPED_NOT_EQUAL = {OP_EQUAL_INT, OP_EQUAL_FLOAT,
-                                        OP_EQUAL_BOOL, OP_EQUAL_POINTER, "!="};
-static const TypedOp TYPED_BIT_OR = {OP_BIT_OR, OP_NOTHING, OP_NOTHING,
-                                     OP_NOTHING, "|"};
-static const TypedOp TYPED_BIT_XOR = {OP_BIT_XOR, OP_NOTHING, OP_NOTHING,
-                                      OP_NOTHING, "^"};
-static const TypedOp TYPED_BIT_AND = {OP_BIT_AND, OP_NOTHING, OP_NOTHING,
-                                      OP_NOTHING, "&"};
-static const TypedOp TYPED_LEFT_SHIFT = {OP_LEFT_SHIFT, OP_NOTHING, OP_NOTHING,
-                                         OP_NOTHING, "<<"};
-static const TypedOp TYPED_RIGHT_SHIFT = {OP_RIGHT_SHIFT, OP_NOTHING,
-                                          OP_NOTHING, OP_NOTHING, ">>"};
+#define TYPE_OP(NAME, INT, FLOAT, BOOL, POINTER, text)                         \
+    static const TypedOp TYPED_##NAME = {OP_##INT, OP_##FLOAT, OP_##BOOL,      \
+                                         OP_##POINTER, text};
+TYPE_OP(MUL, MUL_INT, MUL_FLOAT, NOTHING, NOTHING, "*")
+TYPE_OP(DIV, DIV_INT, DIV_FLOAT, NOTHING, NOTHING, "/")
+TYPE_OP(MOD, MOD_INT, NOTHING, NOTHING, NOTHING, "%")
+TYPE_OP(ADD, ADD_INT, ADD_FLOAT, NOTHING, NOTHING, "+")
+TYPE_OP(SUB, SUB_INT, SUB_FLOAT, NOTHING, NOTHING, "-")
+TYPE_OP(LESS, LESS_INT, LESS_FLOAT, NOTHING, NOTHING, "<")
+TYPE_OP(LESS_EQUAL, GREATER_INT, GREATER_FLOAT, NOTHING, NOTHING, "<=")
+TYPE_OP(GREATER, GREATER_INT, GREATER_FLOAT, NOTHING, NOTHING, ">")
+TYPE_OP(GREATER_EQUAL, LESS_INT, LESS_FLOAT, NOTHING, NOTHING, ">=")
+TYPE_OP(EQUAL, EQUAL_INT, EQUAL_FLOAT, EQUAL_BOOL, EQUAL_POINTER, "==")
+TYPE_OP(NOT_EQUAL, EQUAL_INT, EQUAL_FLOAT, EQUAL_BOOL, EQUAL_POINTER, "!=")
+TYPE_OP(BIT_OR, BIT_OR, NOTHING, NOTHING, NOTHING, "|")
+TYPE_OP(BIT_XOR, BIT_XOR, NOTHING, NOTHING, NOTHING, "^")
+TYPE_OP(BIT_AND, BIT_AND, NOTHING, NOTHING, NOTHING, "&")
+TYPE_OP(LEFT_SHIFT, LEFT_SHIFT, NOTHING, NOTHING, NOTHING, "<<")
+TYPE_OP(RIGHT_SHIFT, RIGHT_SHIFT, NOTHING, NOTHING, NOTHING, ">>")
 
 static void cError(const char* format, ...) {
     va_list args;