about summary refs log tree commit diff
path: root/boot/tree.c
diff options
context:
space:
mode:
Diffstat (limited to 'boot/tree.c')
-rw-r--r--boot/tree.c34
1 files changed, 23 insertions, 11 deletions
diff --git a/boot/tree.c b/boot/tree.c
index 6e7fd6a..39a1de4 100644
--- a/boot/tree.c
+++ b/boot/tree.c
@@ -65,6 +65,8 @@ enum Binary_Operation
     BINARY_AND,
     BINARY_OR,
 
+    BINARY_RANGE,
+
     BINARY_BITWISE_AND,
     BINARY_BITWISE_OR,
     BINARY_BITWISE_XOR,
@@ -120,6 +122,9 @@ binary_operation_from_token(const struct Token* token)
     case TOKEN_OR:
         return BINARY_OR;
 
+    case TOKEN_DOT_DOT:
+        return BINARY_RANGE;
+
     case TOKEN_AMPERSAND:
         return BINARY_BITWISE_AND;
     case TOKEN_PIPE:
@@ -185,36 +190,38 @@ binary_operation_precedence(enum Binary_Operation operation)
     case BINARY_ASSIGN_BITWISE_LEFT_SHIFT:
     case BINARY_ASSIGN_BITWISE_RIGHT_SHIFT:
         return 1;
-    case BINARY_OR:
+    case BINARY_RANGE:
         return 2;
-    case BINARY_AND:
+    case BINARY_OR:
         return 3;
-    case BINARY_BITWISE_OR:
+    case BINARY_AND:
         return 4;
-    case BINARY_BITWISE_XOR:
+    case BINARY_BITWISE_OR:
         return 5;
-    case BINARY_BITWISE_AND:
+    case BINARY_BITWISE_XOR:
         return 6;
+    case BINARY_BITWISE_AND:
+        return 7;
     case BINARY_EQUAL:
     case BINARY_NOT_EQUAL:
-        return 7;
+        return 8;
     case BINARY_GREATER_THAN:
     case BINARY_GREATER_THAN_EQUAL:
     case BINARY_LESS_THAN:
     case BINARY_LESS_THAN_EQUAL:
-        return 8;
+        return 9;
     case BINARY_BITWISE_LEFT_SHIFT:
     case BINARY_BITWISE_RIGHT_SHIFT:
-        return 9;
+        return 10;
     case BINARY_PLUS:
     case BINARY_MINUS:
-        return 10;
+        return 11;
     case BINARY_MULTIPLY:
     case BINARY_DIVIDE:
     case BINARY_MODULO:
-        return 11;
-    case BINARY_POWER:
         return 12;
+    case BINARY_POWER:
+        return 13;
         // strongest
 
     default:
@@ -248,6 +255,8 @@ binary_operation_associativity(enum Binary_Operation operation)
     case BINARY_ASSIGN_BITWISE_LEFT_SHIFT:
     case BINARY_POWER:
         return BINARY_ASSOCIATIVITY_RIGHT;
+    case BINARY_RANGE:
+        return BINARY_ASSOCIATIVITY_NONE;
     default:
         return BINARY_ASSOCIATIVITY_LEFT;
     }
@@ -287,6 +296,9 @@ binary_operation_to_string(enum Binary_Operation operation)
     case BINARY_OR:
         return "||";
 
+    case BINARY_RANGE:
+        return "..";
+
     case BINARY_BITWISE_AND:
         return "&";
     case BINARY_BITWISE_OR: