lang: operator: define range and range-inclusive operators

This commit is contained in:
2025-11-04 10:35:09 +00:00
parent b37c7d3303
commit b444a565a2
2 changed files with 14 additions and 8 deletions

View File

@@ -48,14 +48,16 @@ static const struct ivy_operator operators[] = {
OP(BINARY_AND_ASSIGN, ASSIGN, RIGHT, INFIX, BINARY),
OP(BINARY_OR_ASSIGN, ASSIGN, RIGHT, INFIX, BINARY),
OP(BINARY_XOR_ASSIGN, ASSIGN, RIGHT, INFIX, BINARY),
OP(AND, LOGICAL_AND, LEFT, INFIX, BINARY),
OP(OR, LOGICAL_OR, LEFT, INFIX, BINARY),
OP(LOGICAL_AND, LOGICAL_AND, LEFT, INFIX, BINARY),
OP(LOGICAL_OR, LOGICAL_OR, LEFT, INFIX, BINARY),
OP(IS, IS, LEFT, INFIX, BINARY),
OP(NOT, NOT, LEFT, PREFIX, UNARY),
OP(UNDERSTANDS, IS, LEFT, INFIX, BINARY),
OP(SELF_ACCESS, SUBSCRIPT, LEFT, INFIX, BINARY),
OP(PKG_ACCESS, SUBSCRIPT, LEFT, INFIX, BINARY),
OP(SUBSCRIPT, SUBSCRIPT, LEFT, INFIX, BINARY),
OP(RANGE, ADDITION, LEFT, INFIX, BINARY),
OP(RANGE_INCLUSIVE, ADDITION, LEFT, INFIX, BINARY),
/* parser-internal pseudo-operators. */
OP(MSG, UNARY_MSG, LEFT, POSTFIX, UNARY),
@@ -92,6 +94,8 @@ static const struct ivy_operator *operator_symbols[] = {
SYM_OP(BINARY_AND_ASSIGN, AMPERSAND_EQUAL),
SYM_OP(BINARY_OR_ASSIGN, PIPE_EQUAL),
SYM_OP(BINARY_XOR_ASSIGN, CARET_EQUAL),
SYM_OP(RANGE, DOUBLE_DOT),
SYM_OP(RANGE_INCLUSIVE, DOUBLE_DOT_EQUAL),
SYM_OP(SELF_ACCESS, DOUBLE_COLON),
SYM_OP(PKG_ACCESS, HYPHEN_RIGHT_ANGLE),
@@ -101,8 +105,8 @@ static const struct ivy_operator *operator_symbols[] = {
static const size_t nr_operator_symbols = sizeof operator_symbols / sizeof operator_symbols[0];
static const struct ivy_operator *operator_keywords[] = {
KW_OP(AND, AND),
KW_OP(OR, OR),
KW_OP(LOGICAL_AND, AND),
KW_OP(LOGICAL_OR, OR),
KW_OP(IS, IS),
KW_OP(NOT, NOT),
KW_OP(UNDERSTANDS, UNDERSTANDS),
@@ -195,8 +199,8 @@ const char *ivy_operator_id_to_string(enum ivy_operator_id op)
ENUM_STR(IVY_OP_BINARY_AND_ASSIGN);
ENUM_STR(IVY_OP_BINARY_OR_ASSIGN);
ENUM_STR(IVY_OP_BINARY_XOR_ASSIGN);
ENUM_STR(IVY_OP_AND);
ENUM_STR(IVY_OP_OR);
ENUM_STR(IVY_OP_LOGICAL_AND);
ENUM_STR(IVY_OP_LOGICAL_OR);
ENUM_STR(IVY_OP_IS);
ENUM_STR(IVY_OP_NOT);
ENUM_STR(IVY_OP_UNDERSTANDS);