Commit d1b65c6f46
Changed files (2)
test
src/tokenizer.cpp
@@ -136,6 +136,8 @@ enum TokenizeState {
TokenizeStateRawStringContents,
TokenizeStateRawStringMaybeEnd,
TokenizeStateCharLiteral,
+ TokenizeStateCharLiteralEscape,
+ TokenizeStateCharLiteralEnd,
TokenizeStateSawStar,
TokenizeStateSawSlash,
TokenizeStateSawPercent,
@@ -955,10 +957,27 @@ void tokenize(Buf *buf, Tokenization *out) {
end_token(&t);
t.state = TokenizeStateStart;
break;
+ case '\\':
+ t.state = TokenizeStateCharLiteralEscape;
+ break;
default:
+ t.state = TokenizeStateCharLiteralEnd;
break;
}
break;
+ case TokenizeStateCharLiteralEscape:
+ t.state = TokenizeStateCharLiteralEnd;
+ break;
+ case TokenizeStateCharLiteralEnd:
+ switch (c) {
+ case '\'':
+ end_token(&t);
+ t.state = TokenizeStateStart;
+ break;
+ default:
+ tokenize_error(&t, "invalid character: '%c'", c);
+ }
+ break;
case TokenizeStateZero:
switch (c) {
case 'b':
@@ -1118,6 +1137,8 @@ void tokenize(Buf *buf, Tokenization *out) {
tokenize_error(&t, "unterminated raw string");
break;
case TokenizeStateCharLiteral:
+ case TokenizeStateCharLiteralEscape:
+ case TokenizeStateCharLiteralEnd:
tokenize_error(&t, "unterminated character literal");
break;
case TokenizeStateSymbol:
test/self_hosted.zig
@@ -1333,3 +1333,9 @@ fn pointer_comparison() {
fn ptr_eql(a: &[]u8, b: &[]u8) -> bool {
a == b
}
+
+#attribute("test")
+fn character_literals() {
+ assert('\'' == single_quote);
+}
+const single_quote = '\'';