diff --git a/ir/expressions/sequenceExpression.cpp b/ir/expressions/sequenceExpression.cpp index 8629be59e0a3d03f617a1d7c81ffe2c33bdd9f85..b8e7a687e1b897b09822d10beca67fb82eb02c81 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 53329ed773dc2d399bb3e303189709911d50af47..8bb0d226cfcbbdc1fd69822ad22b6f482abb1c5b 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 0000000000000000000000000000000000000000..20ee6b925eee49a30763752c35f914323608fced --- /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 0000000000000000000000000000000000000000..6ccacd2e1f319d9ed193c7b2f8a5f7d0700f5543 --- /dev/null +++ b/test/compiler/ets/sequenceAssignment.ets @@ -0,0 +1,4 @@ +function main(): void { + let x = 0; + x = (++x, x++); +}