| // 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_UNOPTIMIZED_COMPILATION_INFO_H_ | 
 | #define V8_UNOPTIMIZED_COMPILATION_INFO_H_ | 
 |  | 
 | #include <memory> | 
 |  | 
 | #include "src/feedback-vector.h" | 
 | #include "src/globals.h" | 
 | #include "src/handles.h" | 
 | #include "src/objects.h" | 
 | #include "src/source-position-table.h" | 
 | #include "src/utils.h" | 
 |  | 
 | namespace v8 { | 
 | namespace internal { | 
 |  | 
 | 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); | 
 |  | 
 |   Zone* zone() { return zone_; } | 
 |  | 
 |   // Compilation flag accessors. | 
 |  | 
 |   void MarkAsEval() { SetFlag(kIsEval); } | 
 |   bool is_eval() const { return GetFlag(kIsEval); } | 
 |  | 
 |   void MarkAsNative() { SetFlag(kIsNative); } | 
 |   bool is_native() const { return GetFlag(kIsNative); } | 
 |  | 
 |   void MarkAsCollectTypeProfile() { SetFlag(kCollectTypeProfile); } | 
 |   bool collect_type_profile() const { return GetFlag(kCollectTypeProfile); } | 
 |  | 
 |   // 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; | 
 |   } | 
 |  | 
 |   DeclarationScope* scope() const; | 
 |  | 
 |   bool has_simple_parameters(); | 
 |  | 
 |   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<FixedArray> asm_wasm_data() const { return asm_wasm_data_; } | 
 |   void SetAsmWasmData(Handle<FixedArray> asm_wasm_data) { | 
 |     asm_wasm_data_ = asm_wasm_data; | 
 |   } | 
 |  | 
 |   FeedbackVectorSpec* feedback_vector_spec() { return &feedback_vector_spec_; } | 
 |  | 
 |  private: | 
 |   // Various configuration flags for a compilation, as well as some properties | 
 |   // of the compiled code produced by a compilation. | 
 |   enum Flag { | 
 |     kIsEval = 1 << 0, | 
 |     kIsNative = 1 << 1, | 
 |     kCollectTypeProfile = 1 << 2, | 
 |     kUntrustedCodeMitigations = 1 << 3, | 
 |   }; | 
 |  | 
 |   void SetFlag(Flag flag) { flags_ |= flag; } | 
 |   bool GetFlag(Flag flag) const { return (flags_ & flag) != 0; } | 
 |  | 
 |   // Compilation flags. | 
 |   unsigned flags_; | 
 |  | 
 |   // The zone from which the compilation pipeline working on this | 
 |   // OptimizedCompilationInfo allocates. | 
 |   Zone* zone_; | 
 |  | 
 |   // 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 array generated by the asmjs compiler. | 
 |   Handle<FixedArray> asm_wasm_data_; | 
 |  | 
 |   // Holds the feedback vector spec generated during compilation | 
 |   FeedbackVectorSpec feedback_vector_spec_; | 
 | }; | 
 |  | 
 | }  // namespace internal | 
 | }  // namespace v8 | 
 |  | 
 | #endif  // V8_UNOPTIMIZED_COMPILATION_INFO_H_ |