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

Side by Side Diff: src/compiler.cc

Issue 2121273002: Move compile and parse trace events to a separate category. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: rebase Created 4 years, 5 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 | « src/api.cc ('k') | src/full-codegen/full-codegen.cc » ('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/compiler.h" 5 #include "src/compiler.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 8
9 #include "src/asmjs/asm-js.h" 9 #include "src/asmjs/asm-js.h"
10 #include "src/asmjs/typing-asm.h" 10 #include "src/asmjs/typing-asm.h"
(...skipping 645 matching lines...) Expand 10 before | Expand all | Expand 10 after
656 if (!info->is_optimizing_from_bytecode()) { 656 if (!info->is_optimizing_from_bytecode()) {
657 if (!Compiler::ParseAndAnalyze(info->parse_info())) return false; 657 if (!Compiler::ParseAndAnalyze(info->parse_info())) return false;
658 EnsureFeedbackMetadata(info); 658 EnsureFeedbackMetadata(info);
659 } 659 }
660 660
661 JSFunction::EnsureLiterals(info->closure()); 661 JSFunction::EnsureLiterals(info->closure());
662 662
663 TimerEventScope<TimerEventRecompileSynchronous> timer(isolate); 663 TimerEventScope<TimerEventRecompileSynchronous> timer(isolate);
664 RuntimeCallTimerScope runtimeTimer(isolate, 664 RuntimeCallTimerScope runtimeTimer(isolate,
665 &RuntimeCallStats::RecompileSynchronous); 665 &RuntimeCallStats::RecompileSynchronous);
666 TRACE_EVENT0("v8", "V8.RecompileSynchronous"); 666 TRACE_EVENT0(TRACE_DISABLED_BY_DEFAULT("v8.compile"),
667 "V8.RecompileSynchronous");
667 668
668 if (job->CreateGraph() != CompilationJob::SUCCEEDED || 669 if (job->CreateGraph() != CompilationJob::SUCCEEDED ||
669 job->OptimizeGraph() != CompilationJob::SUCCEEDED || 670 job->OptimizeGraph() != CompilationJob::SUCCEEDED ||
670 job->GenerateCode() != CompilationJob::SUCCEEDED) { 671 job->GenerateCode() != CompilationJob::SUCCEEDED) {
671 if (FLAG_trace_opt) { 672 if (FLAG_trace_opt) {
672 PrintF("[aborted optimizing "); 673 PrintF("[aborted optimizing ");
673 info->closure()->ShortPrint(); 674 info->closure()->ShortPrint();
674 PrintF(" because: %s]\n", GetBailoutReason(info->bailout_reason())); 675 PrintF(" because: %s]\n", GetBailoutReason(info->bailout_reason()));
675 } 676 }
676 return false; 677 return false;
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
709 710
710 JSFunction::EnsureLiterals(info->closure()); 711 JSFunction::EnsureLiterals(info->closure());
711 712
712 // Reopen handles in the new CompilationHandleScope. 713 // Reopen handles in the new CompilationHandleScope.
713 info->ReopenHandlesInNewHandleScope(); 714 info->ReopenHandlesInNewHandleScope();
714 info->parse_info()->ReopenHandlesInNewHandleScope(); 715 info->parse_info()->ReopenHandlesInNewHandleScope();
715 716
716 TimerEventScope<TimerEventRecompileSynchronous> timer(info->isolate()); 717 TimerEventScope<TimerEventRecompileSynchronous> timer(info->isolate());
717 RuntimeCallTimerScope runtimeTimer(info->isolate(), 718 RuntimeCallTimerScope runtimeTimer(info->isolate(),
718 &RuntimeCallStats::RecompileSynchronous); 719 &RuntimeCallStats::RecompileSynchronous);
719 TRACE_EVENT0("v8", "V8.RecompileSynchronous"); 720 TRACE_EVENT0(TRACE_DISABLED_BY_DEFAULT("v8.compile"),
721 "V8.RecompileSynchronous");
720 722
721 if (job->CreateGraph() != CompilationJob::SUCCEEDED) return false; 723 if (job->CreateGraph() != CompilationJob::SUCCEEDED) return false;
722 isolate->optimizing_compile_dispatcher()->QueueForOptimization(job); 724 isolate->optimizing_compile_dispatcher()->QueueForOptimization(job);
723 725
724 if (FLAG_trace_concurrent_recompilation) { 726 if (FLAG_trace_concurrent_recompilation) {
725 PrintF(" ** Queued "); 727 PrintF(" ** Queued ");
726 info->closure()->ShortPrint(); 728 info->closure()->ShortPrint();
727 PrintF(" for concurrent optimization.\n"); 729 PrintF(" for concurrent optimization.\n");
728 } 730 }
729 return true; 731 return true;
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after
777 const int kMaxOptCount = 779 const int kMaxOptCount =
778 FLAG_deopt_every_n_times == 0 ? FLAG_max_opt_count : 1000; 780 FLAG_deopt_every_n_times == 0 ? FLAG_max_opt_count : 1000;
779 if (info->shared_info()->opt_count() > kMaxOptCount) { 781 if (info->shared_info()->opt_count() > kMaxOptCount) {
780 info->AbortOptimization(kOptimizedTooManyTimes); 782 info->AbortOptimization(kOptimizedTooManyTimes);
781 return MaybeHandle<Code>(); 783 return MaybeHandle<Code>();
782 } 784 }
783 785
784 CanonicalHandleScope canonical(isolate); 786 CanonicalHandleScope canonical(isolate);
785 TimerEventScope<TimerEventOptimizeCode> optimize_code_timer(isolate); 787 TimerEventScope<TimerEventOptimizeCode> optimize_code_timer(isolate);
786 RuntimeCallTimerScope runtimeTimer(isolate, &RuntimeCallStats::OptimizeCode); 788 RuntimeCallTimerScope runtimeTimer(isolate, &RuntimeCallStats::OptimizeCode);
787 TRACE_EVENT0("v8", "V8.OptimizeCode"); 789 TRACE_EVENT0(TRACE_DISABLED_BY_DEFAULT("v8.compile"), "V8.OptimizeCode");
788 790
789 // TurboFan can optimize directly from existing bytecode. 791 // TurboFan can optimize directly from existing bytecode.
790 if (FLAG_turbo_from_bytecode && use_turbofan && 792 if (FLAG_turbo_from_bytecode && use_turbofan &&
791 info->shared_info()->HasBytecodeArray()) { 793 info->shared_info()->HasBytecodeArray()) {
792 info->MarkAsOptimizeFromBytecode(); 794 info->MarkAsOptimizeFromBytecode();
793 } 795 }
794 796
795 if (IsEvalToplevel(shared)) { 797 if (IsEvalToplevel(shared)) {
796 parse_info->set_eval(); 798 parse_info->set_eval();
797 if (function->context()->IsNativeContext()) parse_info->set_global(); 799 if (function->context()->IsNativeContext()) parse_info->set_global();
(...skipping 169 matching lines...) Expand 10 before | Expand all | Expand 10 after
967 return info.code(); 969 return info.code();
968 } 970 }
969 971
970 MaybeHandle<Code> GetLazyCode(Handle<JSFunction> function) { 972 MaybeHandle<Code> GetLazyCode(Handle<JSFunction> function) {
971 Isolate* isolate = function->GetIsolate(); 973 Isolate* isolate = function->GetIsolate();
972 DCHECK(!isolate->has_pending_exception()); 974 DCHECK(!isolate->has_pending_exception());
973 DCHECK(!function->is_compiled()); 975 DCHECK(!function->is_compiled());
974 TimerEventScope<TimerEventCompileCode> compile_timer(isolate); 976 TimerEventScope<TimerEventCompileCode> compile_timer(isolate);
975 RuntimeCallTimerScope runtimeTimer(isolate, 977 RuntimeCallTimerScope runtimeTimer(isolate,
976 &RuntimeCallStats::CompileCodeLazy); 978 &RuntimeCallStats::CompileCodeLazy);
977 TRACE_EVENT0("v8", "V8.CompileCode"); 979 TRACE_EVENT0(TRACE_DISABLED_BY_DEFAULT("v8.compile"), "V8.CompileCode");
978 AggregatedHistogramTimerScope timer(isolate->counters()->compile_lazy()); 980 AggregatedHistogramTimerScope timer(isolate->counters()->compile_lazy());
979 981
980 if (FLAG_turbo_cache_shared_code) { 982 if (FLAG_turbo_cache_shared_code) {
981 Handle<Code> cached_code; 983 Handle<Code> cached_code;
982 if (GetCodeFromOptimizedCodeMap(function, BailoutId::None()) 984 if (GetCodeFromOptimizedCodeMap(function, BailoutId::None())
983 .ToHandle(&cached_code)) { 985 .ToHandle(&cached_code)) {
984 if (FLAG_trace_opt) { 986 if (FLAG_trace_opt) {
985 PrintF("[found optimized code for "); 987 PrintF("[found optimized code for ");
986 function->ShortPrint(); 988 function->ShortPrint();
987 PrintF(" during unoptimized compile]\n"); 989 PrintF(" during unoptimized compile]\n");
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
1022 code, scope_info); 1024 code, scope_info);
1023 SharedFunctionInfo::InitFromFunctionLiteral(result, literal); 1025 SharedFunctionInfo::InitFromFunctionLiteral(result, literal);
1024 SharedFunctionInfo::SetScript(result, script); 1026 SharedFunctionInfo::SetScript(result, script);
1025 return result; 1027 return result;
1026 } 1028 }
1027 1029
1028 Handle<SharedFunctionInfo> CompileToplevel(CompilationInfo* info) { 1030 Handle<SharedFunctionInfo> CompileToplevel(CompilationInfo* info) {
1029 Isolate* isolate = info->isolate(); 1031 Isolate* isolate = info->isolate();
1030 TimerEventScope<TimerEventCompileCode> timer(isolate); 1032 TimerEventScope<TimerEventCompileCode> timer(isolate);
1031 RuntimeCallTimerScope runtimeTimer(isolate, &RuntimeCallStats::CompileCode); 1033 RuntimeCallTimerScope runtimeTimer(isolate, &RuntimeCallStats::CompileCode);
1032 TRACE_EVENT0("v8", "V8.CompileCode"); 1034 TRACE_EVENT0(TRACE_DISABLED_BY_DEFAULT("v8.compile"), "V8.CompileCode");
1033 PostponeInterruptsScope postpone(isolate); 1035 PostponeInterruptsScope postpone(isolate);
1034 DCHECK(!isolate->native_context().is_null()); 1036 DCHECK(!isolate->native_context().is_null());
1035 ParseInfo* parse_info = info->parse_info(); 1037 ParseInfo* parse_info = info->parse_info();
1036 Handle<Script> script = parse_info->script(); 1038 Handle<Script> script = parse_info->script();
1037 1039
1038 // TODO(svenpanne) Obscure place for this, perhaps move to OnBeforeCompile? 1040 // TODO(svenpanne) Obscure place for this, perhaps move to OnBeforeCompile?
1039 FixedArray* array = isolate->native_context()->embedder_data(); 1041 FixedArray* array = isolate->native_context()->embedder_data();
1040 script->set_context_data(array->get(v8::Context::kDebugIdIndex)); 1042 script->set_context_data(array->get(v8::Context::kDebugIdIndex));
1041 1043
1042 isolate->debug()->OnBeforeCompile(script); 1044 isolate->debug()->OnBeforeCompile(script);
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after
1089 // Measure how long it takes to do the compilation; only take the 1091 // Measure how long it takes to do the compilation; only take the
1090 // rest of the function into account to avoid overlap with the 1092 // rest of the function into account to avoid overlap with the
1091 // parsing statistics. 1093 // parsing statistics.
1092 RuntimeCallTimerScope runtimeTimer( 1094 RuntimeCallTimerScope runtimeTimer(
1093 isolate, parse_info->is_eval() ? &RuntimeCallStats::CompileEval 1095 isolate, parse_info->is_eval() ? &RuntimeCallStats::CompileEval
1094 : &RuntimeCallStats::Compile); 1096 : &RuntimeCallStats::Compile);
1095 HistogramTimer* rate = parse_info->is_eval() 1097 HistogramTimer* rate = parse_info->is_eval()
1096 ? info->isolate()->counters()->compile_eval() 1098 ? info->isolate()->counters()->compile_eval()
1097 : info->isolate()->counters()->compile(); 1099 : info->isolate()->counters()->compile();
1098 HistogramTimerScope timer(rate); 1100 HistogramTimerScope timer(rate);
1099 TRACE_EVENT0("v8", parse_info->is_eval() ? "V8.CompileEval" : "V8.Compile"); 1101 TRACE_EVENT0(TRACE_DISABLED_BY_DEFAULT("v8.compile"),
1102 parse_info->is_eval() ? "V8.CompileEval" : "V8.Compile");
1100 1103
1101 // Allocate a shared function info object. 1104 // Allocate a shared function info object.
1102 DCHECK_EQ(kNoSourcePosition, lit->function_token_position()); 1105 DCHECK_EQ(kNoSourcePosition, lit->function_token_position());
1103 result = NewSharedFunctionInfoForLiteral(isolate, lit, script); 1106 result = NewSharedFunctionInfoForLiteral(isolate, lit, script);
1104 result->set_is_toplevel(true); 1107 result->set_is_toplevel(true);
1105 if (parse_info->is_eval()) { 1108 if (parse_info->is_eval()) {
1106 // Eval scripts cannot be (re-)compiled without context. 1109 // Eval scripts cannot be (re-)compiled without context.
1107 result->set_allows_lazy_compilation_without_context(false); 1110 result->set_allows_lazy_compilation_without_context(false);
1108 } 1111 }
1109 parse_info->set_shared_info(result); 1112 parse_info->set_shared_info(result);
(...skipping 379 matching lines...) Expand 10 before | Expand all | Expand 10 after
1489 maybe_result = compilation_cache->LookupScript( 1492 maybe_result = compilation_cache->LookupScript(
1490 source, script_name, line_offset, column_offset, resource_options, 1493 source, script_name, line_offset, column_offset, resource_options,
1491 context, language_mode); 1494 context, language_mode);
1492 if (maybe_result.is_null() && FLAG_serialize_toplevel && 1495 if (maybe_result.is_null() && FLAG_serialize_toplevel &&
1493 compile_options == ScriptCompiler::kConsumeCodeCache && 1496 compile_options == ScriptCompiler::kConsumeCodeCache &&
1494 !isolate->debug()->is_loaded()) { 1497 !isolate->debug()->is_loaded()) {
1495 // Then check cached code provided by embedder. 1498 // Then check cached code provided by embedder.
1496 HistogramTimerScope timer(isolate->counters()->compile_deserialize()); 1499 HistogramTimerScope timer(isolate->counters()->compile_deserialize());
1497 RuntimeCallTimerScope runtimeTimer(isolate, 1500 RuntimeCallTimerScope runtimeTimer(isolate,
1498 &RuntimeCallStats::CompileDeserialize); 1501 &RuntimeCallStats::CompileDeserialize);
1499 TRACE_EVENT0("v8", "V8.CompileDeserialize"); 1502 TRACE_EVENT0(TRACE_DISABLED_BY_DEFAULT("v8.compile"),
1503 "V8.CompileDeserialize");
1500 Handle<SharedFunctionInfo> result; 1504 Handle<SharedFunctionInfo> result;
1501 if (CodeSerializer::Deserialize(isolate, *cached_data, source) 1505 if (CodeSerializer::Deserialize(isolate, *cached_data, source)
1502 .ToHandle(&result)) { 1506 .ToHandle(&result)) {
1503 // Promote to per-isolate compilation cache. 1507 // Promote to per-isolate compilation cache.
1504 compilation_cache->PutScript(source, context, language_mode, result); 1508 compilation_cache->PutScript(source, context, language_mode, result);
1505 return result; 1509 return result;
1506 } 1510 }
1507 // Deserializer failed. Fall through to compile. 1511 // Deserializer failed. Fall through to compile.
1508 } 1512 }
1509 } 1513 }
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after
1562 static_cast<LanguageMode>(parse_info.language_mode() | language_mode)); 1566 static_cast<LanguageMode>(parse_info.language_mode() | language_mode));
1563 result = CompileToplevel(&info); 1567 result = CompileToplevel(&info);
1564 if (extension == NULL && !result.is_null()) { 1568 if (extension == NULL && !result.is_null()) {
1565 compilation_cache->PutScript(source, context, language_mode, result); 1569 compilation_cache->PutScript(source, context, language_mode, result);
1566 if (FLAG_serialize_toplevel && 1570 if (FLAG_serialize_toplevel &&
1567 compile_options == ScriptCompiler::kProduceCodeCache) { 1571 compile_options == ScriptCompiler::kProduceCodeCache) {
1568 HistogramTimerScope histogram_timer( 1572 HistogramTimerScope histogram_timer(
1569 isolate->counters()->compile_serialize()); 1573 isolate->counters()->compile_serialize());
1570 RuntimeCallTimerScope runtimeTimer(isolate, 1574 RuntimeCallTimerScope runtimeTimer(isolate,
1571 &RuntimeCallStats::CompileSerialize); 1575 &RuntimeCallStats::CompileSerialize);
1572 TRACE_EVENT0("v8", "V8.CompileSerialize"); 1576 TRACE_EVENT0(TRACE_DISABLED_BY_DEFAULT("v8.compile"),
1577 "V8.CompileSerialize");
1573 *cached_data = CodeSerializer::Serialize(isolate, result, source); 1578 *cached_data = CodeSerializer::Serialize(isolate, result, source);
1574 if (FLAG_profile_deserialization) { 1579 if (FLAG_profile_deserialization) {
1575 PrintF("[Compiling and serializing took %0.3f ms]\n", 1580 PrintF("[Compiling and serializing took %0.3f ms]\n",
1576 timer.Elapsed().InMillisecondsF()); 1581 timer.Elapsed().InMillisecondsF());
1577 } 1582 }
1578 } 1583 }
1579 } 1584 }
1580 1585
1581 if (result.is_null()) { 1586 if (result.is_null()) {
1582 isolate->ReportPendingMessages(); 1587 isolate->ReportPendingMessages();
(...skipping 96 matching lines...) Expand 10 before | Expand all | Expand 10 after
1679 // Consider compiling eagerly when targeting the code cache. 1684 // Consider compiling eagerly when targeting the code cache.
1680 lazy &= !(FLAG_serialize_eager && info.will_serialize()); 1685 lazy &= !(FLAG_serialize_eager && info.will_serialize());
1681 1686
1682 // Consider compiling eagerly when compiling bytecode for Ignition. 1687 // Consider compiling eagerly when compiling bytecode for Ignition.
1683 lazy &= 1688 lazy &=
1684 !(FLAG_ignition && FLAG_ignition_eager && !isolate->serializer_enabled()); 1689 !(FLAG_ignition && FLAG_ignition_eager && !isolate->serializer_enabled());
1685 1690
1686 // Generate code 1691 // Generate code
1687 TimerEventScope<TimerEventCompileCode> timer(isolate); 1692 TimerEventScope<TimerEventCompileCode> timer(isolate);
1688 RuntimeCallTimerScope runtimeTimer(isolate, &RuntimeCallStats::CompileCode); 1693 RuntimeCallTimerScope runtimeTimer(isolate, &RuntimeCallStats::CompileCode);
1689 TRACE_EVENT0("v8", "V8.CompileCode"); 1694 TRACE_EVENT0(TRACE_DISABLED_BY_DEFAULT("v8.compile"), "V8.CompileCode");
1690 if (lazy) { 1695 if (lazy) {
1691 info.SetCode(isolate->builtins()->CompileLazy()); 1696 info.SetCode(isolate->builtins()->CompileLazy());
1692 } else if (Renumber(info.parse_info()) && GenerateUnoptimizedCode(&info)) { 1697 } else if (Renumber(info.parse_info()) && GenerateUnoptimizedCode(&info)) {
1693 // Code generation will ensure that the feedback vector is present and 1698 // Code generation will ensure that the feedback vector is present and
1694 // appropriately sized. 1699 // appropriately sized.
1695 DCHECK(!info.code().is_null()); 1700 DCHECK(!info.code().is_null());
1696 if (literal->should_eager_compile() && 1701 if (literal->should_eager_compile() &&
1697 literal->should_be_used_once_hint()) { 1702 literal->should_be_used_once_hint()) {
1698 info.code()->MarkToBeExecutedOnce(isolate); 1703 info.code()->MarkToBeExecutedOnce(isolate);
1699 } 1704 }
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after
1754 void Compiler::FinalizeCompilationJob(CompilationJob* raw_job) { 1759 void Compiler::FinalizeCompilationJob(CompilationJob* raw_job) {
1755 // Take ownership of compilation job. Deleting job also tears down the zone. 1760 // Take ownership of compilation job. Deleting job also tears down the zone.
1756 base::SmartPointer<CompilationJob> job(raw_job); 1761 base::SmartPointer<CompilationJob> job(raw_job);
1757 CompilationInfo* info = job->info(); 1762 CompilationInfo* info = job->info();
1758 Isolate* isolate = info->isolate(); 1763 Isolate* isolate = info->isolate();
1759 1764
1760 VMState<COMPILER> state(isolate); 1765 VMState<COMPILER> state(isolate);
1761 TimerEventScope<TimerEventRecompileSynchronous> timer(info->isolate()); 1766 TimerEventScope<TimerEventRecompileSynchronous> timer(info->isolate());
1762 RuntimeCallTimerScope runtimeTimer(isolate, 1767 RuntimeCallTimerScope runtimeTimer(isolate,
1763 &RuntimeCallStats::RecompileSynchronous); 1768 &RuntimeCallStats::RecompileSynchronous);
1764 TRACE_EVENT0("v8", "V8.RecompileSynchronous"); 1769 TRACE_EVENT0(TRACE_DISABLED_BY_DEFAULT("v8.compile"),
1770 "V8.RecompileSynchronous");
1765 1771
1766 Handle<SharedFunctionInfo> shared = info->shared_info(); 1772 Handle<SharedFunctionInfo> shared = info->shared_info();
1767 shared->code()->set_profiler_ticks(0); 1773 shared->code()->set_profiler_ticks(0);
1768 1774
1769 DCHECK(!shared->HasDebugInfo()); 1775 DCHECK(!shared->HasDebugInfo());
1770 1776
1771 // 1) Optimization on the concurrent thread may have failed. 1777 // 1) Optimization on the concurrent thread may have failed.
1772 // 2) The function may have already been optimized by OSR. Simply continue. 1778 // 2) The function may have already been optimized by OSR. Simply continue.
1773 // Except when OSR already disabled optimization for some reason. 1779 // Except when OSR already disabled optimization for some reason.
1774 // 3) The code may have already been invalidated due to dependency change. 1780 // 3) The code may have already been invalidated due to dependency change.
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after
1825 DCHECK(shared->is_compiled()); 1831 DCHECK(shared->is_compiled());
1826 function->set_literals(cached.literals); 1832 function->set_literals(cached.literals);
1827 } else if (shared->is_compiled()) { 1833 } else if (shared->is_compiled()) {
1828 // TODO(mvstanton): pass pretenure flag to EnsureLiterals. 1834 // TODO(mvstanton): pass pretenure flag to EnsureLiterals.
1829 JSFunction::EnsureLiterals(function); 1835 JSFunction::EnsureLiterals(function);
1830 } 1836 }
1831 } 1837 }
1832 1838
1833 } // namespace internal 1839 } // namespace internal
1834 } // namespace v8 1840 } // namespace v8
OLDNEW
« no previous file with comments | « src/api.cc ('k') | src/full-codegen/full-codegen.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698