| 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 "src/factory.h" | 5 #include "src/factory.h" |
| 6 | 6 |
| 7 #include "src/allocation-site-scopes.h" | 7 #include "src/allocation-site-scopes.h" |
| 8 #include "src/base/bits.h" | 8 #include "src/base/bits.h" |
| 9 #include "src/bootstrapper.h" | 9 #include "src/bootstrapper.h" |
| 10 #include "src/conversions.h" | 10 #include "src/conversions.h" |
| (...skipping 1184 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1195 Handle<JSFunction> result = New<JSFunction>(map, space); | 1195 Handle<JSFunction> result = New<JSFunction>(map, space); |
| 1196 InitializeFunction(result, info, context); | 1196 InitializeFunction(result, info, context); |
| 1197 return result; | 1197 return result; |
| 1198 } | 1198 } |
| 1199 | 1199 |
| 1200 | 1200 |
| 1201 Handle<JSFunction> Factory::NewFunction(Handle<Map> map, | 1201 Handle<JSFunction> Factory::NewFunction(Handle<Map> map, |
| 1202 Handle<String> name, | 1202 Handle<String> name, |
| 1203 MaybeHandle<Code> code) { | 1203 MaybeHandle<Code> code) { |
| 1204 Handle<Context> context(isolate()->native_context()); | 1204 Handle<Context> context(isolate()->native_context()); |
| 1205 Handle<SharedFunctionInfo> info = NewSharedFunctionInfo(name, code); | 1205 Handle<SharedFunctionInfo> info = |
| 1206 NewSharedFunctionInfo(name, code, map->is_constructor()); |
| 1206 DCHECK(is_sloppy(info->language_mode()) && | 1207 DCHECK(is_sloppy(info->language_mode()) && |
| 1207 (map.is_identical_to(isolate()->sloppy_function_map()) || | 1208 (map.is_identical_to(isolate()->sloppy_function_map()) || |
| 1208 map.is_identical_to( | 1209 map.is_identical_to( |
| 1209 isolate()->sloppy_function_without_prototype_map()) || | 1210 isolate()->sloppy_function_without_prototype_map()) || |
| 1210 map.is_identical_to( | 1211 map.is_identical_to( |
| 1211 isolate()->sloppy_function_with_readonly_prototype_map()) || | 1212 isolate()->sloppy_function_with_readonly_prototype_map()) || |
| 1212 map.is_identical_to(isolate()->strict_function_map()))); | 1213 map.is_identical_to(isolate()->strict_function_map()))); |
| 1213 return NewFunction(map, info, context); | 1214 return NewFunction(map, info, context); |
| 1214 } | 1215 } |
| 1215 | 1216 |
| (...skipping 799 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2015 // Restore the saved hash. | 2016 // Restore the saved hash. |
| 2016 object->set_hash(*hash); | 2017 object->set_hash(*hash); |
| 2017 } | 2018 } |
| 2018 | 2019 |
| 2019 | 2020 |
| 2020 Handle<SharedFunctionInfo> Factory::NewSharedFunctionInfo( | 2021 Handle<SharedFunctionInfo> Factory::NewSharedFunctionInfo( |
| 2021 Handle<String> name, int number_of_literals, FunctionKind kind, | 2022 Handle<String> name, int number_of_literals, FunctionKind kind, |
| 2022 Handle<Code> code, Handle<ScopeInfo> scope_info, | 2023 Handle<Code> code, Handle<ScopeInfo> scope_info, |
| 2023 Handle<TypeFeedbackVector> feedback_vector) { | 2024 Handle<TypeFeedbackVector> feedback_vector) { |
| 2024 DCHECK(IsValidFunctionKind(kind)); | 2025 DCHECK(IsValidFunctionKind(kind)); |
| 2025 Handle<SharedFunctionInfo> shared = NewSharedFunctionInfo(name, code); | 2026 Handle<SharedFunctionInfo> shared = NewSharedFunctionInfo( |
| 2027 name, code, IsConstructable(kind, scope_info->language_mode())); |
| 2026 shared->set_scope_info(*scope_info); | 2028 shared->set_scope_info(*scope_info); |
| 2027 shared->set_feedback_vector(*feedback_vector); | 2029 shared->set_feedback_vector(*feedback_vector); |
| 2028 shared->set_kind(kind); | 2030 shared->set_kind(kind); |
| 2029 shared->set_num_literals(number_of_literals); | 2031 shared->set_num_literals(number_of_literals); |
| 2030 if (IsGeneratorFunction(kind)) { | 2032 if (IsGeneratorFunction(kind)) { |
| 2031 shared->set_instance_class_name(isolate()->heap()->Generator_string()); | 2033 shared->set_instance_class_name(isolate()->heap()->Generator_string()); |
| 2032 shared->DisableOptimization(kGenerator); | 2034 shared->DisableOptimization(kGenerator); |
| 2033 } | 2035 } |
| 2034 return shared; | 2036 return shared; |
| 2035 } | 2037 } |
| (...skipping 12 matching lines...) Expand all Loading... |
| 2048 message_obj->set_argument(*argument); | 2050 message_obj->set_argument(*argument); |
| 2049 message_obj->set_start_position(start_position); | 2051 message_obj->set_start_position(start_position); |
| 2050 message_obj->set_end_position(end_position); | 2052 message_obj->set_end_position(end_position); |
| 2051 message_obj->set_script(*script); | 2053 message_obj->set_script(*script); |
| 2052 message_obj->set_stack_frames(*stack_frames); | 2054 message_obj->set_stack_frames(*stack_frames); |
| 2053 return message_obj; | 2055 return message_obj; |
| 2054 } | 2056 } |
| 2055 | 2057 |
| 2056 | 2058 |
| 2057 Handle<SharedFunctionInfo> Factory::NewSharedFunctionInfo( | 2059 Handle<SharedFunctionInfo> Factory::NewSharedFunctionInfo( |
| 2058 Handle<String> name, | 2060 Handle<String> name, MaybeHandle<Code> maybe_code, bool is_constructor) { |
| 2059 MaybeHandle<Code> maybe_code) { | |
| 2060 Handle<Map> map = shared_function_info_map(); | 2061 Handle<Map> map = shared_function_info_map(); |
| 2061 Handle<SharedFunctionInfo> share = New<SharedFunctionInfo>(map, OLD_SPACE); | 2062 Handle<SharedFunctionInfo> share = New<SharedFunctionInfo>(map, OLD_SPACE); |
| 2062 | 2063 |
| 2063 // Set pointer fields. | 2064 // Set pointer fields. |
| 2064 share->set_name(*name); | 2065 share->set_name(*name); |
| 2065 Handle<Code> code; | 2066 Handle<Code> code; |
| 2066 if (!maybe_code.ToHandle(&code)) { | 2067 if (!maybe_code.ToHandle(&code)) { |
| 2067 code = handle(isolate()->builtins()->builtin(Builtins::kIllegal)); | 2068 code = isolate()->builtins()->Illegal(); |
| 2068 } | 2069 } |
| 2069 share->set_code(*code); | 2070 share->set_code(*code); |
| 2070 share->set_optimized_code_map(*cleared_optimized_code_map()); | 2071 share->set_optimized_code_map(*cleared_optimized_code_map()); |
| 2071 share->set_scope_info(ScopeInfo::Empty(isolate())); | 2072 share->set_scope_info(ScopeInfo::Empty(isolate())); |
| 2072 Code* construct_stub = | 2073 Handle<Code> construct_stub = |
| 2073 isolate()->builtins()->builtin(Builtins::kJSConstructStubGeneric); | 2074 is_constructor ? isolate()->builtins()->JSConstructStubGeneric() |
| 2074 share->set_construct_stub(construct_stub); | 2075 : isolate()->builtins()->ConstructedNonConstructable(); |
| 2076 share->set_construct_stub(*construct_stub); |
| 2075 share->set_instance_class_name(*Object_string()); | 2077 share->set_instance_class_name(*Object_string()); |
| 2076 share->set_function_data(*undefined_value(), SKIP_WRITE_BARRIER); | 2078 share->set_function_data(*undefined_value(), SKIP_WRITE_BARRIER); |
| 2077 share->set_script(*undefined_value(), SKIP_WRITE_BARRIER); | 2079 share->set_script(*undefined_value(), SKIP_WRITE_BARRIER); |
| 2078 share->set_debug_info(*undefined_value(), SKIP_WRITE_BARRIER); | 2080 share->set_debug_info(*undefined_value(), SKIP_WRITE_BARRIER); |
| 2079 share->set_inferred_name(*empty_string(), SKIP_WRITE_BARRIER); | 2081 share->set_inferred_name(*empty_string(), SKIP_WRITE_BARRIER); |
| 2080 StaticFeedbackVectorSpec empty_spec; | 2082 StaticFeedbackVectorSpec empty_spec; |
| 2081 Handle<TypeFeedbackMetadata> feedback_metadata = | 2083 Handle<TypeFeedbackMetadata> feedback_metadata = |
| 2082 TypeFeedbackMetadata::New(isolate(), &empty_spec); | 2084 TypeFeedbackMetadata::New(isolate(), &empty_spec); |
| 2083 Handle<TypeFeedbackVector> feedback_vector = | 2085 Handle<TypeFeedbackVector> feedback_vector = |
| 2084 TypeFeedbackVector::New(isolate(), feedback_metadata); | 2086 TypeFeedbackVector::New(isolate(), feedback_metadata); |
| (...skipping 245 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2330 } | 2332 } |
| 2331 | 2333 |
| 2332 | 2334 |
| 2333 Handle<Object> Factory::ToBoolean(bool value) { | 2335 Handle<Object> Factory::ToBoolean(bool value) { |
| 2334 return value ? true_value() : false_value(); | 2336 return value ? true_value() : false_value(); |
| 2335 } | 2337 } |
| 2336 | 2338 |
| 2337 | 2339 |
| 2338 } // namespace internal | 2340 } // namespace internal |
| 2339 } // namespace v8 | 2341 } // namespace v8 |
| OLD | NEW |