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