| ... | ... | @@ -403,6 +403,7 @@ pub const Tokenizer = struct { |
| 403 | 403 | angle_bracket_angle_bracket_right, |
| 404 | 404 | period, |
| 405 | 405 | period_2, |
| 406 | period_asterisk, |
| 406 | 407 | saw_at_sign, |
| 407 | 408 | }; |
| 408 | 409 | |
| ... | ... | @@ -979,9 +980,7 @@ pub const Tokenizer = struct { |
| 979 | 980 | state = .period_2; |
| 980 | 981 | }, |
| 981 | 982 | '*' => { |
| 982 | | result.id = .PeriodAsterisk; |
| 983 | | self.index += 1; |
| 984 | | break; |
| 983 | state = .period_asterisk; |
| 985 | 984 | }, |
| 986 | 985 | else => { |
| 987 | 986 | result.id = .Period; |
| ... | ... | @@ -1001,6 +1000,17 @@ pub const Tokenizer = struct { |
| 1001 | 1000 | }, |
| 1002 | 1001 | }, |
| 1003 | 1002 | |
| 1003 | .period_asterisk => switch (c) { |
| 1004 | '*' => { |
| 1005 | result.id = .Invalid; |
| 1006 | break; |
| 1007 | }, |
| 1008 | else => { |
| 1009 | result.id = .PeriodAsterisk; |
| 1010 | break; |
| 1011 | } |
| 1012 | }, |
| 1013 | |
| 1004 | 1014 | .slash => switch (c) { |
| 1005 | 1015 | '/' => { |
| 1006 | 1016 | state = .line_comment_start; |
| ... | ... | @@ -1376,6 +1386,9 @@ pub const Tokenizer = struct { |
| 1376 | 1386 | .period_2 => { |
| 1377 | 1387 | result.id = .Ellipsis2; |
| 1378 | 1388 | }, |
| 1389 | .period_asterisk => { |
| 1390 | result.id = .PeriodAsterisk; |
| 1391 | }, |
| 1379 | 1392 | .pipe => { |
| 1380 | 1393 | result.id = .Pipe; |
| 1381 | 1394 | }, |
| ... | ... | @@ -1762,6 +1775,31 @@ test "correctly parse pointer assignment" { |
| 1762 | 1775 | }); |
| 1763 | 1776 | } |
| 1764 | 1777 | |
| 1778 | test "correctly parse pointer dereference followed by asterisk" { |
| 1779 | testTokenize("\"b\".* ** 10", &[_]Token.Id{ |
| 1780 | .StringLiteral, |
| 1781 | .PeriodAsterisk, |
| 1782 | .AsteriskAsterisk, |
| 1783 | .IntegerLiteral, |
| 1784 | }); |
| 1785 | |
| 1786 | testTokenize("(\"b\".*)** 10", &[_]Token.Id{ |
| 1787 | .LParen, |
| 1788 | .StringLiteral, |
| 1789 | .PeriodAsterisk, |
| 1790 | .RParen, |
| 1791 | .AsteriskAsterisk, |
| 1792 | .IntegerLiteral, |
| 1793 | }); |
| 1794 | |
| 1795 | testTokenize("\"b\".*** 10", &[_]Token.Id{ |
| 1796 | .StringLiteral, |
| 1797 | .Invalid, |
| 1798 | .AsteriskAsterisk, |
| 1799 | .IntegerLiteral, |
| 1800 | }); |
| 1801 | } |
| 1802 | |
| 1765 | 1803 | test "tokenizer - range literals" { |
| 1766 | 1804 | testTokenize("0...9", &[_]Token.Id{ .IntegerLiteral, .Ellipsis3, .IntegerLiteral }); |
| 1767 | 1805 | testTokenize("'0'...'9'", &[_]Token.Id{ .CharLiteral, .Ellipsis3, .CharLiteral }); |