• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // Copyright 2018 the V8 project authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4 
5 #ifndef V8_CODEGEN_UNOPTIMIZED_COMPILATION_INFO_H_
6 #define V8_CODEGEN_UNOPTIMIZED_COMPILATION_INFO_H_
7 
8 #include <memory>
9 
10 #include "src/codegen/source-position-table.h"
11 #include "src/common/globals.h"
12 #include "src/handles/handles.h"
13 #include "src/objects/feedback-vector.h"
14 #include "src/objects/objects.h"
15 #include "src/parsing/parse-info.h"
16 #include "src/utils/utils.h"
17 
18 namespace v8 {
19 namespace internal {
20 
21 class AsmWasmData;
22 class CoverageInfo;
23 class DeclarationScope;
24 class FunctionLiteral;
25 class Isolate;
26 class ParseInfo;
27 class SourceRangeMap;
28 class Zone;
29 
30 // UnoptimizedCompilationInfo encapsulates the information needed to compile
31 // unoptimized code for a given function, and the results of the compilation.
32 class V8_EXPORT_PRIVATE UnoptimizedCompilationInfo final {
33  public:
34   UnoptimizedCompilationInfo(Zone* zone, ParseInfo* parse_info,
35                              FunctionLiteral* literal);
36 
flags()37   const UnoptimizedCompileFlags& flags() const { return flags_; }
38 
39   // Accessors for the input data of the function being compiled.
40 
literal()41   FunctionLiteral* literal() const { return literal_; }
set_literal(FunctionLiteral * literal)42   void set_literal(FunctionLiteral* literal) {
43     DCHECK_NOT_NULL(literal);
44     literal_ = literal;
45   }
ClearLiteral()46   void ClearLiteral() { literal_ = nullptr; }
47 
48   DeclarationScope* scope() const;
49 
50   int num_parameters() const;
51   int num_parameters_including_this() const;
52 
53   // Accessors for optional compilation features.
54 
55   SourcePositionTableBuilder::RecordingMode SourcePositionRecordingMode() const;
56 
has_source_range_map()57   bool has_source_range_map() const { return source_range_map_ != nullptr; }
source_range_map()58   SourceRangeMap* source_range_map() const { return source_range_map_; }
set_source_range_map(SourceRangeMap * source_range_map)59   void set_source_range_map(SourceRangeMap* source_range_map) {
60     source_range_map_ = source_range_map;
61   }
62 
has_coverage_info()63   bool has_coverage_info() const { return !coverage_info_.is_null(); }
coverage_info()64   Handle<CoverageInfo> coverage_info() const { return coverage_info_; }
set_coverage_info(Handle<CoverageInfo> coverage_info)65   void set_coverage_info(Handle<CoverageInfo> coverage_info) {
66     coverage_info_ = coverage_info;
67   }
68 
69   // Accessors for the output of compilation.
70 
has_bytecode_array()71   bool has_bytecode_array() const { return !bytecode_array_.is_null(); }
bytecode_array()72   Handle<BytecodeArray> bytecode_array() const { return bytecode_array_; }
SetBytecodeArray(Handle<BytecodeArray> bytecode_array)73   void SetBytecodeArray(Handle<BytecodeArray> bytecode_array) {
74     bytecode_array_ = bytecode_array;
75   }
76 
has_asm_wasm_data()77   bool has_asm_wasm_data() const { return !asm_wasm_data_.is_null(); }
asm_wasm_data()78   Handle<AsmWasmData> asm_wasm_data() const { return asm_wasm_data_; }
SetAsmWasmData(Handle<AsmWasmData> asm_wasm_data)79   void SetAsmWasmData(Handle<AsmWasmData> asm_wasm_data) {
80     asm_wasm_data_ = asm_wasm_data;
81   }
82 
feedback_vector_spec()83   FeedbackVectorSpec* feedback_vector_spec() { return &feedback_vector_spec_; }
84 
85  private:
86   // Compilation flags.
87   const UnoptimizedCompileFlags flags_;
88 
89   // The root AST node of the function literal being compiled.
90   FunctionLiteral* literal_;
91 
92   // Used when block coverage is enabled.
93   SourceRangeMap* source_range_map_;
94 
95   // Encapsulates coverage information gathered by the bytecode generator.
96   // Needs to be stored on the shared function info once compilation completes.
97   Handle<CoverageInfo> coverage_info_;
98 
99   // Holds the bytecode array generated by the interpreter.
100   Handle<BytecodeArray> bytecode_array_;
101 
102   // Holds the asm_wasm data struct generated by the asmjs compiler.
103   Handle<AsmWasmData> asm_wasm_data_;
104 
105   // Holds the feedback vector spec generated during compilation
106   FeedbackVectorSpec feedback_vector_spec_;
107 };
108 
109 }  // namespace internal
110 }  // namespace v8
111 
112 #endif  // V8_CODEGEN_UNOPTIMIZED_COMPILATION_INFO_H_
113