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