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 138 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
149 DescriptorArray::Allocate( | 149 DescriptorArray::Allocate( |
150 isolate(), number_of_descriptors, slack), | 150 isolate(), number_of_descriptors, slack), |
151 DescriptorArray); | 151 DescriptorArray); |
152 } | 152 } |
153 | 153 |
154 | 154 |
155 Handle<DeoptimizationInputData> Factory::NewDeoptimizationInputData( | 155 Handle<DeoptimizationInputData> Factory::NewDeoptimizationInputData( |
156 int deopt_entry_count, | 156 int deopt_entry_count, |
157 PretenureFlag pretenure) { | 157 PretenureFlag pretenure) { |
158 ASSERT(deopt_entry_count > 0); | 158 ASSERT(deopt_entry_count > 0); |
159 int len = DeoptimizationInputData::LengthFor(deopt_entry_count); | 159 CALL_HEAP_FUNCTION(isolate(), |
160 return Handle<DeoptimizationInputData>::cast(NewFixedArray(len, pretenure)); | 160 DeoptimizationInputData::Allocate(isolate(), |
| 161 deopt_entry_count, |
| 162 pretenure), |
| 163 DeoptimizationInputData); |
161 } | 164 } |
162 | 165 |
163 | 166 |
164 Handle<DeoptimizationOutputData> Factory::NewDeoptimizationOutputData( | 167 Handle<DeoptimizationOutputData> Factory::NewDeoptimizationOutputData( |
165 int deopt_entry_count, | 168 int deopt_entry_count, |
166 PretenureFlag pretenure) { | 169 PretenureFlag pretenure) { |
167 ASSERT(deopt_entry_count > 0); | 170 ASSERT(deopt_entry_count > 0); |
168 int len = DeoptimizationOutputData::LengthOfFixedArray(deopt_entry_count); | 171 CALL_HEAP_FUNCTION(isolate(), |
169 return Handle<DeoptimizationOutputData>::cast(NewFixedArray(len, pretenure)); | 172 DeoptimizationOutputData::Allocate(isolate(), |
| 173 deopt_entry_count, |
| 174 pretenure), |
| 175 DeoptimizationOutputData); |
170 } | 176 } |
171 | 177 |
172 | 178 |
173 Handle<AccessorPair> Factory::NewAccessorPair() { | 179 Handle<AccessorPair> Factory::NewAccessorPair() { |
174 Handle<AccessorPair> accessors = | 180 Handle<AccessorPair> accessors = |
175 Handle<AccessorPair>::cast(NewStruct(ACCESSOR_PAIR_TYPE)); | 181 Handle<AccessorPair>::cast(NewStruct(ACCESSOR_PAIR_TYPE)); |
176 accessors->set_getter(*the_hole_value(), SKIP_WRITE_BARRIER); | 182 accessors->set_getter(*the_hole_value(), SKIP_WRITE_BARRIER); |
177 accessors->set_setter(*the_hole_value(), SKIP_WRITE_BARRIER); | 183 accessors->set_setter(*the_hole_value(), SKIP_WRITE_BARRIER); |
178 accessors->set_access_flags(Smi::FromInt(0), SKIP_WRITE_BARRIER); | 184 accessors->set_access_flags(Smi::FromInt(0), SKIP_WRITE_BARRIER); |
179 return accessors; | 185 return accessors; |
(...skipping 789 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
969 | 975 |
970 Handle<HeapNumber> Factory::NewHeapNumber(double value, | 976 Handle<HeapNumber> Factory::NewHeapNumber(double value, |
971 PretenureFlag pretenure) { | 977 PretenureFlag pretenure) { |
972 CALL_HEAP_FUNCTION( | 978 CALL_HEAP_FUNCTION( |
973 isolate(), | 979 isolate(), |
974 isolate()->heap()->AllocateHeapNumber(value, pretenure), HeapNumber); | 980 isolate()->heap()->AllocateHeapNumber(value, pretenure), HeapNumber); |
975 } | 981 } |
976 | 982 |
977 | 983 |
978 Handle<JSObject> Factory::NewNeanderObject() { | 984 Handle<JSObject> Factory::NewNeanderObject() { |
979 return NewJSObjectFromMap(neander_map()); | 985 CALL_HEAP_FUNCTION( |
| 986 isolate(), |
| 987 isolate()->heap()->AllocateJSObjectFromMap( |
| 988 isolate()->heap()->neander_map()), |
| 989 JSObject); |
980 } | 990 } |
981 | 991 |
982 | 992 |
983 Handle<Object> Factory::NewTypeError(const char* message, | 993 Handle<Object> Factory::NewTypeError(const char* message, |
984 Vector< Handle<Object> > args) { | 994 Vector< Handle<Object> > args) { |
985 return NewError("MakeTypeError", message, args); | 995 return NewError("MakeTypeError", message, args); |
986 } | 996 } |
987 | 997 |
988 | 998 |
989 Handle<Object> Factory::NewTypeError(Handle<String> message) { | 999 Handle<Object> Factory::NewTypeError(Handle<String> message) { |
(...skipping 442 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1432 mode)); | 1442 mode)); |
1433 } | 1443 } |
1434 | 1444 |
1435 | 1445 |
1436 Handle<JSGeneratorObject> Factory::NewJSGeneratorObject( | 1446 Handle<JSGeneratorObject> Factory::NewJSGeneratorObject( |
1437 Handle<JSFunction> function) { | 1447 Handle<JSFunction> function) { |
1438 ASSERT(function->shared()->is_generator()); | 1448 ASSERT(function->shared()->is_generator()); |
1439 JSFunction::EnsureHasInitialMap(function); | 1449 JSFunction::EnsureHasInitialMap(function); |
1440 Handle<Map> map(function->initial_map()); | 1450 Handle<Map> map(function->initial_map()); |
1441 ASSERT(map->instance_type() == JS_GENERATOR_OBJECT_TYPE); | 1451 ASSERT(map->instance_type() == JS_GENERATOR_OBJECT_TYPE); |
1442 return Handle<JSGeneratorObject>::cast(NewJSObjectFromMap(map)); | 1452 CALL_HEAP_FUNCTION( |
| 1453 isolate(), |
| 1454 isolate()->heap()->AllocateJSObjectFromMap(*map), |
| 1455 JSGeneratorObject); |
1443 } | 1456 } |
1444 | 1457 |
1445 | 1458 |
1446 Handle<JSArrayBuffer> Factory::NewJSArrayBuffer() { | 1459 Handle<JSArrayBuffer> Factory::NewJSArrayBuffer() { |
1447 Handle<JSFunction> array_buffer_fun( | 1460 Handle<JSFunction> array_buffer_fun( |
1448 isolate()->context()->native_context()->array_buffer_fun()); | 1461 isolate()->context()->native_context()->array_buffer_fun()); |
1449 return Handle<JSArrayBuffer>::cast(NewJSObject(array_buffer_fun)); | 1462 CALL_HEAP_FUNCTION( |
| 1463 isolate(), |
| 1464 isolate()->heap()->AllocateJSObject(*array_buffer_fun), |
| 1465 JSArrayBuffer); |
1450 } | 1466 } |
1451 | 1467 |
1452 | 1468 |
1453 Handle<JSDataView> Factory::NewJSDataView() { | 1469 Handle<JSDataView> Factory::NewJSDataView() { |
1454 Handle<JSFunction> data_view_fun( | 1470 Handle<JSFunction> data_view_fun( |
1455 isolate()->context()->native_context()->data_view_fun()); | 1471 isolate()->context()->native_context()->data_view_fun()); |
1456 return Handle<JSDataView>::cast(NewJSObject(data_view_fun)); | 1472 CALL_HEAP_FUNCTION( |
| 1473 isolate(), |
| 1474 isolate()->heap()->AllocateJSObject(*data_view_fun), |
| 1475 JSDataView); |
1457 } | 1476 } |
1458 | 1477 |
1459 | 1478 |
1460 static JSFunction* GetTypedArrayFun(ExternalArrayType type, | 1479 static JSFunction* GetTypedArrayFun(ExternalArrayType type, |
1461 Isolate* isolate) { | 1480 Isolate* isolate) { |
1462 Context* native_context = isolate->context()->native_context(); | 1481 Context* native_context = isolate->context()->native_context(); |
1463 switch (type) { | 1482 switch (type) { |
1464 #define TYPED_ARRAY_FUN(Type, type, TYPE, ctype, size) \ | 1483 #define TYPED_ARRAY_FUN(Type, type, TYPE, ctype, size) \ |
1465 case kExternal##Type##Array: \ | 1484 case kExternal##Type##Array: \ |
1466 return native_context->type##_array_fun(); | 1485 return native_context->type##_array_fun(); |
1467 | 1486 |
1468 TYPED_ARRAYS(TYPED_ARRAY_FUN) | 1487 TYPED_ARRAYS(TYPED_ARRAY_FUN) |
1469 #undef TYPED_ARRAY_FUN | 1488 #undef TYPED_ARRAY_FUN |
1470 | 1489 |
1471 default: | 1490 default: |
1472 UNREACHABLE(); | 1491 UNREACHABLE(); |
1473 return NULL; | 1492 return NULL; |
1474 } | 1493 } |
1475 } | 1494 } |
1476 | 1495 |
1477 | 1496 |
1478 Handle<JSTypedArray> Factory::NewJSTypedArray(ExternalArrayType type) { | 1497 Handle<JSTypedArray> Factory::NewJSTypedArray(ExternalArrayType type) { |
1479 Handle<JSFunction> typed_array_fun_handle(GetTypedArrayFun(type, isolate())); | 1498 Handle<JSFunction> typed_array_fun_handle(GetTypedArrayFun(type, isolate())); |
1480 return Handle<JSTypedArray>::cast(NewJSObject(typed_array_fun_handle)); | 1499 |
| 1500 CALL_HEAP_FUNCTION( |
| 1501 isolate(), |
| 1502 isolate()->heap()->AllocateJSObject(*typed_array_fun_handle), |
| 1503 JSTypedArray); |
1481 } | 1504 } |
1482 | 1505 |
1483 | 1506 |
1484 Handle<JSProxy> Factory::NewJSProxy(Handle<Object> handler, | 1507 Handle<JSProxy> Factory::NewJSProxy(Handle<Object> handler, |
1485 Handle<Object> prototype) { | 1508 Handle<Object> prototype) { |
1486 CALL_HEAP_FUNCTION( | 1509 CALL_HEAP_FUNCTION( |
1487 isolate(), | 1510 isolate(), |
1488 isolate()->heap()->AllocateJSProxy(*handler, *prototype), | 1511 isolate()->heap()->AllocateJSProxy(*handler, *prototype), |
1489 JSProxy); | 1512 JSProxy); |
1490 } | 1513 } |
(...skipping 465 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1956 if (name->Equals(h->infinity_string())) return infinity_value(); | 1979 if (name->Equals(h->infinity_string())) return infinity_value(); |
1957 return Handle<Object>::null(); | 1980 return Handle<Object>::null(); |
1958 } | 1981 } |
1959 | 1982 |
1960 | 1983 |
1961 Handle<Object> Factory::ToBoolean(bool value) { | 1984 Handle<Object> Factory::ToBoolean(bool value) { |
1962 return value ? true_value() : false_value(); | 1985 return value ? true_value() : false_value(); |
1963 } | 1986 } |
1964 | 1987 |
1965 } } // namespace v8::internal | 1988 } } // namespace v8::internal |
OLD | NEW |