OLD | NEW |
1 // Copyright 2015 the V8 project authors. All rights reserved. | 1 // Copyright 2015 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/interpreter/interpreter.h" | 5 #include "src/interpreter/interpreter.h" |
6 | 6 |
7 #include <fstream> | 7 #include <fstream> |
| 8 #include <memory> |
8 | 9 |
9 #include "src/ast/prettyprinter.h" | 10 #include "src/ast/prettyprinter.h" |
10 #include "src/code-factory.h" | 11 #include "src/code-factory.h" |
11 #include "src/compiler.h" | 12 #include "src/compiler.h" |
12 #include "src/factory.h" | 13 #include "src/factory.h" |
13 #include "src/interpreter/bytecode-flags.h" | 14 #include "src/interpreter/bytecode-flags.h" |
14 #include "src/interpreter/bytecode-generator.h" | 15 #include "src/interpreter/bytecode-generator.h" |
15 #include "src/interpreter/bytecodes.h" | 16 #include "src/interpreter/bytecodes.h" |
16 #include "src/interpreter/interpreter-assembler.h" | 17 #include "src/interpreter/interpreter-assembler.h" |
17 #include "src/interpreter/interpreter-intrinsics.h" | 18 #include "src/interpreter/interpreter-intrinsics.h" |
(...skipping 14 matching lines...) Expand all Loading... |
32 memset(dispatch_table_, 0, sizeof(dispatch_table_)); | 33 memset(dispatch_table_, 0, sizeof(dispatch_table_)); |
33 } | 34 } |
34 | 35 |
35 void Interpreter::Initialize() { | 36 void Interpreter::Initialize() { |
36 if (IsDispatchTableInitialized()) return; | 37 if (IsDispatchTableInitialized()) return; |
37 Zone zone(isolate_->allocator()); | 38 Zone zone(isolate_->allocator()); |
38 HandleScope scope(isolate_); | 39 HandleScope scope(isolate_); |
39 | 40 |
40 if (FLAG_trace_ignition_dispatches) { | 41 if (FLAG_trace_ignition_dispatches) { |
41 static const int kBytecodeCount = static_cast<int>(Bytecode::kLast) + 1; | 42 static const int kBytecodeCount = static_cast<int>(Bytecode::kLast) + 1; |
42 bytecode_dispatch_counters_table_.Reset( | 43 bytecode_dispatch_counters_table_.reset( |
43 new uintptr_t[kBytecodeCount * kBytecodeCount]); | 44 new uintptr_t[kBytecodeCount * kBytecodeCount]); |
44 memset(bytecode_dispatch_counters_table_.get(), 0, | 45 memset(bytecode_dispatch_counters_table_.get(), 0, |
45 sizeof(uintptr_t) * kBytecodeCount * kBytecodeCount); | 46 sizeof(uintptr_t) * kBytecodeCount * kBytecodeCount); |
46 } | 47 } |
47 | 48 |
48 // Generate bytecode handlers for all bytecodes and scales. | 49 // Generate bytecode handlers for all bytecodes and scales. |
49 const OperandScale kOperandScales[] = { | 50 const OperandScale kOperandScales[] = { |
50 #define VALUE(Name, _) OperandScale::k##Name, | 51 #define VALUE(Name, _) OperandScale::k##Name, |
51 OPERAND_SCALE_LIST(VALUE) | 52 OPERAND_SCALE_LIST(VALUE) |
52 #undef VALUE | 53 #undef VALUE |
(...skipping 80 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
133 } | 134 } |
134 | 135 |
135 bool Interpreter::MakeBytecode(CompilationInfo* info) { | 136 bool Interpreter::MakeBytecode(CompilationInfo* info) { |
136 RuntimeCallTimerScope runtimeTimer(info->isolate(), | 137 RuntimeCallTimerScope runtimeTimer(info->isolate(), |
137 &RuntimeCallStats::CompileIgnition); | 138 &RuntimeCallStats::CompileIgnition); |
138 TimerEventScope<TimerEventCompileIgnition> timer(info->isolate()); | 139 TimerEventScope<TimerEventCompileIgnition> timer(info->isolate()); |
139 TRACE_EVENT0(TRACE_DISABLED_BY_DEFAULT("v8.compile"), "V8.CompileIgnition"); | 140 TRACE_EVENT0(TRACE_DISABLED_BY_DEFAULT("v8.compile"), "V8.CompileIgnition"); |
140 | 141 |
141 if (FLAG_print_bytecode || FLAG_print_ast) { | 142 if (FLAG_print_bytecode || FLAG_print_ast) { |
142 OFStream os(stdout); | 143 OFStream os(stdout); |
143 base::SmartArrayPointer<char> name = info->GetDebugName(); | 144 std::unique_ptr<char[]> name = info->GetDebugName(); |
144 os << "[generating bytecode for function: " << info->GetDebugName().get() | 145 os << "[generating bytecode for function: " << info->GetDebugName().get() |
145 << "]" << std::endl | 146 << "]" << std::endl |
146 << std::flush; | 147 << std::flush; |
147 } | 148 } |
148 | 149 |
149 #ifdef DEBUG | 150 #ifdef DEBUG |
150 if (info->parse_info() && FLAG_print_ast) { | 151 if (info->parse_info() && FLAG_print_ast) { |
151 OFStream os(stdout); | 152 OFStream os(stdout); |
152 os << "--- AST ---" << std::endl | 153 os << "--- AST ---" << std::endl |
153 << AstPrinter(info->isolate()).PrintProgram(info->literal()) << std::endl | 154 << AstPrinter(info->isolate()).PrintProgram(info->literal()) << std::endl |
(...skipping 1973 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2127 __ StoreObjectField(generator, JSGeneratorObject::kContinuationOffset, | 2128 __ StoreObjectField(generator, JSGeneratorObject::kContinuationOffset, |
2128 __ SmiTag(new_state)); | 2129 __ SmiTag(new_state)); |
2129 __ SetAccumulator(old_state); | 2130 __ SetAccumulator(old_state); |
2130 | 2131 |
2131 __ Dispatch(); | 2132 __ Dispatch(); |
2132 } | 2133 } |
2133 | 2134 |
2134 } // namespace interpreter | 2135 } // namespace interpreter |
2135 } // namespace internal | 2136 } // namespace internal |
2136 } // namespace v8 | 2137 } // namespace v8 |
OLD | NEW |