| ... | ... | @@ -141,6 +141,7 @@ pub const Token = struct { |
| 141 | 141 | LineComment, |
| 142 | 142 | DocComment, |
| 143 | 143 | BracketStarBracket, |
| 144 | BracketStarCBracket, |
| 144 | 145 | ShebangLine, |
| 145 | 146 | Keyword_align, |
| 146 | 147 | Keyword_and, |
| ... | ... | @@ -279,6 +280,7 @@ pub const Tokenizer = struct { |
| 279 | 280 | SawAtSign, |
| 280 | 281 | LBracket, |
| 281 | 282 | LBracketStar, |
| 283 | LBracketStarC, |
| 282 | 284 | }; |
| 283 | 285 | |
| 284 | 286 | pub fn next(self: *Tokenizer) Token { |
| ... | ... | @@ -456,6 +458,9 @@ pub const Tokenizer = struct { |
| 456 | 458 | }, |
| 457 | 459 | |
| 458 | 460 | State.LBracketStar => switch (c) { |
| 461 | 'c' => { |
| 462 | state = State.LBracketStarC; |
| 463 | }, |
| 459 | 464 | ']' => { |
| 460 | 465 | result.id = Token.Id.BracketStarBracket; |
| 461 | 466 | self.index += 1; |
| ... | ... | @@ -467,6 +472,18 @@ pub const Tokenizer = struct { |
| 467 | 472 | }, |
| 468 | 473 | }, |
| 469 | 474 | |
| 475 | State.LBracketStarC => switch (c) { |
| 476 | ']' => { |
| 477 | result.id = Token.Id.BracketStarCBracket; |
| 478 | self.index += 1; |
| 479 | break; |
| 480 | }, |
| 481 | else => { |
| 482 | result.id = Token.Id.Invalid; |
| 483 | break; |
| 484 | }, |
| 485 | }, |
| 486 | |
| 470 | 487 | State.Ampersand => switch (c) { |
| 471 | 488 | '=' => { |
| 472 | 489 | result.id = Token.Id.AmpersandEqual; |
| ... | ... | @@ -1035,6 +1052,7 @@ pub const Tokenizer = struct { |
| 1035 | 1052 | State.CharLiteralEnd, |
| 1036 | 1053 | State.StringLiteralBackslash, |
| 1037 | 1054 | State.LBracketStar, |
| 1055 | State.LBracketStarC, |
| 1038 | 1056 | => { |
| 1039 | 1057 | result.id = Token.Id.Invalid; |
| 1040 | 1058 | }, |
| ... | ... | @@ -1169,12 +1187,15 @@ test "tokenizer" { |
| 1169 | 1187 | testTokenize("test", []Token.Id{Token.Id.Keyword_test}); |
| 1170 | 1188 | } |
| 1171 | 1189 | |
| 1172 | | test "tokenizer - unknown length pointer" { |
| 1190 | test "tokenizer - unknown length pointer and then c pointer" { |
| 1173 | 1191 | testTokenize( |
| 1174 | 1192 | \\[*]u8 |
| 1193 | \\[*c]u8 |
| 1175 | 1194 | , []Token.Id{ |
| 1176 | 1195 | Token.Id.BracketStarBracket, |
| 1177 | 1196 | Token.Id.Identifier, |
| 1197 | Token.Id.BracketStarCBracket, |
| 1198 | Token.Id.Identifier, |
| 1178 | 1199 | }); |
| 1179 | 1200 | } |
| 1180 | 1201 | |