1// Copyright 2010 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_VM_STATE_H_ 6#define V8_VM_STATE_H_ 7 8#include "src/allocation.h" 9#include "src/isolate.h" 10 11namespace v8 { 12namespace internal { 13 14template <StateTag Tag> 15class VMState BASE_EMBEDDED { 16 public: 17 explicit inline VMState(Isolate* isolate); 18 inline ~VMState(); 19 20 private: 21 Isolate* isolate_; 22 StateTag previous_tag_; 23}; 24 25 26class ExternalCallbackScope BASE_EMBEDDED { 27 public: 28 inline ExternalCallbackScope(Isolate* isolate, Address callback); 29 inline ~ExternalCallbackScope(); 30 Address callback() { return callback_; } 31 Address* callback_address() { return &callback_; } 32 ExternalCallbackScope* previous() { return previous_scope_; } 33 inline Address scope_address(); 34 35 private: 36 Isolate* isolate_; 37 Address callback_; 38 ExternalCallbackScope* previous_scope_; 39#ifdef USE_SIMULATOR 40 Address scope_address_; 41#endif 42}; 43 44} } // namespace v8::internal 45 46 47#endif // V8_VM_STATE_H_ 48