lang: operator: define range and range-inclusive operators
This commit is contained in:
@@ -71,10 +71,12 @@ enum ivy_operator_id {
|
|||||||
IVY_OP_BINARY_AND_ASSIGN,
|
IVY_OP_BINARY_AND_ASSIGN,
|
||||||
IVY_OP_BINARY_OR_ASSIGN,
|
IVY_OP_BINARY_OR_ASSIGN,
|
||||||
IVY_OP_BINARY_XOR_ASSIGN,
|
IVY_OP_BINARY_XOR_ASSIGN,
|
||||||
IVY_OP_AND,
|
IVY_OP_LOGICAL_AND,
|
||||||
IVY_OP_OR,
|
IVY_OP_LOGICAL_OR,
|
||||||
IVY_OP_IS,
|
IVY_OP_IS,
|
||||||
IVY_OP_NOT,
|
IVY_OP_NOT,
|
||||||
|
IVY_OP_RANGE,
|
||||||
|
IVY_OP_RANGE_INCLUSIVE,
|
||||||
IVY_OP_UNDERSTANDS,
|
IVY_OP_UNDERSTANDS,
|
||||||
IVY_OP_SELF_ACCESS,
|
IVY_OP_SELF_ACCESS,
|
||||||
IVY_OP_PKG_ACCESS,
|
IVY_OP_PKG_ACCESS,
|
||||||
|
|||||||
@@ -48,14 +48,16 @@ static const struct ivy_operator operators[] = {
|
|||||||
OP(BINARY_AND_ASSIGN, ASSIGN, RIGHT, INFIX, BINARY),
|
OP(BINARY_AND_ASSIGN, ASSIGN, RIGHT, INFIX, BINARY),
|
||||||
OP(BINARY_OR_ASSIGN, ASSIGN, RIGHT, INFIX, BINARY),
|
OP(BINARY_OR_ASSIGN, ASSIGN, RIGHT, INFIX, BINARY),
|
||||||
OP(BINARY_XOR_ASSIGN, ASSIGN, RIGHT, INFIX, BINARY),
|
OP(BINARY_XOR_ASSIGN, ASSIGN, RIGHT, INFIX, BINARY),
|
||||||
OP(AND, LOGICAL_AND, LEFT, INFIX, BINARY),
|
OP(LOGICAL_AND, LOGICAL_AND, LEFT, INFIX, BINARY),
|
||||||
OP(OR, LOGICAL_OR, LEFT, INFIX, BINARY),
|
OP(LOGICAL_OR, LOGICAL_OR, LEFT, INFIX, BINARY),
|
||||||
OP(IS, IS, LEFT, INFIX, BINARY),
|
OP(IS, IS, LEFT, INFIX, BINARY),
|
||||||
OP(NOT, NOT, LEFT, PREFIX, UNARY),
|
OP(NOT, NOT, LEFT, PREFIX, UNARY),
|
||||||
OP(UNDERSTANDS, IS, LEFT, INFIX, BINARY),
|
OP(UNDERSTANDS, IS, LEFT, INFIX, BINARY),
|
||||||
OP(SELF_ACCESS, SUBSCRIPT, LEFT, INFIX, BINARY),
|
OP(SELF_ACCESS, SUBSCRIPT, LEFT, INFIX, BINARY),
|
||||||
OP(PKG_ACCESS, SUBSCRIPT, LEFT, INFIX, BINARY),
|
OP(PKG_ACCESS, SUBSCRIPT, LEFT, INFIX, BINARY),
|
||||||
OP(SUBSCRIPT, 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. */
|
/* parser-internal pseudo-operators. */
|
||||||
OP(MSG, UNARY_MSG, LEFT, POSTFIX, UNARY),
|
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_AND_ASSIGN, AMPERSAND_EQUAL),
|
||||||
SYM_OP(BINARY_OR_ASSIGN, PIPE_EQUAL),
|
SYM_OP(BINARY_OR_ASSIGN, PIPE_EQUAL),
|
||||||
SYM_OP(BINARY_XOR_ASSIGN, CARET_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(SELF_ACCESS, DOUBLE_COLON),
|
||||||
SYM_OP(PKG_ACCESS, HYPHEN_RIGHT_ANGLE),
|
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 size_t nr_operator_symbols = sizeof operator_symbols / sizeof operator_symbols[0];
|
||||||
|
|
||||||
static const struct ivy_operator *operator_keywords[] = {
|
static const struct ivy_operator *operator_keywords[] = {
|
||||||
KW_OP(AND, AND),
|
KW_OP(LOGICAL_AND, AND),
|
||||||
KW_OP(OR, OR),
|
KW_OP(LOGICAL_OR, OR),
|
||||||
KW_OP(IS, IS),
|
KW_OP(IS, IS),
|
||||||
KW_OP(NOT, NOT),
|
KW_OP(NOT, NOT),
|
||||||
KW_OP(UNDERSTANDS, UNDERSTANDS),
|
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_AND_ASSIGN);
|
||||||
ENUM_STR(IVY_OP_BINARY_OR_ASSIGN);
|
ENUM_STR(IVY_OP_BINARY_OR_ASSIGN);
|
||||||
ENUM_STR(IVY_OP_BINARY_XOR_ASSIGN);
|
ENUM_STR(IVY_OP_BINARY_XOR_ASSIGN);
|
||||||
ENUM_STR(IVY_OP_AND);
|
ENUM_STR(IVY_OP_LOGICAL_AND);
|
||||||
ENUM_STR(IVY_OP_OR);
|
ENUM_STR(IVY_OP_LOGICAL_OR);
|
||||||
ENUM_STR(IVY_OP_IS);
|
ENUM_STR(IVY_OP_IS);
|
||||||
ENUM_STR(IVY_OP_NOT);
|
ENUM_STR(IVY_OP_NOT);
|
||||||
ENUM_STR(IVY_OP_UNDERSTANDS);
|
ENUM_STR(IVY_OP_UNDERSTANDS);
|
||||||
|
|||||||
Reference in New Issue
Block a user