mirror of
https://github.com/LadybirdBrowser/ladybird.git
synced 2025-09-22 01:08:56 +00:00
LibJS: Change NewFunction instruction to accept FunctionNode
Preparation for upcoming changes where NewFunction will have to be used with FunctionDeclaration node.
This commit is contained in:
parent
00018ad415
commit
89a007327a
Notes:
sideshowbarker
2024-07-17 02:59:43 +09:00
Author: https://github.com/kalenikaliaksandr
Commit: 89a007327a
Pull-request: https://github.com/SerenityOS/serenity/pull/24272
3 changed files with 18 additions and 6 deletions
|
@ -714,6 +714,11 @@ public:
|
||||||
FunctionKind kind() const { return m_kind; }
|
FunctionKind kind() const { return m_kind; }
|
||||||
UsesThis uses_this() const { return m_uses_this; }
|
UsesThis uses_this() const { return m_uses_this; }
|
||||||
|
|
||||||
|
virtual bool has_name() const = 0;
|
||||||
|
virtual Value instantiate_ordinary_function_expression(VM&, DeprecatedFlyString given_name) const = 0;
|
||||||
|
|
||||||
|
virtual ~FunctionNode() {};
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
FunctionNode(RefPtr<Identifier const> name, ByteString source_text, NonnullRefPtr<Statement const> body, Vector<FunctionParameter> parameters, i32 function_length, FunctionKind kind, bool is_strict_mode, bool might_need_arguments_object, bool contains_direct_call_to_eval, bool is_arrow_function, Vector<DeprecatedFlyString> local_variables_names, UsesThis uses_this)
|
FunctionNode(RefPtr<Identifier const> name, ByteString source_text, NonnullRefPtr<Statement const> body, Vector<FunctionParameter> parameters, i32 function_length, FunctionKind kind, bool is_strict_mode, bool might_need_arguments_object, bool contains_direct_call_to_eval, bool is_arrow_function, Vector<DeprecatedFlyString> local_variables_names, UsesThis uses_this)
|
||||||
: m_name(move(name))
|
: m_name(move(name))
|
||||||
|
@ -773,6 +778,11 @@ public:
|
||||||
|
|
||||||
void set_should_do_additional_annexB_steps() { m_is_hoisted = true; }
|
void set_should_do_additional_annexB_steps() { m_is_hoisted = true; }
|
||||||
|
|
||||||
|
bool has_name() const override { return true; }
|
||||||
|
Value instantiate_ordinary_function_expression(VM&, DeprecatedFlyString) const override { VERIFY_NOT_REACHED(); }
|
||||||
|
|
||||||
|
virtual ~FunctionDeclaration() {};
|
||||||
|
|
||||||
private:
|
private:
|
||||||
bool m_is_hoisted { false };
|
bool m_is_hoisted { false };
|
||||||
};
|
};
|
||||||
|
@ -794,9 +804,11 @@ public:
|
||||||
virtual Bytecode::CodeGenerationErrorOr<Optional<Bytecode::ScopedOperand>> generate_bytecode(Bytecode::Generator&, Optional<Bytecode::ScopedOperand> preferred_dst = {}) const override;
|
virtual Bytecode::CodeGenerationErrorOr<Optional<Bytecode::ScopedOperand>> generate_bytecode(Bytecode::Generator&, Optional<Bytecode::ScopedOperand> preferred_dst = {}) const override;
|
||||||
virtual Bytecode::CodeGenerationErrorOr<Optional<Bytecode::ScopedOperand>> generate_bytecode_with_lhs_name(Bytecode::Generator&, Optional<Bytecode::IdentifierTableIndex> lhs_name, Optional<Bytecode::ScopedOperand> preferred_dst = {}) const;
|
virtual Bytecode::CodeGenerationErrorOr<Optional<Bytecode::ScopedOperand>> generate_bytecode_with_lhs_name(Bytecode::Generator&, Optional<Bytecode::IdentifierTableIndex> lhs_name, Optional<Bytecode::ScopedOperand> preferred_dst = {}) const;
|
||||||
|
|
||||||
bool has_name() const { return !name().is_empty(); }
|
bool has_name() const override { return !name().is_empty(); }
|
||||||
|
|
||||||
Value instantiate_ordinary_function_expression(VM&, DeprecatedFlyString given_name) const;
|
Value instantiate_ordinary_function_expression(VM&, DeprecatedFlyString given_name) const override;
|
||||||
|
|
||||||
|
virtual ~FunctionExpression() {};
|
||||||
|
|
||||||
private:
|
private:
|
||||||
virtual bool is_function_expression() const override { return true; }
|
virtual bool is_function_expression() const override { return true; }
|
||||||
|
|
|
@ -420,7 +420,7 @@ inline ThrowCompletionOr<void> set_variable(
|
||||||
return {};
|
return {};
|
||||||
}
|
}
|
||||||
|
|
||||||
inline Value new_function(VM& vm, FunctionExpression const& function_node, Optional<IdentifierTableIndex> const& lhs_name, Optional<Operand> const& home_object)
|
inline Value new_function(VM& vm, FunctionNode const& function_node, Optional<IdentifierTableIndex> const& lhs_name, Optional<Operand> const& home_object)
|
||||||
{
|
{
|
||||||
Value value;
|
Value value;
|
||||||
|
|
||||||
|
|
|
@ -1399,7 +1399,7 @@ private:
|
||||||
|
|
||||||
class NewFunction final : public Instruction {
|
class NewFunction final : public Instruction {
|
||||||
public:
|
public:
|
||||||
explicit NewFunction(Operand dst, FunctionExpression const& function_node, Optional<IdentifierTableIndex> lhs_name, Optional<Operand> home_object = {})
|
explicit NewFunction(Operand dst, FunctionNode const& function_node, Optional<IdentifierTableIndex> lhs_name, Optional<Operand> home_object = {})
|
||||||
: Instruction(Type::NewFunction)
|
: Instruction(Type::NewFunction)
|
||||||
, m_dst(dst)
|
, m_dst(dst)
|
||||||
, m_function_node(function_node)
|
, m_function_node(function_node)
|
||||||
|
@ -1412,13 +1412,13 @@ public:
|
||||||
ByteString to_byte_string_impl(Bytecode::Executable const&) const;
|
ByteString to_byte_string_impl(Bytecode::Executable const&) const;
|
||||||
|
|
||||||
Operand dst() const { return m_dst; }
|
Operand dst() const { return m_dst; }
|
||||||
FunctionExpression const& function_node() const { return m_function_node; }
|
FunctionNode const& function_node() const { return m_function_node; }
|
||||||
Optional<IdentifierTableIndex> const& lhs_name() const { return m_lhs_name; }
|
Optional<IdentifierTableIndex> const& lhs_name() const { return m_lhs_name; }
|
||||||
Optional<Operand> const& home_object() const { return m_home_object; }
|
Optional<Operand> const& home_object() const { return m_home_object; }
|
||||||
|
|
||||||
private:
|
private:
|
||||||
Operand m_dst;
|
Operand m_dst;
|
||||||
FunctionExpression const& m_function_node;
|
FunctionNode const& m_function_node;
|
||||||
Optional<IdentifierTableIndex> m_lhs_name;
|
Optional<IdentifierTableIndex> m_lhs_name;
|
||||||
Optional<Operand> m_home_object;
|
Optional<Operand> m_home_object;
|
||||||
};
|
};
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue