Index: src/hydrogen.cc |
diff --git a/src/hydrogen.cc b/src/hydrogen.cc |
index c3dfd5ff261db65fa7ad2c1d148253ed4baa9967..d599bd6f8b2c3cf16490a38ce2137bb39d066c8f 100644 |
--- a/src/hydrogen.cc |
+++ b/src/hydrogen.cc |
@@ -4653,12 +4653,18 @@ void HGraphBuilder::VisitUnaryOperation(UnaryOperation* expr) { |
// The subexpression does not have side effects. |
ast_context()->ReturnValue(graph()->GetConstantFalse()); |
} else if (prop != NULL) { |
- VISIT_FOR_VALUE(prop->obj()); |
- VISIT_FOR_VALUE(prop->key()); |
- HValue* key = Pop(); |
- HValue* obj = Pop(); |
- ast_context()->ReturnInstruction(new HDeleteProperty(obj, key), |
- expr->id()); |
+ if (prop->is_synthetic()) { |
+ // Result of deleting parameters is false, even when they rewrite |
+ // to accesses on the arguments object. |
+ ast_context()->ReturnValue(graph()->GetConstantFalse()); |
+ } else { |
+ VISIT_FOR_VALUE(prop->obj()); |
+ VISIT_FOR_VALUE(prop->key()); |
+ HValue* key = Pop(); |
+ HValue* obj = Pop(); |
+ HDeleteProperty* instr = new HDeleteProperty(obj, key); |
+ ast_context()->ReturnInstruction(instr, expr->id()); |
+ } |
} else if (var->is_global()) { |
BAILOUT("delete with global variable"); |
} else { |