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.c38
1 files changed, 37 insertions, 1 deletions
diff --git a/boot/tree.c b/boot/tree.c
index 07b96a3..e0bb4ec 100644
--- a/boot/tree.c
+++ b/boot/tree.c
@@ -361,6 +361,41 @@ binary_operation_to_string(enum Binary_Operation operation)
     }
 }
 
+// turn a compound-assign operator into a simple binary operator.
+// returns none if the operator is not a compound.
+enum Binary_Operation
+binary_operation_strip_assign(enum Binary_Operation operation)
+{
+    switch (operation) {
+    case BINARY_ASSIGN_PLUS:
+        return BINARY_PLUS;
+    case BINARY_ASSIGN_MINUS:
+        return BINARY_MINUS;
+    case BINARY_ASSIGN_MULTIPLY:
+        return BINARY_MULTIPLY;
+    case BINARY_ASSIGN_DIVIDE:
+        return BINARY_DIVIDE;
+    case BINARY_ASSIGN_MODULO:
+        return BINARY_MODULO;
+    case BINARY_ASSIGN_AND:
+        return BINARY_AND;
+    case BINARY_ASSIGN_OR:
+        return BINARY_OR;
+    case BINARY_ASSIGN_BITWISE_AND:
+        return BINARY_BITWISE_AND;
+    case BINARY_ASSIGN_BITWISE_OR:
+        return BINARY_BITWISE_OR;
+    case BINARY_ASSIGN_BITWISE_XOR:
+        return BINARY_BITWISE_XOR;
+    case BINARY_ASSIGN_BITWISE_LEFT_SHIFT:
+        return BINARY_BITWISE_LEFT_SHIFT;
+    case BINARY_ASSIGN_BITWISE_RIGHT_SHIFT:
+        return BINARY_BITWISE_RIGHT_SHIFT;
+    default:
+        return BINARY_NONE;
+    }
+}
+
 enum Increment_Decrement_Operation
 {
     INCREMENT_DECREMENT_NONE,
@@ -1009,7 +1044,8 @@ REGION(struct Tree_Statement, tree_statement)
 
 struct Tree_Statement*
 tree_statement_new(
-    enum Tree_Statement_Kind kind, union Tree_Statement_Value value, struct Span span, struct Cursor location)
+    enum Tree_Statement_Kind kind, union Tree_Statement_Value value, struct Span span,
+    struct Cursor location)
 {
     check(region_tree_statement_cursor < REGION_SIZE, "out of statement memory");
     struct Tree_Statement* statement = &region_tree_statement[region_tree_statement_cursor++];