1 // Copyright 2011 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 //
6 // Top include for all V8 .cc files.
7 //
8 
9 #ifndef V8_V8_H_
10 #define V8_V8_H_
11 
12 #if defined(GOOGLE3)
13 // Google3 special flag handling.
14 #if defined(DEBUG) && defined(NDEBUG)
15 // V8 only uses DEBUG and whenever it is set we are building a debug
16 // version of V8. We do not use NDEBUG and simply undef it here for
17 // consistency.
18 #undef NDEBUG
19 #endif
20 #endif  // defined(GOOGLE3)
21 
22 // V8 only uses DEBUG, but included external files
23 // may use NDEBUG - make sure they are consistent.
24 #if defined(DEBUG) && defined(NDEBUG)
25 #error both DEBUG and NDEBUG are set
26 #endif
27 
28 // Basic includes
29 #include "include/v8.h"
30 #include "include/v8-platform.h"
31 #include "src/checks.h"  // NOLINT
32 #include "src/allocation.h"  // NOLINT
33 #include "src/assert-scope.h"  // NOLINT
34 #include "src/utils.h"  // NOLINT
35 #include "src/flags.h"  // NOLINT
36 #include "src/globals.h"  // NOLINT
37 
38 // Objects & heap
39 #include "src/objects-inl.h"  // NOLINT
40 #include "src/heap/spaces-inl.h"               // NOLINT
41 #include "src/heap/heap-inl.h"                 // NOLINT
42 #include "src/heap/incremental-marking-inl.h"  // NOLINT
43 #include "src/heap/mark-compact-inl.h"         // NOLINT
44 #include "src/log-inl.h"  // NOLINT
45 #include "src/handles-inl.h"  // NOLINT
46 #include "src/types-inl.h"  // NOLINT
47 #include "src/zone-inl.h"  // NOLINT
48 
49 namespace v8 {
50 namespace internal {
51 
52 class V8 : public AllStatic {
53  public:
54   // Global actions.
55 
56   static bool Initialize();
57   static void TearDown();
58 
59   // Report process out of memory. Implementation found in api.cc.
60   static void FatalProcessOutOfMemory(const char* location,
61                                       bool take_snapshot = false);
62 
63   // Allows an entropy source to be provided for use in random number
64   // generation.
65   static void SetEntropySource(EntropySource source);
66   // Support for return-address rewriting profilers.
67   static void SetReturnAddressLocationResolver(
68       ReturnAddressLocationResolver resolver);
69   // Support for entry hooking JITed code.
70   static void SetFunctionEntryHook(FunctionEntryHook entry_hook);
71 
ArrayBufferAllocator()72   static v8::ArrayBuffer::Allocator* ArrayBufferAllocator() {
73     return array_buffer_allocator_;
74   }
75 
SetArrayBufferAllocator(v8::ArrayBuffer::Allocator * allocator)76   static void SetArrayBufferAllocator(v8::ArrayBuffer::Allocator *allocator) {
77     CHECK_EQ(NULL, array_buffer_allocator_);
78     array_buffer_allocator_ = allocator;
79   }
80 
81   static void InitializePlatform(v8::Platform* platform);
82   static void ShutdownPlatform();
83   static v8::Platform* GetCurrentPlatform();
84 
85  private:
86   static void InitializeOncePerProcessImpl();
87   static void InitializeOncePerProcess();
88 
89   // Allocator for external array buffers.
90   static v8::ArrayBuffer::Allocator* array_buffer_allocator_;
91   // v8::Platform to use.
92   static v8::Platform* platform_;
93 };
94 
95 
96 // JavaScript defines two kinds of 'nil'.
97 enum NilValue { kNullValue, kUndefinedValue };
98 
99 
100 } }  // namespace v8::internal
101 
102 #endif  // V8_V8_H_
103