OLD | NEW |
1 // Copyright 2010 the V8 project authors. All rights reserved. | 1 // Copyright 2010 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 142 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
153 return CodeGenerator::MakeCode(info); | 153 return CodeGenerator::MakeCode(info); |
154 } | 154 } |
155 | 155 |
156 | 156 |
157 #ifdef ENABLE_DEBUGGER_SUPPORT | 157 #ifdef ENABLE_DEBUGGER_SUPPORT |
158 Handle<Code> MakeCodeForLiveEdit(CompilationInfo* info) { | 158 Handle<Code> MakeCodeForLiveEdit(CompilationInfo* info) { |
159 Handle<Context> context = Handle<Context>::null(); | 159 Handle<Context> context = Handle<Context>::null(); |
160 Handle<Code> code = MakeCode(context, info); | 160 Handle<Code> code = MakeCode(context, info); |
161 if (!info->shared_info().is_null()) { | 161 if (!info->shared_info().is_null()) { |
162 info->shared_info()->set_scope_info( | 162 info->shared_info()->set_scope_info( |
163 *ScopeInfo<>::CreateHeapObject(info->scope())); | 163 *SerializedScopeInfo::Create(info->scope())); |
164 } | 164 } |
165 return code; | 165 return code; |
166 } | 166 } |
167 #endif | 167 #endif |
168 | 168 |
169 | 169 |
170 static Handle<SharedFunctionInfo> MakeFunctionInfo(bool is_global, | 170 static Handle<SharedFunctionInfo> MakeFunctionInfo(bool is_global, |
171 bool is_eval, | 171 bool is_eval, |
172 Compiler::ValidationState validate, | 172 Compiler::ValidationState validate, |
173 Handle<Script> script, | 173 Handle<Script> script, |
(...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
255 code->instruction_start(), | 255 code->instruction_start(), |
256 code->instruction_size())); | 256 code->instruction_size())); |
257 } | 257 } |
258 | 258 |
259 // Allocate function. | 259 // Allocate function. |
260 Handle<SharedFunctionInfo> result = | 260 Handle<SharedFunctionInfo> result = |
261 Factory::NewSharedFunctionInfo( | 261 Factory::NewSharedFunctionInfo( |
262 lit->name(), | 262 lit->name(), |
263 lit->materialized_literal_count(), | 263 lit->materialized_literal_count(), |
264 code, | 264 code, |
265 ScopeInfo<>::CreateHeapObject(info.scope())); | 265 SerializedScopeInfo::Create(info.scope())); |
266 | 266 |
267 ASSERT_EQ(RelocInfo::kNoPosition, lit->function_token_position()); | 267 ASSERT_EQ(RelocInfo::kNoPosition, lit->function_token_position()); |
268 Compiler::SetFunctionInfo(result, lit, true, script); | 268 Compiler::SetFunctionInfo(result, lit, true, script); |
269 | 269 |
270 // Hint to the runtime system used when allocating space for initial | 270 // Hint to the runtime system used when allocating space for initial |
271 // property space by setting the expected number of properties for | 271 // property space by setting the expected number of properties for |
272 // the instances of the function. | 272 // the instances of the function. |
273 SetExpectedNofPropertiesFromEstimate(result, lit->expected_property_count()); | 273 SetExpectedNofPropertiesFromEstimate(result, lit->expected_property_count()); |
274 | 274 |
275 #ifdef ENABLE_DEBUGGER_SUPPORT | 275 #ifdef ENABLE_DEBUGGER_SUPPORT |
(...skipping 167 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
443 | 443 |
444 RecordFunctionCompilation(Logger::LAZY_COMPILE_TAG, | 444 RecordFunctionCompilation(Logger::LAZY_COMPILE_TAG, |
445 name, | 445 name, |
446 Handle<String>(shared->inferred_name()), | 446 Handle<String>(shared->inferred_name()), |
447 start_position, | 447 start_position, |
448 info->script(), | 448 info->script(), |
449 code); | 449 code); |
450 | 450 |
451 // Update the shared function info with the compiled code and the scope info. | 451 // Update the shared function info with the compiled code and the scope info. |
452 shared->set_code(*code); | 452 shared->set_code(*code); |
453 shared->set_scope_info(*ScopeInfo<>::CreateHeapObject(info->scope())); | 453 shared->set_scope_info(*SerializedScopeInfo::Create(info->scope())); |
454 | 454 |
455 // Set the expected number of properties for instances. | 455 // Set the expected number of properties for instances. |
456 SetExpectedNofPropertiesFromEstimate(shared, lit->expected_property_count()); | 456 SetExpectedNofPropertiesFromEstimate(shared, lit->expected_property_count()); |
457 | 457 |
458 // Set the optimication hints after performing lazy compilation, as these are | 458 // Set the optimication hints after performing lazy compilation, as these are |
459 // not set when the function is set up as a lazily compiled function. | 459 // not set when the function is set up as a lazily compiled function. |
460 shared->SetThisPropertyAssignmentsInfo( | 460 shared->SetThisPropertyAssignmentsInfo( |
461 lit->has_only_simple_this_property_assignments(), | 461 lit->has_only_simple_this_property_assignments(), |
462 *lit->this_property_assignments()); | 462 *lit->this_property_assignments()); |
463 | 463 |
(...skipping 14 matching lines...) Expand all Loading... |
478 #endif | 478 #endif |
479 | 479 |
480 // Determine if the function can be lazily compiled. This is | 480 // Determine if the function can be lazily compiled. This is |
481 // necessary to allow some of our builtin JS files to be lazily | 481 // necessary to allow some of our builtin JS files to be lazily |
482 // compiled. These builtins cannot be handled lazily by the parser, | 482 // compiled. These builtins cannot be handled lazily by the parser, |
483 // since we have to know if a function uses the special natives | 483 // since we have to know if a function uses the special natives |
484 // syntax, which is something the parser records. | 484 // syntax, which is something the parser records. |
485 bool allow_lazy = literal->AllowsLazyCompilation() && | 485 bool allow_lazy = literal->AllowsLazyCompilation() && |
486 !LiveEditFunctionTracker::IsActive(); | 486 !LiveEditFunctionTracker::IsActive(); |
487 | 487 |
488 Handle<Object> scope_info(ScopeInfo<>::EmptyHeapObject()); | 488 Handle<SerializedScopeInfo> scope_info(SerializedScopeInfo::Empty()); |
489 | 489 |
490 // Generate code | 490 // Generate code |
491 Handle<Code> code; | 491 Handle<Code> code; |
492 if (FLAG_lazy && allow_lazy) { | 492 if (FLAG_lazy && allow_lazy) { |
493 code = ComputeLazyCompile(literal->num_parameters()); | 493 code = ComputeLazyCompile(literal->num_parameters()); |
494 } else { | 494 } else { |
495 // The bodies of function literals have not yet been visited by | 495 // The bodies of function literals have not yet been visited by |
496 // the AST optimizer/analyzer. | 496 // the AST optimizer/analyzer. |
497 if (!Rewriter::Optimize(literal)) { | 497 if (!Rewriter::Optimize(literal)) { |
498 return Handle<SharedFunctionInfo>::null(); | 498 return Handle<SharedFunctionInfo>::null(); |
(...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
561 return Handle<SharedFunctionInfo>::null(); | 561 return Handle<SharedFunctionInfo>::null(); |
562 } | 562 } |
563 | 563 |
564 // Function compilation complete. | 564 // Function compilation complete. |
565 RecordFunctionCompilation(Logger::FUNCTION_TAG, | 565 RecordFunctionCompilation(Logger::FUNCTION_TAG, |
566 literal->name(), | 566 literal->name(), |
567 literal->inferred_name(), | 567 literal->inferred_name(), |
568 literal->start_position(), | 568 literal->start_position(), |
569 script, | 569 script, |
570 code); | 570 code); |
571 scope_info = ScopeInfo<>::CreateHeapObject(info.scope()); | 571 scope_info = SerializedScopeInfo::Create(info.scope()); |
572 } | 572 } |
573 | 573 |
574 // Create a shared function info object. | 574 // Create a shared function info object. |
575 Handle<SharedFunctionInfo> result = | 575 Handle<SharedFunctionInfo> result = |
576 Factory::NewSharedFunctionInfo(literal->name(), | 576 Factory::NewSharedFunctionInfo(literal->name(), |
577 literal->materialized_literal_count(), | 577 literal->materialized_literal_count(), |
578 code, | 578 code, |
579 scope_info); | 579 scope_info); |
580 SetFunctionInfo(result, literal, false, script); | 580 SetFunctionInfo(result, literal, false, script); |
581 | 581 |
(...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
641 PROFILE(CodeCreateEvent(Logger::ToNativeByScript(tag, *script), | 641 PROFILE(CodeCreateEvent(Logger::ToNativeByScript(tag, *script), |
642 *code, *func_name)); | 642 *code, *func_name)); |
643 OPROFILE(CreateNativeCodeRegion(*func_name, | 643 OPROFILE(CreateNativeCodeRegion(*func_name, |
644 code->instruction_start(), | 644 code->instruction_start(), |
645 code->instruction_size())); | 645 code->instruction_size())); |
646 } | 646 } |
647 } | 647 } |
648 } | 648 } |
649 | 649 |
650 } } // namespace v8::internal | 650 } } // namespace v8::internal |
OLD | NEW |