Index: src/hydrogen.cc |
diff --git a/src/hydrogen.cc b/src/hydrogen.cc |
index e2fbfb59c4b6fbf3462ba1343b7e8fcb1354997e..e1070f07c1e9d67444ae9bf8d4107c050663b9ae 100644 |
--- a/src/hydrogen.cc |
+++ b/src/hydrogen.cc |
@@ -4491,8 +4491,7 @@ void HGraphBuilder::VisitObjectLiteral(ObjectLiteral* expr) { |
property->RecordTypeFeedback(oracle()); |
CHECK_ALIVE(VisitForValue(value)); |
HValue* value = Pop(); |
- HInstruction* store; |
- CHECK_ALIVE(store = BuildStoreNamed(literal, value, property)); |
+ HInstruction* store = BuildStoreNamed(literal, value, property); |
AddInstruction(store); |
if (store->HasObservableSideEffects()) AddSimulate(key->id()); |
} else { |
@@ -4659,39 +4658,11 @@ HInstruction* HGraphBuilder::BuildStoreNamedField(HValue* object, |
Handle<Map> type, |
LookupResult* lookup, |
bool smi_and_map_check) { |
- ASSERT(lookup->IsFound()); |
if (smi_and_map_check) { |
AddInstruction(new(zone()) HCheckNonSmi(object)); |
AddInstruction(HCheckMaps::NewWithTransitions(object, type)); |
} |
- // If the property does not exist yet, we have to check that it wasn't made |
- // readonly or turned into a setter by some meanwhile modifications on the |
- // prototype chain. |
- if (!lookup->IsProperty()) { |
- Object* proto = type->prototype(); |
- // First check that the prototype chain isn't affected already. |
- LookupResult proto_result(isolate()); |
- proto->Lookup(*name, &proto_result); |
- if (proto_result.IsProperty()) { |
- // If the inherited property could induce readonly-ness, bail out. |
- if (proto_result.IsReadOnly() || !proto_result.IsCacheable()) { |
- Bailout("improper object on prototype chain for store"); |
- return NULL; |
- } |
- // We only need to check up to the preexisting property. |
- proto = proto_result.holder(); |
- } else { |
- // Otherwise, find the top prototype. |
- while (proto->GetPrototype()->IsJSObject()) proto = proto->GetPrototype(); |
- ASSERT(proto->GetPrototype()->IsNull()); |
- } |
- ASSERT(proto->IsJSObject()); |
- AddInstruction(new(zone()) HCheckPrototypeMaps( |
- Handle<JSObject>(JSObject::cast(type->prototype())), |
- Handle<JSObject>(JSObject::cast(proto)))); |
- } |
- |
int index = ComputeLoadStoreFieldIndex(type, name, lookup); |
bool is_in_object = index < 0; |
int offset = index * kPointerSize; |
@@ -4848,9 +4819,8 @@ void HGraphBuilder::HandlePolymorphicStoreNamedField(Assignment* expr, |
current_block()->Finish(compare); |
set_current_block(if_true); |
- HInstruction* instr; |
- CHECK_ALIVE(instr = |
- BuildStoreNamedField(object, name, value, map, &lookup, false)); |
+ HInstruction* instr = |
+ BuildStoreNamedField(object, name, value, map, &lookup, false); |
instr->set_position(expr->position()); |
// Goto will add the HSimulate for the store. |
AddInstruction(instr); |
@@ -4918,8 +4888,10 @@ void HGraphBuilder::HandlePropertyAssignment(Assignment* expr) { |
ASSERT(!name.is_null()); |
SmallMapList* types = expr->GetReceiverTypes(); |
+ LookupResult lookup(isolate()); |
+ |
if (expr->IsMonomorphic()) { |
- CHECK_ALIVE(instr = BuildStoreNamed(object, value, expr)); |
+ instr = BuildStoreNamed(object, value, expr); |
} else if (types != NULL && types->length() > 1) { |
HandlePolymorphicStoreNamedField(expr, object, value, types, name); |
@@ -5098,8 +5070,7 @@ void HGraphBuilder::HandleCompoundAssignment(Assignment* expr) { |
PushAndAdd(instr); |
if (instr->HasObservableSideEffects()) AddSimulate(operation->id()); |
- HInstruction* store; |
- CHECK_ALIVE(store = BuildStoreNamed(obj, instr, prop)); |
+ HInstruction* store = BuildStoreNamed(obj, instr, prop); |
AddInstruction(store); |
// Drop the simulated receiver and value. Return the value. |
Drop(2); |
@@ -7374,8 +7345,7 @@ void HGraphBuilder::VisitCountOperation(CountOperation* expr) { |
after = BuildIncrement(returns_original_input, expr); |
input = Pop(); |
- HInstruction* store; |
- CHECK_ALIVE(store = BuildStoreNamed(obj, after, prop)); |
+ HInstruction* store = BuildStoreNamed(obj, after, prop); |
AddInstruction(store); |
// Overwrite the receiver in the bailout environment with the result |