From 8b655fe0f1d6589c9216a6244c067aec1d866be7 Mon Sep 17 00:00:00 2001 From: Mel Date: Tue, 3 Jun 2025 22:41:35 +0200 Subject: Range binary operation Signed-off-by: Mel --- boot/tree.c | 34 +++++++++++++++++++++++----------- 1 file changed, 23 insertions(+), 11 deletions(-) (limited to 'boot/tree.c') 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: -- cgit 1.4.1