authorgravatar for jhc@dismail.deJimmi Holst Christensen <jhc@dismail.de> 2018-04-10 11:35:41+02:00
committergravatar for jhc@dismail.deJimmi Holst Christensen <jhc@dismail.de> 2018-04-10 11:35:41+02:00
log34af38e09b33957a9f677e42d57e9cd96f859b76
tree351345ae647f4c138451df5897dac65c9d0b1ba8
parentf85b9f2bf3ac0c5af7804921d2003c2992558cb7

std.zig.tokinizer: fixed failing tests


1 files changed, 19 insertions(+), 7 deletions(-)

std/zig/tokenizer.zig+19-7
...@@ -613,17 +613,25 @@ pub const Tokenizer = struct {...@@ -613,17 +613,25 @@ pub const Tokenizer = struct {
613 '\\' => {613 '\\' => {
614 state = State.CharLiteralBackslash;614 state = State.CharLiteralBackslash;
615 },615 },
616 '\'' => break, // Look for this error later.616 '\'' => {
617 result.id = Token.Id.Invalid;
618 break;
619 },
617 else => {620 else => {
618 if (c < 0x20 or c == 0x7f)621 if (c < 0x20 or c == 0x7f) {
619 break; // Look for this error later.622 result.id = Token.Id.Invalid;
623 break;
624 }
620625
621 state = State.CharLiteralEnd;626 state = State.CharLiteralEnd;
622 }627 }
623 },628 },
624629
625 State.CharLiteralBackslash => switch (c) {630 State.CharLiteralBackslash => switch (c) {
626 '\n' => break, // Look for this error later.631 '\n' => {
632 result.id = Token.Id.Invalid;
633 break;
634 },
627 else => {635 else => {
628 state = State.CharLiteralEnd;636 state = State.CharLiteralEnd;
629 },637 },
...@@ -635,7 +643,10 @@ pub const Tokenizer = struct {...@@ -635,7 +643,10 @@ pub const Tokenizer = struct {
635 self.index += 1;643 self.index += 1;
636 break;644 break;
637 },645 },
638 else => break, // Look for this error later.646 else => {
647 result.id = Token.Id.Invalid;
648 break;
649 },
639 },650 },
640651
641 State.MultilineStringLiteralLine => switch (c) {652 State.MultilineStringLiteralLine => switch (c) {
...@@ -903,7 +914,6 @@ pub const Tokenizer = struct {...@@ -903,7 +914,6 @@ pub const Tokenizer = struct {
903 State.FloatExponentNumber,914 State.FloatExponentNumber,
904 State.StringLiteral, // find this error later915 State.StringLiteral, // find this error later
905 State.MultilineStringLiteralLine,916 State.MultilineStringLiteralLine,
906 State.CharLiteralEnd,
907 State.Builtin => {},917 State.Builtin => {},
908918
909 State.Identifier => {919 State.Identifier => {
...@@ -922,6 +932,7 @@ pub const Tokenizer = struct {...@@ -922,6 +932,7 @@ pub const Tokenizer = struct {
922 State.MultilineStringLiteralLineBackslash,932 State.MultilineStringLiteralLineBackslash,
923 State.CharLiteral,933 State.CharLiteral,
924 State.CharLiteralBackslash,934 State.CharLiteralBackslash,
935 State.CharLiteralEnd,
925 State.StringLiteralBackslash => {936 State.StringLiteralBackslash => {
926 result.id = Token.Id.Invalid;937 result.id = Token.Id.Invalid;
927 },938 },
...@@ -1073,7 +1084,7 @@ test "tokenizer - invalid token characters" {...@@ -1073,7 +1084,7 @@ test "tokenizer - invalid token characters" {
1073 testTokenize("`", []Token.Id{Token.Id.Invalid});1084 testTokenize("`", []Token.Id{Token.Id.Invalid});
1074 testTokenize("'c", []Token.Id {Token.Id.Invalid});1085 testTokenize("'c", []Token.Id {Token.Id.Invalid});
1075 testTokenize("'", []Token.Id {Token.Id.Invalid});1086 testTokenize("'", []Token.Id {Token.Id.Invalid});
1076 testTokenize("''", []Token.Id {Token.Id.Invalid});1087 testTokenize("''", []Token.Id {Token.Id.Invalid, Token.Id.Invalid});
1077}1088}
10781089
1079test "tokenizer - invalid literal/comment characters" {1090test "tokenizer - invalid literal/comment characters" {
...@@ -1147,6 +1158,7 @@ fn testTokenize(source: []const u8, expected_tokens: []const Token.Id) void {...@@ -1147,6 +1158,7 @@ fn testTokenize(source: []const u8, expected_tokens: []const Token.Id) void {
1147 var tokenizer = Tokenizer.init(source);1158 var tokenizer = Tokenizer.init(source);
1148 for (expected_tokens) |expected_token_id| {1159 for (expected_tokens) |expected_token_id| {
1149 const token = tokenizer.next();1160 const token = tokenizer.next();
1161 std.debug.warn("{} {}\n", @tagName(expected_token_id), @tagName(token.id));
1150 std.debug.assert(@TagType(Token.Id)(token.id) == @TagType(Token.Id)(expected_token_id));1162 std.debug.assert(@TagType(Token.Id)(token.id) == @TagType(Token.Id)(expected_token_id));
1151 switch (expected_token_id) {1163 switch (expected_token_id) {
1152 Token.Id.StringLiteral => |expected_kind| {1164 Token.Id.StringLiteral => |expected_kind| {