From 1376b5e449bb755d15a32ee4897755e05ab58ec1 Mon Sep 17 00:00:00 2001 From: Sizov Nikita Date: Thu, 23 Mar 2023 16:24:25 +0300 Subject: [PATCH] Fix SequenceExpression type check for ETSCHecker Signed-off-by: Sizov Nikita --- ir/expressions/sequenceExpression.cpp | 5 +++-- parser/TypedParser.cpp | 4 ++++ test/compiler/ets/sequenceAssignment-expected.txt | 1 + test/compiler/ets/sequenceAssignment.ets | 4 ++++ 4 files changed, 12 insertions(+), 2 deletions(-) create mode 100644 test/compiler/ets/sequenceAssignment-expected.txt create mode 100644 test/compiler/ets/sequenceAssignment.ets diff --git a/ir/expressions/sequenceExpression.cpp b/ir/expressions/sequenceExpression.cpp index 8629be59e..b8e7a687e 100644 --- a/ir/expressions/sequenceExpression.cpp +++ b/ir/expressions/sequenceExpression.cpp @@ -53,9 +53,10 @@ checker::Type *SequenceExpression::Check([[maybe_unused]] checker::TSChecker *ch checker::Type *SequenceExpression::Check(checker::ETSChecker *checker) { + checker::Type *ret = nullptr; for (auto *it : sequence_) { - it->Check(checker); + ret = it->Check(checker); } - return nullptr; + return ret; } } // namespace panda::es2panda::ir diff --git a/parser/TypedParser.cpp b/parser/TypedParser.cpp index 53329ed77..8bb0d226c 100644 --- a/parser/TypedParser.cpp +++ b/parser/TypedParser.cpp @@ -108,6 +108,10 @@ ir::Expression *TypedParser::ParseExpression(ExpressionParseFlags flags) } case lexer::TokenType::PUNCTUATOR_COMMA: { if ((flags & ExpressionParseFlags::ACCEPT_COMMA) != 0) { + if (GetContext().GetProgram()->Extension() == ScriptExtension::ETS && + ((GetContext().Status() & ParserStatus::IN_ITERATION) == 0)) { + ThrowSyntaxError("Unexpected sequence expression."); + } return ParseSequenceExpression(assignment_expression, ((flags & ExpressionParseFlags::ACCEPT_REST) != 0)); } diff --git a/test/compiler/ets/sequenceAssignment-expected.txt b/test/compiler/ets/sequenceAssignment-expected.txt new file mode 100644 index 000000000..20ee6b925 --- /dev/null +++ b/test/compiler/ets/sequenceAssignment-expected.txt @@ -0,0 +1 @@ +SyntaxError: Unexpected sequence expression. [sequenceAssignment.ets:3:13] diff --git a/test/compiler/ets/sequenceAssignment.ets b/test/compiler/ets/sequenceAssignment.ets new file mode 100644 index 000000000..6ccacd2e1 --- /dev/null +++ b/test/compiler/ets/sequenceAssignment.ets @@ -0,0 +1,4 @@ +function main(): void { + let x = 0; + x = (++x, x++); +} -- Gitee