aboutsummaryrefslogtreecommitdiff
path: root/src/tokenizer.cpp
diff options
context:
space:
mode:
authorGinger Bill <bill@gingerbill.org>2017-06-26 11:57:26 +0100
committerGinger Bill <bill@gingerbill.org>2017-06-26 11:57:26 +0100
commitc642e326cecd3dc33ca5a9efb6330e757c378dd9 (patch)
treec8bd1554fa2fc9e9d31012d4e98261755a7ced3a /src/tokenizer.cpp
parent362a11878283eea69cf5a18b7f05c964643a7a64 (diff)
Undef value `---` (for setting a value to be uninitialized/undefined)
Diffstat (limited to 'src/tokenizer.cpp')
-rw-r--r--src/tokenizer.cpp20
1 files changed, 19 insertions, 1 deletions
diff --git a/src/tokenizer.cpp b/src/tokenizer.cpp
index 09a5d3dd9..c7c53a47e 100644
--- a/src/tokenizer.cpp
+++ b/src/tokenizer.cpp
@@ -56,6 +56,7 @@ TOKEN_KIND(Token__AssignOpEnd, "_AssignOpEnd"), \
TOKEN_KIND(Token_ArrowLeft, "<-"), \
TOKEN_KIND(Token_Inc, "++"), \
TOKEN_KIND(Token_Dec, "--"), \
+ TOKEN_KIND(Token_Undef, "---"), \
\
TOKEN_KIND(Token__ComparisonBegin, "_ComparisonBegin"), \
TOKEN_KIND(Token_CmpEq, "=="), \
@@ -916,7 +917,24 @@ Token tokenizer_get_token(Tokenizer *t) {
case '~': token.kind = token_kind_variant2(t, Token_Xor, Token_XorEq); break;
case '!': token.kind = token_kind_variant2(t, Token_Not, Token_NotEq); break;
case '+': token.kind = token_kind_variant3(t, Token_Add, Token_AddEq, '+', Token_Inc); break;
- case '-': token.kind = token_kind_variant4(t, Token_Sub, Token_SubEq, '-', Token_Dec, '>', Token_ArrowRight); break;
+ case '-':
+ token.kind = Token_Sub;
+ if (t->curr_rune == '=') {
+ advance_to_next_rune(t);
+ token.kind = Token_SubEq;
+ } else if (t->curr_rune == '-') {
+ advance_to_next_rune(t);
+ token.kind = Token_Dec;
+ if (t->curr_rune == '-') {
+ advance_to_next_rune(t);
+ token.kind = Token_Undef;
+ }
+ } else if (t->curr_rune == '>') {
+ advance_to_next_rune(t);
+ token.kind = Token_ArrowRight;
+ }
+ break;
+
case '/': {
if (t->curr_rune == '/') {
while (t->curr_rune != '\n' && t->curr_rune != GB_RUNE_EOF) {