about summary refs log tree commit diff
path: root/boot/tree.c
diff options
context:
space:
mode:
authorMel <mel@rnrd.eu>2025-06-03 22:41:35 +0200
committerMel <mel@rnrd.eu>2025-06-03 22:41:35 +0200
commit8b655fe0f1d6589c9216a6244c067aec1d866be7 (patch)
tree4e6a9743b1c4a2e339e39fefc08340ed9fd824a0 /boot/tree.c
parent4940b308ca62257acb79dc4a5a240dc76c780a06 (diff)
downloadcatskill-8b655fe0f1d6589c9216a6244c067aec1d866be7.tar.zst
catskill-8b655fe0f1d6589c9216a6244c067aec1d866be7.zip
Range binary operation
Signed-off-by: Mel <mel@rnrd.eu>
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: