From 05dcf1f8b6ecb72a8f1a42b5867d655facaeb7a9 Mon Sep 17 00:00:00 2001 From: Max Wash Date: Sun, 17 May 2026 15:28:29 +0100 Subject: [PATCH] operator: add script-block pseudo-operator --- bshell/operator.c | 24 ++++++++++++++---------- bshell/operator.h | 1 + 2 files changed, 15 insertions(+), 10 deletions(-) diff --git a/bshell/operator.c b/bshell/operator.c index 02ca884..cbabb9c 100644 --- a/bshell/operator.c +++ b/bshell/operator.c @@ -18,10 +18,6 @@ /* clang-format off */ static const struct operator_info operators[] = { - OP(SUBEXPR, PARENTHESIS, LEFT, PREFIX, UNARY), - OP(ARRAY_START, PARENTHESIS, LEFT, PREFIX, UNARY), - OP(PAREN, PARENTHESIS, LEFT, PREFIX, UNARY), - OP(HASHTABLE_START, PARENTHESIS, LEFT, PREFIX, UNARY), OP(ACCESS, MEMBER_ACCESS, LEFT, INFIX, BINARY), OP(CONDITIONAL_ACCESS, MEMBER_ACCESS, LEFT, INFIX, BINARY), OP(STATIC_ACCESS, STATIC_ACCESS, LEFT, INFIX, BINARY), @@ -73,12 +69,20 @@ static const struct operator_info operators[] = { OP(LEFT_SHIFT, BITWISE, LEFT, INFIX, BINARY), OP(RIGHT_SHIFT, BITWISE, LEFT, INFIX, BINARY), - OP(ASSIGN, ASSIGN, LEFT, INFIX, BINARY), - OP(ADD_ASSIGN, ASSIGN, LEFT, INFIX, BINARY), - OP(SUBTRACT_ASSIGN, ASSIGN, LEFT, INFIX, BINARY), - OP(MULTIPLY_ASSIGN, ASSIGN, LEFT, INFIX, BINARY), - OP(DIVIDE_ASSIGN, ASSIGN, LEFT, INFIX, BINARY), - OP(MODULO_ASSIGN, ASSIGN, LEFT, INFIX, BINARY), + OP(ASSIGN, ASSIGN, RIGHT, INFIX, BINARY), + OP(ADD_ASSIGN, ASSIGN, RIGHT, INFIX, BINARY), + OP(SUBTRACT_ASSIGN, ASSIGN, RIGHT, INFIX, BINARY), + OP(MULTIPLY_ASSIGN, ASSIGN, RIGHT, INFIX, BINARY), + OP(DIVIDE_ASSIGN, ASSIGN, RIGHT, INFIX, BINARY), + OP(MODULO_ASSIGN, ASSIGN, RIGHT, INFIX, BINARY), + + /* these are not real operators, and are just used internally by the + * parser. */ + OP(SUBEXPR, PARENTHESIS, LEFT, PREFIX, UNARY), + OP(ARRAY_START, PARENTHESIS, LEFT, PREFIX, UNARY), + OP(PAREN, PARENTHESIS, LEFT, PREFIX, UNARY), + OP(HASHTABLE_START, PARENTHESIS, LEFT, PREFIX, UNARY), + OP(SCRIPTBLOCK, PARENTHESIS, LEFT, PREFIX, UNARY), }; static const size_t nr_operators = sizeof operators / sizeof operators[0]; diff --git a/bshell/operator.h b/bshell/operator.h index 7aba914..e3411fc 100644 --- a/bshell/operator.h +++ b/bshell/operator.h @@ -104,6 +104,7 @@ enum operator_id { OP_CAST, OP_SUBEXPR, OP_PAREN, + OP_SCRIPTBLOCK, OP_ARRAY_START, OP_HASHTABLE_START, };