Chromium Code Reviews| Index: src/runtime.cc |
| diff --git a/src/runtime.cc b/src/runtime.cc |
| index 2c0cab0ce9f9a4aa5ed4be8cd60544d210d012ac..8c825ad7e2b2eea86624030cf8bda6a54768cbc6 100644 |
| --- a/src/runtime.cc |
| +++ b/src/runtime.cc |
| @@ -2276,9 +2276,13 @@ RUNTIME_FUNCTION(MaybeObject*, Runtime_InitializeConstGlobal) { |
| LookupResult lookup(isolate); |
| global->LocalLookup(*name, &lookup); |
| if (!lookup.IsFound()) { |
| - return global->SetLocalPropertyIgnoreAttributes(*name, |
| - *value, |
| - attributes); |
| + HandleScope handle_scope(isolate); |
| + Handle<GlobalObject> global(isolate->context()->global_object()); |
| + RETURN_IF_EMPTY_HANDLE( |
| + isolate, |
| + JSObject::SetLocalPropertyIgnoreAttributes(global, name, value, |
|
Toon Verwaest
2013/09/11 09:50:25
Can you make the unhandlified, non-trampoline vers
Michael Starzinger
2013/09/11 10:32:49
Done.
|
| + attributes)); |
| + return *value; |
| } |
| if (!lookup.IsReadOnly()) { |
| @@ -2495,41 +2499,41 @@ RUNTIME_FUNCTION(MaybeObject*, Runtime_RegExpConstructResult) { |
| RUNTIME_FUNCTION(MaybeObject*, Runtime_RegExpInitializeObject) { |
| - SealHandleScope shs(isolate); |
| + HandleScope scope(isolate); |
| DisallowHeapAllocation no_allocation; |
| ASSERT(args.length() == 5); |
| - CONVERT_ARG_CHECKED(JSRegExp, regexp, 0); |
| - CONVERT_ARG_CHECKED(String, source, 1); |
| + CONVERT_ARG_HANDLE_CHECKED(JSRegExp, regexp, 0); |
| + CONVERT_ARG_HANDLE_CHECKED(String, source, 1); |
| // If source is the empty string we set it to "(?:)" instead as |
| // suggested by ECMA-262, 5th, section 15.10.4.1. |
| - if (source->length() == 0) source = isolate->heap()->query_colon_string(); |
| + if (source->length() == 0) source = isolate->factory()->query_colon_string(); |
| - Object* global = args[2]; |
| - if (!global->IsTrue()) global = isolate->heap()->false_value(); |
| + CONVERT_ARG_HANDLE_CHECKED(Object, global, 2); |
| + if (!global->IsTrue()) global = isolate->factory()->false_value(); |
| - Object* ignoreCase = args[3]; |
| - if (!ignoreCase->IsTrue()) ignoreCase = isolate->heap()->false_value(); |
| + CONVERT_ARG_HANDLE_CHECKED(Object, ignoreCase, 3); |
| + if (!ignoreCase->IsTrue()) ignoreCase = isolate->factory()->false_value(); |
| - Object* multiline = args[4]; |
| - if (!multiline->IsTrue()) multiline = isolate->heap()->false_value(); |
| + CONVERT_ARG_HANDLE_CHECKED(Object, multiline, 4); |
| + if (!multiline->IsTrue()) multiline = isolate->factory()->false_value(); |
| Map* map = regexp->map(); |
| Object* constructor = map->constructor(); |
| if (constructor->IsJSFunction() && |
| JSFunction::cast(constructor)->initial_map() == map) { |
| // If we still have the original map, set in-object properties directly. |
| - regexp->InObjectPropertyAtPut(JSRegExp::kSourceFieldIndex, source); |
| + regexp->InObjectPropertyAtPut(JSRegExp::kSourceFieldIndex, *source); |
| // Both true and false are immovable immortal objects so no need for write |
| // barrier. |
| regexp->InObjectPropertyAtPut( |
| - JSRegExp::kGlobalFieldIndex, global, SKIP_WRITE_BARRIER); |
| + JSRegExp::kGlobalFieldIndex, *global, SKIP_WRITE_BARRIER); |
| regexp->InObjectPropertyAtPut( |
| - JSRegExp::kIgnoreCaseFieldIndex, ignoreCase, SKIP_WRITE_BARRIER); |
| + JSRegExp::kIgnoreCaseFieldIndex, *ignoreCase, SKIP_WRITE_BARRIER); |
| regexp->InObjectPropertyAtPut( |
| - JSRegExp::kMultilineFieldIndex, multiline, SKIP_WRITE_BARRIER); |
| + JSRegExp::kMultilineFieldIndex, *multiline, SKIP_WRITE_BARRIER); |
| regexp->InObjectPropertyAtPut( |
| JSRegExp::kLastIndexFieldIndex, Smi::FromInt(0), SKIP_WRITE_BARRIER); |
| - return regexp; |
| + return *regexp; |
| } |
| // Map has changed, so use generic, but slower, method. |
| @@ -2537,34 +2541,19 @@ RUNTIME_FUNCTION(MaybeObject*, Runtime_RegExpInitializeObject) { |
| static_cast<PropertyAttributes>(READ_ONLY | DONT_ENUM | DONT_DELETE); |
| PropertyAttributes writable = |
| static_cast<PropertyAttributes>(DONT_ENUM | DONT_DELETE); |
| - Heap* heap = isolate->heap(); |
| - MaybeObject* result; |
| - result = regexp->SetLocalPropertyIgnoreAttributes(heap->source_string(), |
| - source, |
| - final); |
| - // TODO(jkummerow): Turn these back into ASSERTs when we can be certain |
| - // that it never fires in Release mode in the wild. |
| - CHECK(!result->IsFailure()); |
| - result = regexp->SetLocalPropertyIgnoreAttributes(heap->global_string(), |
| - global, |
| - final); |
| - CHECK(!result->IsFailure()); |
| - result = |
| - regexp->SetLocalPropertyIgnoreAttributes(heap->ignore_case_string(), |
| - ignoreCase, |
| - final); |
| - CHECK(!result->IsFailure()); |
| - result = regexp->SetLocalPropertyIgnoreAttributes(heap->multiline_string(), |
| - multiline, |
| - final); |
| - CHECK(!result->IsFailure()); |
| - result = |
| - regexp->SetLocalPropertyIgnoreAttributes(heap->last_index_string(), |
| - Smi::FromInt(0), |
| - writable); |
| - CHECK(!result->IsFailure()); |
| - USE(result); |
| - return regexp; |
| + Handle<Object> zero(Smi::FromInt(0), isolate); |
| + Factory* factory = isolate->factory(); |
| + CHECK_NOT_EMPTY_HANDLE(isolate, JSObject::SetLocalPropertyIgnoreAttributes( |
| + regexp, factory->source_string(), source, final)); |
| + CHECK_NOT_EMPTY_HANDLE(isolate, JSObject::SetLocalPropertyIgnoreAttributes( |
| + regexp, factory->global_string(), global, final)); |
| + CHECK_NOT_EMPTY_HANDLE(isolate, JSObject::SetLocalPropertyIgnoreAttributes( |
| + regexp, factory->ignore_case_string(), ignoreCase, final)); |
| + CHECK_NOT_EMPTY_HANDLE(isolate, JSObject::SetLocalPropertyIgnoreAttributes( |
| + regexp, factory->multiline_string(), multiline, final)); |
| + CHECK_NOT_EMPTY_HANDLE(isolate, JSObject::SetLocalPropertyIgnoreAttributes( |
| + regexp, factory->last_index_string(), zero, writable)); |
| + return *regexp; |
| } |
| @@ -5064,9 +5053,10 @@ RUNTIME_FUNCTION(MaybeObject*, Runtime_DefineOrRedefineDataProperty) { |
| JSObject::NormalizeProperties(js_object, CLEAR_INOBJECT_PROPERTIES, 0); |
| // Use IgnoreAttributes version since a readonly property may be |
| // overridden and SetProperty does not allow this. |
| - return js_object->SetLocalPropertyIgnoreAttributes(*name, |
| - *obj_value, |
| - attr); |
| + Handle<Object> result = JSObject::SetLocalPropertyIgnoreAttributes( |
| + js_object, name, obj_value, attr); |
| + RETURN_IF_EMPTY_HANDLE(isolate, result); |
| + return *result; |
| } |
| return Runtime::ForceSetObjectProperty(isolate, |
| @@ -5252,7 +5242,10 @@ MaybeObject* Runtime::ForceSetObjectProperty(Isolate* isolate, |
| index, *value, attr, kNonStrictMode, false, DEFINE_PROPERTY); |
| } else { |
| if (name->IsString()) Handle<String>::cast(name)->TryFlatten(); |
| - return js_object->SetLocalPropertyIgnoreAttributes(*name, *value, attr); |
| + Handle<Object> result = JSObject::SetLocalPropertyIgnoreAttributes( |
| + js_object, name, value, attr); |
| + RETURN_IF_EMPTY_HANDLE(isolate, result); |
| + return *result; |
| } |
| } |
| @@ -5267,7 +5260,10 @@ MaybeObject* Runtime::ForceSetObjectProperty(Isolate* isolate, |
| return js_object->SetElement( |
| index, *value, attr, kNonStrictMode, false, DEFINE_PROPERTY); |
| } else { |
| - return js_object->SetLocalPropertyIgnoreAttributes(*name, *value, attr); |
| + Handle<Object> result = JSObject::SetLocalPropertyIgnoreAttributes( |
| + js_object, name, value, attr); |
| + RETURN_IF_EMPTY_HANDLE(isolate, result); |
| + return *result; |
| } |
| } |
| @@ -5470,10 +5466,11 @@ RUNTIME_FUNCTION(MaybeObject*, Runtime_DebugPrepareStepInIfStepping) { |
| // Set a local property, even if it is READ_ONLY. If the property does not |
| // exist, it will be added with attributes NONE. |
| RUNTIME_FUNCTION(MaybeObject*, Runtime_IgnoreAttributesAndSetProperty) { |
| - SealHandleScope shs(isolate); |
| + HandleScope scope(isolate); |
| RUNTIME_ASSERT(args.length() == 3 || args.length() == 4); |
| - CONVERT_ARG_CHECKED(JSObject, object, 0); |
| - CONVERT_ARG_CHECKED(Name, name, 1); |
| + CONVERT_ARG_HANDLE_CHECKED(JSObject, object, 0); |
| + CONVERT_ARG_HANDLE_CHECKED(Name, name, 1); |
| + CONVERT_ARG_HANDLE_CHECKED(Object, value, 2); |
| // Compute attributes. |
| PropertyAttributes attributes = NONE; |
| if (args.length() == 4) { |
| @@ -5483,9 +5480,10 @@ RUNTIME_FUNCTION(MaybeObject*, Runtime_IgnoreAttributesAndSetProperty) { |
| (unchecked_value & ~(READ_ONLY | DONT_ENUM | DONT_DELETE)) == 0); |
| attributes = static_cast<PropertyAttributes>(unchecked_value); |
| } |
| - |
| - return object-> |
| - SetLocalPropertyIgnoreAttributes(name, args[2], attributes); |
| + Handle<Object> result = JSObject::SetLocalPropertyIgnoreAttributes( |
| + object, name, value, attributes); |
| + RETURN_IF_EMPTY_HANDLE(isolate, result); |
| + return *result; |
| } |