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