Index: src/objects.cc |
diff --git a/src/objects.cc b/src/objects.cc |
index d4116b34c8547173c19ff95f990e655652f0619d..736854b7086146214ce2adaaf5ac2bbb48aac0a6 100644 |
--- a/src/objects.cc |
+++ b/src/objects.cc |
@@ -210,9 +210,9 @@ static inline To* CheckedCast(void *from) { |
} |
-static Handle<Object> PerformCompare(const BitmaskCompareDescriptor& descriptor, |
- char* ptr, |
- Isolate* isolate) { |
+static MaybeObject* PerformCompare(const BitmaskCompareDescriptor& descriptor, |
+ char* ptr, |
+ Heap* heap) { |
uint32_t bitmask = descriptor.bitmask; |
uint32_t compare_value = descriptor.compare_value; |
uint32_t value; |
@@ -232,27 +232,26 @@ static Handle<Object> PerformCompare(const BitmaskCompareDescriptor& descriptor, |
break; |
default: |
UNREACHABLE(); |
- return isolate->factory()->undefined_value(); |
+ return NULL; |
} |
- return isolate->factory()->ToBoolean( |
- (bitmask & value) == (bitmask & compare_value)); |
+ return heap->ToBoolean((bitmask & value) == (bitmask & compare_value)); |
} |
-static Handle<Object> PerformCompare(const PointerCompareDescriptor& descriptor, |
- char* ptr, |
- Isolate* isolate) { |
+static MaybeObject* PerformCompare(const PointerCompareDescriptor& descriptor, |
+ char* ptr, |
+ Heap* heap) { |
uintptr_t compare_value = |
reinterpret_cast<uintptr_t>(descriptor.compare_value); |
uintptr_t value = *CheckedCast<uintptr_t>(ptr); |
- return isolate->factory()->ToBoolean(compare_value == value); |
+ return heap->ToBoolean(compare_value == value); |
} |
-static Handle<Object> GetPrimitiveValue( |
+static MaybeObject* GetPrimitiveValue( |
const PrimitiveValueDescriptor& descriptor, |
char* ptr, |
- Isolate* isolate) { |
+ Heap* heap) { |
int32_t int32_value = 0; |
switch (descriptor.data_type) { |
case kDescriptorInt8Type: |
@@ -272,36 +271,29 @@ static Handle<Object> GetPrimitiveValue( |
break; |
case kDescriptorUint32Type: { |
uint32_t value = *CheckedCast<uint32_t>(ptr); |
- AllowHeapAllocation allow_gc; |
- return isolate->factory()->NewNumberFromUint(value); |
+ return heap->NumberFromUint32(value); |
} |
case kDescriptorBoolType: { |
uint8_t byte = *CheckedCast<uint8_t>(ptr); |
- return isolate->factory()->ToBoolean( |
- byte & (0x1 << descriptor.bool_offset)); |
+ return heap->ToBoolean(byte & (0x1 << descriptor.bool_offset)); |
} |
case kDescriptorFloatType: { |
float value = *CheckedCast<float>(ptr); |
- AllowHeapAllocation allow_gc; |
- return isolate->factory()->NewNumber(value); |
+ return heap->NumberFromDouble(value); |
} |
case kDescriptorDoubleType: { |
double value = *CheckedCast<double>(ptr); |
- AllowHeapAllocation allow_gc; |
- return isolate->factory()->NewNumber(value); |
+ return heap->NumberFromDouble(value); |
} |
} |
- AllowHeapAllocation allow_gc; |
- return isolate->factory()->NewNumberFromInt(int32_value); |
+ return heap->NumberFromInt32(int32_value); |
} |
-static Handle<Object> GetDeclaredAccessorProperty( |
- Handle<Object> receiver, |
- Handle<DeclaredAccessorInfo> info, |
- Isolate* isolate) { |
- DisallowHeapAllocation no_gc; |
- char* current = reinterpret_cast<char*>(*receiver); |
+static MaybeObject* GetDeclaredAccessorProperty(Object* receiver, |
+ DeclaredAccessorInfo* info, |
+ Isolate* isolate) { |
+ char* current = reinterpret_cast<char*>(receiver); |
DeclaredAccessorDescriptorIterator iterator(info->descriptor()); |
while (true) { |
const DeclaredAccessorDescriptorData* data = iterator.Next(); |
@@ -309,7 +301,7 @@ static Handle<Object> GetDeclaredAccessorProperty( |
case kDescriptorReturnObject: { |
ASSERT(iterator.Complete()); |
current = *CheckedCast<char*>(current); |
- return handle(*CheckedCast<Object*>(current), isolate); |
+ return *CheckedCast<Object*>(current); |
} |
case kDescriptorPointerDereference: |
ASSERT(!iterator.Complete()); |
@@ -332,21 +324,31 @@ static Handle<Object> GetDeclaredAccessorProperty( |
ASSERT(iterator.Complete()); |
return PerformCompare(data->bitmask_compare_descriptor, |
current, |
- isolate); |
+ isolate->heap()); |
case kDescriptorPointerCompare: |
ASSERT(iterator.Complete()); |
return PerformCompare(data->pointer_compare_descriptor, |
current, |
- isolate); |
+ isolate->heap()); |
case kDescriptorPrimitiveValue: |
ASSERT(iterator.Complete()); |
return GetPrimitiveValue(data->primitive_value_descriptor, |
current, |
- isolate); |
+ isolate->heap()); |
} |
} |
UNREACHABLE(); |
- return isolate->factory()->undefined_value(); |
+ return NULL; |
+} |
+ |
+ |
+static Handle<Object> GetDeclaredAccessorProperty( |
+ Handle<Object> receiver, |
+ Handle<DeclaredAccessorInfo> info, |
+ Isolate* isolate) { |
+ CALL_HEAP_FUNCTION(isolate, |
+ GetDeclaredAccessorProperty(*receiver, *info, isolate), |
+ Object); |
} |
@@ -390,10 +392,12 @@ MaybeHandle<Object> JSObject::GetPropertyWithCallback(Handle<JSObject> object, |
// so we do not support it for now. |
if (name->IsSymbol()) return isolate->factory()->undefined_value(); |
if (structure->IsDeclaredAccessorInfo()) { |
- return GetDeclaredAccessorProperty( |
- receiver, |
- Handle<DeclaredAccessorInfo>::cast(structure), |
- isolate); |
+ CALL_HEAP_FUNCTION( |
+ isolate, |
+ GetDeclaredAccessorProperty(*receiver, |
+ DeclaredAccessorInfo::cast(*structure), |
+ isolate), |
+ Object); |
} |
Handle<ExecutableAccessorInfo> data = |