diff options
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: |
