diff --git a/lang/include/ivy/lang/lex.h b/lang/include/ivy/lang/lex.h index 77e9142..e670e84 100644 --- a/lang/include/ivy/lang/lex.h +++ b/lang/include/ivy/lang/lex.h @@ -71,6 +71,8 @@ enum ivy_symbol { IVY_SYM_DOUBLE_EQUAL, IVY_SYM_DOUBLE_LEFT_ANGLE, IVY_SYM_DOUBLE_RIGHT_ANGLE, + IVY_SYM_LEFT_ANGLE_EQUAL, + IVY_SYM_RIGHT_ANGLE_EQUAL, IVY_SYM_DOUBLE_LEFT_ANGLE_EQUAL, IVY_SYM_DOUBLE_RIGHT_ANGLE_EQUAL, IVY_SYM_PLUS_EQUAL, diff --git a/lang/lex.c b/lang/lex.c index 2e6fa3b..d764710 100644 --- a/lang/lex.c +++ b/lang/lex.c @@ -71,6 +71,8 @@ static struct lex_token_def symbols[] = { LEX_TOKEN_DEF(IVY_SYM_DOUBLE_EQUAL, "=="), LEX_TOKEN_DEF(IVY_SYM_DOUBLE_LEFT_ANGLE, "<<"), LEX_TOKEN_DEF(IVY_SYM_DOUBLE_RIGHT_ANGLE, ">>"), + LEX_TOKEN_DEF(IVY_SYM_LEFT_ANGLE_EQUAL, "<="), + LEX_TOKEN_DEF(IVY_SYM_RIGHT_ANGLE_EQUAL, ">="), LEX_TOKEN_DEF(IVY_SYM_DOUBLE_LEFT_ANGLE_EQUAL, "<<="), LEX_TOKEN_DEF(IVY_SYM_DOUBLE_RIGHT_ANGLE_EQUAL, ">>="), LEX_TOKEN_DEF(IVY_SYM_PLUS_EQUAL, "+="), @@ -247,7 +249,7 @@ static void init_keywords(b_dict *keyword_dict) static enum ivy_keyword find_keyword_by_name(struct ivy_lexer *lex, const char *s) { - b_number *id = b_dict_at(lex->lex_keywords, s); + b_number *id = B_NUMBER(b_dict_at(lex->lex_keywords, s)); if (!id) { return IVY_KW_NONE; } @@ -906,7 +908,6 @@ static enum ivy_status read_ident(struct ivy_lexer *lex) static enum ivy_status pump_tokens(struct ivy_lexer *lex) { - enum ivy_status status; struct lexer_state *state = get_lexer_state(lex); int c = peek(lex); @@ -1062,6 +1063,8 @@ const char *ivy_keyword_to_string(enum ivy_keyword keyword) ENUM_STR(IVY_KW_UNLESS); ENUM_STR(IVY_KW_IN); ENUM_STR(IVY_KW_DO); + ENUM_STR(IVY_KW_GET); + ENUM_STR(IVY_KW_SET); ENUM_STR(IVY_KW_END); default: return ""; @@ -1073,6 +1076,8 @@ const char *ivy_symbol_to_string(enum ivy_symbol sym) switch (sym) { ENUM_STR(IVY_SYM_NONE); ENUM_STR(IVY_SYM_DOT); + ENUM_STR(IVY_SYM_SQUOTE); + ENUM_STR(IVY_SYM_DQUOTE); ENUM_STR(IVY_SYM_LEFT_BRACE); ENUM_STR(IVY_SYM_RIGHT_BRACE); ENUM_STR(IVY_SYM_LEFT_BRACKET); @@ -1094,6 +1099,8 @@ const char *ivy_symbol_to_string(enum ivy_symbol sym) ENUM_STR(IVY_SYM_DOUBLE_EQUAL); ENUM_STR(IVY_SYM_DOUBLE_LEFT_ANGLE); ENUM_STR(IVY_SYM_DOUBLE_RIGHT_ANGLE); + ENUM_STR(IVY_SYM_LEFT_ANGLE_EQUAL); + ENUM_STR(IVY_SYM_RIGHT_ANGLE_EQUAL); ENUM_STR(IVY_SYM_DOUBLE_LEFT_ANGLE_EQUAL); ENUM_STR(IVY_SYM_DOUBLE_RIGHT_ANGLE_EQUAL); ENUM_STR(IVY_SYM_PLUS_EQUAL); @@ -1107,6 +1114,7 @@ const char *ivy_symbol_to_string(enum ivy_symbol sym) ENUM_STR(IVY_SYM_BANG); ENUM_STR(IVY_SYM_PIPE); ENUM_STR(IVY_SYM_CARET); + ENUM_STR(IVY_SYM_HASH); ENUM_STR(IVY_SYM_UNDERSCORE); ENUM_STR(IVY_SYM_COMMA); ENUM_STR(IVY_SYM_SEMICOLON);