aboutsummaryrefslogtreecommitdiffstats
path: root/src/qml/jsruntime/qv4functionobject.cpp
diff options
context:
space:
mode:
authorErik Verbruggen <erik.verbruggen@qt.io>2017-09-14 14:54:42 +0200
committerErik Verbruggen <erik.verbruggen@qt.io>2017-09-19 09:44:33 +0000
commit042aa2eb0e55616fc754d0d71246efb531ca6dfe (patch)
treef48118a1f8564b4c4cbadc0ebf291d56d59dbb70 /src/qml/jsruntime/qv4functionobject.cpp
parentb7ddcdad876cf0a46aa14a0f78ee8b3e4f685c19 (diff)
Change CallData::argc to be a QV4::Value
Instead of mimicking a Value. This makes sure that argc now stays correct even when anything on Value changes. Most of the change is mechanical: replace callData->argc by callData->argc(). Change-Id: I521831ae1ffb3966bad6589c18d7a373e13439d7 Reviewed-by: Lars Knoll <lars.knoll@qt.io>
Diffstat (limited to 'src/qml/jsruntime/qv4functionobject.cpp')
-rw-r--r--src/qml/jsruntime/qv4functionobject.cpp30
1 files changed, 15 insertions, 15 deletions
diff --git a/src/qml/jsruntime/qv4functionobject.cpp b/src/qml/jsruntime/qv4functionobject.cpp
index 3f971fcca5..98b3766242 100644
--- a/src/qml/jsruntime/qv4functionobject.cpp
+++ b/src/qml/jsruntime/qv4functionobject.cpp
@@ -185,13 +185,13 @@ ReturnedValue FunctionCtor::construct(const Managed *that, CallData *callData)
QString arguments;
QString body;
- if (callData->argc > 0) {
- for (int i = 0; i < callData->argc - 1; ++i) {
+ if (callData->argc() > 0) {
+ for (int i = 0, ei = callData->argc() - 1; i < ei; ++i) {
if (i)
arguments += QLatin1String(", ");
arguments += callData->args[i].toQString();
}
- body = callData->args[callData->argc - 1].toQString();
+ body = callData->args[callData->argc() - 1].toQString();
}
if (scope.engine->hasException)
return Encode::undefined();
@@ -321,10 +321,10 @@ ReturnedValue FunctionPrototype::method_call(const BuiltinFunction *b, CallData
return e->throwTypeError();
}
callData->function = callData->thisObject;
- callData->thisObject = callData->argc ? callData->args[0] : Primitive::undefinedValue();
- if (callData->argc) {
- --callData->argc;
- for (int i = 0; i < callData->argc; ++i)
+ callData->thisObject = callData->argc() ? callData->args[0] : Primitive::undefinedValue();
+ if (callData->argc()) {
+ callData->setArgc(callData->argc() - 1);
+ for (int i = 0, ei = callData->argc(); i < ei; ++i)
callData->args[i] = callData->args[i + 1];
}
return static_cast<FunctionObject &>(callData->function).call(callData);
@@ -339,10 +339,10 @@ ReturnedValue FunctionPrototype::method_bind(const BuiltinFunction *b, CallData
ScopedValue boundThis(scope, callData->argument(0));
Scoped<MemberData> boundArgs(scope, (Heap::MemberData *)0);
- if (callData->argc > 1) {
- boundArgs = MemberData::allocate(scope.engine, callData->argc - 1);
- boundArgs->d()->values.size = callData->argc - 1;
- for (uint i = 0; i < static_cast<uint>(callData->argc - 1); ++i)
+ if (callData->argc() > 1) {
+ boundArgs = MemberData::allocate(scope.engine, callData->argc() - 1);
+ boundArgs->d()->values.size = callData->argc() - 1;
+ for (uint i = 0, ei = static_cast<uint>(callData->argc() - 1); i < ei; ++i)
boundArgs->set(scope.engine, i, callData->args[i + 1]);
}
@@ -487,14 +487,14 @@ ReturnedValue BoundFunction::call(const Managed *that, CallData *dd)
return Encode::undefined();
Scoped<MemberData> boundArgs(scope, f->boundArgs());
- JSCall jsCall(scope, f->target(), (boundArgs ? boundArgs->size() : 0) + dd->argc);
+ JSCall jsCall(scope, f->target(), (boundArgs ? boundArgs->size() : 0) + dd->argc());
jsCall->thisObject = f->boundThis();
Value *argp = jsCall->args;
if (boundArgs) {
memcpy(argp, boundArgs->data(), boundArgs->size()*sizeof(Value));
argp += boundArgs->size();
}
- memcpy(argp, dd->args, dd->argc*sizeof(Value));
+ memcpy(argp, dd->args, dd->argc()*sizeof(Value));
return jsCall.call();
}
@@ -507,12 +507,12 @@ ReturnedValue BoundFunction::construct(const Managed *that, CallData *dd)
return Encode::undefined();
Scoped<MemberData> boundArgs(scope, f->boundArgs());
- JSCall jsCall(scope, f->target(), (boundArgs ? boundArgs->size() : 0) + dd->argc);
+ JSCall jsCall(scope, f->target(), (boundArgs ? boundArgs->size() : 0) + dd->argc());
Value *argp = jsCall->args;
if (boundArgs) {
memcpy(argp, boundArgs->data(), boundArgs->size()*sizeof(Value));
argp += boundArgs->size();
}
- memcpy(argp, dd->args, dd->argc*sizeof(Value));
+ memcpy(argp, dd->args, dd->argc()*sizeof(Value));
return jsCall.callAsConstructor();
}