| ... | @@ -797,6 +797,10 @@ pub const Tokenizer = struct { | ... | @@ -797,6 +797,10 @@ pub const Tokenizer = struct { |
| 797 | remaining_code_units = 3; | 797 | remaining_code_units = 3; |
| 798 | state = .char_literal_unicode; | 798 | state = .char_literal_unicode; |
| 799 | }, | 799 | }, |
| | 800 | '\n' => { |
| | 801 | result.tag = .invalid; |
| | 802 | break; |
| | 803 | }, |
| 800 | else => { | 804 | else => { |
| 801 | state = .char_literal_end; | 805 | state = .char_literal_end; |
| 802 | }, | 806 | }, |
| ... | @@ -1507,6 +1511,20 @@ test "tokenizer - code point literal with hex escape" { | ... | @@ -1507,6 +1511,20 @@ test "tokenizer - code point literal with hex escape" { |
| 1507 | , &.{ .invalid, .invalid }); | 1511 | , &.{ .invalid, .invalid }); |
| 1508 | } | 1512 | } |
| 1509 | | 1513 | |
| | 1514 | test "tokenizer - newline in char literal" { |
| | 1515 | try testTokenize( |
| | 1516 | \\' |
| | 1517 | \\' |
| | 1518 | , &.{ .invalid, .invalid }); |
| | 1519 | } |
| | 1520 | |
| | 1521 | test "tokenizer - newline in string literal" { |
| | 1522 | try testTokenize( |
| | 1523 | \\" |
| | 1524 | \\" |
| | 1525 | , &.{ .invalid, .string_literal }); |
| | 1526 | } |
| | 1527 | |
| 1510 | test "tokenizer - code point literal with unicode escapes" { | 1528 | test "tokenizer - code point literal with unicode escapes" { |
| 1511 | // Valid unicode escapes | 1529 | // Valid unicode escapes |
| 1512 | try testTokenize( | 1530 | try testTokenize( |