Index: src/runtime.cc |
diff --git a/src/runtime.cc b/src/runtime.cc |
index 78f379513242f5787112356c04b86205424ec4eb..2493d7e381f8b9687331b789f9f4800f590edfd0 100644 |
--- a/src/runtime.cc |
+++ b/src/runtime.cc |
@@ -2048,37 +2048,39 @@ RUNTIME_FUNCTION(MaybeObject*, Runtime_GetTemplateField) { |
RUNTIME_FUNCTION(MaybeObject*, Runtime_DisableAccessChecks) { |
- SealHandleScope shs(isolate); |
+ HandleScope scope(isolate); |
ASSERT(args.length() == 1); |
- CONVERT_ARG_CHECKED(HeapObject, object, 0); |
- Map* old_map = object->map(); |
+ CONVERT_ARG_HANDLE_CHECKED(HeapObject, object, 0); |
+ Handle<Map> old_map(object->map()); |
bool needs_access_checks = old_map->is_access_check_needed(); |
if (needs_access_checks) { |
// Copy map so it won't interfere constructor's initial map. |
- Map* new_map; |
- MaybeObject* maybe_new_map = old_map->Copy(); |
- if (!maybe_new_map->To(&new_map)) return maybe_new_map; |
- |
+ Handle<Map> new_map = Map::Copy(old_map); |
new_map->set_is_access_check_needed(false); |
- object->set_map(new_map); |
+ if (object->IsJSObject()) { |
+ JSObject::MigrateToMap(Handle<JSObject>::cast(object), new_map); |
+ } else { |
+ object->set_map(*new_map); |
+ } |
} |
return isolate->heap()->ToBoolean(needs_access_checks); |
} |
RUNTIME_FUNCTION(MaybeObject*, Runtime_EnableAccessChecks) { |
- SealHandleScope shs(isolate); |
+ HandleScope scope(isolate); |
ASSERT(args.length() == 1); |
- CONVERT_ARG_CHECKED(HeapObject, object, 0); |
- Map* old_map = object->map(); |
+ CONVERT_ARG_HANDLE_CHECKED(HeapObject, object, 0); |
+ Handle<Map> old_map(object->map()); |
if (!old_map->is_access_check_needed()) { |
// Copy map so it won't interfere constructor's initial map. |
- Map* new_map; |
- MaybeObject* maybe_new_map = old_map->Copy(); |
- if (!maybe_new_map->To(&new_map)) return maybe_new_map; |
- |
+ Handle<Map> new_map = Map::Copy(old_map); |
new_map->set_is_access_check_needed(true); |
- object->set_map(new_map); |
+ if (object->IsJSObject()) { |
+ JSObject::MigrateToMap(Handle<JSObject>::cast(object), new_map); |
+ } else { |
+ object->set_map(*new_map); |
+ } |
} |
return isolate->heap()->undefined_value(); |
} |
@@ -2945,9 +2947,9 @@ RUNTIME_FUNCTION(MaybeObject*, Runtime_FunctionSetPrototype) { |
RUNTIME_FUNCTION(MaybeObject*, Runtime_FunctionSetReadOnlyPrototype) { |
- SealHandleScope shs(isolate); |
+ HandleScope shs(isolate); |
RUNTIME_ASSERT(args.length() == 1); |
- CONVERT_ARG_CHECKED(JSFunction, function, 0); |
+ CONVERT_ARG_HANDLE_CHECKED(JSFunction, function, 0); |
String* name = isolate->heap()->prototype_string(); |
@@ -2970,9 +2972,10 @@ RUNTIME_FUNCTION(MaybeObject*, Runtime_FunctionSetReadOnlyPrototype) { |
instance_desc, &new_desc, index, OMIT_TRANSITION); |
if (!maybe_map->To(&new_map)) return maybe_map; |
- function->set_map(new_map); |
+ JSObject::MigrateToMap(function, handle(new_map)); |
} else { // Dictionary properties. |
// Directly manipulate the property details. |
+ DisallowHeapAllocation no_gc; |
int entry = function->property_dictionary()->FindEntry(name); |
ASSERT(entry != NameDictionary::kNotFound); |
PropertyDetails details = function->property_dictionary()->DetailsAt(entry); |
@@ -2982,7 +2985,7 @@ RUNTIME_FUNCTION(MaybeObject*, Runtime_FunctionSetReadOnlyPrototype) { |
details.dictionary_index()); |
function->property_dictionary()->DetailsAtPut(entry, new_details); |
} |
- return function; |
+ return *function; |
} |