diff options
| author | Mel <mel@rnrd.eu> | 2026-05-04 21:34:42 +0200 |
|---|---|---|
| committer | Mel <mel@rnrd.eu> | 2026-05-04 21:34:42 +0200 |
| commit | 81c9e336eb88bc2d010a7cd776bb14789977fb4a (patch) | |
| tree | 6cc7bddb22bbb5446e4331ae9ddedfc260c2c40d /boot/tree.c | |
| parent | 59cf0e45d701bd7ec0bbdbf10f69ec7cec66051a (diff) | |
| download | catskill-81c9e336eb88bc2d010a7cd776bb14789977fb4a.tar.zst catskill-81c9e336eb88bc2d010a7cd776bb14789977fb4a.zip | |
Lower source compound assigns and inc/dec statements
Signed-off-by: Mel <mel@rnrd.eu>
Diffstat (limited to 'boot/tree.c')
| -rw-r--r-- | boot/tree.c | 38 |
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 = ®ion_tree_statement[region_tree_statement_cursor++]; |
