diff options
Diffstat (limited to 'src/tokenizer.cpp')
| -rw-r--r-- | src/tokenizer.cpp | 11 |
1 files changed, 10 insertions, 1 deletions
diff --git a/src/tokenizer.cpp b/src/tokenizer.cpp index 53f6135d0..3a5828a3a 100644 --- a/src/tokenizer.cpp +++ b/src/tokenizer.cpp @@ -33,6 +33,7 @@ TOKEN_KIND(Token__OperatorBegin, ""), \ TOKEN_KIND(Token_AndNot, "&~"), \ TOKEN_KIND(Token_Shl, "<<"), \ TOKEN_KIND(Token_Shr, ">>"), \ + TOKEN_KIND(Token_Concat, "##"), \ TOKEN_KIND(Token_CmpAnd, "&&"), \ TOKEN_KIND(Token_CmpOr, "||"), \ \ @@ -49,6 +50,7 @@ TOKEN_KIND(Token__AssignOpBegin, ""), \ TOKEN_KIND(Token_AndNotEq, "&~="), \ TOKEN_KIND(Token_ShlEq, "<<="), \ TOKEN_KIND(Token_ShrEq, ">>="), \ + TOKEN_KIND(Token_ConcatEq, "##="), \ TOKEN_KIND(Token_CmpAndEq, "&&="), \ TOKEN_KIND(Token_CmpOrEq, "||="), \ TOKEN_KIND(Token__AssignOpEnd, ""), \ @@ -937,7 +939,14 @@ gb_internal void tokenizer_get_token(Tokenizer *t, Token *token, int repeat=0) { break; case '#': token->kind = Token_Hash; - if (t->curr_rune == '!') { + if (t->curr_rune == '#') { + advance_to_next_rune(t); + token->kind = Token_Concat; + if (t->curr_rune == '=') { + advance_to_next_rune(t); + token->kind = Token_ConcatEq; + } + } else if (t->curr_rune == '!') { token->kind = Token_Comment; tokenizer_skip_line(t); } else if (t->curr_rune == '+') { |