aboutsummaryrefslogtreecommitdiffstats
path: root/src/qml/qml/v8/qqmlbuiltinfunctions.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/qml/qml/v8/qqmlbuiltinfunctions.cpp')
-rw-r--r--src/qml/qml/v8/qqmlbuiltinfunctions.cpp53
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();
}