16d786c9805481bd13ecb29c3155540f2f32950e1svenpanne@chromium.org// Copyright 2011 the V8 project authors. All rights reserved.
243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// Redistribution and use in source and binary forms, with or without
343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// modification, are permitted provided that the following conditions are
443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// met:
543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen//
643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen//     * Redistributions of source code must retain the above copyright
743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen//       notice, this list of conditions and the following disclaimer.
843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen//     * Redistributions in binary form must reproduce the above
943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen//       copyright notice, this list of conditions and the following
1043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen//       disclaimer in the documentation and/or other materials provided
1143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen//       with the distribution.
1243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen//     * Neither the name of Google Inc. nor the names of its
1343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen//       contributors may be used to endorse or promote products derived
1443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen//       from this software without specific prior written permission.
1543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen//
1643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
1743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
1843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
1943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
2043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
2143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
2243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
2343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
2443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
2543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
2643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
2743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
2843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen//
2943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// Top include for all V8 .cc files.
3043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen//
3143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
3243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen#ifndef V8_V8_H_
3343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen#define V8_V8_H_
3443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
3531e7138e1a05e29ceefa8919ae12cb621a48ca7fmads.s.ager#if defined(GOOGLE3)
3631e7138e1a05e29ceefa8919ae12cb621a48ca7fmads.s.ager// Google3 special flag handling.
3731e7138e1a05e29ceefa8919ae12cb621a48ca7fmads.s.ager#if defined(DEBUG) && defined(NDEBUG)
386d786c9805481bd13ecb29c3155540f2f32950e1svenpanne@chromium.org// V8 only uses DEBUG and whenever it is set we are building a debug
396d786c9805481bd13ecb29c3155540f2f32950e1svenpanne@chromium.org// version of V8. We do not use NDEBUG and simply undef it here for
406d786c9805481bd13ecb29c3155540f2f32950e1svenpanne@chromium.org// consistency.
4131e7138e1a05e29ceefa8919ae12cb621a48ca7fmads.s.ager#undef NDEBUG
4243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen#endif
4331e7138e1a05e29ceefa8919ae12cb621a48ca7fmads.s.ager#endif  // defined(GOOGLE3)
4443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
4543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// V8 only uses DEBUG, but included external files
4643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// may use NDEBUG - make sure they are consistent.
4743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen#if defined(DEBUG) && defined(NDEBUG)
4843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen#error both DEBUG and NDEBUG are set
4943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen#endif
5043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
5143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// Basic includes
52727e995b7bba3c57fb1e5c156d386ca11894f781v#include "../include/v8.h"
5390dca01eac542464c29011d239bf18f26e0b8f00machenbach@chromium.org#include "../include/v8-platform.h"
544a6c3279070e8f133607a74c08d8c08ac394ab98erik.corry@gmail.com#include "v8globals.h"
55beb2571dca14508fbbbb47a2f606327d5968ee92ager@chromium.org#include "v8checks.h"
5643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen#include "allocation.h"
5779e7902fa5f94747b5383dd40f3002dd8b62303arossberg@chromium.org#include "assert-scope.h"
58f0ac72dfa39ec827de605aafc57d4834237aa7f3whesse@chromium.org#include "v8utils.h"
59b912362e2b2e704d09faac4290e027fd744bf587kasperl@chromium.org#include "flags.h"
6043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
6143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// Objects & heap
6243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen#include "objects-inl.h"
6343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen#include "spaces-inl.h"
6443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen#include "heap-inl.h"
65c3b670ff19220959730d7886892bc4beb95d2ebaerik.corry@gmail.com#include "incremental-marking-inl.h"
66c3b670ff19220959730d7886892bc4beb95d2ebaerik.corry@gmail.com#include "mark-compact-inl.h"
673e87580939cb78c5802369f723680d4a16cc2902ager@chromium.org#include "log-inl.h"
68ce5e87bd905d592a8bd612b3dedf7a994177c13aager@chromium.org#include "handles-inl.h"
69400388edd471bd4d4a97b21c52c1024cd1cc5708rossberg@chromium.org#include "zone-inl.h"
7043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
7171affb54842da76b24f0bb3184e9f0960523f89dkasperl@chromium.orgnamespace v8 {
7271affb54842da76b24f0bb3184e9f0960523f89dkasperl@chromium.orgnamespace internal {
7343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
74c4c927273ae2b690c4a015b4640a2a469c9a1a69ager@chromium.orgclass Deserializer;
75c4c927273ae2b690c4a015b4640a2a469c9a1a69ager@chromium.org
7643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenclass V8 : public AllStatic {
7743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen public:
7843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen  // Global actions.
7943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
80eadaf2282ee421d7a63a21d71369b029105341ccager@chromium.org  // If Initialize is called with des == NULL, the initial state is
81eadaf2282ee421d7a63a21d71369b029105341ccager@chromium.org  // created from scratch. If a non-null Deserializer is given, the
82eadaf2282ee421d7a63a21d71369b029105341ccager@chromium.org  // initial state is created by reading the deserialized data into an
83eadaf2282ee421d7a63a21d71369b029105341ccager@chromium.org  // empty heap.
84c4c927273ae2b690c4a015b4640a2a469c9a1a69ager@chromium.org  static bool Initialize(Deserializer* des);
8543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen  static void TearDown();
8643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
8743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen  // Report process out of memory. Implementation found in api.cc.
88c4e51ac6d26b42753a57a4a9e4a419243b50151clrn@chromium.org  static void FatalProcessOutOfMemory(const char* location,
89c4e51ac6d26b42753a57a4a9e4a419243b50151clrn@chromium.org                                      bool take_snapshot = false);
90eadaf2282ee421d7a63a21d71369b029105341ccager@chromium.org
9184bcc559ac20fb04f806e97d28a314b20b58fd60svenpanne@chromium.org  // Allows an entropy source to be provided for use in random number
9284bcc559ac20fb04f806e97d28a314b20b58fd60svenpanne@chromium.org  // generation.
9384bcc559ac20fb04f806e97d28a314b20b58fd60svenpanne@chromium.org  static void SetEntropySource(EntropySource source);
94967e270a034432457500dbf950d2c4951a929e52ulan@chromium.org  // Support for return-address rewriting profilers.
95967e270a034432457500dbf950d2c4951a929e52ulan@chromium.org  static void SetReturnAddressLocationResolver(
96967e270a034432457500dbf950d2c4951a929e52ulan@chromium.org      ReturnAddressLocationResolver resolver);
971510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org  // Support for entry hooking JITed code.
981510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org  static void SetFunctionEntryHook(FunctionEntryHook entry_hook);
99eadaf2282ee421d7a63a21d71369b029105341ccager@chromium.org
100fab1498f2f42726c7de46c3ed560d56dd072a8b3rossberg@chromium.org  static void AddCallCompletedCallback(CallCompletedCallback callback);
101fab1498f2f42726c7de46c3ed560d56dd072a8b3rossberg@chromium.org  static void RemoveCallCompletedCallback(CallCompletedCallback callback);
102fab1498f2f42726c7de46c3ed560d56dd072a8b3rossberg@chromium.org  static void FireCallCompletedCallback(Isolate* isolate);
103fab1498f2f42726c7de46c3ed560d56dd072a8b3rossberg@chromium.org
104837a67edd9afdbfe1b59482b41693f59c48846ffulan@chromium.org  static v8::ArrayBuffer::Allocator* ArrayBufferAllocator() {
105837a67edd9afdbfe1b59482b41693f59c48846ffulan@chromium.org    return array_buffer_allocator_;
106837a67edd9afdbfe1b59482b41693f59c48846ffulan@chromium.org  }
107837a67edd9afdbfe1b59482b41693f59c48846ffulan@chromium.org
108837a67edd9afdbfe1b59482b41693f59c48846ffulan@chromium.org  static void SetArrayBufferAllocator(v8::ArrayBuffer::Allocator *allocator) {
109837a67edd9afdbfe1b59482b41693f59c48846ffulan@chromium.org    CHECK_EQ(NULL, array_buffer_allocator_);
110837a67edd9afdbfe1b59482b41693f59c48846ffulan@chromium.org    array_buffer_allocator_ = allocator;
111837a67edd9afdbfe1b59482b41693f59c48846ffulan@chromium.org  }
112837a67edd9afdbfe1b59482b41693f59c48846ffulan@chromium.org
11390dca01eac542464c29011d239bf18f26e0b8f00machenbach@chromium.org  static void InitializePlatform(v8::Platform* platform);
11490dca01eac542464c29011d239bf18f26e0b8f00machenbach@chromium.org  static void ShutdownPlatform();
11590dca01eac542464c29011d239bf18f26e0b8f00machenbach@chromium.org  static v8::Platform* GetCurrentPlatform();
11690dca01eac542464c29011d239bf18f26e0b8f00machenbach@chromium.org
11743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen private:
1181456e708d277e725ca42a03463af16fe471c9210jkummerow@chromium.org  static void InitializeOncePerProcessImpl();
119c36ce6e8979bbbd43539f0a0effc87ea20dd65cckmillikin@chromium.org  static void InitializeOncePerProcess();
120c36ce6e8979bbbd43539f0a0effc87ea20dd65cckmillikin@chromium.org
121fab1498f2f42726c7de46c3ed560d56dd072a8b3rossberg@chromium.org  // List of callbacks when a Call completes.
122fab1498f2f42726c7de46c3ed560d56dd072a8b3rossberg@chromium.org  static List<CallCompletedCallback>* call_completed_callbacks_;
123837a67edd9afdbfe1b59482b41693f59c48846ffulan@chromium.org  // Allocator for external array buffers.
124837a67edd9afdbfe1b59482b41693f59c48846ffulan@chromium.org  static v8::ArrayBuffer::Allocator* array_buffer_allocator_;
12590dca01eac542464c29011d239bf18f26e0b8f00machenbach@chromium.org  // v8::Platform to use.
12690dca01eac542464c29011d239bf18f26e0b8f00machenbach@chromium.org  static v8::Platform* platform_;
12743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen};
12843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
129c3b670ff19220959730d7886892bc4beb95d2ebaerik.corry@gmail.com
130c3b670ff19220959730d7886892bc4beb95d2ebaerik.corry@gmail.com// JavaScript defines two kinds of 'nil'.
131c3b670ff19220959730d7886892bc4beb95d2ebaerik.corry@gmail.comenum NilValue { kNullValue, kUndefinedValue };
132c3b670ff19220959730d7886892bc4beb95d2ebaerik.corry@gmail.com
133c3b670ff19220959730d7886892bc4beb95d2ebaerik.corry@gmail.com
13443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} }  // namespace v8::internal
13543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
1367be3c996bea370e151c9fe4ecf7f779cdc5f87adkasperl@chromium.orgnamespace i = v8::internal;
1377be3c996bea370e151c9fe4ecf7f779cdc5f87adkasperl@chromium.org
13843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen#endif  // V8_V8_H_
139