diff options
author | Lars Knoll <[email protected]> | 2017-12-05 10:45:14 +0100 |
---|---|---|
committer | Lars Knoll <[email protected]> | 2018-01-12 07:04:27 +0000 |
commit | 4e1512baf6d1220c9e89c8a36f16de400bb1b519 (patch) | |
tree | a4edebfeeebfd19e0aba8e376ddf593783f05100 /src/qml/jsruntime | |
parent | 4d6830546619d16275b01f1f049fdcb0b6489f7a (diff) |
Convert more builtin functions to use the new calling convention
Convert most of the methods used QML objects to the new calling
convention. Converted IndexedBuiltinFunction to do the same.
Change-Id: I41b26042c2f56f24988485b06e8ccd214e2573c0
Reviewed-by: Simon Hausmann <[email protected]>
Diffstat (limited to 'src/qml/jsruntime')
-rw-r--r-- | src/qml/jsruntime/qv4engine.cpp | 2 | ||||
-rw-r--r-- | src/qml/jsruntime/qv4functionobject_p.h | 12 | ||||
-rw-r--r-- | src/qml/jsruntime/qv4include.cpp | 10 | ||||
-rw-r--r-- | src/qml/jsruntime/qv4include_p.h | 2 | ||||
-rw-r--r-- | src/qml/jsruntime/qv4jsonobject.cpp | 14 | ||||
-rw-r--r-- | src/qml/jsruntime/qv4jsonobject_p.h | 4 | ||||
-rw-r--r-- | src/qml/jsruntime/qv4qobjectwrapper.cpp | 38 | ||||
-rw-r--r-- | src/qml/jsruntime/qv4qobjectwrapper_p.h | 4 | ||||
-rw-r--r-- | src/qml/jsruntime/qv4sequenceobject.cpp | 39 | ||||
-rw-r--r-- | src/qml/jsruntime/qv4sequenceobject_p.h | 4 | ||||
-rw-r--r-- | src/qml/jsruntime/qv4variantobject.cpp | 18 | ||||
-rw-r--r-- | src/qml/jsruntime/qv4variantobject_p.h | 8 |
12 files changed, 77 insertions, 78 deletions
diff --git a/src/qml/jsruntime/qv4engine.cpp b/src/qml/jsruntime/qv4engine.cpp index c97ba38dec..58e0c2ae6a 100644 --- a/src/qml/jsruntime/qv4engine.cpp +++ b/src/qml/jsruntime/qv4engine.cpp @@ -101,7 +101,7 @@ using namespace QV4; static QBasicAtomicInt engineSerial = Q_BASIC_ATOMIC_INITIALIZER(1); -ReturnedValue throwTypeError(const BuiltinFunction *b, CallData *) +ReturnedValue throwTypeError(const FunctionObject *b, const QV4::Value *, const QV4::Value *, int) { return b->engine()->throwTypeError(); } diff --git a/src/qml/jsruntime/qv4functionobject_p.h b/src/qml/jsruntime/qv4functionobject_p.h index d61006a6b0..0687491feb 100644 --- a/src/qml/jsruntime/qv4functionobject_p.h +++ b/src/qml/jsruntime/qv4functionobject_p.h @@ -110,8 +110,8 @@ struct Q_QML_EXPORT BuiltinFunction : FunctionObject { ReturnedValue (*code)(const QV4::BuiltinFunction *, CallData *); }; -struct IndexedBuiltinFunction : BuiltinFunction { - inline void init(QV4::ExecutionContext *scope, uint index, ReturnedValue (*code)(const QV4::BuiltinFunction *, CallData *)); +struct IndexedBuiltinFunction : FunctionObject { + inline void init(QV4::ExecutionContext *scope, uint index, ReturnedValue (*code)(const QV4::FunctionObject *, const Value *, const Value *, int)); uint index; }; @@ -222,16 +222,16 @@ struct Q_QML_EXPORT BuiltinFunction : FunctionObject { static ReturnedValue call(const FunctionObject *f, const Value *thisObject, const Value *argv, int argc); }; -struct IndexedBuiltinFunction: BuiltinFunction +struct IndexedBuiltinFunction : FunctionObject { - V4_OBJECT2(IndexedBuiltinFunction, BuiltinFunction) + V4_OBJECT2(IndexedBuiltinFunction, FunctionObject) }; void Heap::IndexedBuiltinFunction::init(QV4::ExecutionContext *scope, uint index, - ReturnedValue (*code)(const QV4::BuiltinFunction *, CallData *)) + ReturnedValue (*code)(const QV4::FunctionObject *, const Value *thisObject, const Value *argv, int argc)) { Heap::FunctionObject::init(scope); - this->code = code; + this->jsCall = code; this->index = index; } diff --git a/src/qml/jsruntime/qv4include.cpp b/src/qml/jsruntime/qv4include.cpp index 3e04ed63df..e9d3d1c95d 100644 --- a/src/qml/jsruntime/qv4include.cpp +++ b/src/qml/jsruntime/qv4include.cpp @@ -196,10 +196,10 @@ void QV4Include::finished() /* Documented in qv8engine.cpp */ -QV4::ReturnedValue QV4Include::method_include(const QV4::BuiltinFunction *b, QV4::CallData *callData) +QV4::ReturnedValue QV4Include::method_include(const QV4::FunctionObject *b, const QV4::Value *, const QV4::Value *argv, int argc) { QV4::Scope scope(b); - if (!callData->argc()) + if (!argc) RETURN_UNDEFINED(); QQmlContextData *context = scope.engine->callingQmlContext(); @@ -208,11 +208,11 @@ 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>()) - callbackFunction = callData->args[1]; + if (argc >= 2 && argv[1].as<QV4::FunctionObject>()) + callbackFunction = argv[1]; #if QT_CONFIG(qml_network) - QUrl url(scope.engine->resolvedUrl(callData->args[0].toQStringNoThrow())); + QUrl url(scope.engine->resolvedUrl(argv[0].toQStringNoThrow())); if (scope.engine->qmlEngine() && scope.engine->qmlEngine()->urlInterceptor()) url = scope.engine->qmlEngine()->urlInterceptor()->intercept(url, QQmlAbstractUrlInterceptor::JavaScriptFile); diff --git a/src/qml/jsruntime/qv4include_p.h b/src/qml/jsruntime/qv4include_p.h index 68537ba2e8..8015722afc 100644 --- a/src/qml/jsruntime/qv4include_p.h +++ b/src/qml/jsruntime/qv4include_p.h @@ -77,7 +77,7 @@ public: Exception = 3 }; - static QV4::ReturnedValue method_include(const QV4::BuiltinFunction *, QV4::CallData *callData); + static QV4::ReturnedValue method_include(const QV4::FunctionObject *, const QV4::Value *thisObject, const QV4::Value *argv, int argc); private Q_SLOTS: void finished(); diff --git a/src/qml/jsruntime/qv4jsonobject.cpp b/src/qml/jsruntime/qv4jsonobject.cpp index 5e580b8b4d..51802d895b 100644 --- a/src/qml/jsruntime/qv4jsonobject.cpp +++ b/src/qml/jsruntime/qv4jsonobject.cpp @@ -884,12 +884,12 @@ void Heap::JsonObject::init() } -ReturnedValue JsonObject::method_parse(const BuiltinFunction *b, CallData *callData) +ReturnedValue JsonObject::method_parse(const FunctionObject *b, const Value *, const Value *argv, int argc) { ExecutionEngine *v4 = b->engine(); QString jtext; - if (callData->argc() > 0) - jtext = callData->args[0].toQString(); + if (argc > 0) + jtext = argv[0].toQString(); DEBUG << "parsing source = " << jtext; JsonParser parser(v4, jtext.constData(), jtext.length()); @@ -903,12 +903,12 @@ ReturnedValue JsonObject::method_parse(const BuiltinFunction *b, CallData *callD return result; } -ReturnedValue JsonObject::method_stringify(const BuiltinFunction *b, CallData *callData) +ReturnedValue JsonObject::method_stringify(const FunctionObject *b, const Value *, const Value *argv, int argc) { Scope scope(b); Stringify stringify(scope.engine); - ScopedObject o(scope, callData->argument(1)); + ScopedObject o(scope, argc > 1 ? argv[1] : Primitive::undefinedValue()); if (o) { stringify.replacerFunction = o->as<FunctionObject>(); if (o->isArrayObject()) { @@ -933,7 +933,7 @@ ReturnedValue JsonObject::method_stringify(const BuiltinFunction *b, CallData *c } } - ScopedValue s(scope, callData->argument(2)); + ScopedValue s(scope, argc > 2 ? argv[2] : Primitive::undefinedValue()); if (NumberObject *n = s->as<NumberObject>()) s = Encode(n->value()); else if (StringObject *so = s->as<StringObject>()) @@ -946,7 +946,7 @@ ReturnedValue JsonObject::method_stringify(const BuiltinFunction *b, CallData *c } - ScopedValue arg0(scope, callData->argument(0)); + ScopedValue arg0(scope, argc ? argv[0] : Primitive::undefinedValue()); QString result = stringify.Str(QString(), arg0); if (result.isEmpty() || scope.engine->hasException) RETURN_UNDEFINED(); diff --git a/src/qml/jsruntime/qv4jsonobject_p.h b/src/qml/jsruntime/qv4jsonobject_p.h index 19dba14aef..7d9f204910 100644 --- a/src/qml/jsruntime/qv4jsonobject_p.h +++ b/src/qml/jsruntime/qv4jsonobject_p.h @@ -88,8 +88,8 @@ private: typedef QSet<ObjectItem> V4ObjectSet; public: - static ReturnedValue method_parse(const BuiltinFunction *, CallData *callData); - static ReturnedValue method_stringify(const BuiltinFunction *, CallData *callData); + static ReturnedValue method_parse(const FunctionObject *, const Value *thisObject, const Value *argv, int argc); + static ReturnedValue method_stringify(const FunctionObject *, const Value *thisObject, const Value *argv, int argc); static ReturnedValue fromJsonValue(ExecutionEngine *engine, const QJsonValue &value); static ReturnedValue fromJsonObject(ExecutionEngine *engine, const QJsonObject &object); diff --git a/src/qml/jsruntime/qv4qobjectwrapper.cpp b/src/qml/jsruntime/qv4qobjectwrapper.cpp index 6d7d929b61..56d9234be8 100644 --- a/src/qml/jsruntime/qv4qobjectwrapper.cpp +++ b/src/qml/jsruntime/qv4qobjectwrapper.cpp @@ -900,14 +900,14 @@ struct QObjectSlotDispatcher : public QtPrivate::QSlotObjectBase } // namespace QV4 -ReturnedValue QObjectWrapper::method_connect(const BuiltinFunction *b, CallData *callData) +ReturnedValue QObjectWrapper::method_connect(const FunctionObject *b, const Value *thisObject, const Value *argv, int argc) { QV4::Scope scope(b); - if (callData->argc() == 0) + if (argc == 0) THROW_GENERIC_ERROR("Function.prototype.connect: no arguments given"); - QPair<QObject *, int> signalInfo = extractQtSignal(callData->thisObject); + QPair<QObject *, int> signalInfo = extractQtSignal(*thisObject); QObject *signalObject = signalInfo.first; int signalIndex = signalInfo.second; // in method range, not signal range! @@ -921,25 +921,25 @@ ReturnedValue QObjectWrapper::method_connect(const BuiltinFunction *b, CallData THROW_GENERIC_ERROR("Function.prototype.connect: this object is not a signal"); QV4::ScopedFunctionObject f(scope); - QV4::ScopedValue thisObject (scope, QV4::Encode::undefined()); + QV4::ScopedValue object (scope, QV4::Encode::undefined()); - if (callData->argc() == 1) { - f = callData->args[0]; - } else if (callData->argc() >= 2) { - thisObject = callData->args[0]; - f = callData->args[1]; + if (argc == 1) { + f = argv[0]; + } else if (argc >= 2) { + object = argv[0]; + f = argv[1]; } if (!f) THROW_GENERIC_ERROR("Function.prototype.connect: target is not a function"); - if (!thisObject->isUndefined() && !thisObject->isObject()) + if (!object->isUndefined() && !object->isObject()) THROW_GENERIC_ERROR("Function.prototype.connect: target this is not an object"); QV4::QObjectSlotDispatcher *slot = new QV4::QObjectSlotDispatcher; slot->signalIndex = signalIndex; - slot->thisObject.set(scope.engine, thisObject); + slot->thisObject.set(scope.engine, object); slot->function.set(scope.engine, f); if (QQmlData *ddata = QQmlData::get(signalObject)) { @@ -952,14 +952,14 @@ ReturnedValue QObjectWrapper::method_connect(const BuiltinFunction *b, CallData RETURN_UNDEFINED(); } -ReturnedValue QObjectWrapper::method_disconnect(const BuiltinFunction *b, CallData *callData) +ReturnedValue QObjectWrapper::method_disconnect(const FunctionObject *b, const Value *thisObject, const Value *argv, int argc) { QV4::Scope scope(b); - if (callData->argc() == 0) + if (argc == 0) THROW_GENERIC_ERROR("Function.prototype.disconnect: no arguments given"); - QPair<QObject *, int> signalInfo = extractQtSignal(callData->thisObject); + QPair<QObject *, int> signalInfo = extractQtSignal(*thisObject); QObject *signalObject = signalInfo.first; int signalIndex = signalInfo.second; @@ -975,11 +975,11 @@ ReturnedValue QObjectWrapper::method_disconnect(const BuiltinFunction *b, CallDa QV4::ScopedFunctionObject functionValue(scope); QV4::ScopedValue functionThisValue(scope, QV4::Encode::undefined()); - if (callData->argc() == 1) { - functionValue = callData->args[0]; - } else if (callData->argc() >= 2) { - functionThisValue = callData->args[0]; - functionValue = callData->args[1]; + if (argc == 1) { + functionValue = argv[0]; + } else if (argc >= 2) { + functionThisValue = argv[0]; + functionValue = argv[1]; } if (!functionValue) diff --git a/src/qml/jsruntime/qv4qobjectwrapper_p.h b/src/qml/jsruntime/qv4qobjectwrapper_p.h index c00e82e4fa..28717b5d80 100644 --- a/src/qml/jsruntime/qv4qobjectwrapper_p.h +++ b/src/qml/jsruntime/qv4qobjectwrapper_p.h @@ -198,8 +198,8 @@ protected: static PropertyAttributes query(const Managed *, String *name); static void advanceIterator(Managed *m, ObjectIterator *it, Value *name, uint *index, Property *p, PropertyAttributes *attributes); - static ReturnedValue method_connect(const BuiltinFunction *, CallData *callData); - static ReturnedValue method_disconnect(const BuiltinFunction *, CallData *callData); + static ReturnedValue method_connect(const FunctionObject *, const Value *thisObject, const Value *argv, int argc); + static ReturnedValue method_disconnect(const FunctionObject *, const Value *thisObject, const Value *argv, int argc); private: Q_NEVER_INLINE static ReturnedValue wrap_slowPath(ExecutionEngine *engine, QObject *object); diff --git a/src/qml/jsruntime/qv4sequenceobject.cpp b/src/qml/jsruntime/qv4sequenceobject.cpp index 78cd7529d8..78413f1b0e 100644 --- a/src/qml/jsruntime/qv4sequenceobject.cpp +++ b/src/qml/jsruntime/qv4sequenceobject.cpp @@ -420,11 +420,10 @@ public: ScopedFunctionObject compare(scope, m_compareFn); if (!compare) return m_v4->throwTypeError(); - JSCallData jsCallData(scope, 2); - jsCallData->args[0] = convertElementToValue(m_v4, lhs); - jsCallData->args[1] = convertElementToValue(m_v4, rhs); - *jsCallData->thisObject = m_v4->globalObject; - QV4::ScopedValue result(scope, compare->call(jsCallData)); + Value *argv = scope.alloc(2); + argv[0] = convertElementToValue(m_v4, lhs); + argv[1] = convertElementToValue(m_v4, rhs); + QV4::ScopedValue result(scope, compare->call(m_v4->globalObject, argv, 2)); return result->toNumber() < 0; } @@ -433,7 +432,7 @@ public: const QV4::Value *m_compareFn; }; - void sort(const BuiltinFunction *, Scope &scope, CallData *callData) + void sort(const FunctionObject *f, const Value *, const Value *argv, int argc) { if (d()->isReference) { if (!d()->object) @@ -441,8 +440,8 @@ public: loadReference(); } - if (callData->argc() == 1 && callData->args[0].as<FunctionObject>()) { - CompareFunctor cf(scope.engine, callData->args[0]); + if (argc == 1 && argv[0].as<FunctionObject>()) { + CompareFunctor cf(f->engine(), argv[0]); std::sort(d()->container->begin(), d()->container->end(), cf); } else { DefaultCompareFunctor cf; @@ -453,10 +452,10 @@ public: storeReference(); } - static QV4::ReturnedValue method_get_length(const BuiltinFunction *b, CallData *callData) + static QV4::ReturnedValue method_get_length(const FunctionObject *b, const Value *thisObject, const Value *, int) { QV4::Scope scope(b); - QV4::Scoped<QQmlSequence<Container> > This(scope, callData->thisObject.as<QQmlSequence<Container> >()); + QV4::Scoped<QQmlSequence<Container>> This(scope, thisObject->as<QQmlSequence<Container> >()); if (!This) THROW_TYPE_ERROR(); @@ -468,14 +467,14 @@ public: RETURN_RESULT(Encode(qint32(This->d()->container->size()))); } - static QV4::ReturnedValue method_set_length(const BuiltinFunction *b, CallData *callData) + static QV4::ReturnedValue method_set_length(const FunctionObject *f, const Value *thisObject, const Value *argv, int argc) { - QV4::Scope scope(b); - QV4::Scoped<QQmlSequence<Container> > This(scope, callData->thisObject.as<QQmlSequence<Container> >()); + QV4::Scope scope(f); + QV4::Scoped<QQmlSequence<Container>> This(scope, thisObject->as<QQmlSequence<Container> >()); if (!This) THROW_TYPE_ERROR(); - quint32 newLength = callData->args[0].toUInt32(); + quint32 newLength = argc ? argv[0].toUInt32() : 0; /* Qt containers have int (rather than uint) allowable indexes. */ if (newLength > INT_MAX) { generateWarning(scope.engine, QLatin1String("Index out of range during length set")); @@ -652,24 +651,24 @@ void SequencePrototype::init() } #undef REGISTER_QML_SEQUENCE_METATYPE -ReturnedValue SequencePrototype::method_valueOf(const BuiltinFunction *f, CallData *callData) +ReturnedValue SequencePrototype::method_valueOf(const FunctionObject *f, const Value *thisObject, const Value *, int) { - return Encode(callData->thisObject.toString(f->engine())); + return Encode(thisObject->toString(f->engine())); } -ReturnedValue SequencePrototype::method_sort(const BuiltinFunction *b, CallData *callData) +ReturnedValue SequencePrototype::method_sort(const FunctionObject *b, const Value *thisObject, const Value *argv, int argc) { Scope scope(b); - QV4::ScopedObject o(scope, callData->thisObject); + QV4::ScopedObject o(scope, thisObject); if (!o || !o->isListType()) THROW_TYPE_ERROR(); - if (callData->argc() >= 2) + if (argc >= 2) return o.asReturnedValue(); #define CALL_SORT(SequenceElementType, SequenceElementTypeName, SequenceType, DefaultValue) \ if (QQml##SequenceElementTypeName##List *s = o->as<QQml##SequenceElementTypeName##List>()) { \ - s->sort(b, scope, callData); \ + s->sort(b, thisObject, argv, argc); \ } else FOREACH_QML_SEQUENCE_TYPE(CALL_SORT) diff --git a/src/qml/jsruntime/qv4sequenceobject_p.h b/src/qml/jsruntime/qv4sequenceobject_p.h index 169a48c2f9..e9bef2f604 100644 --- a/src/qml/jsruntime/qv4sequenceobject_p.h +++ b/src/qml/jsruntime/qv4sequenceobject_p.h @@ -68,8 +68,8 @@ struct SequencePrototype : public QV4::Object V4_PROTOTYPE(arrayPrototype) void init(); - static ReturnedValue method_valueOf(const BuiltinFunction *f, CallData *callData); - static ReturnedValue method_sort(const BuiltinFunction *, CallData *callData); + static ReturnedValue method_valueOf(const FunctionObject *, const Value *thisObject, const Value *argv, int argc); + static ReturnedValue method_sort(const FunctionObject *, const Value *thisObject, const Value *argv, int argc); static bool isSequenceType(int sequenceTypeId); static ReturnedValue newSequence(QV4::ExecutionEngine *engine, int sequenceTypeId, QObject *object, int propertyIndex, bool *succeeded); diff --git a/src/qml/jsruntime/qv4variantobject.cpp b/src/qml/jsruntime/qv4variantobject.cpp index 00be90b3c2..bee17e0390 100644 --- a/src/qml/jsruntime/qv4variantobject.cpp +++ b/src/qml/jsruntime/qv4variantobject.cpp @@ -113,17 +113,17 @@ void VariantPrototype::init() defineDefaultProperty(engine()->id_toString(), method_toString, 0); } -ReturnedValue VariantPrototype::method_preserve(const BuiltinFunction *, CallData *callData) +ReturnedValue VariantPrototype::method_preserve(const FunctionObject *, const Value *thisObject, const Value *, int) { - VariantObject *o = callData->thisObject.as<QV4::VariantObject>(); + const VariantObject *o = thisObject->as<QV4::VariantObject>(); if (o && o->d()->isScarce()) o->d()->addVmePropertyReference(); RETURN_UNDEFINED(); } -ReturnedValue VariantPrototype::method_destroy(const BuiltinFunction *, CallData *callData) +ReturnedValue VariantPrototype::method_destroy(const FunctionObject *, const Value *thisObject, const Value *, int) { - VariantObject *o = callData->thisObject.as<QV4::VariantObject>(); + const VariantObject *o = thisObject->as<QV4::VariantObject>(); if (o) { if (o->d()->isScarce()) o->d()->addVmePropertyReference(); @@ -132,10 +132,10 @@ ReturnedValue VariantPrototype::method_destroy(const BuiltinFunction *, CallData RETURN_UNDEFINED(); } -ReturnedValue VariantPrototype::method_toString(const BuiltinFunction *b, CallData *callData) +ReturnedValue VariantPrototype::method_toString(const FunctionObject *b, const Value *thisObject, const Value *, int) { ExecutionEngine *v4 = b->engine(); - VariantObject *o = callData->thisObject.as<QV4::VariantObject>(); + const VariantObject *o = thisObject->as<QV4::VariantObject>(); if (!o) RETURN_UNDEFINED(); QString result = o->d()->data().toString(); @@ -147,9 +147,9 @@ ReturnedValue VariantPrototype::method_toString(const BuiltinFunction *b, CallDa return Encode(v4->newString(result)); } -ReturnedValue VariantPrototype::method_valueOf(const BuiltinFunction *b, CallData *callData) +ReturnedValue VariantPrototype::method_valueOf(const FunctionObject *b, const Value *thisObject, const Value *, int) { - VariantObject *o = callData->thisObject.as<QV4::VariantObject>(); + const VariantObject *o = thisObject->as<QV4::VariantObject>(); if (o) { QVariant v = o->d()->data(); switch (v.type()) { @@ -170,7 +170,7 @@ ReturnedValue VariantPrototype::method_valueOf(const BuiltinFunction *b, CallDat break; } } - return callData->thisObject.asReturnedValue(); + return thisObject->asReturnedValue(); } QT_END_NAMESPACE diff --git a/src/qml/jsruntime/qv4variantobject_p.h b/src/qml/jsruntime/qv4variantobject_p.h index 07b3310e91..62fa7ff9a8 100644 --- a/src/qml/jsruntime/qv4variantobject_p.h +++ b/src/qml/jsruntime/qv4variantobject_p.h @@ -108,10 +108,10 @@ public: V4_PROTOTYPE(objectPrototype) void init(); - static ReturnedValue method_preserve(const BuiltinFunction *, CallData *callData); - static ReturnedValue method_destroy(const BuiltinFunction *, CallData *callData); - static ReturnedValue method_toString(const BuiltinFunction *, CallData *callData); - static ReturnedValue method_valueOf(const BuiltinFunction *, CallData *callData); + static ReturnedValue method_preserve(const FunctionObject *f, const Value *thisObject, const Value *argv, int argc); + static ReturnedValue method_destroy(const FunctionObject *, const Value *thisObject, const Value *argv, int argc); + static ReturnedValue method_toString(const FunctionObject *, const Value *thisObject, const Value *argv, int argc); + static ReturnedValue method_valueOf(const FunctionObject *, const Value *thisObject, const Value *argv, int argc); }; } |