}
-void Lookup::getterGeneric(QV4::Lookup *l, ExecutionContext *ctx, QV4::Value *result, const QV4::Value &object)
+void Lookup::getterGeneric(QV4::Lookup *l, QV4::Value *result, const QV4::Value &object)
{
if (Object *o = object.asObject()) {
o->getLookup(l, result);
Value res;
if (Managed *m = object.asManaged()) {
- res = m->get(ctx, l->name);
+ res = m->get(m->engine()->current, l->name);
} else {
+ ExecutionContext *ctx = l->name->engine()->current;
Object *o = __qmljs_convert_to_object(ctx, object);
res = o->get(ctx, l->name);
}
*result = res;
}
-void Lookup::getter0(Lookup *l, ExecutionContext *ctx, Value *result, const Value &object)
+void Lookup::getter0(Lookup *l, Value *result, const Value &object)
{
if (Object *o = object.asObject()) {
if (l->classList[0] == o->internalClass) {
}
}
l->getter = getterGeneric;
- getterGeneric(l, ctx, result, object);
+ getterGeneric(l, result, object);
}
-void Lookup::getter1(Lookup *l, ExecutionContext *ctx, Value *result, const Value &object)
+void Lookup::getter1(Lookup *l, Value *result, const Value &object)
{
if (Object *o = object.asObject()) {
if (l->classList[0] == o->internalClass &&
}
}
l->getter = getterGeneric;
- getterGeneric(l, ctx, result, object);
+ getterGeneric(l, result, object);
}
-void Lookup::getter2(Lookup *l, ExecutionContext *ctx, Value *result, const Value &object)
+void Lookup::getter2(Lookup *l, Value *result, const Value &object)
{
if (Object *o = object.asObject()) {
if (l->classList[0] == o->internalClass) {
}
}
l->getter = getterGeneric;
- getterGeneric(l, ctx, result, object);
+ getterGeneric(l, result, object);
}
-void Lookup::getterAccessor0(Lookup *l, ExecutionContext *ctx, Value *result, const Value &object)
+void Lookup::getterAccessor0(Lookup *l, Value *result, const Value &object)
{
if (Object *o = object.asObject()) {
if (l->classList[0] == o->internalClass) {
if (!getter)
res = Value::undefinedValue();
else
- res = getter->call(ctx, object, 0, 0);
+ res = getter->call(getter->engine()->current, object, 0, 0);
if (result)
*result = res;
return;
}
}
l->getter = getterGeneric;
- getterGeneric(l, ctx, result, object);
+ getterGeneric(l, result, object);
}
-void Lookup::getterAccessor1(Lookup *l, ExecutionContext *ctx, Value *result, const Value &object)
+void Lookup::getterAccessor1(Lookup *l, Value *result, const Value &object)
{
if (Object *o = object.asObject()) {
if (l->classList[0] == o->internalClass &&
if (!getter)
res = Value::undefinedValue();
else
- res = getter->call(ctx, object, 0, 0);
+ res = getter->call(getter->engine()->current, object, 0, 0);
if (result)
*result = res;
return;
}
}
l->getter = getterGeneric;
- getterGeneric(l, ctx, result, object);
+ getterGeneric(l, result, object);
}
-void Lookup::getterAccessor2(Lookup *l, ExecutionContext *ctx, Value *result, const Value &object)
+void Lookup::getterAccessor2(Lookup *l, Value *result, const Value &object)
{
if (Object *o = object.asObject()) {
if (l->classList[0] == o->internalClass) {
if (!getter)
res = Value::undefinedValue();
else
- res = getter->call(ctx, object, 0, 0);
+ res = getter->call(getter->engine()->current, object, 0, 0);
if (result)
*result = res;
return;
}
}
l->getter = getterGeneric;
- getterGeneric(l, ctx, result, object);
+ getterGeneric(l, result, object);
}
globalGetterGeneric(l, ctx, result);
}
-void Lookup::setterGeneric(Lookup *l, ExecutionContext *ctx, const Value &object, const Value &value)
+void Lookup::setterGeneric(Lookup *l, const Value &object, const Value &value)
{
- Object *o = object.toObject(ctx);
+ Object *o = object.asObject();
+ if (!o) {
+ o = __qmljs_convert_to_object(l->name->engine()->current, object);
+ o->put(l->name, value);
+ return;
+ }
o->setLookup(l, value);
- return;
}
-void Lookup::setter0(Lookup *l, ExecutionContext *ctx, const Value &object, const Value &value)
+void Lookup::setter0(Lookup *l, const Value &object, const Value &value)
{
- Object *o = object.toObject(ctx);
-
- if (o->internalClass == l->classList[0]) {
+ Object *o = object.asObject();
+ if (o && o->internalClass == l->classList[0]) {
o->memberData[l->index].value = value;
return;
}
l->setter = setterGeneric;
- setterGeneric(l, ctx, object, value);
+ setterGeneric(l, object, value);
}
QT_END_NAMESPACE
struct Lookup {
enum { Size = 3 };
union {
- void (*getter)(Lookup *l, ExecutionContext *ctx, Value *result, const Value &object);
+ void (*getter)(Lookup *l, Value *result, const Value &object);
void (*globalGetter)(Lookup *l, ExecutionContext *ctx, Value *result);
- void (*setter)(Lookup *l, ExecutionContext *ctx, const Value &object, const Value &v);
+ void (*setter)(Lookup *l, const Value &object, const Value &v);
};
InternalClass *classList[Size];
int level;
uint index;
String *name;
- static void getterGeneric(Lookup *l, ExecutionContext *ctx, Value *result, const Value &object);
- static void getter0(Lookup *l, ExecutionContext *ctx, Value *result, const Value &object);
- static void getter1(Lookup *l, ExecutionContext *ctx, Value *result, const Value &object);
- static void getter2(Lookup *l, ExecutionContext *ctx, Value *result, const Value &object);
- static void getterAccessor0(Lookup *l, ExecutionContext *ctx, Value *result, const Value &object);
- static void getterAccessor1(Lookup *l, ExecutionContext *ctx, Value *result, const Value &object);
- static void getterAccessor2(Lookup *l, ExecutionContext *ctx, Value *result, const Value &object);
+ static void getterGeneric(Lookup *l, Value *result, const Value &object);
+ static void getter0(Lookup *l, Value *result, const Value &object);
+ static void getter1(Lookup *l, Value *result, const Value &object);
+ static void getter2(Lookup *l, Value *result, const Value &object);
+ static void getterAccessor0(Lookup *l, Value *result, const Value &object);
+ static void getterAccessor1(Lookup *l, Value *result, const Value &object);
+ static void getterAccessor2(Lookup *l, Value *result, const Value &object);
static void globalGetterGeneric(Lookup *l, ExecutionContext *ctx, Value *result);
static void globalGetter0(Lookup *l, ExecutionContext *ctx, Value *result);
static void globalGetterAccessor1(Lookup *l, ExecutionContext *ctx, Value *result);
static void globalGetterAccessor2(Lookup *l, ExecutionContext *ctx, Value *result);
- static void setterGeneric(Lookup *l, ExecutionContext *ctx, const Value &object, const Value &value);
- static void setter0(Lookup *l, ExecutionContext *ctx, const Value &object, const Value &value);
+ static void setterGeneric(Lookup *l, const Value &object, const Value &value);
+ static void setter0(Lookup *l, const Value &object, const Value &value);
Property *lookup(Object *obj, PropertyAttributes *attrs);