OLD | NEW |
1 // Copyright 2012 the V8 project authors. All rights reserved. | 1 // Copyright 2012 the V8 project authors. All rights reserved. |
2 // Redistribution and use in source and binary forms, with or without | 2 // Redistribution and use in source and binary forms, with or without |
3 // modification, are permitted provided that the following conditions are | 3 // modification, are permitted provided that the following conditions are |
4 // met: | 4 // met: |
5 // | 5 // |
6 // * Redistributions of source code must retain the above copyright | 6 // * Redistributions of source code must retain the above copyright |
7 // notice, this list of conditions and the following disclaimer. | 7 // notice, this list of conditions and the following disclaimer. |
8 // * Redistributions in binary form must reproduce the above | 8 // * Redistributions in binary form must reproduce the above |
9 // copyright notice, this list of conditions and the following | 9 // copyright notice, this list of conditions and the following |
10 // disclaimer in the documentation and/or other materials provided | 10 // disclaimer in the documentation and/or other materials provided |
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
53 | 53 |
54 CompilationInfo::CompilationInfo(Handle<Script> script, Zone* zone) | 54 CompilationInfo::CompilationInfo(Handle<Script> script, Zone* zone) |
55 : isolate_(script->GetIsolate()), | 55 : isolate_(script->GetIsolate()), |
56 flags_(LanguageModeField::encode(CLASSIC_MODE)), | 56 flags_(LanguageModeField::encode(CLASSIC_MODE)), |
57 function_(NULL), | 57 function_(NULL), |
58 scope_(NULL), | 58 scope_(NULL), |
59 global_scope_(NULL), | 59 global_scope_(NULL), |
60 script_(script), | 60 script_(script), |
61 extension_(NULL), | 61 extension_(NULL), |
62 pre_parse_data_(NULL), | 62 pre_parse_data_(NULL), |
63 osr_ast_id_(AstNode::kNoNumber), | 63 osr_ast_id_(BailoutId::None()), |
64 zone_(zone), | 64 zone_(zone), |
65 deferred_handles_(NULL) { | 65 deferred_handles_(NULL) { |
66 Initialize(BASE); | 66 Initialize(BASE); |
67 } | 67 } |
68 | 68 |
69 | 69 |
70 CompilationInfo::CompilationInfo(Handle<SharedFunctionInfo> shared_info, | 70 CompilationInfo::CompilationInfo(Handle<SharedFunctionInfo> shared_info, |
71 Zone* zone) | 71 Zone* zone) |
72 : isolate_(shared_info->GetIsolate()), | 72 : isolate_(shared_info->GetIsolate()), |
73 flags_(LanguageModeField::encode(CLASSIC_MODE) | | 73 flags_(LanguageModeField::encode(CLASSIC_MODE) | |
74 IsLazy::encode(true)), | 74 IsLazy::encode(true)), |
75 function_(NULL), | 75 function_(NULL), |
76 scope_(NULL), | 76 scope_(NULL), |
77 global_scope_(NULL), | 77 global_scope_(NULL), |
78 shared_info_(shared_info), | 78 shared_info_(shared_info), |
79 script_(Handle<Script>(Script::cast(shared_info->script()))), | 79 script_(Handle<Script>(Script::cast(shared_info->script()))), |
80 extension_(NULL), | 80 extension_(NULL), |
81 pre_parse_data_(NULL), | 81 pre_parse_data_(NULL), |
82 osr_ast_id_(AstNode::kNoNumber), | 82 osr_ast_id_(BailoutId::None()), |
83 zone_(zone), | 83 zone_(zone), |
84 deferred_handles_(NULL) { | 84 deferred_handles_(NULL) { |
85 Initialize(BASE); | 85 Initialize(BASE); |
86 } | 86 } |
87 | 87 |
88 | 88 |
89 CompilationInfo::CompilationInfo(Handle<JSFunction> closure, Zone* zone) | 89 CompilationInfo::CompilationInfo(Handle<JSFunction> closure, Zone* zone) |
90 : isolate_(closure->GetIsolate()), | 90 : isolate_(closure->GetIsolate()), |
91 flags_(LanguageModeField::encode(CLASSIC_MODE) | | 91 flags_(LanguageModeField::encode(CLASSIC_MODE) | |
92 IsLazy::encode(true)), | 92 IsLazy::encode(true)), |
93 function_(NULL), | 93 function_(NULL), |
94 scope_(NULL), | 94 scope_(NULL), |
95 global_scope_(NULL), | 95 global_scope_(NULL), |
96 closure_(closure), | 96 closure_(closure), |
97 shared_info_(Handle<SharedFunctionInfo>(closure->shared())), | 97 shared_info_(Handle<SharedFunctionInfo>(closure->shared())), |
98 script_(Handle<Script>(Script::cast(shared_info_->script()))), | 98 script_(Handle<Script>(Script::cast(shared_info_->script()))), |
99 extension_(NULL), | 99 extension_(NULL), |
100 pre_parse_data_(NULL), | 100 pre_parse_data_(NULL), |
101 osr_ast_id_(AstNode::kNoNumber), | 101 osr_ast_id_(BailoutId::None()), |
102 zone_(zone), | 102 zone_(zone), |
103 deferred_handles_(NULL) { | 103 deferred_handles_(NULL) { |
104 Initialize(BASE); | 104 Initialize(BASE); |
105 } | 105 } |
106 | 106 |
107 | 107 |
108 CompilationInfo::~CompilationInfo() { | 108 CompilationInfo::~CompilationInfo() { |
109 delete deferred_handles_; | 109 delete deferred_handles_; |
110 } | 110 } |
111 | 111 |
(...skipping 137 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
249 // language, we cannot optimize functions with too many formal parameters | 249 // language, we cannot optimize functions with too many formal parameters |
250 // or perform on-stack replacement for function with too many | 250 // or perform on-stack replacement for function with too many |
251 // stack-allocated local variables. | 251 // stack-allocated local variables. |
252 // | 252 // |
253 // The encoding is as a signed value, with parameters and receiver using | 253 // The encoding is as a signed value, with parameters and receiver using |
254 // the negative indices and locals the non-negative ones. | 254 // the negative indices and locals the non-negative ones. |
255 const int parameter_limit = -LUnallocated::kMinFixedIndex; | 255 const int parameter_limit = -LUnallocated::kMinFixedIndex; |
256 const int locals_limit = LUnallocated::kMaxFixedIndex; | 256 const int locals_limit = LUnallocated::kMaxFixedIndex; |
257 Scope* scope = info()->scope(); | 257 Scope* scope = info()->scope(); |
258 if ((scope->num_parameters() + 1) > parameter_limit || | 258 if ((scope->num_parameters() + 1) > parameter_limit || |
259 (info()->osr_ast_id() != AstNode::kNoNumber && | 259 (!info()->osr_ast_id().IsNone() && |
260 scope->num_parameters() + 1 + scope->num_stack_slots() > locals_limit)) { | 260 scope->num_parameters() + 1 + scope->num_stack_slots() > locals_limit)) { |
261 return AbortOptimization(); | 261 return AbortOptimization(); |
262 } | 262 } |
263 | 263 |
264 // Take --hydrogen-filter into account. | 264 // Take --hydrogen-filter into account. |
265 Handle<String> name = info()->function()->debug_name(); | 265 Handle<String> name = info()->function()->debug_name(); |
266 if (*FLAG_hydrogen_filter != '\0') { | 266 if (*FLAG_hydrogen_filter != '\0') { |
267 Vector<const char> filter = CStrVector(FLAG_hydrogen_filter); | 267 Vector<const char> filter = CStrVector(FLAG_hydrogen_filter); |
268 if ((filter[0] == '-' | 268 if ((filter[0] == '-' |
269 && name->IsEqualTo(filter.SubVector(1, filter.length()))) | 269 && name->IsEqualTo(filter.SubVector(1, filter.length()))) |
(...skipping 431 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
701 | 701 |
702 if (V8::UseCrankshaft() && | 702 if (V8::UseCrankshaft() && |
703 !function.is_null() && | 703 !function.is_null() && |
704 !shared->optimization_disabled()) { | 704 !shared->optimization_disabled()) { |
705 // If we're asked to always optimize, we compile the optimized | 705 // If we're asked to always optimize, we compile the optimized |
706 // version of the function right away - unless the debugger is | 706 // version of the function right away - unless the debugger is |
707 // active as it makes no sense to compile optimized code then. | 707 // active as it makes no sense to compile optimized code then. |
708 if (FLAG_always_opt && | 708 if (FLAG_always_opt && |
709 !Isolate::Current()->DebuggerHasBreakPoints()) { | 709 !Isolate::Current()->DebuggerHasBreakPoints()) { |
710 CompilationInfoWithZone optimized(function); | 710 CompilationInfoWithZone optimized(function); |
711 optimized.SetOptimizing(AstNode::kNoNumber); | 711 optimized.SetOptimizing(BailoutId::None()); |
712 return Compiler::CompileLazy(&optimized); | 712 return Compiler::CompileLazy(&optimized); |
713 } | 713 } |
714 } | 714 } |
715 return true; | 715 return true; |
716 } | 716 } |
717 | 717 |
718 | 718 |
719 static void InstallCodeCommon(CompilationInfo* info) { | 719 static void InstallCodeCommon(CompilationInfo* info) { |
720 Handle<SharedFunctionInfo> shared = info->shared_info(); | 720 Handle<SharedFunctionInfo> shared = info->shared_info(); |
721 Handle<Code> code = info->code(); | 721 Handle<Code> code = info->code(); |
(...skipping 108 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
830 return; | 830 return; |
831 } | 831 } |
832 | 832 |
833 SmartPointer<CompilationInfo> info(new CompilationInfoWithZone(closure)); | 833 SmartPointer<CompilationInfo> info(new CompilationInfoWithZone(closure)); |
834 VMState state(isolate, PARALLEL_COMPILER_PROLOGUE); | 834 VMState state(isolate, PARALLEL_COMPILER_PROLOGUE); |
835 PostponeInterruptsScope postpone(isolate); | 835 PostponeInterruptsScope postpone(isolate); |
836 | 836 |
837 Handle<SharedFunctionInfo> shared = info->shared_info(); | 837 Handle<SharedFunctionInfo> shared = info->shared_info(); |
838 int compiled_size = shared->end_position() - shared->start_position(); | 838 int compiled_size = shared->end_position() - shared->start_position(); |
839 isolate->counters()->total_compile_size()->Increment(compiled_size); | 839 isolate->counters()->total_compile_size()->Increment(compiled_size); |
840 info->SetOptimizing(AstNode::kNoNumber); | 840 info->SetOptimizing(BailoutId::None()); |
841 | 841 |
842 { | 842 { |
843 CompilationHandleScope handle_scope(*info); | 843 CompilationHandleScope handle_scope(*info); |
844 | 844 |
845 if (InstallCodeFromOptimizedCodeMap(*info)) return; | 845 if (InstallCodeFromOptimizedCodeMap(*info)) return; |
846 | 846 |
847 if (ParserApi::Parse(*info, kNoParsingFlags)) { | 847 if (ParserApi::Parse(*info, kNoParsingFlags)) { |
848 LanguageMode language_mode = info->function()->language_mode(); | 848 LanguageMode language_mode = info->function()->language_mode(); |
849 info->SetLanguageMode(language_mode); | 849 info->SetLanguageMode(language_mode); |
850 shared->set_language_mode(language_mode); | 850 shared->set_language_mode(language_mode); |
(...skipping 176 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1027 } | 1027 } |
1028 } | 1028 } |
1029 | 1029 |
1030 GDBJIT(AddCode(Handle<String>(shared->DebugName()), | 1030 GDBJIT(AddCode(Handle<String>(shared->DebugName()), |
1031 Handle<Script>(info->script()), | 1031 Handle<Script>(info->script()), |
1032 Handle<Code>(info->code()), | 1032 Handle<Code>(info->code()), |
1033 info)); | 1033 info)); |
1034 } | 1034 } |
1035 | 1035 |
1036 } } // namespace v8::internal | 1036 } } // namespace v8::internal |
OLD | NEW |