Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(560)

Side by Side Diff: src/compiler.cc

Issue 917433007: Move SetFunctionInfo() from compiler.cc to objects.cc. Rationale: not related to generating code. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Created 5 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « no previous file | src/objects.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2012 the V8 project authors. All rights reserved. 1 // Copyright 2012 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/v8.h" 5 #include "src/v8.h"
6 6
7 #include "src/compiler.h" 7 #include "src/compiler.h"
8 8
9 #include "src/ast-numbering.h" 9 #include "src/ast-numbering.h"
10 #include "src/ast-this-access-visitor.h" 10 #include "src/ast-this-access-visitor.h"
(...skipping 591 matching lines...) Expand 10 before | Expand all | Expand 10 after
602 602
603 603
604 static void MaybeDisableOptimization(Handle<SharedFunctionInfo> shared_info, 604 static void MaybeDisableOptimization(Handle<SharedFunctionInfo> shared_info,
605 BailoutReason bailout_reason) { 605 BailoutReason bailout_reason) {
606 if (bailout_reason != kNoReason) { 606 if (bailout_reason != kNoReason) {
607 shared_info->DisableOptimization(bailout_reason); 607 shared_info->DisableOptimization(bailout_reason);
608 } 608 }
609 } 609 }
610 610
611 611
612 // Sets the function info on a function.
613 // The start_position points to the first '(' character after the function name
614 // in the full script source. When counting characters in the script source the
615 // the first character is number 0 (not 1).
616 static void SetFunctionInfo(Handle<SharedFunctionInfo> function_info,
617 FunctionLiteral* lit,
618 bool is_toplevel,
619 Handle<Script> script) {
620 function_info->set_length(lit->parameter_count());
621 if (FLAG_experimental_classes && IsSubclassConstructor(lit->kind())) {
622 function_info->set_internal_formal_parameter_count(lit->parameter_count() +
623 1);
624 } else {
625 function_info->set_internal_formal_parameter_count(lit->parameter_count());
626 }
627 function_info->set_script(*script);
628 function_info->set_function_token_position(lit->function_token_position());
629 function_info->set_start_position(lit->start_position());
630 function_info->set_end_position(lit->end_position());
631 function_info->set_is_expression(lit->is_expression());
632 function_info->set_is_anonymous(lit->is_anonymous());
633 function_info->set_is_toplevel(is_toplevel);
634 function_info->set_inferred_name(*lit->inferred_name());
635 function_info->set_allows_lazy_compilation(lit->AllowsLazyCompilation());
636 function_info->set_allows_lazy_compilation_without_context(
637 lit->AllowsLazyCompilationWithoutContext());
638 function_info->set_language_mode(lit->language_mode());
639 function_info->set_uses_arguments(lit->scope()->arguments() != NULL);
640 function_info->set_has_duplicate_parameters(lit->has_duplicate_parameters());
641 function_info->set_ast_node_count(lit->ast_node_count());
642 function_info->set_is_function(lit->is_function());
643 MaybeDisableOptimization(function_info, lit->dont_optimize_reason());
644 function_info->set_dont_cache(lit->flags()->Contains(kDontCache));
645 function_info->set_kind(lit->kind());
646 function_info->set_uses_super_property(lit->uses_super_property());
647 function_info->set_uses_super_constructor_call(
648 lit->uses_super_constructor_call());
649 function_info->set_asm_function(lit->scope()->asm_function());
650 }
651
652
653 static void RecordFunctionCompilation(Logger::LogEventsAndTags tag, 612 static void RecordFunctionCompilation(Logger::LogEventsAndTags tag,
654 CompilationInfo* info, 613 CompilationInfo* info,
655 Handle<SharedFunctionInfo> shared) { 614 Handle<SharedFunctionInfo> shared) {
656 // SharedFunctionInfo is passed separately, because if CompilationInfo 615 // SharedFunctionInfo is passed separately, because if CompilationInfo
657 // was created using Script object, it will not have it. 616 // was created using Script object, it will not have it.
658 617
659 // Log the code generation. If source information is available include 618 // Log the code generation. If source information is available include
660 // script name and line number. Check explicitly whether logging is 619 // script name and line number. Check explicitly whether logging is
661 // enabled as finding the line number is not free. 620 // enabled as finding the line number is not free.
662 if (info->isolate()->logger()->is_logging_code_events() || 621 if (info->isolate()->logger()->is_logging_code_events() ||
(...skipping 524 matching lines...) Expand 10 before | Expand all | Expand 10 after
1187 1146
1188 // Allocate function. 1147 // Allocate function.
1189 DCHECK(!info->code().is_null()); 1148 DCHECK(!info->code().is_null());
1190 result = isolate->factory()->NewSharedFunctionInfo( 1149 result = isolate->factory()->NewSharedFunctionInfo(
1191 lit->name(), lit->materialized_literal_count(), lit->kind(), 1150 lit->name(), lit->materialized_literal_count(), lit->kind(),
1192 info->code(), 1151 info->code(),
1193 ScopeInfo::Create(info->isolate(), info->zone(), info->scope()), 1152 ScopeInfo::Create(info->isolate(), info->zone(), info->scope()),
1194 info->feedback_vector()); 1153 info->feedback_vector());
1195 1154
1196 DCHECK_EQ(RelocInfo::kNoPosition, lit->function_token_position()); 1155 DCHECK_EQ(RelocInfo::kNoPosition, lit->function_token_position());
1197 SetFunctionInfo(result, lit, true, script); 1156 SharedFunctionInfo::InitFromFunctionLiteral(result, lit);
1157 result->set_script(*script);
1158 result->set_is_toplevel(true);
1198 1159
1199 Handle<String> script_name = script->name()->IsString() 1160 Handle<String> script_name = script->name()->IsString()
1200 ? Handle<String>(String::cast(script->name())) 1161 ? Handle<String>(String::cast(script->name()))
1201 : isolate->factory()->empty_string(); 1162 : isolate->factory()->empty_string();
1202 Logger::LogEventsAndTags log_tag = info->is_eval() 1163 Logger::LogEventsAndTags log_tag = info->is_eval()
1203 ? Logger::EVAL_TAG 1164 ? Logger::EVAL_TAG
1204 : Logger::ToNativeByScript(Logger::SCRIPT_TAG, *script); 1165 : Logger::ToNativeByScript(Logger::SCRIPT_TAG, *script);
1205 1166
1206 PROFILE(isolate, CodeCreateEvent( 1167 PROFILE(isolate, CodeCreateEvent(
1207 log_tag, *info->code(), *result, info, *script_name)); 1168 log_tag, *info->code(), *result, info, *script_name));
(...skipping 253 matching lines...) Expand 10 before | Expand all | Expand 10 after
1461 DCHECK(!info.code().is_null()); 1422 DCHECK(!info.code().is_null());
1462 scope_info = ScopeInfo::Create(info.isolate(), info.zone(), info.scope()); 1423 scope_info = ScopeInfo::Create(info.isolate(), info.zone(), info.scope());
1463 } else { 1424 } else {
1464 return Handle<SharedFunctionInfo>::null(); 1425 return Handle<SharedFunctionInfo>::null();
1465 } 1426 }
1466 1427
1467 // Create a shared function info object. 1428 // Create a shared function info object.
1468 Handle<SharedFunctionInfo> result = factory->NewSharedFunctionInfo( 1429 Handle<SharedFunctionInfo> result = factory->NewSharedFunctionInfo(
1469 literal->name(), literal->materialized_literal_count(), literal->kind(), 1430 literal->name(), literal->materialized_literal_count(), literal->kind(),
1470 info.code(), scope_info, info.feedback_vector()); 1431 info.code(), scope_info, info.feedback_vector());
1471 SetFunctionInfo(result, literal, false, script); 1432
1433 SharedFunctionInfo::InitFromFunctionLiteral(result, literal);
1434 result->set_script(*script);
1435 result->set_is_toplevel(false);
1436
1472 RecordFunctionCompilation(Logger::FUNCTION_TAG, &info, result); 1437 RecordFunctionCompilation(Logger::FUNCTION_TAG, &info, result);
1473 result->set_allows_lazy_compilation(allow_lazy); 1438 result->set_allows_lazy_compilation(allow_lazy);
1474 result->set_allows_lazy_compilation_without_context(allow_lazy_without_ctx); 1439 result->set_allows_lazy_compilation_without_context(allow_lazy_without_ctx);
1475 1440
1476 // Set the expected number of properties for instances and return 1441 // Set the expected number of properties for instances and return
1477 // the resulting function. 1442 // the resulting function.
1478 SetExpectedNofPropertiesFromEstimate(result, 1443 SetExpectedNofPropertiesFromEstimate(result,
1479 literal->expected_property_count()); 1444 literal->expected_property_count());
1480 live_edit_tracker.RecordFunctionInfo(result, literal, info.zone()); 1445 live_edit_tracker.RecordFunctionInfo(result, literal, info.zone());
1481 return result; 1446 return result;
(...skipping 138 matching lines...) Expand 10 before | Expand all | Expand 10 after
1620 } 1585 }
1621 1586
1622 1587
1623 #if DEBUG 1588 #if DEBUG
1624 void CompilationInfo::PrintAstForTesting() { 1589 void CompilationInfo::PrintAstForTesting() {
1625 PrintF("--- Source from AST ---\n%s\n", 1590 PrintF("--- Source from AST ---\n%s\n",
1626 PrettyPrinter(isolate(), zone()).PrintProgram(function())); 1591 PrettyPrinter(isolate(), zone()).PrintProgram(function()));
1627 } 1592 }
1628 #endif 1593 #endif
1629 } } // namespace v8::internal 1594 } } // namespace v8::internal
OLDNEW
« no previous file with comments | « no previous file | src/objects.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698