aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/qml/jsruntime/qv4argumentsobject.cpp2
-rw-r--r--src/qml/jsruntime/qv4arrayobject.cpp12
-rw-r--r--src/qml/jsruntime/qv4arrayobject_p.h2
-rw-r--r--src/qml/jsruntime/qv4booleanobject.cpp10
-rw-r--r--src/qml/jsruntime/qv4booleanobject_p.h2
-rw-r--r--src/qml/jsruntime/qv4dateobject.cpp16
-rw-r--r--src/qml/jsruntime/qv4dateobject_p.h2
-rw-r--r--src/qml/jsruntime/qv4engine.cpp10
-rw-r--r--src/qml/jsruntime/qv4errorobject.cpp41
-rw-r--r--src/qml/jsruntime/qv4errorobject_p.h16
-rw-r--r--src/qml/jsruntime/qv4functionobject.cpp11
-rw-r--r--src/qml/jsruntime/qv4functionobject_p.h2
-rw-r--r--src/qml/jsruntime/qv4numberobject.cpp20
-rw-r--r--src/qml/jsruntime/qv4numberobject_p.h2
-rw-r--r--src/qml/jsruntime/qv4object.cpp16
-rw-r--r--src/qml/jsruntime/qv4object_p.h8
-rw-r--r--src/qml/jsruntime/qv4objectproto.cpp39
-rw-r--r--src/qml/jsruntime/qv4objectproto_p.h2
-rw-r--r--src/qml/jsruntime/qv4regexpobject.cpp15
-rw-r--r--src/qml/jsruntime/qv4regexpobject_p.h2
-rw-r--r--src/qml/jsruntime/qv4scopedvalue_p.h3
-rw-r--r--src/qml/jsruntime/qv4stringobject.cpp19
-rw-r--r--src/qml/jsruntime/qv4stringobject_p.h2
-rw-r--r--src/qml/jsruntime/qv4value_def_p.h2
-rw-r--r--src/qml/jsruntime/qv4value_p.h2
-rw-r--r--src/qml/qml/qqmlxmlhttprequest.cpp4
-rw-r--r--src/qml/qml/v8/qqmlbuiltinfunctions.cpp10
-rw-r--r--src/qml/qml/v8/qv4domerrors.cpp2
-rw-r--r--src/qml/qml/v8/qv4sqlerrors.cpp2
-rw-r--r--src/qml/qml/v8/qv8engine_p.h2
-rw-r--r--src/qml/types/qqmldelegatemodel.cpp2
-rw-r--r--src/qml/types/qquickworkerscript.cpp9
32 files changed, 157 insertions, 132 deletions
diff --git a/src/qml/jsruntime/qv4argumentsobject.cpp b/src/qml/jsruntime/qv4argumentsobject.cpp
index 9f3675e817..7e4b828833 100644
--- a/src/qml/jsruntime/qv4argumentsobject.cpp
+++ b/src/qml/jsruntime/qv4argumentsobject.cpp
@@ -172,7 +172,7 @@ ReturnedValue ArgumentsSetterFunction::call(Managed *setter, CallData *callData)
setter->engine()->current->throwTypeError();
assert(s->index < o->context->callData->argc);
- o->context->callData->args[s->index] = callData->argc ? callData->args[0] : Primitive::undefinedValue();
+ o->context->callData->args[s->index] = callData->argc ? callData->args[0].asReturnedValue() : Encode::undefined();
return Primitive::undefinedValue().asReturnedValue();
}
diff --git a/src/qml/jsruntime/qv4arrayobject.cpp b/src/qml/jsruntime/qv4arrayobject.cpp
index ea4d174bb7..7051276f4c 100644
--- a/src/qml/jsruntime/qv4arrayobject.cpp
+++ b/src/qml/jsruntime/qv4arrayobject.cpp
@@ -91,12 +91,14 @@ ArrayPrototype::ArrayPrototype(InternalClass *ic)
{
}
-void ArrayPrototype::init(ExecutionEngine *engine, const Value &ctor)
+void ArrayPrototype::init(ExecutionEngine *engine, ObjectRef ctor)
{
- ctor.objectValue()->defineReadonlyProperty(engine->id_length, Primitive::fromInt32(1));
- ctor.objectValue()->defineReadonlyProperty(engine->id_prototype, Value::fromObject(this));
- ctor.objectValue()->defineDefaultProperty(QStringLiteral("isArray"), method_isArray, 1);
- defineDefaultProperty(QStringLiteral("constructor"), ctor);
+ Scope scope(engine);
+ ScopedObject o(scope);
+ ctor->defineReadonlyProperty(engine->id_length, Primitive::fromInt32(1));
+ ctor->defineReadonlyProperty(engine->id_prototype, (o = this));
+ ctor->defineDefaultProperty(QStringLiteral("isArray"), method_isArray, 1);
+ defineDefaultProperty(QStringLiteral("constructor"), (o = ctor));
defineDefaultProperty(engine->id_toString, method_toString, 0);
defineDefaultProperty(QStringLiteral("toLocaleString"), method_toLocaleString, 0);
defineDefaultProperty(QStringLiteral("concat"), method_concat, 1);
diff --git a/src/qml/jsruntime/qv4arrayobject_p.h b/src/qml/jsruntime/qv4arrayobject_p.h
index 62a731f4e0..121e0dd344 100644
--- a/src/qml/jsruntime/qv4arrayobject_p.h
+++ b/src/qml/jsruntime/qv4arrayobject_p.h
@@ -62,7 +62,7 @@ struct ArrayPrototype: ArrayObject
{
ArrayPrototype(InternalClass *ic);
- void init(ExecutionEngine *engine, const Value &ctor);
+ void init(ExecutionEngine *engine, ObjectRef ctor);
static uint getLength(ExecutionContext *ctx, Object *o);
diff --git a/src/qml/jsruntime/qv4booleanobject.cpp b/src/qml/jsruntime/qv4booleanobject.cpp
index e4274b2ed9..341e3003c6 100644
--- a/src/qml/jsruntime/qv4booleanobject.cpp
+++ b/src/qml/jsruntime/qv4booleanobject.cpp
@@ -65,11 +65,13 @@ ReturnedValue BooleanCtor::call(Managed *, CallData *callData)
return Encode(value);
}
-void BooleanPrototype::init(ExecutionEngine *engine, const Value &ctor)
+void BooleanPrototype::init(ExecutionEngine *engine, ObjectRef ctor)
{
- ctor.objectValue()->defineReadonlyProperty(engine->id_length, Primitive::fromInt32(1));
- ctor.objectValue()->defineReadonlyProperty(engine->id_prototype, Value::fromObject(this));
- defineDefaultProperty(QStringLiteral("constructor"), ctor);
+ Scope scope(engine);
+ ScopedObject o(scope);
+ ctor->defineReadonlyProperty(engine->id_length, Primitive::fromInt32(1));
+ ctor->defineReadonlyProperty(engine->id_prototype, (o = this));
+ defineDefaultProperty(QStringLiteral("constructor"), (o = ctor));
defineDefaultProperty(engine->id_toString, method_toString);
defineDefaultProperty(engine->id_valueOf, method_valueOf);
}
diff --git a/src/qml/jsruntime/qv4booleanobject_p.h b/src/qml/jsruntime/qv4booleanobject_p.h
index a7b85deace..6766fae830 100644
--- a/src/qml/jsruntime/qv4booleanobject_p.h
+++ b/src/qml/jsruntime/qv4booleanobject_p.h
@@ -61,7 +61,7 @@ struct BooleanCtor: FunctionObject
struct BooleanPrototype: BooleanObject
{
BooleanPrototype(InternalClass *ic): BooleanObject(ic) {}
- void init(ExecutionEngine *engine, const Value &ctor);
+ void init(ExecutionEngine *engine, ObjectRef ctor);
static ReturnedValue method_toString(SimpleCallContext *ctx);
static ReturnedValue method_valueOf(SimpleCallContext *ctx);
diff --git a/src/qml/jsruntime/qv4dateobject.cpp b/src/qml/jsruntime/qv4dateobject.cpp
index cb5c37d421..ffc5fa891a 100644
--- a/src/qml/jsruntime/qv4dateobject.cpp
+++ b/src/qml/jsruntime/qv4dateobject.cpp
@@ -701,17 +701,19 @@ ReturnedValue DateCtor::call(Managed *m, CallData *)
return m->engine()->newString(ToString(t))->asReturnedValue();
}
-void DatePrototype::init(ExecutionEngine *engine, const Value &ctor)
+void DatePrototype::init(ExecutionEngine *engine, ObjectRef ctor)
{
- ctor.objectValue()->defineReadonlyProperty(engine->id_prototype, Value::fromObject(this));
- ctor.objectValue()->defineReadonlyProperty(engine->id_length, Primitive::fromInt32(7));
+ Scope scope(engine);
+ ScopedObject o(scope);
+ ctor->defineReadonlyProperty(engine->id_prototype, (o = this));
+ ctor->defineReadonlyProperty(engine->id_length, Primitive::fromInt32(7));
LocalTZA = getLocalTZA();
- ctor.objectValue()->defineDefaultProperty(QStringLiteral("parse"), method_parse, 1);
- ctor.objectValue()->defineDefaultProperty(QStringLiteral("UTC"), method_UTC, 7);
- ctor.objectValue()->defineDefaultProperty(QStringLiteral("now"), method_now, 0);
+ ctor->defineDefaultProperty(QStringLiteral("parse"), method_parse, 1);
+ ctor->defineDefaultProperty(QStringLiteral("UTC"), method_UTC, 7);
+ ctor->defineDefaultProperty(QStringLiteral("now"), method_now, 0);
- defineDefaultProperty(QStringLiteral("constructor"), ctor);
+ defineDefaultProperty(QStringLiteral("constructor"), (o = ctor));
defineDefaultProperty(engine->id_toString, method_toString, 0);
defineDefaultProperty(QStringLiteral("toDateString"), method_toDateString, 0);
defineDefaultProperty(QStringLiteral("toTimeString"), method_toTimeString, 0);
diff --git a/src/qml/jsruntime/qv4dateobject_p.h b/src/qml/jsruntime/qv4dateobject_p.h
index b560a26b7f..56588580ff 100644
--- a/src/qml/jsruntime/qv4dateobject_p.h
+++ b/src/qml/jsruntime/qv4dateobject_p.h
@@ -81,7 +81,7 @@ struct DateCtor: FunctionObject
struct DatePrototype: DateObject
{
DatePrototype(InternalClass *ic): DateObject(ic) {}
- void init(ExecutionEngine *engine, const Value &ctor);
+ void init(ExecutionEngine *engine, ObjectRef ctor);
static double getThisDate(ExecutionContext *ctx);
diff --git a/src/qml/jsruntime/qv4engine.cpp b/src/qml/jsruntime/qv4engine.cpp
index 4b02f89b88..62d8a2cf0c 100644
--- a/src/qml/jsruntime/qv4engine.cpp
+++ b/src/qml/jsruntime/qv4engine.cpp
@@ -124,6 +124,8 @@ ExecutionEngine::ExecutionEngine(QQmlJS::EvalISelFactory *factory)
jsStackBase = (SafeValue *)jsStack->base();
jsStackTop = jsStackBase;
+ Scope scope(this);
+
identifierTable = new IdentifierTable(this);
emptyClass = new (classPool.allocate(sizeof(InternalClass))) InternalClass(this);
@@ -277,15 +279,16 @@ ExecutionEngine::ExecutionEngine(QQmlJS::EvalISelFactory *factory)
globalObject->defineDefaultProperty(QStringLiteral("SyntaxError"), syntaxErrorCtor);
globalObject->defineDefaultProperty(QStringLiteral("TypeError"), typeErrorCtor);
globalObject->defineDefaultProperty(QStringLiteral("URIError"), uRIErrorCtor);
- globalObject->defineDefaultProperty(QStringLiteral("Math"), Value::fromObject(new (memoryManager) MathObject(this)));
- globalObject->defineDefaultProperty(QStringLiteral("JSON"), Value::fromObject(new (memoryManager) JsonObject(this)));
+ ScopedObject o(scope);
+ globalObject->defineDefaultProperty(QStringLiteral("Math"), (o = new (memoryManager) MathObject(this)));
+ globalObject->defineDefaultProperty(QStringLiteral("JSON"), (o = new (memoryManager) JsonObject(this)));
globalObject->defineReadonlyProperty(QStringLiteral("undefined"), Primitive::undefinedValue());
globalObject->defineReadonlyProperty(QStringLiteral("NaN"), Primitive::fromDouble(std::numeric_limits<double>::quiet_NaN()));
globalObject->defineReadonlyProperty(QStringLiteral("Infinity"), Primitive::fromDouble(Q_INFINITY));
evalFunction = new (memoryManager) EvalFunction(rootContext);
- globalObject->defineDefaultProperty(QStringLiteral("eval"), Value::fromObject(evalFunction));
+ globalObject->defineDefaultProperty(QStringLiteral("eval"), (o = evalFunction));
globalObject->defineDefaultProperty(QStringLiteral("parseInt"), GlobalFunctions::method_parseInt, 2);
globalObject->defineDefaultProperty(QStringLiteral("parseFloat"), GlobalFunctions::method_parseFloat, 1);
@@ -298,7 +301,6 @@ ExecutionEngine::ExecutionEngine(QQmlJS::EvalISelFactory *factory)
globalObject->defineDefaultProperty(QStringLiteral("escape"), GlobalFunctions::method_escape, 1);
globalObject->defineDefaultProperty(QStringLiteral("unescape"), GlobalFunctions::method_unescape, 1);
- Scope scope(this);
Scoped<String> name(scope, newString(QStringLiteral("thrower")));
thrower = newBuiltinFunction(rootContext, name, throwTypeError)->getPointer();
}
diff --git a/src/qml/jsruntime/qv4errorobject.cpp b/src/qml/jsruntime/qv4errorobject.cpp
index 88c47a0c3a..b247c1533d 100644
--- a/src/qml/jsruntime/qv4errorobject.cpp
+++ b/src/qml/jsruntime/qv4errorobject.cpp
@@ -83,7 +83,7 @@ ErrorObject::ErrorObject(InternalClass *ic)
ScopedValue protectThis(scope, this);
ScopedString s(scope, ic->engine->newString("Error"));
- defineDefaultProperty(QStringLiteral("name"), s.asValue());
+ defineDefaultProperty(QStringLiteral("name"), s);
}
ErrorObject::ErrorObject(InternalClass *ic, const ValueRef message, ErrorType t)
@@ -100,13 +100,13 @@ ErrorObject::ErrorObject(InternalClass *ic, const ValueRef message, ErrorType t)
defineAccessorProperty(QStringLiteral("stack"), ErrorObject::method_get_stack, 0);
if (!message->isUndefined())
- defineDefaultProperty(QStringLiteral("message"), *message);
+ defineDefaultProperty(QStringLiteral("message"), message);
ScopedString s(scope);
- defineDefaultProperty(QStringLiteral("name"), (s = ic->engine->newString(className())).asValue());
+ defineDefaultProperty(QStringLiteral("name"), (s = ic->engine->newString(className())));
stackTrace = ic->engine->stackTrace();
if (!stackTrace.isEmpty()) {
- defineDefaultProperty(QStringLiteral("fileName"), (s = ic->engine->newString(stackTrace.at(0).source)).asValue());
+ defineDefaultProperty(QStringLiteral("fileName"), (s = ic->engine->newString(stackTrace.at(0).source)));
defineDefaultProperty(QStringLiteral("lineNumber"), Primitive::fromInt32(stackTrace.at(0).line));
}
}
@@ -127,11 +127,11 @@ ErrorObject::ErrorObject(InternalClass *ic, const QString &message, ErrorObject:
ScopedValue v(scope, ic->engine->newString(message));
defineDefaultProperty(QStringLiteral("message"), v);
- defineDefaultProperty(QStringLiteral("name"), (s = ic->engine->newString(className())).asValue());
+ defineDefaultProperty(QStringLiteral("name"), (s = ic->engine->newString(className())));
stackTrace = ic->engine->stackTrace();
if (!stackTrace.isEmpty()) {
- defineDefaultProperty(QStringLiteral("fileName"), (s = ic->engine->newString(stackTrace.at(0).source)).asValue());
+ defineDefaultProperty(QStringLiteral("fileName"), (s = ic->engine->newString(stackTrace.at(0).source)));
defineDefaultProperty(QStringLiteral("lineNumber"), Primitive::fromInt32(stackTrace.at(0).line));
}
}
@@ -149,7 +149,7 @@ ErrorObject::ErrorObject(InternalClass *ic, const QString &message, const QStrin
ScopedString s(scope);
defineAccessorProperty(QStringLiteral("stack"), ErrorObject::method_get_stack, 0);
- defineDefaultProperty(QStringLiteral("name"), (s = ic->engine->newString(className())).asValue());
+ defineDefaultProperty(QStringLiteral("name"), (s = ic->engine->newString(className())));
stackTrace = ic->engine->stackTrace();
ExecutionEngine::StackFrame frame;
@@ -159,7 +159,7 @@ ErrorObject::ErrorObject(InternalClass *ic, const QString &message, const QStrin
stackTrace.prepend(frame);
if (!stackTrace.isEmpty()) {
- defineDefaultProperty(QStringLiteral("fileName"), (s = ic->engine->newString(stackTrace.at(0).source)).asValue());
+ defineDefaultProperty(QStringLiteral("fileName"), (s = ic->engine->newString(stackTrace.at(0).source)));
defineDefaultProperty(QStringLiteral("lineNumber"), Primitive::fromInt32(stackTrace.at(0).line));
}
@@ -283,7 +283,7 @@ ErrorCtor::ErrorCtor(ExecutionContext *scope, const QString &name)
ReturnedValue ErrorCtor::construct(Managed *m, CallData *callData)
{
Scope scope(m->engine());
- ScopedValue v(scope, callData->argc ? callData->args[0] : Primitive::undefinedValue());
+ ScopedValue v(scope, callData->argument(0));
return Encode(m->engine()->newErrorObject(v));
}
@@ -301,7 +301,7 @@ EvalErrorCtor::EvalErrorCtor(ExecutionContext *scope)
ReturnedValue EvalErrorCtor::construct(Managed *m, CallData *callData)
{
Scope scope(m->engine());
- ScopedValue v(scope, callData->argc ? callData->args[0] : Primitive::undefinedValue());
+ ScopedValue v(scope, callData->argument(0));
return (new (m->engine()->memoryManager) EvalErrorObject(m->engine(), v))->asReturnedValue();
}
@@ -314,7 +314,7 @@ RangeErrorCtor::RangeErrorCtor(ExecutionContext *scope)
ReturnedValue RangeErrorCtor::construct(Managed *m, CallData *callData)
{
Scope scope(m->engine());
- ScopedValue v(scope, callData->argc ? callData->args[0] : Primitive::undefinedValue());
+ ScopedValue v(scope, callData->argument(0));
return (new (m->engine()->memoryManager) RangeErrorObject(scope.engine, v))->asReturnedValue();
}
@@ -327,7 +327,7 @@ ReferenceErrorCtor::ReferenceErrorCtor(ExecutionContext *scope)
ReturnedValue ReferenceErrorCtor::construct(Managed *m, CallData *callData)
{
Scope scope(m->engine());
- ScopedValue v(scope, callData->argc ? callData->args[0] : Primitive::undefinedValue());
+ ScopedValue v(scope, callData->argument(0));
return (new (m->engine()->memoryManager) ReferenceErrorObject(scope.engine, v))->asReturnedValue();
}
@@ -340,7 +340,7 @@ SyntaxErrorCtor::SyntaxErrorCtor(ExecutionContext *scope)
ReturnedValue SyntaxErrorCtor::construct(Managed *m, CallData *callData)
{
Scope scope(m->engine());
- ScopedValue v(scope, callData->argc ? callData->args[0] : Primitive::undefinedValue());
+ ScopedValue v(scope, callData->argument(0));
return (new (m->engine()->memoryManager) SyntaxErrorObject(scope.engine, v))->asReturnedValue();
}
@@ -353,7 +353,7 @@ TypeErrorCtor::TypeErrorCtor(ExecutionContext *scope)
ReturnedValue TypeErrorCtor::construct(Managed *m, CallData *callData)
{
Scope scope(m->engine());
- ScopedValue v(scope, callData->argc ? callData->args[0] : Primitive::undefinedValue());
+ ScopedValue v(scope, callData->argument(0));
return (new (m->engine()->memoryManager) TypeErrorObject(scope.engine, v))->asReturnedValue();
}
@@ -366,19 +366,20 @@ URIErrorCtor::URIErrorCtor(ExecutionContext *scope)
ReturnedValue URIErrorCtor::construct(Managed *m, CallData *callData)
{
Scope scope(m->engine());
- ScopedValue v(scope, callData->argc ? callData->args[0] : Primitive::undefinedValue());
+ ScopedValue v(scope, callData->argument(0));
return (new (m->engine()->memoryManager) URIErrorObject(scope.engine, v))->asReturnedValue();
}
-void ErrorPrototype::init(ExecutionEngine *engine, const Value &ctor, Object *obj)
+void ErrorPrototype::init(ExecutionEngine *engine, ObjectRef 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);
+ ScopedObject o(scope);
+ ctor->defineReadonlyProperty(engine->id_prototype, (o = obj));
+ ctor->defineReadonlyProperty(engine->id_length, Primitive::fromInt32(1));
+ obj->defineDefaultProperty(QStringLiteral("constructor"), (o = ctor));
obj->defineDefaultProperty(engine->id_toString, method_toString, 0);
- obj->defineDefaultProperty(QStringLiteral("message"), (s = engine->newString(QString())).asValue());
+ obj->defineDefaultProperty(QStringLiteral("message"), (s = engine->newString(QString())));
}
ReturnedValue ErrorPrototype::method_toString(SimpleCallContext *ctx)
diff --git a/src/qml/jsruntime/qv4errorobject_p.h b/src/qml/jsruntime/qv4errorobject_p.h
index dbe33d0bd8..d48edfa15e 100644
--- a/src/qml/jsruntime/qv4errorobject_p.h
+++ b/src/qml/jsruntime/qv4errorobject_p.h
@@ -176,46 +176,46 @@ struct ErrorPrototype: ErrorObject
{
// ### shouldn't be undefined
ErrorPrototype(InternalClass *ic): ErrorObject(ic) {}
- void init(ExecutionEngine *engine, const Value &ctor) { init(engine, ctor, this); }
+ void init(ExecutionEngine *engine, ObjectRef ctor) { init(engine, ctor, this); }
- static void init(ExecutionEngine *engine, const Value &ctor, Object *obj);
+ static void init(ExecutionEngine *engine, ObjectRef ctor, Object *obj);
static ReturnedValue method_toString(SimpleCallContext *ctx);
};
struct EvalErrorPrototype: ErrorObject
{
EvalErrorPrototype(InternalClass *ic): ErrorObject(ic) { vtbl = &static_vtbl; }
- void init(ExecutionEngine *engine, const Value &ctor) { ErrorPrototype::init(engine, ctor, this); }
+ void init(ExecutionEngine *engine, ObjectRef ctor) { ErrorPrototype::init(engine, ctor, this); }
};
struct RangeErrorPrototype: ErrorObject
{
RangeErrorPrototype(InternalClass *ic): ErrorObject(ic) { vtbl = &static_vtbl; }
- void init(ExecutionEngine *engine, const Value &ctor) { ErrorPrototype::init(engine, ctor, this); }
+ void init(ExecutionEngine *engine, ObjectRef ctor) { ErrorPrototype::init(engine, ctor, this); }
};
struct ReferenceErrorPrototype: ErrorObject
{
ReferenceErrorPrototype(InternalClass *ic): ErrorObject(ic) { vtbl = &static_vtbl; }
- void init(ExecutionEngine *engine, const Value &ctor) { ErrorPrototype::init(engine, ctor, this); }
+ void init(ExecutionEngine *engine, ObjectRef ctor) { ErrorPrototype::init(engine, ctor, this); }
};
struct SyntaxErrorPrototype: ErrorObject
{
SyntaxErrorPrototype(InternalClass *ic): ErrorObject(ic) { vtbl = &static_vtbl; }
- void init(ExecutionEngine *engine, const Value &ctor) { ErrorPrototype::init(engine, ctor, this); }
+ void init(ExecutionEngine *engine, ObjectRef ctor) { ErrorPrototype::init(engine, ctor, this); }
};
struct TypeErrorPrototype: ErrorObject
{
TypeErrorPrototype(InternalClass *ic): ErrorObject(ic) { vtbl = &static_vtbl; }
- void init(ExecutionEngine *engine, const Value &ctor) { ErrorPrototype::init(engine, ctor, this); }
+ void init(ExecutionEngine *engine, ObjectRef ctor) { ErrorPrototype::init(engine, ctor, this); }
};
struct URIErrorPrototype: ErrorObject
{
URIErrorPrototype(InternalClass *ic): ErrorObject(ic) { vtbl = &static_vtbl; }
- void init(ExecutionEngine *engine, const Value &ctor) { ErrorPrototype::init(engine, ctor, this); }
+ void init(ExecutionEngine *engine, ObjectRef ctor) { ErrorPrototype::init(engine, ctor, this); }
};
diff --git a/src/qml/jsruntime/qv4functionobject.cpp b/src/qml/jsruntime/qv4functionobject.cpp
index 888be1733e..02ea3ff788 100644
--- a/src/qml/jsruntime/qv4functionobject.cpp
+++ b/src/qml/jsruntime/qv4functionobject.cpp
@@ -293,13 +293,16 @@ FunctionPrototype::FunctionPrototype(InternalClass *ic)
{
}
-void FunctionPrototype::init(ExecutionEngine *engine, const Value &ctor)
+void FunctionPrototype::init(ExecutionEngine *engine, ObjectRef ctor)
{
- ctor.objectValue()->defineReadonlyProperty(engine->id_length, Primitive::fromInt32(1));
- ctor.objectValue()->defineReadonlyProperty(engine->id_prototype, Value::fromObject(this));
+ Scope scope(engine);
+ ScopedObject o(scope);
+
+ ctor->defineReadonlyProperty(engine->id_length, Primitive::fromInt32(1));
+ ctor->defineReadonlyProperty(engine->id_prototype, (o = this));
defineReadonlyProperty(engine->id_length, Primitive::fromInt32(0));
- defineDefaultProperty(QStringLiteral("constructor"), ctor);
+ defineDefaultProperty(QStringLiteral("constructor"), (o = ctor));
defineDefaultProperty(engine->id_toString, method_toString, 0);
defineDefaultProperty(QStringLiteral("apply"), method_apply, 2);
defineDefaultProperty(QStringLiteral("call"), method_call, 1);
diff --git a/src/qml/jsruntime/qv4functionobject_p.h b/src/qml/jsruntime/qv4functionobject_p.h
index 1b8a6c51ed..7fece1d2f4 100644
--- a/src/qml/jsruntime/qv4functionobject_p.h
+++ b/src/qml/jsruntime/qv4functionobject_p.h
@@ -162,7 +162,7 @@ struct FunctionCtor: FunctionObject
struct FunctionPrototype: FunctionObject
{
FunctionPrototype(InternalClass *ic);
- void init(ExecutionEngine *engine, const Value &ctor);
+ void init(ExecutionEngine *engine, ObjectRef ctor);
static ReturnedValue method_toString(SimpleCallContext *ctx);
static ReturnedValue method_apply(SimpleCallContext *ctx);
diff --git a/src/qml/jsruntime/qv4numberobject.cpp b/src/qml/jsruntime/qv4numberobject.cpp
index 38cf899427..5f25406987 100644
--- a/src/qml/jsruntime/qv4numberobject.cpp
+++ b/src/qml/jsruntime/qv4numberobject.cpp
@@ -70,26 +70,28 @@ ReturnedValue NumberCtor::call(Managed *, CallData *callData)
return Primitive::fromDouble(dbl).asReturnedValue();
}
-void NumberPrototype::init(ExecutionEngine *engine, const Value &ctor)
+void NumberPrototype::init(ExecutionEngine *engine, ObjectRef ctor)
{
- ctor.objectValue()->defineReadonlyProperty(engine->id_prototype, Value::fromObject(this));
- ctor.objectValue()->defineReadonlyProperty(engine->id_length, Primitive::fromInt32(1));
+ Scope scope(engine);
+ ScopedObject o(scope);
+ ctor->defineReadonlyProperty(engine->id_prototype, (o = this));
+ ctor->defineReadonlyProperty(engine->id_length, Primitive::fromInt32(1));
- ctor.objectValue()->defineReadonlyProperty(QStringLiteral("NaN"), Primitive::fromDouble(qSNaN()));
- ctor.objectValue()->defineReadonlyProperty(QStringLiteral("NEGATIVE_INFINITY"), Primitive::fromDouble(-qInf()));
- ctor.objectValue()->defineReadonlyProperty(QStringLiteral("POSITIVE_INFINITY"), Primitive::fromDouble(qInf()));
- ctor.objectValue()->defineReadonlyProperty(QStringLiteral("MAX_VALUE"), Primitive::fromDouble(1.7976931348623158e+308));
+ ctor->defineReadonlyProperty(QStringLiteral("NaN"), Primitive::fromDouble(qSNaN()));
+ ctor->defineReadonlyProperty(QStringLiteral("NEGATIVE_INFINITY"), Primitive::fromDouble(-qInf()));
+ ctor->defineReadonlyProperty(QStringLiteral("POSITIVE_INFINITY"), Primitive::fromDouble(qInf()));
+ ctor->defineReadonlyProperty(QStringLiteral("MAX_VALUE"), Primitive::fromDouble(1.7976931348623158e+308));
#ifdef __INTEL_COMPILER
# pragma warning( push )
# pragma warning(disable: 239)
#endif
- ctor.objectValue()->defineReadonlyProperty(QStringLiteral("MIN_VALUE"), Primitive::fromDouble(5e-324));
+ ctor->defineReadonlyProperty(QStringLiteral("MIN_VALUE"), Primitive::fromDouble(5e-324));
#ifdef __INTEL_COMPILER
# pragma warning( pop )
#endif
- defineDefaultProperty(QStringLiteral("constructor"), ctor);
+ defineDefaultProperty(QStringLiteral("constructor"), (o = ctor));
defineDefaultProperty(engine->id_toString, method_toString);
defineDefaultProperty(QStringLiteral("toLocaleString"), method_toLocaleString);
defineDefaultProperty(engine->id_valueOf, method_valueOf);
diff --git a/src/qml/jsruntime/qv4numberobject_p.h b/src/qml/jsruntime/qv4numberobject_p.h
index d5a0cda287..a4d13267bd 100644
--- a/src/qml/jsruntime/qv4numberobject_p.h
+++ b/src/qml/jsruntime/qv4numberobject_p.h
@@ -61,7 +61,7 @@ struct NumberCtor: FunctionObject
struct NumberPrototype: NumberObject
{
NumberPrototype(InternalClass *ic): NumberObject(ic) {}
- void init(ExecutionEngine *engine, const Value &ctor);
+ void init(ExecutionEngine *engine, ObjectRef ctor);
static ReturnedValue method_toString(SimpleCallContext *ctx);
static ReturnedValue method_toLocaleString(SimpleCallContext *ctx);
diff --git a/src/qml/jsruntime/qv4object.cpp b/src/qml/jsruntime/qv4object.cpp
index 05dc24e5e4..3fdbf66523 100644
--- a/src/qml/jsruntime/qv4object.cpp
+++ b/src/qml/jsruntime/qv4object.cpp
@@ -215,13 +215,13 @@ void Object::inplaceBinOpValue(ExecutionContext *ctx, BinOpContext op, const Val
inplaceBinOp(ctx, op, name, rhs);
}
-void Object::defineDefaultProperty(const StringRef name, Value value)
+void Object::defineDefaultProperty(const StringRef name, ValueRef value)
{
Property *pd = insertMember(name, Attr_Data|Attr_NotEnumerable);
- pd->value = value;
+ pd->value = *value;
}
-void Object::defineDefaultProperty(const QString &name, Value value)
+void Object::defineDefaultProperty(const QString &name, ValueRef value)
{
ExecutionEngine *e = engine();
Scope scope(e);
@@ -236,7 +236,7 @@ void Object::defineDefaultProperty(const QString &name, ReturnedValue (*code)(Si
ScopedString s(scope, e->newIdentifier(name));
Scoped<FunctionObject> function(scope, e->newBuiltinFunction(e->rootContext, s, code));
function->defineReadonlyProperty(e->id_length, Primitive::fromInt32(argumentCount));
- defineDefaultProperty(s, function.asValue());
+ defineDefaultProperty(s, function);
}
void Object::defineDefaultProperty(const StringRef name, ReturnedValue (*code)(SimpleCallContext *), int argumentCount)
@@ -245,7 +245,7 @@ void Object::defineDefaultProperty(const StringRef name, ReturnedValue (*code)(S
Scope scope(e);
Scoped<FunctionObject> function(scope, e->newBuiltinFunction(e->rootContext, name, code));
function->defineReadonlyProperty(e->id_length, Primitive::fromInt32(argumentCount));
- defineDefaultProperty(name, function.asValue());
+ defineDefaultProperty(name, function);
}
void Object::defineAccessorProperty(const QString &name, ReturnedValue (*getter)(SimpleCallContext *), ReturnedValue (*setter)(SimpleCallContext *))
@@ -267,7 +267,7 @@ void Object::defineAccessorProperty(const StringRef name, ReturnedValue (*getter
p->setSetter(v4->newBuiltinFunction(v4->rootContext, name, setter)->getPointer());
}
-void Object::defineReadonlyProperty(const QString &name, Value value)
+void Object::defineReadonlyProperty(const QString &name, ValueRef value)
{
QV4::ExecutionEngine *e = engine();
Scope scope(e);
@@ -275,10 +275,10 @@ void Object::defineReadonlyProperty(const QString &name, Value value)
defineReadonlyProperty(s, value);
}
-void Object::defineReadonlyProperty(const StringRef name, Value value)
+void Object::defineReadonlyProperty(const StringRef name, ValueRef value)
{
Property *pd = insertMember(name, Attr_ReadOnly);
- pd->value = value;
+ pd->value = *value;
}
void Object::markObjects(Managed *that)
diff --git a/src/qml/jsruntime/qv4object_p.h b/src/qml/jsruntime/qv4object_p.h
index 1ec747de34..bbf0786113 100644
--- a/src/qml/jsruntime/qv4object_p.h
+++ b/src/qml/jsruntime/qv4object_p.h
@@ -162,15 +162,15 @@ struct Q_QML_EXPORT Object: Managed {
void inplaceBinOpValue(ExecutionContext *ctx, BinOpContext op, const ValueRef index, const ValueRef rhs);
/* The spec default: Writable: true, Enumerable: false, Configurable: true */
- void defineDefaultProperty(const StringRef name, Value value);
- void defineDefaultProperty(const QString &name, Value value);
+ void defineDefaultProperty(const StringRef name, ValueRef value);
+ void defineDefaultProperty(const QString &name, ValueRef value);
void defineDefaultProperty(const QString &name, ReturnedValue (*code)(SimpleCallContext *), int argumentCount = 0);
void defineDefaultProperty(const StringRef name, ReturnedValue (*code)(SimpleCallContext *), int argumentCount = 0);
void defineAccessorProperty(const QString &name, ReturnedValue (*getter)(SimpleCallContext *), ReturnedValue (*setter)(SimpleCallContext *));
void defineAccessorProperty(const StringRef name, ReturnedValue (*getter)(SimpleCallContext *), ReturnedValue (*setter)(SimpleCallContext *));
/* Fixed: Writable: false, Enumerable: false, Configurable: false */
- void defineReadonlyProperty(const QString &name, Value value);
- void defineReadonlyProperty(const StringRef name, Value value);
+ void defineReadonlyProperty(const QString &name, ValueRef value);
+ void defineReadonlyProperty(const StringRef name, ValueRef value);
Property *insertMember(const StringRef s, PropertyAttributes attributes);
diff --git a/src/qml/jsruntime/qv4objectproto.cpp b/src/qml/jsruntime/qv4objectproto.cpp
index 49bee363a3..02f8cb6e95 100644
--- a/src/qml/jsruntime/qv4objectproto.cpp
+++ b/src/qml/jsruntime/qv4objectproto.cpp
@@ -101,27 +101,28 @@ ReturnedValue ObjectCtor::call(Managed *m, CallData *callData)
return __qmljs_to_object(m->engine()->current, ValueRef(&callData->args[0]));
}
-void ObjectPrototype::init(ExecutionEngine *v4, const Value &ctor)
+void ObjectPrototype::init(ExecutionEngine *v4, ObjectRef ctor)
{
Scope scope(v4);
-
- ctor.objectValue()->defineReadonlyProperty(v4->id_prototype, Value::fromObject(this));
- ctor.objectValue()->defineReadonlyProperty(v4->id_length, Primitive::fromInt32(1));
- ctor.objectValue()->defineDefaultProperty(QStringLiteral("getPrototypeOf"), method_getPrototypeOf, 1);
- ctor.objectValue()->defineDefaultProperty(QStringLiteral("getOwnPropertyDescriptor"), method_getOwnPropertyDescriptor, 2);
- ctor.objectValue()->defineDefaultProperty(QStringLiteral("getOwnPropertyNames"), method_getOwnPropertyNames, 1);
- ctor.objectValue()->defineDefaultProperty(QStringLiteral("create"), method_create, 2);
- ctor.objectValue()->defineDefaultProperty(QStringLiteral("defineProperty"), method_defineProperty, 3);
- ctor.objectValue()->defineDefaultProperty(QStringLiteral("defineProperties"), method_defineProperties, 2);
- ctor.objectValue()->defineDefaultProperty(QStringLiteral("seal"), method_seal, 1);
- ctor.objectValue()->defineDefaultProperty(QStringLiteral("freeze"), method_freeze, 1);
- ctor.objectValue()->defineDefaultProperty(QStringLiteral("preventExtensions"), method_preventExtensions, 1);
- ctor.objectValue()->defineDefaultProperty(QStringLiteral("isSealed"), method_isSealed, 1);
- ctor.objectValue()->defineDefaultProperty(QStringLiteral("isFrozen"), method_isFrozen, 1);
- ctor.objectValue()->defineDefaultProperty(QStringLiteral("isExtensible"), method_isExtensible, 1);
- ctor.objectValue()->defineDefaultProperty(QStringLiteral("keys"), method_keys, 1);
-
- defineDefaultProperty(QStringLiteral("constructor"), ctor);
+ ScopedObject o(scope);
+
+ ctor->defineReadonlyProperty(v4->id_prototype, (o = this));
+ ctor->defineReadonlyProperty(v4->id_length, Primitive::fromInt32(1));
+ ctor->defineDefaultProperty(QStringLiteral("getPrototypeOf"), method_getPrototypeOf, 1);
+ ctor->defineDefaultProperty(QStringLiteral("getOwnPropertyDescriptor"), method_getOwnPropertyDescriptor, 2);
+ ctor->defineDefaultProperty(QStringLiteral("getOwnPropertyNames"), method_getOwnPropertyNames, 1);
+ ctor->defineDefaultProperty(QStringLiteral("create"), method_create, 2);
+ ctor->defineDefaultProperty(QStringLiteral("defineProperty"), method_defineProperty, 3);
+ ctor->defineDefaultProperty(QStringLiteral("defineProperties"), method_defineProperties, 2);
+ ctor->defineDefaultProperty(QStringLiteral("seal"), method_seal, 1);
+ ctor->defineDefaultProperty(QStringLiteral("freeze"), method_freeze, 1);
+ ctor->defineDefaultProperty(QStringLiteral("preventExtensions"), method_preventExtensions, 1);
+ ctor->defineDefaultProperty(QStringLiteral("isSealed"), method_isSealed, 1);
+ ctor->defineDefaultProperty(QStringLiteral("isFrozen"), method_isFrozen, 1);
+ ctor->defineDefaultProperty(QStringLiteral("isExtensible"), method_isExtensible, 1);
+ ctor->defineDefaultProperty(QStringLiteral("keys"), method_keys, 1);
+
+ defineDefaultProperty(QStringLiteral("constructor"), (o = ctor));
defineDefaultProperty(v4->id_toString, method_toString, 0);
defineDefaultProperty(QStringLiteral("toLocaleString"), method_toLocaleString, 0);
defineDefaultProperty(v4->id_valueOf, method_valueOf, 0);
diff --git a/src/qml/jsruntime/qv4objectproto_p.h b/src/qml/jsruntime/qv4objectproto_p.h
index 2f3041ab6a..8994ba558c 100644
--- a/src/qml/jsruntime/qv4objectproto_p.h
+++ b/src/qml/jsruntime/qv4objectproto_p.h
@@ -62,7 +62,7 @@ struct ObjectPrototype: Object
{
ObjectPrototype(InternalClass *ic) : Object(ic) {}
- void init(ExecutionEngine *engine, const Value &ctor);
+ void init(ExecutionEngine *engine, ObjectRef ctor);
static ReturnedValue method_getPrototypeOf(SimpleCallContext *ctx);
static ReturnedValue method_getOwnPropertyDescriptor(SimpleCallContext *ctx);
diff --git a/src/qml/jsruntime/qv4regexpobject.cpp b/src/qml/jsruntime/qv4regexpobject.cpp
index 126188fcb7..bab4a32073 100644
--- a/src/qml/jsruntime/qv4regexpobject.cpp
+++ b/src/qml/jsruntime/qv4regexpobject.cpp
@@ -241,8 +241,8 @@ ReturnedValue RegExpCtor::construct(Managed *m, CallData *callData)
ExecutionContext *ctx = m->engine()->current;
Scope scope(ctx);
- ScopedValue r(scope, callData->argc > 0 ? callData->args[0] : Primitive::undefinedValue());
- ScopedValue f(scope, callData->argc > 1 ? callData->args[1] : Primitive::undefinedValue());
+ ScopedValue r(scope, callData->argument(0));
+ ScopedValue f(scope, callData->argument(1));
if (RegExpObject *re = r->as<RegExpObject>()) {
if (!f->isUndefined())
ctx->throwTypeError();
@@ -290,11 +290,14 @@ ReturnedValue RegExpCtor::call(Managed *that, CallData *callData)
return construct(that, callData);
}
-void RegExpPrototype::init(ExecutionEngine *engine, const Value &ctor)
+void RegExpPrototype::init(ExecutionEngine *engine, ObjectRef ctor)
{
- ctor.objectValue()->defineReadonlyProperty(engine->id_prototype, Value::fromObject(this));
- ctor.objectValue()->defineReadonlyProperty(engine->id_length, Primitive::fromInt32(2));
- defineDefaultProperty(QStringLiteral("constructor"), ctor);
+ Scope scope(engine);
+ ScopedObject o(scope);
+
+ ctor->defineReadonlyProperty(engine->id_prototype, (o = this));
+ ctor->defineReadonlyProperty(engine->id_length, Primitive::fromInt32(2));
+ defineDefaultProperty(QStringLiteral("constructor"), (o = ctor));
defineDefaultProperty(QStringLiteral("exec"), method_exec, 1);
defineDefaultProperty(QStringLiteral("test"), method_test, 1);
defineDefaultProperty(engine->id_toString, method_toString, 0);
diff --git a/src/qml/jsruntime/qv4regexpobject_p.h b/src/qml/jsruntime/qv4regexpobject_p.h
index 299be31f52..764470e776 100644
--- a/src/qml/jsruntime/qv4regexpobject_p.h
+++ b/src/qml/jsruntime/qv4regexpobject_p.h
@@ -113,7 +113,7 @@ struct RegExpCtor: FunctionObject
struct RegExpPrototype: RegExpObject
{
RegExpPrototype(InternalClass *ic): RegExpObject(ic) {}
- void init(ExecutionEngine *engine, const Value &ctor);
+ void init(ExecutionEngine *engine, ObjectRef ctor);
static ReturnedValue method_exec(SimpleCallContext *ctx);
static ReturnedValue method_test(SimpleCallContext *ctx);
diff --git a/src/qml/jsruntime/qv4scopedvalue_p.h b/src/qml/jsruntime/qv4scopedvalue_p.h
index b629c2fa54..0f6c738411 100644
--- a/src/qml/jsruntime/qv4scopedvalue_p.h
+++ b/src/qml/jsruntime/qv4scopedvalue_p.h
@@ -353,6 +353,9 @@ struct CallData
#if Q_BYTE_ORDER == Q_LITTLE_ENDIAN
uint tag;
#endif
+ inline ReturnedValue argument(int i) {
+ return i < argc ? args[i].asReturnedValue() : Primitive::undefinedValue().asReturnedValue();
+ }
SafeValue thisObject;
SafeValue args[1];
diff --git a/src/qml/jsruntime/qv4stringobject.cpp b/src/qml/jsruntime/qv4stringobject.cpp
index adff8e3978..5c36ddd7a2 100644
--- a/src/qml/jsruntime/qv4stringobject.cpp
+++ b/src/qml/jsruntime/qv4stringobject.cpp
@@ -188,13 +188,16 @@ ReturnedValue StringCtor::call(Managed *m, CallData *callData)
return value.asReturnedValue();
}
-void StringPrototype::init(ExecutionEngine *engine, const Value &ctor)
+void StringPrototype::init(ExecutionEngine *engine, ObjectRef ctor)
{
- ctor.objectValue()->defineReadonlyProperty(engine->id_prototype, Value::fromObject(this));
- ctor.objectValue()->defineReadonlyProperty(engine->id_length, Primitive::fromInt32(1));
- ctor.objectValue()->defineDefaultProperty(QStringLiteral("fromCharCode"), method_fromCharCode, 1);
+ Scope scope(engine);
+ ScopedObject o(scope);
- defineDefaultProperty(QStringLiteral("constructor"), ctor);
+ ctor->defineReadonlyProperty(engine->id_prototype, (o = this));
+ ctor->defineReadonlyProperty(engine->id_length, Primitive::fromInt32(1));
+ ctor->defineDefaultProperty(QStringLiteral("fromCharCode"), method_fromCharCode, 1);
+
+ defineDefaultProperty(QStringLiteral("constructor"), (o = ctor));
defineDefaultProperty(engine->id_toString, method_toString);
defineDefaultProperty(engine->id_valueOf, method_toString); // valueOf and toString are identical
defineDefaultProperty(QStringLiteral("charAt"), method_charAt, 1);
@@ -334,8 +337,10 @@ ReturnedValue StringPrototype::method_lastIndexOf(SimpleCallContext *context)
ReturnedValue StringPrototype::method_localeCompare(SimpleCallContext *context)
{
+ Scope scope(context);
const QString value = getThisString(context);
- const QString that = (context->callData->argc ? context->callData->args[0] : Primitive::undefinedValue()).toQString();
+ ScopedValue v(scope, context->callData->argument(0));
+ const QString that = v->toQString();
return Encode(QString::localeAwareCompare(value, that));
}
@@ -347,7 +352,7 @@ ReturnedValue StringPrototype::method_match(SimpleCallContext *context)
Scope scope(context);
ScopedString s(scope, context->callData->thisObject.toString(context));
- ScopedValue regexp(scope, context->callData->argc ? context->callData->args[0] : Primitive::undefinedValue());
+ ScopedValue regexp(scope, context->callData->argument(0));
Scoped<RegExpObject> rx(scope, regexp);
if (!rx) {
ScopedCallData callData(scope, 1);
diff --git a/src/qml/jsruntime/qv4stringobject_p.h b/src/qml/jsruntime/qv4stringobject_p.h
index 2e1e461ecc..e02a6a759f 100644
--- a/src/qml/jsruntime/qv4stringobject_p.h
+++ b/src/qml/jsruntime/qv4stringobject_p.h
@@ -78,7 +78,7 @@ struct StringCtor: FunctionObject
struct StringPrototype: StringObject
{
StringPrototype(InternalClass *ic): StringObject(ic) {}
- void init(ExecutionEngine *engine, const Value &ctor);
+ void init(ExecutionEngine *engine, ObjectRef ctor);
static ReturnedValue method_toString(SimpleCallContext *context);
static ReturnedValue method_charAt(SimpleCallContext *context);
diff --git a/src/qml/jsruntime/qv4value_def_p.h b/src/qml/jsruntime/qv4value_def_p.h
index 3e6c19207a..4ee277ca38 100644
--- a/src/qml/jsruntime/qv4value_def_p.h
+++ b/src/qml/jsruntime/qv4value_def_p.h
@@ -359,7 +359,7 @@ struct Q_QML_EXPORT Primitive : public Value
{
static Primitive fromBoolean(bool b);
static Primitive fromInt32(int i);
- static Value undefinedValue();
+ static Primitive undefinedValue();
static Primitive nullValue();
static Primitive fromDouble(double d);
static Primitive fromUInt32(uint i);
diff --git a/src/qml/jsruntime/qv4value_p.h b/src/qml/jsruntime/qv4value_p.h
index 7ad4e94044..604062b4a2 100644
--- a/src/qml/jsruntime/qv4value_p.h
+++ b/src/qml/jsruntime/qv4value_p.h
@@ -97,7 +97,7 @@ inline void Value::mark() const {
m->mark();
}
-inline Value Primitive::undefinedValue()
+inline Primitive Primitive::undefinedValue()
{
Primitive v;
#if QT_POINTER_SIZE == 8
diff --git a/src/qml/qml/qqmlxmlhttprequest.cpp b/src/qml/qml/qqmlxmlhttprequest.cpp
index 9104c4b55e..84e99e6846 100644
--- a/src/qml/qml/qqmlxmlhttprequest.cpp
+++ b/src/qml/qml/qqmlxmlhttprequest.cpp
@@ -1632,7 +1632,7 @@ struct QQmlXMLHttpRequestCtor : public FunctionObject
if (!proto)
setupProto();
ScopedString s(scope, engine->id_prototype);
- defineDefaultProperty(s, Value::fromObject(proto));
+ defineDefaultProperty(s, ScopedObject(scope, proto));
}
~QQmlXMLHttpRequestCtor()
{}
@@ -1986,7 +1986,7 @@ void *qt_add_qmlxmlhttprequest(QV8Engine *engine)
Scoped<QQmlXMLHttpRequestCtor> ctor(scope, new (v4->memoryManager) QQmlXMLHttpRequestCtor(v4));
ScopedString s(scope, v4->newString(QStringLiteral("XMLHttpRequest")));
- v4->globalObject->defineReadonlyProperty(s, ctor.asValue());
+ v4->globalObject->defineReadonlyProperty(s, ctor);
QQmlXMLHttpRequestData *data = new QQmlXMLHttpRequestData;
return data;
diff --git a/src/qml/qml/v8/qqmlbuiltinfunctions.cpp b/src/qml/qml/v8/qqmlbuiltinfunctions.cpp
index 638ff942ab..926b5c34d8 100644
--- a/src/qml/qml/v8/qqmlbuiltinfunctions.cpp
+++ b/src/qml/qml/v8/qqmlbuiltinfunctions.cpp
@@ -1569,7 +1569,8 @@ QV4::ReturnedValue ConsoleObject::method_exception(SimpleCallContext *ctx)
void QV4::GlobalExtensions::init(QQmlEngine *qmlEngine, Object *globalObject)
{
- QV4::ExecutionEngine *v4 = globalObject->engine();
+ ExecutionEngine *v4 = globalObject->engine();
+ Scope scope(v4);
#ifndef QT_NO_TRANSLATION
globalObject->defineDefaultProperty(QStringLiteral("qsTranslate"), method_qsTranslate);
@@ -1583,15 +1584,14 @@ void QV4::GlobalExtensions::init(QQmlEngine *qmlEngine, Object *globalObject)
globalObject->defineDefaultProperty(QStringLiteral("print"), ConsoleObject::method_log);
globalObject->defineDefaultProperty(QStringLiteral("gc"), method_gc);
- Value console = QV4::Value::fromObject(new (v4->memoryManager) QV4::ConsoleObject(v4));
+ ScopedValue console(scope, new (v4->memoryManager) QV4::ConsoleObject(v4));
globalObject->defineDefaultProperty(QStringLiteral("console"), console);
- Value qt = QV4::Value::fromObject(new (v4->memoryManager) QV4::QtObject(v4, qmlEngine));
+ ScopedValue qt(scope, new (v4->memoryManager) QV4::QtObject(v4, qmlEngine));
globalObject->defineDefaultProperty(QStringLiteral("Qt"), qt);
// string prototype extension
- QV4::Object *stringProto = v4->stringClass->prototype;
- stringProto->defineDefaultProperty(QStringLiteral("arg"), method_string_arg);
+ v4->stringClass->prototype->defineDefaultProperty(QStringLiteral("arg"), method_string_arg);
}
diff --git a/src/qml/qml/v8/qv4domerrors.cpp b/src/qml/qml/v8/qv4domerrors.cpp
index 60b76d087c..03a763c553 100644
--- a/src/qml/qml/v8/qv4domerrors.cpp
+++ b/src/qml/qml/v8/qv4domerrors.cpp
@@ -67,7 +67,7 @@ void qt_add_domexceptions(ExecutionEngine *e)
domexception->defineReadonlyProperty(QStringLiteral("INVALID_ACCESS_ERR"), Primitive::fromInt32(DOMEXCEPTION_INVALID_ACCESS_ERR));
domexception->defineReadonlyProperty(QStringLiteral("VALIDATION_ERR"), Primitive::fromInt32(DOMEXCEPTION_VALIDATION_ERR));
domexception->defineReadonlyProperty(QStringLiteral("TYPE_MISMATCH_ERR"), Primitive::fromInt32(DOMEXCEPTION_TYPE_MISMATCH_ERR));
- e->globalObject->defineDefaultProperty(QStringLiteral("DOMException"), domexception.asValue());
+ e->globalObject->defineDefaultProperty(QStringLiteral("DOMException"), domexception);
}
QT_END_NAMESPACE
diff --git a/src/qml/qml/v8/qv4sqlerrors.cpp b/src/qml/qml/v8/qv4sqlerrors.cpp
index 20fec3b26d..222d676700 100644
--- a/src/qml/qml/v8/qv4sqlerrors.cpp
+++ b/src/qml/qml/v8/qv4sqlerrors.cpp
@@ -59,7 +59,7 @@ void qt_add_sqlexceptions(QV4::ExecutionEngine *engine)
sqlexception->defineReadonlyProperty(QStringLiteral("SYNTAX_ERR"), Primitive::fromInt32(SQLEXCEPTION_SYNTAX_ERR));
sqlexception->defineReadonlyProperty(QStringLiteral("CONSTRAINT_ERR"), Primitive::fromInt32(SQLEXCEPTION_CONSTRAINT_ERR));
sqlexception->defineReadonlyProperty(QStringLiteral("TIMEOUT_ERR"), Primitive::fromInt32(SQLEXCEPTION_TIMEOUT_ERR));
- engine->globalObject->defineDefaultProperty(QStringLiteral("SQLException"), sqlexception.asValue());
+ engine->globalObject->defineDefaultProperty(QStringLiteral("SQLException"), sqlexception);
}
QT_END_NAMESPACE
diff --git a/src/qml/qml/v8/qv8engine_p.h b/src/qml/qml/v8/qv8engine_p.h
index 7d3686f76d..a92d03ac50 100644
--- a/src/qml/qml/v8/qv8engine_p.h
+++ b/src/qml/qml/v8/qv8engine_p.h
@@ -126,7 +126,7 @@ class QQmlV4Function
{
public:
int length() const { return callData->argc; }
- QV4::ReturnedValue operator[](int idx) { return (idx < callData->argc ? callData->args[idx] : QV4::Primitive::undefinedValue()).asReturnedValue(); }
+ QV4::ReturnedValue operator[](int idx) { return (idx < callData->argc ? callData->args[idx].asReturnedValue() : QV4::Encode::undefined()); }
QQmlContextData *context() { return ctx; }
QV4::ReturnedValue qmlGlobal() { return callData->thisObject.asReturnedValue(); }
void setReturnValue(QV4::ReturnedValue rv) { retVal = rv; }
diff --git a/src/qml/types/qqmldelegatemodel.cpp b/src/qml/types/qqmldelegatemodel.cpp
index 708dd8dbb2..8f56ba968e 100644
--- a/src/qml/types/qqmldelegatemodel.cpp
+++ b/src/qml/types/qqmldelegatemodel.cpp
@@ -90,7 +90,7 @@ struct DelegateModelGroupFunction: QV4::FunctionObject
if (!o)
v4->current->throwTypeError(QStringLiteral("Not a valid VisualData object"));
- QV4::Value v = callData->argc ? callData->args[0] : QV4::Primitive::undefinedValue();
+ QV4::ScopedValue v(scope, callData->argument(0));
return f->code(o->item, f->flag, v);
}
};
diff --git a/src/qml/types/qquickworkerscript.cpp b/src/qml/types/qquickworkerscript.cpp
index 43732332c9..f789f999a4 100644
--- a/src/qml/types/qquickworkerscript.cpp
+++ b/src/qml/types/qquickworkerscript.cpp
@@ -288,14 +288,13 @@ QV4::ReturnedValue QQuickWorkerScriptEnginePrivate::method_sendMessage(QV4::Simp
int id = ctx->callData->argc > 1 ? ctx->callData->args[1].toInt32() : 0;
- QByteArray data = QV4::Serialize::serialize(ctx->callData->argc > 2 ? ctx->callData->args[2] : QV4::Primitive::undefinedValue(), engine);
+ QV4::Scope scope(ctx);
+ QV4::ScopedValue v(scope, ctx->callData->argument(2));
+ QByteArray data = QV4::Serialize::serialize(v, engine);
QMutexLocker locker(&engine->p->m_lock);
WorkerScript *script = engine->p->workers.value(id);
- if (!script)
- return QV4::Encode::undefined();
-
- if (script->owner)
+ if (script && script->owner)
QCoreApplication::postEvent(script->owner, new WorkerDataEvent(0, data));
return QV4::Encode::undefined();