diff options
| author | Mel <mel@rnrd.eu> | 2025-06-03 22:41:35 +0200 |
|---|---|---|
| committer | Mel <mel@rnrd.eu> | 2025-06-03 22:41:35 +0200 |
| commit | 8b655fe0f1d6589c9216a6244c067aec1d866be7 (patch) | |
| tree | 4e6a9743b1c4a2e339e39fefc08340ed9fd824a0 /boot/tree.c | |
| parent | 4940b308ca62257acb79dc4a5a240dc76c780a06 (diff) | |
| download | catskill-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.c | 34 |
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: |
