| // Copyright 2018 the V8 project authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #ifndef V8_CODEGEN_UNOPTIMIZED_COMPILATION_INFO_H_ |
| #define V8_CODEGEN_UNOPTIMIZED_COMPILATION_INFO_H_ |
| |
| #include <memory> |
| |
| #include "src/codegen/source-position-table.h" |
| #include "src/common/globals.h" |
| #include "src/handles/handles.h" |
| #include "src/objects/feedback-vector.h" |
| #include "src/objects/objects.h" |
| #include "src/parsing/parse-info.h" |
| #include "src/utils/utils.h" |
| |
| namespace v8 { |
| namespace internal { |
| |
| class AsmWasmData; |
| class CoverageInfo; |
| class DeclarationScope; |
| class FunctionLiteral; |
| class Isolate; |
| class ParseInfo; |
| class SourceRangeMap; |
| class Zone; |
| |
| // UnoptimizedCompilationInfo encapsulates the information needed to compile |
| // unoptimized code for a given function, and the results of the compilation. |
| class V8_EXPORT_PRIVATE UnoptimizedCompilationInfo final { |
| public: |
| UnoptimizedCompilationInfo(Zone* zone, ParseInfo* parse_info, |
| FunctionLiteral* literal); |
| |
| const UnoptimizedCompileFlags& flags() const { return flags_; } |
| LazyCompileDispatcher* dispatcher() { return dispatcher_; } |
| const Utf16CharacterStream* character_stream() const { |
| return character_stream_; |
| } |
| |
| // Accessors for the input data of the function being compiled. |
| |
| FunctionLiteral* literal() const { return literal_; } |
| void set_literal(FunctionLiteral* literal) { |
| DCHECK_NOT_NULL(literal); |
| literal_ = literal; |
| } |
| void ClearLiteral() { literal_ = nullptr; } |
| |
| DeclarationScope* scope() const; |
| |
| int num_parameters() const; |
| int num_parameters_including_this() const; |
| |
| // Accessors for optional compilation features. |
| |
| SourcePositionTableBuilder::RecordingMode SourcePositionRecordingMode() const; |
| |
| bool has_source_range_map() const { return source_range_map_ != nullptr; } |
| SourceRangeMap* source_range_map() const { return source_range_map_; } |
| void set_source_range_map(SourceRangeMap* source_range_map) { |
| source_range_map_ = source_range_map; |
| } |
| |
| bool has_coverage_info() const { return !coverage_info_.is_null(); } |
| Handle<CoverageInfo> coverage_info() const { return coverage_info_; } |
| void set_coverage_info(Handle<CoverageInfo> coverage_info) { |
| coverage_info_ = coverage_info; |
| } |
| |
| // Accessors for the output of compilation. |
| |
| bool has_bytecode_array() const { return !bytecode_array_.is_null(); } |
| Handle<BytecodeArray> bytecode_array() const { return bytecode_array_; } |
| void SetBytecodeArray(Handle<BytecodeArray> bytecode_array) { |
| bytecode_array_ = bytecode_array; |
| } |
| |
| bool has_asm_wasm_data() const { return !asm_wasm_data_.is_null(); } |
| Handle<AsmWasmData> asm_wasm_data() const { return asm_wasm_data_; } |
| void SetAsmWasmData(Handle<AsmWasmData> asm_wasm_data) { |
| asm_wasm_data_ = asm_wasm_data; |
| } |
| |
| FeedbackVectorSpec* feedback_vector_spec() { return &feedback_vector_spec_; } |
| |
| private: |
| // Compilation flags. |
| const UnoptimizedCompileFlags flags_; |
| |
| // For dispatching eager compilation of lazily compiled functions. |
| LazyCompileDispatcher* dispatcher_; |
| const Utf16CharacterStream* character_stream_; |
| |
| // The root AST node of the function literal being compiled. |
| FunctionLiteral* literal_; |
| |
| // Used when block coverage is enabled. |
| SourceRangeMap* source_range_map_; |
| |
| // Encapsulates coverage information gathered by the bytecode generator. |
| // Needs to be stored on the shared function info once compilation completes. |
| Handle<CoverageInfo> coverage_info_; |
| |
| // Holds the bytecode array generated by the interpreter. |
| Handle<BytecodeArray> bytecode_array_; |
| |
| // Holds the asm_wasm data struct generated by the asmjs compiler. |
| Handle<AsmWasmData> asm_wasm_data_; |
| |
| // Holds the feedback vector spec generated during compilation |
| FeedbackVectorSpec feedback_vector_spec_; |
| }; |
| |
| } // namespace internal |
| } // namespace v8 |
| |
| #endif // V8_CODEGEN_UNOPTIMIZED_COMPILATION_INFO_H_ |