| OLD | NEW |
| 1 // Copyright 2014 the V8 project authors. All rights reserved. | 1 // Copyright 2014 the V8 project authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "factory.h" | 5 #include "factory.h" |
| 6 | 6 |
| 7 #include "isolate-inl.h" | 7 #include "isolate-inl.h" |
| 8 | 8 |
| 9 namespace v8 { | 9 namespace v8 { |
| 10 namespace internal { | 10 namespace internal { |
| (...skipping 12 matching lines...) Expand all Loading... |
| 23 isolate()->heap()->AllocateFixedArray(size, pretenure), | 23 isolate()->heap()->AllocateFixedArray(size, pretenure), |
| 24 FixedArray); | 24 FixedArray); |
| 25 } | 25 } |
| 26 | 26 |
| 27 | 27 |
| 28 Handle<FixedArray> Factory::NewFixedArrayWithHoles(int size, | 28 Handle<FixedArray> Factory::NewFixedArrayWithHoles(int size, |
| 29 PretenureFlag pretenure) { | 29 PretenureFlag pretenure) { |
| 30 ASSERT(0 <= size); | 30 ASSERT(0 <= size); |
| 31 CALL_HEAP_FUNCTION( | 31 CALL_HEAP_FUNCTION( |
| 32 isolate(), | 32 isolate(), |
| 33 isolate()->heap()->AllocateFixedArrayWithHoles(size, pretenure), | 33 isolate()->heap()->AllocateFixedArrayWithFiller(size, |
| 34 pretenure, |
| 35 *the_hole_value()), |
| 34 FixedArray); | 36 FixedArray); |
| 35 } | 37 } |
| 36 | 38 |
| 37 | 39 |
| 38 Handle<FixedArray> Factory::NewUninitializedFixedArray(int size) { | 40 Handle<FixedArray> Factory::NewUninitializedFixedArray(int size) { |
| 39 CALL_HEAP_FUNCTION( | 41 CALL_HEAP_FUNCTION( |
| 40 isolate(), | 42 isolate(), |
| 41 isolate()->heap()->AllocateUninitializedFixedArray(size), | 43 isolate()->heap()->AllocateUninitializedFixedArray(size), |
| 42 FixedArray); | 44 FixedArray); |
| 43 } | 45 } |
| 44 | 46 |
| 45 | 47 |
| 46 Handle<FixedDoubleArray> Factory::NewFixedDoubleArray(int size, | 48 Handle<FixedDoubleArray> Factory::NewFixedDoubleArray(int size, |
| 47 PretenureFlag pretenure) { | 49 PretenureFlag pretenure) { |
| 48 ASSERT(0 <= size); | 50 ASSERT(0 <= size); |
| 49 CALL_HEAP_FUNCTION( | 51 CALL_HEAP_FUNCTION( |
| 50 isolate(), | 52 isolate(), |
| 51 isolate()->heap()->AllocateUninitializedFixedDoubleArray(size, pretenure), | 53 isolate()->heap()->AllocateUninitializedFixedDoubleArray(size, pretenure), |
| 52 FixedDoubleArray); | 54 FixedDoubleArray); |
| 53 } | 55 } |
| 54 | 56 |
| 55 | 57 |
| 58 Handle<FixedDoubleArray> Factory::NewFixedDoubleArrayWithHoles( |
| 59 int size, |
| 60 PretenureFlag pretenure) { |
| 61 ASSERT(0 <= size); |
| 62 Handle<FixedDoubleArray> array = NewFixedDoubleArray(size, pretenure); |
| 63 for (int i = 0; i < size; ++i) { |
| 64 array->set_the_hole(i); |
| 65 } |
| 66 return array; |
| 67 } |
| 68 |
| 69 |
| 56 Handle<ConstantPoolArray> Factory::NewConstantPoolArray( | 70 Handle<ConstantPoolArray> Factory::NewConstantPoolArray( |
| 57 int number_of_int64_entries, | 71 int number_of_int64_entries, |
| 58 int number_of_code_ptr_entries, | 72 int number_of_code_ptr_entries, |
| 59 int number_of_heap_ptr_entries, | 73 int number_of_heap_ptr_entries, |
| 60 int number_of_int32_entries) { | 74 int number_of_int32_entries) { |
| 61 ASSERT(number_of_int64_entries > 0 || number_of_code_ptr_entries > 0 || | 75 ASSERT(number_of_int64_entries > 0 || number_of_code_ptr_entries > 0 || |
| 62 number_of_heap_ptr_entries > 0 || number_of_int32_entries > 0); | 76 number_of_heap_ptr_entries > 0 || number_of_int32_entries > 0); |
| 63 CALL_HEAP_FUNCTION( | 77 CALL_HEAP_FUNCTION( |
| 64 isolate(), | 78 isolate(), |
| 65 isolate()->heap()->AllocateConstantPoolArray(number_of_int64_entries, | 79 isolate()->heap()->AllocateConstantPoolArray(number_of_int64_entries, |
| (...skipping 1362 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1428 isolate()->factory()->NewJSArray(elements_kind, pretenure); | 1442 isolate()->factory()->NewJSArray(elements_kind, pretenure); |
| 1429 | 1443 |
| 1430 array->set_elements(*elements); | 1444 array->set_elements(*elements); |
| 1431 array->set_length(Smi::FromInt(length)); | 1445 array->set_length(Smi::FromInt(length)); |
| 1432 JSObject::ValidateElements(array); | 1446 JSObject::ValidateElements(array); |
| 1433 return array; | 1447 return array; |
| 1434 } | 1448 } |
| 1435 | 1449 |
| 1436 | 1450 |
| 1437 void Factory::NewJSArrayStorage(Handle<JSArray> array, | 1451 void Factory::NewJSArrayStorage(Handle<JSArray> array, |
| 1438 int length, | 1452 int length, |
| 1439 int capacity, | 1453 int capacity, |
| 1440 ArrayStorageAllocationMode mode) { | 1454 ArrayStorageAllocationMode mode) { |
| 1441 CALL_HEAP_FUNCTION_VOID(isolate(), | 1455 ASSERT(capacity >= length); |
| 1442 isolate()->heap()->AllocateJSArrayStorage(*array, | 1456 |
| 1443 length, | 1457 if (capacity == 0) { |
| 1444 capacity, | 1458 array->set_length(Smi::FromInt(0)); |
| 1445 mode)); | 1459 array->set_elements(*empty_fixed_array()); |
| 1460 return; |
| 1461 } |
| 1462 |
| 1463 Handle<FixedArrayBase> elms; |
| 1464 ElementsKind elements_kind = array->GetElementsKind(); |
| 1465 if (IsFastDoubleElementsKind(elements_kind)) { |
| 1466 if (mode == DONT_INITIALIZE_ARRAY_ELEMENTS) { |
| 1467 elms = NewFixedDoubleArray(capacity); |
| 1468 } else { |
| 1469 ASSERT(mode == INITIALIZE_ARRAY_ELEMENTS_WITH_HOLE); |
| 1470 elms = NewFixedDoubleArrayWithHoles(capacity); |
| 1471 } |
| 1472 } else { |
| 1473 ASSERT(IsFastSmiOrObjectElementsKind(elements_kind)); |
| 1474 if (mode == DONT_INITIALIZE_ARRAY_ELEMENTS) { |
| 1475 elms = NewUninitializedFixedArray(capacity); |
| 1476 } else { |
| 1477 ASSERT(mode == INITIALIZE_ARRAY_ELEMENTS_WITH_HOLE); |
| 1478 elms = NewFixedArrayWithHoles(capacity); |
| 1479 } |
| 1480 } |
| 1481 |
| 1482 array->set_elements(*elms); |
| 1483 array->set_length(Smi::FromInt(length)); |
| 1446 } | 1484 } |
| 1447 | 1485 |
| 1448 | 1486 |
| 1449 Handle<JSGeneratorObject> Factory::NewJSGeneratorObject( | 1487 Handle<JSGeneratorObject> Factory::NewJSGeneratorObject( |
| 1450 Handle<JSFunction> function) { | 1488 Handle<JSFunction> function) { |
| 1451 ASSERT(function->shared()->is_generator()); | 1489 ASSERT(function->shared()->is_generator()); |
| 1452 JSFunction::EnsureHasInitialMap(function); | 1490 JSFunction::EnsureHasInitialMap(function); |
| 1453 Handle<Map> map(function->initial_map()); | 1491 Handle<Map> map(function->initial_map()); |
| 1454 ASSERT(map->instance_type() == JS_GENERATOR_OBJECT_TYPE); | 1492 ASSERT(map->instance_type() == JS_GENERATOR_OBJECT_TYPE); |
| 1455 CALL_HEAP_FUNCTION( | 1493 CALL_HEAP_FUNCTION( |
| (...skipping 512 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1968 if (String::Equals(name, infinity_string())) return infinity_value(); | 2006 if (String::Equals(name, infinity_string())) return infinity_value(); |
| 1969 return Handle<Object>::null(); | 2007 return Handle<Object>::null(); |
| 1970 } | 2008 } |
| 1971 | 2009 |
| 1972 | 2010 |
| 1973 Handle<Object> Factory::ToBoolean(bool value) { | 2011 Handle<Object> Factory::ToBoolean(bool value) { |
| 1974 return value ? true_value() : false_value(); | 2012 return value ? true_value() : false_value(); |
| 1975 } | 2013 } |
| 1976 | 2014 |
| 1977 } } // namespace v8::internal | 2015 } } // namespace v8::internal |
| OLD | NEW |