diff options
author | Erik Verbruggen <erik.verbruggen@qt.io> | 2017-09-14 14:54:42 +0200 |
---|---|---|
committer | Erik Verbruggen <erik.verbruggen@qt.io> | 2017-09-19 09:44:33 +0000 |
commit | 042aa2eb0e55616fc754d0d71246efb531ca6dfe (patch) | |
tree | f48118a1f8564b4c4cbadc0ebf291d56d59dbb70 /src/qml/jsruntime/qv4functionobject.cpp | |
parent | b7ddcdad876cf0a46aa14a0f78ee8b3e4f685c19 (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.cpp | 30 |
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(); } |