summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--uscript/lex.c7
-rw-r--r--uscript/lex.h1
-rw-r--r--uscript/parser.c4
3 files changed, 6 insertions, 6 deletions
diff --git a/uscript/lex.c b/uscript/lex.c
index c8218fa..b940cd4 100644
--- a/uscript/lex.c
+++ b/uscript/lex.c
@@ -312,10 +312,9 @@ struct token symbol_token(struct lexer *lex, char c)
match_char(lex, '=') ? TOKEN_EQL : c
);
case '!':
- return create_token(
- lex,
- match_char(lex, '=') ? TOKEN_NEQL : c
- );
+ if (match_char(lex, '='))
+ return create_token(lex, TOKEN_NEQL);
+ break;
}
// TODO: log unknown character
diff --git a/uscript/lex.h b/uscript/lex.h
index 2d5035e..58ea353 100644
--- a/uscript/lex.h
+++ b/uscript/lex.h
@@ -30,6 +30,7 @@
_(MULT_EQL) \
_(NEQL) \
_(NEXT) \
+ _(NOT) \
_(NUM) \
_(OR) \
_(PLUS_EQL) \
diff --git a/uscript/parser.c b/uscript/parser.c
index 7909f98..dc721d5 100644
--- a/uscript/parser.c
+++ b/uscript/parser.c
@@ -516,7 +516,7 @@ void parse_unary(struct parser *p)
switch (op.kind) {
case '-': parser_add_byte(p, BC_NEG); break;
- case '!': parser_add_byte(p, BC_NOT); break;
+ case TOKEN_NOT: parser_add_byte(p, BC_NOT); break;
}
}
@@ -601,7 +601,6 @@ struct expr expressions[] = {
['<'] = {NULL, parse_binary, PREC_COMP},
['>'] = {NULL, parse_binary, PREC_COMP},
['='] = {NULL, NULL, PREC_NONE},
- ['!'] = {parse_unary, NULL, PREC_NONE},
[TOKEN_AND] = {NULL, parse_and, PREC_AND},
[TOKEN_BREAK] = {NULL, NULL, PREC_NONE},
[TOKEN_DIV_EQL] = {NULL, NULL, PREC_NONE},
@@ -627,6 +626,7 @@ struct expr expressions[] = {
[TOKEN_MULT_EQL] = {NULL, NULL, PREC_NONE},
[TOKEN_NEQL] = {NULL, parse_binary, PREC_EQL},
[TOKEN_NEXT] = {NULL, NULL, PREC_NONE},
+ [TOKEN_NOT] = {parse_unary, NULL, PREC_NONE},
[TOKEN_NUM] = {parse_number, NULL, PREC_NONE},
[TOKEN_OR] = {NULL, parse_or, PREC_OR},
[TOKEN_PLUS_EQL] = {NULL, NULL, PREC_NONE},