1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-07-26 20:37:36 +00:00

LibJS: Add support for public fields in classes

This commit is contained in:
davidot 2021-08-28 17:11:05 +02:00 committed by Linus Groh
parent 3b6a8d1d53
commit def8b44c40
9 changed files with 265 additions and 11 deletions

View file

@ -933,6 +933,30 @@ private:
bool m_is_static;
};
class ClassField final : public ASTNode {
public:
ClassField(SourceRange source_range, NonnullRefPtr<Expression> key, RefPtr<Expression> init, bool is_static)
: ASTNode(source_range)
, m_key(move(key))
, m_initializer(move(init))
, m_is_static(is_static)
{
}
Expression const& key() const { return *m_key; }
bool is_static() const { return m_is_static; }
RefPtr<Expression> const& initializer() const { return m_initializer; }
RefPtr<Expression>& initializer() { return m_initializer; }
virtual Value execute(Interpreter&, GlobalObject&) const override;
virtual void dump(int indent) const override;
private:
NonnullRefPtr<Expression> m_key;
RefPtr<Expression> m_initializer;
bool m_is_static;
};
class SuperExpression final : public Expression {
public:
explicit SuperExpression(SourceRange source_range)
@ -948,12 +972,13 @@ public:
class ClassExpression final : public Expression {
public:
ClassExpression(SourceRange source_range, String name, RefPtr<FunctionExpression> constructor, RefPtr<Expression> super_class, NonnullRefPtrVector<ClassMethod> methods)
ClassExpression(SourceRange source_range, String name, RefPtr<FunctionExpression> constructor, RefPtr<Expression> super_class, NonnullRefPtrVector<ClassMethod> methods, NonnullRefPtrVector<ClassField> fields)
: Expression(source_range)
, m_name(move(name))
, m_constructor(move(constructor))
, m_super_class(move(super_class))
, m_methods(move(methods))
, m_fields(move(fields))
{
}
@ -968,6 +993,7 @@ private:
RefPtr<FunctionExpression> m_constructor;
RefPtr<Expression> m_super_class;
NonnullRefPtrVector<ClassMethod> m_methods;
NonnullRefPtrVector<ClassField> m_fields;
};
class ClassDeclaration final : public Declaration {