| 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 { |
| 11 | 11 |
| 12 Handle<Box> Factory::NewBox(Handle<Object> value, PretenureFlag pretenure) { | 12 Handle<Box> Factory::NewBox(Handle<Object> value) { |
| 13 CALL_HEAP_FUNCTION( | 13 Handle<Box> result = Handle<Box>::cast(NewStruct(BOX_TYPE)); |
| 14 isolate(), | 14 result->set_value(*value); |
| 15 isolate()->heap()->AllocateBox(*value, pretenure), | 15 return result; |
| 16 Box); | |
| 17 } | 16 } |
| 18 | 17 |
| 19 | 18 |
| 20 Handle<FixedArray> Factory::NewFixedArray(int size, PretenureFlag pretenure) { | 19 Handle<FixedArray> Factory::NewFixedArray(int size, PretenureFlag pretenure) { |
| 21 ASSERT(0 <= size); | 20 ASSERT(0 <= size); |
| 22 CALL_HEAP_FUNCTION( | 21 CALL_HEAP_FUNCTION( |
| 23 isolate(), | 22 isolate(), |
| 24 isolate()->heap()->AllocateFixedArray(size, pretenure), | 23 isolate()->heap()->AllocateFixedArray(size, pretenure), |
| 25 FixedArray); | 24 FixedArray); |
| 26 } | 25 } |
| (...skipping 1260 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1287 JSFunction::EnsureHasInitialMap(constructor); | 1286 JSFunction::EnsureHasInitialMap(constructor); |
| 1288 CALL_HEAP_FUNCTION( | 1287 CALL_HEAP_FUNCTION( |
| 1289 isolate(), | 1288 isolate(), |
| 1290 isolate()->heap()->AllocateJSObject(*constructor, NOT_TENURED, *site), | 1289 isolate()->heap()->AllocateJSObject(*constructor, NOT_TENURED, *site), |
| 1291 JSObject); | 1290 JSObject); |
| 1292 } | 1291 } |
| 1293 | 1292 |
| 1294 | 1293 |
| 1295 Handle<JSModule> Factory::NewJSModule(Handle<Context> context, | 1294 Handle<JSModule> Factory::NewJSModule(Handle<Context> context, |
| 1296 Handle<ScopeInfo> scope_info) { | 1295 Handle<ScopeInfo> scope_info) { |
| 1297 CALL_HEAP_FUNCTION( | 1296 // Allocate a fresh map. Modules do not have a prototype. |
| 1298 isolate(), | 1297 Handle<Map> map = NewMap(JS_MODULE_TYPE, JSModule::kSize); |
| 1299 isolate()->heap()->AllocateJSModule(*context, *scope_info), JSModule); | 1298 // Allocate the object based on the map. |
| 1299 Handle<JSModule> module = |
| 1300 Handle<JSModule>::cast(NewJSObjectFromMap(map, TENURED)); |
| 1301 module->set_context(*context); |
| 1302 module->set_scope_info(*scope_info); |
| 1303 return module; |
| 1300 } | 1304 } |
| 1301 | 1305 |
| 1302 | 1306 |
| 1303 // TODO(mstarzinger): Temporary wrapper until handlified. | 1307 // TODO(mstarzinger): Temporary wrapper until handlified. |
| 1304 static Handle<NameDictionary> NameDictionaryAdd(Handle<NameDictionary> dict, | 1308 static Handle<NameDictionary> NameDictionaryAdd(Handle<NameDictionary> dict, |
| 1305 Handle<Name> name, | 1309 Handle<Name> name, |
| 1306 Handle<Object> value, | 1310 Handle<Object> value, |
| 1307 PropertyDetails details) { | 1311 PropertyDetails details) { |
| 1308 CALL_HEAP_FUNCTION(dict->GetIsolate(), | 1312 CALL_HEAP_FUNCTION(dict->GetIsolate(), |
| 1309 dict->Add(*name, *value, details), | 1313 dict->Add(*name, *value, details), |
| (...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1385 *map, | 1389 *map, |
| 1386 pretenure, | 1390 pretenure, |
| 1387 alloc_props, | 1391 alloc_props, |
| 1388 allocation_site.is_null() ? NULL : *allocation_site), | 1392 allocation_site.is_null() ? NULL : *allocation_site), |
| 1389 JSObject); | 1393 JSObject); |
| 1390 } | 1394 } |
| 1391 | 1395 |
| 1392 | 1396 |
| 1393 Handle<JSArray> Factory::NewJSArray(ElementsKind elements_kind, | 1397 Handle<JSArray> Factory::NewJSArray(ElementsKind elements_kind, |
| 1394 PretenureFlag pretenure) { | 1398 PretenureFlag pretenure) { |
| 1395 CALL_HEAP_FUNCTION(isolate(), | 1399 Context* native_context = isolate()->context()->native_context(); |
| 1396 isolate()->heap()->AllocateJSArray(elements_kind, | 1400 JSFunction* array_function = native_context->array_function(); |
| 1397 pretenure), | 1401 Map* map = array_function->initial_map(); |
| 1398 JSArray); | 1402 Map* transition_map = isolate()->get_initial_js_array_map(elements_kind); |
| 1403 if (transition_map != NULL) map = transition_map; |
| 1404 return Handle<JSArray>::cast(NewJSObjectFromMap(handle(map), pretenure)); |
| 1399 } | 1405 } |
| 1400 | 1406 |
| 1401 | 1407 |
| 1402 Handle<JSArray> Factory::NewJSArray(ElementsKind elements_kind, | 1408 Handle<JSArray> Factory::NewJSArray(ElementsKind elements_kind, |
| 1403 int length, | 1409 int length, |
| 1404 int capacity, | 1410 int capacity, |
| 1405 ArrayStorageAllocationMode mode, | 1411 ArrayStorageAllocationMode mode, |
| 1406 PretenureFlag pretenure) { | 1412 PretenureFlag pretenure) { |
| 1407 CALL_HEAP_FUNCTION(isolate(), | 1413 Handle<JSArray> array = NewJSArray(elements_kind, pretenure); |
| 1408 isolate()->heap()->AllocateJSArrayAndStorage( | 1414 NewJSArrayStorage(array, length, capacity, mode); |
| 1409 elements_kind, | 1415 return array; |
| 1410 length, | |
| 1411 capacity, | |
| 1412 mode, | |
| 1413 pretenure), | |
| 1414 JSArray); | |
| 1415 } | 1416 } |
| 1416 | 1417 |
| 1417 | 1418 |
| 1418 Handle<JSArray> Factory::NewJSArrayWithElements(Handle<FixedArrayBase> elements, | 1419 Handle<JSArray> Factory::NewJSArrayWithElements(Handle<FixedArrayBase> elements, |
| 1419 ElementsKind elements_kind, | 1420 ElementsKind elements_kind, |
| 1420 int length, | 1421 int length, |
| 1421 PretenureFlag pretenure) { | 1422 PretenureFlag pretenure) { |
| 1422 ASSERT(length <= elements->length()); | 1423 ASSERT(length <= elements->length()); |
| 1423 Handle<JSArray> array = | 1424 Handle<JSArray> array = |
| 1424 isolate()->factory()->NewJSArray(elements_kind, pretenure); | 1425 isolate()->factory()->NewJSArray(elements_kind, pretenure); |
| (...skipping 553 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1978 if (name->Equals(h->infinity_string())) return infinity_value(); | 1979 if (name->Equals(h->infinity_string())) return infinity_value(); |
| 1979 return Handle<Object>::null(); | 1980 return Handle<Object>::null(); |
| 1980 } | 1981 } |
| 1981 | 1982 |
| 1982 | 1983 |
| 1983 Handle<Object> Factory::ToBoolean(bool value) { | 1984 Handle<Object> Factory::ToBoolean(bool value) { |
| 1984 return value ? true_value() : false_value(); | 1985 return value ? true_value() : false_value(); |
| 1985 } | 1986 } |
| 1986 | 1987 |
| 1987 } } // namespace v8::internal | 1988 } } // namespace v8::internal |
| OLD | NEW |