| 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 522 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 533 if (info->has_bytecode_array()) { | 533 if (info->has_bytecode_array()) { |
| 534 DCHECK(!shared->HasBytecodeArray()); // Only compiled once. | 534 DCHECK(!shared->HasBytecodeArray()); // Only compiled once. |
| 535 shared->set_bytecode_array(*info->bytecode_array()); | 535 shared->set_bytecode_array(*info->bytecode_array()); |
| 536 } | 536 } |
| 537 } | 537 } |
| 538 | 538 |
| 539 MUST_USE_RESULT MaybeHandle<Code> GetUnoptimizedCode(CompilationInfo* info) { | 539 MUST_USE_RESULT MaybeHandle<Code> GetUnoptimizedCode(CompilationInfo* info) { |
| 540 VMState<COMPILER> state(info->isolate()); | 540 VMState<COMPILER> state(info->isolate()); |
| 541 PostponeInterruptsScope postpone(info->isolate()); | 541 PostponeInterruptsScope postpone(info->isolate()); |
| 542 | 542 |
| 543 // Create a canonical handle scope if compiling ignition bytecode. This is | 543 // Create a canonical handle scope before internalizing parsed values if |
| 544 // required by the constant array builder to de-duplicate common objects | 544 // compiling bytecode. This is required for off-thread bytecode generation. |
| 545 // without dereferencing handles. | |
| 546 std::unique_ptr<CanonicalHandleScope> canonical; | 545 std::unique_ptr<CanonicalHandleScope> canonical; |
| 547 if (FLAG_ignition) canonical.reset(new CanonicalHandleScope(info->isolate())); | 546 if (FLAG_ignition) canonical.reset(new CanonicalHandleScope(info->isolate())); |
| 548 | 547 |
| 549 // Parse and update CompilationInfo with the results. | 548 // Parse and update CompilationInfo with the results. |
| 550 if (!Parser::ParseStatic(info->parse_info())) return MaybeHandle<Code>(); | 549 if (!Parser::ParseStatic(info->parse_info())) return MaybeHandle<Code>(); |
| 551 Handle<SharedFunctionInfo> shared = info->shared_info(); | 550 Handle<SharedFunctionInfo> shared = info->shared_info(); |
| 552 DCHECK_EQ(shared->language_mode(), info->literal()->language_mode()); | 551 DCHECK_EQ(shared->language_mode(), info->literal()->language_mode()); |
| 553 | 552 |
| 554 // Compile either unoptimized code or bytecode for the interpreter. | 553 // Compile either unoptimized code or bytecode for the interpreter. |
| 555 if (!CompileUnoptimizedCode(info)) return MaybeHandle<Code>(); | 554 if (!CompileUnoptimizedCode(info)) return MaybeHandle<Code>(); |
| (...skipping 511 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1067 Handle<SharedFunctionInfo> CompileToplevel(CompilationInfo* info) { | 1066 Handle<SharedFunctionInfo> CompileToplevel(CompilationInfo* info) { |
| 1068 Isolate* isolate = info->isolate(); | 1067 Isolate* isolate = info->isolate(); |
| 1069 TimerEventScope<TimerEventCompileCode> timer(isolate); | 1068 TimerEventScope<TimerEventCompileCode> timer(isolate); |
| 1070 RuntimeCallTimerScope runtimeTimer(isolate, &RuntimeCallStats::CompileCode); | 1069 RuntimeCallTimerScope runtimeTimer(isolate, &RuntimeCallStats::CompileCode); |
| 1071 TRACE_EVENT0(TRACE_DISABLED_BY_DEFAULT("v8.compile"), "V8.CompileCode"); | 1070 TRACE_EVENT0(TRACE_DISABLED_BY_DEFAULT("v8.compile"), "V8.CompileCode"); |
| 1072 PostponeInterruptsScope postpone(isolate); | 1071 PostponeInterruptsScope postpone(isolate); |
| 1073 DCHECK(!isolate->native_context().is_null()); | 1072 DCHECK(!isolate->native_context().is_null()); |
| 1074 ParseInfo* parse_info = info->parse_info(); | 1073 ParseInfo* parse_info = info->parse_info(); |
| 1075 Handle<Script> script = parse_info->script(); | 1074 Handle<Script> script = parse_info->script(); |
| 1076 | 1075 |
| 1077 // Create a canonical handle scope if compiling ignition bytecode. This is | 1076 // Create a canonical handle scope before internalizing parsed values if |
| 1078 // required by the constant array builder to de-duplicate common objects | 1077 // compiling bytecode. This is required for off-thread bytecode generation. |
| 1079 // without dereferencing handles. | |
| 1080 std::unique_ptr<CanonicalHandleScope> canonical; | 1078 std::unique_ptr<CanonicalHandleScope> canonical; |
| 1081 if (FLAG_ignition) canonical.reset(new CanonicalHandleScope(isolate)); | 1079 if (FLAG_ignition) canonical.reset(new CanonicalHandleScope(isolate)); |
| 1082 | 1080 |
| 1083 // TODO(svenpanne) Obscure place for this, perhaps move to OnBeforeCompile? | 1081 // TODO(svenpanne) Obscure place for this, perhaps move to OnBeforeCompile? |
| 1084 FixedArray* array = isolate->native_context()->embedder_data(); | 1082 FixedArray* array = isolate->native_context()->embedder_data(); |
| 1085 script->set_context_data(array->get(v8::Context::kDebugIdIndex)); | 1083 script->set_context_data(array->get(v8::Context::kDebugIdIndex)); |
| 1086 | 1084 |
| 1087 isolate->debug()->OnBeforeCompile(script); | 1085 isolate->debug()->OnBeforeCompile(script); |
| 1088 | 1086 |
| 1089 DCHECK(parse_info->is_eval() || parse_info->is_global() || | 1087 DCHECK(parse_info->is_eval() || parse_info->is_global() || |
| (...skipping 854 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1944 DCHECK(shared->is_compiled()); | 1942 DCHECK(shared->is_compiled()); |
| 1945 function->set_literals(cached.literals); | 1943 function->set_literals(cached.literals); |
| 1946 } else if (shared->is_compiled()) { | 1944 } else if (shared->is_compiled()) { |
| 1947 // TODO(mvstanton): pass pretenure flag to EnsureLiterals. | 1945 // TODO(mvstanton): pass pretenure flag to EnsureLiterals. |
| 1948 JSFunction::EnsureLiterals(function); | 1946 JSFunction::EnsureLiterals(function); |
| 1949 } | 1947 } |
| 1950 } | 1948 } |
| 1951 | 1949 |
| 1952 } // namespace internal | 1950 } // namespace internal |
| 1953 } // namespace v8 | 1951 } // namespace v8 |
| OLD | NEW |