diff options
author | Lars Knoll <lars.knoll@qt.io> | 2018-04-25 22:34:55 +0200 |
---|---|---|
committer | Lars Knoll <lars.knoll@qt.io> | 2018-05-02 14:20:16 +0000 |
commit | 440a25388b55d465873647b3dc9f470ed68e917e (patch) | |
tree | e79cae143659596bcd62b3423699f0cdf2c41fd3 /src/qml/jsruntime/qv4functionobject.cpp | |
parent | a4207b2f958e12b01653d8285d9433a77bce9c52 (diff) |
Make instanceOf compliant with the ES7 spec
Add implementation for Function.prototype[Symbol.hasInstance]
and call it when defined.
Change-Id: Iad6b0c075452b46ba710ffe7b94b74b71f715d22
Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
Diffstat (limited to 'src/qml/jsruntime/qv4functionobject.cpp')
-rw-r--r-- | src/qml/jsruntime/qv4functionobject.cpp | 13 |
1 files changed, 13 insertions, 0 deletions
diff --git a/src/qml/jsruntime/qv4functionobject.cpp b/src/qml/jsruntime/qv4functionobject.cpp index bd32a86691..98db060a00 100644 --- a/src/qml/jsruntime/qv4functionobject.cpp +++ b/src/qml/jsruntime/qv4functionobject.cpp @@ -41,6 +41,7 @@ #include "qv4objectproto_p.h" #include "qv4stringobject_p.h" #include "qv4function_p.h" +#include "qv4symbol_p.h" #include <private/qv4mm_p.h> #include "qv4arrayobject_p.h" @@ -277,6 +278,7 @@ void FunctionPrototype::init(ExecutionEngine *engine, Object *ctor) defineDefaultProperty(QStringLiteral("apply"), method_apply, 2); defineDefaultProperty(QStringLiteral("call"), method_call, 1); defineDefaultProperty(QStringLiteral("bind"), method_bind, 1); + defineDefaultProperty(engine->symbol_hasInstance(), method_hasInstance, 1, Attr_ReadOnly); } ReturnedValue FunctionPrototype::method_toString(const FunctionObject *b, const Value *thisObject, const Value *, int) @@ -385,6 +387,17 @@ ReturnedValue FunctionPrototype::method_bind(const FunctionObject *b, const Valu return bound->asReturnedValue(); } +ReturnedValue FunctionPrototype::method_hasInstance(const FunctionObject *f, const Value *thisObject, const Value *argv, int argc) +{ + if (!argc) + return false; + const Object *o = thisObject->as<Object>(); + if (!o) + return f->engine()->throwTypeError(); + + return Object::instanceOf(o, argv[0]); +} + DEFINE_OBJECT_VTABLE(ScriptFunction); ReturnedValue ScriptFunction::callAsConstructor(const FunctionObject *fo, const Value *argv, int argc) |