From c642e326cecd3dc33ca5a9efb6330e757c378dd9 Mon Sep 17 00:00:00 2001 From: Ginger Bill Date: Mon, 26 Jun 2017 11:57:26 +0100 Subject: Undef value `---` (for setting a value to be uninitialized/undefined) --- src/tokenizer.cpp | 20 +++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) (limited to 'src/tokenizer.cpp') 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) { -- cgit v1.2.3