VisitForStackValue(key);
VisitForStackValue(value);
if (property->emit_store()) {
- __ mov(r0, Operand(Smi::FromInt(NONE))); // PropertyAttributes
+ __ mov(r0, Operand(Smi::FromInt(SLOPPY))); // PropertyAttributes
__ push(r0);
- __ CallRuntime(Runtime::kAddProperty, 4);
+ __ CallRuntime(Runtime::kSetProperty, 4);
} else {
__ Drop(3);
}
__ Push(x0);
VisitForStackValue(key);
VisitForStackValue(value);
- __ Mov(x0, Smi::FromInt(NONE)); // PropertyAttributes
+ __ Mov(x0, Smi::FromInt(SLOPPY)); // Strict mode
__ Push(x0);
- __ CallRuntime(Runtime::kAddProperty, 4);
+ __ CallRuntime(Runtime::kSetProperty, 4);
} else {
VisitForEffect(key);
VisitForEffect(value);
VisitForStackValue(key);
VisitForStackValue(value);
if (property->emit_store()) {
- __ push(Immediate(Smi::FromInt(NONE))); // PropertyAttributes
- __ CallRuntime(Runtime::kAddProperty, 4);
+ __ push(Immediate(Smi::FromInt(SLOPPY))); // Strict mode
+ __ CallRuntime(Runtime::kSetProperty, 4);
} else {
__ Drop(3);
}
if (key->IsInternalizedString()) {
if (Handle<String>::cast(key)->AsArrayIndex(&element_index)) {
// Array index as string (uint32).
- if (value->IsUninitialized()) {
- maybe_result = value;
- } else {
- maybe_result = JSObject::SetOwnElement(
- boilerplate, element_index, value, SLOPPY);
- }
+ if (value->IsUninitialized()) value = handle(Smi::FromInt(0), isolate);
+ maybe_result =
+ JSObject::SetOwnElement(boilerplate, element_index, value, SLOPPY);
} else {
Handle<String> name(String::cast(*key));
ASSERT(!name->AsArrayIndex(&element_index));
}
} else if (key->ToArrayIndex(&element_index)) {
// Array index (uint32).
- if (value->IsUninitialized()) {
- maybe_result = value;
- } else {
- maybe_result = JSObject::SetOwnElement(
- boilerplate, element_index, value, SLOPPY);
- }
+ if (value->IsUninitialized()) value = handle(Smi::FromInt(0), isolate);
+ maybe_result =
+ JSObject::SetOwnElement(boilerplate, element_index, value, SLOPPY);
} else {
// Non-uint32 number.
ASSERT(key->IsNumber());
#ifdef DEBUG
bool duplicate;
- if (key->IsName()) {
+ uint32_t index = 0;
+ if (key->IsName() || !key->ToArrayIndex(&index)) {
+ if (key->IsNumber()) {
+ ASSIGN_RETURN_FAILURE_ON_EXCEPTION(isolate, key,
+ Execution::ToString(isolate, key));
+ }
LookupIterator it(object, Handle<Name>::cast(key),
LookupIterator::CHECK_OWN_REAL);
JSReceiver::GetPropertyAttributes(&it);
duplicate = it.IsFound();
} else {
- uint32_t index = 0;
- RUNTIME_ASSERT(key->ToArrayIndex(&index));
duplicate = JSReceiver::HasOwnElement(object, index);
}
RUNTIME_ASSERT(!duplicate);
VisitForStackValue(key);
VisitForStackValue(value);
if (property->emit_store()) {
- __ Push(Smi::FromInt(NONE)); // PropertyAttributes
- __ CallRuntime(Runtime::kAddProperty, 4);
+ __ Push(Smi::FromInt(SLOPPY)); // Strict mode
+ __ CallRuntime(Runtime::kSetProperty, 4);
} else {
__ Drop(3);
}