| 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 150 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 161 ASSERT(deopt_entry_count > 0); | 161 ASSERT(deopt_entry_count > 0); |
| 162 CALL_HEAP_FUNCTION(isolate(), | 162 CALL_HEAP_FUNCTION(isolate(), |
| 163 DeoptimizationOutputData::Allocate(isolate(), | 163 DeoptimizationOutputData::Allocate(isolate(), |
| 164 deopt_entry_count, | 164 deopt_entry_count, |
| 165 pretenure), | 165 pretenure), |
| 166 DeoptimizationOutputData); | 166 DeoptimizationOutputData); |
| 167 } | 167 } |
| 168 | 168 |
| 169 | 169 |
| 170 Handle<AccessorPair> Factory::NewAccessorPair() { | 170 Handle<AccessorPair> Factory::NewAccessorPair() { |
| 171 CALL_HEAP_FUNCTION(isolate(), | 171 Handle<AccessorPair> accessors = |
| 172 isolate()->heap()->AllocateAccessorPair(), | 172 Handle<AccessorPair>::cast(NewStruct(ACCESSOR_PAIR_TYPE)); |
| 173 AccessorPair); | 173 accessors->set_getter(*the_hole_value(), SKIP_WRITE_BARRIER); |
| 174 accessors->set_setter(*the_hole_value(), SKIP_WRITE_BARRIER); |
| 175 accessors->set_access_flags(Smi::FromInt(0), SKIP_WRITE_BARRIER); |
| 176 return accessors; |
| 174 } | 177 } |
| 175 | 178 |
| 176 | 179 |
| 177 Handle<TypeFeedbackInfo> Factory::NewTypeFeedbackInfo() { | 180 Handle<TypeFeedbackInfo> Factory::NewTypeFeedbackInfo() { |
| 178 CALL_HEAP_FUNCTION(isolate(), | 181 Handle<TypeFeedbackInfo> info = |
| 179 isolate()->heap()->AllocateTypeFeedbackInfo(), | 182 Handle<TypeFeedbackInfo>::cast(NewStruct(TYPE_FEEDBACK_INFO_TYPE)); |
| 180 TypeFeedbackInfo); | 183 info->initialize_storage(); |
| 184 info->set_feedback_vector(*empty_fixed_array(), SKIP_WRITE_BARRIER); |
| 185 return info; |
| 181 } | 186 } |
| 182 | 187 |
| 183 | 188 |
| 184 // Internalized strings are created in the old generation (data space). | 189 // Internalized strings are created in the old generation (data space). |
| 185 Handle<String> Factory::InternalizeUtf8String(Vector<const char> string) { | 190 Handle<String> Factory::InternalizeUtf8String(Vector<const char> string) { |
| 186 Utf8StringKey key(string, isolate()->heap()->HashSeed()); | 191 Utf8StringKey key(string, isolate()->heap()->HashSeed()); |
| 187 return InternalizeStringWithKey(&key); | 192 return InternalizeStringWithKey(&key); |
| 188 } | 193 } |
| 189 | 194 |
| 190 | 195 |
| (...skipping 355 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 546 | 551 |
| 547 Handle<Symbol> Factory::NewPrivateSymbol() { | 552 Handle<Symbol> Factory::NewPrivateSymbol() { |
| 548 CALL_HEAP_FUNCTION( | 553 CALL_HEAP_FUNCTION( |
| 549 isolate(), | 554 isolate(), |
| 550 isolate()->heap()->AllocatePrivateSymbol(), | 555 isolate()->heap()->AllocatePrivateSymbol(), |
| 551 Symbol); | 556 Symbol); |
| 552 } | 557 } |
| 553 | 558 |
| 554 | 559 |
| 555 Handle<Context> Factory::NewNativeContext() { | 560 Handle<Context> Factory::NewNativeContext() { |
| 556 CALL_HEAP_FUNCTION( | 561 Handle<FixedArray> array = NewFixedArray(Context::NATIVE_CONTEXT_SLOTS); |
| 557 isolate(), | 562 array->set_map_no_write_barrier(*native_context_map()); |
| 558 isolate()->heap()->AllocateNativeContext(), | 563 Handle<Context> context = Handle<Context>::cast(array); |
| 559 Context); | 564 context->set_js_array_maps(*undefined_value()); |
| 565 ASSERT(context->IsNativeContext()); |
| 566 return context; |
| 560 } | 567 } |
| 561 | 568 |
| 562 | 569 |
| 563 Handle<Context> Factory::NewGlobalContext(Handle<JSFunction> function, | 570 Handle<Context> Factory::NewGlobalContext(Handle<JSFunction> function, |
| 564 Handle<ScopeInfo> scope_info) { | 571 Handle<ScopeInfo> scope_info) { |
| 565 CALL_HEAP_FUNCTION( | 572 CALL_HEAP_FUNCTION( |
| 566 isolate(), | 573 isolate(), |
| 567 isolate()->heap()->AllocateGlobalContext(*function, *scope_info), | 574 isolate()->heap()->AllocateGlobalContext(*function, *scope_info), |
| 568 Context); | 575 Context); |
| 569 } | 576 } |
| 570 | 577 |
| 571 | 578 |
| 572 Handle<Context> Factory::NewModuleContext(Handle<ScopeInfo> scope_info) { | 579 Handle<Context> Factory::NewModuleContext(Handle<ScopeInfo> scope_info) { |
| 573 CALL_HEAP_FUNCTION( | 580 Handle<FixedArray> array = |
| 574 isolate(), | 581 NewFixedArray(scope_info->ContextLength(), TENURED); |
| 575 isolate()->heap()->AllocateModuleContext(*scope_info), | 582 array->set_map_no_write_barrier(*module_context_map()); |
| 576 Context); | 583 // Instance link will be set later. |
| 584 Handle<Context> context = Handle<Context>::cast(array); |
| 585 context->set_extension(Smi::FromInt(0)); |
| 586 return context; |
| 577 } | 587 } |
| 578 | 588 |
| 579 | 589 |
| 580 Handle<Context> Factory::NewFunctionContext(int length, | 590 Handle<Context> Factory::NewFunctionContext(int length, |
| 581 Handle<JSFunction> function) { | 591 Handle<JSFunction> function) { |
| 582 CALL_HEAP_FUNCTION( | 592 CALL_HEAP_FUNCTION( |
| 583 isolate(), | 593 isolate(), |
| 584 isolate()->heap()->AllocateFunctionContext(length, *function), | 594 isolate()->heap()->AllocateFunctionContext(length, *function), |
| 585 Context); | 595 Context); |
| 586 } | 596 } |
| (...skipping 610 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1197 Handle<JSFunction> function = NewFunctionWithoutPrototype(name, SLOPPY); | 1207 Handle<JSFunction> function = NewFunctionWithoutPrototype(name, SLOPPY); |
| 1198 function->shared()->set_code(*code); | 1208 function->shared()->set_code(*code); |
| 1199 function->set_code(*code); | 1209 function->set_code(*code); |
| 1200 ASSERT(!function->has_initial_map()); | 1210 ASSERT(!function->has_initial_map()); |
| 1201 ASSERT(!function->has_prototype()); | 1211 ASSERT(!function->has_prototype()); |
| 1202 return function; | 1212 return function; |
| 1203 } | 1213 } |
| 1204 | 1214 |
| 1205 | 1215 |
| 1206 Handle<ScopeInfo> Factory::NewScopeInfo(int length) { | 1216 Handle<ScopeInfo> Factory::NewScopeInfo(int length) { |
| 1207 CALL_HEAP_FUNCTION( | 1217 Handle<FixedArray> array = NewFixedArray(length, TENURED); |
| 1208 isolate(), | 1218 array->set_map_no_write_barrier(*scope_info_map()); |
| 1209 isolate()->heap()->AllocateScopeInfo(length), | 1219 Handle<ScopeInfo> scope_info = Handle<ScopeInfo>::cast(array); |
| 1210 ScopeInfo); | 1220 return scope_info; |
| 1211 } | 1221 } |
| 1212 | 1222 |
| 1213 | 1223 |
| 1214 Handle<JSObject> Factory::NewExternal(void* value) { | 1224 Handle<JSObject> Factory::NewExternal(void* value) { |
| 1215 CALL_HEAP_FUNCTION(isolate(), | 1225 Handle<Foreign> foreign = NewForeign(static_cast<Address>(value)); |
| 1216 isolate()->heap()->AllocateExternal(value), | 1226 Handle<JSObject> external = NewJSObjectFromMap(external_map()); |
| 1217 JSObject); | 1227 external->SetInternalField(0, *foreign); |
| 1228 return external; |
| 1218 } | 1229 } |
| 1219 | 1230 |
| 1220 | 1231 |
| 1221 Handle<Code> Factory::NewCode(const CodeDesc& desc, | 1232 Handle<Code> Factory::NewCode(const CodeDesc& desc, |
| 1222 Code::Flags flags, | 1233 Code::Flags flags, |
| 1223 Handle<Object> self_ref, | 1234 Handle<Object> self_ref, |
| 1224 bool immovable, | 1235 bool immovable, |
| 1225 bool crankshafted, | 1236 bool crankshafted, |
| 1226 int prologue_offset) { | 1237 int prologue_offset) { |
| 1227 CALL_HEAP_FUNCTION(isolate(), | 1238 CALL_HEAP_FUNCTION(isolate(), |
| (...skipping 715 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1943 if (name->Equals(h->infinity_string())) return infinity_value(); | 1954 if (name->Equals(h->infinity_string())) return infinity_value(); |
| 1944 return Handle<Object>::null(); | 1955 return Handle<Object>::null(); |
| 1945 } | 1956 } |
| 1946 | 1957 |
| 1947 | 1958 |
| 1948 Handle<Object> Factory::ToBoolean(bool value) { | 1959 Handle<Object> Factory::ToBoolean(bool value) { |
| 1949 return value ? true_value() : false_value(); | 1960 return value ? true_value() : false_value(); |
| 1950 } | 1961 } |
| 1951 | 1962 |
| 1952 } } // namespace v8::internal | 1963 } } // namespace v8::internal |
| OLD | NEW |