| ... | ... | @@ -698,7 +698,10 @@ pub const Tokenizer = struct { |
| 698 | 698 | '\\' => { |
| 699 | 699 | state = .multiline_string_literal_line; |
| 700 | 700 | }, |
| 701 | | else => break, |
| 701 | else => { |
| 702 | result.tag = .invalid; |
| 703 | break; |
| 704 | }, |
| 702 | 705 | }, |
| 703 | 706 | .string_literal => switch (c) { |
| 704 | 707 | '\\' => { |
| ... | ... | @@ -1960,7 +1963,7 @@ test "tokenizer - number literals octal" { |
| 1960 | 1963 | try testTokenize("0o_,", &.{ .invalid, .identifier, .comma }); |
| 1961 | 1964 | } |
| 1962 | 1965 | |
| 1963 | | test "tokenizer - number literals hexadeciaml" { |
| 1966 | test "tokenizer - number literals hexadecimal" { |
| 1964 | 1967 | try testTokenize("0x0", &.{.integer_literal}); |
| 1965 | 1968 | try testTokenize("0x1", &.{.integer_literal}); |
| 1966 | 1969 | try testTokenize("0x2", &.{.integer_literal}); |
| ... | ... | @@ -2046,6 +2049,10 @@ test "tokenizer - number literals hexadeciaml" { |
| 2046 | 2049 | try testTokenize("0x0.0p0_", &.{ .invalid, .eof }); |
| 2047 | 2050 | } |
| 2048 | 2051 | |
| 2052 | test "tokenizer - multi line string literal with only 1 backslash" { |
| 2053 | try testTokenize("x \\\n;", &.{ .identifier, .invalid, .semicolon }); |
| 2054 | } |
| 2055 | |
| 2049 | 2056 | fn testTokenize(source: []const u8, expected_tokens: []const Token.Tag) !void { |
| 2050 | 2057 | var tokenizer = Tokenizer.init(source); |
| 2051 | 2058 | for (expected_tokens) |expected_token_id| { |