Index: src/factory.cc |
diff --git a/src/factory.cc b/src/factory.cc |
index 9104d60a099574cf768ac86fe7ad2b35e21aa0f5..84cc00d2800468e3c6e125c36b586285514eaecc 100644 |
--- a/src/factory.cc |
+++ b/src/factory.cc |
@@ -1626,15 +1626,15 @@ Handle<JSGeneratorObject> Factory::NewJSGeneratorObject( |
} |
-Handle<JSArrayBuffer> Factory::NewJSArrayBuffer(SharedFlag shared) { |
+Handle<JSArrayBuffer> Factory::NewJSArrayBuffer(SharedFlag shared, |
+ PretenureFlag pretenure) { |
Handle<JSFunction> array_buffer_fun( |
shared == SharedFlag::kShared |
? isolate()->native_context()->shared_array_buffer_fun() |
: isolate()->native_context()->array_buffer_fun()); |
- CALL_HEAP_FUNCTION( |
- isolate(), |
- isolate()->heap()->AllocateJSObject(*array_buffer_fun), |
- JSArrayBuffer); |
+ CALL_HEAP_FUNCTION(isolate(), isolate()->heap()->AllocateJSObject( |
+ *array_buffer_fun, pretenure), |
+ JSArrayBuffer); |
} |
@@ -1784,18 +1784,19 @@ JSFunction* GetTypedArrayFun(ElementsKind elements_kind, Isolate* isolate) { |
void SetupArrayBufferView(i::Isolate* isolate, |
i::Handle<i::JSArrayBufferView> obj, |
i::Handle<i::JSArrayBuffer> buffer, |
- size_t byte_offset, size_t byte_length) { |
+ size_t byte_offset, size_t byte_length, |
+ PretenureFlag pretenure = NOT_TENURED) { |
DCHECK(byte_offset + byte_length <= |
static_cast<size_t>(buffer->byte_length()->Number())); |
obj->set_buffer(*buffer); |
i::Handle<i::Object> byte_offset_object = |
- isolate->factory()->NewNumberFromSize(byte_offset); |
+ isolate->factory()->NewNumberFromSize(byte_offset, pretenure); |
obj->set_byte_offset(*byte_offset_object); |
i::Handle<i::Object> byte_length_object = |
- isolate->factory()->NewNumberFromSize(byte_length); |
+ isolate->factory()->NewNumberFromSize(byte_length, pretenure); |
obj->set_byte_length(*byte_length_object); |
} |
@@ -1803,31 +1804,32 @@ void SetupArrayBufferView(i::Isolate* isolate, |
} // namespace |
-Handle<JSTypedArray> Factory::NewJSTypedArray(ExternalArrayType type) { |
+Handle<JSTypedArray> Factory::NewJSTypedArray(ExternalArrayType type, |
+ PretenureFlag pretenure) { |
Handle<JSFunction> typed_array_fun_handle(GetTypedArrayFun(type, isolate())); |
- CALL_HEAP_FUNCTION( |
- isolate(), |
- isolate()->heap()->AllocateJSObject(*typed_array_fun_handle), |
- JSTypedArray); |
+ CALL_HEAP_FUNCTION(isolate(), isolate()->heap()->AllocateJSObject( |
+ *typed_array_fun_handle, pretenure), |
+ JSTypedArray); |
} |
-Handle<JSTypedArray> Factory::NewJSTypedArray(ElementsKind elements_kind) { |
+Handle<JSTypedArray> Factory::NewJSTypedArray(ElementsKind elements_kind, |
+ PretenureFlag pretenure) { |
Handle<JSFunction> typed_array_fun_handle( |
GetTypedArrayFun(elements_kind, isolate())); |
- CALL_HEAP_FUNCTION( |
- isolate(), isolate()->heap()->AllocateJSObject(*typed_array_fun_handle), |
- JSTypedArray); |
+ CALL_HEAP_FUNCTION(isolate(), isolate()->heap()->AllocateJSObject( |
+ *typed_array_fun_handle, pretenure), |
+ JSTypedArray); |
} |
Handle<JSTypedArray> Factory::NewJSTypedArray(ExternalArrayType type, |
Handle<JSArrayBuffer> buffer, |
- size_t byte_offset, |
- size_t length) { |
- Handle<JSTypedArray> obj = NewJSTypedArray(type); |
+ size_t byte_offset, size_t length, |
+ PretenureFlag pretenure) { |
+ Handle<JSTypedArray> obj = NewJSTypedArray(type, pretenure); |
size_t element_size = GetExternalArrayElementSize(type); |
ElementsKind elements_kind = GetExternalArrayElementsKind(type); |
@@ -1837,14 +1839,15 @@ Handle<JSTypedArray> Factory::NewJSTypedArray(ExternalArrayType type, |
CHECK(length <= (std::numeric_limits<size_t>::max() / element_size)); |
CHECK(length <= static_cast<size_t>(Smi::kMaxValue)); |
size_t byte_length = length * element_size; |
- SetupArrayBufferView(isolate(), obj, buffer, byte_offset, byte_length); |
+ SetupArrayBufferView(isolate(), obj, buffer, byte_offset, byte_length, |
+ pretenure); |
- Handle<Object> length_object = NewNumberFromSize(length); |
+ Handle<Object> length_object = NewNumberFromSize(length, pretenure); |
obj->set_length(*length_object); |
Handle<FixedTypedArrayBase> elements = NewFixedTypedArrayWithExternalPointer( |
static_cast<int>(length), type, |
- static_cast<uint8_t*>(buffer->backing_store()) + byte_offset); |
+ static_cast<uint8_t*>(buffer->backing_store()) + byte_offset, pretenure); |
Handle<Map> map = JSObject::GetElementsTransitionMap(obj, elements_kind); |
JSObject::SetMapAndElements(obj, map, elements); |
return obj; |
@@ -1852,8 +1855,9 @@ Handle<JSTypedArray> Factory::NewJSTypedArray(ExternalArrayType type, |
Handle<JSTypedArray> Factory::NewJSTypedArray(ElementsKind elements_kind, |
- size_t number_of_elements) { |
- Handle<JSTypedArray> obj = NewJSTypedArray(elements_kind); |
+ size_t number_of_elements, |
+ PretenureFlag pretenure) { |
+ Handle<JSTypedArray> obj = NewJSTypedArray(elements_kind, pretenure); |
size_t element_size = GetFixedTypedArraysElementSize(elements_kind); |
ExternalArrayType array_type = GetArrayTypeFromElementsKind(elements_kind); |
@@ -1865,18 +1869,19 @@ Handle<JSTypedArray> Factory::NewJSTypedArray(ElementsKind elements_kind, |
obj->set_byte_offset(Smi::FromInt(0)); |
i::Handle<i::Object> byte_length_object = |
- isolate()->factory()->NewNumberFromSize(byte_length); |
+ NewNumberFromSize(byte_length, pretenure); |
obj->set_byte_length(*byte_length_object); |
- Handle<Object> length_object = NewNumberFromSize(number_of_elements); |
+ Handle<Object> length_object = |
+ NewNumberFromSize(number_of_elements, pretenure); |
obj->set_length(*length_object); |
- Handle<JSArrayBuffer> buffer = isolate()->factory()->NewJSArrayBuffer(); |
+ Handle<JSArrayBuffer> buffer = |
+ NewJSArrayBuffer(SharedFlag::kNotShared, pretenure); |
JSArrayBuffer::Setup(buffer, isolate(), true, NULL, byte_length, |
SharedFlag::kNotShared); |
obj->set_buffer(*buffer); |
- Handle<FixedTypedArrayBase> elements = |
- isolate()->factory()->NewFixedTypedArray( |
- static_cast<int>(number_of_elements), array_type, true); |
+ Handle<FixedTypedArrayBase> elements = NewFixedTypedArray( |
+ static_cast<int>(number_of_elements), array_type, true, pretenure); |
obj->set_elements(*elements); |
return obj; |
} |