Revision: 17489
Author: [email protected]
Date: Tue Nov 5 13:47:51 2013 UTC
Log: Remove calls to SetLocalPropertyIgnoreAttributesTrampoline from
accessors.cc
BUG=v8:2877
[email protected]
Review URL: https://codereview.chromium.org/59773002
http://code.google.com/p/v8/source/detail?r=17489
Modified:
/branches/bleeding_edge/src/accessors.cc
/branches/bleeding_edge/src/accessors.h
=======================================
--- /branches/bleeding_edge/src/accessors.cc Wed Sep 25 08:19:35 2013 UTC
+++ /branches/bleeding_edge/src/accessors.cc Tue Nov 5 13:47:51 2013 UTC
@@ -148,45 +148,49 @@
// The helper function will 'flatten' Number objects.
-Object* Accessors::FlattenNumber(Isolate* isolate, Object* value) {
+Handle<Object> Accessors::FlattenNumber(Isolate* isolate,
+ Handle<Object> value) {
if (value->IsNumber() || !value->IsJSValue()) return value;
- JSValue* wrapper = JSValue::cast(value);
+ Handle<JSValue> wrapper = Handle<JSValue>::cast(value);
ASSERT(wrapper->GetIsolate()->context()->native_context()->number_function()->
has_initial_map());
- Map* number_map = isolate->context()->native_context()->
- number_function()->initial_map();
- if (wrapper->map() == number_map) return wrapper->value();
+ if (wrapper->map() ==
+
isolate->context()->native_context()->number_function()->initial_map()) {
+ return handle(wrapper->value(), isolate);
+ }
+
return value;
}
MaybeObject* Accessors::ArraySetLength(Isolate* isolate,
- JSObject* object,
- Object* value,
+ JSObject* object_raw,
+ Object* value_raw,
void*) {
+ HandleScope scope(isolate);
+ Handle<JSObject> object(object_raw, isolate);
+ Handle<Object> value(value_raw, isolate);
+
// This means one of the object's prototypes is a JSArray and the
// object does not have a 'length' property. Calling SetProperty
// causes an infinite loop.
if (!object->IsJSArray()) {
- return object->SetLocalPropertyIgnoreAttributesTrampoline(
- isolate->heap()->length_string(), value, NONE);
+ Handle<Object> result =
JSObject::SetLocalPropertyIgnoreAttributes(object,
+ isolate->factory()->length_string(), value, NONE);
+ RETURN_IF_EMPTY_HANDLE(isolate, result);
+ return *result;
}
value = FlattenNumber(isolate, value);
- // Need to call methods that may trigger GC.
- HandleScope scope(isolate);
-
- // Protect raw pointers.
- Handle<JSArray> array_handle(JSArray::cast(object), isolate);
- Handle<Object> value_handle(value, isolate);
+ Handle<JSArray> array_handle = Handle<JSArray>::cast(object);
bool has_exception;
Handle<Object> uint32_v =
- Execution::ToUint32(isolate, value_handle, &has_exception);
+ Execution::ToUint32(isolate, value, &has_exception);
if (has_exception) return Failure::Exception();
Handle<Object> number_v =
- Execution::ToNumber(isolate, value_handle, &has_exception);
+ Execution::ToNumber(isolate, value, &has_exception);
if (has_exception) return Failure::Exception();
if (uint32_v->Number() == number_v->Number()) {
@@ -578,26 +582,28 @@
MaybeObject* Accessors::FunctionSetPrototype(Isolate* isolate,
- JSObject* object,
+ JSObject* object_raw,
Object* value_raw,
void*) {
- Heap* heap = isolate->heap();
- JSFunction* function_raw = FindInstanceOf<JSFunction>(isolate, object);
- if (function_raw == NULL) return heap->undefined_value();
- if (!function_raw->should_have_prototype()) {
- // Since we hit this accessor, object will have no prototype property.
- return object->SetLocalPropertyIgnoreAttributesTrampoline(
- heap->prototype_string(), value_raw, NONE);
- }
+ JSFunction* function_raw = FindInstanceOf<JSFunction>(isolate,
object_raw);
+ if (function_raw == NULL) return isolate->heap()->undefined_value();
HandleScope scope(isolate);
Handle<JSFunction> function(function_raw, isolate);
+ Handle<JSObject> object(object_raw, isolate);
Handle<Object> value(value_raw, isolate);
+ if (!function->should_have_prototype()) {
+ // Since we hit this accessor, object will have no prototype property.
+ Handle<Object> result =
JSObject::SetLocalPropertyIgnoreAttributes(object,
+ isolate->factory()->prototype_string(), value, NONE);
+ RETURN_IF_EMPTY_HANDLE(isolate, result);
+ return *result;
+ }
Handle<Object> old_value;
bool is_observed =
FLAG_harmony_observation &&
- *function == object &&
+ *function == *object &&
function->map()->is_observed();
if (is_observed) {
if (function->has_prototype())
=======================================
--- /branches/bleeding_edge/src/accessors.h Wed Sep 25 08:19:35 2013 UTC
+++ /branches/bleeding_edge/src/accessors.h Tue Nov 5 13:47:51 2013 UTC
@@ -149,7 +149,7 @@
void*);
// Helper functions.
- static Object* FlattenNumber(Isolate* isolate, Object* value);
+ static Handle<Object> FlattenNumber(Isolate* isolate, Handle<Object>
value);
static MaybeObject* IllegalSetter(Isolate* isolate,
JSObject*,
Object*,
--
--
v8-dev mailing list
[email protected]
http://groups.google.com/group/v8-dev
---
You received this message because you are subscribed to the Google Groups "v8-dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
For more options, visit https://groups.google.com/groups/opt_out.