From d2e2a5b59c617e6cf7236cf36e9c20fe9ea36fdb Mon Sep 17 00:00:00 2001 From: Lars Knoll Date: Thu, 26 Sep 2013 12:04:52 +0200 Subject: Remove Value::fromString() replaced with call to the GC safe ExceutionEngine::newString() method. Change-Id: I7258296e75ca724ff42b94a0d147bc33a05f8f68 Reviewed-by: Simon Hausmann --- src/imports/localstorage/plugin.cpp | 4 +-- src/qml/jsruntime/qv4context.cpp | 4 +-- src/qml/jsruntime/qv4dateobject.cpp | 20 ++++++------- src/qml/jsruntime/qv4errorobject.cpp | 24 ++++++++++------ src/qml/jsruntime/qv4functionobject.cpp | 2 +- src/qml/jsruntime/qv4globalobject.cpp | 16 +++++------ src/qml/jsruntime/qv4jsonobject.cpp | 10 +++---- src/qml/jsruntime/qv4numberobject.cpp | 12 ++++---- src/qml/jsruntime/qv4objectproto.cpp | 6 ++-- src/qml/jsruntime/qv4qobjectwrapper.cpp | 4 +-- src/qml/jsruntime/qv4regexpobject.cpp | 4 +-- src/qml/jsruntime/qv4runtime.cpp | 2 +- src/qml/jsruntime/qv4scopedvalue_p.h | 13 +++++++++ src/qml/jsruntime/qv4sequenceobject.cpp | 8 ++++-- src/qml/jsruntime/qv4stringobject.cpp | 50 +++++++++++++++++---------------- src/qml/jsruntime/qv4value.cpp | 10 ------- src/qml/jsruntime/qv4value_def_p.h | 7 ++--- src/qml/qml/qqmllocale.cpp | 32 ++++++++++----------- src/qml/qml/qqmlobjectcreator.cpp | 5 +++- src/qml/qml/v8/qqmlbuiltinfunctions.cpp | 26 ++++++++--------- src/qml/qml/v8/qv4domerrors_p.h | 2 +- src/qml/qml/v8/qv8engine.cpp | 4 +-- src/quick/items/qquickdroparea.cpp | 2 +- 23 files changed, 141 insertions(+), 126 deletions(-) diff --git a/src/imports/localstorage/plugin.cpp b/src/imports/localstorage/plugin.cpp index 3cb0141986..0060613e93 100644 --- a/src/imports/localstorage/plugin.cpp +++ b/src/imports/localstorage/plugin.cpp @@ -65,14 +65,14 @@ using namespace QV4; #define V4THROW_SQL(error, desc) { \ - QV4::Scoped v(scope, Value::fromString(ctx, desc)); \ + QV4::Scoped v(scope, ctx->engine->newString(desc)); \ QV4::Scoped ex(scope, ctx->engine->newErrorObject(v)); \ ex->put(QV4::ScopedString(scope, ctx->engine->newIdentifier(QStringLiteral("code"))), QV4::ScopedValue(scope, Primitive::fromInt32(error))); \ ctx->throwError(ex); \ } #define V4THROW_REFERENCE(string) { \ - QV4::Scoped v(scope, Value::fromString(ctx, string)); \ + QV4::Scoped v(scope, ctx->engine->newString(string)); \ ctx->throwReferenceError(v); \ } diff --git a/src/qml/jsruntime/qv4context.cpp b/src/qml/jsruntime/qv4context.cpp index d8990bf8be..aa0688ee9b 100644 --- a/src/qml/jsruntime/qv4context.cpp +++ b/src/qml/jsruntime/qv4context.cpp @@ -604,7 +604,7 @@ void ExecutionContext::throwError(const ValueRef value) void ExecutionContext::throwError(const QString &message) { Scope scope(this); - ScopedValue v(scope, Value::fromString(this, message)); + ScopedValue v(scope, engine->newString(message)); v = engine->newErrorObject(v); throwError(v); } @@ -640,7 +640,7 @@ void ExecutionContext::throwTypeError(const QString &message) void ExecutionContext::throwUnimplemented(const QString &message) { Scope scope(this); - ScopedValue v(scope, Value::fromString(this, QStringLiteral("Unimplemented ") + message)); + ScopedValue v(scope, engine->newString(QStringLiteral("Unimplemented ") + message)); v = engine->newErrorObject(v); throwError(v); } diff --git a/src/qml/jsruntime/qv4dateobject.cpp b/src/qml/jsruntime/qv4dateobject.cpp index d18f3eb681..cb5c37d421 100644 --- a/src/qml/jsruntime/qv4dateobject.cpp +++ b/src/qml/jsruntime/qv4dateobject.cpp @@ -698,7 +698,7 @@ ReturnedValue DateCtor::construct(Managed *m, CallData *callData) ReturnedValue DateCtor::call(Managed *m, CallData *) { double t = currentTime(); - return Value::fromString(m->engine()->current, ToString(t)).asReturnedValue(); + return m->engine()->newString(ToString(t))->asReturnedValue(); } void DatePrototype::init(ExecutionEngine *engine, const Value &ctor) @@ -807,37 +807,37 @@ ReturnedValue DatePrototype::method_now(SimpleCallContext *ctx) ReturnedValue DatePrototype::method_toString(SimpleCallContext *ctx) { double t = getThisDate(ctx); - return Value::fromString(ctx, ToString(t)).asReturnedValue(); + return ctx->engine->newString(ToString(t))->asReturnedValue(); } ReturnedValue DatePrototype::method_toDateString(SimpleCallContext *ctx) { double t = getThisDate(ctx); - return Value::fromString(ctx, ToDateString(t)).asReturnedValue(); + return ctx->engine->newString(ToDateString(t))->asReturnedValue(); } ReturnedValue DatePrototype::method_toTimeString(SimpleCallContext *ctx) { double t = getThisDate(ctx); - return Value::fromString(ctx, ToTimeString(t)).asReturnedValue(); + return ctx->engine->newString(ToTimeString(t))->asReturnedValue(); } ReturnedValue DatePrototype::method_toLocaleString(SimpleCallContext *ctx) { double t = getThisDate(ctx); - return Value::fromString(ctx, ToLocaleString(t)).asReturnedValue(); + return ctx->engine->newString(ToLocaleString(t))->asReturnedValue(); } ReturnedValue DatePrototype::method_toLocaleDateString(SimpleCallContext *ctx) { double t = getThisDate(ctx); - return Value::fromString(ctx, ToLocaleDateString(t)).asReturnedValue(); + return ctx->engine->newString(ToLocaleDateString(t))->asReturnedValue(); } ReturnedValue DatePrototype::method_toLocaleTimeString(SimpleCallContext *ctx) { double t = getThisDate(ctx); - return Value::fromString(ctx, ToLocaleTimeString(t)).asReturnedValue(); + return ctx->engine->newString(ToLocaleTimeString(t))->asReturnedValue(); } ReturnedValue DatePrototype::method_valueOf(SimpleCallContext *ctx) @@ -1242,7 +1242,7 @@ ReturnedValue DatePrototype::method_toUTCString(SimpleCallContext *ctx) ctx->throwTypeError(); double t = self->value.asDouble(); - return Value::fromString(ctx, ToUTCString(t)).asReturnedValue(); + return ctx->engine->newString(ToUTCString(t))->asReturnedValue(); } static void addZeroPrefixedInt(QString &str, int num, int nDigits) @@ -1272,7 +1272,7 @@ ReturnedValue DatePrototype::method_toISOString(SimpleCallContext *ctx) int year = (int)YearFromTime(t); if (year < 0 || year > 9999) { if (qAbs(year) >= 1000000) - return Value::fromString(ctx, QStringLiteral("Invalid Date")).asReturnedValue(); + return ctx->engine->newString(QStringLiteral("Invalid Date"))->asReturnedValue(); result += year < 0 ? '-' : '+'; year = qAbs(year); addZeroPrefixedInt(result, year, 6); @@ -1293,7 +1293,7 @@ ReturnedValue DatePrototype::method_toISOString(SimpleCallContext *ctx) addZeroPrefixedInt(result, msFromTime(t), 3); result += 'Z'; - return Value::fromString(ctx, result).asReturnedValue(); + return ctx->engine->newString(result)->asReturnedValue(); } ReturnedValue DatePrototype::method_toJSON(SimpleCallContext *ctx) diff --git a/src/qml/jsruntime/qv4errorobject.cpp b/src/qml/jsruntime/qv4errorobject.cpp index 21917a94f0..88c47a0c3a 100644 --- a/src/qml/jsruntime/qv4errorobject.cpp +++ b/src/qml/jsruntime/qv4errorobject.cpp @@ -82,7 +82,8 @@ ErrorObject::ErrorObject(InternalClass *ic) Scope scope(engine()); ScopedValue protectThis(scope, this); - defineDefaultProperty(QStringLiteral("name"), Value::fromString(ic->engine, "Error")); + ScopedString s(scope, ic->engine->newString("Error")); + defineDefaultProperty(QStringLiteral("name"), s.asValue()); } ErrorObject::ErrorObject(InternalClass *ic, const ValueRef message, ErrorType t) @@ -100,11 +101,12 @@ ErrorObject::ErrorObject(InternalClass *ic, const ValueRef message, ErrorType t) if (!message->isUndefined()) defineDefaultProperty(QStringLiteral("message"), *message); - defineDefaultProperty(QStringLiteral("name"), Value::fromString(ic->engine, className())); + ScopedString s(scope); + defineDefaultProperty(QStringLiteral("name"), (s = ic->engine->newString(className())).asValue()); stackTrace = ic->engine->stackTrace(); if (!stackTrace.isEmpty()) { - defineDefaultProperty(QStringLiteral("fileName"), Value::fromString(ic->engine, stackTrace.at(0).source)); + defineDefaultProperty(QStringLiteral("fileName"), (s = ic->engine->newString(stackTrace.at(0).source)).asValue()); defineDefaultProperty(QStringLiteral("lineNumber"), Primitive::fromInt32(stackTrace.at(0).line)); } } @@ -119,16 +121,17 @@ ErrorObject::ErrorObject(InternalClass *ic, const QString &message, ErrorObject: Scope scope(engine()); ScopedValue protectThis(scope, this); + ScopedString s(scope); defineAccessorProperty(QStringLiteral("stack"), ErrorObject::method_get_stack, 0); ScopedValue v(scope, ic->engine->newString(message)); defineDefaultProperty(QStringLiteral("message"), v); - defineDefaultProperty(QStringLiteral("name"), Value::fromString(ic->engine, className())); + defineDefaultProperty(QStringLiteral("name"), (s = ic->engine->newString(className())).asValue()); stackTrace = ic->engine->stackTrace(); if (!stackTrace.isEmpty()) { - defineDefaultProperty(QStringLiteral("fileName"), Value::fromString(ic->engine, stackTrace.at(0).source)); + defineDefaultProperty(QStringLiteral("fileName"), (s = ic->engine->newString(stackTrace.at(0).source)).asValue()); defineDefaultProperty(QStringLiteral("lineNumber"), Primitive::fromInt32(stackTrace.at(0).line)); } } @@ -143,9 +146,10 @@ ErrorObject::ErrorObject(InternalClass *ic, const QString &message, const QStrin Scope scope(engine()); ScopedValue protectThis(scope, this); + ScopedString s(scope); defineAccessorProperty(QStringLiteral("stack"), ErrorObject::method_get_stack, 0); - defineDefaultProperty(QStringLiteral("name"), Value::fromString(ic->engine, className())); + defineDefaultProperty(QStringLiteral("name"), (s = ic->engine->newString(className())).asValue()); stackTrace = ic->engine->stackTrace(); ExecutionEngine::StackFrame frame; @@ -155,7 +159,7 @@ ErrorObject::ErrorObject(InternalClass *ic, const QString &message, const QStrin stackTrace.prepend(frame); if (!stackTrace.isEmpty()) { - defineDefaultProperty(QStringLiteral("fileName"), Value::fromString(ic->engine, stackTrace.at(0).source)); + defineDefaultProperty(QStringLiteral("fileName"), (s = ic->engine->newString(stackTrace.at(0).source)).asValue()); defineDefaultProperty(QStringLiteral("lineNumber"), Primitive::fromInt32(stackTrace.at(0).line)); } @@ -368,11 +372,13 @@ ReturnedValue URIErrorCtor::construct(Managed *m, CallData *callData) void ErrorPrototype::init(ExecutionEngine *engine, const Value &ctor, Object *obj) { + Scope scope(engine); + ScopedString s(scope); ctor.objectValue()->defineReadonlyProperty(engine->id_prototype, Value::fromObject(obj)); ctor.objectValue()->defineReadonlyProperty(engine->id_length, Primitive::fromInt32(1)); obj->defineDefaultProperty(QStringLiteral("constructor"), ctor); obj->defineDefaultProperty(engine->id_toString, method_toString, 0); - obj->defineDefaultProperty(QStringLiteral("message"), Value::fromString(engine, QString())); + obj->defineDefaultProperty(QStringLiteral("message"), (s = engine->newString(QString())).asValue()); } ReturnedValue ErrorPrototype::method_toString(SimpleCallContext *ctx) @@ -405,5 +411,5 @@ ReturnedValue ErrorPrototype::method_toString(SimpleCallContext *ctx) str = qname + QLatin1String(": ") + qmessage; } - return Value::fromString(ctx, str).asReturnedValue(); + return ctx->engine->newString(str)->asReturnedValue(); } diff --git a/src/qml/jsruntime/qv4functionobject.cpp b/src/qml/jsruntime/qv4functionobject.cpp index fbc5c10e3c..888be1733e 100644 --- a/src/qml/jsruntime/qv4functionobject.cpp +++ b/src/qml/jsruntime/qv4functionobject.cpp @@ -313,7 +313,7 @@ ReturnedValue FunctionPrototype::method_toString(SimpleCallContext *ctx) if (!fun) ctx->throwTypeError(); - return Value::fromString(ctx, QStringLiteral("function() { [code] }")).asReturnedValue(); + return ctx->engine->newString(QStringLiteral("function() { [code] }"))->asReturnedValue(); } ReturnedValue FunctionPrototype::method_apply(SimpleCallContext *ctx) diff --git a/src/qml/jsruntime/qv4globalobject.cpp b/src/qml/jsruntime/qv4globalobject.cpp index 4cb351eeb0..856b85cc1c 100644 --- a/src/qml/jsruntime/qv4globalobject.cpp +++ b/src/qml/jsruntime/qv4globalobject.cpp @@ -605,7 +605,7 @@ ReturnedValue GlobalFunctions::method_decodeURI(SimpleCallContext *context) context->throwURIError(s); } - return Value::fromString(context, out).asReturnedValue(); + return context->engine->newString(out)->asReturnedValue(); } /// decodeURIComponent [15.1.3.2] @@ -623,7 +623,7 @@ ReturnedValue GlobalFunctions::method_decodeURIComponent(SimpleCallContext *cont context->throwURIError(s); } - return Value::fromString(context, out).asReturnedValue(); + return context->engine->newString(out)->asReturnedValue(); } /// encodeURI [15.1.3.3] @@ -641,7 +641,7 @@ ReturnedValue GlobalFunctions::method_encodeURI(SimpleCallContext *context) context->throwURIError(s); } - return Value::fromString(context, out).asReturnedValue(); + return context->engine->newString(out)->asReturnedValue(); } /// encodeURIComponent [15.1.3.4] @@ -659,23 +659,23 @@ ReturnedValue GlobalFunctions::method_encodeURIComponent(SimpleCallContext *cont context->throwURIError(s); } - return Value::fromString(context, out).asReturnedValue(); + return context->engine->newString(out)->asReturnedValue(); } ReturnedValue GlobalFunctions::method_escape(SimpleCallContext *context) { if (!context->callData->argc) - return Value::fromString(context, QStringLiteral("undefined")).asReturnedValue(); + return context->engine->newString(QStringLiteral("undefined"))->asReturnedValue(); QString str = context->callData->args[0].toString(context)->toQString(); - return Value::fromString(context, escape(str)).asReturnedValue(); + return context->engine->newString(escape(str))->asReturnedValue(); } ReturnedValue GlobalFunctions::method_unescape(SimpleCallContext *context) { if (!context->callData->argc) - return Value::fromString(context, QStringLiteral("undefined")).asReturnedValue(); + return context->engine->newString(QStringLiteral("undefined"))->asReturnedValue(); QString str = context->callData->args[0].toString(context)->toQString(); - return Value::fromString(context, unescape(str)).asReturnedValue(); + return context->engine->newString(unescape(str))->asReturnedValue(); } diff --git a/src/qml/jsruntime/qv4jsonobject.cpp b/src/qml/jsruntime/qv4jsonobject.cpp index b6429278c2..53bdb6d630 100644 --- a/src/qml/jsruntime/qv4jsonobject.cpp +++ b/src/qml/jsruntime/qv4jsonobject.cpp @@ -400,7 +400,7 @@ bool JsonParser::parseValue(ValueRef val) return false; DEBUG << "value: string"; END; - *val = Value::fromString(context, value); + val = context->engine->newString(value); return true; } case BeginArray: { @@ -709,7 +709,7 @@ QString Stringify::Str(const QString &key, Value value) if (!!toJSON) { ScopedCallData callData(scope, 1); callData->thisObject = value; - callData->args[0] = Value::fromString(ctx, key); + callData->args[0] = ctx->engine->newString(key); value = Value::fromReturnedValue(toJSON->call(callData)); } } @@ -719,7 +719,7 @@ QString Stringify::Str(const QString &key, Value value) ScopedValue v(scope, value); holder->put(ctx, QString(), v); ScopedCallData callData(scope, 2); - callData->args[0] = Value::fromString(ctx, key); + callData->args[0] = ctx->engine->newString(key); callData->args[1] = value; callData->thisObject = holder; value = Value::fromReturnedValue(replacerFunction->call(callData)); @@ -940,7 +940,7 @@ ReturnedValue JsonObject::method_stringify(SimpleCallContext *ctx) QString result = stringify.Str(QString(), arg0); if (result.isEmpty()) return Encode::undefined(); - return Value::fromString(ctx, result).asReturnedValue(); + return ctx->engine->newString(result)->asReturnedValue(); } @@ -948,7 +948,7 @@ ReturnedValue JsonObject::method_stringify(SimpleCallContext *ctx) ReturnedValue JsonObject::fromJsonValue(ExecutionEngine *engine, const QJsonValue &value) { if (value.isString()) - return Value::fromString(engine->current, value.toString()).asReturnedValue(); + return engine->current->engine->newString(value.toString())->asReturnedValue(); else if (value.isDouble()) return Encode(value.toDouble()); else if (value.isBool()) diff --git a/src/qml/jsruntime/qv4numberobject.cpp b/src/qml/jsruntime/qv4numberobject.cpp index 9bf0d506f4..38cf899427 100644 --- a/src/qml/jsruntime/qv4numberobject.cpp +++ b/src/qml/jsruntime/qv4numberobject.cpp @@ -121,9 +121,9 @@ ReturnedValue NumberPrototype::method_toString(SimpleCallContext *ctx) } if (std::isnan(num)) { - return Value::fromString(ctx, QStringLiteral("NaN")).asReturnedValue(); + return ctx->engine->newString(QStringLiteral("NaN"))->asReturnedValue(); } else if (qIsInf(num)) { - return Value::fromString(ctx, QLatin1String(num < 0 ? "-Infinity" : "Infinity")).asReturnedValue(); + return ctx->engine->newString(QLatin1String(num < 0 ? "-Infinity" : "Infinity"))->asReturnedValue(); } if (radix != 10) { @@ -153,7 +153,7 @@ ReturnedValue NumberPrototype::method_toString(SimpleCallContext *ctx) } if (negative) str.prepend(QLatin1Char('-')); - return Value::fromString(ctx, str).asReturnedValue(); + return ctx->engine->newString(str)->asReturnedValue(); } } @@ -198,7 +198,7 @@ ReturnedValue NumberPrototype::method_toFixed(SimpleCallContext *ctx) str = QString::number(v, 'f', int (fdigits)); else return __qmljs_string_from_number(ctx, v)->asReturnedValue(); - return Value::fromString(ctx, str).asReturnedValue(); + return ctx->engine->newString(str)->asReturnedValue(); } ReturnedValue NumberPrototype::method_toExponential(SimpleCallContext *ctx) @@ -221,7 +221,7 @@ ReturnedValue NumberPrototype::method_toExponential(SimpleCallContext *ctx) double_conversion::DoubleToStringConverter::EcmaScriptConverter().ToExponential(d, fdigits, &builder); QString result = QString::fromLatin1(builder.Finalize()); - return Value::fromString(ctx, result).asReturnedValue(); + return ctx->engine->newString(result)->asReturnedValue(); } ReturnedValue NumberPrototype::method_toPrecision(SimpleCallContext *ctx) @@ -244,5 +244,5 @@ ReturnedValue NumberPrototype::method_toPrecision(SimpleCallContext *ctx) double_conversion::DoubleToStringConverter::EcmaScriptConverter().ToPrecision(v->asDouble(), precision, &builder); QString result = QString::fromLatin1(builder.Finalize()); - return Value::fromString(ctx, result).asReturnedValue(); + return ctx->engine->newString(result)->asReturnedValue(); } diff --git a/src/qml/jsruntime/qv4objectproto.cpp b/src/qml/jsruntime/qv4objectproto.cpp index fb47c4a15e..49bee363a3 100644 --- a/src/qml/jsruntime/qv4objectproto.cpp +++ b/src/qml/jsruntime/qv4objectproto.cpp @@ -388,13 +388,13 @@ ReturnedValue ObjectPrototype::method_toString(SimpleCallContext *ctx) { Scope scope(ctx); if (ctx->callData->thisObject.isUndefined()) { - return Value::fromString(ctx, QStringLiteral("[object Undefined]")).asReturnedValue(); + return ctx->engine->newString(QStringLiteral("[object Undefined]"))->asReturnedValue(); } else if (ctx->callData->thisObject.isNull()) { - return Value::fromString(ctx, QStringLiteral("[object Null]")).asReturnedValue(); + return ctx->engine->newString(QStringLiteral("[object Null]"))->asReturnedValue(); } else { ScopedObject obj(scope, __qmljs_to_object(ctx, ValueRef(&ctx->callData->thisObject))); QString className = obj->className(); - return Value::fromString(ctx, QString::fromUtf8("[object %1]").arg(className)).asReturnedValue(); + return ctx->engine->newString(QString::fromUtf8("[object %1]").arg(className))->asReturnedValue(); } } diff --git a/src/qml/jsruntime/qv4qobjectwrapper.cpp b/src/qml/jsruntime/qv4qobjectwrapper.cpp index 6870cd693c..c206826cbc 100644 --- a/src/qml/jsruntime/qv4qobjectwrapper.cpp +++ b/src/qml/jsruntime/qv4qobjectwrapper.cpp @@ -170,7 +170,7 @@ static QV4::ReturnedValue LoadProperty(QV8Engine *engine, QObject *object, } else if (property.propType == QMetaType::QString) { QString v; ReadFunction(object, property, &v, notifier); - return Value::fromString(v4, v).asReturnedValue(); + return v4->newString(v)->asReturnedValue(); } else if (property.propType == QMetaType::UInt) { uint v = 0; ReadFunction(object, property, &v, notifier); @@ -1680,7 +1680,7 @@ QV4::ReturnedValue QObjectMethod::method_toString(QV4::ExecutionContext *ctx) result = QLatin1String("null"); } - return QV4::Value::fromString(ctx, result).asReturnedValue(); + return ctx->engine->newString(result)->asReturnedValue(); } QV4::ReturnedValue QObjectMethod::method_destroy(QV4::ExecutionContext *ctx, const Value *args, int argc) diff --git a/src/qml/jsruntime/qv4regexpobject.cpp b/src/qml/jsruntime/qv4regexpobject.cpp index b3dec63d53..126188fcb7 100644 --- a/src/qml/jsruntime/qv4regexpobject.cpp +++ b/src/qml/jsruntime/qv4regexpobject.cpp @@ -332,7 +332,7 @@ ReturnedValue RegExpPrototype::method_exec(SimpleCallContext *ctx) for (int i = 0; i < len; ++i) { int start = matchOffsets[i * 2]; int end = matchOffsets[i * 2 + 1]; - array->arrayData[i].value = (start != -1 && end != -1) ? Value::fromString(ctx, s.mid(start, end - start)) : Primitive::undefinedValue(); + array->arrayData[i].value = (start != -1 && end != -1) ? ctx->engine->newString(s.mid(start, end - start))->asReturnedValue() : Encode::undefined(); array->arrayDataLen = i + 1; } array->setArrayLengthUnchecked(len); @@ -360,7 +360,7 @@ ReturnedValue RegExpPrototype::method_toString(SimpleCallContext *ctx) if (!r) ctx->throwTypeError(); - return Value::fromString(ctx, r->toString()).asReturnedValue(); + return ctx->engine->newString(r->toString())->asReturnedValue(); } ReturnedValue RegExpPrototype::method_compile(SimpleCallContext *ctx) diff --git a/src/qml/jsruntime/qv4runtime.cpp b/src/qml/jsruntime/qv4runtime.cpp index 0d7be34e74..8d1171a18b 100644 --- a/src/qml/jsruntime/qv4runtime.cpp +++ b/src/qml/jsruntime/qv4runtime.cpp @@ -677,7 +677,7 @@ ReturnedValue __qmljs_get_element(ExecutionContext *ctx, const ValueRef object, return Primitive::undefinedValue().asReturnedValue(); } const QString s = str->toQString().mid(idx, 1); - return Value::fromString(ctx, s).asReturnedValue(); + return scope.engine->newString(s)->asReturnedValue(); } } diff --git a/src/qml/jsruntime/qv4scopedvalue_p.h b/src/qml/jsruntime/qv4scopedvalue_p.h index 775225a83b..b629c2fa54 100644 --- a/src/qml/jsruntime/qv4scopedvalue_p.h +++ b/src/qml/jsruntime/qv4scopedvalue_p.h @@ -406,6 +406,11 @@ struct ValueRef { ptr->val = v; return *this; } + template + ValueRef &operator=(Returned *v) { + ptr->val = v->asReturnedValue(); + return *this; + } operator const Value *() const { return ptr; @@ -583,6 +588,14 @@ private: Encode(void *); }; + +template +inline Value &Value::operator=(Returned *t) +{ + val = t->getPointer()->asReturnedValue(); + return *this; +} + inline SafeValue &SafeValue::operator =(const ScopedValue &v) { val = v.ptr->val; diff --git a/src/qml/jsruntime/qv4sequenceobject.cpp b/src/qml/jsruntime/qv4sequenceobject.cpp index 4ec5644352..f864d4dabf 100644 --- a/src/qml/jsruntime/qv4sequenceobject.cpp +++ b/src/qml/jsruntime/qv4sequenceobject.cpp @@ -81,7 +81,9 @@ static void generateWarning(QV4::ExecutionContext *ctx, const QString& descripti static QV4::Value convertElementToValue(QV4::ExecutionEngine *engine, const QString &element) { - return QV4::Value::fromString(engine, element); + QV4::Value v; + v = engine->newString(element)->asReturnedValue(); + return v; } static QV4::Value convertElementToValue(QV4::ExecutionEngine *, int element) @@ -91,7 +93,9 @@ static QV4::Value convertElementToValue(QV4::ExecutionEngine *, int element) static QV4::Value convertElementToValue(QV4::ExecutionEngine *engine, const QUrl &element) { - return QV4::Value::fromString(engine, element.toString()); + QV4::Value v; + v = engine->newString(element.toString())->asReturnedValue(); + return v; } static QV4::Value convertElementToValue(QV4::ExecutionEngine *, qreal element) diff --git a/src/qml/jsruntime/qv4stringobject.cpp b/src/qml/jsruntime/qv4stringobject.cpp index af6e92105f..adff8e3978 100644 --- a/src/qml/jsruntime/qv4stringobject.cpp +++ b/src/qml/jsruntime/qv4stringobject.cpp @@ -78,10 +78,11 @@ using namespace QV4; DEFINE_MANAGED_VTABLE(StringObject); StringObject::StringObject(InternalClass *ic) - : Object(ic), value(Value::fromString(ic->engine, "")) + : Object(ic) { vtbl = &static_vtbl; type = Type_StringObject; + value = ic->engine->newString("")->asReturnedValue(); tmpProperty.value = Primitive::undefinedValue(); @@ -171,7 +172,7 @@ ReturnedValue StringCtor::construct(Managed *m, CallData *callData) if (callData->argc) value = callData->args[0].toString(v4->current); else - value = Value::fromString(v4->current, QString()); + value = v4->newString(QString()); return Encode(v4->newStringObject(value)); } @@ -183,7 +184,7 @@ ReturnedValue StringCtor::call(Managed *m, CallData *callData) if (callData->argc) value = callData->args[0].toString(v4->current); else - value = Value::fromString(v4->current, QString()); + value = v4->newString(QString()); return value.asReturnedValue(); } @@ -252,7 +253,7 @@ ReturnedValue StringPrototype::method_charAt(SimpleCallContext *context) if (pos >= 0 && pos < str.length()) result += str.at(pos); - return Value::fromString(context, result).asReturnedValue(); + return context->engine->newString(result)->asReturnedValue(); } ReturnedValue StringPrototype::method_charCodeAt(SimpleCallContext *context) @@ -283,7 +284,7 @@ ReturnedValue StringPrototype::method_concat(SimpleCallContext *context) value += v->stringValue()->toQString(); } - return Value::fromString(context, value).asReturnedValue(); + return context->engine->newString(value)->asReturnedValue(); } ReturnedValue StringPrototype::method_indexOf(SimpleCallContext *context) @@ -513,21 +514,22 @@ ReturnedValue StringPrototype::method_replace(SimpleCallContext *ctx) ScopedCallData callData(scope, numCaptures + 2); callData->thisObject = Primitive::undefinedValue(); int lastEnd = 0; + ScopedValue entry(scope); for (int i = 0; i < numStringMatches; ++i) { for (int k = 0; k < numCaptures; ++k) { int idx = (i * numCaptures + k) * 2; uint start = matchOffsets[idx]; uint end = matchOffsets[idx + 1]; - Value entry = Primitive::undefinedValue(); + entry = Primitive::undefinedValue(); if (start != JSC::Yarr::offsetNoMatch && end != JSC::Yarr::offsetNoMatch) - entry = Value::fromString(ctx, string.mid(start, end - start)); + entry = ctx->engine->newString(string.mid(start, end - start)); callData->args[k] = entry; } uint matchStart = matchOffsets[i * numCaptures * 2]; Q_ASSERT(matchStart >= lastEnd); uint matchEnd = matchOffsets[i * numCaptures * 2 + 1]; callData->args[numCaptures] = Primitive::fromUInt32(matchStart); - callData->args[numCaptures + 1] = Value::fromString(ctx, string); + callData->args[numCaptures + 1] = ctx->engine->newString(string); replacement = searchCallback->call(callData); result += string.midRef(lastEnd, matchStart - lastEnd); @@ -557,7 +559,7 @@ ReturnedValue StringPrototype::method_replace(SimpleCallContext *ctx) if (matchOffsets != _matchOffsets) free(matchOffsets); - return Value::fromString(ctx, result).asReturnedValue(); + return ctx->engine->newString(result)->asReturnedValue(); } ReturnedValue StringPrototype::method_search(SimpleCallContext *ctx) @@ -604,7 +606,7 @@ ReturnedValue StringPrototype::method_slice(SimpleCallContext *ctx) const int intEnd = int(end); int count = qMax(0, intEnd - intStart); - return Value::fromString(ctx, text.mid(intStart, count)).asReturnedValue(); + return ctx->engine->newString(text.mid(intStart, count))->asReturnedValue(); } ReturnedValue StringPrototype::method_split(SimpleCallContext *ctx) @@ -623,7 +625,7 @@ ReturnedValue StringPrototype::method_split(SimpleCallContext *ctx) array->push_back(s); return array.asReturnedValue(); } - return Value::fromString(ctx, text.left(limitValue->toInteger())).asReturnedValue(); + return ctx->engine->newString(text.left(limitValue->toInteger()))->asReturnedValue(); } uint limit = limitValue->isUndefined() ? UINT_MAX : limitValue->toUInt32(); @@ -635,7 +637,7 @@ ReturnedValue StringPrototype::method_split(SimpleCallContext *ctx) if (re) { if (re->value->pattern().isEmpty()) { re = (RegExpObject *)0; - separatorValue = Value::fromString(ctx, QString()); + separatorValue = ctx->engine->newString(QString()); } } @@ -648,7 +650,7 @@ ReturnedValue StringPrototype::method_split(SimpleCallContext *ctx) if (result == JSC::Yarr::offsetNoMatch) break; - array->push_back((s = Value::fromString(ctx, text.mid(offset, matchOffsets[0] - offset)))); + array->push_back((s = ctx->engine->newString(text.mid(offset, matchOffsets[0] - offset)))); offset = qMax(offset + 1, matchOffsets[1]); if (array->arrayLength() >= limit) @@ -657,31 +659,31 @@ ReturnedValue StringPrototype::method_split(SimpleCallContext *ctx) for (int i = 1; i < re->value->captureCount(); ++i) { uint start = matchOffsets[i * 2]; uint end = matchOffsets[i * 2 + 1]; - array->push_back((s = Value::fromString(ctx, text.mid(start, end - start)))); + array->push_back((s = ctx->engine->newString(text.mid(start, end - start)))); if (array->arrayLength() >= limit) break; } } if (array->arrayLength() < limit) - array->push_back((s = Value::fromString(ctx, text.mid(offset)))); + array->push_back((s = ctx->engine->newString(text.mid(offset)))); } else { QString separator = separatorValue->toString(ctx)->toQString(); if (separator.isEmpty()) { for (uint i = 0; i < qMin(limit, uint(text.length())); ++i) - array->push_back((s = Value::fromString(ctx, text.mid(i, 1)))); + array->push_back((s = ctx->engine->newString(text.mid(i, 1)))); return array.asReturnedValue(); } int start = 0; int end; while ((end = text.indexOf(separator, start)) != -1) { - array->push_back((s = Value::fromString(ctx, text.mid(start, end - start)))); + array->push_back((s = ctx->engine->newString(text.mid(start, end - start)))); start = end + separator.size(); if (array->arrayLength() >= limit) break; } if (array->arrayLength() < limit && start != -1) - array->push_back((s = Value::fromString(ctx, text.mid(start)))); + array->push_back((s = ctx->engine->newString(text.mid(start)))); } return array.asReturnedValue(); } @@ -706,7 +708,7 @@ ReturnedValue StringPrototype::method_substr(SimpleCallContext *context) qint32 x = Primitive::toInt32(start); qint32 y = Primitive::toInt32(length); - return Value::fromString(context, value.mid(x, y)).asReturnedValue(); + return context->engine->newString(value.mid(x, y))->asReturnedValue(); } ReturnedValue StringPrototype::method_substring(SimpleCallContext *context) @@ -745,13 +747,13 @@ ReturnedValue StringPrototype::method_substring(SimpleCallContext *context) qint32 x = (int)start; qint32 y = (int)(end - start); - return Value::fromString(context, value.mid(x, y)).asReturnedValue(); + return context->engine->newString(value.mid(x, y))->asReturnedValue(); } ReturnedValue StringPrototype::method_toLowerCase(SimpleCallContext *ctx) { QString value = getThisString(ctx); - return Value::fromString(ctx, value.toLower()).asReturnedValue(); + return ctx->engine->newString(value.toLower())->asReturnedValue(); } ReturnedValue StringPrototype::method_toLocaleLowerCase(SimpleCallContext *ctx) @@ -762,7 +764,7 @@ ReturnedValue StringPrototype::method_toLocaleLowerCase(SimpleCallContext *ctx) ReturnedValue StringPrototype::method_toUpperCase(SimpleCallContext *ctx) { QString value = getThisString(ctx); - return Value::fromString(ctx, value.toUpper()).asReturnedValue(); + return ctx->engine->newString(value.toUpper())->asReturnedValue(); } ReturnedValue StringPrototype::method_toLocaleUpperCase(SimpleCallContext *ctx) @@ -778,7 +780,7 @@ ReturnedValue StringPrototype::method_fromCharCode(SimpleCallContext *context) *ch = QChar(context->callData->args[i].toUInt16()); ++ch; } - return Value::fromString(context, str).asReturnedValue(); + return context->engine->newString(str)->asReturnedValue(); } ReturnedValue StringPrototype::method_trim(SimpleCallContext *ctx) @@ -796,5 +798,5 @@ ReturnedValue StringPrototype::method_trim(SimpleCallContext *ctx) break; } - return Value::fromString(ctx, QString(chars + start, end - start + 1)).asReturnedValue(); + return ctx->engine->newString(QString(chars + start, end - start + 1))->asReturnedValue(); } diff --git a/src/qml/jsruntime/qv4value.cpp b/src/qml/jsruntime/qv4value.cpp index 66e80cfa01..623f9ae3b6 100644 --- a/src/qml/jsruntime/qv4value.cpp +++ b/src/qml/jsruntime/qv4value.cpp @@ -202,16 +202,6 @@ bool Value::sameValue(Value other) const { return false; } -Value Value::fromString(ExecutionContext *ctx, const QString &s) -{ - return fromManaged(ctx->engine->newString(s)->getPointer()); -} - -Value Value::fromString(ExecutionEngine *engine, const QString &s) -{ - return fromManaged(engine->newString(s)->getPointer()); -} - int Primitive::toInt32(double number) { diff --git a/src/qml/jsruntime/qv4value_def_p.h b/src/qml/jsruntime/qv4value_def_p.h index b10a412555..bc73a85e04 100644 --- a/src/qml/jsruntime/qv4value_def_p.h +++ b/src/qml/jsruntime/qv4value_def_p.h @@ -277,11 +277,6 @@ struct Q_QML_EXPORT Value static Value fromObject(Object *o); static Value fromManaged(Managed *o); -#ifndef QMLJS_LLVM_RUNTIME - static Value fromString(ExecutionContext *ctx, const QString &fromString); - static Value fromString(ExecutionEngine *engine, const QString &s); -#endif - int toUInt16() const; int toInt32() const; unsigned int toUInt32() const; @@ -324,6 +319,8 @@ struct Q_QML_EXPORT Value ReturnedValue asReturnedValue() const { return val; } static Value fromReturnedValue(ReturnedValue val) { Value v; v.val = val; return v; } Value &operator=(ReturnedValue v) { val = v; return *this; } + template + inline Value &operator=(Returned *t); // Section 9.12 bool sameValue(Value other) const; diff --git a/src/qml/qml/qqmllocale.cpp b/src/qml/qml/qqmllocale.cpp index 97ab56256e..e79f1582d9 100644 --- a/src/qml/qml/qqmllocale.cpp +++ b/src/qml/qml/qqmllocale.cpp @@ -151,7 +151,7 @@ QV4::ReturnedValue QQmlDateExtension::method_toLocaleString(QV4::SimpleCallConte if (ctx->callData->argc == 0) { // Use QLocale for standard toLocaleString() function QLocale locale; - return QV4::Value::fromString(ctx, locale.toString(dt)).asReturnedValue(); + return ctx->engine->newString(locale.toString(dt))->asReturnedValue(); } if (!isLocaleObject(ctx->callData->args[0])) @@ -176,7 +176,7 @@ QV4::ReturnedValue QQmlDateExtension::method_toLocaleString(QV4::SimpleCallConte formattedDt = r->locale.toString(dt, enumFormat); } - return QV4::Value::fromString(ctx, formattedDt).asReturnedValue(); + return ctx->engine->newString(formattedDt)->asReturnedValue(); } QV4::ReturnedValue QQmlDateExtension::method_toLocaleTimeString(QV4::SimpleCallContext *ctx) @@ -196,7 +196,7 @@ QV4::ReturnedValue QQmlDateExtension::method_toLocaleTimeString(QV4::SimpleCallC if (ctx->callData->argc == 0) { // Use QLocale for standard toLocaleString() function QLocale locale; - return QV4::Value::fromString(ctx, locale.toString(time)).asReturnedValue(); + return ctx->engine->newString(locale.toString(time))->asReturnedValue(); } if (!isLocaleObject(ctx->callData->args[0])) @@ -221,7 +221,7 @@ QV4::ReturnedValue QQmlDateExtension::method_toLocaleTimeString(QV4::SimpleCallC formattedTime = r->locale.toString(time, enumFormat); } - return QV4::Value::fromString(ctx, formattedTime).asReturnedValue(); + return ctx->engine->newString(formattedTime)->asReturnedValue(); } QV4::ReturnedValue QQmlDateExtension::method_toLocaleDateString(QV4::SimpleCallContext *ctx) @@ -241,7 +241,7 @@ QV4::ReturnedValue QQmlDateExtension::method_toLocaleDateString(QV4::SimpleCallC if (ctx->callData->argc == 0) { // Use QLocale for standard toLocaleString() function QLocale locale; - return QV4::Value::fromString(ctx, locale.toString(date)).asReturnedValue(); + return ctx->engine->newString(locale.toString(date))->asReturnedValue(); } if (!isLocaleObject(ctx->callData->args[0])) @@ -266,7 +266,7 @@ QV4::ReturnedValue QQmlDateExtension::method_toLocaleDateString(QV4::SimpleCallC formattedDate = r->locale.toString(date, enumFormat); } - return QV4::Value::fromString(ctx, formattedDate).asReturnedValue(); + return ctx->engine->newString(formattedDate)->asReturnedValue(); } QV4::ReturnedValue QQmlDateExtension::method_fromLocaleString(QV4::SimpleCallContext *ctx) @@ -420,7 +420,7 @@ QV4::ReturnedValue QQmlNumberExtension::method_toLocaleString(QV4::SimpleCallCon if (ctx->callData->argc == 0) { // Use QLocale for standard toLocaleString() function QLocale locale; - return QV4::Value::fromString(ctx, locale.toString(number)).asReturnedValue(); + return ctx->engine->newString(locale.toString(number))->asReturnedValue(); } if (!isLocaleObject(ctx->callData->args[0])) @@ -445,7 +445,7 @@ QV4::ReturnedValue QQmlNumberExtension::method_toLocaleString(QV4::SimpleCallCon prec = ctx->callData->args[2].toInt32(); } - return QV4::Value::fromString(ctx, r->locale.toString(number, (char)format, prec)).asReturnedValue(); + return ctx->engine->newString(r->locale.toString(number, (char)format, prec))->asReturnedValue(); } QV4::ReturnedValue QQmlNumberExtension::method_toLocaleCurrencyString(QV4::SimpleCallContext *ctx) @@ -458,7 +458,7 @@ QV4::ReturnedValue QQmlNumberExtension::method_toLocaleCurrencyString(QV4::Simpl if (ctx->callData->argc == 0) { // Use QLocale for standard toLocaleString() function QLocale locale; - return QV4::Value::fromString(ctx, locale.toString(number)).asReturnedValue(); + return ctx->engine->newString(locale.toString(number))->asReturnedValue(); } if (!isLocaleObject(ctx->callData->args[0])) @@ -475,7 +475,7 @@ QV4::ReturnedValue QQmlNumberExtension::method_toLocaleCurrencyString(QV4::Simpl symbol = ctx->callData->args[1].toQStringNoThrow(); } - return QV4::Value::fromString(ctx, r->locale.toCurrencyString(number, symbol)).asReturnedValue(); + return ctx->engine->newString(r->locale.toCurrencyString(number, symbol))->asReturnedValue(); } QV4::ReturnedValue QQmlNumberExtension::method_fromLocaleString(QV4::SimpleCallContext *ctx) @@ -563,7 +563,7 @@ QV4::ReturnedValue QQmlLocaleData::method_get_uiLanguages(QV4::SimpleCallContext QV4::Scoped result(scope, ctx->engine->newArrayObject()); result->arrayReserve(langs.size()); for (int i = 0; i < langs.size(); ++i) { - result->arrayData[i].value = QV4::Value::fromString(ctx, langs.at(i)); + result->arrayData[i].value = ctx->engine->newString(langs.at(i)); result->arrayDataLen = i + 1; } @@ -584,7 +584,7 @@ QV4::ReturnedValue QQmlLocaleData::method_currencySymbol(QV4::SimpleCallContext format = QLocale::CurrencySymbolFormat(intFormat); } - return QV4::Value::fromString(ctx, locale.currencySymbol(format)).asReturnedValue(); + return ctx->engine->newString(locale.currencySymbol(format))->asReturnedValue(); } #define LOCALE_FORMAT(FUNC) \ @@ -597,7 +597,7 @@ QV4::ReturnedValue QQmlLocaleData::method_ ##FUNC (QV4::SimpleCallContext *ctx) quint32 intFormat = ctx->callData->args[0].toUInt32(); \ format = QLocale::FormatType(intFormat); \ } \ - return QV4::Value::fromString(ctx, locale. FUNC (format)).asReturnedValue(); \ + return ctx->engine->newString(locale. FUNC (format))->asReturnedValue(); \ } LOCALE_FORMAT(dateTimeFormat) @@ -626,7 +626,7 @@ QV4::ReturnedValue QQmlLocaleData::method_ ## VARIABLE (QV4::SimpleCallContext * } else { \ name = locale. VARIABLE(idx, enumFormat); \ } \ - return QV4::Value::fromString(ctx, name).asReturnedValue(); \ + return ctx->engine->newString(name)->asReturnedValue(); \ } // 0 -> 7 as Qt::Sunday is 7, but Sunday is 0 in JS Date @@ -652,7 +652,7 @@ QV4::ReturnedValue QQmlLocaleData::method_ ## VARIABLE (QV4::SimpleCallContext * } else { \ name = locale. VARIABLE(idx, enumFormat); \ } \ - return QV4::Value::fromString(ctx, name).asReturnedValue(); \ + return ctx->engine->newString(name)->asReturnedValue(); \ } LOCALE_FORMATTED_MONTHNAME(monthName) @@ -663,7 +663,7 @@ LOCALE_FORMATTED_DAYNAME(standaloneDayName) #define LOCALE_STRING_PROPERTY(VARIABLE) QV4::ReturnedValue QQmlLocaleData::method_get_ ## VARIABLE (QV4::SimpleCallContext* ctx) \ { \ QLocale locale = getThisLocale(ctx); \ - return QV4::Value::fromString(ctx, locale. VARIABLE()).asReturnedValue();\ + return ctx->engine->newString(locale. VARIABLE())->asReturnedValue();\ } LOCALE_STRING_PROPERTY(name) diff --git a/src/qml/qml/qqmlobjectcreator.cpp b/src/qml/qml/qqmlobjectcreator.cpp index 3b4e89861d..65edcad2cf 100644 --- a/src/qml/qml/qqmlobjectcreator.cpp +++ b/src/qml/qml/qqmlobjectcreator.cpp @@ -548,6 +548,8 @@ void QmlObjectCreator::setPropertyValue(QQmlPropertyData *property, const QV4::C int propertyWriteStatus = -1; void *argv[] = { 0, 0, &propertyWriteStatus, &propertyWriteFlags }; + QV4::ExecutionEngine *v4 = QV8Engine::getV4(engine); + QV4::Scope scope(v4); // ### enums switch (property->propType) { @@ -583,7 +585,8 @@ void QmlObjectCreator::setPropertyValue(QQmlPropertyData *property, const QV4::C } else { QString stringValue = binding->valueAsString(&qmlUnit->header); if (property->isVarProperty()) { - _vmeMetaObject->setVMEProperty(property->coreIndex, QV4::Value::fromString(QV8Engine::getV4(engine), stringValue)); + QV4::ScopedString s(scope, v4->newString(stringValue)); + _vmeMetaObject->setVMEProperty(property->coreIndex, s.asValue()); } else { QVariant value = QQmlStringConverters::variantFromString(stringValue); argv[0] = &value; diff --git a/src/qml/qml/v8/qqmlbuiltinfunctions.cpp b/src/qml/qml/v8/qqmlbuiltinfunctions.cpp index 121b0fbb78..638ff942ab 100644 --- a/src/qml/qml/v8/qqmlbuiltinfunctions.cpp +++ b/src/qml/qml/v8/qqmlbuiltinfunctions.cpp @@ -834,12 +834,12 @@ ReturnedValue QtObject::method_resolvedUrl(QV4::SimpleCallContext *ctx) if (p) { QQmlContextData *ctxt = v8engine->callingContext(); if (ctxt) - return Value::fromString(ctx, ctxt->resolvedUrl(url).toString()).asReturnedValue(); + return ctx->engine->newString(ctxt->resolvedUrl(url).toString())->asReturnedValue(); else - return Value::fromString(ctx, url.toString()).asReturnedValue(); + return ctx->engine->newString(url.toString())->asReturnedValue(); } - return Value::fromString(ctx, e->baseUrl().resolved(url).toString()).asReturnedValue(); + return ctx->engine->newString(e->baseUrl().resolved(url).toString())->asReturnedValue(); } /*! @@ -866,7 +866,7 @@ ReturnedValue QtObject::method_md5(SimpleCallContext *ctx) QByteArray data = ctx->callData->args[0].toQStringNoThrow().toUtf8(); QByteArray result = QCryptographicHash::hash(data, QCryptographicHash::Md5); - return Value::fromString(ctx, QLatin1String(result.toHex())).asReturnedValue(); + return ctx->engine->newString(QLatin1String(result.toHex()))->asReturnedValue(); } /*! @@ -880,7 +880,7 @@ ReturnedValue QtObject::method_btoa(SimpleCallContext *ctx) QByteArray data = ctx->callData->args[0].toQStringNoThrow().toUtf8(); - return Value::fromString(ctx, QLatin1String(data.toBase64())).asReturnedValue(); + return ctx->engine->newString(QLatin1String(data.toBase64()))->asReturnedValue(); } /*! @@ -894,7 +894,7 @@ ReturnedValue QtObject::method_atob(SimpleCallContext *ctx) QByteArray data = ctx->callData->args[0].toQStringNoThrow().toLatin1(); - return Value::fromString(ctx, QString::fromUtf8(QByteArray::fromBase64(data))).asReturnedValue(); + return ctx->engine->newString(QString::fromUtf8(QByteArray::fromBase64(data)))->asReturnedValue(); } /*! @@ -1644,7 +1644,7 @@ ReturnedValue GlobalExtensions::method_qsTranslate(SimpleCallContext *ctx) comment.toUtf8().constData(), n); - return Value::fromString(ctx, result).asReturnedValue(); + return ctx->engine->newString(result)->asReturnedValue(); } /*! @@ -1722,7 +1722,7 @@ ReturnedValue GlobalExtensions::method_qsTr(SimpleCallContext *ctx) QString result = QCoreApplication::translate(context.toUtf8().constData(), text.toUtf8().constData(), comment.toUtf8().constData(), n); - return Value::fromString(ctx, result).asReturnedValue(); + return ctx->engine->newString(result)->asReturnedValue(); } /*! @@ -1797,7 +1797,7 @@ ReturnedValue GlobalExtensions::method_qsTrId(SimpleCallContext *ctx) if (ctx->callData->argc > 1) n = ctx->callData->args[1].toInt32(); - return Value::fromString(ctx, qtTrId(ctx->callData->args[0].toQStringNoThrow().toUtf8().constData(), n)).asReturnedValue(); + return ctx->engine->newString(qtTrId(ctx->callData->args[0].toQStringNoThrow().toUtf8().constData(), n))->asReturnedValue(); } /*! @@ -1842,13 +1842,13 @@ ReturnedValue GlobalExtensions::method_string_arg(SimpleCallContext *ctx) QV4::Value arg = ctx->callData->args[0]; if (arg.isInteger()) - return Value::fromString(ctx, value.arg(arg.integerValue())).asReturnedValue(); + return ctx->engine->newString(value.arg(arg.integerValue()))->asReturnedValue(); else if (arg.isDouble()) - return Value::fromString(ctx, value.arg(arg.doubleValue())).asReturnedValue(); + return ctx->engine->newString(value.arg(arg.doubleValue()))->asReturnedValue(); else if (arg.isBoolean()) - return Value::fromString(ctx, value.arg(arg.booleanValue())).asReturnedValue(); + return ctx->engine->newString(value.arg(arg.booleanValue()))->asReturnedValue(); - return Value::fromString(ctx, value.arg(arg.toQStringNoThrow())).asReturnedValue(); + return ctx->engine->newString(value.arg(arg.toQStringNoThrow()))->asReturnedValue(); } diff --git a/src/qml/qml/v8/qv4domerrors_p.h b/src/qml/qml/v8/qv4domerrors_p.h index 686678c093..44662e8cba 100644 --- a/src/qml/qml/v8/qv4domerrors_p.h +++ b/src/qml/qml/v8/qv4domerrors_p.h @@ -77,7 +77,7 @@ QT_BEGIN_NAMESPACE #define DOMEXCEPTION_TYPE_MISMATCH_ERR 17 #define V4THROW_DOM(error, string) { \ - QV4::ScopedValue v(scope, QV4::Value::fromString(ctx, QStringLiteral(string))); \ + QV4::ScopedValue v(scope, ctx->engine->newString(QStringLiteral(string))); \ QV4::Scoped ex(scope, ctx->engine->newErrorObject(v)); \ ex->put(QV4::ScopedString(scope, ctx->engine->newIdentifier(QStringLiteral("code"))), QV4::ScopedValue(scope, QV4::Primitive::fromInt32(error))); \ ctx->throwError(ex); \ diff --git a/src/qml/qml/v8/qv8engine.cpp b/src/qml/qml/v8/qv8engine.cpp index 97cfb50212..20d81c2ac0 100644 --- a/src/qml/qml/v8/qv8engine.cpp +++ b/src/qml/qml/v8/qv8engine.cpp @@ -249,7 +249,7 @@ QV4::ReturnedValue QV8Engine::fromVariant(const QVariant &variant) case QMetaType::Double: return QV4::Encode(*reinterpret_cast(ptr)); case QMetaType::QString: - return QV4::Value::fromString(m_v4Engine->current, *reinterpret_cast(ptr)).asReturnedValue(); + return m_v4Engine->current->engine->newString(*reinterpret_cast(ptr))->asReturnedValue(); case QMetaType::Float: return QV4::Encode(*reinterpret_cast(ptr)); case QMetaType::Short: @@ -661,7 +661,7 @@ QV4::ReturnedValue QV8Engine::metaTypeToJS(int type, const void *data) case QMetaType::Double: return QV4::Encode(*reinterpret_cast(data)); case QMetaType::QString: - return QV4::Value::fromString(m_v4Engine->current, *reinterpret_cast(data)).asReturnedValue(); + return m_v4Engine->current->engine->newString(*reinterpret_cast(data))->asReturnedValue(); case QMetaType::Float: return QV4::Encode(*reinterpret_cast(data)); case QMetaType::Short: diff --git a/src/quick/items/qquickdroparea.cpp b/src/quick/items/qquickdroparea.cpp index 92275b1655..b0ed7a8367 100644 --- a/src/quick/items/qquickdroparea.cpp +++ b/src/quick/items/qquickdroparea.cpp @@ -564,7 +564,7 @@ void QQuickDropEvent::getDataAsString(QQmlV4Function *args) QV4::ScopedValue v(scope, (*args)[0]); QString format = v->toQString(); QString rv = QString::fromUtf8(event->mimeData()->data(format)); - args->setReturnValue(QV4::Value::fromString(v4, rv).asReturnedValue()); + args->setReturnValue(v4->newString(rv)->asReturnedValue()); } } -- cgit v1.2.3