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 | |
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')
22 files changed, 225 insertions, 225 deletions
diff --git a/src/qml/jsruntime/qv4argumentsobject.cpp b/src/qml/jsruntime/qv4argumentsobject.cpp index 1a60725d27..b86b616178 100644 --- a/src/qml/jsruntime/qv4argumentsobject.cpp +++ b/src/qml/jsruntime/qv4argumentsobject.cpp @@ -232,7 +232,7 @@ ReturnedValue ArgumentsSetterFunction::call(const Managed *setter, CallData *cal return v4->throwTypeError(); Q_ASSERT(s->index() < static_cast<unsigned>(o->context()->argc())); - o->context()->setArg(s->index(), (callData->argc ? callData->args[0] : Primitive::undefinedValue())); + o->context()->setArg(s->index(), (callData->argc() ? callData->args[0] : Primitive::undefinedValue())); return Encode::undefined(); } diff --git a/src/qml/jsruntime/qv4arraybuffer.cpp b/src/qml/jsruntime/qv4arraybuffer.cpp index bd47d0bc77..e5388e714c 100644 --- a/src/qml/jsruntime/qv4arraybuffer.cpp +++ b/src/qml/jsruntime/qv4arraybuffer.cpp @@ -80,7 +80,7 @@ ReturnedValue ArrayBufferCtor::call(const Managed *that, CallData *callData) ReturnedValue ArrayBufferCtor::method_isView(const BuiltinFunction *, CallData *callData) { - if (callData->argc < 1) + if (callData->argc() < 1) return Encode(false); if (callData->args[0].as<TypedArray>() || @@ -173,8 +173,8 @@ ReturnedValue ArrayBufferPrototype::method_slice(const BuiltinFunction *b, CallD if (!a) return v4->throwTypeError(); - double start = callData->argc > 0 ? callData->args[0].toInteger() : 0; - double end = (callData->argc < 2 || callData->args[1].isUndefined()) ? + double start = callData->argc() > 0 ? callData->args[0].toInteger() : 0; + double end = (callData->argc() < 2 || callData->args[1].isUndefined()) ? a->d()->data->size : callData->args[1].toInteger(); if (v4->hasException) return QV4::Encode::undefined(); diff --git a/src/qml/jsruntime/qv4arrayobject.cpp b/src/qml/jsruntime/qv4arrayobject.cpp index 7796da5c70..5abfe3f8ae 100644 --- a/src/qml/jsruntime/qv4arrayobject.cpp +++ b/src/qml/jsruntime/qv4arrayobject.cpp @@ -61,7 +61,7 @@ ReturnedValue ArrayCtor::construct(const Managed *m, CallData *callData) Scope scope(v4); ScopedArrayObject a(scope, v4->newArrayObject()); uint len; - if (callData->argc == 1 && callData->args[0].isNumber()) { + if (callData->argc() == 1 && callData->args[0].isNumber()) { bool ok; len = callData->args[0].asArrayLength(&ok); @@ -71,7 +71,7 @@ ReturnedValue ArrayCtor::construct(const Managed *m, CallData *callData) if (len < 0x1000) a->arrayReserve(len); } else { - len = callData->argc; + len = callData->argc(); a->arrayReserve(len); a->arrayPut(0, callData->args, len); } @@ -120,7 +120,7 @@ void ArrayPrototype::init(ExecutionEngine *engine, Object *ctor) ReturnedValue ArrayPrototype::method_isArray(const BuiltinFunction *, CallData *callData) { - bool isArray = callData->argc && callData->args[0].as<ArrayObject>(); + bool isArray = callData->argc() && callData->args[0].as<ArrayObject>(); return Encode(isArray); } @@ -163,7 +163,7 @@ ReturnedValue ArrayPrototype::method_concat(const BuiltinFunction *b, CallData * ScopedArrayObject elt(scope); ScopedObject eltAsObj(scope); ScopedValue entry(scope); - for (int i = 0; i < callData->argc; ++i) { + for (int i = 0, ei = callData->argc(); i < ei; ++i) { eltAsObj = callData->args[i]; elt = callData->args[i]; if (elt) { @@ -359,16 +359,16 @@ ReturnedValue ArrayPrototype::method_push(const BuiltinFunction *b, CallData *ca uint len = instance->getLength(); - if (len + callData->argc < len) { + if (len + callData->argc() < len) { // ughh... this goes beyond UINT_MAX double l = len; ScopedString s(scope); - for (int i = 0; i < callData->argc; ++i) { + for (int i = 0, ei = callData->argc(); i < ei; ++i) { s = Primitive::fromDouble(l + i).toString(scope.engine); if (!instance->put(s, callData->args[i])) return scope.engine->throwTypeError(); } - double newLen = l + callData->argc; + double newLen = l + callData->argc(); if (!instance->isArrayObject()) { if (!instance->put(scope.engine->id_length(), ScopedValue(scope, Primitive::fromDouble(newLen)))) return scope.engine->throwTypeError(); @@ -379,16 +379,17 @@ ReturnedValue ArrayPrototype::method_push(const BuiltinFunction *b, CallData *ca return Encode(newLen); } - if (!callData->argc) + if (!callData->argc()) ; else if (!instance->protoHasArray() && instance->arrayData()->length() <= len && instance->arrayData()->type == Heap::ArrayData::Simple) { - instance->arrayData()->vtable()->putArray(instance, len, callData->args, callData->argc); + instance->arrayData()->vtable()->putArray(instance, len, callData->args, callData->argc()); len = instance->arrayData()->length(); } else { - for (int i = 0; i < callData->argc; ++i) + for (int i = 0, ei = callData->argc(); i < ei; ++i) { if (!instance->putIndexed(len + i, callData->args[i])) return scope.engine->throwTypeError(); - len += callData->argc; + } + len += callData->argc(); } if (instance->isArrayObject()) instance->setArrayLengthUnchecked(len); @@ -508,7 +509,7 @@ ReturnedValue ArrayPrototype::method_slice(const BuiltinFunction *b, CallData *c else start = (uint) s; uint end = len; - if (callData->argc > 1 && !callData->args[1].isUndefined()) { + if (callData->argc() > 1 && !callData->args[1].isUndefined()) { double e = callData->args[1].toInteger(); if (e < 0) end = (uint)qMax(len + e, 0.); @@ -576,7 +577,7 @@ ReturnedValue ArrayPrototype::method_splice(const BuiltinFunction *b, CallData * } newArray->setArrayLengthUnchecked(deleteCount); - uint itemCount = callData->argc < 2 ? 0 : callData->argc - 2; + uint itemCount = callData->argc() < 2 ? 0 : callData->argc() - 2; if (itemCount < deleteCount) { for (uint k = start; k < len - deleteCount; ++k) { @@ -635,7 +636,7 @@ ReturnedValue ArrayPrototype::method_unshift(const BuiltinFunction *b, CallData if (!instance->protoHasArray() && !instance->arrayData()->attrs && instance->arrayData()->length() <= len && instance->arrayData()->type != Heap::ArrayData::Custom) { - instance->arrayData()->vtable()->push_front(instance, callData->args, callData->argc); + instance->arrayData()->vtable()->push_front(instance, callData->args, callData->argc()); } else { ScopedValue v(scope); for (uint k = len; k > 0; --k) { @@ -643,20 +644,20 @@ ReturnedValue ArrayPrototype::method_unshift(const BuiltinFunction *b, CallData v = instance->getIndexed(k - 1, &exists); bool ok; if (exists) - ok = instance->putIndexed(k + callData->argc - 1, v); + ok = instance->putIndexed(k + callData->argc() - 1, v); else - ok = instance->deleteIndexedProperty(k + callData->argc - 1); + ok = instance->deleteIndexedProperty(k + callData->argc() - 1); if (!ok) return scope.engine->throwTypeError(); } - for (int i = 0; i < callData->argc; ++i) { + for (int i = 0, ei = callData->argc(); i < ei; ++i) { bool ok = instance->putIndexed(i, callData->args[i]); if (!ok) return scope.engine->throwTypeError(); } } - uint newLen = len + callData->argc; + uint newLen = len + callData->argc(); if (instance->isArrayObject()) instance->setArrayLengthUnchecked(newLen); else { @@ -681,7 +682,7 @@ ReturnedValue ArrayPrototype::method_indexOf(const BuiltinFunction *b, CallData ScopedValue searchValue(scope, callData->argument(0)); uint fromIndex = 0; - if (callData->argc >= 2) { + if (callData->argc() >= 2) { double f = callData->args[1].toInteger(); CHECK_EXCEPTION(); if (f >= len) @@ -747,12 +748,12 @@ ReturnedValue ArrayPrototype::method_lastIndexOf(const BuiltinFunction *b, CallD ScopedValue searchValue(scope); uint fromIndex = len; - if (callData->argc >= 1) + if (callData->argc() >= 1) searchValue = callData->argument(0); else searchValue = Primitive::undefinedValue(); - if (callData->argc >= 2) { + if (callData->argc() >= 2) { double f = callData->args[1].toInteger(); CHECK_EXCEPTION(); if (f > 0) @@ -970,7 +971,7 @@ ReturnedValue ArrayPrototype::method_reduce(const BuiltinFunction *b, CallData * ScopedValue acc(scope); ScopedValue v(scope); - if (callData->argc > 1) { + if (callData->argc() > 1) { acc = callData->argument(1); } else { bool kPresent = false; @@ -1015,7 +1016,7 @@ ReturnedValue ArrayPrototype::method_reduceRight(const BuiltinFunction *b, CallD THROW_TYPE_ERROR(); if (len == 0) { - if (callData->argc == 1) + if (callData->argc() == 1) THROW_TYPE_ERROR(); return callData->argument(1); } @@ -1023,7 +1024,7 @@ ReturnedValue ArrayPrototype::method_reduceRight(const BuiltinFunction *b, CallD uint k = len; ScopedValue acc(scope); ScopedValue v(scope); - if (callData->argc > 1) { + if (callData->argc() > 1) { acc = callData->argument(1); } else { bool kPresent = false; diff --git a/src/qml/jsruntime/qv4booleanobject.cpp b/src/qml/jsruntime/qv4booleanobject.cpp index d74750fa8c..d4e02e0356 100644 --- a/src/qml/jsruntime/qv4booleanobject.cpp +++ b/src/qml/jsruntime/qv4booleanobject.cpp @@ -52,13 +52,13 @@ void Heap::BooleanCtor::init(QV4::ExecutionContext *scope) ReturnedValue BooleanCtor::construct(const Managed *that, CallData *callData) { - bool n = callData->argc ? callData->args[0].toBoolean() : false; + bool n = callData->argc() ? callData->args[0].toBoolean() : false; return Encode(that->engine()->newBooleanObject(n)); } ReturnedValue BooleanCtor::call(const Managed *, CallData *callData) { - bool value = callData->argc ? callData->args[0].toBoolean() : 0; + bool value = callData->argc() ? callData->args[0].toBoolean() : 0; return Encode(value); } diff --git a/src/qml/jsruntime/qv4context.cpp b/src/qml/jsruntime/qv4context.cpp index b4edd34380..2598c079b8 100644 --- a/src/qml/jsruntime/qv4context.cpp +++ b/src/qml/jsruntime/qv4context.cpp @@ -57,7 +57,7 @@ DEFINE_MANAGED_VTABLE(CatchContext); Heap::CallContext *ExecutionContext::newCallContext(Heap::ExecutionContext *outer, Function *function, CallData *callData) { - uint nFormals = qMax(static_cast<uint>(callData->argc), function->nFormals); + uint nFormals = qMax(static_cast<uint>(callData->argc()), function->nFormals); uint localsAndFormals = function->compiledFunction->nLocals + nFormals; size_t requiredMemory = sizeof(CallContext::Data) - sizeof(Value) + sizeof(Value) * (localsAndFormals); @@ -83,7 +83,7 @@ Heap::CallContext *ExecutionContext::newCallContext(Heap::ExecutionContext *oute #endif ::memcpy(c->locals.values + nLocals, &callData->args[0], nFormals * sizeof(Value)); - c->nArgs = callData->argc; + c->nArgs = callData->argc(); return c; } diff --git a/src/qml/jsruntime/qv4context_p.h b/src/qml/jsruntime/qv4context_p.h index ec027c9fd3..7ed3320f8a 100644 --- a/src/qml/jsruntime/qv4context_p.h +++ b/src/qml/jsruntime/qv4context_p.h @@ -86,17 +86,20 @@ struct CallData Value context; Value accumulator; Value thisObject; + Value _argc; + + int argc() const { + Q_ASSERT(_argc.isInteger()); + return _argc.int_32(); + } + + void setArgc(int argc) { + Q_ASSERT(argc >= 0); + _argc.setInt_32(argc); + } - // below is to be compatible with Value. Initialize tag to 0 -#if Q_BYTE_ORDER != Q_LITTLE_ENDIAN - uint tag; -#endif - int argc; -#if Q_BYTE_ORDER == Q_LITTLE_ENDIAN - uint tag; -#endif inline ReturnedValue argument(int i) const { - return i < argc ? args[i].asReturnedValue() : Primitive::undefinedValue().asReturnedValue(); + return i < argc() ? args[i].asReturnedValue() : Primitive::undefinedValue().asReturnedValue(); } Value args[1]; diff --git a/src/qml/jsruntime/qv4dataview.cpp b/src/qml/jsruntime/qv4dataview.cpp index 57b5045f57..73163a9e32 100644 --- a/src/qml/jsruntime/qv4dataview.cpp +++ b/src/qml/jsruntime/qv4dataview.cpp @@ -61,10 +61,10 @@ ReturnedValue DataViewCtor::construct(const Managed *m, CallData *callData) if (!buffer) return scope.engine->throwTypeError(); - double bo = callData->argc > 1 ? callData->args[1].toNumber() : 0; + double bo = callData->argc() > 1 ? callData->args[1].toNumber() : 0; uint byteOffset = (uint)bo; uint bufferLength = buffer->d()->data->size; - double bl = callData->argc < 3 || callData->args[2].isUndefined() ? (bufferLength - bo) : callData->args[2].toNumber(); + double bl = callData->argc() < 3 || callData->args[2].isUndefined() ? (bufferLength - bo) : callData->args[2].toNumber(); uint byteLength = (uint)bl; if (bo != byteOffset || bl != byteLength || byteOffset + byteLength > bufferLength) return scope.engine->throwRangeError(QStringLiteral("DataView: constructor arguments out of range")); @@ -150,7 +150,7 @@ template <typename T> ReturnedValue DataViewPrototype::method_getChar(const BuiltinFunction *b, CallData *callData) { DataView *v = callData->thisObject.as<DataView>(); - if (!v || callData->argc < 1) + if (!v || callData->argc() < 1) return b->engine()->throwTypeError(); double l = callData->args[0].toNumber(); uint idx = (uint)l; @@ -167,7 +167,7 @@ template <typename T> ReturnedValue DataViewPrototype::method_get(const BuiltinFunction *b, CallData *callData) { DataView *v = callData->thisObject.as<DataView>(); - if (!v || callData->argc < 1) + if (!v || callData->argc() < 1) return b->engine()->throwTypeError(); double l = callData->args[0].toNumber(); uint idx = (uint)l; @@ -175,7 +175,7 @@ ReturnedValue DataViewPrototype::method_get(const BuiltinFunction *b, CallData * return b->engine()->throwTypeError(); idx += v->d()->byteOffset; - bool littleEndian = callData->argc < 2 ? false : callData->args[1].toBoolean(); + bool littleEndian = callData->argc() < 2 ? false : callData->args[1].toBoolean(); T t = littleEndian ? qFromLittleEndian<T>((uchar *)v->d()->buffer->data->data() + idx) @@ -188,7 +188,7 @@ template <typename T> ReturnedValue DataViewPrototype::method_getFloat(const BuiltinFunction *b, CallData *callData) { DataView *v = callData->thisObject.as<DataView>(); - if (!v || callData->argc < 1) + if (!v || callData->argc() < 1) return b->engine()->throwTypeError(); double l = callData->args[0].toNumber(); uint idx = (uint)l; @@ -196,7 +196,7 @@ ReturnedValue DataViewPrototype::method_getFloat(const BuiltinFunction *b, CallD return b->engine()->throwTypeError(); idx += v->d()->byteOffset; - bool littleEndian = callData->argc < 2 ? false : callData->args[1].toBoolean(); + bool littleEndian = callData->argc() < 2 ? false : callData->args[1].toBoolean(); if (sizeof(T) == 4) { // float @@ -225,7 +225,7 @@ template <typename T> ReturnedValue DataViewPrototype::method_setChar(const BuiltinFunction *b, CallData *callData) { DataView *v = callData->thisObject.as<DataView>(); - if (!v || callData->argc < 1) + if (!v || callData->argc() < 1) return b->engine()->throwTypeError(); double l = callData->args[0].toNumber(); uint idx = (uint)l; @@ -233,7 +233,7 @@ ReturnedValue DataViewPrototype::method_setChar(const BuiltinFunction *b, CallDa return b->engine()->throwTypeError(); idx += v->d()->byteOffset; - int val = callData->argc >= 2 ? callData->args[1].toInt32() : 0; + int val = callData->argc() >= 2 ? callData->args[1].toInt32() : 0; v->d()->buffer->data->data()[idx] = (char)val; RETURN_UNDEFINED(); @@ -243,7 +243,7 @@ template <typename T> ReturnedValue DataViewPrototype::method_set(const BuiltinFunction *b, CallData *callData) { DataView *v = callData->thisObject.as<DataView>(); - if (!v || callData->argc < 1) + if (!v || callData->argc() < 1) return b->engine()->throwTypeError(); double l = callData->args[0].toNumber(); uint idx = (uint)l; @@ -251,9 +251,9 @@ ReturnedValue DataViewPrototype::method_set(const BuiltinFunction *b, CallData * return b->engine()->throwTypeError(); idx += v->d()->byteOffset; - int val = callData->argc >= 2 ? callData->args[1].toInt32() : 0; + int val = callData->argc() >= 2 ? callData->args[1].toInt32() : 0; - bool littleEndian = callData->argc < 3 ? false : callData->args[2].toBoolean(); + bool littleEndian = callData->argc() < 3 ? false : callData->args[2].toBoolean(); if (littleEndian) qToLittleEndian<T>(val, (uchar *)v->d()->buffer->data->data() + idx); @@ -267,7 +267,7 @@ template <typename T> ReturnedValue DataViewPrototype::method_setFloat(const BuiltinFunction *b, CallData *callData) { DataView *v = callData->thisObject.as<DataView>(); - if (!v || callData->argc < 1) + if (!v || callData->argc() < 1) return b->engine()->throwTypeError(); double l = callData->args[0].toNumber(); uint idx = (uint)l; @@ -275,8 +275,8 @@ ReturnedValue DataViewPrototype::method_setFloat(const BuiltinFunction *b, CallD return b->engine()->throwTypeError(); idx += v->d()->byteOffset; - double val = callData->argc >= 2 ? callData->args[1].toNumber() : qt_qnan(); - bool littleEndian = callData->argc < 3 ? false : callData->args[2].toBoolean(); + double val = callData->argc() >= 2 ? callData->args[1].toNumber() : qt_qnan(); + bool littleEndian = callData->argc() < 3 ? false : callData->args[2].toBoolean(); if (sizeof(T) == 4) { // float diff --git a/src/qml/jsruntime/qv4dateobject.cpp b/src/qml/jsruntime/qv4dateobject.cpp index 64aecfe352..36ba36f2d3 100644 --- a/src/qml/jsruntime/qv4dateobject.cpp +++ b/src/qml/jsruntime/qv4dateobject.cpp @@ -682,10 +682,10 @@ ReturnedValue DateCtor::construct(const Managed *that, CallData *callData) { double t = 0; - if (callData->argc == 0) + if (callData->argc() == 0) t = currentTime(); - else if (callData->argc == 1) { + else if (callData->argc() == 1) { Scope scope(that->engine()); ScopedValue arg(scope, callData->args[0]); if (DateObject *d = arg->as<DateObject>()) { @@ -703,11 +703,11 @@ ReturnedValue DateCtor::construct(const Managed *that, CallData *callData) else { // d.argc > 1 double year = callData->args[0].toNumber(); double month = callData->args[1].toNumber(); - double day = callData->argc >= 3 ? callData->args[2].toNumber() : 1; - double hours = callData->argc >= 4 ? callData->args[3].toNumber() : 0; - double mins = callData->argc >= 5 ? callData->args[4].toNumber() : 0; - double secs = callData->argc >= 6 ? callData->args[5].toNumber() : 0; - double ms = callData->argc >= 7 ? callData->args[6].toNumber() : 0; + double day = callData->argc() >= 3 ? callData->args[2].toNumber() : 1; + double hours = callData->argc() >= 4 ? callData->args[3].toNumber() : 0; + double mins = callData->argc() >= 5 ? callData->args[4].toNumber() : 0; + double secs = callData->argc() >= 6 ? callData->args[5].toNumber() : 0; + double ms = callData->argc() >= 7 ? callData->args[6].toNumber() : 0; if (year >= 0 && year <= 99) year += 1900; t = MakeDate(MakeDay(year, month, day), MakeTime(hours, mins, secs, ms)); @@ -809,7 +809,7 @@ double DatePrototype::getThisDate(ExecutionEngine *v4, CallData *callData) ReturnedValue DatePrototype::method_parse(const BuiltinFunction *, CallData *callData) { - if (!callData->argc) + if (!callData->argc()) return Encode(qt_qnan()); else return Encode(ParseString(callData->args[0].toQString())); @@ -817,7 +817,7 @@ ReturnedValue DatePrototype::method_parse(const BuiltinFunction *, CallData *cal ReturnedValue DatePrototype::method_UTC(const BuiltinFunction *, CallData *callData) { - const int numArgs = callData->argc; + const int numArgs = callData->argc(); if (numArgs >= 2) { double year = callData->args[0].toNumber(); double month = callData->args[1].toNumber(); @@ -1066,7 +1066,7 @@ ReturnedValue DatePrototype::method_setTime(const BuiltinFunction *b, CallData * if (!self) return v4->throwTypeError(); - double t = callData->argc ? callData->args[0].toNumber() : qt_qnan(); + double t = callData->argc() ? callData->args[0].toNumber() : qt_qnan(); if (v4->hasException) return QV4::Encode::undefined(); self->setDate(TimeClip(t)); @@ -1083,7 +1083,7 @@ ReturnedValue DatePrototype::method_setMilliseconds(const BuiltinFunction *b, Ca double t = LocalTime(self->date()); if (v4->hasException) return QV4::Encode::undefined(); - double ms = callData->argc ? callData->args[0].toNumber() : qt_qnan(); + double ms = callData->argc() ? callData->args[0].toNumber() : qt_qnan(); if (v4->hasException) return QV4::Encode::undefined(); self->setDate(TimeClip(UTC(MakeDate(Day(t), MakeTime(HourFromTime(t), MinFromTime(t), SecFromTime(t), ms))))); @@ -1100,7 +1100,7 @@ ReturnedValue DatePrototype::method_setUTCMilliseconds(const BuiltinFunction *b, double t = self->date(); if (v4->hasException) return QV4::Encode::undefined(); - double ms = callData->argc ? callData->args[0].toNumber() : qt_qnan(); + double ms = callData->argc() ? callData->args[0].toNumber() : qt_qnan(); if (v4->hasException) return QV4::Encode::undefined(); self->setDate(TimeClip(MakeDate(Day(t), MakeTime(HourFromTime(t), MinFromTime(t), SecFromTime(t), ms)))); @@ -1117,10 +1117,10 @@ ReturnedValue DatePrototype::method_setSeconds(const BuiltinFunction *b, CallDat double t = LocalTime(self->date()); if (v4->hasException) return QV4::Encode::undefined(); - double sec = callData->argc ? callData->args[0].toNumber() : qt_qnan(); + double sec = callData->argc() ? callData->args[0].toNumber() : qt_qnan(); if (v4->hasException) return QV4::Encode::undefined(); - double ms = (callData->argc < 2) ? msFromTime(t) : callData->args[1].toNumber(); + double ms = (callData->argc() < 2) ? msFromTime(t) : callData->args[1].toNumber(); if (v4->hasException) return QV4::Encode::undefined(); t = TimeClip(UTC(MakeDate(Day(t), MakeTime(HourFromTime(t), MinFromTime(t), sec, ms)))); @@ -1136,8 +1136,8 @@ ReturnedValue DatePrototype::method_setUTCSeconds(const BuiltinFunction *b, Call return v4->throwTypeError(); double t = self->date(); - double sec = callData->argc ? callData->args[0].toNumber() : qt_qnan(); - double ms = (callData->argc < 2) ? msFromTime(t) : callData->args[1].toNumber(); + double sec = callData->argc() ? callData->args[0].toNumber() : qt_qnan(); + double ms = (callData->argc() < 2) ? msFromTime(t) : callData->args[1].toNumber(); t = TimeClip(MakeDate(Day(t), MakeTime(HourFromTime(t), MinFromTime(t), sec, ms))); self->setDate(t); return Encode(self->date()); @@ -1153,13 +1153,13 @@ ReturnedValue DatePrototype::method_setMinutes(const BuiltinFunction *b, CallDat double t = LocalTime(self->date()); if (v4->hasException) return QV4::Encode::undefined(); - double min = callData->argc ? callData->args[0].toNumber() : qt_qnan(); + double min = callData->argc() ? callData->args[0].toNumber() : qt_qnan(); if (v4->hasException) return QV4::Encode::undefined(); - double sec = (callData->argc < 2) ? SecFromTime(t) : callData->args[1].toNumber(); + double sec = (callData->argc() < 2) ? SecFromTime(t) : callData->args[1].toNumber(); if (v4->hasException) return QV4::Encode::undefined(); - double ms = (callData->argc < 3) ? msFromTime(t) : callData->args[2].toNumber(); + double ms = (callData->argc() < 3) ? msFromTime(t) : callData->args[2].toNumber(); if (v4->hasException) return QV4::Encode::undefined(); t = TimeClip(UTC(MakeDate(Day(t), MakeTime(HourFromTime(t), min, sec, ms)))); @@ -1175,9 +1175,9 @@ ReturnedValue DatePrototype::method_setUTCMinutes(const BuiltinFunction *b, Call return v4->throwTypeError(); double t = self->date(); - double min = callData->argc ? callData->args[0].toNumber() : qt_qnan(); - double sec = (callData->argc < 2) ? SecFromTime(t) : callData->args[1].toNumber(); - double ms = (callData->argc < 3) ? msFromTime(t) : callData->args[2].toNumber(); + double min = callData->argc() ? callData->args[0].toNumber() : qt_qnan(); + double sec = (callData->argc() < 2) ? SecFromTime(t) : callData->args[1].toNumber(); + double ms = (callData->argc() < 3) ? msFromTime(t) : callData->args[2].toNumber(); t = TimeClip(MakeDate(Day(t), MakeTime(HourFromTime(t), min, sec, ms))); self->setDate(t); return Encode(self->date()); @@ -1193,16 +1193,16 @@ ReturnedValue DatePrototype::method_setHours(const BuiltinFunction *b, CallData double t = LocalTime(self->date()); if (v4->hasException) return QV4::Encode::undefined(); - double hour = callData->argc ? callData->args[0].toNumber() : qt_qnan(); + double hour = callData->argc() ? callData->args[0].toNumber() : qt_qnan(); if (v4->hasException) return QV4::Encode::undefined(); - double min = (callData->argc < 2) ? MinFromTime(t) : callData->args[1].toNumber(); + double min = (callData->argc() < 2) ? MinFromTime(t) : callData->args[1].toNumber(); if (v4->hasException) return QV4::Encode::undefined(); - double sec = (callData->argc < 3) ? SecFromTime(t) : callData->args[2].toNumber(); + double sec = (callData->argc() < 3) ? SecFromTime(t) : callData->args[2].toNumber(); if (v4->hasException) return QV4::Encode::undefined(); - double ms = (callData->argc < 4) ? msFromTime(t) : callData->args[3].toNumber(); + double ms = (callData->argc() < 4) ? msFromTime(t) : callData->args[3].toNumber(); if (v4->hasException) return QV4::Encode::undefined(); t = TimeClip(UTC(MakeDate(Day(t), MakeTime(hour, min, sec, ms)))); @@ -1218,10 +1218,10 @@ ReturnedValue DatePrototype::method_setUTCHours(const BuiltinFunction *b, CallDa return v4->throwTypeError(); double t = self->date(); - double hour = callData->argc ? callData->args[0].toNumber() : qt_qnan(); - double min = (callData->argc < 2) ? MinFromTime(t) : callData->args[1].toNumber(); - double sec = (callData->argc < 3) ? SecFromTime(t) : callData->args[2].toNumber(); - double ms = (callData->argc < 4) ? msFromTime(t) : callData->args[3].toNumber(); + double hour = callData->argc() ? callData->args[0].toNumber() : qt_qnan(); + double min = (callData->argc() < 2) ? MinFromTime(t) : callData->args[1].toNumber(); + double sec = (callData->argc() < 3) ? SecFromTime(t) : callData->args[2].toNumber(); + double ms = (callData->argc() < 4) ? msFromTime(t) : callData->args[3].toNumber(); t = TimeClip(MakeDate(Day(t), MakeTime(hour, min, sec, ms))); self->setDate(t); return Encode(self->date()); @@ -1237,7 +1237,7 @@ ReturnedValue DatePrototype::method_setDate(const BuiltinFunction *b, CallData * double t = LocalTime(self->date()); if (v4->hasException) return QV4::Encode::undefined(); - double date = callData->argc ? callData->args[0].toNumber() : qt_qnan(); + double date = callData->argc() ? callData->args[0].toNumber() : qt_qnan(); if (v4->hasException) return QV4::Encode::undefined(); t = TimeClip(UTC(MakeDate(MakeDay(YearFromTime(t), MonthFromTime(t), date), TimeWithinDay(t)))); @@ -1255,7 +1255,7 @@ ReturnedValue DatePrototype::method_setUTCDate(const BuiltinFunction *b, CallDat double t = self->date(); if (v4->hasException) return QV4::Encode::undefined(); - double date = callData->argc ? callData->args[0].toNumber() : qt_qnan(); + double date = callData->argc() ? callData->args[0].toNumber() : qt_qnan(); if (v4->hasException) return QV4::Encode::undefined(); t = TimeClip(MakeDate(MakeDay(YearFromTime(t), MonthFromTime(t), date), TimeWithinDay(t))); @@ -1273,10 +1273,10 @@ ReturnedValue DatePrototype::method_setMonth(const BuiltinFunction *b, CallData double t = LocalTime(self->date()); if (v4->hasException) return QV4::Encode::undefined(); - double month = callData->argc ? callData->args[0].toNumber() : qt_qnan(); + double month = callData->argc() ? callData->args[0].toNumber() : qt_qnan(); if (v4->hasException) return QV4::Encode::undefined(); - double date = (callData->argc < 2) ? DateFromTime(t) : callData->args[1].toNumber(); + double date = (callData->argc() < 2) ? DateFromTime(t) : callData->args[1].toNumber(); if (v4->hasException) return QV4::Encode::undefined(); t = TimeClip(UTC(MakeDate(MakeDay(YearFromTime(t), month, date), TimeWithinDay(t)))); @@ -1292,8 +1292,8 @@ ReturnedValue DatePrototype::method_setUTCMonth(const BuiltinFunction *b, CallDa return v4->throwTypeError(); double t = self->date(); - double month = callData->argc ? callData->args[0].toNumber() : qt_qnan(); - double date = (callData->argc < 2) ? DateFromTime(t) : callData->args[1].toNumber(); + double month = callData->argc() ? callData->args[0].toNumber() : qt_qnan(); + double date = (callData->argc() < 2) ? DateFromTime(t) : callData->args[1].toNumber(); t = TimeClip(MakeDate(MakeDay(YearFromTime(t), month, date), TimeWithinDay(t))); self->setDate(t); return Encode(self->date()); @@ -1311,7 +1311,7 @@ ReturnedValue DatePrototype::method_setYear(const BuiltinFunction *b, CallData * t = 0; else t = LocalTime(t); - double year = callData->argc ? callData->args[0].toNumber() : qt_qnan(); + double year = callData->argc() ? callData->args[0].toNumber() : qt_qnan(); double r; if (std::isnan(year)) { r = qt_qnan(); @@ -1334,9 +1334,9 @@ ReturnedValue DatePrototype::method_setUTCFullYear(const BuiltinFunction *b, Cal return v4->throwTypeError(); double t = self->date(); - double year = callData->argc ? callData->args[0].toNumber() : qt_qnan(); - double month = (callData->argc < 2) ? MonthFromTime(t) : callData->args[1].toNumber(); - double date = (callData->argc < 3) ? DateFromTime(t) : callData->args[2].toNumber(); + double year = callData->argc() ? callData->args[0].toNumber() : qt_qnan(); + double month = (callData->argc() < 2) ? MonthFromTime(t) : callData->args[1].toNumber(); + double date = (callData->argc() < 3) ? DateFromTime(t) : callData->args[2].toNumber(); t = TimeClip(MakeDate(MakeDay(year, month, date), TimeWithinDay(t))); self->setDate(t); return Encode(self->date()); @@ -1354,13 +1354,13 @@ ReturnedValue DatePrototype::method_setFullYear(const BuiltinFunction *b, CallDa return QV4::Encode::undefined(); if (std::isnan(t)) t = 0; - double year = callData->argc ? callData->args[0].toNumber() : qt_qnan(); + double year = callData->argc() ? callData->args[0].toNumber() : qt_qnan(); if (v4->hasException) return QV4::Encode::undefined(); - double month = (callData->argc < 2) ? MonthFromTime(t) : callData->args[1].toNumber(); + double month = (callData->argc() < 2) ? MonthFromTime(t) : callData->args[1].toNumber(); if (v4->hasException) return QV4::Encode::undefined(); - double date = (callData->argc < 3) ? DateFromTime(t) : callData->args[2].toNumber(); + double date = (callData->argc() < 3) ? DateFromTime(t) : callData->args[2].toNumber(); if (v4->hasException) return QV4::Encode::undefined(); t = TimeClip(UTC(MakeDate(MakeDay(year, month, date), TimeWithinDay(t)))); 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(); } diff --git a/src/qml/jsruntime/qv4globalobject.cpp b/src/qml/jsruntime/qv4globalobject.cpp index 11105dfdcb..668fea25e7 100644 --- a/src/qml/jsruntime/qv4globalobject.cpp +++ b/src/qml/jsruntime/qv4globalobject.cpp @@ -340,7 +340,7 @@ void Heap::EvalFunction::init(QV4::ExecutionContext *scope) ReturnedValue EvalFunction::evalCall(CallData *callData, bool directCall) const { - if (callData->argc < 1) + if (callData->argc() < 1) return Encode::undefined(); ExecutionEngine *v4 = engine(); @@ -528,7 +528,7 @@ ReturnedValue GlobalFunctions::method_parseFloat(const BuiltinFunction *b, CallD /// isNaN [15.1.2.4] ReturnedValue GlobalFunctions::method_isNaN(const BuiltinFunction *, CallData *callData) { - if (!callData->argc) + if (!callData->argc()) // undefined gets converted to NaN RETURN_RESULT(Encode(true)); @@ -542,7 +542,7 @@ ReturnedValue GlobalFunctions::method_isNaN(const BuiltinFunction *, CallData *c /// isFinite [15.1.2.5] ReturnedValue GlobalFunctions::method_isFinite(const BuiltinFunction *, CallData *callData) { - if (!callData->argc) + if (!callData->argc()) // undefined gets converted to NaN RETURN_RESULT(Encode(false)); @@ -556,7 +556,7 @@ ReturnedValue GlobalFunctions::method_isFinite(const BuiltinFunction *, CallData /// decodeURI [15.1.3.1] ReturnedValue GlobalFunctions::method_decodeURI(const BuiltinFunction *b, CallData *callData) { - if (callData->argc == 0) + if (callData->argc() == 0) RETURN_UNDEFINED(); ExecutionEngine *v4 = b->engine(); @@ -575,7 +575,7 @@ ReturnedValue GlobalFunctions::method_decodeURI(const BuiltinFunction *b, CallDa /// decodeURIComponent [15.1.3.2] ReturnedValue GlobalFunctions::method_decodeURIComponent(const BuiltinFunction *b, CallData *callData) { - if (callData->argc == 0) + if (callData->argc() == 0) RETURN_UNDEFINED(); ExecutionEngine *v4 = b->engine(); @@ -594,7 +594,7 @@ ReturnedValue GlobalFunctions::method_decodeURIComponent(const BuiltinFunction * /// encodeURI [15.1.3.3] ReturnedValue GlobalFunctions::method_encodeURI(const BuiltinFunction *b, CallData *callData) { - if (callData->argc == 0) + if (callData->argc() == 0) RETURN_UNDEFINED(); ExecutionEngine *v4 = b->engine(); @@ -613,7 +613,7 @@ ReturnedValue GlobalFunctions::method_encodeURI(const BuiltinFunction *b, CallDa /// encodeURIComponent [15.1.3.4] ReturnedValue GlobalFunctions::method_encodeURIComponent(const BuiltinFunction *b, CallData *callData) { - if (callData->argc == 0) + if (callData->argc() == 0) RETURN_UNDEFINED(); ExecutionEngine *v4 = b->engine(); @@ -632,7 +632,7 @@ ReturnedValue GlobalFunctions::method_encodeURIComponent(const BuiltinFunction * ReturnedValue GlobalFunctions::method_escape(const BuiltinFunction *b, CallData *callData) { ExecutionEngine *v4 = b->engine(); - if (!callData->argc) + if (!callData->argc()) RETURN_RESULT(v4->newString(QStringLiteral("undefined"))); QString str = callData->args[0].toQString(); @@ -642,7 +642,7 @@ ReturnedValue GlobalFunctions::method_escape(const BuiltinFunction *b, CallData ReturnedValue GlobalFunctions::method_unescape(const BuiltinFunction *b, CallData *callData) { ExecutionEngine *v4 = b->engine(); - if (!callData->argc) + if (!callData->argc()) RETURN_RESULT(v4->newString(QStringLiteral("undefined"))); QString str = callData->args[0].toQString(); diff --git a/src/qml/jsruntime/qv4include.cpp b/src/qml/jsruntime/qv4include.cpp index 8983bea1a8..8122f61a5e 100644 --- a/src/qml/jsruntime/qv4include.cpp +++ b/src/qml/jsruntime/qv4include.cpp @@ -199,7 +199,7 @@ void QV4Include::finished() QV4::ReturnedValue QV4Include::method_include(const QV4::BuiltinFunction *b, QV4::CallData *callData) { QV4::Scope scope(b); - if (!callData->argc) + if (!callData->argc()) RETURN_UNDEFINED(); QQmlContextData *context = scope.engine->callingQmlContext(); @@ -208,7 +208,7 @@ QV4::ReturnedValue QV4Include::method_include(const QV4::BuiltinFunction *b, QV4 RETURN_RESULT(scope.engine->throwError(QString::fromUtf8("Qt.include(): Can only be called from JavaScript files"))); QV4::ScopedValue callbackFunction(scope, QV4::Primitive::undefinedValue()); - if (callData->argc >= 2 && callData->args[1].as<QV4::FunctionObject>()) + if (callData->argc() >= 2 && callData->args[1].as<QV4::FunctionObject>()) callbackFunction = callData->args[1]; #if QT_CONFIG(qml_network) diff --git a/src/qml/jsruntime/qv4jscall_p.h b/src/qml/jsruntime/qv4jscall_p.h index 78201a0ba8..8fd6119102 100644 --- a/src/qml/jsruntime/qv4jscall_p.h +++ b/src/qml/jsruntime/qv4jscall_p.h @@ -65,23 +65,20 @@ struct JSCall { { int size = int(offsetof(QV4::CallData, args)/sizeof(QV4::Value)) + qMax(argc , int(QV4::Global::ReservedArgumentCount)); ptr = reinterpret_cast<CallData *>(scope.alloc(size)); - ptr->tag = quint32(QV4::Value::ValueTypeInternal::Integer); - ptr->argc = argc; + ptr->setArgc(argc); } JSCall(const Scope &scope, const FunctionObject *function, int argc = 0) { int size = int(offsetof(QV4::CallData, args)/sizeof(QV4::Value)) + qMax(argc , int(QV4::Global::ReservedArgumentCount)); ptr = reinterpret_cast<CallData *>(scope.alloc(size)); - ptr->tag = quint32(QV4::Value::ValueTypeInternal::Integer); - ptr->argc = argc; + ptr->setArgc(argc); ptr->function = *function; } JSCall(const Scope &scope, Heap::FunctionObject *function, int argc = 0) { int size = int(offsetof(QV4::CallData, args)/sizeof(QV4::Value)) + qMax(argc , int(QV4::Global::ReservedArgumentCount)); ptr = reinterpret_cast<CallData *>(scope.alloc(size)); - ptr->tag = quint32(QV4::Value::ValueTypeInternal::Integer); - ptr->argc = argc; + ptr->setArgc(argc); ptr->function = function; } diff --git a/src/qml/jsruntime/qv4jsonobject.cpp b/src/qml/jsruntime/qv4jsonobject.cpp index 83cfb434dc..fb1f4abbfc 100644 --- a/src/qml/jsruntime/qv4jsonobject.cpp +++ b/src/qml/jsruntime/qv4jsonobject.cpp @@ -888,7 +888,7 @@ ReturnedValue JsonObject::method_parse(const BuiltinFunction *b, CallData *callD { ExecutionEngine *v4 = b->engine(); QString jtext; - if (callData->argc > 0) + if (callData->argc() > 0) jtext = callData->args[0].toQString(); DEBUG << "parsing source = " << jtext; diff --git a/src/qml/jsruntime/qv4mathobject.cpp b/src/qml/jsruntime/qv4mathobject.cpp index cdf5c3117c..5419e45038 100644 --- a/src/qml/jsruntime/qv4mathobject.cpp +++ b/src/qml/jsruntime/qv4mathobject.cpp @@ -95,7 +95,7 @@ static Q_ALWAYS_INLINE double copySign(double x, double y) ReturnedValue MathObject::method_abs(const BuiltinFunction *, CallData *callData) { - if (!callData->argc) + if (!callData->argc()) RETURN_RESULT(Encode(qt_qnan())); if (callData->args[0].isInteger()) { @@ -112,7 +112,7 @@ ReturnedValue MathObject::method_abs(const BuiltinFunction *, CallData *callData ReturnedValue MathObject::method_acos(const BuiltinFunction *, CallData *callData) { - double v = callData->argc ? callData->args[0].toNumber() : 2; + double v = callData->argc() ? callData->args[0].toNumber() : 2; if (v > 1) RETURN_RESULT(Encode(qt_qnan())); @@ -121,7 +121,7 @@ ReturnedValue MathObject::method_acos(const BuiltinFunction *, CallData *callDat ReturnedValue MathObject::method_asin(const BuiltinFunction *, CallData *callData) { - double v = callData->argc ? callData->args[0].toNumber() : 2; + double v = callData->argc() ? callData->args[0].toNumber() : 2; if (v > 1) RETURN_RESULT(Encode(qt_qnan())); else @@ -130,7 +130,7 @@ ReturnedValue MathObject::method_asin(const BuiltinFunction *, CallData *callDat ReturnedValue MathObject::method_atan(const BuiltinFunction *, CallData *callData) { - double v = callData->argc ? callData->args[0].toNumber() : qt_qnan(); + double v = callData->argc() ? callData->args[0].toNumber() : qt_qnan(); if (v == 0.0) RETURN_RESULT(Encode(v)); else @@ -139,8 +139,8 @@ ReturnedValue MathObject::method_atan(const BuiltinFunction *, CallData *callDat ReturnedValue MathObject::method_atan2(const BuiltinFunction *, CallData *callData) { - double v1 = callData->argc ? callData->args[0].toNumber() : qt_qnan(); - double v2 = callData->argc > 1 ? callData->args[1].toNumber() : qt_qnan(); + double v1 = callData->argc() ? callData->args[0].toNumber() : qt_qnan(); + double v2 = callData->argc() > 1 ? callData->args[1].toNumber() : qt_qnan(); if ((v1 < 0) && qt_is_finite(v1) && qt_is_inf(v2) && (copySign(1.0, v2) == 1.0)) RETURN_RESULT(Encode(copySign(0, -1.0))); @@ -157,7 +157,7 @@ ReturnedValue MathObject::method_atan2(const BuiltinFunction *, CallData *callDa ReturnedValue MathObject::method_ceil(const BuiltinFunction *, CallData *callData) { - double v = callData->argc ? callData->args[0].toNumber() : qt_qnan(); + double v = callData->argc() ? callData->args[0].toNumber() : qt_qnan(); if (v < 0.0 && v > -1.0) RETURN_RESULT(Encode(copySign(0, -1.0))); else @@ -166,13 +166,13 @@ ReturnedValue MathObject::method_ceil(const BuiltinFunction *, CallData *callDat ReturnedValue MathObject::method_cos(const BuiltinFunction *, CallData *callData) { - double v = callData->argc ? callData->args[0].toNumber() : qt_qnan(); + double v = callData->argc() ? callData->args[0].toNumber() : qt_qnan(); RETURN_RESULT(Encode(std::cos(v))); } ReturnedValue MathObject::method_exp(const BuiltinFunction *, CallData *callData) { - double v = callData->argc ? callData->args[0].toNumber() : qt_qnan(); + double v = callData->argc() ? callData->args[0].toNumber() : qt_qnan(); if (qt_is_inf(v)) { if (copySign(1.0, v) == -1.0) RETURN_RESULT(Encode(0)); @@ -185,7 +185,7 @@ ReturnedValue MathObject::method_exp(const BuiltinFunction *, CallData *callData ReturnedValue MathObject::method_floor(const BuiltinFunction *, CallData *callData) { - double v = callData->argc ? callData->args[0].toNumber() : qt_qnan(); + double v = callData->argc() ? callData->args[0].toNumber() : qt_qnan(); Value result = Primitive::fromDouble(std::floor(v)); result.isInt32(); RETURN_RESULT(result); @@ -193,7 +193,7 @@ ReturnedValue MathObject::method_floor(const BuiltinFunction *, CallData *callDa ReturnedValue MathObject::method_log(const BuiltinFunction *, CallData *callData) { - double v = callData->argc ? callData->args[0].toNumber() : qt_qnan(); + double v = callData->argc() ? callData->args[0].toNumber() : qt_qnan(); if (v < 0) RETURN_RESULT(Encode(qt_qnan())); else @@ -203,7 +203,7 @@ ReturnedValue MathObject::method_log(const BuiltinFunction *, CallData *callData ReturnedValue MathObject::method_max(const BuiltinFunction *, CallData *callData) { double mx = -qt_inf(); - for (int i = 0; i < callData->argc; ++i) { + for (int i = 0, ei = callData->argc(); i < ei; ++i) { double x = callData->args[i].toNumber(); if (x > mx || std::isnan(x)) mx = x; @@ -214,7 +214,7 @@ ReturnedValue MathObject::method_max(const BuiltinFunction *, CallData *callData ReturnedValue MathObject::method_min(const BuiltinFunction *, CallData *callData) { double mx = qt_inf(); - for (int i = 0; i < callData->argc; ++i) { + for (int i = 0, ei = callData->argc(); i < ei; ++i) { double x = callData->args[i].toNumber(); if ((x == 0 && mx == x && copySign(1.0, x) == -1.0) || (x < mx) || std::isnan(x)) { @@ -226,8 +226,8 @@ ReturnedValue MathObject::method_min(const BuiltinFunction *, CallData *callData ReturnedValue MathObject::method_pow(const BuiltinFunction *, CallData *callData) { - double x = callData->argc > 0 ? callData->args[0].toNumber() : qt_qnan(); - double y = callData->argc > 1 ? callData->args[1].toNumber() : qt_qnan(); + double x = callData->argc() > 0 ? callData->args[0].toNumber() : qt_qnan(); + double y = callData->argc() > 1 ? callData->args[1].toNumber() : qt_qnan(); if (std::isnan(y)) RETURN_RESULT(Encode(qt_qnan())); @@ -281,14 +281,14 @@ ReturnedValue MathObject::method_random(const BuiltinFunction *, CallData *) ReturnedValue MathObject::method_round(const BuiltinFunction *, CallData *callData) { - double v = callData->argc ? callData->args[0].toNumber() : qt_qnan(); + double v = callData->argc() ? callData->args[0].toNumber() : qt_qnan(); v = copySign(std::floor(v + 0.5), v); RETURN_RESULT(Encode(v)); } ReturnedValue MathObject::method_sign(const BuiltinFunction *, CallData *callData) { - double v = callData->argc ? callData->args[0].toNumber() : qt_qnan(); + double v = callData->argc() ? callData->args[0].toNumber() : qt_qnan(); if (std::isnan(v)) RETURN_RESULT(Encode(qt_qnan())); @@ -301,19 +301,19 @@ ReturnedValue MathObject::method_sign(const BuiltinFunction *, CallData *callDat ReturnedValue MathObject::method_sin(const BuiltinFunction *, CallData *callData) { - double v = callData->argc ? callData->args[0].toNumber() : qt_qnan(); + double v = callData->argc() ? callData->args[0].toNumber() : qt_qnan(); RETURN_RESULT(Encode(std::sin(v))); } ReturnedValue MathObject::method_sqrt(const BuiltinFunction *, CallData *callData) { - double v = callData->argc ? callData->args[0].toNumber() : qt_qnan(); + double v = callData->argc() ? callData->args[0].toNumber() : qt_qnan(); RETURN_RESULT(Encode(std::sqrt(v))); } ReturnedValue MathObject::method_tan(const BuiltinFunction *, CallData *callData) { - double v = callData->argc ? callData->args[0].toNumber() : qt_qnan(); + double v = callData->argc() ? callData->args[0].toNumber() : qt_qnan(); if (v == 0.0) RETURN_RESULT(Encode(v)); else diff --git a/src/qml/jsruntime/qv4numberobject.cpp b/src/qml/jsruntime/qv4numberobject.cpp index 1db5079355..173a869c3d 100644 --- a/src/qml/jsruntime/qv4numberobject.cpp +++ b/src/qml/jsruntime/qv4numberobject.cpp @@ -80,13 +80,13 @@ void Heap::NumberCtor::init(QV4::ExecutionContext *scope) ReturnedValue NumberCtor::construct(const Managed *m, CallData *callData) { - double dbl = callData->argc ? callData->args[0].toNumber() : 0.; + double dbl = callData->argc() ? callData->args[0].toNumber() : 0.; return Encode(m->engine()->newNumberObject(dbl)); } ReturnedValue NumberCtor::call(const Managed *, CallData *callData) { - double dbl = callData->argc ? callData->args[0].toNumber() : 0.; + double dbl = callData->argc() ? callData->args[0].toNumber() : 0.; return Encode(dbl); } @@ -150,7 +150,7 @@ inline double thisNumber(ExecutionEngine *engine, CallData *callData) ReturnedValue NumberPrototype::method_isFinite(const BuiltinFunction *, CallData *callData) { - if (!callData->argc) + if (!callData->argc()) return Encode(false); double v = callData->args[0].toNumber(); @@ -159,7 +159,7 @@ ReturnedValue NumberPrototype::method_isFinite(const BuiltinFunction *, CallData ReturnedValue NumberPrototype::method_isInteger(const BuiltinFunction *, CallData *callData) { - if (!callData->argc) + if (!callData->argc()) return Encode(false); const Value &v = callData->args[0]; @@ -176,7 +176,7 @@ ReturnedValue NumberPrototype::method_isInteger(const BuiltinFunction *, CallDat ReturnedValue NumberPrototype::method_isSafeInteger(const BuiltinFunction *, CallData *callData) { - if (!callData->argc) + if (!callData->argc()) return Encode(false); const Value &v = callData->args[0]; @@ -193,7 +193,7 @@ ReturnedValue NumberPrototype::method_isSafeInteger(const BuiltinFunction *, Cal ReturnedValue NumberPrototype::method_isNaN(const BuiltinFunction *, CallData *callData) { - if (!callData->argc) + if (!callData->argc()) return Encode(false); double v = callData->args[0].toNumber(); @@ -207,7 +207,7 @@ ReturnedValue NumberPrototype::method_toString(const BuiltinFunction *b, CallDat if (v4->hasException) return QV4::Encode::undefined(); - if (callData->argc && !callData->args[0].isUndefined()) { + if (callData->argc() && !callData->args[0].isUndefined()) { int radix = callData->args[0].toInt32(); if (radix < 2 || radix > 36) { return v4->throwError(QStringLiteral("Number.prototype.toString: %0 is not a valid radix").arg(radix)); @@ -274,7 +274,7 @@ ReturnedValue NumberPrototype::method_toFixed(const BuiltinFunction *b, CallData double fdigits = 0; - if (callData->argc > 0) + if (callData->argc() > 0) fdigits = callData->args[0].toInteger(); if (std::isnan(fdigits)) @@ -306,7 +306,7 @@ ReturnedValue NumberPrototype::method_toExponential(const BuiltinFunction *b, Ca int fdigits = NumberLocale::instance()->defaultDoublePrecision; - if (callData->argc && !callData->args[0].isUndefined()) { + if (callData->argc() && !callData->args[0].isUndefined()) { fdigits = callData->args[0].toInt32(); if (fdigits < 0 || fdigits > 20) { Scope scope(v4); @@ -327,7 +327,7 @@ ReturnedValue NumberPrototype::method_toPrecision(const BuiltinFunction *b, Call return QV4::Encode::undefined(); - if (!callData->argc || callData->args[0].isUndefined()) + if (!callData->argc() || callData->args[0].isUndefined()) return Encode(v->toString(scope.engine)); int precision = callData->args[0].toInt32(); diff --git a/src/qml/jsruntime/qv4objectproto.cpp b/src/qml/jsruntime/qv4objectproto.cpp index 0f60881db1..9010faf0b2 100644 --- a/src/qml/jsruntime/qv4objectproto.cpp +++ b/src/qml/jsruntime/qv4objectproto.cpp @@ -65,7 +65,7 @@ ReturnedValue ObjectCtor::construct(const Managed *m, CallData *callData) { ExecutionEngine *v4 = m->engine(); const ObjectCtor *ctor = static_cast<const ObjectCtor *>(m); - if (!callData->argc || callData->args[0].isUndefined() || callData->args[0].isNull()) { + if (!callData->argc() || callData->args[0].isUndefined() || callData->args[0].isNull()) { Scope scope(v4); ScopedObject obj(scope, scope.engine->newObject()); ScopedObject proto(scope, ctor->get(scope.engine->id_prototype())); @@ -80,7 +80,7 @@ ReturnedValue ObjectCtor::construct(const Managed *m, CallData *callData) ReturnedValue ObjectCtor::call(const Managed *m, CallData *callData) { ExecutionEngine *v4 = m->engine(); - if (!callData->argc || callData->args[0].isUndefined() || callData->args[0].isNull()) { + if (!callData->argc() || callData->args[0].isUndefined() || callData->args[0].isNull()) { return v4->newObject()->asReturnedValue(); } else { return callData->args[0].toObject(v4)->asReturnedValue(); @@ -129,7 +129,7 @@ void ObjectPrototype::init(ExecutionEngine *v4, Object *ctor) ReturnedValue ObjectPrototype::method_getPrototypeOf(const BuiltinFunction *b, CallData *callData) { Scope scope(b); - if (callData->argc < 1) + if (callData->argc() < 1) return scope.engine->throwTypeError(); ScopedObject o(scope, callData->args[0].toObject(scope.engine)); @@ -143,7 +143,7 @@ ReturnedValue ObjectPrototype::method_getPrototypeOf(const BuiltinFunction *b, C ReturnedValue ObjectPrototype::method_getOwnPropertyDescriptor(const BuiltinFunction *b, CallData *callData) { Scope scope(b); - if (callData->argc < 1) + if (callData->argc() < 1) return scope.engine->throwTypeError(); ScopedObject O(scope, callData->args[0].toObject(scope.engine)); @@ -167,7 +167,7 @@ ReturnedValue ObjectPrototype::method_getOwnPropertyDescriptor(const BuiltinFunc ReturnedValue ObjectPrototype::method_getOwnPropertyNames(const BuiltinFunction *b, CallData *callData) { Scope scope(b); - if (callData->argc < 1) + if (callData->argc() < 1) return scope.engine->throwTypeError(); ScopedObject O(scope, callData->args[0].toObject(scope.engine)); @@ -181,17 +181,17 @@ ReturnedValue ObjectPrototype::method_getOwnPropertyNames(const BuiltinFunction ReturnedValue ObjectPrototype::method_assign(const BuiltinFunction *b, CallData *callData) { Scope scope(b); - if (callData->argc < 1) + if (callData->argc() < 1) return scope.engine->throwTypeError(); ScopedObject to(scope, callData->args[0].toObject(scope.engine)); if (scope.engine->hasException) return QV4::Encode::undefined(); - if (callData->argc == 1) + if (callData->argc() == 1) return to.asReturnedValue(); - for (int i = 1; i < callData->argc; ++i) { + for (int i = 1, ei = callData->argc(); i < ei; ++i) { if (callData->args[i].isUndefined() || callData->args[i].isNull()) continue; @@ -236,7 +236,7 @@ ReturnedValue ObjectPrototype::method_create(const BuiltinFunction *builtin, Cal ScopedObject newObject(scope, scope.engine->newObject()); newObject->setPrototype(O->as<Object>()); - if (callData->argc > 1 && !callData->args[1].isUndefined()) { + if (callData->argc() > 1 && !callData->args[1].isUndefined()) { callData->args[0] = newObject; return method_defineProperties(builtin, callData); } @@ -541,7 +541,7 @@ ReturnedValue ObjectPrototype::method_propertyIsEnumerable(const BuiltinFunction ReturnedValue ObjectPrototype::method_defineGetter(const BuiltinFunction *b, CallData *callData) { Scope scope(b); - if (callData->argc < 2) + if (callData->argc() < 2) THROW_TYPE_ERROR(); ScopedFunctionObject f(scope, callData->argument(1)); @@ -571,7 +571,7 @@ ReturnedValue ObjectPrototype::method_defineGetter(const BuiltinFunction *b, Cal ReturnedValue ObjectPrototype::method_defineSetter(const BuiltinFunction *b, CallData *callData) { Scope scope(b); - if (callData->argc < 2) + if (callData->argc() < 2) THROW_TYPE_ERROR(); ScopedFunctionObject f(scope, callData->argument(1)); @@ -612,7 +612,7 @@ ReturnedValue ObjectPrototype::method_set_proto(const BuiltinFunction *b, CallDa { Scope scope(b); ScopedObject o(scope, callData->thisObject); - if (!o || !callData->argc) + if (!o || !callData->argc()) THROW_TYPE_ERROR(); if (callData->args[0].isNull()) { diff --git a/src/qml/jsruntime/qv4qobjectwrapper.cpp b/src/qml/jsruntime/qv4qobjectwrapper.cpp index 40dfeefdcc..400d0f8cb2 100644 --- a/src/qml/jsruntime/qv4qobjectwrapper.cpp +++ b/src/qml/jsruntime/qv4qobjectwrapper.cpp @@ -904,7 +904,7 @@ ReturnedValue QObjectWrapper::method_connect(const BuiltinFunction *b, CallData { QV4::Scope scope(b); - if (callData->argc == 0) + if (callData->argc() == 0) THROW_GENERIC_ERROR("Function.prototype.connect: no arguments given"); QPair<QObject *, int> signalInfo = extractQtSignal(callData->thisObject); @@ -923,9 +923,9 @@ ReturnedValue QObjectWrapper::method_connect(const BuiltinFunction *b, CallData QV4::ScopedFunctionObject f(scope); QV4::ScopedValue thisObject (scope, QV4::Encode::undefined()); - if (callData->argc == 1) { + if (callData->argc() == 1) { f = callData->args[0]; - } else if (callData->argc >= 2) { + } else if (callData->argc() >= 2) { thisObject = callData->args[0]; f = callData->args[1]; } @@ -956,7 +956,7 @@ ReturnedValue QObjectWrapper::method_disconnect(const BuiltinFunction *b, CallDa { QV4::Scope scope(b); - if (callData->argc == 0) + if (callData->argc() == 0) THROW_GENERIC_ERROR("Function.prototype.disconnect: no arguments given"); QPair<QObject *, int> signalInfo = extractQtSignal(callData->thisObject); @@ -975,9 +975,9 @@ ReturnedValue QObjectWrapper::method_disconnect(const BuiltinFunction *b, CallDa QV4::ScopedFunctionObject functionValue(scope); QV4::ScopedValue functionThisValue(scope, QV4::Encode::undefined()); - if (callData->argc == 1) { + if (callData->argc() == 1) { functionValue = callData->args[0]; - } else if (callData->argc >= 2) { + } else if (callData->argc() >= 2) { functionThisValue = callData->args[0]; functionValue = callData->args[1]; } @@ -1413,7 +1413,7 @@ static QV4::ReturnedValue CallPrecise(const QQmlObjectOrGadget &object, const QQ + QLatin1String(unknownTypeError)); } - if (args[0] > callArgs->argc) { + if (args[0] > callArgs->argc()) { QString error = QLatin1String("Insufficient arguments"); return engine->throwError(error); } @@ -1444,7 +1444,7 @@ static QV4::ReturnedValue CallOverloaded(const QQmlObjectOrGadget &object, const QV4::ExecutionEngine *engine, QV4::CallData *callArgs, const QQmlPropertyCache *propertyCache, QMetaObject::Call callType = QMetaObject::InvokeMetaMethod) { - int argumentCount = callArgs->argc; + int argumentCount = callArgs->argc(); QQmlPropertyData best; int bestParameterScore = INT_MAX; @@ -1900,7 +1900,7 @@ ReturnedValue QObjectMethod::callInternal(CallData *callData) const { ExecutionEngine *v4 = engine(); if (d()->index == DestroyMethod) - return method_destroy(v4, callData->args, callData->argc); + return method_destroy(v4, callData->args, callData->argc()); else if (d()->index == ToStringMethod) return method_toString(v4); @@ -2061,7 +2061,7 @@ ReturnedValue QMetaObjectWrapper::callConstructor(const QQmlPropertyData &data, ReturnedValue QMetaObjectWrapper::callOverloadedConstructor(QV4::ExecutionEngine *engine, QV4::CallData *callArgs) const { const int numberOfConstructors = d()->constructorCount; - const int argumentCount = callArgs->argc; + const int argumentCount = callArgs->argc(); const QQmlStaticMetaObject object(d()->metaObject); QQmlPropertyData best; diff --git a/src/qml/jsruntime/qv4regexpobject.cpp b/src/qml/jsruntime/qv4regexpobject.cpp index c3a4275cac..d4d646be3f 100644 --- a/src/qml/jsruntime/qv4regexpobject.cpp +++ b/src/qml/jsruntime/qv4regexpobject.cpp @@ -268,10 +268,9 @@ ReturnedValue RegExpCtor::construct(const Managed *m, CallData *callData) ReturnedValue RegExpCtor::call(const Managed *that, CallData *callData) { - if (callData->argc > 0 && callData->args[0].as<RegExpObject>()) { - if (callData->argc == 1 || callData->args[1].isUndefined()) { + if (callData->argc() > 0 && callData->args[0].as<RegExpObject>()) { + if (callData->argc() == 1 || callData->args[1].isUndefined()) return Encode(callData->args[0]); - } } return construct(that, callData); @@ -440,8 +439,8 @@ ReturnedValue RegExpPrototype::method_compile(const BuiltinFunction *b, CallData if (!r) return scope.engine->throwTypeError(); - JSCall jsCall(scope, scope.engine->regExpCtor(), callData->argc); - memcpy(jsCall->args, callData->args, callData->argc*sizeof(Value)); + JSCall jsCall(scope, scope.engine->regExpCtor(), callData->argc()); + memcpy(jsCall->args, callData->args, callData->argc()*sizeof(Value)); Scoped<RegExpObject> re(scope, jsCall.callAsConstructor()); diff --git a/src/qml/jsruntime/qv4sequenceobject.cpp b/src/qml/jsruntime/qv4sequenceobject.cpp index 28b20169d9..7373e07340 100644 --- a/src/qml/jsruntime/qv4sequenceobject.cpp +++ b/src/qml/jsruntime/qv4sequenceobject.cpp @@ -441,7 +441,7 @@ public: loadReference(); } - if (callData->argc == 1 && callData->args[0].as<FunctionObject>()) { + if (callData->argc() == 1 && callData->args[0].as<FunctionObject>()) { CompareFunctor cf(scope.engine, callData->args[0]); std::sort(d()->container->begin(), d()->container->end(), cf); } else { @@ -664,7 +664,7 @@ ReturnedValue SequencePrototype::method_sort(const BuiltinFunction *b, CallData if (!o || !o->isListType()) THROW_TYPE_ERROR(); - if (callData->argc >= 2) + if (callData->argc() >= 2) return o.asReturnedValue(); #define CALL_SORT(SequenceElementType, SequenceElementTypeName, SequenceType, DefaultValue) \ diff --git a/src/qml/jsruntime/qv4stringobject.cpp b/src/qml/jsruntime/qv4stringobject.cpp index 2fc05e4f56..d6dbeacb2d 100644 --- a/src/qml/jsruntime/qv4stringobject.cpp +++ b/src/qml/jsruntime/qv4stringobject.cpp @@ -148,7 +148,7 @@ ReturnedValue StringCtor::construct(const Managed *m, CallData *callData) ExecutionEngine *v4 = static_cast<const Object *>(m)->engine(); Scope scope(v4); ScopedString value(scope); - if (callData->argc) + if (callData->argc()) value = callData->args[0].toString(v4); else value = v4->newString(); @@ -158,7 +158,7 @@ ReturnedValue StringCtor::construct(const Managed *m, CallData *callData) ReturnedValue StringCtor::call(const Managed *m, CallData *callData) { ExecutionEngine *v4 = m->engine(); - if (callData->argc) + if (callData->argc()) return callData->args[0].toString(v4)->asReturnedValue(); else return v4->newString()->asReturnedValue(); @@ -234,7 +234,7 @@ ReturnedValue StringPrototype::method_charAt(const BuiltinFunction *b, CallData return QV4::Encode::undefined(); int pos = 0; - if (callData->argc > 0) + if (callData->argc() > 0) pos = (int) callData->args[0].toInteger(); QString result; @@ -252,7 +252,7 @@ ReturnedValue StringPrototype::method_charCodeAt(const BuiltinFunction *b, CallD return QV4::Encode::undefined(); int pos = 0; - if (callData->argc > 0) + if (callData->argc() > 0) pos = (int) callData->args[0].toInteger(); @@ -271,7 +271,7 @@ ReturnedValue StringPrototype::method_concat(const BuiltinFunction *b, CallData Scope scope(v4); ScopedString s(scope); - for (int i = 0; i < callData->argc; ++i) { + for (int i = 0; i < callData->argc(); ++i) { s = callData->args[i].toString(scope.engine); if (v4->hasException) return QV4::Encode::undefined(); @@ -291,14 +291,14 @@ ReturnedValue StringPrototype::method_endsWith(const BuiltinFunction *b, CallDat return QV4::Encode::undefined(); QString searchString; - if (callData->argc) { + if (callData->argc()) { if (callData->args[0].as<RegExpObject>()) return v4->throwTypeError(); searchString = callData->args[0].toQString(); } int pos = value.length(); - if (callData->argc > 1) + if (callData->argc() > 1) pos = (int) callData->args[1].toInteger(); if (pos == value.length()) @@ -316,11 +316,11 @@ ReturnedValue StringPrototype::method_indexOf(const BuiltinFunction *b, CallData return QV4::Encode::undefined(); QString searchString; - if (callData->argc) + if (callData->argc()) searchString = callData->args[0].toQString(); int pos = 0; - if (callData->argc > 1) + if (callData->argc() > 1) pos = (int) callData->args[1].toInteger(); int index = -1; @@ -338,14 +338,14 @@ ReturnedValue StringPrototype::method_includes(const BuiltinFunction *b, CallDat return QV4::Encode::undefined(); QString searchString; - if (callData->argc) { + if (callData->argc()) { if (callData->args[0].as<RegExpObject>()) return v4->throwTypeError(); searchString = callData->args[0].toQString(); } int pos = 0; - if (callData->argc > 1) { + if (callData->argc() > 1) { Value &posArg = callData->args[1]; pos = (int) posArg.toInteger(); if (!posArg.isInteger() && posArg.isNumber() && qIsInf(posArg.toNumber())) @@ -367,10 +367,10 @@ ReturnedValue StringPrototype::method_lastIndexOf(const BuiltinFunction *b, Call return QV4::Encode::undefined(); QString searchString; - if (callData->argc) + if (callData->argc()) searchString = callData->args[0].toQString(); - double position = callData->argc > 1 ? RuntimeHelpers::toNumber(callData->args[1]) : +qInf(); + double position = callData->argc() > 1 ? RuntimeHelpers::toNumber(callData->args[1]) : +qInf(); if (std::isnan(position)) position = +qInf(); else @@ -392,7 +392,7 @@ ReturnedValue StringPrototype::method_localeCompare(const BuiltinFunction *b, Ca if (v4->hasException) return QV4::Encode::undefined(); - if (callData->argc < 1) + if (callData->argc() < 1) callData->args[0] = Encode::undefined(); const QString that = callData->args[0].toQString(); @@ -410,9 +410,9 @@ ReturnedValue StringPrototype::method_match(const BuiltinFunction *b, CallData * if (v4->hasException) return Encode::undefined(); - if (!callData->argc) + if (!callData->argc()) callData->args[0] = Encode::undefined(); - callData->argc = 1; + callData->setArgc(1); if (!callData->args[0].as<RegExpObject>()) { // convert args[0] to a regexp @@ -668,8 +668,8 @@ ReturnedValue StringPrototype::method_slice(const BuiltinFunction *b, CallData * const double length = text.length(); - double start = callData->argc ? callData->args[0].toInteger() : 0; - double end = (callData->argc < 2 || callData->args[1].isUndefined()) + double start = callData->argc() ? callData->args[0].toInteger() : 0; + double end = (callData->argc() < 2 || callData->args[1].isUndefined()) ? length : callData->args[1].toInteger(); if (start < 0) @@ -780,14 +780,14 @@ ReturnedValue StringPrototype::method_startsWith(const BuiltinFunction *b, CallD return QV4::Encode::undefined(); QString searchString; - if (callData->argc) { + if (callData->argc()) { if (callData->args[0].as<RegExpObject>()) return v4->throwTypeError(); searchString = callData->args[0].toQString(); } int pos = 0; - if (callData->argc > 1) + if (callData->argc() > 1) pos = (int) callData->args[1].toInteger(); if (pos == 0) @@ -805,11 +805,11 @@ ReturnedValue StringPrototype::method_substr(const BuiltinFunction *b, CallData return QV4::Encode::undefined(); double start = 0; - if (callData->argc > 0) + if (callData->argc() > 0) start = callData->args[0].toInteger(); double length = +qInf(); - if (callData->argc > 1) + if (callData->argc() > 1) length = callData->args[1].toInteger(); double count = value.length(); @@ -835,10 +835,10 @@ ReturnedValue StringPrototype::method_substring(const BuiltinFunction *b, CallDa double start = 0; double end = length; - if (callData->argc > 0) + if (callData->argc() > 0) start = callData->args[0].toInteger(); - if (callData->argc > 1 && !callData->args[1].isUndefined()) + if (callData->argc() > 1 && !callData->args[1].isUndefined()) end = callData->args[1].toInteger(); if (std::isnan(start) || start < 0) @@ -896,9 +896,9 @@ ReturnedValue StringPrototype::method_toLocaleUpperCase(const BuiltinFunction *b ReturnedValue StringPrototype::method_fromCharCode(const BuiltinFunction *b, CallData *callData) { - QString str(callData->argc, Qt::Uninitialized); + QString str(callData->argc(), Qt::Uninitialized); QChar *ch = str.data(); - for (int i = 0; i < callData->argc; ++i) { + for (int i = 0, ei = callData->argc(); i < ei; ++i) { *ch = QChar(callData->args[i].toUInt16()); ++ch; } diff --git a/src/qml/jsruntime/qv4typedarray.cpp b/src/qml/jsruntime/qv4typedarray.cpp index 5bec5046fe..247e04f5f5 100644 --- a/src/qml/jsruntime/qv4typedarray.cpp +++ b/src/qml/jsruntime/qv4typedarray.cpp @@ -214,9 +214,9 @@ ReturnedValue TypedArrayCtor::construct(const Managed *m, CallData *callData) Scope scope(m->engine()); Scoped<TypedArrayCtor> that(scope, static_cast<const TypedArrayCtor *>(m)); - if (!callData->argc || !callData->args[0].isObject()) { + if (!callData->argc() || !callData->args[0].isObject()) { // ECMA 6 22.2.1.1 - double l = callData->argc ? callData->args[0].toNumber() : 0; + double l = callData->argc() ? callData->args[0].toNumber() : 0; if (scope.engine->hasException) return Encode::undefined(); uint len = (uint)l; @@ -276,14 +276,14 @@ ReturnedValue TypedArrayCtor::construct(const Managed *m, CallData *callData) if (!!buffer) { // ECMA 6 22.2.1.4 - double dbyteOffset = callData->argc > 1 ? callData->args[1].toInteger() : 0; + double dbyteOffset = callData->argc() > 1 ? callData->args[1].toInteger() : 0; uint byteOffset = (uint)dbyteOffset; uint elementSize = operations[that->d()->type].bytesPerElement; if (dbyteOffset < 0 || (byteOffset % elementSize) || dbyteOffset > buffer->byteLength()) return scope.engine->throwRangeError(QStringLiteral("new TypedArray: invalid byteOffset")); uint byteLength; - if (callData->argc < 3 || callData->args[2].isUndefined()) { + if (callData->argc() < 3 || callData->args[2].isUndefined()) { byteLength = buffer->byteLength() - byteOffset; if (buffer->byteLength() < byteOffset || byteLength % elementSize) return scope.engine->throwRangeError(QStringLiteral("new TypedArray: invalid length")); @@ -459,7 +459,7 @@ ReturnedValue TypedArrayPrototype::method_set(const BuiltinFunction *b, CallData if (!buffer) scope.engine->throwTypeError(); - double doffset = callData->argc >= 2 ? callData->args[1].toInteger() : 0; + double doffset = callData->argc() >= 2 ? callData->args[1].toInteger() : 0; if (scope.engine->hasException) RETURN_UNDEFINED(); @@ -551,12 +551,12 @@ ReturnedValue TypedArrayPrototype::method_subarray(const BuiltinFunction *builti return scope.engine->throwTypeError(); int len = a->length(); - double b = callData->argc > 0 ? callData->args[0].toInteger() : 0; + double b = callData->argc() > 0 ? callData->args[0].toInteger() : 0; if (b < 0) b = len + b; uint begin = (uint)qBound(0., b, (double)len); - double e = callData->argc < 2 || callData->args[1].isUndefined() ? len : callData->args[1].toInteger(); + double e = callData->argc() < 2 || callData->args[1].isUndefined() ? len : callData->args[1].toInteger(); if (e < 0) e = len + e; uint end = (uint)qBound(0., e, (double)len); diff --git a/src/qml/jsruntime/qv4vme_moth.cpp b/src/qml/jsruntime/qv4vme_moth.cpp index 0531238024..6a897cbf08 100644 --- a/src/qml/jsruntime/qv4vme_moth.cpp +++ b/src/qml/jsruntime/qv4vme_moth.cpp @@ -516,7 +516,7 @@ QV4::ReturnedValue VME::exec(CallData *callData, QV4::Function *function) engine->jsStackTop = reinterpret_cast<QV4::Value *>(callData) + function->compiledFunction->nRegisters + 1; // clear out remaining arguments and local registers - for (Value *v = callData->args + callData->argc; v < jsStackTop; ++v) + for (Value *v = callData->args + callData->argc(); v < jsStackTop; ++v) *v = Encode::undefined(); QV4::Value *stack = reinterpret_cast<QV4::Value *>(callData); |