fix ability to parse character literals
parent
3886fdc19b
commit
d1b65c6f46
|
@ -136,6 +136,8 @@ enum TokenizeState {
|
||||||
TokenizeStateRawStringContents,
|
TokenizeStateRawStringContents,
|
||||||
TokenizeStateRawStringMaybeEnd,
|
TokenizeStateRawStringMaybeEnd,
|
||||||
TokenizeStateCharLiteral,
|
TokenizeStateCharLiteral,
|
||||||
|
TokenizeStateCharLiteralEscape,
|
||||||
|
TokenizeStateCharLiteralEnd,
|
||||||
TokenizeStateSawStar,
|
TokenizeStateSawStar,
|
||||||
TokenizeStateSawSlash,
|
TokenizeStateSawSlash,
|
||||||
TokenizeStateSawPercent,
|
TokenizeStateSawPercent,
|
||||||
|
@ -955,8 +957,25 @@ void tokenize(Buf *buf, Tokenization *out) {
|
||||||
end_token(&t);
|
end_token(&t);
|
||||||
t.state = TokenizeStateStart;
|
t.state = TokenizeStateStart;
|
||||||
break;
|
break;
|
||||||
default:
|
case '\\':
|
||||||
|
t.state = TokenizeStateCharLiteralEscape;
|
||||||
break;
|
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;
|
break;
|
||||||
case TokenizeStateZero:
|
case TokenizeStateZero:
|
||||||
|
@ -1118,6 +1137,8 @@ void tokenize(Buf *buf, Tokenization *out) {
|
||||||
tokenize_error(&t, "unterminated raw string");
|
tokenize_error(&t, "unterminated raw string");
|
||||||
break;
|
break;
|
||||||
case TokenizeStateCharLiteral:
|
case TokenizeStateCharLiteral:
|
||||||
|
case TokenizeStateCharLiteralEscape:
|
||||||
|
case TokenizeStateCharLiteralEnd:
|
||||||
tokenize_error(&t, "unterminated character literal");
|
tokenize_error(&t, "unterminated character literal");
|
||||||
break;
|
break;
|
||||||
case TokenizeStateSymbol:
|
case TokenizeStateSymbol:
|
||||||
|
|
|
@ -1333,3 +1333,9 @@ fn pointer_comparison() {
|
||||||
fn ptr_eql(a: &[]u8, b: &[]u8) -> bool {
|
fn ptr_eql(a: &[]u8, b: &[]u8) -> bool {
|
||||||
a == b
|
a == b
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#attribute("test")
|
||||||
|
fn character_literals() {
|
||||||
|
assert('\'' == single_quote);
|
||||||
|
}
|
||||||
|
const single_quote = '\'';
|
||||||
|
|
Loading…
Reference in New Issue