bytecode-generator.h revision 342c50ce1624b485728b9a4fc41d8bbf37eb46cf
1014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch// Copyright 2015 the V8 project authors. All rights reserved. 2014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch// Use of this source code is governed by a BSD-style license that can be 3014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch// found in the LICENSE file. 4014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch 5014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch#ifndef V8_INTERPRETER_BYTECODE_GENERATOR_H_ 6014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch#define V8_INTERPRETER_BYTECODE_GENERATOR_H_ 7014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch 8014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch#include "src/ast/ast.h" 9014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch#include "src/interpreter/bytecode-array-builder.h" 10014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch#include "src/interpreter/bytecodes.h" 11014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch 12014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdochnamespace v8 { 13014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdochnamespace internal { 14014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdochnamespace interpreter { 15014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch 16342c50ce1624b485728b9a4fc41d8bbf37eb46cfBen Murdochclass LoopBuilder; 17342c50ce1624b485728b9a4fc41d8bbf37eb46cfBen Murdoch 18014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdochclass BytecodeGenerator final : public AstVisitor { 19014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch public: 20014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch BytecodeGenerator(Isolate* isolate, Zone* zone); 21014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch 22014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch Handle<BytecodeArray> MakeBytecode(CompilationInfo* info); 23014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch 24014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch#define DECLARE_VISIT(type) void Visit##type(type* node) override; 25014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch AST_NODE_LIST(DECLARE_VISIT) 26014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch#undef DECLARE_VISIT 27014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch 28014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch // Visiting function for declarations list and statements are overridden. 29014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch void VisitDeclarations(ZoneList<Declaration*>* declarations) override; 30014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch void VisitStatements(ZoneList<Statement*>* statments) override; 31014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch 32014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch private: 33014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch class ContextScope; 34014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch class ControlScope; 35014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch class ControlScopeForBreakable; 36014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch class ControlScopeForIteration; 37342c50ce1624b485728b9a4fc41d8bbf37eb46cfBen Murdoch class ControlScopeForTopLevel; 38342c50ce1624b485728b9a4fc41d8bbf37eb46cfBen Murdoch class ControlScopeForTryCatch; 39342c50ce1624b485728b9a4fc41d8bbf37eb46cfBen Murdoch class ControlScopeForTryFinally; 40014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch class ExpressionResultScope; 41014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch class EffectResultScope; 42014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch class AccumulatorResultScope; 43014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch class RegisterResultScope; 44014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch class RegisterAllocationScope; 45014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch 46014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch void MakeBytecodeBody(); 47014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch 48014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch DEFINE_AST_VISITOR_SUBCLASS_MEMBERS(); 49014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch 50014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch // Dispatched from VisitBinaryOperation. 51014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch void VisitArithmeticExpression(BinaryOperation* binop); 52014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch void VisitCommaExpression(BinaryOperation* binop); 53014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch void VisitLogicalOrExpression(BinaryOperation* binop); 54014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch void VisitLogicalAndExpression(BinaryOperation* binop); 55014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch 56014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch // Dispatched from VisitUnaryOperation. 57014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch void VisitVoid(UnaryOperation* expr); 58014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch void VisitTypeOf(UnaryOperation* expr); 59014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch void VisitNot(UnaryOperation* expr); 60014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch void VisitDelete(UnaryOperation* expr); 61014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch 62014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch // Used by flow control routines to evaluate loop condition. 63014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch void VisitCondition(Expression* expr); 64014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch 65014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch // Helper visitors which perform common operations. 66014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch Register VisitArguments(ZoneList<Expression*>* arguments); 67014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch 68342c50ce1624b485728b9a4fc41d8bbf37eb46cfBen Murdoch // Visit a keyed super property load. The optional 69342c50ce1624b485728b9a4fc41d8bbf37eb46cfBen Murdoch // |opt_receiver_out| register will have the receiver stored to it 70342c50ce1624b485728b9a4fc41d8bbf37eb46cfBen Murdoch // if it's a valid register. The loaded value is placed in the 71342c50ce1624b485728b9a4fc41d8bbf37eb46cfBen Murdoch // accumulator. 72342c50ce1624b485728b9a4fc41d8bbf37eb46cfBen Murdoch void VisitKeyedSuperPropertyLoad(Property* property, 73342c50ce1624b485728b9a4fc41d8bbf37eb46cfBen Murdoch Register opt_receiver_out); 74342c50ce1624b485728b9a4fc41d8bbf37eb46cfBen Murdoch 75342c50ce1624b485728b9a4fc41d8bbf37eb46cfBen Murdoch // Visit a named super property load. The optional 76342c50ce1624b485728b9a4fc41d8bbf37eb46cfBen Murdoch // |opt_receiver_out| register will have the receiver stored to it 77342c50ce1624b485728b9a4fc41d8bbf37eb46cfBen Murdoch // if it's a valid register. The loaded value is placed in the 78342c50ce1624b485728b9a4fc41d8bbf37eb46cfBen Murdoch // accumulator. 79342c50ce1624b485728b9a4fc41d8bbf37eb46cfBen Murdoch void VisitNamedSuperPropertyLoad(Property* property, 80342c50ce1624b485728b9a4fc41d8bbf37eb46cfBen Murdoch Register opt_receiver_out); 81342c50ce1624b485728b9a4fc41d8bbf37eb46cfBen Murdoch 82014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch void VisitPropertyLoad(Register obj, Property* expr); 83014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch void VisitPropertyLoadForAccumulator(Register obj, Property* expr); 84014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch 85014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch void VisitVariableLoad(Variable* variable, FeedbackVectorSlot slot, 86014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch TypeofMode typeof_mode = NOT_INSIDE_TYPEOF); 87014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch void VisitVariableLoadForAccumulatorValue( 88014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch Variable* variable, FeedbackVectorSlot slot, 89014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch TypeofMode typeof_mode = NOT_INSIDE_TYPEOF); 90014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch MUST_USE_RESULT Register 91014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch VisitVariableLoadForRegisterValue(Variable* variable, FeedbackVectorSlot slot, 92014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch TypeofMode typeof_mode = NOT_INSIDE_TYPEOF); 93342c50ce1624b485728b9a4fc41d8bbf37eb46cfBen Murdoch void VisitVariableAssignment(Variable* variable, Token::Value op, 94342c50ce1624b485728b9a4fc41d8bbf37eb46cfBen Murdoch FeedbackVectorSlot slot); 95342c50ce1624b485728b9a4fc41d8bbf37eb46cfBen Murdoch 96342c50ce1624b485728b9a4fc41d8bbf37eb46cfBen Murdoch void BuildNamedSuperPropertyStore(Register receiver, Register home_object, 97342c50ce1624b485728b9a4fc41d8bbf37eb46cfBen Murdoch Register name, Register value); 98342c50ce1624b485728b9a4fc41d8bbf37eb46cfBen Murdoch void BuildKeyedSuperPropertyStore(Register receiver, Register home_object, 99342c50ce1624b485728b9a4fc41d8bbf37eb46cfBen Murdoch Register key, Register value); 100342c50ce1624b485728b9a4fc41d8bbf37eb46cfBen Murdoch void BuildNamedSuperPropertyLoad(Register receiver, Register home_object, 101342c50ce1624b485728b9a4fc41d8bbf37eb46cfBen Murdoch Register name); 102342c50ce1624b485728b9a4fc41d8bbf37eb46cfBen Murdoch void BuildKeyedSuperPropertyLoad(Register receiver, Register home_object, 103342c50ce1624b485728b9a4fc41d8bbf37eb46cfBen Murdoch Register key); 104342c50ce1624b485728b9a4fc41d8bbf37eb46cfBen Murdoch 105342c50ce1624b485728b9a4fc41d8bbf37eb46cfBen Murdoch void BuildThrowIfHole(Handle<String> name); 106342c50ce1624b485728b9a4fc41d8bbf37eb46cfBen Murdoch void BuildThrowIfNotHole(Handle<String> name); 107342c50ce1624b485728b9a4fc41d8bbf37eb46cfBen Murdoch void BuildThrowReassignConstant(Handle<String> name); 108342c50ce1624b485728b9a4fc41d8bbf37eb46cfBen Murdoch void BuildThrowReferenceError(Handle<String> name); 109342c50ce1624b485728b9a4fc41d8bbf37eb46cfBen Murdoch void BuildHoleCheckForVariableLoad(VariableMode mode, Handle<String> name); 110342c50ce1624b485728b9a4fc41d8bbf37eb46cfBen Murdoch void BuildHoleCheckForVariableAssignment(Variable* variable, Token::Value op); 111014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch 112014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch void VisitArgumentsObject(Variable* variable); 113342c50ce1624b485728b9a4fc41d8bbf37eb46cfBen Murdoch void VisitRestArgumentsArray(Variable* rest); 114342c50ce1624b485728b9a4fc41d8bbf37eb46cfBen Murdoch void VisitCallSuper(Call* call); 115342c50ce1624b485728b9a4fc41d8bbf37eb46cfBen Murdoch void VisitClassLiteralContents(ClassLiteral* expr); 116342c50ce1624b485728b9a4fc41d8bbf37eb46cfBen Murdoch void VisitClassLiteralForRuntimeDefinition(ClassLiteral* expr); 117342c50ce1624b485728b9a4fc41d8bbf37eb46cfBen Murdoch void VisitClassLiteralProperties(ClassLiteral* expr, Register literal, 118342c50ce1624b485728b9a4fc41d8bbf37eb46cfBen Murdoch Register prototype); 119342c50ce1624b485728b9a4fc41d8bbf37eb46cfBen Murdoch void VisitClassLiteralStaticPrototypeWithComputedName(Register name); 120014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch void VisitThisFunctionVariable(Variable* variable); 121014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch void VisitNewTargetVariable(Variable* variable); 122014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch void VisitNewLocalFunctionContext(); 123014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch void VisitBuildLocalActivationContext(); 124342c50ce1624b485728b9a4fc41d8bbf37eb46cfBen Murdoch void VisitBlockDeclarationsAndStatements(Block* stmt); 125014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch void VisitNewLocalBlockContext(Scope* scope); 126342c50ce1624b485728b9a4fc41d8bbf37eb46cfBen Murdoch void VisitNewLocalCatchContext(Variable* variable); 127342c50ce1624b485728b9a4fc41d8bbf37eb46cfBen Murdoch void VisitNewLocalWithContext(); 128014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch void VisitFunctionClosureForContext(); 129014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch void VisitSetHomeObject(Register value, Register home_object, 130014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch ObjectLiteralProperty* property, int slot_number = 0); 131014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch void VisitObjectLiteralAccessor(Register home_object, 132014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch ObjectLiteralProperty* property, 133014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch Register value_out); 134014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch void VisitForInAssignment(Expression* expr, FeedbackVectorSlot slot); 135014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch 136342c50ce1624b485728b9a4fc41d8bbf37eb46cfBen Murdoch // Visit the body of a loop iteration. 137342c50ce1624b485728b9a4fc41d8bbf37eb46cfBen Murdoch void VisitIterationBody(IterationStatement* stmt, LoopBuilder* loop_builder); 138342c50ce1624b485728b9a4fc41d8bbf37eb46cfBen Murdoch 139342c50ce1624b485728b9a4fc41d8bbf37eb46cfBen Murdoch // Visit a statement and switch scopes, the context is in the accumulator. 140342c50ce1624b485728b9a4fc41d8bbf37eb46cfBen Murdoch void VisitInScope(Statement* stmt, Scope* scope); 141342c50ce1624b485728b9a4fc41d8bbf37eb46cfBen Murdoch 142014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch // Visitors for obtaining expression result in the accumulator, in a 143014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch // register, or just getting the effect. 144342c50ce1624b485728b9a4fc41d8bbf37eb46cfBen Murdoch void VisitForAccumulatorValue(Expression* expr); 145342c50ce1624b485728b9a4fc41d8bbf37eb46cfBen Murdoch void VisitForAccumulatorValueOrTheHole(Expression* expr); 146342c50ce1624b485728b9a4fc41d8bbf37eb46cfBen Murdoch MUST_USE_RESULT Register VisitForRegisterValue(Expression* expr); 147342c50ce1624b485728b9a4fc41d8bbf37eb46cfBen Murdoch void VisitForRegisterValue(Expression* expr, Register destination); 148342c50ce1624b485728b9a4fc41d8bbf37eb46cfBen Murdoch void VisitForEffect(Expression* expr); 149014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch 150014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch // Methods for tracking and remapping register. 151014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch void RecordStoreToRegister(Register reg); 152014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch Register LoadFromAliasedRegister(Register reg); 153014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch 154342c50ce1624b485728b9a4fc41d8bbf37eb46cfBen Murdoch // Methods for tracking try-block nesting. 155342c50ce1624b485728b9a4fc41d8bbf37eb46cfBen Murdoch bool IsInsideTryCatch() const { return try_catch_nesting_level_ > 0; } 156342c50ce1624b485728b9a4fc41d8bbf37eb46cfBen Murdoch bool IsInsideTryFinally() const { return try_finally_nesting_level_ > 0; } 157342c50ce1624b485728b9a4fc41d8bbf37eb46cfBen Murdoch 158342c50ce1624b485728b9a4fc41d8bbf37eb46cfBen Murdoch // Initialize an array of temporary registers with consecutive registers. 159342c50ce1624b485728b9a4fc41d8bbf37eb46cfBen Murdoch template <size_t N> 160342c50ce1624b485728b9a4fc41d8bbf37eb46cfBen Murdoch void InitializeWithConsecutiveRegisters(Register (®isters)[N]); 161342c50ce1624b485728b9a4fc41d8bbf37eb46cfBen Murdoch 162342c50ce1624b485728b9a4fc41d8bbf37eb46cfBen Murdoch inline void set_builder(BytecodeArrayBuilder* builder) { builder_ = builder; } 163342c50ce1624b485728b9a4fc41d8bbf37eb46cfBen Murdoch inline BytecodeArrayBuilder* builder() const { return builder_; } 164014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch 165014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch inline Isolate* isolate() const { return isolate_; } 166014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch inline Zone* zone() const { return zone_; } 167014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch 168014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch inline Scope* scope() const { return scope_; } 169014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch inline void set_scope(Scope* scope) { scope_ = scope; } 170014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch inline CompilationInfo* info() const { return info_; } 171014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch inline void set_info(CompilationInfo* info) { info_ = info; } 172014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch 173014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch inline ControlScope* execution_control() const { return execution_control_; } 174014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch inline void set_execution_control(ControlScope* scope) { 175014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch execution_control_ = scope; 176014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch } 177014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch inline ContextScope* execution_context() const { return execution_context_; } 178014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch inline void set_execution_context(ContextScope* context) { 179014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch execution_context_ = context; 180014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch } 181014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch inline void set_execution_result(ExpressionResultScope* execution_result) { 182014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch execution_result_ = execution_result; 183014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch } 184014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch ExpressionResultScope* execution_result() const { return execution_result_; } 185014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch inline void set_register_allocator( 186014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch RegisterAllocationScope* register_allocator) { 187014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch register_allocator_ = register_allocator; 188014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch } 189014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch RegisterAllocationScope* register_allocator() const { 190014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch return register_allocator_; 191014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch } 192014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch 193014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch ZoneVector<Handle<Object>>* globals() { return &globals_; } 194014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch inline LanguageMode language_mode() const; 195014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch int feedback_index(FeedbackVectorSlot slot) const; 196014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch 197014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch Isolate* isolate_; 198014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch Zone* zone_; 199342c50ce1624b485728b9a4fc41d8bbf37eb46cfBen Murdoch BytecodeArrayBuilder* builder_; 200014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch CompilationInfo* info_; 201014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch Scope* scope_; 202014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch ZoneVector<Handle<Object>> globals_; 203014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch ControlScope* execution_control_; 204014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch ContextScope* execution_context_; 205014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch ExpressionResultScope* execution_result_; 206014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch RegisterAllocationScope* register_allocator_; 207342c50ce1624b485728b9a4fc41d8bbf37eb46cfBen Murdoch int try_catch_nesting_level_; 208342c50ce1624b485728b9a4fc41d8bbf37eb46cfBen Murdoch int try_finally_nesting_level_; 209014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch}; 210014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch 211014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch} // namespace interpreter 212014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch} // namespace internal 213014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch} // namespace v8 214014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch 215014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch#endif // V8_INTERPRETER_BYTECODE_GENERATOR_H_ 216