mirror of
https://github.com/LadybirdBrowser/ladybird.git
synced 2025-10-20 15:09:42 +00:00
The use of extract_parameter_arguments_and_body() here is to make things a little less awkward. If we were to exactly follow spec there would be an awkward handling of the case that no arguments were provided and we needed to provide an empty string. To do this, we would need to either: - Provide an Optional<Value> for bodyString to CreateDynamicFunction - Create a new empty PrimitiveString wrapped in a JS Value. Either case is somewhat awkward. Instead, just refactor this logic outside of CreateDynamicFunction and make the caller do it. Otherwise, this commit prepares for the new definition of HostEnsureCanCompileStrings.
40 lines
1.2 KiB
C++
40 lines
1.2 KiB
C++
/*
|
|
* Copyright (c) 2020-2022, Linus Groh <linusg@serenityos.org>
|
|
*
|
|
* SPDX-License-Identifier: BSD-2-Clause
|
|
*/
|
|
|
|
#pragma once
|
|
|
|
#include <LibJS/Runtime/FunctionKind.h>
|
|
#include <LibJS/Runtime/NativeFunction.h>
|
|
|
|
namespace JS {
|
|
|
|
struct ParameterArgumentsAndBody {
|
|
Vector<String> parameters;
|
|
String body;
|
|
};
|
|
|
|
ThrowCompletionOr<ParameterArgumentsAndBody> extract_parameter_arguments_and_body(VM&, Span<Value> arguments);
|
|
|
|
class FunctionConstructor final : public NativeFunction {
|
|
JS_OBJECT(FunctionConstructor, NativeFunction);
|
|
JS_DECLARE_ALLOCATOR(FunctionConstructor);
|
|
|
|
public:
|
|
static ThrowCompletionOr<NonnullGCPtr<ECMAScriptFunctionObject>> create_dynamic_function(VM&, FunctionObject& constructor, FunctionObject* new_target, FunctionKind kind, ReadonlySpan<String> parameter_args, String const& body_string);
|
|
|
|
virtual void initialize(Realm&) override;
|
|
virtual ~FunctionConstructor() override = default;
|
|
|
|
virtual ThrowCompletionOr<Value> call() override;
|
|
virtual ThrowCompletionOr<NonnullGCPtr<Object>> construct(FunctionObject& new_target) override;
|
|
|
|
private:
|
|
explicit FunctionConstructor(Realm&);
|
|
|
|
virtual bool has_constructor() const override { return true; }
|
|
};
|
|
|
|
}
|