 Chromium Code Reviews
 Chromium Code Reviews Issue 2645403002:
  [Compiler] Enable use of seperate zones for parsing and compiling.  (Closed)
    
  
    Issue 2645403002:
  [Compiler] Enable use of seperate zones for parsing and compiling.  (Closed) 
  | OLD | NEW | 
|---|---|
| 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 #include <memory> | 8 #include <memory> | 
| 9 | 9 | 
| 10 #include "src/asmjs/asm-js.h" | 10 #include "src/asmjs/asm-js.h" | 
| (...skipping 357 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 368 // Checks whether top level functions should be passed by the filter. | 368 // Checks whether top level functions should be passed by the filter. | 
| 369 if (shared->is_toplevel()) { | 369 if (shared->is_toplevel()) { | 
| 370 Vector<const char> filter = CStrVector(FLAG_ignition_filter); | 370 Vector<const char> filter = CStrVector(FLAG_ignition_filter); | 
| 371 return (filter.length() == 0) || (filter.length() == 1 && filter[0] == '*'); | 371 return (filter.length() == 0) || (filter.length() == 1 && filter[0] == '*'); | 
| 372 } | 372 } | 
| 373 | 373 | 
| 374 // Finally respect the filter. | 374 // Finally respect the filter. | 
| 375 return shared->PassesFilter(FLAG_ignition_filter); | 375 return shared->PassesFilter(FLAG_ignition_filter); | 
| 376 } | 376 } | 
| 377 | 377 | 
| 378 bool UseAsmWasm(DeclarationScope* scope, Handle<SharedFunctionInfo> shared_info, | |
| 379 bool is_debug) { | |
| 380 return FLAG_validate_asm && scope->asm_module() && | |
| 381 !shared_info->is_asm_wasm_broken() && !is_debug; | |
| 382 } | |
| 383 | |
| 378 CompilationJob* GetUnoptimizedCompilationJob(CompilationInfo* info) { | 384 CompilationJob* GetUnoptimizedCompilationJob(CompilationInfo* info) { | 
| 379 // Function should have been parsed and analyzed before creating a compilation | 385 // Function should have been parsed and analyzed before creating a compilation | 
| 380 // job. | 386 // job. | 
| 381 DCHECK_NOT_NULL(info->literal()); | 387 DCHECK_NOT_NULL(info->literal()); | 
| 382 DCHECK_NOT_NULL(info->scope()); | 388 DCHECK_NOT_NULL(info->scope()); | 
| 383 | 389 | 
| 384 if (ShouldUseIgnition(info)) { | 390 if (ShouldUseIgnition(info)) { | 
| 385 return interpreter::Interpreter::NewCompilationJob(info); | 391 return interpreter::Interpreter::NewCompilationJob(info); | 
| 386 } else { | 392 } else { | 
| 387 return FullCodeGenerator::NewCompilationJob(info); | 393 return FullCodeGenerator::NewCompilationJob(info); | 
| (...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 455 return false; | 461 return false; | 
| 456 } | 462 } | 
| 457 if (!parse_info->shared_info().is_null()) { | 463 if (!parse_info->shared_info().is_null()) { | 
| 458 SetSharedFunctionFlagsFromLiteral(parse_info->literal(), | 464 SetSharedFunctionFlagsFromLiteral(parse_info->literal(), | 
| 459 parse_info->shared_info()); | 465 parse_info->shared_info()); | 
| 460 } | 466 } | 
| 461 return true; | 467 return true; | 
| 462 } | 468 } | 
| 463 | 469 | 
| 464 bool GenerateUnoptimizedCode(CompilationInfo* info) { | 470 bool GenerateUnoptimizedCode(CompilationInfo* info) { | 
| 465 if (FLAG_validate_asm && info->scope()->asm_module() && | 471 if (UseAsmWasm(info->scope(), info->shared_info(), info->is_debug())) { | 
| 466 !info->shared_info()->is_asm_wasm_broken() && !info->is_debug()) { | |
| 467 EnsureFeedbackMetadata(info); | 472 EnsureFeedbackMetadata(info); | 
| 468 MaybeHandle<FixedArray> wasm_data; | 473 MaybeHandle<FixedArray> wasm_data; | 
| 469 wasm_data = AsmJs::CompileAsmViaWasm(info); | 474 wasm_data = AsmJs::CompileAsmViaWasm(info); | 
| 470 if (!wasm_data.is_null()) { | 475 if (!wasm_data.is_null()) { | 
| 471 info->shared_info()->set_asm_wasm_data(*wasm_data.ToHandleChecked()); | 476 info->shared_info()->set_asm_wasm_data(*wasm_data.ToHandleChecked()); | 
| 472 info->SetCode(info->isolate()->builtins()->InstantiateAsmJs()); | 477 info->SetCode(info->isolate()->builtins()->InstantiateAsmJs()); | 
| 473 InstallUnoptimizedCode(info); | 478 InstallUnoptimizedCode(info); | 
| 474 return true; | 479 return true; | 
| 475 } | 480 } | 
| 476 } | 481 } | 
| (...skipping 28 matching lines...) Expand all Loading... | |
| 505 | 510 | 
| 506 ParseInfo parse_info(script); | 511 ParseInfo parse_info(script); | 
| 507 parse_info.set_literal(literal); | 512 parse_info.set_literal(literal); | 
| 508 parse_info.set_shared_info(shared); | 513 parse_info.set_shared_info(shared); | 
| 509 parse_info.set_function_literal_id(shared->function_literal_id()); | 514 parse_info.set_function_literal_id(shared->function_literal_id()); | 
| 510 parse_info.set_language_mode(literal->scope()->language_mode()); | 515 parse_info.set_language_mode(literal->scope()->language_mode()); | 
| 511 parse_info.set_ast_value_factory( | 516 parse_info.set_ast_value_factory( | 
| 512 outer_info->parse_info()->ast_value_factory()); | 517 outer_info->parse_info()->ast_value_factory()); | 
| 513 parse_info.set_ast_value_factory_owned(false); | 518 parse_info.set_ast_value_factory_owned(false); | 
| 514 | 519 | 
| 515 CompilationInfo info(&parse_info, Handle<JSFunction>::null()); | 520 Zone compile_zone(isolate->allocator(), ZONE_NAME); | 
| 521 CompilationInfo info(&compile_zone, &parse_info, | |
| 522 Handle<JSFunction>::null()); | |
| 516 if (outer_info->will_serialize()) info.PrepareForSerializing(); | 523 if (outer_info->will_serialize()) info.PrepareForSerializing(); | 
| 517 if (outer_info->is_debug()) info.MarkAsDebug(); | 524 if (outer_info->is_debug()) info.MarkAsDebug(); | 
| 518 | 525 | 
| 519 if (!GenerateUnoptimizedCode(&info)) { | 526 if (!GenerateUnoptimizedCode(&info)) { | 
| 520 if (!isolate->has_pending_exception()) isolate->StackOverflow(); | 527 if (!isolate->has_pending_exception()) isolate->StackOverflow(); | 
| 521 return false; | 528 return false; | 
| 522 } | 529 } | 
| 523 | 530 | 
| 524 DCHECK(!info.code().is_null()); | 531 DCHECK(!info.code().is_null()); | 
| 525 RecordFunctionCompilation(CodeEventListener::FUNCTION_TAG, &info); | 532 RecordFunctionCompilation(CodeEventListener::FUNCTION_TAG, &info); | 
| 526 if (literal->should_be_used_once_hint()) { | 533 if (literal->should_be_used_once_hint()) { | 
| 527 info.code()->MarkToBeExecutedOnce(isolate); | 534 info.code()->MarkToBeExecutedOnce(isolate); | 
| 528 } | 535 } | 
| 529 } | 536 } | 
| 530 return true; | 537 return true; | 
| 531 } | 538 } | 
| 532 | 539 | 
| 540 bool InnerFunctionIsAsmModule( | |
| 541 ThreadedList<ThreadedListZoneEntry<FunctionLiteral*>>* literals) { | |
| 542 for (auto it : *literals) { | |
| 543 FunctionLiteral* literal = it->value(); | |
| 544 if (literal->scope()->IsAsmModule()) return true; | |
| 545 } | |
| 546 return false; | |
| 547 } | |
| 548 | |
| 533 bool CompileUnoptimizedCode(CompilationInfo* info) { | 549 bool CompileUnoptimizedCode(CompilationInfo* info) { | 
| 534 Isolate* isolate = info->isolate(); | 550 Isolate* isolate = info->isolate(); | 
| 535 DCHECK(AllowCompilation::IsAllowed(isolate)); | 551 DCHECK(AllowCompilation::IsAllowed(isolate)); | 
| 536 | 552 | 
| 537 Compiler::EagerInnerFunctionLiterals inner_literals; | 553 Compiler::EagerInnerFunctionLiterals inner_literals; | 
| 538 if (!Compiler::Analyze(info->parse_info(), &inner_literals) || | 554 if (!Compiler::Analyze(info->parse_info(), &inner_literals)) { | 
| 539 !CompileUnoptimizedInnerFunctions(&inner_literals, info) || | 555 if (!isolate->has_pending_exception()) isolate->StackOverflow(); | 
| 556 return false; | |
| 557 } | |
| 558 | |
| 559 // TODO(rmcilroy,bradnelson): Remove this UseAsmWasm check once the asm-wasm | |
| 560 // builder doesn't do parsing when visiting function declarations. | |
| 561 if (!info->scope()->IsAsmModule() && | |
| 562 !InnerFunctionIsAsmModule(&inner_literals)) { | |
| 
rmcilroy
2017/01/23 15:54:35
I'm going to send out a separate mail to figure ou
 | |
| 563 // Seal the parse zone so that it can be shared by parallel inner function | |
| 564 // compilation jobs. | |
| 565 DCHECK_NE(info->parse_info()->zone(), info->zone()); | |
| 566 info->parse_info()->zone()->Seal(); | |
| 567 } | |
| 568 | |
| 569 if (!CompileUnoptimizedInnerFunctions(&inner_literals, info) || | |
| 540 !GenerateUnoptimizedCode(info)) { | 570 !GenerateUnoptimizedCode(info)) { | 
| 541 if (!isolate->has_pending_exception()) isolate->StackOverflow(); | 571 if (!isolate->has_pending_exception()) isolate->StackOverflow(); | 
| 542 return false; | 572 return false; | 
| 543 } | 573 } | 
| 544 | 574 | 
| 545 return true; | 575 return true; | 
| 546 } | 576 } | 
| 547 | 577 | 
| 548 void EnsureSharedFunctionInfosArrayOnScript(ParseInfo* info) { | 578 void EnsureSharedFunctionInfosArrayOnScript(ParseInfo* info) { | 
| 549 DCHECK(info->is_toplevel()); | 579 DCHECK(info->is_toplevel()); | 
| (...skipping 331 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 881 } | 911 } | 
| 882 info->closure()->ReplaceCode(shared->code()); | 912 info->closure()->ReplaceCode(shared->code()); | 
| 883 return CompilationJob::FAILED; | 913 return CompilationJob::FAILED; | 
| 884 } | 914 } | 
| 885 | 915 | 
| 886 MaybeHandle<Code> GetBaselineCode(Handle<JSFunction> function) { | 916 MaybeHandle<Code> GetBaselineCode(Handle<JSFunction> function) { | 
| 887 Isolate* isolate = function->GetIsolate(); | 917 Isolate* isolate = function->GetIsolate(); | 
| 888 VMState<COMPILER> state(isolate); | 918 VMState<COMPILER> state(isolate); | 
| 889 PostponeInterruptsScope postpone(isolate); | 919 PostponeInterruptsScope postpone(isolate); | 
| 890 ParseInfo parse_info(handle(function->shared())); | 920 ParseInfo parse_info(handle(function->shared())); | 
| 891 CompilationInfo info(&parse_info, function); | 921 Zone compile_zone(isolate->allocator(), ZONE_NAME); | 
| 922 CompilationInfo info(&compile_zone, &parse_info, function); | |
| 892 | 923 | 
| 893 DCHECK(function->shared()->is_compiled()); | 924 DCHECK(function->shared()->is_compiled()); | 
| 894 | 925 | 
| 895 // Function no longer needs to be tiered up | 926 // Function no longer needs to be tiered up | 
| 896 function->shared()->set_marked_for_tier_up(false); | 927 function->shared()->set_marked_for_tier_up(false); | 
| 897 | 928 | 
| 898 // Reset profiler ticks, function is no longer considered hot. | 929 // Reset profiler ticks, function is no longer considered hot. | 
| 899 if (function->shared()->HasBytecodeArray()) { | 930 if (function->shared()->HasBytecodeArray()) { | 
| 900 function->shared()->set_profiler_ticks(0); | 931 function->shared()->set_profiler_ticks(0); | 
| 901 } | 932 } | 
| (...skipping 112 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1014 return Handle<Code>(function->shared()->code()); | 1045 return Handle<Code>(function->shared()->code()); | 
| 1015 } | 1046 } | 
| 1016 | 1047 | 
| 1017 if (function->shared()->HasBytecodeArray()) { | 1048 if (function->shared()->HasBytecodeArray()) { | 
| 1018 Handle<Code> entry = isolate->builtins()->InterpreterEntryTrampoline(); | 1049 Handle<Code> entry = isolate->builtins()->InterpreterEntryTrampoline(); | 
| 1019 function->shared()->ReplaceCode(*entry); | 1050 function->shared()->ReplaceCode(*entry); | 
| 1020 return entry; | 1051 return entry; | 
| 1021 } | 1052 } | 
| 1022 | 1053 | 
| 1023 ParseInfo parse_info(handle(function->shared())); | 1054 ParseInfo parse_info(handle(function->shared())); | 
| 1024 CompilationInfo info(&parse_info, function); | 1055 Zone compile_zone(isolate->allocator(), ZONE_NAME); | 
| 1056 CompilationInfo info(&compile_zone, &parse_info, function); | |
| 1025 Handle<Code> result; | 1057 Handle<Code> result; | 
| 1026 ASSIGN_RETURN_ON_EXCEPTION(isolate, result, GetUnoptimizedCode(&info), Code); | 1058 ASSIGN_RETURN_ON_EXCEPTION(isolate, result, GetUnoptimizedCode(&info), Code); | 
| 1027 | 1059 | 
| 1028 if (FLAG_always_opt && !info.shared_info()->HasAsmWasmData()) { | 1060 if (FLAG_always_opt && !info.shared_info()->HasAsmWasmData()) { | 
| 1029 Handle<Code> opt_code; | 1061 Handle<Code> opt_code; | 
| 1030 if (GetOptimizedCode(function, Compiler::NOT_CONCURRENT) | 1062 if (GetOptimizedCode(function, Compiler::NOT_CONCURRENT) | 
| 1031 .ToHandle(&opt_code)) { | 1063 .ToHandle(&opt_code)) { | 
| 1032 result = opt_code; | 1064 result = opt_code; | 
| 1033 } | 1065 } | 
| 1034 } | 1066 } | 
| (...skipping 158 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1193 if (!GetOptimizedCode(function, mode).ToHandle(&code)) { | 1225 if (!GetOptimizedCode(function, mode).ToHandle(&code)) { | 
| 1194 // Optimization failed, get unoptimized code. | 1226 // Optimization failed, get unoptimized code. | 
| 1195 DCHECK(!isolate->has_pending_exception()); | 1227 DCHECK(!isolate->has_pending_exception()); | 
| 1196 if (function->shared()->is_compiled()) { | 1228 if (function->shared()->is_compiled()) { | 
| 1197 code = handle(function->shared()->code(), isolate); | 1229 code = handle(function->shared()->code(), isolate); | 
| 1198 } else if (function->shared()->HasBytecodeArray()) { | 1230 } else if (function->shared()->HasBytecodeArray()) { | 
| 1199 code = isolate->builtins()->InterpreterEntryTrampoline(); | 1231 code = isolate->builtins()->InterpreterEntryTrampoline(); | 
| 1200 function->shared()->ReplaceCode(*code); | 1232 function->shared()->ReplaceCode(*code); | 
| 1201 } else { | 1233 } else { | 
| 1202 ParseInfo parse_info(handle(function->shared())); | 1234 ParseInfo parse_info(handle(function->shared())); | 
| 1203 CompilationInfo info(&parse_info, function); | 1235 Zone compile_zone(isolate->allocator(), ZONE_NAME); | 
| 1236 CompilationInfo info(&compile_zone, &parse_info, function); | |
| 1204 if (!GetUnoptimizedCode(&info).ToHandle(&code)) { | 1237 if (!GetUnoptimizedCode(&info).ToHandle(&code)) { | 
| 1205 return false; | 1238 return false; | 
| 1206 } | 1239 } | 
| 1207 } | 1240 } | 
| 1208 } | 1241 } | 
| 1209 | 1242 | 
| 1210 // Install code on closure. | 1243 // Install code on closure. | 
| 1211 function->ReplaceCode(*code); | 1244 function->ReplaceCode(*code); | 
| 1212 JSFunction::EnsureLiterals(function); | 1245 JSFunction::EnsureLiterals(function); | 
| 1213 | 1246 | 
| 1214 // Check postconditions on success. | 1247 // Check postconditions on success. | 
| 1215 DCHECK(!isolate->has_pending_exception()); | 1248 DCHECK(!isolate->has_pending_exception()); | 
| 1216 DCHECK(function->shared()->is_compiled()); | 1249 DCHECK(function->shared()->is_compiled()); | 
| 1217 DCHECK(function->is_compiled()); | 1250 DCHECK(function->is_compiled()); | 
| 1218 return true; | 1251 return true; | 
| 1219 } | 1252 } | 
| 1220 | 1253 | 
| 1221 bool Compiler::CompileDebugCode(Handle<SharedFunctionInfo> shared) { | 1254 bool Compiler::CompileDebugCode(Handle<SharedFunctionInfo> shared) { | 
| 1222 Isolate* isolate = shared->GetIsolate(); | 1255 Isolate* isolate = shared->GetIsolate(); | 
| 1223 DCHECK(AllowCompilation::IsAllowed(isolate)); | 1256 DCHECK(AllowCompilation::IsAllowed(isolate)); | 
| 1224 | 1257 | 
| 1225 // Start a compilation. | 1258 // Start a compilation. | 
| 1226 ParseInfo parse_info(shared); | 1259 ParseInfo parse_info(shared); | 
| 1227 CompilationInfo info(&parse_info, Handle<JSFunction>::null()); | 1260 Zone compile_zone(isolate->allocator(), ZONE_NAME); | 
| 1261 CompilationInfo info(&compile_zone, &parse_info, Handle<JSFunction>::null()); | |
| 1228 info.MarkAsDebug(); | 1262 info.MarkAsDebug(); | 
| 1229 if (GetUnoptimizedCode(&info).is_null()) { | 1263 if (GetUnoptimizedCode(&info).is_null()) { | 
| 1230 isolate->clear_pending_exception(); | 1264 isolate->clear_pending_exception(); | 
| 1231 return false; | 1265 return false; | 
| 1232 } | 1266 } | 
| 1233 | 1267 | 
| 1234 // Check postconditions on success. | 1268 // Check postconditions on success. | 
| 1235 DCHECK(!isolate->has_pending_exception()); | 1269 DCHECK(!isolate->has_pending_exception()); | 
| 1236 DCHECK(shared->is_compiled()); | 1270 DCHECK(shared->is_compiled()); | 
| 1237 DCHECK(shared->HasDebugCode()); | 1271 DCHECK(shared->HasDebugCode()); | 
| 1238 return true; | 1272 return true; | 
| 1239 } | 1273 } | 
| 1240 | 1274 | 
| 1241 MaybeHandle<JSArray> Compiler::CompileForLiveEdit(Handle<Script> script) { | 1275 MaybeHandle<JSArray> Compiler::CompileForLiveEdit(Handle<Script> script) { | 
| 1242 Isolate* isolate = script->GetIsolate(); | 1276 Isolate* isolate = script->GetIsolate(); | 
| 1243 DCHECK(AllowCompilation::IsAllowed(isolate)); | 1277 DCHECK(AllowCompilation::IsAllowed(isolate)); | 
| 1244 | 1278 | 
| 1245 // In order to ensure that live edit function info collection finds the newly | 1279 // In order to ensure that live edit function info collection finds the newly | 
| 1246 // generated shared function infos, clear the script's list temporarily | 1280 // generated shared function infos, clear the script's list temporarily | 
| 1247 // and restore it at the end of this method. | 1281 // and restore it at the end of this method. | 
| 1248 Handle<FixedArray> old_function_infos(script->shared_function_infos(), | 1282 Handle<FixedArray> old_function_infos(script->shared_function_infos(), | 
| 1249 isolate); | 1283 isolate); | 
| 1250 script->set_shared_function_infos(isolate->heap()->empty_fixed_array()); | 1284 script->set_shared_function_infos(isolate->heap()->empty_fixed_array()); | 
| 1251 | 1285 | 
| 1252 // Start a compilation. | 1286 // Start a compilation. | 
| 1253 ParseInfo parse_info(script); | 1287 ParseInfo parse_info(script); | 
| 1254 CompilationInfo info(&parse_info, Handle<JSFunction>::null()); | 1288 Zone compile_zone(isolate->allocator(), ZONE_NAME); | 
| 1289 CompilationInfo info(&compile_zone, &parse_info, Handle<JSFunction>::null()); | |
| 1255 info.MarkAsDebug(); | 1290 info.MarkAsDebug(); | 
| 1256 | 1291 | 
| 1257 // TODO(635): support extensions. | 1292 // TODO(635): support extensions. | 
| 1258 const bool compilation_succeeded = !CompileToplevel(&info).is_null(); | 1293 const bool compilation_succeeded = !CompileToplevel(&info).is_null(); | 
| 1259 Handle<JSArray> infos; | 1294 Handle<JSArray> infos; | 
| 1260 if (compilation_succeeded) { | 1295 if (compilation_succeeded) { | 
| 1261 // Check postconditions on success. | 1296 // Check postconditions on success. | 
| 1262 DCHECK(!isolate->has_pending_exception()); | 1297 DCHECK(!isolate->has_pending_exception()); | 
| 1263 infos = LiveEditFunctionTracker::Collect(parse_info.literal(), script, | 1298 infos = LiveEditFunctionTracker::Collect(parse_info.literal(), script, | 
| 1264 parse_info.zone(), isolate); | 1299 parse_info.zone(), isolate); | 
| (...skipping 19 matching lines...) Expand all Loading... | |
| 1284 return info->shared_info()->HasBytecodeArray(); | 1319 return info->shared_info()->HasBytecodeArray(); | 
| 1285 } | 1320 } | 
| 1286 | 1321 | 
| 1287 // TODO(turbofan): In the future, unoptimized code with deopt support could | 1322 // TODO(turbofan): In the future, unoptimized code with deopt support could | 
| 1288 // be generated lazily once deopt is triggered. | 1323 // be generated lazily once deopt is triggered. | 
| 1289 bool Compiler::EnsureDeoptimizationSupport(CompilationInfo* info) { | 1324 bool Compiler::EnsureDeoptimizationSupport(CompilationInfo* info) { | 
| 1290 DCHECK_NOT_NULL(info->literal()); | 1325 DCHECK_NOT_NULL(info->literal()); | 
| 1291 DCHECK_NOT_NULL(info->scope()); | 1326 DCHECK_NOT_NULL(info->scope()); | 
| 1292 Handle<SharedFunctionInfo> shared = info->shared_info(); | 1327 Handle<SharedFunctionInfo> shared = info->shared_info(); | 
| 1293 if (!shared->has_deoptimization_support()) { | 1328 if (!shared->has_deoptimization_support()) { | 
| 1294 Zone zone(info->isolate()->allocator(), ZONE_NAME); | 1329 Zone compile_zone(info->isolate()->allocator(), ZONE_NAME); | 
| 1295 CompilationInfo unoptimized(info->parse_info(), info->closure()); | 1330 CompilationInfo unoptimized(&compile_zone, info->parse_info(), | 
| 1331 info->closure()); | |
| 1296 unoptimized.EnableDeoptimizationSupport(); | 1332 unoptimized.EnableDeoptimizationSupport(); | 
| 1297 | 1333 | 
| 1298 // Don't generate full-codegen code for functions it can't support. | 1334 // Don't generate full-codegen code for functions it can't support. | 
| 1299 if (shared->must_use_ignition_turbo()) return false; | 1335 if (shared->must_use_ignition_turbo()) return false; | 
| 1300 DCHECK(!IsResumableFunction(shared->kind())); | 1336 DCHECK(!IsResumableFunction(shared->kind())); | 
| 1301 | 1337 | 
| 1302 // When we call PrepareForSerializing below, we will change the shared | 1338 // When we call PrepareForSerializing below, we will change the shared | 
| 1303 // ParseInfo. Make sure to reset it. | 1339 // ParseInfo. Make sure to reset it. | 
| 1304 bool old_will_serialize_value = info->parse_info()->will_serialize(); | 1340 bool old_will_serialize_value = info->parse_info()->will_serialize(); | 
| 1305 | 1341 | 
| (...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1379 if (!script_name.is_null()) { | 1415 if (!script_name.is_null()) { | 
| 1380 script->set_name(*script_name); | 1416 script->set_name(*script_name); | 
| 1381 script->set_line_offset(line_offset); | 1417 script->set_line_offset(line_offset); | 
| 1382 script->set_column_offset(column_offset); | 1418 script->set_column_offset(column_offset); | 
| 1383 } | 1419 } | 
| 1384 script->set_origin_options(options); | 1420 script->set_origin_options(options); | 
| 1385 script->set_compilation_type(Script::COMPILATION_TYPE_EVAL); | 1421 script->set_compilation_type(Script::COMPILATION_TYPE_EVAL); | 
| 1386 Script::SetEvalOrigin(script, outer_info, eval_position); | 1422 Script::SetEvalOrigin(script, outer_info, eval_position); | 
| 1387 | 1423 | 
| 1388 ParseInfo parse_info(script); | 1424 ParseInfo parse_info(script); | 
| 1389 CompilationInfo info(&parse_info, Handle<JSFunction>::null()); | 1425 Zone compile_zone(isolate->allocator(), ZONE_NAME); | 
| 1426 CompilationInfo info(&compile_zone, &parse_info, | |
| 1427 Handle<JSFunction>::null()); | |
| 1390 parse_info.set_eval(); | 1428 parse_info.set_eval(); | 
| 1391 parse_info.set_language_mode(language_mode); | 1429 parse_info.set_language_mode(language_mode); | 
| 1392 parse_info.set_parse_restriction(restriction); | 1430 parse_info.set_parse_restriction(restriction); | 
| 1393 if (!context->IsNativeContext()) { | 1431 if (!context->IsNativeContext()) { | 
| 1394 parse_info.set_outer_scope_info(handle(context->scope_info())); | 1432 parse_info.set_outer_scope_info(handle(context->scope_info())); | 
| 1395 } | 1433 } | 
| 1396 | 1434 | 
| 1397 shared_info = CompileToplevel(&info); | 1435 shared_info = CompileToplevel(&info); | 
| 1398 | 1436 | 
| 1399 if (shared_info.is_null()) { | 1437 if (shared_info.is_null()) { | 
| (...skipping 157 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1557 script->set_line_offset(line_offset); | 1595 script->set_line_offset(line_offset); | 
| 1558 script->set_column_offset(column_offset); | 1596 script->set_column_offset(column_offset); | 
| 1559 } | 1597 } | 
| 1560 script->set_origin_options(resource_options); | 1598 script->set_origin_options(resource_options); | 
| 1561 if (!source_map_url.is_null()) { | 1599 if (!source_map_url.is_null()) { | 
| 1562 script->set_source_mapping_url(*source_map_url); | 1600 script->set_source_mapping_url(*source_map_url); | 
| 1563 } | 1601 } | 
| 1564 | 1602 | 
| 1565 // Compile the function and add it to the cache. | 1603 // Compile the function and add it to the cache. | 
| 1566 ParseInfo parse_info(script); | 1604 ParseInfo parse_info(script); | 
| 1567 CompilationInfo info(&parse_info, Handle<JSFunction>::null()); | 1605 Zone compile_zone(isolate->allocator(), ZONE_NAME); | 
| 1606 CompilationInfo info(&compile_zone, &parse_info, | |
| 1607 Handle<JSFunction>::null()); | |
| 1568 if (resource_options.IsModule()) parse_info.set_module(); | 1608 if (resource_options.IsModule()) parse_info.set_module(); | 
| 1569 if (compile_options != ScriptCompiler::kNoCompileOptions) { | 1609 if (compile_options != ScriptCompiler::kNoCompileOptions) { | 
| 1570 parse_info.set_cached_data(cached_data); | 1610 parse_info.set_cached_data(cached_data); | 
| 1571 } | 1611 } | 
| 1572 parse_info.set_compile_options(compile_options); | 1612 parse_info.set_compile_options(compile_options); | 
| 1573 parse_info.set_extension(extension); | 1613 parse_info.set_extension(extension); | 
| 1574 if (!context->IsNativeContext()) { | 1614 if (!context->IsNativeContext()) { | 
| 1575 parse_info.set_outer_scope_info(handle(context->scope_info())); | 1615 parse_info.set_outer_scope_info(handle(context->scope_info())); | 
| 1576 } | 1616 } | 
| 1577 if (FLAG_serialize_toplevel && | 1617 if (FLAG_serialize_toplevel && | 
| (...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1618 Handle<Script> script, ParseInfo* parse_info, int source_length) { | 1658 Handle<Script> script, ParseInfo* parse_info, int source_length) { | 
| 1619 Isolate* isolate = script->GetIsolate(); | 1659 Isolate* isolate = script->GetIsolate(); | 
| 1620 // TODO(titzer): increment the counters in caller. | 1660 // TODO(titzer): increment the counters in caller. | 
| 1621 isolate->counters()->total_load_size()->Increment(source_length); | 1661 isolate->counters()->total_load_size()->Increment(source_length); | 
| 1622 isolate->counters()->total_compile_size()->Increment(source_length); | 1662 isolate->counters()->total_compile_size()->Increment(source_length); | 
| 1623 | 1663 | 
| 1624 LanguageMode language_mode = construct_language_mode(FLAG_use_strict); | 1664 LanguageMode language_mode = construct_language_mode(FLAG_use_strict); | 
| 1625 parse_info->set_language_mode( | 1665 parse_info->set_language_mode( | 
| 1626 static_cast<LanguageMode>(parse_info->language_mode() | language_mode)); | 1666 static_cast<LanguageMode>(parse_info->language_mode() | language_mode)); | 
| 1627 | 1667 | 
| 1628 CompilationInfo compile_info(parse_info, Handle<JSFunction>::null()); | 1668 Zone compile_zone(isolate->allocator(), ZONE_NAME); | 
| 1669 CompilationInfo compile_info(&compile_zone, parse_info, | |
| 1670 Handle<JSFunction>::null()); | |
| 1629 | 1671 | 
| 1630 // The source was parsed lazily, so compiling for debugging is not possible. | 1672 // The source was parsed lazily, so compiling for debugging is not possible. | 
| 1631 DCHECK(!compile_info.is_debug()); | 1673 DCHECK(!compile_info.is_debug()); | 
| 1632 | 1674 | 
| 1633 Handle<SharedFunctionInfo> result = CompileToplevel(&compile_info); | 1675 Handle<SharedFunctionInfo> result = CompileToplevel(&compile_info); | 
| 1634 if (!result.is_null()) isolate->debug()->OnAfterCompile(script); | 1676 if (!result.is_null()) isolate->debug()->OnAfterCompile(script); | 
| 1635 return result; | 1677 return result; | 
| 1636 } | 1678 } | 
| 1637 | 1679 | 
| 1638 Handle<SharedFunctionInfo> Compiler::GetSharedFunctionInfo( | 1680 Handle<SharedFunctionInfo> Compiler::GetSharedFunctionInfo( | 
| (...skipping 116 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1755 DCHECK(shared->is_compiled()); | 1797 DCHECK(shared->is_compiled()); | 
| 1756 function->set_literals(cached.literals); | 1798 function->set_literals(cached.literals); | 
| 1757 } else if (shared->is_compiled()) { | 1799 } else if (shared->is_compiled()) { | 
| 1758 // TODO(mvstanton): pass pretenure flag to EnsureLiterals. | 1800 // TODO(mvstanton): pass pretenure flag to EnsureLiterals. | 
| 1759 JSFunction::EnsureLiterals(function); | 1801 JSFunction::EnsureLiterals(function); | 
| 1760 } | 1802 } | 
| 1761 } | 1803 } | 
| 1762 | 1804 | 
| 1763 } // namespace internal | 1805 } // namespace internal | 
| 1764 } // namespace v8 | 1806 } // namespace v8 | 
| OLD | NEW |