| Steve Block | a7e24c1 | 2009-10-30 11:49:00 +0000 | [diff] [blame] | 1 | // Copyright 2006-2008 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 | // If both are defined in Google3, then we are building an optimized v8 with | 
 | 39 | // assertions enabled. | 
 | 40 | #undef NDEBUG | 
 | 41 | #elif !defined(DEBUG) && !defined(NDEBUG) | 
 | 42 | // If neither is defined in Google3, then we are building a debug v8. Mark it | 
 | 43 | // as such. | 
 | 44 | #define DEBUG | 
 | 45 | #endif | 
 | 46 | #endif  // defined(GOOGLE3) | 
 | 47 |  | 
 | 48 | // V8 only uses DEBUG, but included external files | 
 | 49 | // may use NDEBUG - make sure they are consistent. | 
 | 50 | #if defined(DEBUG) && defined(NDEBUG) | 
 | 51 | #error both DEBUG and NDEBUG are set | 
 | 52 | #endif | 
 | 53 |  | 
 | 54 | // Basic includes | 
 | 55 | #include "../include/v8.h" | 
| Shimeng (Simon) Wang | 8a31eba | 2010-12-06 19:01:33 -0800 | [diff] [blame] | 56 | #include "v8globals.h" | 
 | 57 | #include "v8checks.h" | 
| Steve Block | a7e24c1 | 2009-10-30 11:49:00 +0000 | [diff] [blame] | 58 | #include "allocation.h" | 
| Teng-Hui Zhu | 3e5fa29 | 2010-11-09 16:16:48 -0800 | [diff] [blame] | 59 | #include "v8utils.h" | 
| Steve Block | a7e24c1 | 2009-10-30 11:49:00 +0000 | [diff] [blame] | 60 | #include "flags.h" | 
 | 61 |  | 
 | 62 | // Objects & heap | 
| Steve Block | a7e24c1 | 2009-10-30 11:49:00 +0000 | [diff] [blame] | 63 | #include "objects-inl.h" | 
 | 64 | #include "spaces-inl.h" | 
 | 65 | #include "heap-inl.h" | 
 | 66 | #include "log-inl.h" | 
| Steve Block | 6ded16b | 2010-05-10 14:33:55 +0100 | [diff] [blame] | 67 | #include "cpu-profiler-inl.h" | 
 | 68 | #include "handles-inl.h" | 
| Steve Block | a7e24c1 | 2009-10-30 11:49:00 +0000 | [diff] [blame] | 69 |  | 
 | 70 | namespace v8 { | 
 | 71 | namespace internal { | 
 | 72 |  | 
| Steve Block | d0582a6 | 2009-12-15 09:54:21 +0000 | [diff] [blame] | 73 | class Deserializer; | 
 | 74 |  | 
| Steve Block | a7e24c1 | 2009-10-30 11:49:00 +0000 | [diff] [blame] | 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_; } | 
| Ben Murdoch | b0fe162 | 2011-05-05 13:52:32 +0100 | [diff] [blame] | 86 |   static bool UseCrankshaft() { return use_crankshaft_; } | 
| Steve Block | a7e24c1 | 2009-10-30 11:49:00 +0000 | [diff] [blame] | 87 |   // To be dead you have to have lived | 
| Steve Block | 44f0eee | 2011-05-26 01:26:41 +0100 | [diff] [blame] | 88 |   // TODO(isolates): move IsDead to Isolate. | 
| Steve Block | a7e24c1 | 2009-10-30 11:49:00 +0000 | [diff] [blame] | 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. | 
| Ben Murdoch | bb769b2 | 2010-08-11 14:56:33 +0100 | [diff] [blame] | 93 |   static void FatalProcessOutOfMemory(const char* location, | 
 | 94 |                                       bool take_snapshot = false); | 
| Steve Block | a7e24c1 | 2009-10-30 11:49:00 +0000 | [diff] [blame] | 95 |  | 
 | 96 |   // Random number generation support. Not cryptographically safe. | 
| Steve Block | 44f0eee | 2011-05-26 01:26:41 +0100 | [diff] [blame] | 97 |   static uint32_t Random(Isolate* isolate); | 
| Shimeng (Simon) Wang | 8a31eba | 2010-12-06 19:01:33 -0800 | [diff] [blame] | 98 |   // We use random numbers internally in memory allocation and in the | 
 | 99 |   // compilers for security. In order to prevent information leaks we | 
 | 100 |   // use a separate random state for internal random number | 
 | 101 |   // generation. | 
| Steve Block | 44f0eee | 2011-05-26 01:26:41 +0100 | [diff] [blame] | 102 |   static uint32_t RandomPrivate(Isolate* isolate); | 
| Ben Murdoch | 8b112d2 | 2011-06-08 16:22:53 +0100 | [diff] [blame] | 103 |   static Object* FillHeapNumberWithRandom(Object* heap_number, | 
 | 104 |                                           Isolate* isolate); | 
| Steve Block | a7e24c1 | 2009-10-30 11:49:00 +0000 | [diff] [blame] | 105 |  | 
 | 106 |   // Idle notification directly from the API. | 
| Steve Block | 3ce2e20 | 2009-11-05 08:53:23 +0000 | [diff] [blame] | 107 |   static bool IdleNotification(); | 
| Steve Block | a7e24c1 | 2009-10-30 11:49:00 +0000 | [diff] [blame] | 108 |  | 
 | 109 |  private: | 
| Ben Murdoch | 8b112d2 | 2011-06-08 16:22:53 +0100 | [diff] [blame] | 110 |   static void InitializeOncePerProcess(); | 
 | 111 |  | 
| Steve Block | a7e24c1 | 2009-10-30 11:49:00 +0000 | [diff] [blame] | 112 |   // True if engine is currently running | 
 | 113 |   static bool is_running_; | 
 | 114 |   // True if V8 has ever been run | 
 | 115 |   static bool has_been_setup_; | 
 | 116 |   // True if error has been signaled for current engine | 
 | 117 |   // (reset to false if engine is restarted) | 
 | 118 |   static bool has_fatal_error_; | 
 | 119 |   // True if engine has been shut down | 
 | 120 |   // (reset if engine is restarted) | 
 | 121 |   static bool has_been_disposed_; | 
| Ben Murdoch | b0fe162 | 2011-05-05 13:52:32 +0100 | [diff] [blame] | 122 |   // True if we are using the crankshaft optimizing compiler. | 
 | 123 |   static bool use_crankshaft_; | 
| Steve Block | a7e24c1 | 2009-10-30 11:49:00 +0000 | [diff] [blame] | 124 | }; | 
 | 125 |  | 
 | 126 | } }  // namespace v8::internal | 
 | 127 |  | 
 | 128 | namespace i = v8::internal; | 
 | 129 |  | 
 | 130 | #endif  // V8_V8_H_ |