Invalidate property cells for non-existent properties properly.
R=verwaest@chromium.org BUG=v8:3914 LOG=N Review URL: https://codereview.chromium.org/945403008 Cr-Commit-Position: refs/heads/master@{#26822}
This commit is contained in:
parent
42dcc6f4b7
commit
675f7d2d5a
@ -15334,8 +15334,15 @@ void GlobalObject::InvalidatePropertyCell(Handle<GlobalObject> global,
|
|||||||
Handle<PropertyCell> new_cell = isolate->factory()->NewPropertyCell(value);
|
Handle<PropertyCell> new_cell = isolate->factory()->NewPropertyCell(value);
|
||||||
global->property_dictionary()->ValueAtPut(entry, *new_cell);
|
global->property_dictionary()->ValueAtPut(entry, *new_cell);
|
||||||
|
|
||||||
Handle<Object> hole = global->GetIsolate()->factory()->the_hole_value();
|
Handle<Object> hole = isolate->factory()->the_hole_value();
|
||||||
PropertyCell::SetValueInferType(cell, hole);
|
if (*hole != *value) {
|
||||||
|
PropertyCell::SetValueInferType(cell, hole);
|
||||||
|
} else {
|
||||||
|
// If property value was the hole, set it to any other value,
|
||||||
|
// to ensure that LoadNonexistent ICs execute a miss.
|
||||||
|
Handle<Object> undefined = isolate->factory()->undefined_value();
|
||||||
|
PropertyCell::SetValueInferType(cell, undefined);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -98,11 +98,6 @@
|
|||||||
# TODO(jochen): Reenable after we removed the CHECK() from the marking queue.
|
# TODO(jochen): Reenable after we removed the CHECK() from the marking queue.
|
||||||
'test-mark-compact/MarkingDeque': [SKIP],
|
'test-mark-compact/MarkingDeque': [SKIP],
|
||||||
|
|
||||||
# BUG(3914).
|
|
||||||
'test-decls/CrossScriptStaticLookupUndeclared': [SKIP],
|
|
||||||
'test-decls/CrossScriptReferencesHarmony': [SKIP],
|
|
||||||
'test-decls/CrossScriptReferencesHarmonyRegress': [SKIP],
|
|
||||||
|
|
||||||
############################################################################
|
############################################################################
|
||||||
# Slow tests.
|
# Slow tests.
|
||||||
'test-api/Threading1': [PASS, ['mode == debug', SLOW]],
|
'test-api/Threading1': [PASS, ['mode == debug', SLOW]],
|
||||||
|
Loading…
Reference in New Issue
Block a user