From a3335110dc4f1283cf1680e273cc9775b7e8c8ac Mon Sep 17 00:00:00 2001 From: _ov4 Date: Tue, 20 Oct 2026 11:42:45 +0000 Subject: feat(lexer): add C_STRING literal suffix Co-Authored-By: Claude Opus 5.5 --- lib/Parser/ParserControlFlow.cc | 2 +- lib/Parser/ParserExpression.cc | 4 ++-- lib/Parser/ParserType.cc | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) (limited to 'lib/Parser') diff --git a/lib/Parser/ParserControlFlow.cc b/lib/Parser/ParserControlFlow.cc index 10dd512..8ca024d 100644 --- a/lib/Parser/ParserControlFlow.cc +++ b/lib/Parser/ParserControlFlow.cc @@ -157,7 +157,7 @@ bool Parser::isCaseLabel() { case '(': case '[': ++Depth; break; case ')': case ']': if (--Depth < 0) return false; break; case tok_identifier: case tok_number_int: case tok_number_real: - case tok_string_literal: case tok_char_literal: case tok_true: case tok_false: + case tok_string_literal: case tok_c_string_literal: case tok_char_literal: case tok_true: case tok_false: case tok_integer_kw: case tok_real_kw: case tok_boolean_kw: case tok_string_kw: case tok_char_kw: case tok_c_int: case tok_c_char: case tok_c_string: case tok_c_double: diff --git a/lib/Parser/ParserExpression.cc b/lib/Parser/ParserExpression.cc index 7558c86..be22b4e 100644 --- a/lib/Parser/ParserExpression.cc +++ b/lib/Parser/ParserExpression.cc @@ -216,8 +216,8 @@ std::unique_ptr Parser::ParsePrimaryImpl() { case tok_identifier: case tok_operator: return ParseIdentifierExpr(); case tok_number_int: return ParseNumberExpr(); case tok_number_real: return ParseNumberExpr(); - case tok_string_literal: { - auto Res = std::make_unique(Lex.StringVal); + case tok_string_literal: case tok_c_string_literal: { + auto Res = std::make_unique(Lex.StringVal, CurTok == tok_c_string_literal); getNextToken(); return Res; } diff --git a/lib/Parser/ParserType.cc b/lib/Parser/ParserType.cc index d281293..e3adc5b 100644 --- a/lib/Parser/ParserType.cc +++ b/lib/Parser/ParserType.cc @@ -346,7 +346,7 @@ std::unique_ptr Parser::ParseConstant() { if (Negative) getNextToken(); bool Numeric = CurTok == tok_number_int || CurTok == tok_number_real; bool Literal = Numeric || CurTok == tok_true || CurTok == tok_false || - CurTok == tok_string_literal || CurTok == tok_char_literal; + CurTok == tok_string_literal || CurTok == tok_c_string_literal || CurTok == tok_char_literal; if (!Literal || (Negative && !Numeric)) { cps::sourceDiagnostic(Lex.getLine(), "error: CONSTANT initializer must be a literal at line %d\n", Line); return nullptr; -- cgit v1.3.1-4-g156e