diff options
Diffstat (limited to 'src/qml/qml/v8/qqmlbuiltinfunctions.cpp')
-rw-r--r-- | src/qml/qml/v8/qqmlbuiltinfunctions.cpp | 53 |
1 files changed, 25 insertions, 28 deletions
diff --git a/src/qml/qml/v8/qqmlbuiltinfunctions.cpp b/src/qml/qml/v8/qqmlbuiltinfunctions.cpp index 82af1c3fb8..5e0e68472d 100644 --- a/src/qml/qml/v8/qqmlbuiltinfunctions.cpp +++ b/src/qml/qml/v8/qqmlbuiltinfunctions.cpp @@ -1175,39 +1175,36 @@ ReturnedValue QtObject::method_locale(CallContext *ctx) return QQmlLocale::locale(v8engine, code); } -namespace { - -struct BindingFunction : public QV4::FunctionObject +QQmlBindingFunction::QQmlBindingFunction(FunctionObject *originalFunction) + : QV4::FunctionObject(originalFunction->scope, originalFunction->name()) + , originalFunction(originalFunction) { - V4_OBJECT - BindingFunction(FunctionObject *originalFunction) - : QV4::FunctionObject(originalFunction->scope, originalFunction->name()) - , originalFunction(originalFunction) - { - setVTable(staticVTable()); - bindingKeyFlag = true; - } - - static ReturnedValue call(Managed *that, CallData *callData) - { - BindingFunction *This = static_cast<BindingFunction*>(that); - return This->originalFunction->call(callData); - } - - static void markObjects(Managed *that, ExecutionEngine *e) - { - BindingFunction *This = static_cast<BindingFunction*>(that); - This->originalFunction->mark(e); - QV4::FunctionObject::markObjects(that, e); - } + setVTable(staticVTable()); + bindingKeyFlag = true; +} - QV4::FunctionObject *originalFunction; -}; +void QQmlBindingFunction::initBindingLocation() +{ + QV4::StackFrame frame = engine()->currentStackFrame(); + bindingLocation.sourceFile = frame.source; + bindingLocation.line = frame.line; +} -DEFINE_OBJECT_VTABLE(BindingFunction); +ReturnedValue QQmlBindingFunction::call(Managed *that, CallData *callData) +{ + QQmlBindingFunction *This = static_cast<QQmlBindingFunction*>(that); + return This->originalFunction->call(callData); +} +void QQmlBindingFunction::markObjects(Managed *that, ExecutionEngine *e) +{ + QQmlBindingFunction *This = static_cast<QQmlBindingFunction*>(that); + This->originalFunction->mark(e); + QV4::FunctionObject::markObjects(that, e); } +DEFINE_OBJECT_VTABLE(QQmlBindingFunction); + /*! \qmlmethod Qt::binding(function) @@ -1262,7 +1259,7 @@ ReturnedValue QtObject::method_binding(CallContext *ctx) if (!f) V4THROW_TYPE("binding(): argument (binding expression) must be a function"); - return (new (ctx->engine->memoryManager) BindingFunction(f))->asReturnedValue(); + return (new (ctx->engine->memoryManager) QQmlBindingFunction(f))->asReturnedValue(); } |