v8  3.14.5(node0.10.28)
V8 is Google's open source JavaScript engine
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
v8.h
Go to the documentation of this file.
1 // Copyright 2011 the V8 project authors. All rights reserved.
2 // Redistribution and use in source and binary forms, with or without
3 // modification, are permitted provided that the following conditions are
4 // met:
5 //
6 // * Redistributions of source code must retain the above copyright
7 // notice, this list of conditions and the following disclaimer.
8 // * Redistributions in binary form must reproduce the above
9 // copyright notice, this list of conditions and the following
10 // disclaimer in the documentation and/or other materials provided
11 // with the distribution.
12 // * Neither the name of Google Inc. nor the names of its
13 // contributors may be used to endorse or promote products derived
14 // from this software without specific prior written permission.
15 //
16 // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
17 // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
18 // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
19 // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
20 // OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
21 // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
22 // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
23 // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
24 // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
25 // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
26 // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27 
28 //
29 // Top include for all V8 .cc files.
30 //
31 
32 #ifndef V8_V8_H_
33 #define V8_V8_H_
34 
35 #if defined(GOOGLE3)
36 // Google3 special flag handling.
37 #if defined(DEBUG) && defined(NDEBUG)
38 // V8 only uses DEBUG and whenever it is set we are building a debug
39 // version of V8. We do not use NDEBUG and simply undef it here for
40 // consistency.
41 #undef NDEBUG
42 #endif
43 #endif // defined(GOOGLE3)
44 
45 // V8 only uses DEBUG, but included external files
46 // may use NDEBUG - make sure they are consistent.
47 #if defined(DEBUG) && defined(NDEBUG)
48 #error both DEBUG and NDEBUG are set
49 #endif
50 
51 // Basic includes
52 #include "../include/v8.h"
53 #include "v8globals.h"
54 #include "v8checks.h"
55 #include "allocation.h"
56 #include "v8utils.h"
57 #include "flags.h"
58 
59 // Objects & heap
60 #include "objects-inl.h"
61 #include "spaces-inl.h"
62 #include "heap-inl.h"
64 #include "mark-compact-inl.h"
65 #include "log-inl.h"
66 #include "cpu-profiler-inl.h"
67 #include "handles-inl.h"
68 #include "zone-inl.h"
69 
70 namespace v8 {
71 namespace internal {
72 
73 class Deserializer;
74 
75 class V8 : public AllStatic {
76  public:
77  // Global actions.
78 
79  // If Initialize is called with des == NULL, the initial state is
80  // created from scratch. If a non-null Deserializer is given, the
81  // initial state is created by reading the deserialized data into an
82  // empty heap.
83  static bool Initialize(Deserializer* des);
84  static void TearDown();
85  static bool IsRunning() { return is_running_; }
86  static bool UseCrankshaft() { return use_crankshaft_; }
87  // To be dead you have to have lived
88  // TODO(isolates): move IsDead to Isolate.
89  static bool IsDead() { return has_fatal_error_ || has_been_disposed_; }
90  static void SetFatalError();
91 
92  // Report process out of memory. Implementation found in api.cc.
93  static void FatalProcessOutOfMemory(const char* location,
94  bool take_snapshot = false);
95 
96  // Allows an entropy source to be provided for use in random number
97  // generation.
98  static void SetEntropySource(EntropySource source);
99  // Support for return-address rewriting profilers.
102  // Random number generation support. Not cryptographically safe.
103  static uint32_t Random(Context* context);
104  // We use random numbers internally in memory allocation and in the
105  // compilers for security. In order to prevent information leaks we
106  // use a separate random state for internal random number
107  // generation.
108  static uint32_t RandomPrivate(Isolate* isolate);
109  static Object* FillHeapNumberWithRandom(Object* heap_number,
110  Context* context);
111 
112  // Idle notification directly from the API.
113  static bool IdleNotification(int hint);
114 
115  static void AddCallCompletedCallback(CallCompletedCallback callback);
117  static void FireCallCompletedCallback(Isolate* isolate);
118 
119  private:
120  static void InitializeOncePerProcessImpl();
121  static void InitializeOncePerProcess();
122 
123  // True if engine is currently running
124  static bool is_running_;
125  // True if V8 has ever been run
126  static bool has_been_set_up_;
127  // True if error has been signaled for current engine
128  // (reset to false if engine is restarted)
129  static bool has_fatal_error_;
130  // True if engine has been shut down
131  // (reset if engine is restarted)
132  static bool has_been_disposed_;
133  // True if we are using the crankshaft optimizing compiler.
134  static bool use_crankshaft_;
135  // List of callbacks when a Call completes.
136  static List<CallCompletedCallback>* call_completed_callbacks_;
137 };
138 
139 
140 // JavaScript defines two kinds of 'nil'.
142 
143 
144 // JavaScript defines two kinds of equality.
146 
147 
148 } } // namespace v8::internal
149 
150 namespace i = v8::internal;
151 
152 #endif // V8_V8_H_
static bool Initialize(Deserializer *des)
Definition: v8.cc:64
void(* CallCompletedCallback)()
Definition: v8.h:2724
static bool UseCrankshaft()
Definition: v8.h:86
static void SetFatalError()
Definition: v8.cc:97
static void FireCallCompletedCallback(Isolate *isolate)
Definition: v8.cc:218
static Object * FillHeapNumberWithRandom(Object *heap_number, Context *context)
Definition: v8.cc:239
EqualityKind
Definition: v8.h:145
static bool IsDead()
Definition: v8.h:89
static bool IdleNotification(int hint)
Definition: v8.cc:187
static void SetEntropySource(EntropySource source)
Definition: v8.cc:159
NilValue
Definition: v8.h:141
uintptr_t(* ReturnAddressLocationResolver)(uintptr_t return_addr_location)
Definition: v8.h:2950
static void RemoveCallCompletedCallback(CallCompletedCallback callback)
Definition: v8.cc:208
static uint32_t RandomPrivate(Isolate *isolate)
Definition: v8.cc:181
static void AddCallCompletedCallback(CallCompletedCallback callback)
Definition: v8.cc:197
static void SetReturnAddressLocationResolver(ReturnAddressLocationResolver resolver)
Definition: v8.cc:164
static void TearDown()
Definition: v8.cc:103
bool(* EntropySource)(unsigned char *buffer, size_t length)
Definition: v8.h:2934
static void FatalProcessOutOfMemory(const char *location, bool take_snapshot=false)
static bool IsRunning()
Definition: v8.h:85
static uint32_t Random(Context *context)
Definition: v8.cc:171