| ... | @@ -700,7 +700,7 @@ pub const Tokenizer = struct { | ... | @@ -700,7 +700,7 @@ pub const Tokenizer = struct { |
| 700 | }, | 700 | }, |
| 701 | | 701 | |
| 702 | .string_literal_backslash => switch (c) { | 702 | .string_literal_backslash => switch (c) { |
| 703 | '\n' => { | 703 | 0, '\n' => { |
| 704 | result.tag = .invalid; | 704 | result.tag = .invalid; |
| 705 | break; | 705 | break; |
| 706 | }, | 706 | }, |
| ... | @@ -1919,6 +1919,10 @@ test "tokenizer - invalid builtin identifiers" { | ... | @@ -1919,6 +1919,10 @@ test "tokenizer - invalid builtin identifiers" { |
| 1919 | try testTokenize("@0()", &.{ .invalid, .integer_literal, .l_paren, .r_paren }); | 1919 | try testTokenize("@0()", &.{ .invalid, .integer_literal, .l_paren, .r_paren }); |
| 1920 | } | 1920 | } |
| 1921 | | 1921 | |
| | 1922 | test "tokenizer - backslash before eof in string literal" { |
| | 1923 | try testTokenize("\"\\", &.{.invalid}); |
| | 1924 | } |
| | 1925 | |
| 1922 | fn testTokenize(source: [:0]const u8, expected_tokens: []const Token.Tag) !void { | 1926 | fn testTokenize(source: [:0]const u8, expected_tokens: []const Token.Tag) !void { |
| 1923 | var tokenizer = Tokenizer.init(source); | 1927 | var tokenizer = Tokenizer.init(source); |
| 1924 | for (expected_tokens) |expected_token_id| { | 1928 | for (expected_tokens) |expected_token_id| { |