1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-07-25 23:17:45 +00:00

LibJS: Lexer and parser support for "switch" statements

This commit is contained in:
Andreas Kling 2020-03-29 13:09:54 +02:00
parent 70dc80fa47
commit 1923051c5b
7 changed files with 164 additions and 2 deletions

View file

@ -496,7 +496,7 @@ public:
}
private:
virtual const char * class_name() const override { return "NewExpression"; }
virtual const char* class_name() const override { return "NewExpression"; }
virtual bool is_new_expression() const override { return true; }
};
@ -707,4 +707,50 @@ private:
NonnullRefPtr<Expression> m_argument;
};
class SwitchCase final : public ASTNode {
public:
SwitchCase(RefPtr<Expression> test, NonnullRefPtrVector<Statement> consequent)
: m_test(move(test))
, m_consequent(move(consequent))
{
}
virtual void dump(int indent) const override;
virtual Value execute(Interpreter&) const override;
private:
virtual const char* class_name() const override { return "SwitchCase"; }
RefPtr<Expression> m_test;
NonnullRefPtrVector<Statement> m_consequent;
};
class SwitchStatement final : public Statement {
public:
SwitchStatement(NonnullRefPtr<Expression> discriminant, NonnullRefPtrVector<SwitchCase> cases)
: m_discriminant(move(discriminant))
, m_cases(move(cases))
{
}
virtual void dump(int indent) const override;
virtual Value execute(Interpreter&) const override;
private:
virtual const char* class_name() const override { return "SwitchStatement"; }
NonnullRefPtr<Expression> m_discriminant;
NonnullRefPtrVector<SwitchCase> m_cases;
};
class BreakStatement final : public Statement {
public:
BreakStatement() {}
virtual Value execute(Interpreter&) const override;
private:
virtual const char* class_name() const override { return "BreakStatement"; }
};
}