LibJS: Add SequenceExpression AST node (comma operator)

This patch only adds the AST node, the parser doesn't create them yet.
This commit is contained in:
Andreas Kling 2020-04-07 15:11:05 +02:00
parent f8942411ac
commit 19cbfaee54
Notes: sideshowbarker 2024-07-19 07:50:03 +09:00
2 changed files with 34 additions and 0 deletions

View file

@ -1133,4 +1133,22 @@ void ConditionalExpression::dump(int indent) const
m_test->dump(indent + 1);
}
void SequenceExpression::dump(int indent) const
{
ASTNode::dump(indent);
for (auto& expression : m_expressions)
expression.dump(indent + 1);
}
Value SequenceExpression::execute(Interpreter& interpreter) const
{
Value last_value;
for (auto& expression : m_expressions) {
last_value = expression.execute(interpreter);
if (interpreter.exception())
return {};
}
return last_value;
}
}

View file

@ -403,6 +403,22 @@ private:
NonnullRefPtr<Expression> m_lhs;
};
class SequenceExpression final : public Expression {
public:
SequenceExpression(NonnullRefPtrVector<Expression> expressions)
: m_expressions(move(expressions))
{
}
virtual void dump(int indent) const override;
virtual Value execute(Interpreter&) const override;
private:
virtual const char* class_name() const override { return "SequenceExpression"; }
NonnullRefPtrVector<Expression> m_expressions;
};
class Literal : public Expression {
protected:
explicit Literal() {}