Преглед на файлове

refactored token matcher

Kajetan Johannes Hammerle преди 3 години
родител
ревизия
c819c86638
променени са 1 файла, в които са добавени 17 реда и са изтрити 30 реда
  1. 17 30
      tokenizer/Token.c

+ 17 - 30
tokenizer/Token.c

@@ -69,37 +69,24 @@ const char* tGetName(Token token) {
     return "unknown";
 }
 
-static bool tEqual(const char* a, const char* b) {
-    return strcmp(a, b) == 0;
-}
+#define MATCH_TOKEN(tokenName, token)                                          \
+    if(strcmp(name, tokenName) == 0) {                                         \
+        return token;                                                          \
+    }
 
 Token tFromName(const char* name) {
-    if(tEqual(name, "print")) {
-        return T_PRINT;
-    } else if(tEqual(name, "null")) {
-        return T_NULL;
-    } else if(tEqual(name, "true")) {
-        return T_TRUE;
-    } else if(tEqual(name, "false")) {
-        return T_FALSE;
-    } else if(tEqual(name, "function")) {
-        return T_FUNCTION;
-    } else if(tEqual(name, "return")) {
-        return T_RETURN;
-    } else if(tEqual(name, "if")) {
-        return T_IF;
-    } else if(tEqual(name, "else")) {
-        return T_ELSE;
-    } else if(tEqual(name, "while")) {
-        return T_WHILE;
-    } else if(tEqual(name, "for")) {
-        return T_FOR;
-    } else if(tEqual(name, "break")) {
-        return T_BREAK;
-    } else if(tEqual(name, "continue")) {
-        return T_CONTINUE;
-    } else if(tEqual(name, "array")) {
-        return T_ARRAY;
-    }
+    MATCH_TOKEN("print", T_PRINT);
+    MATCH_TOKEN("null", T_NULL);
+    MATCH_TOKEN("true", T_TRUE);
+    MATCH_TOKEN("false", T_FALSE);
+    MATCH_TOKEN("function", T_FUNCTION);
+    MATCH_TOKEN("return", T_RETURN);
+    MATCH_TOKEN("if", T_IF);
+    MATCH_TOKEN("else", T_ELSE);
+    MATCH_TOKEN("while", T_WHILE);
+    MATCH_TOKEN("for", T_FOR);
+    MATCH_TOKEN("break", T_BREAK);
+    MATCH_TOKEN("continue", T_CONTINUE);
+    MATCH_TOKEN("array", T_ARRAY);
     return T_END;
 }