diff --git a/native_mate/arguments.h b/native_mate/arguments.h index cee1477b6786..29877a7c6b9d 100644 --- a/native_mate/arguments.h +++ b/native_mate/arguments.h @@ -60,6 +60,10 @@ class Arguments { return info_->This(); } + bool IsConstructCall() const { + return info_->IsConstructCall(); + } + int Length() const { return info_->Length(); } diff --git a/native_mate/constructor.h b/native_mate/constructor.h index 4dce532098bb..16cec447d2a7 100644 --- a/native_mate/constructor.h +++ b/native_mate/constructor.h @@ -151,6 +151,11 @@ class Constructor { private: static MATE_METHOD_RETURN_TYPE New(const WrappableFactoryFunction& factory, v8::Isolate* isolate, Arguments* args) { + if (!args->IsConstructCall()) { + args->ThrowError("Requires constructor call"); + MATE_METHOD_RETURN_UNDEFINED(); + } + Wrappable* object = internal::InvokeFactory(args, factory); if (object) object->Wrap(isolate, args->GetThis());