// Copyright 2012 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_COMPILER_H_ #define V8_COMPILER_H_ #include "src/allocation.h" #include "src/ast/ast.h" #include "src/bailout-reason.h" #include "src/compilation-dependencies.h" #include "src/signature.h" #include "src/source-position.h" #include "src/zone.h" namespace v8 { namespace internal { // Forward declarations. class JavaScriptFrame; class ParseInfo; class ScriptData; struct InlinedFunctionInfo { InlinedFunctionInfo(int parent_id, SourcePosition inline_position, int script_id, int start_position) : parent_id(parent_id), inline_position(inline_position), script_id(script_id), start_position(start_position) {} int parent_id; SourcePosition inline_position; int script_id; int start_position; std::vector deopt_pc_offsets; static const int kNoParentId = -1; }; // CompilationInfo encapsulates some information known at compile time. It // is constructed based on the resources available at compile-time. class CompilationInfo { public: // Various configuration flags for a compilation, as well as some properties // of the compiled code produced by a compilation. enum Flag { kDeferredCalling = 1 << 0, kNonDeferredCalling = 1 << 1, kSavesCallerDoubles = 1 << 2, kRequiresFrame = 1 << 3, kMustNotHaveEagerFrame = 1 << 4, kDeoptimizationSupport = 1 << 5, kDebug = 1 << 6, kSerializing = 1 << 7, kFunctionContextSpecializing = 1 << 8, kFrameSpecializing = 1 << 9, kNativeContextSpecializing = 1 << 10, kInliningEnabled = 1 << 11, kTypingEnabled = 1 << 12, kDisableFutureOptimization = 1 << 13, kSplittingEnabled = 1 << 14, kDeoptimizationEnabled = 1 << 16, kSourcePositionsEnabled = 1 << 17, kFirstCompile = 1 << 18, kBailoutOnUninitialized = 1 << 19, }; explicit CompilationInfo(ParseInfo* parse_info); CompilationInfo(const char* debug_name, Isolate* isolate, Zone* zone, Code::Flags code_flags = Code::ComputeFlags(Code::STUB)); virtual ~CompilationInfo(); ParseInfo* parse_info() const { return parse_info_; } // ----------------------------------------------------------- // TODO(titzer): inline and delete accessors of ParseInfo // ----------------------------------------------------------- Handle