16d786c9805481bd13ecb29c3155540f2f32950e1svenpanne@chromium.org// Copyright 2011 the V8 project authors. All rights reserved.
23484964a86451e86dcf04be9bd8c0d76ee04f081rossberg@chromium.org// Use of this source code is governed by a BSD-style license that can be
33484964a86451e86dcf04be9bd8c0d76ee04f081rossberg@chromium.org// found in the LICENSE file.
443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen//
643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// Top include for all V8 .cc files.
743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen//
843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen#ifndef V8_V8_H_
1043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen#define V8_V8_H_
1143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
1231e7138e1a05e29ceefa8919ae12cb621a48ca7fmads.s.ager#if defined(GOOGLE3)
1331e7138e1a05e29ceefa8919ae12cb621a48ca7fmads.s.ager// Google3 special flag handling.
1431e7138e1a05e29ceefa8919ae12cb621a48ca7fmads.s.ager#if defined(DEBUG) && defined(NDEBUG)
156d786c9805481bd13ecb29c3155540f2f32950e1svenpanne@chromium.org// V8 only uses DEBUG and whenever it is set we are building a debug
166d786c9805481bd13ecb29c3155540f2f32950e1svenpanne@chromium.org// version of V8. We do not use NDEBUG and simply undef it here for
176d786c9805481bd13ecb29c3155540f2f32950e1svenpanne@chromium.org// consistency.
1831e7138e1a05e29ceefa8919ae12cb621a48ca7fmads.s.ager#undef NDEBUG
1943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen#endif
2031e7138e1a05e29ceefa8919ae12cb621a48ca7fmads.s.ager#endif  // defined(GOOGLE3)
2143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
2243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// V8 only uses DEBUG, but included external files
2343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// may use NDEBUG - make sure they are consistent.
2443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen#if defined(DEBUG) && defined(NDEBUG)
2543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen#error both DEBUG and NDEBUG are set
2643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen#endif
2743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
2843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// Basic includes
29196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org#include "include/v8.h"
30196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org#include "include/v8-platform.h"
315de0074a922429f5e0ec2cf140c2d2989bf88140yangguo@chromium.org#include "src/checks.h"  // NOLINT
324b0feeef5d01dbc2948080b4f69daa37e1083461machenbach@chromium.org#include "src/allocation.h"  // NOLINT
334b0feeef5d01dbc2948080b4f69daa37e1083461machenbach@chromium.org#include "src/assert-scope.h"  // NOLINT
344b0feeef5d01dbc2948080b4f69daa37e1083461machenbach@chromium.org#include "src/utils.h"  // NOLINT
354b0feeef5d01dbc2948080b4f69daa37e1083461machenbach@chromium.org#include "src/flags.h"  // NOLINT
364b0feeef5d01dbc2948080b4f69daa37e1083461machenbach@chromium.org#include "src/globals.h"  // NOLINT
3743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
3843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// Objects & heap
394b0feeef5d01dbc2948080b4f69daa37e1083461machenbach@chromium.org#include "src/objects-inl.h"  // NOLINT
403e3d253bd8018d7627422bf55a5c7bb7e7d6ad7emachenbach@chromium.org#include "src/heap/spaces-inl.h"               // NOLINT
413e3d253bd8018d7627422bf55a5c7bb7e7d6ad7emachenbach@chromium.org#include "src/heap/heap-inl.h"                 // NOLINT
423e3d253bd8018d7627422bf55a5c7bb7e7d6ad7emachenbach@chromium.org#include "src/heap/incremental-marking-inl.h"  // NOLINT
433e3d253bd8018d7627422bf55a5c7bb7e7d6ad7emachenbach@chromium.org#include "src/heap/mark-compact-inl.h"         // NOLINT
444b0feeef5d01dbc2948080b4f69daa37e1083461machenbach@chromium.org#include "src/log-inl.h"  // NOLINT
454b0feeef5d01dbc2948080b4f69daa37e1083461machenbach@chromium.org#include "src/handles-inl.h"  // NOLINT
464b0feeef5d01dbc2948080b4f69daa37e1083461machenbach@chromium.org#include "src/types-inl.h"  // NOLINT
474b0feeef5d01dbc2948080b4f69daa37e1083461machenbach@chromium.org#include "src/zone-inl.h"  // NOLINT
4843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
4971affb54842da76b24f0bb3184e9f0960523f89dkasperl@chromium.orgnamespace v8 {
5071affb54842da76b24f0bb3184e9f0960523f89dkasperl@chromium.orgnamespace internal {
5143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
5243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenclass V8 : public AllStatic {
5343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen public:
5443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen  // Global actions.
5543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
56a2c0c1516848536a514b3178d2c040b7df0ceb5bmachenbach@chromium.org  static bool Initialize();
5743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen  static void TearDown();
5843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
5943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen  // Report process out of memory. Implementation found in api.cc.
60c4e51ac6d26b42753a57a4a9e4a419243b50151clrn@chromium.org  static void FatalProcessOutOfMemory(const char* location,
61c4e51ac6d26b42753a57a4a9e4a419243b50151clrn@chromium.org                                      bool take_snapshot = false);
62eadaf2282ee421d7a63a21d71369b029105341ccager@chromium.org
6384bcc559ac20fb04f806e97d28a314b20b58fd60svenpanne@chromium.org  // Allows an entropy source to be provided for use in random number
6484bcc559ac20fb04f806e97d28a314b20b58fd60svenpanne@chromium.org  // generation.
6584bcc559ac20fb04f806e97d28a314b20b58fd60svenpanne@chromium.org  static void SetEntropySource(EntropySource source);
66967e270a034432457500dbf950d2c4951a929e52ulan@chromium.org  // Support for return-address rewriting profilers.
67967e270a034432457500dbf950d2c4951a929e52ulan@chromium.org  static void SetReturnAddressLocationResolver(
68967e270a034432457500dbf950d2c4951a929e52ulan@chromium.org      ReturnAddressLocationResolver resolver);
691510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org  // Support for entry hooking JITed code.
701510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org  static void SetFunctionEntryHook(FunctionEntryHook entry_hook);
71eadaf2282ee421d7a63a21d71369b029105341ccager@chromium.org
72837a67edd9afdbfe1b59482b41693f59c48846ffulan@chromium.org  static v8::ArrayBuffer::Allocator* ArrayBufferAllocator() {
73837a67edd9afdbfe1b59482b41693f59c48846ffulan@chromium.org    return array_buffer_allocator_;
74837a67edd9afdbfe1b59482b41693f59c48846ffulan@chromium.org  }
75837a67edd9afdbfe1b59482b41693f59c48846ffulan@chromium.org
76837a67edd9afdbfe1b59482b41693f59c48846ffulan@chromium.org  static void SetArrayBufferAllocator(v8::ArrayBuffer::Allocator *allocator) {
77837a67edd9afdbfe1b59482b41693f59c48846ffulan@chromium.org    CHECK_EQ(NULL, array_buffer_allocator_);
78837a67edd9afdbfe1b59482b41693f59c48846ffulan@chromium.org    array_buffer_allocator_ = allocator;
79837a67edd9afdbfe1b59482b41693f59c48846ffulan@chromium.org  }
80837a67edd9afdbfe1b59482b41693f59c48846ffulan@chromium.org
8190dca01eac542464c29011d239bf18f26e0b8f00machenbach@chromium.org  static void InitializePlatform(v8::Platform* platform);
8290dca01eac542464c29011d239bf18f26e0b8f00machenbach@chromium.org  static void ShutdownPlatform();
8390dca01eac542464c29011d239bf18f26e0b8f00machenbach@chromium.org  static v8::Platform* GetCurrentPlatform();
8490dca01eac542464c29011d239bf18f26e0b8f00machenbach@chromium.org
8543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen private:
861456e708d277e725ca42a03463af16fe471c9210jkummerow@chromium.org  static void InitializeOncePerProcessImpl();
87c36ce6e8979bbbd43539f0a0effc87ea20dd65cckmillikin@chromium.org  static void InitializeOncePerProcess();
88c36ce6e8979bbbd43539f0a0effc87ea20dd65cckmillikin@chromium.org
89837a67edd9afdbfe1b59482b41693f59c48846ffulan@chromium.org  // Allocator for external array buffers.
90837a67edd9afdbfe1b59482b41693f59c48846ffulan@chromium.org  static v8::ArrayBuffer::Allocator* array_buffer_allocator_;
9190dca01eac542464c29011d239bf18f26e0b8f00machenbach@chromium.org  // v8::Platform to use.
9290dca01eac542464c29011d239bf18f26e0b8f00machenbach@chromium.org  static v8::Platform* platform_;
9343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen};
9443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
95c3b670ff19220959730d7886892bc4beb95d2ebaerik.corry@gmail.com
96c3b670ff19220959730d7886892bc4beb95d2ebaerik.corry@gmail.com// JavaScript defines two kinds of 'nil'.
97c3b670ff19220959730d7886892bc4beb95d2ebaerik.corry@gmail.comenum NilValue { kNullValue, kUndefinedValue };
98c3b670ff19220959730d7886892bc4beb95d2ebaerik.corry@gmail.com
99c3b670ff19220959730d7886892bc4beb95d2ebaerik.corry@gmail.com
10043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} }  // namespace v8::internal
10143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
10243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen#endif  // V8_V8_H_
103