#include "config.h"
#include "ConstructData.h"
#include "Interpreter.h"
#include "JSCInlines.h"
#include "JSFunction.h"
#include "JSGlobalObject.h"
#include "ScriptProfilingScope.h"
namespace JSC {
JSObject* construct(ExecState* exec, JSValue constructorObject, const ArgList& args, const char* errorMessage)
{
VM& vm = exec->vm();
auto scope = DECLARE_THROW_SCOPE(vm);
ConstructData constructData;
ConstructType constructType = getConstructData(vm, constructorObject, constructData);
if (constructType == ConstructType::None)
return throwTypeError(exec, scope, errorMessage);
scope.release();
return construct(exec, constructorObject, constructType, constructData, args, constructorObject);
}
JSObject* construct(ExecState* exec, JSValue constructorObject, ConstructType constructType, const ConstructData& constructData, const ArgList& args, JSValue newTarget)
{
VM& vm = exec->vm();
ASSERT(constructType == ConstructType::JS || constructType == ConstructType::Host);
return vm.interpreter->executeConstruct(exec, asObject(constructorObject), constructType, constructData, args, newTarget);
}
JSObject* profiledConstruct(ExecState* exec, ProfilingReason reason, JSValue constructorObject, ConstructType constructType, const ConstructData& constructData, const ArgList& args, JSValue newTarget)
{
VM& vm = exec->vm();
ScriptProfilingScope profilingScope(vm.vmEntryGlobalObject(exec), reason);
return construct(exec, constructorObject, constructType, constructData, args, newTarget);
}
}