Home | History | Annotate | Download | only in src
      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/counters.h"
     10 #include "src/isolate.h"
     11 
     12 namespace v8 {
     13 namespace internal {
     14 
     15 // Logging and profiling.  A StateTag represents a possible state of
     16 // the VM. The logger maintains a stack of these. Creating a VMState
     17 // object enters a state by pushing on the stack, and destroying a
     18 // VMState object leaves a state by popping the current state from the
     19 // stack.
     20 template <StateTag Tag>
     21 class VMState BASE_EMBEDDED {
     22  public:
     23   explicit inline VMState(Isolate* isolate);
     24   inline ~VMState();
     25 
     26  private:
     27   Isolate* isolate_;
     28   StateTag previous_tag_;
     29 };
     30 
     31 
     32 class ExternalCallbackScope BASE_EMBEDDED {
     33  public:
     34   inline ExternalCallbackScope(Isolate* isolate, Address callback);
     35   inline ~ExternalCallbackScope();
     36   Address callback() { return callback_; }
     37   Address* callback_entrypoint_address() {
     38     if (callback_ == nullptr) return nullptr;
     39 #if USES_FUNCTION_DESCRIPTORS
     40     return FUNCTION_ENTRYPOINT_ADDRESS(callback_);
     41 #else
     42     return &callback_;
     43 #endif
     44   }
     45   ExternalCallbackScope* previous() { return previous_scope_; }
     46   inline Address scope_address();
     47 
     48  private:
     49   Isolate* isolate_;
     50   Address callback_;
     51   ExternalCallbackScope* previous_scope_;
     52 #ifdef USE_SIMULATOR
     53   Address scope_address_;
     54 #endif
     55 };
     56 
     57 }  // namespace internal
     58 }  // namespace v8
     59 
     60 
     61 #endif  // V8_VM_STATE_H_
     62