diff options
| author | Andrew Kelley <andrew@ziglang.org> | 2019-06-09 19:24:24 -0400 |
|---|---|---|
| committer | Andrew Kelley <andrew@ziglang.org> | 2019-06-09 19:26:32 -0400 |
| commit | b735764898412c5b9388fdf729c8ad8db43ddde5 (patch) | |
| tree | 1a5873e654ff7189b236acc15516b9c6cd35a315 /src/tokenizer.cpp | |
| parent | 10e33b35368735d1911a073bcb7cbbaebee671ee (diff) | |
| download | zig-b735764898412c5b9388fdf729c8ad8db43ddde5.tar.gz zig-b735764898412c5b9388fdf729c8ad8db43ddde5.zip | |
different array literal syntax when inferring the size
old syntax: []i32{1, 2, 3}
new syntax: [_]i32{1, 2, 3}
closes #1797
Diffstat (limited to 'src/tokenizer.cpp')
| -rw-r--r-- | src/tokenizer.cpp | 21 |
1 files changed, 21 insertions, 0 deletions
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(); } |
