From b444a565a27a6653b6322baef0904874452cf536 Mon Sep 17 00:00:00 2001 From: Max Wash Date: Tue, 4 Nov 2025 10:35:09 +0000 Subject: [PATCH] lang: operator: define range and range-inclusive operators --- lang/include/ivy/lang/operator.h | 6 ++++-- lang/operator.c | 16 ++++++++++------ 2 files changed, 14 insertions(+), 8 deletions(-) diff --git a/lang/include/ivy/lang/operator.h b/lang/include/ivy/lang/operator.h index c438060..5c551e4 100644 --- a/lang/include/ivy/lang/operator.h +++ b/lang/include/ivy/lang/operator.h @@ -71,10 +71,12 @@ enum ivy_operator_id { IVY_OP_BINARY_AND_ASSIGN, IVY_OP_BINARY_OR_ASSIGN, IVY_OP_BINARY_XOR_ASSIGN, - IVY_OP_AND, - IVY_OP_OR, + IVY_OP_LOGICAL_AND, + IVY_OP_LOGICAL_OR, IVY_OP_IS, IVY_OP_NOT, + IVY_OP_RANGE, + IVY_OP_RANGE_INCLUSIVE, IVY_OP_UNDERSTANDS, IVY_OP_SELF_ACCESS, IVY_OP_PKG_ACCESS, diff --git a/lang/operator.c b/lang/operator.c index 8663c09..c1a58b3 100644 --- a/lang/operator.c +++ b/lang/operator.c @@ -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);