From b735764898412c5b9388fdf729c8ad8db43ddde5 Mon Sep 17 00:00:00 2001 From: Andrew Kelley Date: Sun, 9 Jun 2019 19:24:24 -0400 Subject: different array literal syntax when inferring the size old syntax: []i32{1, 2, 3} new syntax: [_]i32{1, 2, 3} closes #1797 --- src/tokenizer.cpp | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) (limited to 'src/tokenizer.cpp') diff --git a/src/tokenizer.cpp b/src/tokenizer.cpp index 7bae45f477..a0acde52e9 100644 --- a/src/tokenizer.cpp +++ b/src/tokenizer.cpp @@ -224,6 +224,7 @@ enum TokenizeState { TokenizeStateLBracket, TokenizeStateLBracketStar, TokenizeStateLBracketStarC, + TokenizeStateLBracketUnderscore, }; @@ -774,6 +775,9 @@ void tokenize(Buf *buf, Tokenization *out) { case '*': t.state = TokenizeStateLBracketStar; break; + case '_': + t.state = TokenizeStateLBracketUnderscore; + break; default: // reinterpret as just an lbracket t.pos -= 1; @@ -782,6 +786,21 @@ void tokenize(Buf *buf, Tokenization *out) { continue; } break; + case TokenizeStateLBracketUnderscore: + switch (c) { + case ']': + set_token_id(&t, t.cur_tok, TokenIdBracketUnderscoreBracket); + end_token(&t); + t.state = TokenizeStateStart; + break; + default: + // reinterpret as just an lbracket + t.pos -= 2; + end_token(&t); + t.state = TokenizeStateStart; + continue; + } + break; case TokenizeStateLBracketStar: switch (c) { case 'c': @@ -1443,6 +1462,7 @@ void tokenize(Buf *buf, Tokenization *out) { case TokenizeStateLineStringContinueC: case TokenizeStateLBracketStar: case TokenizeStateLBracketStarC: + case TokenizeStateLBracketUnderscore: tokenize_error(&t, "unexpected EOF"); break; case TokenizeStateLineComment: @@ -1581,6 +1601,7 @@ const char * token_name(TokenId id) { case TokenIdTimesPercent: return "*%"; case TokenIdTimesPercentEq: return "*%="; case TokenIdBarBarEq: return "||="; + case TokenIdBracketUnderscoreBracket: return "[_]"; case TokenIdCount: zig_unreachable(); } -- cgit v1.2.3