@@ -220,6 +220,8 @@ pub const Tokenizer = struct {
220
220
MultilineStringLiteralLineBackslash ,
221
221
CharLiteral ,
222
222
CharLiteralBackslash ,
223
+ CharLiteralEscape1 ,
224
+ CharLiteralEscape2 ,
223
225
CharLiteralEnd ,
224
226
Backslash ,
225
227
Equal ,
@@ -612,9 +614,32 @@ pub const Tokenizer = struct {
612
614
result .id = Token .Id .Invalid ;
613
615
break ;
614
616
},
617
+ 'x' = > {
618
+ state = State .CharLiteralEscape1 ;
619
+ },
620
+ else = > {
621
+ state = State .CharLiteralEnd ;
622
+ },
623
+ },
624
+
625
+ State .CharLiteralEscape1 = > switch (c ) {
626
+ '0' ... '9' , 'a' ... 'z' , 'A' ... 'F' = > {
627
+ state = State .CharLiteralEscape2 ;
628
+ },
615
629
else = > {
630
+ result .id = Token .Id .Invalid ;
631
+ break ;
632
+ },
633
+ },
634
+
635
+ State .CharLiteralEscape2 = > switch (c ) {
636
+ '0' ... '9' , 'a' ... 'z' , 'A' ... 'F' = > {
616
637
state = State .CharLiteralEnd ;
617
638
},
639
+ else = > {
640
+ result .id = Token .Id .Invalid ;
641
+ break ;
642
+ },
618
643
},
619
644
620
645
State .CharLiteralEnd = > switch (c ) {
@@ -988,6 +1013,8 @@ pub const Tokenizer = struct {
988
1013
State .MultilineStringLiteralLineBackslash ,
989
1014
State .CharLiteral ,
990
1015
State .CharLiteralBackslash ,
1016
+ State .CharLiteralEscape1 ,
1017
+ State .CharLiteralEscape2 ,
991
1018
State .CharLiteralEnd ,
992
1019
State .StringLiteralBackslash = > {
993
1020
result .id = Token .Id .Invalid ;
@@ -1127,6 +1154,13 @@ test "tokenizer" {
1127
1154
});
1128
1155
}
1129
1156
1157
+ test "tokenizer - char literal with hex escape" {
1158
+ testTokenize ( \\'\x1b'
1159
+ , []Token.Id {
1160
+ Token .Id .CharLiteral ,
1161
+ });
1162
+ }
1163
+
1130
1164
test "tokenizer - float literal e exponent" {
1131
1165
testTokenize ("a = 4.94065645841246544177e-324;\n " , []Token.Id {
1132
1166
Token .Id .Identifier ,
0 commit comments