128faa982749c4aa9c090939453dea14bb118f613jkummerow@chromium.org// Copyright 2012 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 5727e995b7bba3c57fb1e5c156d386ca11894f781v/** \mainpage V8 API Reference Guide 69258b6bc66e09368ada54001f619d53b4fc976d5ager@chromium.org * 79258b6bc66e09368ada54001f619d53b4fc976d5ager@chromium.org * V8 is Google's open source JavaScript engine. 8727e995b7bba3c57fb1e5c156d386ca11894f781v * 9727e995b7bba3c57fb1e5c156d386ca11894f781v * This set of documents provides reference material generated from the 10727e995b7bba3c57fb1e5c156d386ca11894f781v * V8 header file, include/v8.h. 11727e995b7bba3c57fb1e5c156d386ca11894f781v * 12727e995b7bba3c57fb1e5c156d386ca11894f781v * For other documentation see http://code.google.com/apis/v8/ 1343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen */ 14727e995b7bba3c57fb1e5c156d386ca11894f781v 159258b6bc66e09368ada54001f619d53b4fc976d5ager@chromium.org#ifndef V8_H_ 169258b6bc66e09368ada54001f619d53b4fc976d5ager@chromium.org#define V8_H_ 1743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 18f0ac72dfa39ec827de605aafc57d4834237aa7f3whesse@chromium.org#include "v8stdint.h" 1943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 20594006017e46d82ed7146611dc12c20e3c509c7ddanno@chromium.org// We reserve the V8_* prefix for macros defined in V8 public API and 21594006017e46d82ed7146611dc12c20e3c509c7ddanno@chromium.org// assume there are no name conflicts with the embedder's code. 22594006017e46d82ed7146611dc12c20e3c509c7ddanno@chromium.org 239259716434187c932704601f700375e53d865de8rossberg@chromium.org#ifdef V8_OS_WIN 249a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.com 259a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.com// Setup for Windows DLL export/import. When building the V8 DLL the 269a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.com// BUILDING_V8_SHARED needs to be defined. When building a program which uses 279a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.com// the V8 DLL USING_V8_SHARED needs to be defined. When either building the V8 289a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.com// static library or building a program which uses the V8 static library neither 299a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.com// BUILDING_V8_SHARED nor USING_V8_SHARED should be defined. 309a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.com#if defined(BUILDING_V8_SHARED) && defined(USING_V8_SHARED) 319a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.com#error both BUILDING_V8_SHARED and USING_V8_SHARED are set - please check the\ 329a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.com build configuration to ensure that at most one of these is set 339a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.com#endif 349a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.com 359a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.com#ifdef BUILDING_V8_SHARED 369259716434187c932704601f700375e53d865de8rossberg@chromium.org# define V8_EXPORT __declspec(dllexport) 379a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.com#elif USING_V8_SHARED 389259716434187c932704601f700375e53d865de8rossberg@chromium.org# define V8_EXPORT __declspec(dllimport) 3943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen#else 409259716434187c932704601f700375e53d865de8rossberg@chromium.org# define V8_EXPORT 419a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.com#endif // BUILDING_V8_SHARED 429a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.com 439259716434187c932704601f700375e53d865de8rossberg@chromium.org#else // V8_OS_WIN 449085a016223a6b72bf580d5781c93ec7b9e54422ager@chromium.org 45d6899c3545b051ec84363203d4235f883b4981bfulan@chromium.org// Setup for Linux shared library export. 469259716434187c932704601f700375e53d865de8rossberg@chromium.org#if V8_HAS_ATTRIBUTE_VISIBILITY && defined(V8_SHARED) 479259716434187c932704601f700375e53d865de8rossberg@chromium.org# ifdef BUILDING_V8_SHARED 489259716434187c932704601f700375e53d865de8rossberg@chromium.org# define V8_EXPORT __attribute__ ((visibility("default"))) 499259716434187c932704601f700375e53d865de8rossberg@chromium.org# else 509259716434187c932704601f700375e53d865de8rossberg@chromium.org# define V8_EXPORT 519259716434187c932704601f700375e53d865de8rossberg@chromium.org# endif 52eeb44b681a16e45f1415dfacff0ba3dba9de5d8cyangguo@chromium.org#else 539259716434187c932704601f700375e53d865de8rossberg@chromium.org# define V8_EXPORT 54eeb44b681a16e45f1415dfacff0ba3dba9de5d8cyangguo@chromium.org#endif 55eeb44b681a16e45f1415dfacff0ba3dba9de5d8cyangguo@chromium.org 569259716434187c932704601f700375e53d865de8rossberg@chromium.org#endif // V8_OS_WIN 57ca29dd85fa02449d17188f5a6ff9a7cdf2ad9680danno@chromium.org 5843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen/** 59727e995b7bba3c57fb1e5c156d386ca11894f781v * The v8 JavaScript engine. 6043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen */ 6143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansennamespace v8 { 6243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 634c54a2aa3c7806f38af0c7dfde22395232ebdff7jkummerow@chromium.orgclass AccessorSignature; 6443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenclass Array; 6543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenclass Boolean; 6684bcc559ac20fb04f806e97d28a314b20b58fd60svenpanne@chromium.orgclass BooleanObject; 674c54a2aa3c7806f38af0c7dfde22395232ebdff7jkummerow@chromium.orgclass Context; 68f705b5034dc5bc422ac1019b591469a7d0534772mstarzinger@chromium.orgclass CpuProfiler; 694c54a2aa3c7806f38af0c7dfde22395232ebdff7jkummerow@chromium.orgclass Data; 7043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenclass Date; 714c54a2aa3c7806f38af0c7dfde22395232ebdff7jkummerow@chromium.orgclass DeclaredAccessorDescriptor; 724c54a2aa3c7806f38af0c7dfde22395232ebdff7jkummerow@chromium.orgclass External; 734c54a2aa3c7806f38af0c7dfde22395232ebdff7jkummerow@chromium.orgclass Function; 744c54a2aa3c7806f38af0c7dfde22395232ebdff7jkummerow@chromium.orgclass FunctionTemplate; 75f705b5034dc5bc422ac1019b591469a7d0534772mstarzinger@chromium.orgclass HeapProfiler; 7643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenclass ImplementationUtilities; 774c54a2aa3c7806f38af0c7dfde22395232ebdff7jkummerow@chromium.orgclass Int32; 784c54a2aa3c7806f38af0c7dfde22395232ebdff7jkummerow@chromium.orgclass Integer; 794c54a2aa3c7806f38af0c7dfde22395232ebdff7jkummerow@chromium.orgclass Isolate; 80e2a8937454723a720c81acc3f9e4162b18999b43machenbach@chromium.orgclass Name; 814c54a2aa3c7806f38af0c7dfde22395232ebdff7jkummerow@chromium.orgclass Number; 824c54a2aa3c7806f38af0c7dfde22395232ebdff7jkummerow@chromium.orgclass NumberObject; 834c54a2aa3c7806f38af0c7dfde22395232ebdff7jkummerow@chromium.orgclass Object; 844c54a2aa3c7806f38af0c7dfde22395232ebdff7jkummerow@chromium.orgclass ObjectOperationDescriptor; 854c54a2aa3c7806f38af0c7dfde22395232ebdff7jkummerow@chromium.orgclass ObjectTemplate; 8690dca01eac542464c29011d239bf18f26e0b8f00machenbach@chromium.orgclass Platform; 874c54a2aa3c7806f38af0c7dfde22395232ebdff7jkummerow@chromium.orgclass Primitive; 884c54a2aa3c7806f38af0c7dfde22395232ebdff7jkummerow@chromium.orgclass RawOperationDescriptor; 896b6df382019a622ba20133e47bbe2e6f323b013bdslomov@chromium.orgclass Script; 9043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenclass Signature; 914c54a2aa3c7806f38af0c7dfde22395232ebdff7jkummerow@chromium.orgclass StackFrame; 924c54a2aa3c7806f38af0c7dfde22395232ebdff7jkummerow@chromium.orgclass StackTrace; 934c54a2aa3c7806f38af0c7dfde22395232ebdff7jkummerow@chromium.orgclass String; 944c54a2aa3c7806f38af0c7dfde22395232ebdff7jkummerow@chromium.orgclass StringObject; 95e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.orgclass Symbol; 96e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.orgclass SymbolObject; 970cc095007a3ccded63f6577751c6a04300eb7ae9machenbach@chromium.orgclass Private; 984c54a2aa3c7806f38af0c7dfde22395232ebdff7jkummerow@chromium.orgclass Uint32; 994c54a2aa3c7806f38af0c7dfde22395232ebdff7jkummerow@chromium.orgclass Utils; 1004c54a2aa3c7806f38af0c7dfde22395232ebdff7jkummerow@chromium.orgclass Value; 10143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansentemplate <class T> class Handle; 10243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansentemplate <class T> class Local; 1031e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.orgtemplate <class T> class Eternal; 104639bac0c5319f96e1bbe3399fb7f7f37344928bddslomov@chromium.orgtemplate<class T> class NonCopyablePersistentTraits; 105c86e8c29eea534916f0d6a2a285b65a86d1b3b67machenbach@chromium.orgtemplate<class T> class PersistentBase; 106639bac0c5319f96e1bbe3399fb7f7f37344928bddslomov@chromium.orgtemplate<class T, 107639bac0c5319f96e1bbe3399fb7f7f37344928bddslomov@chromium.org class M = NonCopyablePersistentTraits<T> > class Persistent; 108c86e8c29eea534916f0d6a2a285b65a86d1b3b67machenbach@chromium.orgtemplate<class T> class UniquePersistent; 1096b6df382019a622ba20133e47bbe2e6f323b013bdslomov@chromium.orgtemplate<class K, class V, class T> class PersistentValueMap; 1102f599e5925b02d78bd78703b44741d6b27e53a44machenbach@chromium.orgtemplate<class V, class T> class PersistentValueVector; 111639bac0c5319f96e1bbe3399fb7f7f37344928bddslomov@chromium.orgtemplate<class T, class P> class WeakCallbackObject; 112bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.orgclass FunctionTemplate; 113bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.orgclass ObjectTemplate; 114bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.orgclass Data; 115a221880197f38ff22d942851060daffa5d036bdfmachenbach@chromium.orgtemplate<typename T> class FunctionCallbackInfo; 116bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.orgtemplate<typename T> class PropertyCallbackInfo; 117bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.orgclass StackTrace; 118bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.orgclass StackFrame; 119bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.orgclass Isolate; 120bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.orgclass DeclaredAccessorDescriptor; 121bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.orgclass ObjectOperationDescriptor; 122bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.orgclass RawOperationDescriptor; 1231510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.orgclass CallHandlerHelper; 124cfdf67d672b8e2cd6cc1df14c082671511745746machenbach@chromium.orgclass EscapableHandleScope; 125381adef828187e237e8758ab730dee1c2834a0b3machenbach@chromium.orgtemplate<typename T> class ReturnValue; 12643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 12718ad94b919217ffbcd2d3159eeb5f8c588761c47ager@chromium.orgnamespace internal { 128c514574143c1bf74d4fb6e7dccb175fe9ff2f5d3sgjesse@chromium.orgclass Arguments; 1292356e6fbe66ac3aa027b61cb43a3c3619b3c3a5evegorov@chromium.orgclass Heap; 130ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.orgclass HeapObject; 131ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.orgclass Isolate; 1324c54a2aa3c7806f38af0c7dfde22395232ebdff7jkummerow@chromium.orgclass Object; 133b376fed08cb9d90a3f67f655adf63c4b35feb106machenbach@chromium.orgstruct StreamedSource; 134f95d4b920abb640ab0986d138ad559a7d3b91d04danno@chromium.orgtemplate<typename T> class CustomArguments; 135bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.orgclass PropertyCallbackArguments; 136bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.orgclass FunctionCallbackArguments; 137639bac0c5319f96e1bbe3399fb7f7f37344928bddslomov@chromium.orgclass GlobalHandles; 13818ad94b919217ffbcd2d3159eeb5f8c588761c47ager@chromium.org} 13918ad94b919217ffbcd2d3159eeb5f8c588761c47ager@chromium.org 14043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 141ca29dd85fa02449d17188f5a6ff9a7cdf2ad9680danno@chromium.org/** 142ca29dd85fa02449d17188f5a6ff9a7cdf2ad9680danno@chromium.org * General purpose unique identifier. 143ca29dd85fa02449d17188f5a6ff9a7cdf2ad9680danno@chromium.org */ 144ca29dd85fa02449d17188f5a6ff9a7cdf2ad9680danno@chromium.orgclass UniqueId { 145ca29dd85fa02449d17188f5a6ff9a7cdf2ad9680danno@chromium.org public: 146ca29dd85fa02449d17188f5a6ff9a7cdf2ad9680danno@chromium.org explicit UniqueId(intptr_t data) 147ca29dd85fa02449d17188f5a6ff9a7cdf2ad9680danno@chromium.org : data_(data) {} 148ca29dd85fa02449d17188f5a6ff9a7cdf2ad9680danno@chromium.org 149ca29dd85fa02449d17188f5a6ff9a7cdf2ad9680danno@chromium.org bool operator==(const UniqueId& other) const { 150ca29dd85fa02449d17188f5a6ff9a7cdf2ad9680danno@chromium.org return data_ == other.data_; 151ca29dd85fa02449d17188f5a6ff9a7cdf2ad9680danno@chromium.org } 152ca29dd85fa02449d17188f5a6ff9a7cdf2ad9680danno@chromium.org 153ca29dd85fa02449d17188f5a6ff9a7cdf2ad9680danno@chromium.org bool operator!=(const UniqueId& other) const { 154ca29dd85fa02449d17188f5a6ff9a7cdf2ad9680danno@chromium.org return data_ != other.data_; 155ca29dd85fa02449d17188f5a6ff9a7cdf2ad9680danno@chromium.org } 156ca29dd85fa02449d17188f5a6ff9a7cdf2ad9680danno@chromium.org 157ca29dd85fa02449d17188f5a6ff9a7cdf2ad9680danno@chromium.org bool operator<(const UniqueId& other) const { 158ca29dd85fa02449d17188f5a6ff9a7cdf2ad9680danno@chromium.org return data_ < other.data_; 159ca29dd85fa02449d17188f5a6ff9a7cdf2ad9680danno@chromium.org } 160ca29dd85fa02449d17188f5a6ff9a7cdf2ad9680danno@chromium.org 161ca29dd85fa02449d17188f5a6ff9a7cdf2ad9680danno@chromium.org private: 162ca29dd85fa02449d17188f5a6ff9a7cdf2ad9680danno@chromium.org intptr_t data_; 163ca29dd85fa02449d17188f5a6ff9a7cdf2ad9680danno@chromium.org}; 164ca29dd85fa02449d17188f5a6ff9a7cdf2ad9680danno@chromium.org 165fb144a0716afe7ab8bf245f2391a9e53b3db3c89fschneider@chromium.org// --- Handles --- 16643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 167ed78ffdee6ea4f4f94420b464e7377b610fdac2ffschneider@chromium.org#define TYPE_CHECK(T, S) \ 168ed78ffdee6ea4f4f94420b464e7377b610fdac2ffschneider@chromium.org while (false) { \ 169ed78ffdee6ea4f4f94420b464e7377b610fdac2ffschneider@chromium.org *(static_cast<T* volatile*>(0)) = static_cast<S*>(0); \ 17043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } 17143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 17257ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org 17343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen/** 17443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * An object reference managed by the v8 garbage collector. 17543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * 17643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * All objects returned from v8 have to be tracked by the garbage 17743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * collector so that it knows that the objects are still alive. Also, 17843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * because the garbage collector may move objects, it is unsafe to 17943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * point directly to an object. Instead, all objects are stored in 18043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * handles which are known by the garbage collector and updated 18143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * whenever an object moves. Handles should always be passed by value 18243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * (except in cases like out-parameters) and they should never be 18343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * allocated on the heap. 18443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * 18543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * There are two types of handles: local and persistent handles. 18643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * Local handles are light-weight and transient and typically used in 18743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * local operations. They are managed by HandleScopes. Persistent 18843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * handles can be used when storing objects across several independent 18943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * operations and have to be explicitly deallocated when they're no 19043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * longer used. 19143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * 19243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * It is safe to extract the object stored in the handle by 19343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * dereferencing the handle (for instance, to extract the Object* from 1947304bcac06a6a63b9f3dcebac2eeceada87ca146vegorov@chromium.org * a Handle<Object>); the value will still be governed by a handle 19543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * behind the scenes and the same rules apply to these values as to 19643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * their handles. 19743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen */ 19869ea3965ef6e0d3f020a402cf7e6b96b9cb651aekmillikin@chromium.orgtemplate <class T> class Handle { 19943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen public: 20043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen /** 20143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * Creates an empty handle. 20243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen */ 2034a35c5a501e5b966f895ddea8e19c3ca232cb23fdslomov@chromium.org V8_INLINE Handle() : val_(0) {} 20443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 20543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen /** 20643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * Creates a handle for the contents of the specified handle. This 20743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * constructor allows you to pass handles as arguments by value and 208727e995b7bba3c57fb1e5c156d386ca11894f781v * to assign between handles. However, if you try to assign between 20943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * incompatible handles, for instance from a Handle<String> to a 2107304bcac06a6a63b9f3dcebac2eeceada87ca146vegorov@chromium.org * Handle<Number> it will cause a compile-time error. Assigning 21143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * between compatible handles, for instance assigning a 21243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * Handle<String> to a variable declared as Handle<Value>, is legal 21343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * because String is a subclass of Value. 21443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen */ 2154a35c5a501e5b966f895ddea8e19c3ca232cb23fdslomov@chromium.org template <class S> V8_INLINE Handle(Handle<S> that) 21643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen : val_(reinterpret_cast<T*>(*that)) { 21743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen /** 21843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * This check fails when trying to convert between incompatible 21943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * handles. For example, converting from a Handle<String> to a 22043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * Handle<Number>. 22143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen */ 22243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen TYPE_CHECK(T, S); 22343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } 22443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 22543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen /** 22643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * Returns true if the handle is empty. 22743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen */ 2284a35c5a501e5b966f895ddea8e19c3ca232cb23fdslomov@chromium.org V8_INLINE bool IsEmpty() const { return val_ == 0; } 22943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 23043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen /** 23143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * Sets the handle to be empty. IsEmpty() will then return true. 23243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen */ 2334a35c5a501e5b966f895ddea8e19c3ca232cb23fdslomov@chromium.org V8_INLINE void Clear() { val_ = 0; } 234b645116853c677aca8a316381b87441ba6004f67danno@chromium.org 2354a35c5a501e5b966f895ddea8e19c3ca232cb23fdslomov@chromium.org V8_INLINE T* operator->() const { return val_; } 236b645116853c677aca8a316381b87441ba6004f67danno@chromium.org 2374a35c5a501e5b966f895ddea8e19c3ca232cb23fdslomov@chromium.org V8_INLINE T* operator*() const { return val_; } 23843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 23943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen /** 24043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * Checks whether two handles are the same. 24143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * Returns true if both are empty, or if the objects 24243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * to which they refer are identical. 24343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * The handles' references are not checked. 24443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen */ 2454a35c5a501e5b966f895ddea8e19c3ca232cb23fdslomov@chromium.org template <class S> V8_INLINE bool operator==(const Handle<S>& that) const { 246c86e8c29eea534916f0d6a2a285b65a86d1b3b67machenbach@chromium.org internal::Object** a = reinterpret_cast<internal::Object**>(this->val_); 247c86e8c29eea534916f0d6a2a285b65a86d1b3b67machenbach@chromium.org internal::Object** b = reinterpret_cast<internal::Object**>(that.val_); 24843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen if (a == 0) return b == 0; 24943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen if (b == 0) return false; 25043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen return *a == *b; 25143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } 25243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 2534a35c5a501e5b966f895ddea8e19c3ca232cb23fdslomov@chromium.org template <class S> V8_INLINE bool operator==( 254c86e8c29eea534916f0d6a2a285b65a86d1b3b67machenbach@chromium.org const PersistentBase<S>& that) const { 255c86e8c29eea534916f0d6a2a285b65a86d1b3b67machenbach@chromium.org internal::Object** a = reinterpret_cast<internal::Object**>(this->val_); 256c86e8c29eea534916f0d6a2a285b65a86d1b3b67machenbach@chromium.org internal::Object** b = reinterpret_cast<internal::Object**>(that.val_); 25757ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org if (a == 0) return b == 0; 25857ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org if (b == 0) return false; 25957ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org return *a == *b; 26057ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org } 26157ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org 26243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen /** 26343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * Checks whether two handles are different. 26443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * Returns true if only one of the handles is empty, or if 26543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * the objects to which they refer are different. 26643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * The handles' references are not checked. 26743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen */ 2684a35c5a501e5b966f895ddea8e19c3ca232cb23fdslomov@chromium.org template <class S> V8_INLINE bool operator!=(const Handle<S>& that) const { 26943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen return !operator==(that); 27043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } 27143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 2724a35c5a501e5b966f895ddea8e19c3ca232cb23fdslomov@chromium.org template <class S> V8_INLINE bool operator!=( 2734a35c5a501e5b966f895ddea8e19c3ca232cb23fdslomov@chromium.org const Persistent<S>& that) const { 27432cb9b2c195baa85d4c04f4c7b22b9aa04e97d3fverwaest@chromium.org return !operator==(that); 27532cb9b2c195baa85d4c04f4c7b22b9aa04e97d3fverwaest@chromium.org } 27632cb9b2c195baa85d4c04f4c7b22b9aa04e97d3fverwaest@chromium.org 2774a35c5a501e5b966f895ddea8e19c3ca232cb23fdslomov@chromium.org template <class S> V8_INLINE static Handle<T> Cast(Handle<S> that) { 27818ad94b919217ffbcd2d3159eeb5f8c588761c47ager@chromium.org#ifdef V8_ENABLE_CHECKS 27918ad94b919217ffbcd2d3159eeb5f8c588761c47ager@chromium.org // If we're going to perform the type check then we have to check 28018ad94b919217ffbcd2d3159eeb5f8c588761c47ager@chromium.org // that the handle isn't empty before doing the checked cast. 28143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen if (that.IsEmpty()) return Handle<T>(); 28218ad94b919217ffbcd2d3159eeb5f8c588761c47ager@chromium.org#endif 28343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen return Handle<T>(T::Cast(*that)); 28443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } 28543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 2864a35c5a501e5b966f895ddea8e19c3ca232cb23fdslomov@chromium.org template <class S> V8_INLINE Handle<S> As() { 287ce5e87bd905d592a8bd612b3dedf7a994177c13aager@chromium.org return Handle<S>::Cast(*this); 288ce5e87bd905d592a8bd612b3dedf7a994177c13aager@chromium.org } 289ce5e87bd905d592a8bd612b3dedf7a994177c13aager@chromium.org 2904a35c5a501e5b966f895ddea8e19c3ca232cb23fdslomov@chromium.org V8_INLINE static Handle<T> New(Isolate* isolate, Handle<T> that) { 29157ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org return New(isolate, that.val_); 29257ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org } 293c86e8c29eea534916f0d6a2a285b65a86d1b3b67machenbach@chromium.org V8_INLINE static Handle<T> New(Isolate* isolate, 294c86e8c29eea534916f0d6a2a285b65a86d1b3b67machenbach@chromium.org const PersistentBase<T>& that) { 29557ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org return New(isolate, that.val_); 29657ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org } 29757ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org 29843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen private: 299f95d4b920abb640ab0986d138ad559a7d3b91d04danno@chromium.org friend class Utils; 300639bac0c5319f96e1bbe3399fb7f7f37344928bddslomov@chromium.org template<class F, class M> friend class Persistent; 301c86e8c29eea534916f0d6a2a285b65a86d1b3b67machenbach@chromium.org template<class F> friend class PersistentBase; 302c86e8c29eea534916f0d6a2a285b65a86d1b3b67machenbach@chromium.org template<class F> friend class Handle; 303b99c75496e05b4cd58815ada1e39e6029130d11crossberg@chromium.org template<class F> friend class Local; 304b99c75496e05b4cd58815ada1e39e6029130d11crossberg@chromium.org template<class F> friend class FunctionCallbackInfo; 305b99c75496e05b4cd58815ada1e39e6029130d11crossberg@chromium.org template<class F> friend class PropertyCallbackInfo; 306f95d4b920abb640ab0986d138ad559a7d3b91d04danno@chromium.org template<class F> friend class internal::CustomArguments; 30757ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org friend Handle<Primitive> Undefined(Isolate* isolate); 30857ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org friend Handle<Primitive> Null(Isolate* isolate); 30957ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org friend Handle<Boolean> True(Isolate* isolate); 31057ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org friend Handle<Boolean> False(Isolate* isolate); 31157ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org friend class Context; 312b99c75496e05b4cd58815ada1e39e6029130d11crossberg@chromium.org friend class HandleScope; 3130cc095007a3ccded63f6577751c6a04300eb7ae9machenbach@chromium.org friend class Object; 3140cc095007a3ccded63f6577751c6a04300eb7ae9machenbach@chromium.org friend class Private; 31557ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org 316202b1d8cd93e567672cc92f48fedc35989c47312machenbach@chromium.org /** 317202b1d8cd93e567672cc92f48fedc35989c47312machenbach@chromium.org * Creates a new handle for the specified value. 318202b1d8cd93e567672cc92f48fedc35989c47312machenbach@chromium.org */ 319202b1d8cd93e567672cc92f48fedc35989c47312machenbach@chromium.org V8_INLINE explicit Handle(T* val) : val_(val) {} 320202b1d8cd93e567672cc92f48fedc35989c47312machenbach@chromium.org 3214a35c5a501e5b966f895ddea8e19c3ca232cb23fdslomov@chromium.org V8_INLINE static Handle<T> New(Isolate* isolate, T* that); 32257ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org 32343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen T* val_; 32443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen}; 32543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 32643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 32743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen/** 32843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * A light-weight stack-allocated object handle. All operations 32943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * that return objects from within v8 return them in local handles. They 33043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * are created within HandleScopes, and all local handles allocated within a 33143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * handle scope are destroyed when the handle scope is destroyed. Hence it 33243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * is not necessary to explicitly deallocate local handles. 33343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen */ 33469ea3965ef6e0d3f020a402cf7e6b96b9cb651aekmillikin@chromium.orgtemplate <class T> class Local : public Handle<T> { 33543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen public: 3364a35c5a501e5b966f895ddea8e19c3ca232cb23fdslomov@chromium.org V8_INLINE Local(); 3374a35c5a501e5b966f895ddea8e19c3ca232cb23fdslomov@chromium.org template <class S> V8_INLINE Local(Local<S> that) 33843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen : Handle<T>(reinterpret_cast<T*>(*that)) { 33943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen /** 34043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * This check fails when trying to convert between incompatible 34143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * handles. For example, converting from a Handle<String> to a 34243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * Handle<Number>. 34343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen */ 34443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen TYPE_CHECK(T, S); 34543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } 34657ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org 34757ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org 3484a35c5a501e5b966f895ddea8e19c3ca232cb23fdslomov@chromium.org template <class S> V8_INLINE static Local<T> Cast(Local<S> that) { 34918ad94b919217ffbcd2d3159eeb5f8c588761c47ager@chromium.org#ifdef V8_ENABLE_CHECKS 35018ad94b919217ffbcd2d3159eeb5f8c588761c47ager@chromium.org // If we're going to perform the type check then we have to check 35118ad94b919217ffbcd2d3159eeb5f8c588761c47ager@chromium.org // that the handle isn't empty before doing the checked cast. 35243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen if (that.IsEmpty()) return Local<T>(); 35318ad94b919217ffbcd2d3159eeb5f8c588761c47ager@chromium.org#endif 35443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen return Local<T>(T::Cast(*that)); 35543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } 3564a35c5a501e5b966f895ddea8e19c3ca232cb23fdslomov@chromium.org template <class S> V8_INLINE Local(Handle<S> that) 35757ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org : Handle<T>(reinterpret_cast<T*>(*that)) { 35857ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org TYPE_CHECK(T, S); 35957ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org } 36043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 3614a35c5a501e5b966f895ddea8e19c3ca232cb23fdslomov@chromium.org template <class S> V8_INLINE Local<S> As() { 362ce5e87bd905d592a8bd612b3dedf7a994177c13aager@chromium.org return Local<S>::Cast(*this); 363ce5e87bd905d592a8bd612b3dedf7a994177c13aager@chromium.org } 364ce5e87bd905d592a8bd612b3dedf7a994177c13aager@chromium.org 36532280cf2786219b2d9a668f7f00778fb59ac40b3mstarzinger@chromium.org /** 36632280cf2786219b2d9a668f7f00778fb59ac40b3mstarzinger@chromium.org * Create a local handle for the content of another handle. 36732280cf2786219b2d9a668f7f00778fb59ac40b3mstarzinger@chromium.org * The referee is kept alive by the local handle even when 36832280cf2786219b2d9a668f7f00778fb59ac40b3mstarzinger@chromium.org * the original handle is destroyed/disposed. 36943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen */ 3704a35c5a501e5b966f895ddea8e19c3ca232cb23fdslomov@chromium.org V8_INLINE static Local<T> New(Isolate* isolate, Handle<T> that); 3714a35c5a501e5b966f895ddea8e19c3ca232cb23fdslomov@chromium.org V8_INLINE static Local<T> New(Isolate* isolate, 372c86e8c29eea534916f0d6a2a285b65a86d1b3b67machenbach@chromium.org const PersistentBase<T>& that); 37343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 37457ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org private: 375f95d4b920abb640ab0986d138ad559a7d3b91d04danno@chromium.org friend class Utils; 3761e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org template<class F> friend class Eternal; 377c86e8c29eea534916f0d6a2a285b65a86d1b3b67machenbach@chromium.org template<class F> friend class PersistentBase; 378639bac0c5319f96e1bbe3399fb7f7f37344928bddslomov@chromium.org template<class F, class M> friend class Persistent; 379b99c75496e05b4cd58815ada1e39e6029130d11crossberg@chromium.org template<class F> friend class Handle; 380c86e8c29eea534916f0d6a2a285b65a86d1b3b67machenbach@chromium.org template<class F> friend class Local; 381b99c75496e05b4cd58815ada1e39e6029130d11crossberg@chromium.org template<class F> friend class FunctionCallbackInfo; 382b99c75496e05b4cd58815ada1e39e6029130d11crossberg@chromium.org template<class F> friend class PropertyCallbackInfo; 38357ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org friend class String; 38457ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org friend class Object; 38557ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org friend class Context; 386f95d4b920abb640ab0986d138ad559a7d3b91d04danno@chromium.org template<class F> friend class internal::CustomArguments; 387b99c75496e05b4cd58815ada1e39e6029130d11crossberg@chromium.org friend class HandleScope; 388cfdf67d672b8e2cd6cc1df14c082671511745746machenbach@chromium.org friend class EscapableHandleScope; 389381adef828187e237e8758ab730dee1c2834a0b3machenbach@chromium.org template<class F1, class F2, class F3> friend class PersistentValueMap; 3902f599e5925b02d78bd78703b44741d6b27e53a44machenbach@chromium.org template<class F1, class F2> friend class PersistentValueVector; 39157ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org 392202b1d8cd93e567672cc92f48fedc35989c47312machenbach@chromium.org template <class S> V8_INLINE Local(S* that) : Handle<T>(that) { } 3934a35c5a501e5b966f895ddea8e19c3ca232cb23fdslomov@chromium.org V8_INLINE static Local<T> New(Isolate* isolate, T* that); 39457ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org}; 39543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 3961e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org 3971e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org// Eternal handles are set-once handles that live for the life of the isolate. 3981e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.orgtemplate <class T> class Eternal { 3991e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org public: 4004a35c5a501e5b966f895ddea8e19c3ca232cb23fdslomov@chromium.org V8_INLINE Eternal() : index_(kInitialValue) { } 4011e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org template<class S> 4024a35c5a501e5b966f895ddea8e19c3ca232cb23fdslomov@chromium.org V8_INLINE Eternal(Isolate* isolate, Local<S> handle) : index_(kInitialValue) { 4031e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org Set(isolate, handle); 4041e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org } 4051e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org // Can only be safely called if already set. 4064a35c5a501e5b966f895ddea8e19c3ca232cb23fdslomov@chromium.org V8_INLINE Local<T> Get(Isolate* isolate); 4074a35c5a501e5b966f895ddea8e19c3ca232cb23fdslomov@chromium.org V8_INLINE bool IsEmpty() { return index_ == kInitialValue; } 4084a35c5a501e5b966f895ddea8e19c3ca232cb23fdslomov@chromium.org template<class S> V8_INLINE void Set(Isolate* isolate, Local<S> handle); 4091e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org 4101e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org private: 4111e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org static const int kInitialValue = -1; 4121e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org int index_; 4131e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org}; 4141e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org 4151e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org 416639bac0c5319f96e1bbe3399fb7f7f37344928bddslomov@chromium.orgtemplate<class T, class P> 417639bac0c5319f96e1bbe3399fb7f7f37344928bddslomov@chromium.orgclass WeakCallbackData { 418639bac0c5319f96e1bbe3399fb7f7f37344928bddslomov@chromium.org public: 419639bac0c5319f96e1bbe3399fb7f7f37344928bddslomov@chromium.org typedef void (*Callback)(const WeakCallbackData<T, P>& data); 420639bac0c5319f96e1bbe3399fb7f7f37344928bddslomov@chromium.org 4214a35c5a501e5b966f895ddea8e19c3ca232cb23fdslomov@chromium.org V8_INLINE Isolate* GetIsolate() const { return isolate_; } 4224a35c5a501e5b966f895ddea8e19c3ca232cb23fdslomov@chromium.org V8_INLINE Local<T> GetValue() const { return handle_; } 4234a35c5a501e5b966f895ddea8e19c3ca232cb23fdslomov@chromium.org V8_INLINE P* GetParameter() const { return parameter_; } 424639bac0c5319f96e1bbe3399fb7f7f37344928bddslomov@chromium.org 425639bac0c5319f96e1bbe3399fb7f7f37344928bddslomov@chromium.org private: 426639bac0c5319f96e1bbe3399fb7f7f37344928bddslomov@chromium.org friend class internal::GlobalHandles; 427639bac0c5319f96e1bbe3399fb7f7f37344928bddslomov@chromium.org WeakCallbackData(Isolate* isolate, Local<T> handle, P* parameter) 428639bac0c5319f96e1bbe3399fb7f7f37344928bddslomov@chromium.org : isolate_(isolate), handle_(handle), parameter_(parameter) { } 429639bac0c5319f96e1bbe3399fb7f7f37344928bddslomov@chromium.org Isolate* isolate_; 430639bac0c5319f96e1bbe3399fb7f7f37344928bddslomov@chromium.org Local<T> handle_; 431639bac0c5319f96e1bbe3399fb7f7f37344928bddslomov@chromium.org P* parameter_; 432639bac0c5319f96e1bbe3399fb7f7f37344928bddslomov@chromium.org}; 433639bac0c5319f96e1bbe3399fb7f7f37344928bddslomov@chromium.org 434639bac0c5319f96e1bbe3399fb7f7f37344928bddslomov@chromium.org 435639bac0c5319f96e1bbe3399fb7f7f37344928bddslomov@chromium.org/** 436c86e8c29eea534916f0d6a2a285b65a86d1b3b67machenbach@chromium.org * An object reference that is independent of any handle scope. Where 437c86e8c29eea534916f0d6a2a285b65a86d1b3b67machenbach@chromium.org * a Local handle only lives as long as the HandleScope in which it was 438c86e8c29eea534916f0d6a2a285b65a86d1b3b67machenbach@chromium.org * allocated, a PersistentBase handle remains valid until it is explicitly 439c86e8c29eea534916f0d6a2a285b65a86d1b3b67machenbach@chromium.org * disposed. 440c86e8c29eea534916f0d6a2a285b65a86d1b3b67machenbach@chromium.org * 441c86e8c29eea534916f0d6a2a285b65a86d1b3b67machenbach@chromium.org * A persistent handle contains a reference to a storage cell within 442c86e8c29eea534916f0d6a2a285b65a86d1b3b67machenbach@chromium.org * the v8 engine which holds an object value and which is updated by 443c86e8c29eea534916f0d6a2a285b65a86d1b3b67machenbach@chromium.org * the garbage collector whenever the object is moved. A new storage 444c86e8c29eea534916f0d6a2a285b65a86d1b3b67machenbach@chromium.org * cell can be created using the constructor or PersistentBase::Reset and 445c86e8c29eea534916f0d6a2a285b65a86d1b3b67machenbach@chromium.org * existing handles can be disposed using PersistentBase::Reset. 446c86e8c29eea534916f0d6a2a285b65a86d1b3b67machenbach@chromium.org * 447c86e8c29eea534916f0d6a2a285b65a86d1b3b67machenbach@chromium.org */ 448c86e8c29eea534916f0d6a2a285b65a86d1b3b67machenbach@chromium.orgtemplate <class T> class PersistentBase { 449c86e8c29eea534916f0d6a2a285b65a86d1b3b67machenbach@chromium.org public: 450c86e8c29eea534916f0d6a2a285b65a86d1b3b67machenbach@chromium.org /** 451c86e8c29eea534916f0d6a2a285b65a86d1b3b67machenbach@chromium.org * If non-empty, destroy the underlying storage cell 452c86e8c29eea534916f0d6a2a285b65a86d1b3b67machenbach@chromium.org * IsEmpty() will return true after this call. 453c86e8c29eea534916f0d6a2a285b65a86d1b3b67machenbach@chromium.org */ 454c86e8c29eea534916f0d6a2a285b65a86d1b3b67machenbach@chromium.org V8_INLINE void Reset(); 455c86e8c29eea534916f0d6a2a285b65a86d1b3b67machenbach@chromium.org /** 456c86e8c29eea534916f0d6a2a285b65a86d1b3b67machenbach@chromium.org * If non-empty, destroy the underlying storage cell 457c86e8c29eea534916f0d6a2a285b65a86d1b3b67machenbach@chromium.org * and create a new one with the contents of other if other is non empty 458c86e8c29eea534916f0d6a2a285b65a86d1b3b67machenbach@chromium.org */ 459c86e8c29eea534916f0d6a2a285b65a86d1b3b67machenbach@chromium.org template <class S> 460c86e8c29eea534916f0d6a2a285b65a86d1b3b67machenbach@chromium.org V8_INLINE void Reset(Isolate* isolate, const Handle<S>& other); 461c86e8c29eea534916f0d6a2a285b65a86d1b3b67machenbach@chromium.org 462c86e8c29eea534916f0d6a2a285b65a86d1b3b67machenbach@chromium.org /** 463c86e8c29eea534916f0d6a2a285b65a86d1b3b67machenbach@chromium.org * If non-empty, destroy the underlying storage cell 464c86e8c29eea534916f0d6a2a285b65a86d1b3b67machenbach@chromium.org * and create a new one with the contents of other if other is non empty 465c86e8c29eea534916f0d6a2a285b65a86d1b3b67machenbach@chromium.org */ 466c86e8c29eea534916f0d6a2a285b65a86d1b3b67machenbach@chromium.org template <class S> 467c86e8c29eea534916f0d6a2a285b65a86d1b3b67machenbach@chromium.org V8_INLINE void Reset(Isolate* isolate, const PersistentBase<S>& other); 468c86e8c29eea534916f0d6a2a285b65a86d1b3b67machenbach@chromium.org 469c86e8c29eea534916f0d6a2a285b65a86d1b3b67machenbach@chromium.org V8_INLINE bool IsEmpty() const { return val_ == 0; } 470c86e8c29eea534916f0d6a2a285b65a86d1b3b67machenbach@chromium.org 471c86e8c29eea534916f0d6a2a285b65a86d1b3b67machenbach@chromium.org template <class S> 472c86e8c29eea534916f0d6a2a285b65a86d1b3b67machenbach@chromium.org V8_INLINE bool operator==(const PersistentBase<S>& that) const { 473c86e8c29eea534916f0d6a2a285b65a86d1b3b67machenbach@chromium.org internal::Object** a = reinterpret_cast<internal::Object**>(this->val_); 474c86e8c29eea534916f0d6a2a285b65a86d1b3b67machenbach@chromium.org internal::Object** b = reinterpret_cast<internal::Object**>(that.val_); 475c86e8c29eea534916f0d6a2a285b65a86d1b3b67machenbach@chromium.org if (a == 0) return b == 0; 476c86e8c29eea534916f0d6a2a285b65a86d1b3b67machenbach@chromium.org if (b == 0) return false; 477c86e8c29eea534916f0d6a2a285b65a86d1b3b67machenbach@chromium.org return *a == *b; 478c86e8c29eea534916f0d6a2a285b65a86d1b3b67machenbach@chromium.org } 479c86e8c29eea534916f0d6a2a285b65a86d1b3b67machenbach@chromium.org 480c86e8c29eea534916f0d6a2a285b65a86d1b3b67machenbach@chromium.org template <class S> V8_INLINE bool operator==(const Handle<S>& that) const { 481c86e8c29eea534916f0d6a2a285b65a86d1b3b67machenbach@chromium.org internal::Object** a = reinterpret_cast<internal::Object**>(this->val_); 482c86e8c29eea534916f0d6a2a285b65a86d1b3b67machenbach@chromium.org internal::Object** b = reinterpret_cast<internal::Object**>(that.val_); 483c86e8c29eea534916f0d6a2a285b65a86d1b3b67machenbach@chromium.org if (a == 0) return b == 0; 484c86e8c29eea534916f0d6a2a285b65a86d1b3b67machenbach@chromium.org if (b == 0) return false; 485c86e8c29eea534916f0d6a2a285b65a86d1b3b67machenbach@chromium.org return *a == *b; 486c86e8c29eea534916f0d6a2a285b65a86d1b3b67machenbach@chromium.org } 487c86e8c29eea534916f0d6a2a285b65a86d1b3b67machenbach@chromium.org 488c86e8c29eea534916f0d6a2a285b65a86d1b3b67machenbach@chromium.org template <class S> 489c86e8c29eea534916f0d6a2a285b65a86d1b3b67machenbach@chromium.org V8_INLINE bool operator!=(const PersistentBase<S>& that) const { 490c86e8c29eea534916f0d6a2a285b65a86d1b3b67machenbach@chromium.org return !operator==(that); 491c86e8c29eea534916f0d6a2a285b65a86d1b3b67machenbach@chromium.org } 492c86e8c29eea534916f0d6a2a285b65a86d1b3b67machenbach@chromium.org 493c86e8c29eea534916f0d6a2a285b65a86d1b3b67machenbach@chromium.org template <class S> V8_INLINE bool operator!=(const Handle<S>& that) const { 494c86e8c29eea534916f0d6a2a285b65a86d1b3b67machenbach@chromium.org return !operator==(that); 495c86e8c29eea534916f0d6a2a285b65a86d1b3b67machenbach@chromium.org } 496c86e8c29eea534916f0d6a2a285b65a86d1b3b67machenbach@chromium.org 49763a7c9f848e755c52a37721debae242cf5d1682dmachenbach@chromium.org /** 49863a7c9f848e755c52a37721debae242cf5d1682dmachenbach@chromium.org * Install a finalization callback on this object. 49963a7c9f848e755c52a37721debae242cf5d1682dmachenbach@chromium.org * NOTE: There is no guarantee as to *when* or even *if* the callback is 50063a7c9f848e755c52a37721debae242cf5d1682dmachenbach@chromium.org * invoked. The invocation is performed solely on a best effort basis. 50163a7c9f848e755c52a37721debae242cf5d1682dmachenbach@chromium.org * As always, GC-based finalization should *not* be relied upon for any 50263a7c9f848e755c52a37721debae242cf5d1682dmachenbach@chromium.org * critical form of resource management! 50363a7c9f848e755c52a37721debae242cf5d1682dmachenbach@chromium.org */ 504c86e8c29eea534916f0d6a2a285b65a86d1b3b67machenbach@chromium.org template<typename P> 505c86e8c29eea534916f0d6a2a285b65a86d1b3b67machenbach@chromium.org V8_INLINE void SetWeak( 506c86e8c29eea534916f0d6a2a285b65a86d1b3b67machenbach@chromium.org P* parameter, 507c86e8c29eea534916f0d6a2a285b65a86d1b3b67machenbach@chromium.org typename WeakCallbackData<T, P>::Callback callback); 508c86e8c29eea534916f0d6a2a285b65a86d1b3b67machenbach@chromium.org 509c86e8c29eea534916f0d6a2a285b65a86d1b3b67machenbach@chromium.org template<typename S, typename P> 510c86e8c29eea534916f0d6a2a285b65a86d1b3b67machenbach@chromium.org V8_INLINE void SetWeak( 511c86e8c29eea534916f0d6a2a285b65a86d1b3b67machenbach@chromium.org P* parameter, 512c86e8c29eea534916f0d6a2a285b65a86d1b3b67machenbach@chromium.org typename WeakCallbackData<S, P>::Callback callback); 513c86e8c29eea534916f0d6a2a285b65a86d1b3b67machenbach@chromium.org 514381adef828187e237e8758ab730dee1c2834a0b3machenbach@chromium.org template<typename P> 515381adef828187e237e8758ab730dee1c2834a0b3machenbach@chromium.org V8_INLINE P* ClearWeak(); 516381adef828187e237e8758ab730dee1c2834a0b3machenbach@chromium.org 517381adef828187e237e8758ab730dee1c2834a0b3machenbach@chromium.org // TODO(dcarney): remove this. 518381adef828187e237e8758ab730dee1c2834a0b3machenbach@chromium.org V8_INLINE void ClearWeak() { ClearWeak<void>(); } 519c86e8c29eea534916f0d6a2a285b65a86d1b3b67machenbach@chromium.org 520c86e8c29eea534916f0d6a2a285b65a86d1b3b67machenbach@chromium.org /** 521c86e8c29eea534916f0d6a2a285b65a86d1b3b67machenbach@chromium.org * Marks the reference to this object independent. Garbage collector is free 522c86e8c29eea534916f0d6a2a285b65a86d1b3b67machenbach@chromium.org * to ignore any object groups containing this object. Weak callback for an 523c86e8c29eea534916f0d6a2a285b65a86d1b3b67machenbach@chromium.org * independent handle should not assume that it will be preceded by a global 524c86e8c29eea534916f0d6a2a285b65a86d1b3b67machenbach@chromium.org * GC prologue callback or followed by a global GC epilogue callback. 525c86e8c29eea534916f0d6a2a285b65a86d1b3b67machenbach@chromium.org */ 526c86e8c29eea534916f0d6a2a285b65a86d1b3b67machenbach@chromium.org V8_INLINE void MarkIndependent(); 527c86e8c29eea534916f0d6a2a285b65a86d1b3b67machenbach@chromium.org 528c86e8c29eea534916f0d6a2a285b65a86d1b3b67machenbach@chromium.org /** 529c86e8c29eea534916f0d6a2a285b65a86d1b3b67machenbach@chromium.org * Marks the reference to this object partially dependent. Partially dependent 530c86e8c29eea534916f0d6a2a285b65a86d1b3b67machenbach@chromium.org * handles only depend on other partially dependent handles and these 531c86e8c29eea534916f0d6a2a285b65a86d1b3b67machenbach@chromium.org * dependencies are provided through object groups. It provides a way to build 532c86e8c29eea534916f0d6a2a285b65a86d1b3b67machenbach@chromium.org * smaller object groups for young objects that represent only a subset of all 533c86e8c29eea534916f0d6a2a285b65a86d1b3b67machenbach@chromium.org * external dependencies. This mark is automatically cleared after each 534c86e8c29eea534916f0d6a2a285b65a86d1b3b67machenbach@chromium.org * garbage collection. 535c86e8c29eea534916f0d6a2a285b65a86d1b3b67machenbach@chromium.org */ 536c86e8c29eea534916f0d6a2a285b65a86d1b3b67machenbach@chromium.org V8_INLINE void MarkPartiallyDependent(); 537c86e8c29eea534916f0d6a2a285b65a86d1b3b67machenbach@chromium.org 538c86e8c29eea534916f0d6a2a285b65a86d1b3b67machenbach@chromium.org V8_INLINE bool IsIndependent() const; 539c86e8c29eea534916f0d6a2a285b65a86d1b3b67machenbach@chromium.org 540c86e8c29eea534916f0d6a2a285b65a86d1b3b67machenbach@chromium.org /** Checks if the handle holds the only reference to an object. */ 541c86e8c29eea534916f0d6a2a285b65a86d1b3b67machenbach@chromium.org V8_INLINE bool IsNearDeath() const; 542c86e8c29eea534916f0d6a2a285b65a86d1b3b67machenbach@chromium.org 543c86e8c29eea534916f0d6a2a285b65a86d1b3b67machenbach@chromium.org /** Returns true if the handle's reference is weak. */ 544c86e8c29eea534916f0d6a2a285b65a86d1b3b67machenbach@chromium.org V8_INLINE bool IsWeak() const; 545c86e8c29eea534916f0d6a2a285b65a86d1b3b67machenbach@chromium.org 546c86e8c29eea534916f0d6a2a285b65a86d1b3b67machenbach@chromium.org /** 547c86e8c29eea534916f0d6a2a285b65a86d1b3b67machenbach@chromium.org * Assigns a wrapper class ID to the handle. See RetainedObjectInfo interface 548c86e8c29eea534916f0d6a2a285b65a86d1b3b67machenbach@chromium.org * description in v8-profiler.h for details. 549c86e8c29eea534916f0d6a2a285b65a86d1b3b67machenbach@chromium.org */ 550c86e8c29eea534916f0d6a2a285b65a86d1b3b67machenbach@chromium.org V8_INLINE void SetWrapperClassId(uint16_t class_id); 551c86e8c29eea534916f0d6a2a285b65a86d1b3b67machenbach@chromium.org 552c86e8c29eea534916f0d6a2a285b65a86d1b3b67machenbach@chromium.org /** 553c86e8c29eea534916f0d6a2a285b65a86d1b3b67machenbach@chromium.org * Returns the class ID previously assigned to this handle or 0 if no class ID 554c86e8c29eea534916f0d6a2a285b65a86d1b3b67machenbach@chromium.org * was previously assigned. 555c86e8c29eea534916f0d6a2a285b65a86d1b3b67machenbach@chromium.org */ 556c86e8c29eea534916f0d6a2a285b65a86d1b3b67machenbach@chromium.org V8_INLINE uint16_t WrapperClassId() const; 557c86e8c29eea534916f0d6a2a285b65a86d1b3b67machenbach@chromium.org 558c86e8c29eea534916f0d6a2a285b65a86d1b3b67machenbach@chromium.org private: 559c86e8c29eea534916f0d6a2a285b65a86d1b3b67machenbach@chromium.org friend class Isolate; 560c86e8c29eea534916f0d6a2a285b65a86d1b3b67machenbach@chromium.org friend class Utils; 561c86e8c29eea534916f0d6a2a285b65a86d1b3b67machenbach@chromium.org template<class F> friend class Handle; 562c86e8c29eea534916f0d6a2a285b65a86d1b3b67machenbach@chromium.org template<class F> friend class Local; 563c86e8c29eea534916f0d6a2a285b65a86d1b3b67machenbach@chromium.org template<class F1, class F2> friend class Persistent; 564c86e8c29eea534916f0d6a2a285b65a86d1b3b67machenbach@chromium.org template<class F> friend class UniquePersistent; 565c86e8c29eea534916f0d6a2a285b65a86d1b3b67machenbach@chromium.org template<class F> friend class PersistentBase; 566c86e8c29eea534916f0d6a2a285b65a86d1b3b67machenbach@chromium.org template<class F> friend class ReturnValue; 567381adef828187e237e8758ab730dee1c2834a0b3machenbach@chromium.org template<class F1, class F2, class F3> friend class PersistentValueMap; 5682f599e5925b02d78bd78703b44741d6b27e53a44machenbach@chromium.org template<class F1, class F2> friend class PersistentValueVector; 569ca2f2040e0e1a10df95bec18e69499f85f4c1316machenbach@chromium.org friend class Object; 570c86e8c29eea534916f0d6a2a285b65a86d1b3b67machenbach@chromium.org 571c86e8c29eea534916f0d6a2a285b65a86d1b3b67machenbach@chromium.org explicit V8_INLINE PersistentBase(T* val) : val_(val) {} 572c86e8c29eea534916f0d6a2a285b65a86d1b3b67machenbach@chromium.org PersistentBase(PersistentBase& other); // NOLINT 573c86e8c29eea534916f0d6a2a285b65a86d1b3b67machenbach@chromium.org void operator=(PersistentBase&); 574c86e8c29eea534916f0d6a2a285b65a86d1b3b67machenbach@chromium.org V8_INLINE static T* New(Isolate* isolate, T* that); 575c86e8c29eea534916f0d6a2a285b65a86d1b3b67machenbach@chromium.org 576c86e8c29eea534916f0d6a2a285b65a86d1b3b67machenbach@chromium.org T* val_; 577c86e8c29eea534916f0d6a2a285b65a86d1b3b67machenbach@chromium.org}; 578c86e8c29eea534916f0d6a2a285b65a86d1b3b67machenbach@chromium.org 579c86e8c29eea534916f0d6a2a285b65a86d1b3b67machenbach@chromium.org 580c86e8c29eea534916f0d6a2a285b65a86d1b3b67machenbach@chromium.org/** 581639bac0c5319f96e1bbe3399fb7f7f37344928bddslomov@chromium.org * Default traits for Persistent. This class does not allow 582639bac0c5319f96e1bbe3399fb7f7f37344928bddslomov@chromium.org * use of the copy constructor or assignment operator. 583639bac0c5319f96e1bbe3399fb7f7f37344928bddslomov@chromium.org * At present kResetInDestructor is not set, but that will change in a future 584639bac0c5319f96e1bbe3399fb7f7f37344928bddslomov@chromium.org * version. 585639bac0c5319f96e1bbe3399fb7f7f37344928bddslomov@chromium.org */ 586639bac0c5319f96e1bbe3399fb7f7f37344928bddslomov@chromium.orgtemplate<class T> 587639bac0c5319f96e1bbe3399fb7f7f37344928bddslomov@chromium.orgclass NonCopyablePersistentTraits { 588639bac0c5319f96e1bbe3399fb7f7f37344928bddslomov@chromium.org public: 589639bac0c5319f96e1bbe3399fb7f7f37344928bddslomov@chromium.org typedef Persistent<T, NonCopyablePersistentTraits<T> > NonCopyablePersistent; 590639bac0c5319f96e1bbe3399fb7f7f37344928bddslomov@chromium.org static const bool kResetInDestructor = false; 591639bac0c5319f96e1bbe3399fb7f7f37344928bddslomov@chromium.org template<class S, class M> 5924a35c5a501e5b966f895ddea8e19c3ca232cb23fdslomov@chromium.org V8_INLINE static void Copy(const Persistent<S, M>& source, 5934a35c5a501e5b966f895ddea8e19c3ca232cb23fdslomov@chromium.org NonCopyablePersistent* dest) { 594639bac0c5319f96e1bbe3399fb7f7f37344928bddslomov@chromium.org Uncompilable<Object>(); 595639bac0c5319f96e1bbe3399fb7f7f37344928bddslomov@chromium.org } 596639bac0c5319f96e1bbe3399fb7f7f37344928bddslomov@chromium.org // TODO(dcarney): come up with a good compile error here. 5974a35c5a501e5b966f895ddea8e19c3ca232cb23fdslomov@chromium.org template<class O> V8_INLINE static void Uncompilable() { 598639bac0c5319f96e1bbe3399fb7f7f37344928bddslomov@chromium.org TYPE_CHECK(O, Primitive); 599639bac0c5319f96e1bbe3399fb7f7f37344928bddslomov@chromium.org } 600639bac0c5319f96e1bbe3399fb7f7f37344928bddslomov@chromium.org}; 601639bac0c5319f96e1bbe3399fb7f7f37344928bddslomov@chromium.org 602639bac0c5319f96e1bbe3399fb7f7f37344928bddslomov@chromium.org 60343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen/** 604528ce02b8680a3ab6d75c7079f180a4016c69b7amachenbach@chromium.org * Helper class traits to allow copying and assignment of Persistent. 605528ce02b8680a3ab6d75c7079f180a4016c69b7amachenbach@chromium.org * This will clone the contents of storage cell, but not any of the flags, etc. 606528ce02b8680a3ab6d75c7079f180a4016c69b7amachenbach@chromium.org */ 607528ce02b8680a3ab6d75c7079f180a4016c69b7amachenbach@chromium.orgtemplate<class T> 608528ce02b8680a3ab6d75c7079f180a4016c69b7amachenbach@chromium.orgstruct CopyablePersistentTraits { 609528ce02b8680a3ab6d75c7079f180a4016c69b7amachenbach@chromium.org typedef Persistent<T, CopyablePersistentTraits<T> > CopyablePersistent; 610528ce02b8680a3ab6d75c7079f180a4016c69b7amachenbach@chromium.org static const bool kResetInDestructor = true; 611528ce02b8680a3ab6d75c7079f180a4016c69b7amachenbach@chromium.org template<class S, class M> 612528ce02b8680a3ab6d75c7079f180a4016c69b7amachenbach@chromium.org static V8_INLINE void Copy(const Persistent<S, M>& source, 613528ce02b8680a3ab6d75c7079f180a4016c69b7amachenbach@chromium.org CopyablePersistent* dest) { 614528ce02b8680a3ab6d75c7079f180a4016c69b7amachenbach@chromium.org // do nothing, just allow copy 615528ce02b8680a3ab6d75c7079f180a4016c69b7amachenbach@chromium.org } 616528ce02b8680a3ab6d75c7079f180a4016c69b7amachenbach@chromium.org}; 617528ce02b8680a3ab6d75c7079f180a4016c69b7amachenbach@chromium.org 618528ce02b8680a3ab6d75c7079f180a4016c69b7amachenbach@chromium.org 619528ce02b8680a3ab6d75c7079f180a4016c69b7amachenbach@chromium.org/** 620c86e8c29eea534916f0d6a2a285b65a86d1b3b67machenbach@chromium.org * A PersistentBase which allows copy and assignment. 621639bac0c5319f96e1bbe3399fb7f7f37344928bddslomov@chromium.org * 622639bac0c5319f96e1bbe3399fb7f7f37344928bddslomov@chromium.org * Copy, assignment and destructor bevavior is controlled by the traits 623639bac0c5319f96e1bbe3399fb7f7f37344928bddslomov@chromium.org * class M. 624c86e8c29eea534916f0d6a2a285b65a86d1b3b67machenbach@chromium.org * 625c86e8c29eea534916f0d6a2a285b65a86d1b3b67machenbach@chromium.org * Note: Persistent class hierarchy is subject to future changes. 62643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen */ 627c86e8c29eea534916f0d6a2a285b65a86d1b3b67machenbach@chromium.orgtemplate <class T, class M> class Persistent : public PersistentBase<T> { 62843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen public: 629639bac0c5319f96e1bbe3399fb7f7f37344928bddslomov@chromium.org /** 630639bac0c5319f96e1bbe3399fb7f7f37344928bddslomov@chromium.org * A Persistent with no storage cell. 631639bac0c5319f96e1bbe3399fb7f7f37344928bddslomov@chromium.org */ 632c86e8c29eea534916f0d6a2a285b65a86d1b3b67machenbach@chromium.org V8_INLINE Persistent() : PersistentBase<T>(0) { } 63357ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org /** 634639bac0c5319f96e1bbe3399fb7f7f37344928bddslomov@chromium.org * Construct a Persistent from a Handle. 635639bac0c5319f96e1bbe3399fb7f7f37344928bddslomov@chromium.org * When the Handle is non-empty, a new storage cell is created 636639bac0c5319f96e1bbe3399fb7f7f37344928bddslomov@chromium.org * pointing to the same object, and no flags are set. 63757ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org */ 6384a35c5a501e5b966f895ddea8e19c3ca232cb23fdslomov@chromium.org template <class S> V8_INLINE Persistent(Isolate* isolate, Handle<S> that) 639c86e8c29eea534916f0d6a2a285b65a86d1b3b67machenbach@chromium.org : PersistentBase<T>(PersistentBase<T>::New(isolate, *that)) { 640639bac0c5319f96e1bbe3399fb7f7f37344928bddslomov@chromium.org TYPE_CHECK(T, S); 641639bac0c5319f96e1bbe3399fb7f7f37344928bddslomov@chromium.org } 64243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen /** 643639bac0c5319f96e1bbe3399fb7f7f37344928bddslomov@chromium.org * Construct a Persistent from a Persistent. 644639bac0c5319f96e1bbe3399fb7f7f37344928bddslomov@chromium.org * When the Persistent is non-empty, a new storage cell is created 645639bac0c5319f96e1bbe3399fb7f7f37344928bddslomov@chromium.org * pointing to the same object, and no flags are set. 64643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen */ 647639bac0c5319f96e1bbe3399fb7f7f37344928bddslomov@chromium.org template <class S, class M2> 6484a35c5a501e5b966f895ddea8e19c3ca232cb23fdslomov@chromium.org V8_INLINE Persistent(Isolate* isolate, const Persistent<S, M2>& that) 649c86e8c29eea534916f0d6a2a285b65a86d1b3b67machenbach@chromium.org : PersistentBase<T>(PersistentBase<T>::New(isolate, *that)) { 650639bac0c5319f96e1bbe3399fb7f7f37344928bddslomov@chromium.org TYPE_CHECK(T, S); 651639bac0c5319f96e1bbe3399fb7f7f37344928bddslomov@chromium.org } 65243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen /** 653639bac0c5319f96e1bbe3399fb7f7f37344928bddslomov@chromium.org * The copy constructors and assignment operator create a Persistent 654639bac0c5319f96e1bbe3399fb7f7f37344928bddslomov@chromium.org * exactly as the Persistent constructor, but the Copy function from the 655639bac0c5319f96e1bbe3399fb7f7f37344928bddslomov@chromium.org * traits class is called, allowing the setting of flags based on the 656639bac0c5319f96e1bbe3399fb7f7f37344928bddslomov@chromium.org * copied Persistent. 65743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen */ 658c86e8c29eea534916f0d6a2a285b65a86d1b3b67machenbach@chromium.org V8_INLINE Persistent(const Persistent& that) : PersistentBase<T>(0) { 659639bac0c5319f96e1bbe3399fb7f7f37344928bddslomov@chromium.org Copy(that); 660639bac0c5319f96e1bbe3399fb7f7f37344928bddslomov@chromium.org } 661639bac0c5319f96e1bbe3399fb7f7f37344928bddslomov@chromium.org template <class S, class M2> 662c86e8c29eea534916f0d6a2a285b65a86d1b3b67machenbach@chromium.org V8_INLINE Persistent(const Persistent<S, M2>& that) : PersistentBase<T>(0) { 663639bac0c5319f96e1bbe3399fb7f7f37344928bddslomov@chromium.org Copy(that); 664639bac0c5319f96e1bbe3399fb7f7f37344928bddslomov@chromium.org } 6654a35c5a501e5b966f895ddea8e19c3ca232cb23fdslomov@chromium.org V8_INLINE Persistent& operator=(const Persistent& that) { // NOLINT 666639bac0c5319f96e1bbe3399fb7f7f37344928bddslomov@chromium.org Copy(that); 667639bac0c5319f96e1bbe3399fb7f7f37344928bddslomov@chromium.org return *this; 668639bac0c5319f96e1bbe3399fb7f7f37344928bddslomov@chromium.org } 669639bac0c5319f96e1bbe3399fb7f7f37344928bddslomov@chromium.org template <class S, class M2> 6704a35c5a501e5b966f895ddea8e19c3ca232cb23fdslomov@chromium.org V8_INLINE Persistent& operator=(const Persistent<S, M2>& that) { // NOLINT 671639bac0c5319f96e1bbe3399fb7f7f37344928bddslomov@chromium.org Copy(that); 672639bac0c5319f96e1bbe3399fb7f7f37344928bddslomov@chromium.org return *this; 67343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } 674c5d4971574b7a205fa0e788d8121dc79485e5e67hpayer@chromium.org /** 675c5d4971574b7a205fa0e788d8121dc79485e5e67hpayer@chromium.org * The destructor will dispose the Persistent based on the 676c5d4971574b7a205fa0e788d8121dc79485e5e67hpayer@chromium.org * kResetInDestructor flags in the traits class. Since not calling dispose 677c5d4971574b7a205fa0e788d8121dc79485e5e67hpayer@chromium.org * can result in a memory leak, it is recommended to always set this flag. 678c5d4971574b7a205fa0e788d8121dc79485e5e67hpayer@chromium.org */ 6794a35c5a501e5b966f895ddea8e19c3ca232cb23fdslomov@chromium.org V8_INLINE ~Persistent() { 680c86e8c29eea534916f0d6a2a285b65a86d1b3b67machenbach@chromium.org if (M::kResetInDestructor) this->Reset(); 681c5d4971574b7a205fa0e788d8121dc79485e5e67hpayer@chromium.org } 68243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 683639bac0c5319f96e1bbe3399fb7f7f37344928bddslomov@chromium.org // TODO(dcarney): this is pretty useless, fix or remove 684c118402c43ae44cf9255d36608a44886c98537c5jkummerow@chromium.org template <class S> 6854a35c5a501e5b966f895ddea8e19c3ca232cb23fdslomov@chromium.org V8_INLINE static Persistent<T>& Cast(Persistent<S>& that) { // NOLINT 686c118402c43ae44cf9255d36608a44886c98537c5jkummerow@chromium.org#ifdef V8_ENABLE_CHECKS 687c118402c43ae44cf9255d36608a44886c98537c5jkummerow@chromium.org // If we're going to perform the type check then we have to check 688c118402c43ae44cf9255d36608a44886c98537c5jkummerow@chromium.org // that the handle isn't empty before doing the checked cast. 689c118402c43ae44cf9255d36608a44886c98537c5jkummerow@chromium.org if (!that.IsEmpty()) T::Cast(*that); 690c118402c43ae44cf9255d36608a44886c98537c5jkummerow@chromium.org#endif 691c118402c43ae44cf9255d36608a44886c98537c5jkummerow@chromium.org return reinterpret_cast<Persistent<T>&>(that); 692c118402c43ae44cf9255d36608a44886c98537c5jkummerow@chromium.org } 693c118402c43ae44cf9255d36608a44886c98537c5jkummerow@chromium.org 694639bac0c5319f96e1bbe3399fb7f7f37344928bddslomov@chromium.org // TODO(dcarney): this is pretty useless, fix or remove 6954a35c5a501e5b966f895ddea8e19c3ca232cb23fdslomov@chromium.org template <class S> V8_INLINE Persistent<S>& As() { // NOLINT 696c118402c43ae44cf9255d36608a44886c98537c5jkummerow@chromium.org return Persistent<S>::Cast(*this); 697c118402c43ae44cf9255d36608a44886c98537c5jkummerow@chromium.org } 698d16d8531698e91e9c60a7db9e0ba3c3bb15aff20mvstanton@chromium.org 699cc536058448cdb26fedf76ce62f2ce91480f2ae3yangguo@chromium.org // This will be removed. 700cc536058448cdb26fedf76ce62f2ce91480f2ae3yangguo@chromium.org V8_INLINE T* ClearAndLeak(); 701906e2fb760f52fe6e75b744b1ea42576ea5b2c29ulan@chromium.org 70257ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org private: 703690083842e7c67a362017dae50909d4bb0b2a9c2mstarzinger@chromium.org friend class Isolate; 704f95d4b920abb640ab0986d138ad559a7d3b91d04danno@chromium.org friend class Utils; 705b99c75496e05b4cd58815ada1e39e6029130d11crossberg@chromium.org template<class F> friend class Handle; 706b99c75496e05b4cd58815ada1e39e6029130d11crossberg@chromium.org template<class F> friend class Local; 707639bac0c5319f96e1bbe3399fb7f7f37344928bddslomov@chromium.org template<class F1, class F2> friend class Persistent; 7081fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org template<class F> friend class ReturnValue; 70957ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org 710202b1d8cd93e567672cc92f48fedc35989c47312machenbach@chromium.org template <class S> V8_INLINE Persistent(S* that) : PersistentBase<T>(that) { } 711202b1d8cd93e567672cc92f48fedc35989c47312machenbach@chromium.org V8_INLINE T* operator*() const { return this->val_; } 712639bac0c5319f96e1bbe3399fb7f7f37344928bddslomov@chromium.org template<class S, class M2> 7134a35c5a501e5b966f895ddea8e19c3ca232cb23fdslomov@chromium.org V8_INLINE void Copy(const Persistent<S, M2>& that); 714c86e8c29eea534916f0d6a2a285b65a86d1b3b67machenbach@chromium.org}; 71557ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org 716c86e8c29eea534916f0d6a2a285b65a86d1b3b67machenbach@chromium.org 717c86e8c29eea534916f0d6a2a285b65a86d1b3b67machenbach@chromium.org/** 718c86e8c29eea534916f0d6a2a285b65a86d1b3b67machenbach@chromium.org * A PersistentBase which has move semantics. 719c86e8c29eea534916f0d6a2a285b65a86d1b3b67machenbach@chromium.org * 720c86e8c29eea534916f0d6a2a285b65a86d1b3b67machenbach@chromium.org * Note: Persistent class hierarchy is subject to future changes. 721c86e8c29eea534916f0d6a2a285b65a86d1b3b67machenbach@chromium.org */ 722c86e8c29eea534916f0d6a2a285b65a86d1b3b67machenbach@chromium.orgtemplate<class T> 723c86e8c29eea534916f0d6a2a285b65a86d1b3b67machenbach@chromium.orgclass UniquePersistent : public PersistentBase<T> { 724c86e8c29eea534916f0d6a2a285b65a86d1b3b67machenbach@chromium.org struct RValue { 7259ed27460593e67bc55b9feb15ca7c301e9f804b0rossberg@chromium.org V8_INLINE explicit RValue(UniquePersistent* obj) : object(obj) {} 726c86e8c29eea534916f0d6a2a285b65a86d1b3b67machenbach@chromium.org UniquePersistent* object; 727c86e8c29eea534916f0d6a2a285b65a86d1b3b67machenbach@chromium.org }; 728c86e8c29eea534916f0d6a2a285b65a86d1b3b67machenbach@chromium.org 729c86e8c29eea534916f0d6a2a285b65a86d1b3b67machenbach@chromium.org public: 730381adef828187e237e8758ab730dee1c2834a0b3machenbach@chromium.org /** 731c86e8c29eea534916f0d6a2a285b65a86d1b3b67machenbach@chromium.org * A UniquePersistent with no storage cell. 732c86e8c29eea534916f0d6a2a285b65a86d1b3b67machenbach@chromium.org */ 733c86e8c29eea534916f0d6a2a285b65a86d1b3b67machenbach@chromium.org V8_INLINE UniquePersistent() : PersistentBase<T>(0) { } 734c86e8c29eea534916f0d6a2a285b65a86d1b3b67machenbach@chromium.org /** 735c86e8c29eea534916f0d6a2a285b65a86d1b3b67machenbach@chromium.org * Construct a UniquePersistent from a Handle. 736c86e8c29eea534916f0d6a2a285b65a86d1b3b67machenbach@chromium.org * When the Handle is non-empty, a new storage cell is created 737c86e8c29eea534916f0d6a2a285b65a86d1b3b67machenbach@chromium.org * pointing to the same object, and no flags are set. 738c86e8c29eea534916f0d6a2a285b65a86d1b3b67machenbach@chromium.org */ 739c86e8c29eea534916f0d6a2a285b65a86d1b3b67machenbach@chromium.org template <class S> 740c86e8c29eea534916f0d6a2a285b65a86d1b3b67machenbach@chromium.org V8_INLINE UniquePersistent(Isolate* isolate, Handle<S> that) 741c86e8c29eea534916f0d6a2a285b65a86d1b3b67machenbach@chromium.org : PersistentBase<T>(PersistentBase<T>::New(isolate, *that)) { 742c86e8c29eea534916f0d6a2a285b65a86d1b3b67machenbach@chromium.org TYPE_CHECK(T, S); 743c86e8c29eea534916f0d6a2a285b65a86d1b3b67machenbach@chromium.org } 744c86e8c29eea534916f0d6a2a285b65a86d1b3b67machenbach@chromium.org /** 745c86e8c29eea534916f0d6a2a285b65a86d1b3b67machenbach@chromium.org * Construct a UniquePersistent from a PersistentBase. 746c86e8c29eea534916f0d6a2a285b65a86d1b3b67machenbach@chromium.org * When the Persistent is non-empty, a new storage cell is created 747c86e8c29eea534916f0d6a2a285b65a86d1b3b67machenbach@chromium.org * pointing to the same object, and no flags are set. 748c86e8c29eea534916f0d6a2a285b65a86d1b3b67machenbach@chromium.org */ 749c86e8c29eea534916f0d6a2a285b65a86d1b3b67machenbach@chromium.org template <class S> 750c86e8c29eea534916f0d6a2a285b65a86d1b3b67machenbach@chromium.org V8_INLINE UniquePersistent(Isolate* isolate, const PersistentBase<S>& that) 751c86e8c29eea534916f0d6a2a285b65a86d1b3b67machenbach@chromium.org : PersistentBase<T>(PersistentBase<T>::New(isolate, that.val_)) { 752c86e8c29eea534916f0d6a2a285b65a86d1b3b67machenbach@chromium.org TYPE_CHECK(T, S); 753c86e8c29eea534916f0d6a2a285b65a86d1b3b67machenbach@chromium.org } 754c86e8c29eea534916f0d6a2a285b65a86d1b3b67machenbach@chromium.org /** 755c86e8c29eea534916f0d6a2a285b65a86d1b3b67machenbach@chromium.org * Move constructor. 756c86e8c29eea534916f0d6a2a285b65a86d1b3b67machenbach@chromium.org */ 757c86e8c29eea534916f0d6a2a285b65a86d1b3b67machenbach@chromium.org V8_INLINE UniquePersistent(RValue rvalue) 758c86e8c29eea534916f0d6a2a285b65a86d1b3b67machenbach@chromium.org : PersistentBase<T>(rvalue.object->val_) { 759c86e8c29eea534916f0d6a2a285b65a86d1b3b67machenbach@chromium.org rvalue.object->val_ = 0; 760c86e8c29eea534916f0d6a2a285b65a86d1b3b67machenbach@chromium.org } 761c86e8c29eea534916f0d6a2a285b65a86d1b3b67machenbach@chromium.org V8_INLINE ~UniquePersistent() { this->Reset(); } 762c86e8c29eea534916f0d6a2a285b65a86d1b3b67machenbach@chromium.org /** 763c86e8c29eea534916f0d6a2a285b65a86d1b3b67machenbach@chromium.org * Move via assignment. 764c86e8c29eea534916f0d6a2a285b65a86d1b3b67machenbach@chromium.org */ 765c86e8c29eea534916f0d6a2a285b65a86d1b3b67machenbach@chromium.org template<class S> 766c86e8c29eea534916f0d6a2a285b65a86d1b3b67machenbach@chromium.org V8_INLINE UniquePersistent& operator=(UniquePersistent<S> rhs) { 767c86e8c29eea534916f0d6a2a285b65a86d1b3b67machenbach@chromium.org TYPE_CHECK(T, S); 768381adef828187e237e8758ab730dee1c2834a0b3machenbach@chromium.org this->Reset(); 769c86e8c29eea534916f0d6a2a285b65a86d1b3b67machenbach@chromium.org this->val_ = rhs.val_; 770c86e8c29eea534916f0d6a2a285b65a86d1b3b67machenbach@chromium.org rhs.val_ = 0; 771c86e8c29eea534916f0d6a2a285b65a86d1b3b67machenbach@chromium.org return *this; 772c86e8c29eea534916f0d6a2a285b65a86d1b3b67machenbach@chromium.org } 773c86e8c29eea534916f0d6a2a285b65a86d1b3b67machenbach@chromium.org /** 774c86e8c29eea534916f0d6a2a285b65a86d1b3b67machenbach@chromium.org * Cast operator for moves. 775c86e8c29eea534916f0d6a2a285b65a86d1b3b67machenbach@chromium.org */ 776c86e8c29eea534916f0d6a2a285b65a86d1b3b67machenbach@chromium.org V8_INLINE operator RValue() { return RValue(this); } 777c86e8c29eea534916f0d6a2a285b65a86d1b3b67machenbach@chromium.org /** 778c86e8c29eea534916f0d6a2a285b65a86d1b3b67machenbach@chromium.org * Pass allows returning uniques from functions, etc. 779c86e8c29eea534916f0d6a2a285b65a86d1b3b67machenbach@chromium.org */ 780ed1a63112185152bc10fbd02418393804a5fcf04machenbach@chromium.org UniquePersistent Pass() { return UniquePersistent(RValue(this)); } 781c86e8c29eea534916f0d6a2a285b65a86d1b3b67machenbach@chromium.org 782c86e8c29eea534916f0d6a2a285b65a86d1b3b67machenbach@chromium.org private: 783c86e8c29eea534916f0d6a2a285b65a86d1b3b67machenbach@chromium.org UniquePersistent(UniquePersistent&); 784c86e8c29eea534916f0d6a2a285b65a86d1b3b67machenbach@chromium.org void operator=(UniquePersistent&); 78543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen}; 78643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 787c86e8c29eea534916f0d6a2a285b65a86d1b3b67machenbach@chromium.org 788727e995b7bba3c57fb1e5c156d386ca11894f781v /** 78943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * A stack-allocated class that governs a number of local handles. 79043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * After a handle scope has been created, all local handles will be 79143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * allocated within that handle scope until either the handle scope is 79243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * deleted or another handle scope is created. If there is already a 79343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * handle scope and a new one is created, all allocations will take 794727e995b7bba3c57fb1e5c156d386ca11894f781v * place in the new handle scope until it is deleted. After that, 79543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * new handles will again be allocated in the original handle scope. 79643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * 79743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * After the handle scope of a local handle has been deleted the 79843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * garbage collector will no longer track the object stored in the 79943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * handle and may deallocate it. The behavior of accessing a handle 80043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * for which the handle scope has been deleted is undefined. 80143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen */ 802594006017e46d82ed7146611dc12c20e3c509c7ddanno@chromium.orgclass V8_EXPORT HandleScope { 80343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen public: 8042bda543d75374afd8d7e98f56ca99a57ae1b7bd1svenpanne@chromium.org HandleScope(Isolate* isolate); 8052bda543d75374afd8d7e98f56ca99a57ae1b7bd1svenpanne@chromium.org 806ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org ~HandleScope(); 80743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 80843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen /** 80943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * Counts the number of allocated handles. 81043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen */ 8114610c28af9f4355485f8115a725f320b80632804machenbach@chromium.org static int NumberOfHandles(Isolate* isolate); 81243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 81326ca35cc4ec47151d9c6d3890b0f052fc79cb8afmachenbach@chromium.org V8_INLINE Isolate* GetIsolate() const { 81426ca35cc4ec47151d9c6d3890b0f052fc79cb8afmachenbach@chromium.org return reinterpret_cast<Isolate*>(isolate_); 81526ca35cc4ec47151d9c6d3890b0f052fc79cb8afmachenbach@chromium.org } 81626ca35cc4ec47151d9c6d3890b0f052fc79cb8afmachenbach@chromium.org 81726ca35cc4ec47151d9c6d3890b0f052fc79cb8afmachenbach@chromium.org protected: 81826ca35cc4ec47151d9c6d3890b0f052fc79cb8afmachenbach@chromium.org V8_INLINE HandleScope() {} 81926ca35cc4ec47151d9c6d3890b0f052fc79cb8afmachenbach@chromium.org 82026ca35cc4ec47151d9c6d3890b0f052fc79cb8afmachenbach@chromium.org void Initialize(Isolate* isolate); 82126ca35cc4ec47151d9c6d3890b0f052fc79cb8afmachenbach@chromium.org 82232280cf2786219b2d9a668f7f00778fb59ac40b3mstarzinger@chromium.org static internal::Object** CreateHandle(internal::Isolate* isolate, 82332280cf2786219b2d9a668f7f00778fb59ac40b3mstarzinger@chromium.org internal::Object* value); 82426ca35cc4ec47151d9c6d3890b0f052fc79cb8afmachenbach@chromium.org 82526ca35cc4ec47151d9c6d3890b0f052fc79cb8afmachenbach@chromium.org private: 82626ca35cc4ec47151d9c6d3890b0f052fc79cb8afmachenbach@chromium.org // Uses heap_object to obtain the current Isolate. 827cfdf67d672b8e2cd6cc1df14c082671511745746machenbach@chromium.org static internal::Object** CreateHandle(internal::HeapObject* heap_object, 828cfdf67d672b8e2cd6cc1df14c082671511745746machenbach@chromium.org internal::Object* value); 829cfdf67d672b8e2cd6cc1df14c082671511745746machenbach@chromium.org 83049a44674c6935d62c3e776dfbf896b7f6f34228ammassi@chromium.org // Make it hard to create heap-allocated or illegal handle scopes by 83149a44674c6935d62c3e776dfbf896b7f6f34228ammassi@chromium.org // disallowing certain operations. 83243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen HandleScope(const HandleScope&); 83343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen void operator=(const HandleScope&); 83443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen void* operator new(size_t size); 83543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen void operator delete(void*, size_t); 83643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 837ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org internal::Isolate* isolate_; 838303ada708275d2d425b846fb237f1ba7598ee239lrn@chromium.org internal::Object** prev_next_; 839303ada708275d2d425b846fb237f1ba7598ee239lrn@chromium.org internal::Object** prev_limit_; 84043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 84126ca35cc4ec47151d9c6d3890b0f052fc79cb8afmachenbach@chromium.org // Local::New uses CreateHandle with an Isolate* parameter. 842cfdf67d672b8e2cd6cc1df14c082671511745746machenbach@chromium.org template<class F> friend class Local; 84326ca35cc4ec47151d9c6d3890b0f052fc79cb8afmachenbach@chromium.org 84426ca35cc4ec47151d9c6d3890b0f052fc79cb8afmachenbach@chromium.org // Object::GetInternalField and Context::GetEmbedderData use CreateHandle with 84526ca35cc4ec47151d9c6d3890b0f052fc79cb8afmachenbach@chromium.org // a HeapObject* in their shortcuts. 846cfdf67d672b8e2cd6cc1df14c082671511745746machenbach@chromium.org friend class Object; 847cfdf67d672b8e2cd6cc1df14c082671511745746machenbach@chromium.org friend class Context; 848cfdf67d672b8e2cd6cc1df14c082671511745746machenbach@chromium.org}; 849cfdf67d672b8e2cd6cc1df14c082671511745746machenbach@chromium.org 850cfdf67d672b8e2cd6cc1df14c082671511745746machenbach@chromium.org 851cfdf67d672b8e2cd6cc1df14c082671511745746machenbach@chromium.org/** 852cfdf67d672b8e2cd6cc1df14c082671511745746machenbach@chromium.org * A HandleScope which first allocates a handle in the current scope 853cfdf67d672b8e2cd6cc1df14c082671511745746machenbach@chromium.org * which will be later filled with the escape value. 854cfdf67d672b8e2cd6cc1df14c082671511745746machenbach@chromium.org */ 855cfdf67d672b8e2cd6cc1df14c082671511745746machenbach@chromium.orgclass V8_EXPORT EscapableHandleScope : public HandleScope { 856cfdf67d672b8e2cd6cc1df14c082671511745746machenbach@chromium.org public: 857cfdf67d672b8e2cd6cc1df14c082671511745746machenbach@chromium.org EscapableHandleScope(Isolate* isolate); 858cfdf67d672b8e2cd6cc1df14c082671511745746machenbach@chromium.org V8_INLINE ~EscapableHandleScope() {} 859cfdf67d672b8e2cd6cc1df14c082671511745746machenbach@chromium.org 860cfdf67d672b8e2cd6cc1df14c082671511745746machenbach@chromium.org /** 861cfdf67d672b8e2cd6cc1df14c082671511745746machenbach@chromium.org * Pushes the value into the previous scope and returns a handle to it. 862cfdf67d672b8e2cd6cc1df14c082671511745746machenbach@chromium.org * Cannot be called twice. 863cfdf67d672b8e2cd6cc1df14c082671511745746machenbach@chromium.org */ 864cfdf67d672b8e2cd6cc1df14c082671511745746machenbach@chromium.org template <class T> 865cfdf67d672b8e2cd6cc1df14c082671511745746machenbach@chromium.org V8_INLINE Local<T> Escape(Local<T> value) { 866cfdf67d672b8e2cd6cc1df14c082671511745746machenbach@chromium.org internal::Object** slot = 867cfdf67d672b8e2cd6cc1df14c082671511745746machenbach@chromium.org Escape(reinterpret_cast<internal::Object**>(*value)); 868cfdf67d672b8e2cd6cc1df14c082671511745746machenbach@chromium.org return Local<T>(reinterpret_cast<T*>(slot)); 869cfdf67d672b8e2cd6cc1df14c082671511745746machenbach@chromium.org } 870cfdf67d672b8e2cd6cc1df14c082671511745746machenbach@chromium.org 871cfdf67d672b8e2cd6cc1df14c082671511745746machenbach@chromium.org private: 872cfdf67d672b8e2cd6cc1df14c082671511745746machenbach@chromium.org internal::Object** Escape(internal::Object** escape_value); 873cfdf67d672b8e2cd6cc1df14c082671511745746machenbach@chromium.org 8745ae72c9d3193fcbb0e2640a2b74b2f1f0d1b05e9mstarzinger@chromium.org // Make it hard to create heap-allocated or illegal handle scopes by 8755ae72c9d3193fcbb0e2640a2b74b2f1f0d1b05e9mstarzinger@chromium.org // disallowing certain operations. 8765ae72c9d3193fcbb0e2640a2b74b2f1f0d1b05e9mstarzinger@chromium.org EscapableHandleScope(const EscapableHandleScope&); 8775ae72c9d3193fcbb0e2640a2b74b2f1f0d1b05e9mstarzinger@chromium.org void operator=(const EscapableHandleScope&); 8785ae72c9d3193fcbb0e2640a2b74b2f1f0d1b05e9mstarzinger@chromium.org void* operator new(size_t size); 8795ae72c9d3193fcbb0e2640a2b74b2f1f0d1b05e9mstarzinger@chromium.org void operator delete(void*, size_t); 8805ae72c9d3193fcbb0e2640a2b74b2f1f0d1b05e9mstarzinger@chromium.org 881cfdf67d672b8e2cd6cc1df14c082671511745746machenbach@chromium.org internal::Object** escape_slot_; 88243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen}; 88343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 88443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 885c5d4971574b7a205fa0e788d8121dc79485e5e67hpayer@chromium.org/** 886c5d4971574b7a205fa0e788d8121dc79485e5e67hpayer@chromium.org * A simple Maybe type, representing an object which may or may not have a 887c5d4971574b7a205fa0e788d8121dc79485e5e67hpayer@chromium.org * value. 888c5d4971574b7a205fa0e788d8121dc79485e5e67hpayer@chromium.org */ 889c5d4971574b7a205fa0e788d8121dc79485e5e67hpayer@chromium.orgtemplate<class T> 890dd6d9eedcac6e3b5adfb7702649ac32def9c3585mvstanton@chromium.orgstruct Maybe { 891c5d4971574b7a205fa0e788d8121dc79485e5e67hpayer@chromium.org Maybe() : has_value(false) {} 892c5d4971574b7a205fa0e788d8121dc79485e5e67hpayer@chromium.org explicit Maybe(T t) : has_value(true), value(t) {} 893c5d4971574b7a205fa0e788d8121dc79485e5e67hpayer@chromium.org Maybe(bool has, T t) : has_value(has), value(t) {} 894c5d4971574b7a205fa0e788d8121dc79485e5e67hpayer@chromium.org 895c5d4971574b7a205fa0e788d8121dc79485e5e67hpayer@chromium.org bool has_value; 896c5d4971574b7a205fa0e788d8121dc79485e5e67hpayer@chromium.org T value; 897c5d4971574b7a205fa0e788d8121dc79485e5e67hpayer@chromium.org}; 898c5d4971574b7a205fa0e788d8121dc79485e5e67hpayer@chromium.org 899c5d4971574b7a205fa0e788d8121dc79485e5e67hpayer@chromium.org 900eb81c479217278e101fc47fd29872a7e68f02402machenbach@chromium.org// Convenience wrapper. 901eb81c479217278e101fc47fd29872a7e68f02402machenbach@chromium.orgtemplate <class T> 902eb81c479217278e101fc47fd29872a7e68f02402machenbach@chromium.orginline Maybe<T> maybe(T t) { 903eb81c479217278e101fc47fd29872a7e68f02402machenbach@chromium.org return Maybe<T>(t); 904eb81c479217278e101fc47fd29872a7e68f02402machenbach@chromium.org} 905eb81c479217278e101fc47fd29872a7e68f02402machenbach@chromium.org 906eb81c479217278e101fc47fd29872a7e68f02402machenbach@chromium.org 907fb144a0716afe7ab8bf245f2391a9e53b3db3c89fschneider@chromium.org// --- Special objects --- 90843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 90943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 91043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen/** 91143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * The superclass of values and API object templates. 91243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen */ 913594006017e46d82ed7146611dc12c20e3c509c7ddanno@chromium.orgclass V8_EXPORT Data { 91443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen private: 91543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen Data(); 91643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen}; 91743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 91843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 91943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen/** 92043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * The origin, within a file, of a script. 92143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen */ 9226bec0093ef661b53a1e338a233d7aafb9536a307mvstanton@chromium.orgclass ScriptOrigin { 92343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen public: 9244a35c5a501e5b966f895ddea8e19c3ca232cb23fdslomov@chromium.org V8_INLINE ScriptOrigin( 92569ea3965ef6e0d3f020a402cf7e6b96b9cb651aekmillikin@chromium.org Handle<Value> resource_name, 92669ea3965ef6e0d3f020a402cf7e6b96b9cb651aekmillikin@chromium.org Handle<Integer> resource_line_offset = Handle<Integer>(), 927d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.org Handle<Integer> resource_column_offset = Handle<Integer>(), 928f15d0cdbef11a212e108432465f014a7d3c3aa12machenbach@chromium.org Handle<Boolean> resource_is_shared_cross_origin = Handle<Boolean>(), 929f15d0cdbef11a212e108432465f014a7d3c3aa12machenbach@chromium.org Handle<Integer> script_id = Handle<Integer>()) 93043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen : resource_name_(resource_name), 93143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen resource_line_offset_(resource_line_offset), 932d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.org resource_column_offset_(resource_column_offset), 933f15d0cdbef11a212e108432465f014a7d3c3aa12machenbach@chromium.org resource_is_shared_cross_origin_(resource_is_shared_cross_origin), 934f15d0cdbef11a212e108432465f014a7d3c3aa12machenbach@chromium.org script_id_(script_id) { } 9354a35c5a501e5b966f895ddea8e19c3ca232cb23fdslomov@chromium.org V8_INLINE Handle<Value> ResourceName() const; 9364a35c5a501e5b966f895ddea8e19c3ca232cb23fdslomov@chromium.org V8_INLINE Handle<Integer> ResourceLineOffset() const; 9374a35c5a501e5b966f895ddea8e19c3ca232cb23fdslomov@chromium.org V8_INLINE Handle<Integer> ResourceColumnOffset() const; 9384a35c5a501e5b966f895ddea8e19c3ca232cb23fdslomov@chromium.org V8_INLINE Handle<Boolean> ResourceIsSharedCrossOrigin() const; 939f15d0cdbef11a212e108432465f014a7d3c3aa12machenbach@chromium.org V8_INLINE Handle<Integer> ScriptID() const; 94043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen private: 941cbaa060d2827a6c7aab497845a1fe6ae6f2dfab4mads.s.ager Handle<Value> resource_name_; 94243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen Handle<Integer> resource_line_offset_; 94343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen Handle<Integer> resource_column_offset_; 944d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.org Handle<Boolean> resource_is_shared_cross_origin_; 945f15d0cdbef11a212e108432465f014a7d3c3aa12machenbach@chromium.org Handle<Integer> script_id_; 94643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen}; 94743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 94843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 94943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen/** 9506b6df382019a622ba20133e47bbe2e6f323b013bdslomov@chromium.org * A compiled JavaScript script, not yet tied to a Context. 95143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen */ 9526b6df382019a622ba20133e47bbe2e6f323b013bdslomov@chromium.orgclass V8_EXPORT UnboundScript { 95343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen public: 9545c838251403b0be9a882540f1922577abba4c872ager@chromium.org /** 9556b6df382019a622ba20133e47bbe2e6f323b013bdslomov@chromium.org * Binds the script to the currently entered context. 9565c838251403b0be9a882540f1922577abba4c872ager@chromium.org */ 9576b6df382019a622ba20133e47bbe2e6f323b013bdslomov@chromium.org Local<Script> BindToCurrentContext(); 9586b6df382019a622ba20133e47bbe2e6f323b013bdslomov@chromium.org 9596b6df382019a622ba20133e47bbe2e6f323b013bdslomov@chromium.org int GetId(); 9606b6df382019a622ba20133e47bbe2e6f323b013bdslomov@chromium.org Handle<Value> GetScriptName(); 961911335cff40a2630bbe1dfb77b1897be991241bfsgjesse@chromium.org 9625c838251403b0be9a882540f1922577abba4c872ager@chromium.org /** 963d0bddc653152f270a27fe32d5d7b0f5c0fa3b00cmachenbach@chromium.org * Data read from magic sourceURL comments. 964d0bddc653152f270a27fe32d5d7b0f5c0fa3b00cmachenbach@chromium.org */ 965d0bddc653152f270a27fe32d5d7b0f5c0fa3b00cmachenbach@chromium.org Handle<Value> GetSourceURL(); 966d0bddc653152f270a27fe32d5d7b0f5c0fa3b00cmachenbach@chromium.org /** 967d0bddc653152f270a27fe32d5d7b0f5c0fa3b00cmachenbach@chromium.org * Data read from magic sourceMappingURL comments. 968d0bddc653152f270a27fe32d5d7b0f5c0fa3b00cmachenbach@chromium.org */ 969d0bddc653152f270a27fe32d5d7b0f5c0fa3b00cmachenbach@chromium.org Handle<Value> GetSourceMappingURL(); 970d0bddc653152f270a27fe32d5d7b0f5c0fa3b00cmachenbach@chromium.org 971d0bddc653152f270a27fe32d5d7b0f5c0fa3b00cmachenbach@chromium.org /** 9726b6df382019a622ba20133e47bbe2e6f323b013bdslomov@chromium.org * Returns zero based line number of the code_pos location in the script. 9736b6df382019a622ba20133e47bbe2e6f323b013bdslomov@chromium.org * -1 will be returned if no information available. 9745c838251403b0be9a882540f1922577abba4c872ager@chromium.org */ 9756b6df382019a622ba20133e47bbe2e6f323b013bdslomov@chromium.org int GetLineNumber(int code_pos); 9765c838251403b0be9a882540f1922577abba4c872ager@chromium.org 9776b6df382019a622ba20133e47bbe2e6f323b013bdslomov@chromium.org static const int kNoScriptId = 0; 9786b6df382019a622ba20133e47bbe2e6f323b013bdslomov@chromium.org}; 9796b6df382019a622ba20133e47bbe2e6f323b013bdslomov@chromium.org 9806b6df382019a622ba20133e47bbe2e6f323b013bdslomov@chromium.org 9816b6df382019a622ba20133e47bbe2e6f323b013bdslomov@chromium.org/** 9826b6df382019a622ba20133e47bbe2e6f323b013bdslomov@chromium.org * A compiled JavaScript script, tied to a Context which was active when the 9836b6df382019a622ba20133e47bbe2e6f323b013bdslomov@chromium.org * script was compiled. 9846b6df382019a622ba20133e47bbe2e6f323b013bdslomov@chromium.org */ 9856b6df382019a622ba20133e47bbe2e6f323b013bdslomov@chromium.orgclass V8_EXPORT Script { 9866b6df382019a622ba20133e47bbe2e6f323b013bdslomov@chromium.org public: 9875c838251403b0be9a882540f1922577abba4c872ager@chromium.org /** 9886b6df382019a622ba20133e47bbe2e6f323b013bdslomov@chromium.org * A shorthand for ScriptCompiler::Compile(). 98943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen */ 99043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen static Local<Script> Compile(Handle<String> source, 9912ebef182c49d59eba907b120c3c2a50808bd1f12machenbach@chromium.org ScriptOrigin* origin = NULL); 99243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 9936b6df382019a622ba20133e47bbe2e6f323b013bdslomov@chromium.org // To be decprecated, use the Compile above. 994cbaa060d2827a6c7aab497845a1fe6ae6f2dfab4mads.s.ager static Local<Script> Compile(Handle<String> source, 9956b6df382019a622ba20133e47bbe2e6f323b013bdslomov@chromium.org Handle<String> file_name); 996cbaa060d2827a6c7aab497845a1fe6ae6f2dfab4mads.s.ager 997727e995b7bba3c57fb1e5c156d386ca11894f781v /** 9986b6df382019a622ba20133e47bbe2e6f323b013bdslomov@chromium.org * Runs the script returning the resulting value. It will be run in the 9996b6df382019a622ba20133e47bbe2e6f323b013bdslomov@chromium.org * context in which it was created (ScriptCompiler::CompileBound or 10006b6df382019a622ba20133e47bbe2e6f323b013bdslomov@chromium.org * UnboundScript::BindToGlobalContext()). 1001727e995b7bba3c57fb1e5c156d386ca11894f781v */ 100243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen Local<Value> Run(); 10037be3c996bea370e151c9fe4ecf7f779cdc5f87adkasperl@chromium.org 10047be3c996bea370e151c9fe4ecf7f779cdc5f87adkasperl@chromium.org /** 10056b6df382019a622ba20133e47bbe2e6f323b013bdslomov@chromium.org * Returns the corresponding context-unbound script. 10061510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org */ 10076b6df382019a622ba20133e47bbe2e6f323b013bdslomov@chromium.org Local<UnboundScript> GetUnboundScript(); 10081510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org 10096b6df382019a622ba20133e47bbe2e6f323b013bdslomov@chromium.org V8_DEPRECATED("Use GetUnboundScript()->GetId()", 10101e2d50cf3d94ff48285da107b7a9da1ad0fc873dmachenbach@chromium.org int GetId()) { 10111e2d50cf3d94ff48285da107b7a9da1ad0fc873dmachenbach@chromium.org return GetUnboundScript()->GetId(); 10126b6df382019a622ba20133e47bbe2e6f323b013bdslomov@chromium.org } 10136b6df382019a622ba20133e47bbe2e6f323b013bdslomov@chromium.org}; 10141510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org 10156b6df382019a622ba20133e47bbe2e6f323b013bdslomov@chromium.org 10166b6df382019a622ba20133e47bbe2e6f323b013bdslomov@chromium.org/** 10176b6df382019a622ba20133e47bbe2e6f323b013bdslomov@chromium.org * For compiling scripts. 10186b6df382019a622ba20133e47bbe2e6f323b013bdslomov@chromium.org */ 10196b6df382019a622ba20133e47bbe2e6f323b013bdslomov@chromium.orgclass V8_EXPORT ScriptCompiler { 10206b6df382019a622ba20133e47bbe2e6f323b013bdslomov@chromium.org public: 10216b6df382019a622ba20133e47bbe2e6f323b013bdslomov@chromium.org /** 10226b6df382019a622ba20133e47bbe2e6f323b013bdslomov@chromium.org * Compilation data that the embedder can cache and pass back to speed up 10236b6df382019a622ba20133e47bbe2e6f323b013bdslomov@chromium.org * future compilations. The data is produced if the CompilerOptions passed to 10246b6df382019a622ba20133e47bbe2e6f323b013bdslomov@chromium.org * the compilation functions in ScriptCompiler contains produce_data_to_cache 10256b6df382019a622ba20133e47bbe2e6f323b013bdslomov@chromium.org * = true. The data to cache can then can be retrieved from 10266b6df382019a622ba20133e47bbe2e6f323b013bdslomov@chromium.org * UnboundScript. 10276b6df382019a622ba20133e47bbe2e6f323b013bdslomov@chromium.org */ 10286b6df382019a622ba20133e47bbe2e6f323b013bdslomov@chromium.org struct V8_EXPORT CachedData { 102969f64b1a8bfa6f5418b7c1f71d4e0833f76e93edmachenbach@chromium.org enum BufferPolicy { 103069f64b1a8bfa6f5418b7c1f71d4e0833f76e93edmachenbach@chromium.org BufferNotOwned, 103169f64b1a8bfa6f5418b7c1f71d4e0833f76e93edmachenbach@chromium.org BufferOwned 103269f64b1a8bfa6f5418b7c1f71d4e0833f76e93edmachenbach@chromium.org }; 103369f64b1a8bfa6f5418b7c1f71d4e0833f76e93edmachenbach@chromium.org 103469f64b1a8bfa6f5418b7c1f71d4e0833f76e93edmachenbach@chromium.org CachedData() : data(NULL), length(0), buffer_policy(BufferNotOwned) {} 103569f64b1a8bfa6f5418b7c1f71d4e0833f76e93edmachenbach@chromium.org 103669f64b1a8bfa6f5418b7c1f71d4e0833f76e93edmachenbach@chromium.org // If buffer_policy is BufferNotOwned, the caller keeps the ownership of 103769f64b1a8bfa6f5418b7c1f71d4e0833f76e93edmachenbach@chromium.org // data and guarantees that it stays alive until the CachedData object is 103869f64b1a8bfa6f5418b7c1f71d4e0833f76e93edmachenbach@chromium.org // destroyed. If the policy is BufferOwned, the given data will be deleted 103969f64b1a8bfa6f5418b7c1f71d4e0833f76e93edmachenbach@chromium.org // (with delete[]) when the CachedData object is destroyed. 104069f64b1a8bfa6f5418b7c1f71d4e0833f76e93edmachenbach@chromium.org CachedData(const uint8_t* data, int length, 104169f64b1a8bfa6f5418b7c1f71d4e0833f76e93edmachenbach@chromium.org BufferPolicy buffer_policy = BufferNotOwned); 104269f64b1a8bfa6f5418b7c1f71d4e0833f76e93edmachenbach@chromium.org ~CachedData(); 10436b6df382019a622ba20133e47bbe2e6f323b013bdslomov@chromium.org // TODO(marja): Async compilation; add constructors which take a callback 10446b6df382019a622ba20133e47bbe2e6f323b013bdslomov@chromium.org // which will be called when V8 no longer needs the data. 10456b6df382019a622ba20133e47bbe2e6f323b013bdslomov@chromium.org const uint8_t* data; 10466b6df382019a622ba20133e47bbe2e6f323b013bdslomov@chromium.org int length; 104769f64b1a8bfa6f5418b7c1f71d4e0833f76e93edmachenbach@chromium.org BufferPolicy buffer_policy; 104869f64b1a8bfa6f5418b7c1f71d4e0833f76e93edmachenbach@chromium.org 10493c3c8d733702cb2b41471efa5eead1faf5b5711bmachenbach@chromium.org private: 1050aa107b240dc43417fae8469b5c1b0f1ec9f98400machenbach@chromium.org // Prevent copying. Not implemented. 1051aa107b240dc43417fae8469b5c1b0f1ec9f98400machenbach@chromium.org CachedData(const CachedData&); 1052aa107b240dc43417fae8469b5c1b0f1ec9f98400machenbach@chromium.org CachedData& operator=(const CachedData&); 10536b6df382019a622ba20133e47bbe2e6f323b013bdslomov@chromium.org }; 10546b6df382019a622ba20133e47bbe2e6f323b013bdslomov@chromium.org 10556b6df382019a622ba20133e47bbe2e6f323b013bdslomov@chromium.org /** 10561e2d50cf3d94ff48285da107b7a9da1ad0fc873dmachenbach@chromium.org * Source code which can be then compiled to a UnboundScript or Script. 10576b6df382019a622ba20133e47bbe2e6f323b013bdslomov@chromium.org */ 1058a221880197f38ff22d942851060daffa5d036bdfmachenbach@chromium.org class Source { 105969f64b1a8bfa6f5418b7c1f71d4e0833f76e93edmachenbach@chromium.org public: 106069f64b1a8bfa6f5418b7c1f71d4e0833f76e93edmachenbach@chromium.org // Source takes ownership of CachedData. 1061a221880197f38ff22d942851060daffa5d036bdfmachenbach@chromium.org V8_INLINE Source(Local<String> source_string, const ScriptOrigin& origin, 106269f64b1a8bfa6f5418b7c1f71d4e0833f76e93edmachenbach@chromium.org CachedData* cached_data = NULL); 1063a221880197f38ff22d942851060daffa5d036bdfmachenbach@chromium.org V8_INLINE Source(Local<String> source_string, 1064a221880197f38ff22d942851060daffa5d036bdfmachenbach@chromium.org CachedData* cached_data = NULL); 1065a221880197f38ff22d942851060daffa5d036bdfmachenbach@chromium.org V8_INLINE ~Source(); 106669f64b1a8bfa6f5418b7c1f71d4e0833f76e93edmachenbach@chromium.org 106769f64b1a8bfa6f5418b7c1f71d4e0833f76e93edmachenbach@chromium.org // Ownership of the CachedData or its buffers is *not* transferred to the 106869f64b1a8bfa6f5418b7c1f71d4e0833f76e93edmachenbach@chromium.org // caller. The CachedData object is alive as long as the Source object is 106969f64b1a8bfa6f5418b7c1f71d4e0833f76e93edmachenbach@chromium.org // alive. 1070a221880197f38ff22d942851060daffa5d036bdfmachenbach@chromium.org V8_INLINE const CachedData* GetCachedData() const; 107169f64b1a8bfa6f5418b7c1f71d4e0833f76e93edmachenbach@chromium.org 107269f64b1a8bfa6f5418b7c1f71d4e0833f76e93edmachenbach@chromium.org private: 107369f64b1a8bfa6f5418b7c1f71d4e0833f76e93edmachenbach@chromium.org friend class ScriptCompiler; 1074aa107b240dc43417fae8469b5c1b0f1ec9f98400machenbach@chromium.org // Prevent copying. Not implemented. 107569f64b1a8bfa6f5418b7c1f71d4e0833f76e93edmachenbach@chromium.org Source(const Source&); 1076a221880197f38ff22d942851060daffa5d036bdfmachenbach@chromium.org Source& operator=(const Source&); 10776b6df382019a622ba20133e47bbe2e6f323b013bdslomov@chromium.org 10786b6df382019a622ba20133e47bbe2e6f323b013bdslomov@chromium.org Local<String> source_string; 10796b6df382019a622ba20133e47bbe2e6f323b013bdslomov@chromium.org 10806b6df382019a622ba20133e47bbe2e6f323b013bdslomov@chromium.org // Origin information 10816b6df382019a622ba20133e47bbe2e6f323b013bdslomov@chromium.org Handle<Value> resource_name; 10826b6df382019a622ba20133e47bbe2e6f323b013bdslomov@chromium.org Handle<Integer> resource_line_offset; 10836b6df382019a622ba20133e47bbe2e6f323b013bdslomov@chromium.org Handle<Integer> resource_column_offset; 10846b6df382019a622ba20133e47bbe2e6f323b013bdslomov@chromium.org Handle<Boolean> resource_is_shared_cross_origin; 10856b6df382019a622ba20133e47bbe2e6f323b013bdslomov@chromium.org 10864c3ce7c3fd2802da8f91c6516a9c9aea3cd93f1emachenbach@chromium.org // Cached data from previous compilation (if a kConsume*Cache flag is 10874c3ce7c3fd2802da8f91c6516a9c9aea3cd93f1emachenbach@chromium.org // set), or hold newly generated cache data (kProduce*Cache flags) are 10884c3ce7c3fd2802da8f91c6516a9c9aea3cd93f1emachenbach@chromium.org // set when calling a compile method. 108969f64b1a8bfa6f5418b7c1f71d4e0833f76e93edmachenbach@chromium.org CachedData* cached_data; 10906b6df382019a622ba20133e47bbe2e6f323b013bdslomov@chromium.org }; 10916b6df382019a622ba20133e47bbe2e6f323b013bdslomov@chromium.org 1092b376fed08cb9d90a3f67f655adf63c4b35feb106machenbach@chromium.org /** 1093b376fed08cb9d90a3f67f655adf63c4b35feb106machenbach@chromium.org * For streaming incomplete script data to V8. The embedder should implement a 1094b376fed08cb9d90a3f67f655adf63c4b35feb106machenbach@chromium.org * subclass of this class. 1095b376fed08cb9d90a3f67f655adf63c4b35feb106machenbach@chromium.org */ 1096b376fed08cb9d90a3f67f655adf63c4b35feb106machenbach@chromium.org class ExternalSourceStream { 1097b376fed08cb9d90a3f67f655adf63c4b35feb106machenbach@chromium.org public: 1098b376fed08cb9d90a3f67f655adf63c4b35feb106machenbach@chromium.org virtual ~ExternalSourceStream() {} 1099b376fed08cb9d90a3f67f655adf63c4b35feb106machenbach@chromium.org 1100b376fed08cb9d90a3f67f655adf63c4b35feb106machenbach@chromium.org /** 1101b376fed08cb9d90a3f67f655adf63c4b35feb106machenbach@chromium.org * V8 calls this to request the next chunk of data from the embedder. This 1102b376fed08cb9d90a3f67f655adf63c4b35feb106machenbach@chromium.org * function will be called on a background thread, so it's OK to block and 1103b376fed08cb9d90a3f67f655adf63c4b35feb106machenbach@chromium.org * wait for the data, if the embedder doesn't have data yet. Returns the 1104b376fed08cb9d90a3f67f655adf63c4b35feb106machenbach@chromium.org * length of the data returned. When the data ends, GetMoreData should 1105b376fed08cb9d90a3f67f655adf63c4b35feb106machenbach@chromium.org * return 0. Caller takes ownership of the data. 1106b376fed08cb9d90a3f67f655adf63c4b35feb106machenbach@chromium.org * 1107b376fed08cb9d90a3f67f655adf63c4b35feb106machenbach@chromium.org * When streaming UTF-8 data, V8 handles multi-byte characters split between 1108b376fed08cb9d90a3f67f655adf63c4b35feb106machenbach@chromium.org * two data chunks, but doesn't handle multi-byte characters split between 1109b376fed08cb9d90a3f67f655adf63c4b35feb106machenbach@chromium.org * more than two data chunks. The embedder can avoid this problem by always 1110b376fed08cb9d90a3f67f655adf63c4b35feb106machenbach@chromium.org * returning at least 2 bytes of data. 1111b376fed08cb9d90a3f67f655adf63c4b35feb106machenbach@chromium.org * 1112b376fed08cb9d90a3f67f655adf63c4b35feb106machenbach@chromium.org * If the embedder wants to cancel the streaming, they should make the next 1113b376fed08cb9d90a3f67f655adf63c4b35feb106machenbach@chromium.org * GetMoreData call return 0. V8 will interpret it as end of data (and most 1114b376fed08cb9d90a3f67f655adf63c4b35feb106machenbach@chromium.org * probably, parsing will fail). The streaming task will return as soon as 1115b376fed08cb9d90a3f67f655adf63c4b35feb106machenbach@chromium.org * V8 has parsed the data it received so far. 1116b376fed08cb9d90a3f67f655adf63c4b35feb106machenbach@chromium.org */ 1117b376fed08cb9d90a3f67f655adf63c4b35feb106machenbach@chromium.org virtual size_t GetMoreData(const uint8_t** src) = 0; 1118b376fed08cb9d90a3f67f655adf63c4b35feb106machenbach@chromium.org }; 1119b376fed08cb9d90a3f67f655adf63c4b35feb106machenbach@chromium.org 1120b376fed08cb9d90a3f67f655adf63c4b35feb106machenbach@chromium.org 1121b376fed08cb9d90a3f67f655adf63c4b35feb106machenbach@chromium.org /** 1122b376fed08cb9d90a3f67f655adf63c4b35feb106machenbach@chromium.org * Source code which can be streamed into V8 in pieces. It will be parsed 1123b376fed08cb9d90a3f67f655adf63c4b35feb106machenbach@chromium.org * while streaming. It can be compiled after the streaming is complete. 1124b376fed08cb9d90a3f67f655adf63c4b35feb106machenbach@chromium.org * StreamedSource must be kept alive while the streaming task is ran (see 1125b376fed08cb9d90a3f67f655adf63c4b35feb106machenbach@chromium.org * ScriptStreamingTask below). 1126b376fed08cb9d90a3f67f655adf63c4b35feb106machenbach@chromium.org */ 1127b376fed08cb9d90a3f67f655adf63c4b35feb106machenbach@chromium.org class V8_EXPORT StreamedSource { 1128b376fed08cb9d90a3f67f655adf63c4b35feb106machenbach@chromium.org public: 1129b376fed08cb9d90a3f67f655adf63c4b35feb106machenbach@chromium.org enum Encoding { ONE_BYTE, TWO_BYTE, UTF8 }; 1130b376fed08cb9d90a3f67f655adf63c4b35feb106machenbach@chromium.org 1131b376fed08cb9d90a3f67f655adf63c4b35feb106machenbach@chromium.org StreamedSource(ExternalSourceStream* source_stream, Encoding encoding); 1132b376fed08cb9d90a3f67f655adf63c4b35feb106machenbach@chromium.org ~StreamedSource(); 1133b376fed08cb9d90a3f67f655adf63c4b35feb106machenbach@chromium.org 1134b376fed08cb9d90a3f67f655adf63c4b35feb106machenbach@chromium.org // Ownership of the CachedData or its buffers is *not* transferred to the 1135b376fed08cb9d90a3f67f655adf63c4b35feb106machenbach@chromium.org // caller. The CachedData object is alive as long as the StreamedSource 1136b376fed08cb9d90a3f67f655adf63c4b35feb106machenbach@chromium.org // object is alive. 1137b376fed08cb9d90a3f67f655adf63c4b35feb106machenbach@chromium.org const CachedData* GetCachedData() const; 1138b376fed08cb9d90a3f67f655adf63c4b35feb106machenbach@chromium.org 1139b376fed08cb9d90a3f67f655adf63c4b35feb106machenbach@chromium.org internal::StreamedSource* impl() const { return impl_; } 1140b376fed08cb9d90a3f67f655adf63c4b35feb106machenbach@chromium.org 1141b376fed08cb9d90a3f67f655adf63c4b35feb106machenbach@chromium.org private: 1142b376fed08cb9d90a3f67f655adf63c4b35feb106machenbach@chromium.org // Prevent copying. Not implemented. 1143b376fed08cb9d90a3f67f655adf63c4b35feb106machenbach@chromium.org StreamedSource(const StreamedSource&); 1144b376fed08cb9d90a3f67f655adf63c4b35feb106machenbach@chromium.org StreamedSource& operator=(const StreamedSource&); 1145b376fed08cb9d90a3f67f655adf63c4b35feb106machenbach@chromium.org 1146b376fed08cb9d90a3f67f655adf63c4b35feb106machenbach@chromium.org internal::StreamedSource* impl_; 1147b376fed08cb9d90a3f67f655adf63c4b35feb106machenbach@chromium.org }; 1148b376fed08cb9d90a3f67f655adf63c4b35feb106machenbach@chromium.org 1149b376fed08cb9d90a3f67f655adf63c4b35feb106machenbach@chromium.org /** 1150b376fed08cb9d90a3f67f655adf63c4b35feb106machenbach@chromium.org * A streaming task which the embedder must run on a background thread to 1151b376fed08cb9d90a3f67f655adf63c4b35feb106machenbach@chromium.org * stream scripts into V8. Returned by ScriptCompiler::StartStreamingScript. 1152b376fed08cb9d90a3f67f655adf63c4b35feb106machenbach@chromium.org */ 1153b376fed08cb9d90a3f67f655adf63c4b35feb106machenbach@chromium.org class ScriptStreamingTask { 1154b376fed08cb9d90a3f67f655adf63c4b35feb106machenbach@chromium.org public: 1155b376fed08cb9d90a3f67f655adf63c4b35feb106machenbach@chromium.org virtual ~ScriptStreamingTask() {} 1156b376fed08cb9d90a3f67f655adf63c4b35feb106machenbach@chromium.org virtual void Run() = 0; 1157b376fed08cb9d90a3f67f655adf63c4b35feb106machenbach@chromium.org }; 1158b376fed08cb9d90a3f67f655adf63c4b35feb106machenbach@chromium.org 11596b6df382019a622ba20133e47bbe2e6f323b013bdslomov@chromium.org enum CompileOptions { 11604c3ce7c3fd2802da8f91c6516a9c9aea3cd93f1emachenbach@chromium.org kNoCompileOptions = 0, 11614c3ce7c3fd2802da8f91c6516a9c9aea3cd93f1emachenbach@chromium.org kProduceParserCache, 11624c3ce7c3fd2802da8f91c6516a9c9aea3cd93f1emachenbach@chromium.org kConsumeParserCache, 11634c3ce7c3fd2802da8f91c6516a9c9aea3cd93f1emachenbach@chromium.org kProduceCodeCache, 11644c3ce7c3fd2802da8f91c6516a9c9aea3cd93f1emachenbach@chromium.org kConsumeCodeCache, 11654c3ce7c3fd2802da8f91c6516a9c9aea3cd93f1emachenbach@chromium.org 11664c3ce7c3fd2802da8f91c6516a9c9aea3cd93f1emachenbach@chromium.org // Support the previous API for a transition period. 11674c3ce7c3fd2802da8f91c6516a9c9aea3cd93f1emachenbach@chromium.org kProduceDataToCache 11686b6df382019a622ba20133e47bbe2e6f323b013bdslomov@chromium.org }; 11696b6df382019a622ba20133e47bbe2e6f323b013bdslomov@chromium.org 11706b6df382019a622ba20133e47bbe2e6f323b013bdslomov@chromium.org /** 11716b6df382019a622ba20133e47bbe2e6f323b013bdslomov@chromium.org * Compiles the specified script (context-independent). 117270d29e1ad7a6f1c163f625252ca32ecc522cb155machenbach@chromium.org * Cached data as part of the source object can be optionally produced to be 117370d29e1ad7a6f1c163f625252ca32ecc522cb155machenbach@chromium.org * consumed later to speed up compilation of identical source scripts. 117470d29e1ad7a6f1c163f625252ca32ecc522cb155machenbach@chromium.org * 117570d29e1ad7a6f1c163f625252ca32ecc522cb155machenbach@chromium.org * Note that when producing cached data, the source must point to NULL for 117670d29e1ad7a6f1c163f625252ca32ecc522cb155machenbach@chromium.org * cached data. When consuming cached data, the cached data must have been 117770d29e1ad7a6f1c163f625252ca32ecc522cb155machenbach@chromium.org * produced by the same version of V8. 11786b6df382019a622ba20133e47bbe2e6f323b013bdslomov@chromium.org * 11796b6df382019a622ba20133e47bbe2e6f323b013bdslomov@chromium.org * \param source Script source code. 11806b6df382019a622ba20133e47bbe2e6f323b013bdslomov@chromium.org * \return Compiled script object (context independent; for running it must be 11816b6df382019a622ba20133e47bbe2e6f323b013bdslomov@chromium.org * bound to a context). 11826b6df382019a622ba20133e47bbe2e6f323b013bdslomov@chromium.org */ 11836b6df382019a622ba20133e47bbe2e6f323b013bdslomov@chromium.org static Local<UnboundScript> CompileUnbound( 118469f64b1a8bfa6f5418b7c1f71d4e0833f76e93edmachenbach@chromium.org Isolate* isolate, Source* source, 11856b6df382019a622ba20133e47bbe2e6f323b013bdslomov@chromium.org CompileOptions options = kNoCompileOptions); 11866b6df382019a622ba20133e47bbe2e6f323b013bdslomov@chromium.org 11876b6df382019a622ba20133e47bbe2e6f323b013bdslomov@chromium.org /** 11886b6df382019a622ba20133e47bbe2e6f323b013bdslomov@chromium.org * Compiles the specified script (bound to current context). 11896b6df382019a622ba20133e47bbe2e6f323b013bdslomov@chromium.org * 11906b6df382019a622ba20133e47bbe2e6f323b013bdslomov@chromium.org * \param source Script source code. 11916b6df382019a622ba20133e47bbe2e6f323b013bdslomov@chromium.org * \param pre_data Pre-parsing data, as obtained by ScriptData::PreCompile() 11926b6df382019a622ba20133e47bbe2e6f323b013bdslomov@chromium.org * using pre_data speeds compilation if it's done multiple times. 11936b6df382019a622ba20133e47bbe2e6f323b013bdslomov@chromium.org * Owned by caller, no references are kept when this function returns. 11946b6df382019a622ba20133e47bbe2e6f323b013bdslomov@chromium.org * \return Compiled script object, bound to the context that was active 11956b6df382019a622ba20133e47bbe2e6f323b013bdslomov@chromium.org * when this function was called. When run it will always use this 11966b6df382019a622ba20133e47bbe2e6f323b013bdslomov@chromium.org * context. 11976b6df382019a622ba20133e47bbe2e6f323b013bdslomov@chromium.org */ 11986b6df382019a622ba20133e47bbe2e6f323b013bdslomov@chromium.org static Local<Script> Compile( 119969f64b1a8bfa6f5418b7c1f71d4e0833f76e93edmachenbach@chromium.org Isolate* isolate, Source* source, 12006b6df382019a622ba20133e47bbe2e6f323b013bdslomov@chromium.org CompileOptions options = kNoCompileOptions); 1201b376fed08cb9d90a3f67f655adf63c4b35feb106machenbach@chromium.org 1202b376fed08cb9d90a3f67f655adf63c4b35feb106machenbach@chromium.org /** 1203b376fed08cb9d90a3f67f655adf63c4b35feb106machenbach@chromium.org * Returns a task which streams script data into V8, or NULL if the script 1204b376fed08cb9d90a3f67f655adf63c4b35feb106machenbach@chromium.org * cannot be streamed. The user is responsible for running the task on a 1205b376fed08cb9d90a3f67f655adf63c4b35feb106machenbach@chromium.org * background thread and deleting it. When ran, the task starts parsing the 1206b376fed08cb9d90a3f67f655adf63c4b35feb106machenbach@chromium.org * script, and it will request data from the StreamedSource as needed. When 1207b376fed08cb9d90a3f67f655adf63c4b35feb106machenbach@chromium.org * ScriptStreamingTask::Run exits, all data has been streamed and the script 1208b376fed08cb9d90a3f67f655adf63c4b35feb106machenbach@chromium.org * can be compiled (see Compile below). 1209b376fed08cb9d90a3f67f655adf63c4b35feb106machenbach@chromium.org * 1210b376fed08cb9d90a3f67f655adf63c4b35feb106machenbach@chromium.org * This API allows to start the streaming with as little data as possible, and 1211b376fed08cb9d90a3f67f655adf63c4b35feb106machenbach@chromium.org * the remaining data (for example, the ScriptOrigin) is passed to Compile. 1212b376fed08cb9d90a3f67f655adf63c4b35feb106machenbach@chromium.org */ 1213b376fed08cb9d90a3f67f655adf63c4b35feb106machenbach@chromium.org static ScriptStreamingTask* StartStreamingScript( 1214b376fed08cb9d90a3f67f655adf63c4b35feb106machenbach@chromium.org Isolate* isolate, StreamedSource* source, 1215b376fed08cb9d90a3f67f655adf63c4b35feb106machenbach@chromium.org CompileOptions options = kNoCompileOptions); 1216b376fed08cb9d90a3f67f655adf63c4b35feb106machenbach@chromium.org 1217b376fed08cb9d90a3f67f655adf63c4b35feb106machenbach@chromium.org /** 1218b376fed08cb9d90a3f67f655adf63c4b35feb106machenbach@chromium.org * Compiles a streamed script (bound to current context). 1219b376fed08cb9d90a3f67f655adf63c4b35feb106machenbach@chromium.org * 1220b376fed08cb9d90a3f67f655adf63c4b35feb106machenbach@chromium.org * This can only be called after the streaming has finished 1221b376fed08cb9d90a3f67f655adf63c4b35feb106machenbach@chromium.org * (ScriptStreamingTask has been run). V8 doesn't construct the source string 1222b376fed08cb9d90a3f67f655adf63c4b35feb106machenbach@chromium.org * during streaming, so the embedder needs to pass the full source here. 1223b376fed08cb9d90a3f67f655adf63c4b35feb106machenbach@chromium.org */ 1224b376fed08cb9d90a3f67f655adf63c4b35feb106machenbach@chromium.org static Local<Script> Compile(Isolate* isolate, StreamedSource* source, 1225b376fed08cb9d90a3f67f655adf63c4b35feb106machenbach@chromium.org Handle<String> full_source_string, 1226b376fed08cb9d90a3f67f655adf63c4b35feb106machenbach@chromium.org const ScriptOrigin& origin); 122743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen}; 122843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 122943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 123043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen/** 123143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * An error message. 123243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen */ 1233594006017e46d82ed7146611dc12c20e3c509c7ddanno@chromium.orgclass V8_EXPORT Message { 123443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen public: 12353291210ab99f306b74430ebbc4b7d939629e699fager@chromium.org Local<String> Get() const; 12363291210ab99f306b74430ebbc4b7d939629e699fager@chromium.org Local<String> GetSourceLine() const; 123743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 123865dad4b091d2925543c6326db635d0f7cf9e1edcager@chromium.org /** 12394b0feeef5d01dbc2948080b4f69daa37e1083461machenbach@chromium.org * Returns the origin for the script from where the function causing the 12404b0feeef5d01dbc2948080b4f69daa37e1083461machenbach@chromium.org * error originates. 12414b0feeef5d01dbc2948080b4f69daa37e1083461machenbach@chromium.org */ 12424b0feeef5d01dbc2948080b4f69daa37e1083461machenbach@chromium.org ScriptOrigin GetScriptOrigin() const; 12434b0feeef5d01dbc2948080b4f69daa37e1083461machenbach@chromium.org 12444b0feeef5d01dbc2948080b4f69daa37e1083461machenbach@chromium.org /** 124565dad4b091d2925543c6326db635d0f7cf9e1edcager@chromium.org * Returns the resource name for the script from where the function causing 124665dad4b091d2925543c6326db635d0f7cf9e1edcager@chromium.org * the error originates. 124765dad4b091d2925543c6326db635d0f7cf9e1edcager@chromium.org */ 12483291210ab99f306b74430ebbc4b7d939629e699fager@chromium.org Handle<Value> GetScriptResourceName() const; 124943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 12509258b6bc66e09368ada54001f619d53b4fc976d5ager@chromium.org /** 12516a2b0aa331a1ae1829a9b9637ad18cfc7ec9d840ager@chromium.org * Exception stack trace. By default stack traces are not captured for 12526a2b0aa331a1ae1829a9b9637ad18cfc7ec9d840ager@chromium.org * uncaught exceptions. SetCaptureStackTraceForUncaughtExceptions allows 12536a2b0aa331a1ae1829a9b9637ad18cfc7ec9d840ager@chromium.org * to change this option. 12546a2b0aa331a1ae1829a9b9637ad18cfc7ec9d840ager@chromium.org */ 12556a2b0aa331a1ae1829a9b9637ad18cfc7ec9d840ager@chromium.org Handle<StackTrace> GetStackTrace() const; 12566a2b0aa331a1ae1829a9b9637ad18cfc7ec9d840ager@chromium.org 12576a2b0aa331a1ae1829a9b9637ad18cfc7ec9d840ager@chromium.org /** 12589258b6bc66e09368ada54001f619d53b4fc976d5ager@chromium.org * Returns the number, 1-based, of the line where the error occurred. 12599258b6bc66e09368ada54001f619d53b4fc976d5ager@chromium.org */ 12603291210ab99f306b74430ebbc4b7d939629e699fager@chromium.org int GetLineNumber() const; 126143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 12629258b6bc66e09368ada54001f619d53b4fc976d5ager@chromium.org /** 12639258b6bc66e09368ada54001f619d53b4fc976d5ager@chromium.org * Returns the index within the script of the first character where 12649258b6bc66e09368ada54001f619d53b4fc976d5ager@chromium.org * the error occurred. 12659258b6bc66e09368ada54001f619d53b4fc976d5ager@chromium.org */ 12663291210ab99f306b74430ebbc4b7d939629e699fager@chromium.org int GetStartPosition() const; 12679258b6bc66e09368ada54001f619d53b4fc976d5ager@chromium.org 12689258b6bc66e09368ada54001f619d53b4fc976d5ager@chromium.org /** 12699258b6bc66e09368ada54001f619d53b4fc976d5ager@chromium.org * Returns the index within the script of the last character where 12709258b6bc66e09368ada54001f619d53b4fc976d5ager@chromium.org * the error occurred. 12719258b6bc66e09368ada54001f619d53b4fc976d5ager@chromium.org */ 12723291210ab99f306b74430ebbc4b7d939629e699fager@chromium.org int GetEndPosition() const; 12739258b6bc66e09368ada54001f619d53b4fc976d5ager@chromium.org 12749258b6bc66e09368ada54001f619d53b4fc976d5ager@chromium.org /** 12759258b6bc66e09368ada54001f619d53b4fc976d5ager@chromium.org * Returns the index within the line of the first character where 12769258b6bc66e09368ada54001f619d53b4fc976d5ager@chromium.org * the error occurred. 12779258b6bc66e09368ada54001f619d53b4fc976d5ager@chromium.org */ 12783291210ab99f306b74430ebbc4b7d939629e699fager@chromium.org int GetStartColumn() const; 12799258b6bc66e09368ada54001f619d53b4fc976d5ager@chromium.org 12809258b6bc66e09368ada54001f619d53b4fc976d5ager@chromium.org /** 12819258b6bc66e09368ada54001f619d53b4fc976d5ager@chromium.org * Returns the index within the line of the last character where 12829258b6bc66e09368ada54001f619d53b4fc976d5ager@chromium.org * the error occurred. 12839258b6bc66e09368ada54001f619d53b4fc976d5ager@chromium.org */ 12843291210ab99f306b74430ebbc4b7d939629e699fager@chromium.org int GetEndColumn() const; 12859258b6bc66e09368ada54001f619d53b4fc976d5ager@chromium.org 1286d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.org /** 1287d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.org * Passes on the value set by the embedder when it fed the script from which 1288d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.org * this Message was generated to V8. 1289d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.org */ 1290d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.org bool IsSharedCrossOrigin() const; 1291d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.org 129243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen // TODO(1245381): Print to a string instead of on a FILE. 129337be408adf363bbe682921a4a690752fa0ec33femachenbach@chromium.org static void PrintCurrentStackTrace(Isolate* isolate, FILE* out); 1294720dc0bc17114e33b9b2177fcb6726bda9cabd62sgjesse@chromium.org 1295720dc0bc17114e33b9b2177fcb6726bda9cabd62sgjesse@chromium.org static const int kNoLineNumberInfo = 0; 1296720dc0bc17114e33b9b2177fcb6726bda9cabd62sgjesse@chromium.org static const int kNoColumnInfo = 0; 12978fa5bd929d2f128e3d554398bd085b3c2f98e23bjkummerow@chromium.org static const int kNoScriptIdInfo = 0; 1298720dc0bc17114e33b9b2177fcb6726bda9cabd62sgjesse@chromium.org}; 1299720dc0bc17114e33b9b2177fcb6726bda9cabd62sgjesse@chromium.org 1300720dc0bc17114e33b9b2177fcb6726bda9cabd62sgjesse@chromium.org 1301720dc0bc17114e33b9b2177fcb6726bda9cabd62sgjesse@chromium.org/** 1302720dc0bc17114e33b9b2177fcb6726bda9cabd62sgjesse@chromium.org * Representation of a JavaScript stack trace. The information collected is a 1303720dc0bc17114e33b9b2177fcb6726bda9cabd62sgjesse@chromium.org * snapshot of the execution stack and the information remains valid after 1304720dc0bc17114e33b9b2177fcb6726bda9cabd62sgjesse@chromium.org * execution continues. 1305720dc0bc17114e33b9b2177fcb6726bda9cabd62sgjesse@chromium.org */ 1306594006017e46d82ed7146611dc12c20e3c509c7ddanno@chromium.orgclass V8_EXPORT StackTrace { 1307720dc0bc17114e33b9b2177fcb6726bda9cabd62sgjesse@chromium.org public: 1308720dc0bc17114e33b9b2177fcb6726bda9cabd62sgjesse@chromium.org /** 1309720dc0bc17114e33b9b2177fcb6726bda9cabd62sgjesse@chromium.org * Flags that determine what information is placed captured for each 1310720dc0bc17114e33b9b2177fcb6726bda9cabd62sgjesse@chromium.org * StackFrame when grabbing the current stack trace. 1311720dc0bc17114e33b9b2177fcb6726bda9cabd62sgjesse@chromium.org */ 1312720dc0bc17114e33b9b2177fcb6726bda9cabd62sgjesse@chromium.org enum StackTraceOptions { 1313720dc0bc17114e33b9b2177fcb6726bda9cabd62sgjesse@chromium.org kLineNumber = 1, 1314720dc0bc17114e33b9b2177fcb6726bda9cabd62sgjesse@chromium.org kColumnOffset = 1 << 1 | kLineNumber, 1315720dc0bc17114e33b9b2177fcb6726bda9cabd62sgjesse@chromium.org kScriptName = 1 << 2, 1316720dc0bc17114e33b9b2177fcb6726bda9cabd62sgjesse@chromium.org kFunctionName = 1 << 3, 1317720dc0bc17114e33b9b2177fcb6726bda9cabd62sgjesse@chromium.org kIsEval = 1 << 4, 1318720dc0bc17114e33b9b2177fcb6726bda9cabd62sgjesse@chromium.org kIsConstructor = 1 << 5, 1319b61a0d13e9690ef4c2de424bbe82a38884d981a6ager@chromium.org kScriptNameOrSourceURL = 1 << 6, 13208fa5bd929d2f128e3d554398bd085b3c2f98e23bjkummerow@chromium.org kScriptId = 1 << 7, 132154ae5fb0902b9e1b89c178fa5a7ba4e1a74daa41machenbach@chromium.org kExposeFramesAcrossSecurityOrigins = 1 << 8, 1322720dc0bc17114e33b9b2177fcb6726bda9cabd62sgjesse@chromium.org kOverview = kLineNumber | kColumnOffset | kScriptName | kFunctionName, 1323b61a0d13e9690ef4c2de424bbe82a38884d981a6ager@chromium.org kDetailed = kOverview | kIsEval | kIsConstructor | kScriptNameOrSourceURL 1324720dc0bc17114e33b9b2177fcb6726bda9cabd62sgjesse@chromium.org }; 1325720dc0bc17114e33b9b2177fcb6726bda9cabd62sgjesse@chromium.org 1326720dc0bc17114e33b9b2177fcb6726bda9cabd62sgjesse@chromium.org /** 1327720dc0bc17114e33b9b2177fcb6726bda9cabd62sgjesse@chromium.org * Returns a StackFrame at a particular index. 1328720dc0bc17114e33b9b2177fcb6726bda9cabd62sgjesse@chromium.org */ 1329720dc0bc17114e33b9b2177fcb6726bda9cabd62sgjesse@chromium.org Local<StackFrame> GetFrame(uint32_t index) const; 1330720dc0bc17114e33b9b2177fcb6726bda9cabd62sgjesse@chromium.org 1331720dc0bc17114e33b9b2177fcb6726bda9cabd62sgjesse@chromium.org /** 1332720dc0bc17114e33b9b2177fcb6726bda9cabd62sgjesse@chromium.org * Returns the number of StackFrames. 1333720dc0bc17114e33b9b2177fcb6726bda9cabd62sgjesse@chromium.org */ 1334720dc0bc17114e33b9b2177fcb6726bda9cabd62sgjesse@chromium.org int GetFrameCount() const; 1335720dc0bc17114e33b9b2177fcb6726bda9cabd62sgjesse@chromium.org 1336720dc0bc17114e33b9b2177fcb6726bda9cabd62sgjesse@chromium.org /** 1337720dc0bc17114e33b9b2177fcb6726bda9cabd62sgjesse@chromium.org * Returns StackTrace as a v8::Array that contains StackFrame objects. 1338720dc0bc17114e33b9b2177fcb6726bda9cabd62sgjesse@chromium.org */ 1339720dc0bc17114e33b9b2177fcb6726bda9cabd62sgjesse@chromium.org Local<Array> AsArray(); 1340720dc0bc17114e33b9b2177fcb6726bda9cabd62sgjesse@chromium.org 1341720dc0bc17114e33b9b2177fcb6726bda9cabd62sgjesse@chromium.org /** 13427304bcac06a6a63b9f3dcebac2eeceada87ca146vegorov@chromium.org * Grab a snapshot of the current JavaScript execution stack. 1343720dc0bc17114e33b9b2177fcb6726bda9cabd62sgjesse@chromium.org * 1344720dc0bc17114e33b9b2177fcb6726bda9cabd62sgjesse@chromium.org * \param frame_limit The maximum number of stack frames we want to capture. 1345720dc0bc17114e33b9b2177fcb6726bda9cabd62sgjesse@chromium.org * \param options Enumerates the set of things we will capture for each 1346720dc0bc17114e33b9b2177fcb6726bda9cabd62sgjesse@chromium.org * StackFrame. 1347720dc0bc17114e33b9b2177fcb6726bda9cabd62sgjesse@chromium.org */ 1348720dc0bc17114e33b9b2177fcb6726bda9cabd62sgjesse@chromium.org static Local<StackTrace> CurrentStackTrace( 134937be408adf363bbe682921a4a690752fa0ec33femachenbach@chromium.org Isolate* isolate, 135037be408adf363bbe682921a4a690752fa0ec33femachenbach@chromium.org int frame_limit, 135137be408adf363bbe682921a4a690752fa0ec33femachenbach@chromium.org StackTraceOptions options = kOverview); 1352720dc0bc17114e33b9b2177fcb6726bda9cabd62sgjesse@chromium.org}; 1353720dc0bc17114e33b9b2177fcb6726bda9cabd62sgjesse@chromium.org 1354720dc0bc17114e33b9b2177fcb6726bda9cabd62sgjesse@chromium.org 1355720dc0bc17114e33b9b2177fcb6726bda9cabd62sgjesse@chromium.org/** 1356720dc0bc17114e33b9b2177fcb6726bda9cabd62sgjesse@chromium.org * A single JavaScript stack frame. 1357720dc0bc17114e33b9b2177fcb6726bda9cabd62sgjesse@chromium.org */ 1358594006017e46d82ed7146611dc12c20e3c509c7ddanno@chromium.orgclass V8_EXPORT StackFrame { 1359720dc0bc17114e33b9b2177fcb6726bda9cabd62sgjesse@chromium.org public: 1360720dc0bc17114e33b9b2177fcb6726bda9cabd62sgjesse@chromium.org /** 1361720dc0bc17114e33b9b2177fcb6726bda9cabd62sgjesse@chromium.org * Returns the number, 1-based, of the line for the associate function call. 1362720dc0bc17114e33b9b2177fcb6726bda9cabd62sgjesse@chromium.org * This method will return Message::kNoLineNumberInfo if it is unable to 1363720dc0bc17114e33b9b2177fcb6726bda9cabd62sgjesse@chromium.org * retrieve the line number, or if kLineNumber was not passed as an option 1364720dc0bc17114e33b9b2177fcb6726bda9cabd62sgjesse@chromium.org * when capturing the StackTrace. 1365720dc0bc17114e33b9b2177fcb6726bda9cabd62sgjesse@chromium.org */ 1366720dc0bc17114e33b9b2177fcb6726bda9cabd62sgjesse@chromium.org int GetLineNumber() const; 1367720dc0bc17114e33b9b2177fcb6726bda9cabd62sgjesse@chromium.org 1368720dc0bc17114e33b9b2177fcb6726bda9cabd62sgjesse@chromium.org /** 1369720dc0bc17114e33b9b2177fcb6726bda9cabd62sgjesse@chromium.org * Returns the 1-based column offset on the line for the associated function 1370720dc0bc17114e33b9b2177fcb6726bda9cabd62sgjesse@chromium.org * call. 1371720dc0bc17114e33b9b2177fcb6726bda9cabd62sgjesse@chromium.org * This method will return Message::kNoColumnInfo if it is unable to retrieve 1372720dc0bc17114e33b9b2177fcb6726bda9cabd62sgjesse@chromium.org * the column number, or if kColumnOffset was not passed as an option when 1373720dc0bc17114e33b9b2177fcb6726bda9cabd62sgjesse@chromium.org * capturing the StackTrace. 1374720dc0bc17114e33b9b2177fcb6726bda9cabd62sgjesse@chromium.org */ 1375720dc0bc17114e33b9b2177fcb6726bda9cabd62sgjesse@chromium.org int GetColumn() const; 1376720dc0bc17114e33b9b2177fcb6726bda9cabd62sgjesse@chromium.org 1377720dc0bc17114e33b9b2177fcb6726bda9cabd62sgjesse@chromium.org /** 13788fa5bd929d2f128e3d554398bd085b3c2f98e23bjkummerow@chromium.org * Returns the id of the script for the function for this StackFrame. 13798fa5bd929d2f128e3d554398bd085b3c2f98e23bjkummerow@chromium.org * This method will return Message::kNoScriptIdInfo if it is unable to 13808fa5bd929d2f128e3d554398bd085b3c2f98e23bjkummerow@chromium.org * retrieve the script id, or if kScriptId was not passed as an option when 13818fa5bd929d2f128e3d554398bd085b3c2f98e23bjkummerow@chromium.org * capturing the StackTrace. 13828fa5bd929d2f128e3d554398bd085b3c2f98e23bjkummerow@chromium.org */ 13838fa5bd929d2f128e3d554398bd085b3c2f98e23bjkummerow@chromium.org int GetScriptId() const; 13848fa5bd929d2f128e3d554398bd085b3c2f98e23bjkummerow@chromium.org 13858fa5bd929d2f128e3d554398bd085b3c2f98e23bjkummerow@chromium.org /** 1386720dc0bc17114e33b9b2177fcb6726bda9cabd62sgjesse@chromium.org * Returns the name of the resource that contains the script for the 1387720dc0bc17114e33b9b2177fcb6726bda9cabd62sgjesse@chromium.org * function for this StackFrame. 1388720dc0bc17114e33b9b2177fcb6726bda9cabd62sgjesse@chromium.org */ 1389720dc0bc17114e33b9b2177fcb6726bda9cabd62sgjesse@chromium.org Local<String> GetScriptName() const; 1390720dc0bc17114e33b9b2177fcb6726bda9cabd62sgjesse@chromium.org 1391720dc0bc17114e33b9b2177fcb6726bda9cabd62sgjesse@chromium.org /** 1392b61a0d13e9690ef4c2de424bbe82a38884d981a6ager@chromium.org * Returns the name of the resource that contains the script for the 1393b61a0d13e9690ef4c2de424bbe82a38884d981a6ager@chromium.org * function for this StackFrame or sourceURL value if the script name 1394b99c75496e05b4cd58815ada1e39e6029130d11crossberg@chromium.org * is undefined and its source ends with //# sourceURL=... string or 1395b99c75496e05b4cd58815ada1e39e6029130d11crossberg@chromium.org * deprecated //@ sourceURL=... string. 1396b61a0d13e9690ef4c2de424bbe82a38884d981a6ager@chromium.org */ 1397b61a0d13e9690ef4c2de424bbe82a38884d981a6ager@chromium.org Local<String> GetScriptNameOrSourceURL() const; 1398b61a0d13e9690ef4c2de424bbe82a38884d981a6ager@chromium.org 1399b61a0d13e9690ef4c2de424bbe82a38884d981a6ager@chromium.org /** 1400720dc0bc17114e33b9b2177fcb6726bda9cabd62sgjesse@chromium.org * Returns the name of the function associated with this stack frame. 1401720dc0bc17114e33b9b2177fcb6726bda9cabd62sgjesse@chromium.org */ 1402720dc0bc17114e33b9b2177fcb6726bda9cabd62sgjesse@chromium.org Local<String> GetFunctionName() const; 1403720dc0bc17114e33b9b2177fcb6726bda9cabd62sgjesse@chromium.org 1404720dc0bc17114e33b9b2177fcb6726bda9cabd62sgjesse@chromium.org /** 1405720dc0bc17114e33b9b2177fcb6726bda9cabd62sgjesse@chromium.org * Returns whether or not the associated function is compiled via a call to 1406720dc0bc17114e33b9b2177fcb6726bda9cabd62sgjesse@chromium.org * eval(). 1407720dc0bc17114e33b9b2177fcb6726bda9cabd62sgjesse@chromium.org */ 1408720dc0bc17114e33b9b2177fcb6726bda9cabd62sgjesse@chromium.org bool IsEval() const; 1409720dc0bc17114e33b9b2177fcb6726bda9cabd62sgjesse@chromium.org 1410720dc0bc17114e33b9b2177fcb6726bda9cabd62sgjesse@chromium.org /** 14117304bcac06a6a63b9f3dcebac2eeceada87ca146vegorov@chromium.org * Returns whether or not the associated function is called as a 1412720dc0bc17114e33b9b2177fcb6726bda9cabd62sgjesse@chromium.org * constructor via "new". 1413720dc0bc17114e33b9b2177fcb6726bda9cabd62sgjesse@chromium.org */ 1414720dc0bc17114e33b9b2177fcb6726bda9cabd62sgjesse@chromium.org bool IsConstructor() const; 141543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen}; 141643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 141743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 1418594006017e46d82ed7146611dc12c20e3c509c7ddanno@chromium.org/** 1419594006017e46d82ed7146611dc12c20e3c509c7ddanno@chromium.org * A JSON Parser. 1420594006017e46d82ed7146611dc12c20e3c509c7ddanno@chromium.org */ 1421594006017e46d82ed7146611dc12c20e3c509c7ddanno@chromium.orgclass V8_EXPORT JSON { 1422594006017e46d82ed7146611dc12c20e3c509c7ddanno@chromium.org public: 1423594006017e46d82ed7146611dc12c20e3c509c7ddanno@chromium.org /** 1424594006017e46d82ed7146611dc12c20e3c509c7ddanno@chromium.org * Tries to parse the string |json_string| and returns it as value if 1425594006017e46d82ed7146611dc12c20e3c509c7ddanno@chromium.org * successful. 1426594006017e46d82ed7146611dc12c20e3c509c7ddanno@chromium.org * 1427594006017e46d82ed7146611dc12c20e3c509c7ddanno@chromium.org * \param json_string The string to parse. 1428594006017e46d82ed7146611dc12c20e3c509c7ddanno@chromium.org * \return The corresponding value if successfully parsed. 1429594006017e46d82ed7146611dc12c20e3c509c7ddanno@chromium.org */ 1430594006017e46d82ed7146611dc12c20e3c509c7ddanno@chromium.org static Local<Value> Parse(Local<String> json_string); 1431594006017e46d82ed7146611dc12c20e3c509c7ddanno@chromium.org}; 1432594006017e46d82ed7146611dc12c20e3c509c7ddanno@chromium.org 1433594006017e46d82ed7146611dc12c20e3c509c7ddanno@chromium.org 1434fb144a0716afe7ab8bf245f2391a9e53b3db3c89fschneider@chromium.org// --- Value --- 143543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 143643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 143743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen/** 1438727e995b7bba3c57fb1e5c156d386ca11894f781v * The superclass of all JavaScript values and objects. 143943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen */ 1440594006017e46d82ed7146611dc12c20e3c509c7ddanno@chromium.orgclass V8_EXPORT Value : public Data { 144143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen public: 144243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen /** 144343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * Returns true if this value is the undefined value. See ECMA-262 144443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * 4.3.10. 144543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen */ 14464a35c5a501e5b966f895ddea8e19c3ca232cb23fdslomov@chromium.org V8_INLINE bool IsUndefined() const; 144743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 144843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen /** 144943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * Returns true if this value is the null value. See ECMA-262 145043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * 4.3.11. 145143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen */ 14524a35c5a501e5b966f895ddea8e19c3ca232cb23fdslomov@chromium.org V8_INLINE bool IsNull() const; 145343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 145443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen /** 145543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * Returns true if this value is true. 145643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen */ 145746a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org bool IsTrue() const; 145843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 145943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen /** 146043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * Returns true if this value is false. 146143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen */ 146246a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org bool IsFalse() const; 146343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 146443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen /** 1465e2a8937454723a720c81acc3f9e4162b18999b43machenbach@chromium.org * Returns true if this value is a symbol or a string. 1466e2a8937454723a720c81acc3f9e4162b18999b43machenbach@chromium.org * This is an experimental feature. 1467e2a8937454723a720c81acc3f9e4162b18999b43machenbach@chromium.org */ 1468e2a8937454723a720c81acc3f9e4162b18999b43machenbach@chromium.org bool IsName() const; 1469e2a8937454723a720c81acc3f9e4162b18999b43machenbach@chromium.org 1470e2a8937454723a720c81acc3f9e4162b18999b43machenbach@chromium.org /** 147143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * Returns true if this value is an instance of the String type. 147243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * See ECMA-262 8.4. 147343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen */ 14744a35c5a501e5b966f895ddea8e19c3ca232cb23fdslomov@chromium.org V8_INLINE bool IsString() const; 147543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 147643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen /** 1477e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org * Returns true if this value is a symbol. 1478e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org * This is an experimental feature. 1479e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org */ 1480e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org bool IsSymbol() const; 1481e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org 1482e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org /** 148343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * Returns true if this value is a function. 148443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen */ 148546a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org bool IsFunction() const; 148643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 148743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen /** 148843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * Returns true if this value is an array. 148943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen */ 149046a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org bool IsArray() const; 149143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 1492727e995b7bba3c57fb1e5c156d386ca11894f781v /** 149343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * Returns true if this value is an object. 149443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen */ 149546a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org bool IsObject() const; 149643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 1497727e995b7bba3c57fb1e5c156d386ca11894f781v /** 149843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * Returns true if this value is boolean. 149943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen */ 150046a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org bool IsBoolean() const; 15019258b6bc66e09368ada54001f619d53b4fc976d5ager@chromium.org 1502727e995b7bba3c57fb1e5c156d386ca11894f781v /** 150343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * Returns true if this value is a number. 150443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen */ 150546a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org bool IsNumber() const; 150643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 1507727e995b7bba3c57fb1e5c156d386ca11894f781v /** 150843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * Returns true if this value is external. 150943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen */ 151046a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org bool IsExternal() const; 151143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 1512727e995b7bba3c57fb1e5c156d386ca11894f781v /** 151343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * Returns true if this value is a 32-bit signed integer. 151443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen */ 151546a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org bool IsInt32() const; 151643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 15175a8ca6c70c6fc9716f18f6223c98d1fef5752cf6kasperl@chromium.org /** 1518c34f5802a37a9fa2ce8f3929d1d5159ddcf04ff3lrn@chromium.org * Returns true if this value is a 32-bit unsigned integer. 1519ce5e87bd905d592a8bd612b3dedf7a994177c13aager@chromium.org */ 152046a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org bool IsUint32() const; 1521ce5e87bd905d592a8bd612b3dedf7a994177c13aager@chromium.org 1522ce5e87bd905d592a8bd612b3dedf7a994177c13aager@chromium.org /** 15235a8ca6c70c6fc9716f18f6223c98d1fef5752cf6kasperl@chromium.org * Returns true if this value is a Date. 15245a8ca6c70c6fc9716f18f6223c98d1fef5752cf6kasperl@chromium.org */ 152546a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org bool IsDate() const; 15265a8ca6c70c6fc9716f18f6223c98d1fef5752cf6kasperl@chromium.org 152726c16f8ef35ec25d36420512a4ceaa74ea2e2b05vegorov@chromium.org /** 15285e57059e20217fd540b60c237d326414afe2171emachenbach@chromium.org * Returns true if this value is an Arguments object. 15295e57059e20217fd540b60c237d326414afe2171emachenbach@chromium.org */ 15305e57059e20217fd540b60c237d326414afe2171emachenbach@chromium.org bool IsArgumentsObject() const; 15315e57059e20217fd540b60c237d326414afe2171emachenbach@chromium.org 15325e57059e20217fd540b60c237d326414afe2171emachenbach@chromium.org /** 153384bcc559ac20fb04f806e97d28a314b20b58fd60svenpanne@chromium.org * Returns true if this value is a Boolean object. 153484bcc559ac20fb04f806e97d28a314b20b58fd60svenpanne@chromium.org */ 153546a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org bool IsBooleanObject() const; 153684bcc559ac20fb04f806e97d28a314b20b58fd60svenpanne@chromium.org 153784bcc559ac20fb04f806e97d28a314b20b58fd60svenpanne@chromium.org /** 153884bcc559ac20fb04f806e97d28a314b20b58fd60svenpanne@chromium.org * Returns true if this value is a Number object. 153984bcc559ac20fb04f806e97d28a314b20b58fd60svenpanne@chromium.org */ 154046a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org bool IsNumberObject() const; 154184bcc559ac20fb04f806e97d28a314b20b58fd60svenpanne@chromium.org 154284bcc559ac20fb04f806e97d28a314b20b58fd60svenpanne@chromium.org /** 154384bcc559ac20fb04f806e97d28a314b20b58fd60svenpanne@chromium.org * Returns true if this value is a String object. 154484bcc559ac20fb04f806e97d28a314b20b58fd60svenpanne@chromium.org */ 154546a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org bool IsStringObject() const; 154684bcc559ac20fb04f806e97d28a314b20b58fd60svenpanne@chromium.org 154784bcc559ac20fb04f806e97d28a314b20b58fd60svenpanne@chromium.org /** 1548e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org * Returns true if this value is a Symbol object. 1549e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org * This is an experimental feature. 1550e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org */ 1551e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org bool IsSymbolObject() const; 1552e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org 1553e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org /** 155484bcc559ac20fb04f806e97d28a314b20b58fd60svenpanne@chromium.org * Returns true if this value is a NativeError. 155584bcc559ac20fb04f806e97d28a314b20b58fd60svenpanne@chromium.org */ 155646a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org bool IsNativeError() const; 155784bcc559ac20fb04f806e97d28a314b20b58fd60svenpanne@chromium.org 155884bcc559ac20fb04f806e97d28a314b20b58fd60svenpanne@chromium.org /** 155926c16f8ef35ec25d36420512a4ceaa74ea2e2b05vegorov@chromium.org * Returns true if this value is a RegExp. 156026c16f8ef35ec25d36420512a4ceaa74ea2e2b05vegorov@chromium.org */ 156146a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org bool IsRegExp() const; 156226c16f8ef35ec25d36420512a4ceaa74ea2e2b05vegorov@chromium.org 1563486536df718553960f9700559e80e5b10b0d5994dslomov@chromium.org /** 1564486536df718553960f9700559e80e5b10b0d5994dslomov@chromium.org * Returns true if this value is a Promise. 1565486536df718553960f9700559e80e5b10b0d5994dslomov@chromium.org * This is an experimental feature. 1566486536df718553960f9700559e80e5b10b0d5994dslomov@chromium.org */ 1567486536df718553960f9700559e80e5b10b0d5994dslomov@chromium.org bool IsPromise() const; 156857ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org 156957ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org /** 15706474a1cfee1cdad45de5cc96960085e1c7daf11cmachenbach@chromium.org * Returns true if this value is a Map. 15716474a1cfee1cdad45de5cc96960085e1c7daf11cmachenbach@chromium.org * This is an experimental feature. 15726474a1cfee1cdad45de5cc96960085e1c7daf11cmachenbach@chromium.org */ 15736474a1cfee1cdad45de5cc96960085e1c7daf11cmachenbach@chromium.org bool IsMap() const; 15746474a1cfee1cdad45de5cc96960085e1c7daf11cmachenbach@chromium.org 15756474a1cfee1cdad45de5cc96960085e1c7daf11cmachenbach@chromium.org /** 15766474a1cfee1cdad45de5cc96960085e1c7daf11cmachenbach@chromium.org * Returns true if this value is a Set. 15776474a1cfee1cdad45de5cc96960085e1c7daf11cmachenbach@chromium.org * This is an experimental feature. 15786474a1cfee1cdad45de5cc96960085e1c7daf11cmachenbach@chromium.org */ 15796474a1cfee1cdad45de5cc96960085e1c7daf11cmachenbach@chromium.org bool IsSet() const; 15806474a1cfee1cdad45de5cc96960085e1c7daf11cmachenbach@chromium.org 15816474a1cfee1cdad45de5cc96960085e1c7daf11cmachenbach@chromium.org /** 15826474a1cfee1cdad45de5cc96960085e1c7daf11cmachenbach@chromium.org * Returns true if this value is a WeakMap. 15836474a1cfee1cdad45de5cc96960085e1c7daf11cmachenbach@chromium.org * This is an experimental feature. 15846474a1cfee1cdad45de5cc96960085e1c7daf11cmachenbach@chromium.org */ 15856474a1cfee1cdad45de5cc96960085e1c7daf11cmachenbach@chromium.org bool IsWeakMap() const; 15866474a1cfee1cdad45de5cc96960085e1c7daf11cmachenbach@chromium.org 15876474a1cfee1cdad45de5cc96960085e1c7daf11cmachenbach@chromium.org /** 15886474a1cfee1cdad45de5cc96960085e1c7daf11cmachenbach@chromium.org * Returns true if this value is a WeakSet. 15896474a1cfee1cdad45de5cc96960085e1c7daf11cmachenbach@chromium.org * This is an experimental feature. 15906474a1cfee1cdad45de5cc96960085e1c7daf11cmachenbach@chromium.org */ 15916474a1cfee1cdad45de5cc96960085e1c7daf11cmachenbach@chromium.org bool IsWeakSet() const; 15926474a1cfee1cdad45de5cc96960085e1c7daf11cmachenbach@chromium.org 15936474a1cfee1cdad45de5cc96960085e1c7daf11cmachenbach@chromium.org /** 159457ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org * Returns true if this value is an ArrayBuffer. 159557ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org * This is an experimental feature. 159657ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org */ 159757ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org bool IsArrayBuffer() const; 159857ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org 159957ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org /** 16001510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org * Returns true if this value is an ArrayBufferView. 16011510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org * This is an experimental feature. 16021510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org */ 16031510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org bool IsArrayBufferView() const; 16041510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org 16051510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org /** 160657ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org * Returns true if this value is one of TypedArrays. 160757ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org * This is an experimental feature. 160857ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org */ 160957ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org bool IsTypedArray() const; 161057ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org 161157ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org /** 161257ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org * Returns true if this value is an Uint8Array. 161357ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org * This is an experimental feature. 161457ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org */ 161557ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org bool IsUint8Array() const; 161657ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org 161757ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org /** 161857ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org * Returns true if this value is an Uint8ClampedArray. 161957ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org * This is an experimental feature. 162057ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org */ 162157ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org bool IsUint8ClampedArray() const; 162257ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org 162357ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org /** 162457ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org * Returns true if this value is an Int8Array. 162557ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org * This is an experimental feature. 162657ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org */ 162757ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org bool IsInt8Array() const; 162857ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org 162957ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org /** 163057ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org * Returns true if this value is an Uint16Array. 163157ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org * This is an experimental feature. 163257ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org */ 163357ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org bool IsUint16Array() const; 163457ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org 163557ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org /** 163657ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org * Returns true if this value is an Int16Array. 163757ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org * This is an experimental feature. 163857ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org */ 163957ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org bool IsInt16Array() const; 164057ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org 164157ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org /** 164257ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org * Returns true if this value is an Uint32Array. 164357ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org * This is an experimental feature. 164457ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org */ 164557ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org bool IsUint32Array() const; 164657ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org 164757ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org /** 164857ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org * Returns true if this value is an Int32Array. 164957ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org * This is an experimental feature. 165057ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org */ 165157ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org bool IsInt32Array() const; 165257ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org 165357ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org /** 165457ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org * Returns true if this value is a Float32Array. 165557ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org * This is an experimental feature. 165657ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org */ 165757ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org bool IsFloat32Array() const; 165857ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org 165957ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org /** 166057ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org * Returns true if this value is a Float64Array. 166157ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org * This is an experimental feature. 166257ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org */ 166357ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org bool IsFloat64Array() const; 166457ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org 16651510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org /** 16661510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org * Returns true if this value is a DataView. 16671510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org * This is an experimental feature. 16681510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org */ 16691510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org bool IsDataView() const; 16701510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org 167146a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org Local<Boolean> ToBoolean() const; 167246a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org Local<Number> ToNumber() const; 167346a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org Local<String> ToString() const; 167446a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org Local<String> ToDetailString() const; 167546a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org Local<Object> ToObject() const; 167646a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org Local<Integer> ToInteger() const; 167746a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org Local<Uint32> ToUint32() const; 167846a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org Local<Int32> ToInt32() const; 167943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 168043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen /** 168143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * Attempts to convert a string to an array index. 168243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * Returns an empty handle if the conversion fails. 168343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen */ 168446a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org Local<Uint32> ToArrayIndex() const; 168543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 168646a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org bool BooleanValue() const; 168746a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org double NumberValue() const; 168846a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org int64_t IntegerValue() const; 168946a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org uint32_t Uint32Value() const; 169046a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org int32_t Int32Value() const; 169143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 169243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen /** JS == */ 169346a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org bool Equals(Handle<Value> that) const; 169446a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org bool StrictEquals(Handle<Value> that) const; 16953d079fe881245e49c7ba803b54b4fe6d4b46113cmachenbach@chromium.org bool SameValue(Handle<Value> that) const; 16969d58c2b1c27d8b2890b9bd46e57d3842b09e0292christian.plesner.hansen@gmail.com 16974a35c5a501e5b966f895ddea8e19c3ca232cb23fdslomov@chromium.org template <class T> V8_INLINE static Value* Cast(T* value); 16981fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org 169918ad94b919217ffbcd2d3159eeb5f8c588761c47ager@chromium.org private: 17004a35c5a501e5b966f895ddea8e19c3ca232cb23fdslomov@chromium.org V8_INLINE bool QuickIsUndefined() const; 17014a35c5a501e5b966f895ddea8e19c3ca232cb23fdslomov@chromium.org V8_INLINE bool QuickIsNull() const; 17024a35c5a501e5b966f895ddea8e19c3ca232cb23fdslomov@chromium.org V8_INLINE bool QuickIsString() const; 170346a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org bool FullIsUndefined() const; 170446a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org bool FullIsNull() const; 170546a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org bool FullIsString() const; 170643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen}; 170743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 170843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 170943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen/** 171043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * The superclass of primitive values. See ECMA-262 4.3.2. 171143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen */ 1712594006017e46d82ed7146611dc12c20e3c509c7ddanno@chromium.orgclass V8_EXPORT Primitive : public Value { }; 171343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 171443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 171543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen/** 171643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * A primitive boolean value (ECMA-262, 4.3.14). Either the true 171743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * or false value. 171843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen */ 1719594006017e46d82ed7146611dc12c20e3c509c7ddanno@chromium.orgclass V8_EXPORT Boolean : public Primitive { 172043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen public: 172146a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org bool Value() const; 172237be408adf363bbe682921a4a690752fa0ec33femachenbach@chromium.org V8_INLINE static Handle<Boolean> New(Isolate* isolate, bool value); 172343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen}; 172443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 172543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 172643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen/** 1727e2a8937454723a720c81acc3f9e4162b18999b43machenbach@chromium.org * A superclass for symbols and strings. 1728e2a8937454723a720c81acc3f9e4162b18999b43machenbach@chromium.org */ 1729e2a8937454723a720c81acc3f9e4162b18999b43machenbach@chromium.orgclass V8_EXPORT Name : public Primitive { 1730e2a8937454723a720c81acc3f9e4162b18999b43machenbach@chromium.org public: 1731e2a8937454723a720c81acc3f9e4162b18999b43machenbach@chromium.org V8_INLINE static Name* Cast(v8::Value* obj); 1732e2a8937454723a720c81acc3f9e4162b18999b43machenbach@chromium.org private: 1733e2a8937454723a720c81acc3f9e4162b18999b43machenbach@chromium.org static void CheckCast(v8::Value* obj); 1734e2a8937454723a720c81acc3f9e4162b18999b43machenbach@chromium.org}; 1735e2a8937454723a720c81acc3f9e4162b18999b43machenbach@chromium.org 1736e2a8937454723a720c81acc3f9e4162b18999b43machenbach@chromium.org 1737e2a8937454723a720c81acc3f9e4162b18999b43machenbach@chromium.org/** 1738727e995b7bba3c57fb1e5c156d386ca11894f781v * A JavaScript string value (ECMA-262, 4.3.17). 173943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen */ 1740e2a8937454723a720c81acc3f9e4162b18999b43machenbach@chromium.orgclass V8_EXPORT String : public Name { 174143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen public: 174256c14afabc547f0a8ab2e24d789c00030f8df892ulan@chromium.org enum Encoding { 174356c14afabc547f0a8ab2e24d789c00030f8df892ulan@chromium.org UNKNOWN_ENCODING = 0x1, 174456c14afabc547f0a8ab2e24d789c00030f8df892ulan@chromium.org TWO_BYTE_ENCODING = 0x0, 17452c81ceb7f1e1ccf5f304be0646f4c1375941a7f2machenbach@chromium.org ASCII_ENCODING = 0x4, // TODO(yangguo): deprecate this. 174646a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org ONE_BYTE_ENCODING = 0x4 174756c14afabc547f0a8ab2e24d789c00030f8df892ulan@chromium.org }; 17489258b6bc66e09368ada54001f619d53b4fc976d5ager@chromium.org /** 17499258b6bc66e09368ada54001f619d53b4fc976d5ager@chromium.org * Returns the number of characters in this string. 17509258b6bc66e09368ada54001f619d53b4fc976d5ager@chromium.org */ 175146a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org int Length() const; 175243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 1753727e995b7bba3c57fb1e5c156d386ca11894f781v /** 17549258b6bc66e09368ada54001f619d53b4fc976d5ager@chromium.org * Returns the number of bytes in the UTF-8 encoded 17559258b6bc66e09368ada54001f619d53b4fc976d5ager@chromium.org * representation of this string. 17569258b6bc66e09368ada54001f619d53b4fc976d5ager@chromium.org */ 175746a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org int Utf8Length() const; 17589258b6bc66e09368ada54001f619d53b4fc976d5ager@chromium.org 17599258b6bc66e09368ada54001f619d53b4fc976d5ager@chromium.org /** 1760dfe53073738bbf16023d96fce5118358a1037fd3ulan@chromium.org * Returns whether this string is known to contain only one byte data. 1761dfe53073738bbf16023d96fce5118358a1037fd3ulan@chromium.org * Does not read the string. 1762dfe53073738bbf16023d96fce5118358a1037fd3ulan@chromium.org * False negatives are possible. 176346a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org */ 176446a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org bool IsOneByte() const; 17652c067b150f65db3e076b6b5a813e7f6f2492f770rossberg@chromium.org 17662c067b150f65db3e076b6b5a813e7f6f2492f770rossberg@chromium.org /** 1767dfe53073738bbf16023d96fce5118358a1037fd3ulan@chromium.org * Returns whether this string contain only one byte data. 1768dfe53073738bbf16023d96fce5118358a1037fd3ulan@chromium.org * Will read the entire string in some cases. 1769dfe53073738bbf16023d96fce5118358a1037fd3ulan@chromium.org */ 1770dfe53073738bbf16023d96fce5118358a1037fd3ulan@chromium.org bool ContainsOnlyOneByte() const; 1771dfe53073738bbf16023d96fce5118358a1037fd3ulan@chromium.org 1772dfe53073738bbf16023d96fce5118358a1037fd3ulan@chromium.org /** 1773727e995b7bba3c57fb1e5c156d386ca11894f781v * Write the contents of the string to an external buffer. 1774727e995b7bba3c57fb1e5c156d386ca11894f781v * If no arguments are given, expects the buffer to be large 1775727e995b7bba3c57fb1e5c156d386ca11894f781v * enough to hold the entire string and NULL terminator. Copies 1776727e995b7bba3c57fb1e5c156d386ca11894f781v * the contents of the string and the NULL terminator into the 1777727e995b7bba3c57fb1e5c156d386ca11894f781v * buffer. 1778727e995b7bba3c57fb1e5c156d386ca11894f781v * 17795f0c45f2cacb31d36a8f80c31f17bda7751a3644ager@chromium.org * WriteUtf8 will not write partial UTF-8 sequences, preferring to stop 17805f0c45f2cacb31d36a8f80c31f17bda7751a3644ager@chromium.org * before the end of the buffer. 17815f0c45f2cacb31d36a8f80c31f17bda7751a3644ager@chromium.org * 1782727e995b7bba3c57fb1e5c156d386ca11894f781v * Copies up to length characters into the output buffer. 1783727e995b7bba3c57fb1e5c156d386ca11894f781v * Only null-terminates if there is enough space in the buffer. 1784727e995b7bba3c57fb1e5c156d386ca11894f781v * 1785727e995b7bba3c57fb1e5c156d386ca11894f781v * \param buffer The buffer into which the string will be copied. 1786727e995b7bba3c57fb1e5c156d386ca11894f781v * \param start The starting position within the string at which 1787727e995b7bba3c57fb1e5c156d386ca11894f781v * copying begins. 17885f0c45f2cacb31d36a8f80c31f17bda7751a3644ager@chromium.org * \param length The number of characters to copy from the string. For 17895f0c45f2cacb31d36a8f80c31f17bda7751a3644ager@chromium.org * WriteUtf8 the number of bytes in the buffer. 1790357bf65ed5309ac3a2c4bf20b6ce7770488787c2ager@chromium.org * \param nchars_ref The number of characters written, can be NULL. 1791ddd545c4c343dcf4331b9d80d2a0bdfa373a4a0fricow@chromium.org * \param options Various options that might affect performance of this or 1792c9c80823e038328f2e1060d7feef0762a50adf06ricow@chromium.org * subsequent operations. 17935f0c45f2cacb31d36a8f80c31f17bda7751a3644ager@chromium.org * \return The number of characters copied to the buffer excluding the null 17945f0c45f2cacb31d36a8f80c31f17bda7751a3644ager@chromium.org * terminator. For WriteUtf8: The number of bytes copied to the buffer 1795ddd545c4c343dcf4331b9d80d2a0bdfa373a4a0fricow@chromium.org * including the null terminator (if written). 1796727e995b7bba3c57fb1e5c156d386ca11894f781v */ 1797ddd545c4c343dcf4331b9d80d2a0bdfa373a4a0fricow@chromium.org enum WriteOptions { 1798ddd545c4c343dcf4331b9d80d2a0bdfa373a4a0fricow@chromium.org NO_OPTIONS = 0, 1799ddd545c4c343dcf4331b9d80d2a0bdfa373a4a0fricow@chromium.org HINT_MANY_WRITES_EXPECTED = 1, 1800304cc33f8259ef467e8e3c79f448d0bae0e8cd85yangguo@chromium.org NO_NULL_TERMINATION = 2, 18012c81ceb7f1e1ccf5f304be0646f4c1375941a7f2machenbach@chromium.org PRESERVE_ASCII_NULL = 4, // TODO(yangguo): deprecate this. 18022c81ceb7f1e1ccf5f304be0646f4c1375941a7f2machenbach@chromium.org PRESERVE_ONE_BYTE_NULL = 4, 1803c8cbc43a1fd5fda5d6a1e172f720cbd1215157c8machenbach@chromium.org // Used by WriteUtf8 to replace orphan surrogate code units with the 1804c8cbc43a1fd5fda5d6a1e172f720cbd1215157c8machenbach@chromium.org // unicode replacement character. Needs to be set to guarantee valid UTF-8 1805c8cbc43a1fd5fda5d6a1e172f720cbd1215157c8machenbach@chromium.org // output. 1806c8cbc43a1fd5fda5d6a1e172f720cbd1215157c8machenbach@chromium.org REPLACE_INVALID_UTF8 = 8 1807b6e43bb9b1cd7673592be9dfd0a036fe8dab4dcdwhesse@chromium.org }; 1808b6e43bb9b1cd7673592be9dfd0a036fe8dab4dcdwhesse@chromium.org 180934e60787ea1e76f3ee49e859f71f036170c21f0elrn@chromium.org // 16-bit character codes. 181046a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org int Write(uint16_t* buffer, 181146a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org int start = 0, 181246a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org int length = -1, 181346a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org int options = NO_OPTIONS) const; 181446a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org // One byte characters. 181546a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org int WriteOneByte(uint8_t* buffer, 181646a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org int start = 0, 181746a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org int length = -1, 181846a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org int options = NO_OPTIONS) const; 181934e60787ea1e76f3ee49e859f71f036170c21f0elrn@chromium.org // UTF-8 encoded characters. 182046a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org int WriteUtf8(char* buffer, 182146a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org int length = -1, 182246a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org int* nchars_ref = NULL, 182346a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org int options = NO_OPTIONS) const; 182443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 1825727e995b7bba3c57fb1e5c156d386ca11894f781v /** 1826563b8dce8453a0464b60f21746e2f95a893f7a3aager@chromium.org * A zero length string. 1827563b8dce8453a0464b60f21746e2f95a893f7a3aager@chromium.org */ 18284a35c5a501e5b966f895ddea8e19c3ca232cb23fdslomov@chromium.org V8_INLINE static v8::Local<v8::String> Empty(Isolate* isolate); 1829563b8dce8453a0464b60f21746e2f95a893f7a3aager@chromium.org 1830563b8dce8453a0464b60f21746e2f95a893f7a3aager@chromium.org /** 1831727e995b7bba3c57fb1e5c156d386ca11894f781v * Returns true if the string is external 1832727e995b7bba3c57fb1e5c156d386ca11894f781v */ 183346a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org bool IsExternal() const; 183443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 1835727e995b7bba3c57fb1e5c156d386ca11894f781v /** 18362c81ceb7f1e1ccf5f304be0646f4c1375941a7f2machenbach@chromium.org * Returns true if the string is both external and one-byte. 1837727e995b7bba3c57fb1e5c156d386ca11894f781v */ 18382c81ceb7f1e1ccf5f304be0646f4c1375941a7f2machenbach@chromium.org bool IsExternalOneByte() const; 18392c81ceb7f1e1ccf5f304be0646f4c1375941a7f2machenbach@chromium.org 18402c81ceb7f1e1ccf5f304be0646f4c1375941a7f2machenbach@chromium.org // TODO(yangguo): deprecate this. 18412c81ceb7f1e1ccf5f304be0646f4c1375941a7f2machenbach@chromium.org bool IsExternalAscii() const { return IsExternalOneByte(); } 184213bd294acf56c7f824d92d4941a2aeb3cec58e0ckmillikin@chromium.org 1843594006017e46d82ed7146611dc12c20e3c509c7ddanno@chromium.org class V8_EXPORT ExternalStringResourceBase { // NOLINT 184413bd294acf56c7f824d92d4941a2aeb3cec58e0ckmillikin@chromium.org public: 184513bd294acf56c7f824d92d4941a2aeb3cec58e0ckmillikin@chromium.org virtual ~ExternalStringResourceBase() {} 18462356e6fbe66ac3aa027b61cb43a3c3619b3c3a5evegorov@chromium.org 184713bd294acf56c7f824d92d4941a2aeb3cec58e0ckmillikin@chromium.org protected: 184813bd294acf56c7f824d92d4941a2aeb3cec58e0ckmillikin@chromium.org ExternalStringResourceBase() {} 18492356e6fbe66ac3aa027b61cb43a3c3619b3c3a5evegorov@chromium.org 18502356e6fbe66ac3aa027b61cb43a3c3619b3c3a5evegorov@chromium.org /** 18512356e6fbe66ac3aa027b61cb43a3c3619b3c3a5evegorov@chromium.org * Internally V8 will call this Dispose method when the external string 18522356e6fbe66ac3aa027b61cb43a3c3619b3c3a5evegorov@chromium.org * resource is no longer needed. The default implementation will use the 18532356e6fbe66ac3aa027b61cb43a3c3619b3c3a5evegorov@chromium.org * delete operator. This method can be overridden in subclasses to 18542356e6fbe66ac3aa027b61cb43a3c3619b3c3a5evegorov@chromium.org * control how allocated external string resources are disposed. 18552356e6fbe66ac3aa027b61cb43a3c3619b3c3a5evegorov@chromium.org */ 18562356e6fbe66ac3aa027b61cb43a3c3619b3c3a5evegorov@chromium.org virtual void Dispose() { delete this; } 18572356e6fbe66ac3aa027b61cb43a3c3619b3c3a5evegorov@chromium.org 185813bd294acf56c7f824d92d4941a2aeb3cec58e0ckmillikin@chromium.org private: 185913bd294acf56c7f824d92d4941a2aeb3cec58e0ckmillikin@chromium.org // Disallow copying and assigning. 186013bd294acf56c7f824d92d4941a2aeb3cec58e0ckmillikin@chromium.org ExternalStringResourceBase(const ExternalStringResourceBase&); 186113bd294acf56c7f824d92d4941a2aeb3cec58e0ckmillikin@chromium.org void operator=(const ExternalStringResourceBase&); 18622356e6fbe66ac3aa027b61cb43a3c3619b3c3a5evegorov@chromium.org 18632356e6fbe66ac3aa027b61cb43a3c3619b3c3a5evegorov@chromium.org friend class v8::internal::Heap; 186413bd294acf56c7f824d92d4941a2aeb3cec58e0ckmillikin@chromium.org }; 186513bd294acf56c7f824d92d4941a2aeb3cec58e0ckmillikin@chromium.org 1866727e995b7bba3c57fb1e5c156d386ca11894f781v /** 1867727e995b7bba3c57fb1e5c156d386ca11894f781v * An ExternalStringResource is a wrapper around a two-byte string 1868727e995b7bba3c57fb1e5c156d386ca11894f781v * buffer that resides outside V8's heap. Implement an 1869727e995b7bba3c57fb1e5c156d386ca11894f781v * ExternalStringResource to manage the life cycle of the underlying 18709258b6bc66e09368ada54001f619d53b4fc976d5ager@chromium.org * buffer. Note that the string data must be immutable. 1871727e995b7bba3c57fb1e5c156d386ca11894f781v */ 1872594006017e46d82ed7146611dc12c20e3c509c7ddanno@chromium.org class V8_EXPORT ExternalStringResource 187313bd294acf56c7f824d92d4941a2aeb3cec58e0ckmillikin@chromium.org : public ExternalStringResourceBase { 187443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen public: 187543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen /** 187643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * Override the destructor to manage the life cycle of the underlying 187743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * buffer. 187843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen */ 187943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen virtual ~ExternalStringResource() {} 18802356e6fbe66ac3aa027b61cb43a3c3619b3c3a5evegorov@chromium.org 18812356e6fbe66ac3aa027b61cb43a3c3619b3c3a5evegorov@chromium.org /** 18822356e6fbe66ac3aa027b61cb43a3c3619b3c3a5evegorov@chromium.org * The string data from the underlying buffer. 18832356e6fbe66ac3aa027b61cb43a3c3619b3c3a5evegorov@chromium.org */ 188443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen virtual const uint16_t* data() const = 0; 18852356e6fbe66ac3aa027b61cb43a3c3619b3c3a5evegorov@chromium.org 18862356e6fbe66ac3aa027b61cb43a3c3619b3c3a5evegorov@chromium.org /** 18872356e6fbe66ac3aa027b61cb43a3c3619b3c3a5evegorov@chromium.org * The length of the string. That is, the number of two-byte characters. 18882356e6fbe66ac3aa027b61cb43a3c3619b3c3a5evegorov@chromium.org */ 188943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen virtual size_t length() const = 0; 18902356e6fbe66ac3aa027b61cb43a3c3619b3c3a5evegorov@chromium.org 189143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen protected: 189243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen ExternalStringResource() {} 189343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen }; 189443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 189543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen /** 18962c81ceb7f1e1ccf5f304be0646f4c1375941a7f2machenbach@chromium.org * An ExternalOneByteStringResource is a wrapper around an one-byte 1897727e995b7bba3c57fb1e5c156d386ca11894f781v * string buffer that resides outside V8's heap. Implement an 18982c81ceb7f1e1ccf5f304be0646f4c1375941a7f2machenbach@chromium.org * ExternalOneByteStringResource to manage the life cycle of the 18999258b6bc66e09368ada54001f619d53b4fc976d5ager@chromium.org * underlying buffer. Note that the string data must be immutable 19002c81ceb7f1e1ccf5f304be0646f4c1375941a7f2machenbach@chromium.org * and that the data must be Latin-1 and not UTF-8, which would require 19012c81ceb7f1e1ccf5f304be0646f4c1375941a7f2machenbach@chromium.org * special treatment internally in the engine and do not allow efficient 19022c81ceb7f1e1ccf5f304be0646f4c1375941a7f2machenbach@chromium.org * indexing. Use String::New or convert to 16 bit data for non-Latin1. 1903727e995b7bba3c57fb1e5c156d386ca11894f781v */ 190443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 19052c81ceb7f1e1ccf5f304be0646f4c1375941a7f2machenbach@chromium.org class V8_EXPORT ExternalOneByteStringResource 190613bd294acf56c7f824d92d4941a2aeb3cec58e0ckmillikin@chromium.org : public ExternalStringResourceBase { 190743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen public: 190843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen /** 190943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * Override the destructor to manage the life cycle of the underlying 191043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * buffer. 191143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen */ 19122c81ceb7f1e1ccf5f304be0646f4c1375941a7f2machenbach@chromium.org virtual ~ExternalOneByteStringResource() {} 191343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen /** The string data from the underlying buffer.*/ 191443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen virtual const char* data() const = 0; 19152c81ceb7f1e1ccf5f304be0646f4c1375941a7f2machenbach@chromium.org /** The number of Latin-1 characters in the string.*/ 191643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen virtual size_t length() const = 0; 191743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen protected: 19182c81ceb7f1e1ccf5f304be0646f4c1375941a7f2machenbach@chromium.org ExternalOneByteStringResource() {} 191943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen }; 192043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 19212c81ceb7f1e1ccf5f304be0646f4c1375941a7f2machenbach@chromium.org typedef ExternalOneByteStringResource ExternalAsciiStringResource; 192246a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org 192343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen /** 192456c14afabc547f0a8ab2e24d789c00030f8df892ulan@chromium.org * If the string is an external string, return the ExternalStringResourceBase 192556c14afabc547f0a8ab2e24d789c00030f8df892ulan@chromium.org * regardless of the encoding, otherwise return NULL. The encoding of the 192656c14afabc547f0a8ab2e24d789c00030f8df892ulan@chromium.org * string is returned in encoding_out. 192756c14afabc547f0a8ab2e24d789c00030f8df892ulan@chromium.org */ 19284a35c5a501e5b966f895ddea8e19c3ca232cb23fdslomov@chromium.org V8_INLINE ExternalStringResourceBase* GetExternalStringResourceBase( 19294a35c5a501e5b966f895ddea8e19c3ca232cb23fdslomov@chromium.org Encoding* encoding_out) const; 193056c14afabc547f0a8ab2e24d789c00030f8df892ulan@chromium.org 193156c14afabc547f0a8ab2e24d789c00030f8df892ulan@chromium.org /** 19329085a016223a6b72bf580d5781c93ec7b9e54422ager@chromium.org * Get the ExternalStringResource for an external string. Returns 19339085a016223a6b72bf580d5781c93ec7b9e54422ager@chromium.org * NULL if IsExternal() doesn't return true. 193443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen */ 19354a35c5a501e5b966f895ddea8e19c3ca232cb23fdslomov@chromium.org V8_INLINE ExternalStringResource* GetExternalStringResource() const; 193643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 193743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen /** 19382c81ceb7f1e1ccf5f304be0646f4c1375941a7f2machenbach@chromium.org * Get the ExternalOneByteStringResource for an external one-byte string. 19392c81ceb7f1e1ccf5f304be0646f4c1375941a7f2machenbach@chromium.org * Returns NULL if IsExternalOneByte() doesn't return true. 194043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen */ 19412c81ceb7f1e1ccf5f304be0646f4c1375941a7f2machenbach@chromium.org const ExternalOneByteStringResource* GetExternalOneByteStringResource() const; 19422c81ceb7f1e1ccf5f304be0646f4c1375941a7f2machenbach@chromium.org 19432c81ceb7f1e1ccf5f304be0646f4c1375941a7f2machenbach@chromium.org // TODO(yangguo): deprecate this. 19442c81ceb7f1e1ccf5f304be0646f4c1375941a7f2machenbach@chromium.org const ExternalAsciiStringResource* GetExternalAsciiStringResource() const { 19452c81ceb7f1e1ccf5f304be0646f4c1375941a7f2machenbach@chromium.org return GetExternalOneByteStringResource(); 19462c81ceb7f1e1ccf5f304be0646f4c1375941a7f2machenbach@chromium.org } 194743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 19484a35c5a501e5b966f895ddea8e19c3ca232cb23fdslomov@chromium.org V8_INLINE static String* Cast(v8::Value* obj); 194943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 195032d7dbafe29be06cec1edd36c31fbe2865c799f4ulan@chromium.org enum NewStringType { 195132d7dbafe29be06cec1edd36c31fbe2865c799f4ulan@chromium.org kNormalString, kInternalizedString, kUndetectableString 195232d7dbafe29be06cec1edd36c31fbe2865c799f4ulan@chromium.org }; 195332d7dbafe29be06cec1edd36c31fbe2865c799f4ulan@chromium.org 195432d7dbafe29be06cec1edd36c31fbe2865c799f4ulan@chromium.org /** Allocates a new string from UTF-8 data.*/ 195532d7dbafe29be06cec1edd36c31fbe2865c799f4ulan@chromium.org static Local<String> NewFromUtf8(Isolate* isolate, 195632d7dbafe29be06cec1edd36c31fbe2865c799f4ulan@chromium.org const char* data, 195732d7dbafe29be06cec1edd36c31fbe2865c799f4ulan@chromium.org NewStringType type = kNormalString, 195832d7dbafe29be06cec1edd36c31fbe2865c799f4ulan@chromium.org int length = -1); 195932d7dbafe29be06cec1edd36c31fbe2865c799f4ulan@chromium.org 196032d7dbafe29be06cec1edd36c31fbe2865c799f4ulan@chromium.org /** Allocates a new string from Latin-1 data.*/ 196132d7dbafe29be06cec1edd36c31fbe2865c799f4ulan@chromium.org static Local<String> NewFromOneByte( 196232d7dbafe29be06cec1edd36c31fbe2865c799f4ulan@chromium.org Isolate* isolate, 196332d7dbafe29be06cec1edd36c31fbe2865c799f4ulan@chromium.org const uint8_t* data, 196432d7dbafe29be06cec1edd36c31fbe2865c799f4ulan@chromium.org NewStringType type = kNormalString, 196532d7dbafe29be06cec1edd36c31fbe2865c799f4ulan@chromium.org int length = -1); 196632d7dbafe29be06cec1edd36c31fbe2865c799f4ulan@chromium.org 196732d7dbafe29be06cec1edd36c31fbe2865c799f4ulan@chromium.org /** Allocates a new string from UTF-16 data.*/ 196832d7dbafe29be06cec1edd36c31fbe2865c799f4ulan@chromium.org static Local<String> NewFromTwoByte( 196932d7dbafe29be06cec1edd36c31fbe2865c799f4ulan@chromium.org Isolate* isolate, 197032d7dbafe29be06cec1edd36c31fbe2865c799f4ulan@chromium.org const uint16_t* data, 197132d7dbafe29be06cec1edd36c31fbe2865c799f4ulan@chromium.org NewStringType type = kNormalString, 197232d7dbafe29be06cec1edd36c31fbe2865c799f4ulan@chromium.org int length = -1); 197343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 1974727e995b7bba3c57fb1e5c156d386ca11894f781v /** 19759d58c2b1c27d8b2890b9bd46e57d3842b09e0292christian.plesner.hansen@gmail.com * Creates a new string by concatenating the left and the right strings 19769d58c2b1c27d8b2890b9bd46e57d3842b09e0292christian.plesner.hansen@gmail.com * passed in as parameters. 19779d58c2b1c27d8b2890b9bd46e57d3842b09e0292christian.plesner.hansen@gmail.com */ 197846a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org static Local<String> Concat(Handle<String> left, Handle<String> right); 19799d58c2b1c27d8b2890b9bd46e57d3842b09e0292christian.plesner.hansen@gmail.com 19809d58c2b1c27d8b2890b9bd46e57d3842b09e0292christian.plesner.hansen@gmail.com /** 1981727e995b7bba3c57fb1e5c156d386ca11894f781v * Creates a new external string using the data defined in the given 19821af7e1b5f676e5556c041fe09a5c4f5a906f27a0lrn@chromium.org * resource. When the external string is no longer live on V8's heap the 19832356e6fbe66ac3aa027b61cb43a3c3619b3c3a5evegorov@chromium.org * resource will be disposed by calling its Dispose method. The caller of 19842356e6fbe66ac3aa027b61cb43a3c3619b3c3a5evegorov@chromium.org * this function should not otherwise delete or modify the resource. Neither 19852356e6fbe66ac3aa027b61cb43a3c3619b3c3a5evegorov@chromium.org * should the underlying buffer be deallocated or modified except through the 19862356e6fbe66ac3aa027b61cb43a3c3619b3c3a5evegorov@chromium.org * destructor of the external string resource. 1987727e995b7bba3c57fb1e5c156d386ca11894f781v */ 198837be408adf363bbe682921a4a690752fa0ec33femachenbach@chromium.org static Local<String> NewExternal(Isolate* isolate, 198937be408adf363bbe682921a4a690752fa0ec33femachenbach@chromium.org ExternalStringResource* resource); 1990bb29dc9819bb6f495ab6eddd2543965eb97a8e43ager@chromium.org 19916f10e41fef1524c70846d970268de222e41c594cager@chromium.org /** 19926f10e41fef1524c70846d970268de222e41c594cager@chromium.org * Associate an external string resource with this string by transforming it 19936f10e41fef1524c70846d970268de222e41c594cager@chromium.org * in place so that existing references to this string in the JavaScript heap 19946f10e41fef1524c70846d970268de222e41c594cager@chromium.org * will use the external string resource. The external string resource's 19957304bcac06a6a63b9f3dcebac2eeceada87ca146vegorov@chromium.org * character contents need to be equivalent to this string. 19966f10e41fef1524c70846d970268de222e41c594cager@chromium.org * Returns true if the string has been changed to be an external string. 19971af7e1b5f676e5556c041fe09a5c4f5a906f27a0lrn@chromium.org * The string is not modified if the operation fails. See NewExternal for 19981af7e1b5f676e5556c041fe09a5c4f5a906f27a0lrn@chromium.org * information on the lifetime of the resource. 19996f10e41fef1524c70846d970268de222e41c594cager@chromium.org */ 200046a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org bool MakeExternal(ExternalStringResource* resource); 200143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 2002727e995b7bba3c57fb1e5c156d386ca11894f781v /** 20032c81ceb7f1e1ccf5f304be0646f4c1375941a7f2machenbach@chromium.org * Creates a new external string using the one-byte data defined in the given 20041af7e1b5f676e5556c041fe09a5c4f5a906f27a0lrn@chromium.org * resource. When the external string is no longer live on V8's heap the 20052356e6fbe66ac3aa027b61cb43a3c3619b3c3a5evegorov@chromium.org * resource will be disposed by calling its Dispose method. The caller of 20062356e6fbe66ac3aa027b61cb43a3c3619b3c3a5evegorov@chromium.org * this function should not otherwise delete or modify the resource. Neither 20072356e6fbe66ac3aa027b61cb43a3c3619b3c3a5evegorov@chromium.org * should the underlying buffer be deallocated or modified except through the 20082356e6fbe66ac3aa027b61cb43a3c3619b3c3a5evegorov@chromium.org * destructor of the external string resource. 200946a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org */ 201037be408adf363bbe682921a4a690752fa0ec33femachenbach@chromium.org static Local<String> NewExternal(Isolate* isolate, 20112c81ceb7f1e1ccf5f304be0646f4c1375941a7f2machenbach@chromium.org ExternalOneByteStringResource* resource); 2012bb29dc9819bb6f495ab6eddd2543965eb97a8e43ager@chromium.org 20136f10e41fef1524c70846d970268de222e41c594cager@chromium.org /** 20146f10e41fef1524c70846d970268de222e41c594cager@chromium.org * Associate an external string resource with this string by transforming it 20156f10e41fef1524c70846d970268de222e41c594cager@chromium.org * in place so that existing references to this string in the JavaScript heap 20166f10e41fef1524c70846d970268de222e41c594cager@chromium.org * will use the external string resource. The external string resource's 20177304bcac06a6a63b9f3dcebac2eeceada87ca146vegorov@chromium.org * character contents need to be equivalent to this string. 20186f10e41fef1524c70846d970268de222e41c594cager@chromium.org * Returns true if the string has been changed to be an external string. 20191af7e1b5f676e5556c041fe09a5c4f5a906f27a0lrn@chromium.org * The string is not modified if the operation fails. See NewExternal for 20201af7e1b5f676e5556c041fe09a5c4f5a906f27a0lrn@chromium.org * information on the lifetime of the resource. 20216f10e41fef1524c70846d970268de222e41c594cager@chromium.org */ 20222c81ceb7f1e1ccf5f304be0646f4c1375941a7f2machenbach@chromium.org bool MakeExternal(ExternalOneByteStringResource* resource); 202343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 20245a6af92a1549c81fb61855518f43b712e4c0e469christian.plesner.hansen@gmail.com /** 20255a6af92a1549c81fb61855518f43b712e4c0e469christian.plesner.hansen@gmail.com * Returns true if this string can be made external. 20265a6af92a1549c81fb61855518f43b712e4c0e469christian.plesner.hansen@gmail.com */ 202746a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org bool CanMakeExternal(); 20285a6af92a1549c81fb61855518f43b712e4c0e469christian.plesner.hansen@gmail.com 202943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen /** 203034e60787ea1e76f3ee49e859f71f036170c21f0elrn@chromium.org * Converts an object to a UTF-8-encoded character array. Useful if 203171daaf639544be2a6638e3566f78e0b14f05cd7bager@chromium.org * you want to print the object. If conversion to a string fails 203234e60787ea1e76f3ee49e859f71f036170c21f0elrn@chromium.org * (e.g. due to an exception in the toString() method of the object) 203371daaf639544be2a6638e3566f78e0b14f05cd7bager@chromium.org * then the length() method returns 0 and the * operator returns 203471daaf639544be2a6638e3566f78e0b14f05cd7bager@chromium.org * NULL. 20359258b6bc66e09368ada54001f619d53b4fc976d5ager@chromium.org */ 2036594006017e46d82ed7146611dc12c20e3c509c7ddanno@chromium.org class V8_EXPORT Utf8Value { 20379258b6bc66e09368ada54001f619d53b4fc976d5ager@chromium.org public: 20389258b6bc66e09368ada54001f619d53b4fc976d5ager@chromium.org explicit Utf8Value(Handle<v8::Value> obj); 20399258b6bc66e09368ada54001f619d53b4fc976d5ager@chromium.org ~Utf8Value(); 2040a1645e29968e70a41226edda2c49788fcea48b74ager@chromium.org char* operator*() { return str_; } 2041a1645e29968e70a41226edda2c49788fcea48b74ager@chromium.org const char* operator*() const { return str_; } 2042a1645e29968e70a41226edda2c49788fcea48b74ager@chromium.org int length() const { return length_; } 20439258b6bc66e09368ada54001f619d53b4fc976d5ager@chromium.org private: 20449258b6bc66e09368ada54001f619d53b4fc976d5ager@chromium.org char* str_; 20459258b6bc66e09368ada54001f619d53b4fc976d5ager@chromium.org int length_; 204641044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org 204741044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org // Disallow copying and assigning. 204841044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org Utf8Value(const Utf8Value&); 204941044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org void operator=(const Utf8Value&); 20509258b6bc66e09368ada54001f619d53b4fc976d5ager@chromium.org }; 20519258b6bc66e09368ada54001f619d53b4fc976d5ager@chromium.org 20529258b6bc66e09368ada54001f619d53b4fc976d5ager@chromium.org /** 205343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * Converts an object to a two-byte string. 205471daaf639544be2a6638e3566f78e0b14f05cd7bager@chromium.org * If conversion to a string fails (eg. due to an exception in the toString() 205571daaf639544be2a6638e3566f78e0b14f05cd7bager@chromium.org * method of the object) then the length() method returns 0 and the * operator 205671daaf639544be2a6638e3566f78e0b14f05cd7bager@chromium.org * returns NULL. 205743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen */ 2058594006017e46d82ed7146611dc12c20e3c509c7ddanno@chromium.org class V8_EXPORT Value { 205943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen public: 206043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen explicit Value(Handle<v8::Value> obj); 206143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen ~Value(); 2062a1645e29968e70a41226edda2c49788fcea48b74ager@chromium.org uint16_t* operator*() { return str_; } 2063a1645e29968e70a41226edda2c49788fcea48b74ager@chromium.org const uint16_t* operator*() const { return str_; } 2064a1645e29968e70a41226edda2c49788fcea48b74ager@chromium.org int length() const { return length_; } 206543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen private: 206643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen uint16_t* str_; 20679258b6bc66e09368ada54001f619d53b4fc976d5ager@chromium.org int length_; 206841044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org 206941044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org // Disallow copying and assigning. 207041044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org Value(const Value&); 207141044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org void operator=(const Value&); 207243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen }; 20739d58c2b1c27d8b2890b9bd46e57d3842b09e0292christian.plesner.hansen@gmail.com 207418ad94b919217ffbcd2d3159eeb5f8c588761c47ager@chromium.org private: 207546a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org void VerifyExternalStringResourceBase(ExternalStringResourceBase* v, 207646a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org Encoding encoding) const; 207746a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org void VerifyExternalStringResource(ExternalStringResource* val) const; 207846a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org static void CheckCast(v8::Value* obj); 207943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen}; 208043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 208143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 208243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen/** 2083e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org * A JavaScript symbol (ECMA-262 edition 6) 2084e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org * 2085e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org * This is an experimental feature. Use at your own risk. 2086e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org */ 2087e2a8937454723a720c81acc3f9e4162b18999b43machenbach@chromium.orgclass V8_EXPORT Symbol : public Name { 2088e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org public: 2089e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org // Returns the print name string of the symbol, or undefined if none. 2090e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org Local<Value> Name() const; 2091e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org 2092a221880197f38ff22d942851060daffa5d036bdfmachenbach@chromium.org // Create a symbol. If name is not empty, it will be used as the description. 20930cc095007a3ccded63f6577751c6a04300eb7ae9machenbach@chromium.org static Local<Symbol> New( 2094a221880197f38ff22d942851060daffa5d036bdfmachenbach@chromium.org Isolate *isolate, Local<String> name = Local<String>()); 2095a221880197f38ff22d942851060daffa5d036bdfmachenbach@chromium.org 2096a221880197f38ff22d942851060daffa5d036bdfmachenbach@chromium.org // Access global symbol registry. 2097a221880197f38ff22d942851060daffa5d036bdfmachenbach@chromium.org // Note that symbols created this way are never collected, so 2098a221880197f38ff22d942851060daffa5d036bdfmachenbach@chromium.org // they should only be used for statically fixed properties. 2099a221880197f38ff22d942851060daffa5d036bdfmachenbach@chromium.org // Also, there is only one global name space for the names used as keys. 2100a221880197f38ff22d942851060daffa5d036bdfmachenbach@chromium.org // To minimize the potential for clashes, use qualified names as keys. 2101a221880197f38ff22d942851060daffa5d036bdfmachenbach@chromium.org static Local<Symbol> For(Isolate *isolate, Local<String> name); 2102a221880197f38ff22d942851060daffa5d036bdfmachenbach@chromium.org 2103a221880197f38ff22d942851060daffa5d036bdfmachenbach@chromium.org // Retrieve a global symbol. Similar to |For|, but using a separate 2104a221880197f38ff22d942851060daffa5d036bdfmachenbach@chromium.org // registry that is not accessible by (and cannot clash with) JavaScript code. 2105a221880197f38ff22d942851060daffa5d036bdfmachenbach@chromium.org static Local<Symbol> ForApi(Isolate *isolate, Local<String> name); 2106e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org 21077dae5b9f8500ada1f217a27db8a1f5c62becd404machenbach@chromium.org // Well-known symbols 21087dae5b9f8500ada1f217a27db8a1f5c62becd404machenbach@chromium.org static Local<Symbol> GetIterator(Isolate* isolate); 21097dae5b9f8500ada1f217a27db8a1f5c62becd404machenbach@chromium.org static Local<Symbol> GetUnscopables(Isolate* isolate); 21107dae5b9f8500ada1f217a27db8a1f5c62becd404machenbach@chromium.org 21114a35c5a501e5b966f895ddea8e19c3ca232cb23fdslomov@chromium.org V8_INLINE static Symbol* Cast(v8::Value* obj); 21127dae5b9f8500ada1f217a27db8a1f5c62becd404machenbach@chromium.org 2113e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org private: 2114e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org Symbol(); 2115e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org static void CheckCast(v8::Value* obj); 2116e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org}; 2117e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org 2118e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org 2119e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org/** 21200cc095007a3ccded63f6577751c6a04300eb7ae9machenbach@chromium.org * A private symbol 21210cc095007a3ccded63f6577751c6a04300eb7ae9machenbach@chromium.org * 21220cc095007a3ccded63f6577751c6a04300eb7ae9machenbach@chromium.org * This is an experimental feature. Use at your own risk. 21230cc095007a3ccded63f6577751c6a04300eb7ae9machenbach@chromium.org */ 21240cc095007a3ccded63f6577751c6a04300eb7ae9machenbach@chromium.orgclass V8_EXPORT Private : public Data { 21250cc095007a3ccded63f6577751c6a04300eb7ae9machenbach@chromium.org public: 21260cc095007a3ccded63f6577751c6a04300eb7ae9machenbach@chromium.org // Returns the print name string of the private symbol, or undefined if none. 21270cc095007a3ccded63f6577751c6a04300eb7ae9machenbach@chromium.org Local<Value> Name() const; 21280cc095007a3ccded63f6577751c6a04300eb7ae9machenbach@chromium.org 2129a221880197f38ff22d942851060daffa5d036bdfmachenbach@chromium.org // Create a private symbol. If name is not empty, it will be the description. 2130a221880197f38ff22d942851060daffa5d036bdfmachenbach@chromium.org static Local<Private> New( 2131a221880197f38ff22d942851060daffa5d036bdfmachenbach@chromium.org Isolate *isolate, Local<String> name = Local<String>()); 2132a221880197f38ff22d942851060daffa5d036bdfmachenbach@chromium.org 2133a221880197f38ff22d942851060daffa5d036bdfmachenbach@chromium.org // Retrieve a global private symbol. If a symbol with this name has not 2134a221880197f38ff22d942851060daffa5d036bdfmachenbach@chromium.org // been retrieved in the same isolate before, it is created. 2135a221880197f38ff22d942851060daffa5d036bdfmachenbach@chromium.org // Note that private symbols created this way are never collected, so 2136a221880197f38ff22d942851060daffa5d036bdfmachenbach@chromium.org // they should only be used for statically fixed properties. 2137a221880197f38ff22d942851060daffa5d036bdfmachenbach@chromium.org // Also, there is only one global name space for the names used as keys. 2138a221880197f38ff22d942851060daffa5d036bdfmachenbach@chromium.org // To minimize the potential for clashes, use qualified names as keys, 2139a221880197f38ff22d942851060daffa5d036bdfmachenbach@chromium.org // e.g., "Class#property". 2140a221880197f38ff22d942851060daffa5d036bdfmachenbach@chromium.org static Local<Private> ForApi(Isolate *isolate, Local<String> name); 21410cc095007a3ccded63f6577751c6a04300eb7ae9machenbach@chromium.org 21420cc095007a3ccded63f6577751c6a04300eb7ae9machenbach@chromium.org private: 21430cc095007a3ccded63f6577751c6a04300eb7ae9machenbach@chromium.org Private(); 21440cc095007a3ccded63f6577751c6a04300eb7ae9machenbach@chromium.org}; 21450cc095007a3ccded63f6577751c6a04300eb7ae9machenbach@chromium.org 21460cc095007a3ccded63f6577751c6a04300eb7ae9machenbach@chromium.org 21470cc095007a3ccded63f6577751c6a04300eb7ae9machenbach@chromium.org/** 2148727e995b7bba3c57fb1e5c156d386ca11894f781v * A JavaScript number value (ECMA-262, 4.3.20) 214943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen */ 2150594006017e46d82ed7146611dc12c20e3c509c7ddanno@chromium.orgclass V8_EXPORT Number : public Primitive { 215143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen public: 215246a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org double Value() const; 2153bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.org static Local<Number> New(Isolate* isolate, double value); 21544a35c5a501e5b966f895ddea8e19c3ca232cb23fdslomov@chromium.org V8_INLINE static Number* Cast(v8::Value* obj); 215543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen private: 215646a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org Number(); 215746a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org static void CheckCast(v8::Value* obj); 215843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen}; 215943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 216043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 216143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen/** 2162727e995b7bba3c57fb1e5c156d386ca11894f781v * A JavaScript value representing a signed integer. 216343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen */ 2164594006017e46d82ed7146611dc12c20e3c509c7ddanno@chromium.orgclass V8_EXPORT Integer : public Number { 216543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen public: 216637be408adf363bbe682921a4a690752fa0ec33femachenbach@chromium.org static Local<Integer> New(Isolate* isolate, int32_t value); 216737be408adf363bbe682921a4a690752fa0ec33femachenbach@chromium.org static Local<Integer> NewFromUnsigned(Isolate* isolate, uint32_t value); 216846a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org int64_t Value() const; 21694a35c5a501e5b966f895ddea8e19c3ca232cb23fdslomov@chromium.org V8_INLINE static Integer* Cast(v8::Value* obj); 217043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen private: 217146a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org Integer(); 217246a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org static void CheckCast(v8::Value* obj); 217343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen}; 217443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 217543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 217643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen/** 2177727e995b7bba3c57fb1e5c156d386ca11894f781v * A JavaScript value representing a 32-bit signed integer. 217843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen */ 2179594006017e46d82ed7146611dc12c20e3c509c7ddanno@chromium.orgclass V8_EXPORT Int32 : public Integer { 218043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen public: 218146a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org int32_t Value() const; 218243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen private: 218346a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org Int32(); 218443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen}; 218543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 218643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 218743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen/** 2188727e995b7bba3c57fb1e5c156d386ca11894f781v * A JavaScript value representing a 32-bit unsigned integer. 218943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen */ 2190594006017e46d82ed7146611dc12c20e3c509c7ddanno@chromium.orgclass V8_EXPORT Uint32 : public Integer { 219143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen public: 219246a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org uint32_t Value() const; 219343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen private: 219446a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org Uint32(); 219543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen}; 219643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 219743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 219843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenenum PropertyAttribute { 219943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen None = 0, 220043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen ReadOnly = 1 << 0, 220143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen DontEnum = 1 << 1, 220243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen DontDelete = 1 << 2 220343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen}; 220443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 22053811b436bf328d2ace6fe79ce99aeda71f9f06d3ager@chromium.orgenum ExternalArrayType { 2206af4fba3c6d2a18866505de3e6798757dd1448c6dmachenbach@chromium.org kExternalInt8Array = 1, 2207af4fba3c6d2a18866505de3e6798757dd1448c6dmachenbach@chromium.org kExternalUint8Array, 2208af4fba3c6d2a18866505de3e6798757dd1448c6dmachenbach@chromium.org kExternalInt16Array, 2209af4fba3c6d2a18866505de3e6798757dd1448c6dmachenbach@chromium.org kExternalUint16Array, 2210af4fba3c6d2a18866505de3e6798757dd1448c6dmachenbach@chromium.org kExternalInt32Array, 2211af4fba3c6d2a18866505de3e6798757dd1448c6dmachenbach@chromium.org kExternalUint32Array, 2212af4fba3c6d2a18866505de3e6798757dd1448c6dmachenbach@chromium.org kExternalFloat32Array, 2213af4fba3c6d2a18866505de3e6798757dd1448c6dmachenbach@chromium.org kExternalFloat64Array, 2214af4fba3c6d2a18866505de3e6798757dd1448c6dmachenbach@chromium.org kExternalUint8ClampedArray, 2215af4fba3c6d2a18866505de3e6798757dd1448c6dmachenbach@chromium.org 2216af4fba3c6d2a18866505de3e6798757dd1448c6dmachenbach@chromium.org // Legacy constant names 2217af4fba3c6d2a18866505de3e6798757dd1448c6dmachenbach@chromium.org kExternalByteArray = kExternalInt8Array, 2218af4fba3c6d2a18866505de3e6798757dd1448c6dmachenbach@chromium.org kExternalUnsignedByteArray = kExternalUint8Array, 2219af4fba3c6d2a18866505de3e6798757dd1448c6dmachenbach@chromium.org kExternalShortArray = kExternalInt16Array, 2220af4fba3c6d2a18866505de3e6798757dd1448c6dmachenbach@chromium.org kExternalUnsignedShortArray = kExternalUint16Array, 2221af4fba3c6d2a18866505de3e6798757dd1448c6dmachenbach@chromium.org kExternalIntArray = kExternalInt32Array, 2222af4fba3c6d2a18866505de3e6798757dd1448c6dmachenbach@chromium.org kExternalUnsignedIntArray = kExternalUint32Array, 2223af4fba3c6d2a18866505de3e6798757dd1448c6dmachenbach@chromium.org kExternalFloatArray = kExternalFloat32Array, 2224af4fba3c6d2a18866505de3e6798757dd1448c6dmachenbach@chromium.org kExternalDoubleArray = kExternalFloat64Array, 2225af4fba3c6d2a18866505de3e6798757dd1448c6dmachenbach@chromium.org kExternalPixelArray = kExternalUint8ClampedArray 22263811b436bf328d2ace6fe79ce99aeda71f9f06d3ager@chromium.org}; 22273811b436bf328d2ace6fe79ce99aeda71f9f06d3ager@chromium.org 222843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen/** 22299155e252524a2bf92aecd27493feafed86702312kmillikin@chromium.org * Accessor[Getter|Setter] are used as callback functions when 22309155e252524a2bf92aecd27493feafed86702312kmillikin@chromium.org * setting|getting a particular property. See Object and ObjectTemplate's 22319155e252524a2bf92aecd27493feafed86702312kmillikin@chromium.org * method SetAccessor. 22329155e252524a2bf92aecd27493feafed86702312kmillikin@chromium.org */ 2233bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.orgtypedef void (*AccessorGetterCallback)( 2234bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.org Local<String> property, 2235bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.org const PropertyCallbackInfo<Value>& info); 2236e2a8937454723a720c81acc3f9e4162b18999b43machenbach@chromium.orgtypedef void (*AccessorNameGetterCallback)( 2237e2a8937454723a720c81acc3f9e4162b18999b43machenbach@chromium.org Local<Name> property, 2238e2a8937454723a720c81acc3f9e4162b18999b43machenbach@chromium.org const PropertyCallbackInfo<Value>& info); 22399155e252524a2bf92aecd27493feafed86702312kmillikin@chromium.org 22409155e252524a2bf92aecd27493feafed86702312kmillikin@chromium.org 2241bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.orgtypedef void (*AccessorSetterCallback)( 2242bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.org Local<String> property, 2243bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.org Local<Value> value, 2244bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.org const PropertyCallbackInfo<void>& info); 2245e2a8937454723a720c81acc3f9e4162b18999b43machenbach@chromium.orgtypedef void (*AccessorNameSetterCallback)( 2246e2a8937454723a720c81acc3f9e4162b18999b43machenbach@chromium.org Local<Name> property, 2247e2a8937454723a720c81acc3f9e4162b18999b43machenbach@chromium.org Local<Value> value, 2248e2a8937454723a720c81acc3f9e4162b18999b43machenbach@chromium.org const PropertyCallbackInfo<void>& info); 22499155e252524a2bf92aecd27493feafed86702312kmillikin@chromium.org 22509155e252524a2bf92aecd27493feafed86702312kmillikin@chromium.org 22519155e252524a2bf92aecd27493feafed86702312kmillikin@chromium.org/** 22529155e252524a2bf92aecd27493feafed86702312kmillikin@chromium.org * Access control specifications. 22539155e252524a2bf92aecd27493feafed86702312kmillikin@chromium.org * 22549155e252524a2bf92aecd27493feafed86702312kmillikin@chromium.org * Some accessors should be accessible across contexts. These 22559155e252524a2bf92aecd27493feafed86702312kmillikin@chromium.org * accessors have an explicit access control parameter which specifies 22569155e252524a2bf92aecd27493feafed86702312kmillikin@chromium.org * the kind of cross-context access that should be allowed. 22579155e252524a2bf92aecd27493feafed86702312kmillikin@chromium.org * 22588d8413cae4e7eb777aaed22e2901c19f8d5d1297machenbach@chromium.org * TODO(dcarney): Remove PROHIBITS_OVERWRITING as it is now unused. 22599155e252524a2bf92aecd27493feafed86702312kmillikin@chromium.org */ 22609155e252524a2bf92aecd27493feafed86702312kmillikin@chromium.orgenum AccessControl { 22619155e252524a2bf92aecd27493feafed86702312kmillikin@chromium.org DEFAULT = 0, 22629155e252524a2bf92aecd27493feafed86702312kmillikin@chromium.org ALL_CAN_READ = 1, 22639155e252524a2bf92aecd27493feafed86702312kmillikin@chromium.org ALL_CAN_WRITE = 1 << 1, 22649155e252524a2bf92aecd27493feafed86702312kmillikin@chromium.org PROHIBITS_OVERWRITING = 1 << 2 22659155e252524a2bf92aecd27493feafed86702312kmillikin@chromium.org}; 22669155e252524a2bf92aecd27493feafed86702312kmillikin@chromium.org 22679155e252524a2bf92aecd27493feafed86702312kmillikin@chromium.org 22689155e252524a2bf92aecd27493feafed86702312kmillikin@chromium.org/** 2269727e995b7bba3c57fb1e5c156d386ca11894f781v * A JavaScript object (ECMA-262, 4.3.3) 227043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen */ 2271594006017e46d82ed7146611dc12c20e3c509c7ddanno@chromium.orgclass V8_EXPORT Object : public Value { 227243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen public: 22739bf7aff6cc5ed8807b7b2abc11b6cf77b928ded1machenbach@chromium.org bool Set(Handle<Value> key, Handle<Value> value); 227465dad4b091d2925543c6326db635d0f7cf9e1edcager@chromium.org 227546a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org bool Set(uint32_t index, Handle<Value> value); 2276ce5e87bd905d592a8bd612b3dedf7a994177c13aager@chromium.org 2277fb547e07aef43e02715c5d6c1530e84bb3cbba02machenbach@chromium.org // Sets an own property on this object bypassing interceptors and 227865dad4b091d2925543c6326db635d0f7cf9e1edcager@chromium.org // overriding accessors or read-only properties. 227965dad4b091d2925543c6326db635d0f7cf9e1edcager@chromium.org // 228065dad4b091d2925543c6326db635d0f7cf9e1edcager@chromium.org // Note that if the object has an interceptor the property will be set 228165dad4b091d2925543c6326db635d0f7cf9e1edcager@chromium.org // locally, but since the interceptor takes precedence the local property 228265dad4b091d2925543c6326db635d0f7cf9e1edcager@chromium.org // will only be returned if the interceptor doesn't return a value. 228365dad4b091d2925543c6326db635d0f7cf9e1edcager@chromium.org // 228465dad4b091d2925543c6326db635d0f7cf9e1edcager@chromium.org // Note also that this only works for named properties. 228546a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org bool ForceSet(Handle<Value> key, 228646a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org Handle<Value> value, 228746a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org PropertyAttribute attribs = None); 2288e2902be65446e26fd63a3b4eab2f14257cf4ebafager@chromium.org 228946a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org Local<Value> Get(Handle<Value> key); 229043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 229146a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org Local<Value> Get(uint32_t index); 2292ce5e87bd905d592a8bd612b3dedf7a994177c13aager@chromium.org 2293717967fd64e99e759ff094df6f069440cc866266rossberg@chromium.org /** 2294717967fd64e99e759ff094df6f069440cc866266rossberg@chromium.org * Gets the property attributes of a property which can be None or 2295717967fd64e99e759ff094df6f069440cc866266rossberg@chromium.org * any combination of ReadOnly, DontEnum and DontDelete. Returns 2296717967fd64e99e759ff094df6f069440cc866266rossberg@chromium.org * None when the property doesn't exist. 2297717967fd64e99e759ff094df6f069440cc866266rossberg@chromium.org */ 229846a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org PropertyAttribute GetPropertyAttributes(Handle<Value> key); 2299717967fd64e99e759ff094df6f069440cc866266rossberg@chromium.org 2300d0bddc653152f270a27fe32d5d7b0f5c0fa3b00cmachenbach@chromium.org /** 2301d0bddc653152f270a27fe32d5d7b0f5c0fa3b00cmachenbach@chromium.org * Returns Object.getOwnPropertyDescriptor as per ES5 section 15.2.3.3. 2302d0bddc653152f270a27fe32d5d7b0f5c0fa3b00cmachenbach@chromium.org */ 2303d0bddc653152f270a27fe32d5d7b0f5c0fa3b00cmachenbach@chromium.org Local<Value> GetOwnPropertyDescriptor(Local<String> key); 2304d0bddc653152f270a27fe32d5d7b0f5c0fa3b00cmachenbach@chromium.org 2305e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org bool Has(Handle<Value> key); 2306e2902be65446e26fd63a3b4eab2f14257cf4ebafager@chromium.org 2307e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org bool Delete(Handle<Value> key); 2308e2902be65446e26fd63a3b4eab2f14257cf4ebafager@chromium.org 2309e2902be65446e26fd63a3b4eab2f14257cf4ebafager@chromium.org // Delete a property on this object bypassing interceptors and 2310e2902be65446e26fd63a3b4eab2f14257cf4ebafager@chromium.org // ignoring dont-delete attributes. 231146a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org bool ForceDelete(Handle<Value> key); 2312e2902be65446e26fd63a3b4eab2f14257cf4ebafager@chromium.org 231346a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org bool Has(uint32_t index); 2314e2902be65446e26fd63a3b4eab2f14257cf4ebafager@chromium.org 231546a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org bool Delete(uint32_t index); 231643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 2317bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.org bool SetAccessor(Handle<String> name, 2318bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.org AccessorGetterCallback getter, 2319bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.org AccessorSetterCallback setter = 0, 2320bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.org Handle<Value> data = Handle<Value>(), 2321bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.org AccessControl settings = DEFAULT, 2322bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.org PropertyAttribute attribute = None); 2323e2a8937454723a720c81acc3f9e4162b18999b43machenbach@chromium.org bool SetAccessor(Handle<Name> name, 2324e2a8937454723a720c81acc3f9e4162b18999b43machenbach@chromium.org AccessorNameGetterCallback getter, 2325e2a8937454723a720c81acc3f9e4162b18999b43machenbach@chromium.org AccessorNameSetterCallback setter = 0, 2326e2a8937454723a720c81acc3f9e4162b18999b43machenbach@chromium.org Handle<Value> data = Handle<Value>(), 2327e2a8937454723a720c81acc3f9e4162b18999b43machenbach@chromium.org AccessControl settings = DEFAULT, 2328e2a8937454723a720c81acc3f9e4162b18999b43machenbach@chromium.org PropertyAttribute attribute = None); 23299155e252524a2bf92aecd27493feafed86702312kmillikin@chromium.org 2330750145ab1b720c97adf2b548cc8fbd28c8b8e06dulan@chromium.org // This function is not yet stable and should not be used at this time. 2331e2a8937454723a720c81acc3f9e4162b18999b43machenbach@chromium.org bool SetDeclaredAccessor(Local<Name> name, 23323d00d0a753cf5e5091f883517e6612ece769f999jkummerow@chromium.org Local<DeclaredAccessorDescriptor> descriptor, 23333d00d0a753cf5e5091f883517e6612ece769f999jkummerow@chromium.org PropertyAttribute attribute = None, 23343d00d0a753cf5e5091f883517e6612ece769f999jkummerow@chromium.org AccessControl settings = DEFAULT); 2335750145ab1b720c97adf2b548cc8fbd28c8b8e06dulan@chromium.org 2336e2a8937454723a720c81acc3f9e4162b18999b43machenbach@chromium.org void SetAccessorProperty(Local<Name> name, 2337a221880197f38ff22d942851060daffa5d036bdfmachenbach@chromium.org Local<Function> getter, 2338a221880197f38ff22d942851060daffa5d036bdfmachenbach@chromium.org Handle<Function> setter = Handle<Function>(), 2339a221880197f38ff22d942851060daffa5d036bdfmachenbach@chromium.org PropertyAttribute attribute = None, 2340a221880197f38ff22d942851060daffa5d036bdfmachenbach@chromium.org AccessControl settings = DEFAULT); 2341a221880197f38ff22d942851060daffa5d036bdfmachenbach@chromium.org 234243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen /** 23430cc095007a3ccded63f6577751c6a04300eb7ae9machenbach@chromium.org * Functionality for private properties. 23440cc095007a3ccded63f6577751c6a04300eb7ae9machenbach@chromium.org * This is an experimental feature, use at your own risk. 23450cc095007a3ccded63f6577751c6a04300eb7ae9machenbach@chromium.org * Note: Private properties are inherited. Do not rely on this, since it may 23460cc095007a3ccded63f6577751c6a04300eb7ae9machenbach@chromium.org * change. 23470cc095007a3ccded63f6577751c6a04300eb7ae9machenbach@chromium.org */ 23480cc095007a3ccded63f6577751c6a04300eb7ae9machenbach@chromium.org bool HasPrivate(Handle<Private> key); 23490cc095007a3ccded63f6577751c6a04300eb7ae9machenbach@chromium.org bool SetPrivate(Handle<Private> key, Handle<Value> value); 23500cc095007a3ccded63f6577751c6a04300eb7ae9machenbach@chromium.org bool DeletePrivate(Handle<Private> key); 23510cc095007a3ccded63f6577751c6a04300eb7ae9machenbach@chromium.org Local<Value> GetPrivate(Handle<Private> key); 23520cc095007a3ccded63f6577751c6a04300eb7ae9machenbach@chromium.org 23530cc095007a3ccded63f6577751c6a04300eb7ae9machenbach@chromium.org /** 23545a8ca6c70c6fc9716f18f6223c98d1fef5752cf6kasperl@chromium.org * Returns an array containing the names of the enumerable properties 23555a8ca6c70c6fc9716f18f6223c98d1fef5752cf6kasperl@chromium.org * of this object, including properties from prototype objects. The 23565a8ca6c70c6fc9716f18f6223c98d1fef5752cf6kasperl@chromium.org * array returned by this method contains the same values as would 23575a8ca6c70c6fc9716f18f6223c98d1fef5752cf6kasperl@chromium.org * be enumerated by a for-in statement over this object. 23585a8ca6c70c6fc9716f18f6223c98d1fef5752cf6kasperl@chromium.org */ 235946a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org Local<Array> GetPropertyNames(); 23605a8ca6c70c6fc9716f18f6223c98d1fef5752cf6kasperl@chromium.org 23615a8ca6c70c6fc9716f18f6223c98d1fef5752cf6kasperl@chromium.org /** 23626d786c9805481bd13ecb29c3155540f2f32950e1svenpanne@chromium.org * This function has the same functionality as GetPropertyNames but 23636d786c9805481bd13ecb29c3155540f2f32950e1svenpanne@chromium.org * the returned array doesn't contain the names of properties from 23646d786c9805481bd13ecb29c3155540f2f32950e1svenpanne@chromium.org * prototype objects. 23656d786c9805481bd13ecb29c3155540f2f32950e1svenpanne@chromium.org */ 236646a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org Local<Array> GetOwnPropertyNames(); 23676d786c9805481bd13ecb29c3155540f2f32950e1svenpanne@chromium.org 23686d786c9805481bd13ecb29c3155540f2f32950e1svenpanne@chromium.org /** 236943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * Get the prototype object. This does not skip objects marked to 237043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * be skipped by __proto__ and it does not consult the security 237143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * handler. 237243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen */ 237346a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org Local<Value> GetPrototype(); 237443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 237543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen /** 23765c838251403b0be9a882540f1922577abba4c872ager@chromium.org * Set the prototype object. This does not skip objects marked to 23775c838251403b0be9a882540f1922577abba4c872ager@chromium.org * be skipped by __proto__ and it does not consult the security 23785c838251403b0be9a882540f1922577abba4c872ager@chromium.org * handler. 23795c838251403b0be9a882540f1922577abba4c872ager@chromium.org */ 238046a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org bool SetPrototype(Handle<Value> prototype); 23815c838251403b0be9a882540f1922577abba4c872ager@chromium.org 23825c838251403b0be9a882540f1922577abba4c872ager@chromium.org /** 2383900d3b7262f6cf66f9e2d89ceb64ffd929c6cca0sgjesse@chromium.org * Finds an instance of the given function template in the prototype 2384900d3b7262f6cf66f9e2d89ceb64ffd929c6cca0sgjesse@chromium.org * chain. 2385900d3b7262f6cf66f9e2d89ceb64ffd929c6cca0sgjesse@chromium.org */ 238646a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org Local<Object> FindInstanceInPrototypeChain(Handle<FunctionTemplate> tmpl); 2387900d3b7262f6cf66f9e2d89ceb64ffd929c6cca0sgjesse@chromium.org 2388900d3b7262f6cf66f9e2d89ceb64ffd929c6cca0sgjesse@chromium.org /** 238943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * Call builtin Object.prototype.toString on this object. 239043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * This is different from Value::ToString() that may call 239143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * user-defined toString function. This one does not. 239243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen */ 239346a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org Local<String> ObjectProtoToString(); 239443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 2395beb2571dca14508fbbbb47a2f606327d5968ee92ager@chromium.org /** 2396beb2571dca14508fbbbb47a2f606327d5968ee92ager@chromium.org * Returns the name of the function invoked as a constructor for this object. 2397beb2571dca14508fbbbb47a2f606327d5968ee92ager@chromium.org */ 239846a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org Local<String> GetConstructorName(); 2399beb2571dca14508fbbbb47a2f606327d5968ee92ager@chromium.org 2400212ac23f8231d169b4aa6737d762099993020826kasper.lund /** Gets the number of internal fields for this Object. */ 240146a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org int InternalFieldCount(); 2402eeb44b681a16e45f1415dfacff0ba3dba9de5d8cyangguo@chromium.org 2403ca2f2040e0e1a10df95bec18e69499f85f4c1316machenbach@chromium.org /** Same as above, but works for Persistents */ 2404ca2f2040e0e1a10df95bec18e69499f85f4c1316machenbach@chromium.org V8_INLINE static int InternalFieldCount( 2405ca2f2040e0e1a10df95bec18e69499f85f4c1316machenbach@chromium.org const PersistentBase<Object>& object) { 2406ca2f2040e0e1a10df95bec18e69499f85f4c1316machenbach@chromium.org return object.val_->InternalFieldCount(); 2407ca2f2040e0e1a10df95bec18e69499f85f4c1316machenbach@chromium.org } 2408ca2f2040e0e1a10df95bec18e69499f85f4c1316machenbach@chromium.org 2409eeb44b681a16e45f1415dfacff0ba3dba9de5d8cyangguo@chromium.org /** Gets the value from an internal field. */ 24104a35c5a501e5b966f895ddea8e19c3ca232cb23fdslomov@chromium.org V8_INLINE Local<Value> GetInternalField(int index); 2411eeb44b681a16e45f1415dfacff0ba3dba9de5d8cyangguo@chromium.org 2412212ac23f8231d169b4aa6737d762099993020826kasper.lund /** Sets the value in an internal field. */ 241346a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org void SetInternalField(int index, Handle<Value> value); 24149d58c2b1c27d8b2890b9bd46e57d3842b09e0292christian.plesner.hansen@gmail.com 2415eeb44b681a16e45f1415dfacff0ba3dba9de5d8cyangguo@chromium.org /** 2416eeb44b681a16e45f1415dfacff0ba3dba9de5d8cyangguo@chromium.org * Gets a 2-byte-aligned native pointer from an internal field. This field 2417eeb44b681a16e45f1415dfacff0ba3dba9de5d8cyangguo@chromium.org * must have been set by SetAlignedPointerInInternalField, everything else 2418eeb44b681a16e45f1415dfacff0ba3dba9de5d8cyangguo@chromium.org * leads to undefined behavior. 2419eeb44b681a16e45f1415dfacff0ba3dba9de5d8cyangguo@chromium.org */ 24204a35c5a501e5b966f895ddea8e19c3ca232cb23fdslomov@chromium.org V8_INLINE void* GetAlignedPointerFromInternalField(int index); 2421eeb44b681a16e45f1415dfacff0ba3dba9de5d8cyangguo@chromium.org 2422ca2f2040e0e1a10df95bec18e69499f85f4c1316machenbach@chromium.org /** Same as above, but works for Persistents */ 2423ca2f2040e0e1a10df95bec18e69499f85f4c1316machenbach@chromium.org V8_INLINE static void* GetAlignedPointerFromInternalField( 2424ca2f2040e0e1a10df95bec18e69499f85f4c1316machenbach@chromium.org const PersistentBase<Object>& object, int index) { 2425ca2f2040e0e1a10df95bec18e69499f85f4c1316machenbach@chromium.org return object.val_->GetAlignedPointerFromInternalField(index); 2426ca2f2040e0e1a10df95bec18e69499f85f4c1316machenbach@chromium.org } 2427ca2f2040e0e1a10df95bec18e69499f85f4c1316machenbach@chromium.org 2428eeb44b681a16e45f1415dfacff0ba3dba9de5d8cyangguo@chromium.org /** 2429eeb44b681a16e45f1415dfacff0ba3dba9de5d8cyangguo@chromium.org * Sets a 2-byte-aligned native pointer in an internal field. To retrieve such 2430eeb44b681a16e45f1415dfacff0ba3dba9de5d8cyangguo@chromium.org * a field, GetAlignedPointerFromInternalField must be used, everything else 2431eeb44b681a16e45f1415dfacff0ba3dba9de5d8cyangguo@chromium.org * leads to undefined behavior. 2432eeb44b681a16e45f1415dfacff0ba3dba9de5d8cyangguo@chromium.org */ 243346a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org void SetAlignedPointerInInternalField(int index, void* value); 2434e959c18cf7193e2f021245584a3c8f1f32f82c92kasperl@chromium.org 243543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen // Testers for local properties. 243646a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org bool HasOwnProperty(Handle<String> key); 243746a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org bool HasRealNamedProperty(Handle<String> key); 243846a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org bool HasRealIndexedProperty(uint32_t index); 243946a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org bool HasRealNamedCallbackProperty(Handle<String> key); 244043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 244143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen /** 244243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * If result.IsEmpty() no real property was located in the prototype chain. 244343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * This means interceptors in the prototype chain are not called. 244443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen */ 244546a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org Local<Value> GetRealNamedPropertyInPrototypeChain(Handle<String> key); 244698aff2fe110015974dbb787dc353f9760034df71sgjesse@chromium.org 244798aff2fe110015974dbb787dc353f9760034df71sgjesse@chromium.org /** 244898aff2fe110015974dbb787dc353f9760034df71sgjesse@chromium.org * If result.IsEmpty() no real property was located on the object or 244998aff2fe110015974dbb787dc353f9760034df71sgjesse@chromium.org * in the prototype chain. 245098aff2fe110015974dbb787dc353f9760034df71sgjesse@chromium.org * This means interceptors in the prototype chain are not called. 245198aff2fe110015974dbb787dc353f9760034df71sgjesse@chromium.org */ 245246a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org Local<Value> GetRealNamedProperty(Handle<String> key); 245343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 245443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen /** Tests for a named lookup interceptor.*/ 245546a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org bool HasNamedLookupInterceptor(); 245643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 2457212ac23f8231d169b4aa6737d762099993020826kasper.lund /** Tests for an index lookup interceptor.*/ 245846a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org bool HasIndexedLookupInterceptor(); 245943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 24605a8ca6c70c6fc9716f18f6223c98d1fef5752cf6kasperl@chromium.org /** 24615a8ca6c70c6fc9716f18f6223c98d1fef5752cf6kasperl@chromium.org * Turns on access check on the object if the object is an instance of 24625a8ca6c70c6fc9716f18f6223c98d1fef5752cf6kasperl@chromium.org * a template that has access check callbacks. If an object has no 24635a8ca6c70c6fc9716f18f6223c98d1fef5752cf6kasperl@chromium.org * access check info, the object cannot be accessed by anyone. 24645a8ca6c70c6fc9716f18f6223c98d1fef5752cf6kasperl@chromium.org */ 246546a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org void TurnOnAccessCheck(); 246641826e77311db718135ef6517b846933dfd275f3ager@chromium.org 24673b45ab59f57a3f7a11fdc5278839a881780cb9cbager@chromium.org /** 24687304bcac06a6a63b9f3dcebac2eeceada87ca146vegorov@chromium.org * Returns the identity hash for this object. The current implementation 24697304bcac06a6a63b9f3dcebac2eeceada87ca146vegorov@chromium.org * uses a hidden property on the object to store the identity hash. 24705ec4892aef9cca42940d7d92302abf674365f6b7ager@chromium.org * 24719085a016223a6b72bf580d5781c93ec7b9e54422ager@chromium.org * The return value will never be 0. Also, it is not guaranteed to be 24725ec4892aef9cca42940d7d92302abf674365f6b7ager@chromium.org * unique. 24733b45ab59f57a3f7a11fdc5278839a881780cb9cbager@chromium.org */ 247446a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org int GetIdentityHash(); 247541826e77311db718135ef6517b846933dfd275f3ager@chromium.org 24763b45ab59f57a3f7a11fdc5278839a881780cb9cbager@chromium.org /** 24773b45ab59f57a3f7a11fdc5278839a881780cb9cbager@chromium.org * Access hidden properties on JavaScript objects. These properties are 24783b45ab59f57a3f7a11fdc5278839a881780cb9cbager@chromium.org * hidden from the executing JavaScript and only accessible through the V8 24793b45ab59f57a3f7a11fdc5278839a881780cb9cbager@chromium.org * C++ API. Hidden properties introduced by V8 internally (for example the 24803b45ab59f57a3f7a11fdc5278839a881780cb9cbager@chromium.org * identity hash) are prefixed with "v8::". 24813b45ab59f57a3f7a11fdc5278839a881780cb9cbager@chromium.org */ 248246a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org bool SetHiddenValue(Handle<String> key, Handle<Value> value); 248346a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org Local<Value> GetHiddenValue(Handle<String> key); 248446a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org bool DeleteHiddenValue(Handle<String> key); 24859d58c2b1c27d8b2890b9bd46e57d3842b09e0292christian.plesner.hansen@gmail.com 24862bc58ef330b2d92ba287754282872699c151db4achristian.plesner.hansen@gmail.com /** 24872bc58ef330b2d92ba287754282872699c151db4achristian.plesner.hansen@gmail.com * Returns true if this is an instance of an api function (one 24882bc58ef330b2d92ba287754282872699c151db4achristian.plesner.hansen@gmail.com * created from a function created from a function template) and has 24892bc58ef330b2d92ba287754282872699c151db4achristian.plesner.hansen@gmail.com * been modified since it was created. Note that this method is 24902bc58ef330b2d92ba287754282872699c151db4achristian.plesner.hansen@gmail.com * conservative and may return true for objects that haven't actually 24912bc58ef330b2d92ba287754282872699c151db4achristian.plesner.hansen@gmail.com * been modified. 24922bc58ef330b2d92ba287754282872699c151db4achristian.plesner.hansen@gmail.com */ 249346a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org bool IsDirty(); 24943b45ab59f57a3f7a11fdc5278839a881780cb9cbager@chromium.org 24953b45ab59f57a3f7a11fdc5278839a881780cb9cbager@chromium.org /** 24963b45ab59f57a3f7a11fdc5278839a881780cb9cbager@chromium.org * Clone this object with a fast but shallow copy. Values will point 24973b45ab59f57a3f7a11fdc5278839a881780cb9cbager@chromium.org * to the same values as the original object. 24983b45ab59f57a3f7a11fdc5278839a881780cb9cbager@chromium.org */ 249946a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org Local<Object> Clone(); 250043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 25010b6db5975a9d1ebcf3de7b18603380d99f789e66sgjesse@chromium.org /** 2502c36ce6e8979bbbd43539f0a0effc87ea20dd65cckmillikin@chromium.org * Returns the context in which the object was created. 2503c36ce6e8979bbbd43539f0a0effc87ea20dd65cckmillikin@chromium.org */ 250446a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org Local<Context> CreationContext(); 2505c36ce6e8979bbbd43539f0a0effc87ea20dd65cckmillikin@chromium.org 2506c36ce6e8979bbbd43539f0a0effc87ea20dd65cckmillikin@chromium.org /** 25070b6db5975a9d1ebcf3de7b18603380d99f789e66sgjesse@chromium.org * Set the backing store of the indexed properties to be managed by the 25080b6db5975a9d1ebcf3de7b18603380d99f789e66sgjesse@chromium.org * embedding layer. Access to the indexed properties will follow the rules 25090b6db5975a9d1ebcf3de7b18603380d99f789e66sgjesse@chromium.org * spelled out in CanvasPixelArray. 25100b6db5975a9d1ebcf3de7b18603380d99f789e66sgjesse@chromium.org * Note: The embedding program still owns the data and needs to ensure that 25110b6db5975a9d1ebcf3de7b18603380d99f789e66sgjesse@chromium.org * the backing store is preserved while V8 has a reference. 25120b6db5975a9d1ebcf3de7b18603380d99f789e66sgjesse@chromium.org */ 251346a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org void SetIndexedPropertiesToPixelData(uint8_t* data, int length); 251446a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org bool HasIndexedPropertiesInPixelData(); 251546a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org uint8_t* GetIndexedPropertiesPixelData(); 251646a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org int GetIndexedPropertiesPixelDataLength(); 25170b6db5975a9d1ebcf3de7b18603380d99f789e66sgjesse@chromium.org 25183811b436bf328d2ace6fe79ce99aeda71f9f06d3ager@chromium.org /** 25193811b436bf328d2ace6fe79ce99aeda71f9f06d3ager@chromium.org * Set the backing store of the indexed properties to be managed by the 25203811b436bf328d2ace6fe79ce99aeda71f9f06d3ager@chromium.org * embedding layer. Access to the indexed properties will follow the rules 25213811b436bf328d2ace6fe79ce99aeda71f9f06d3ager@chromium.org * spelled out for the CanvasArray subtypes in the WebGL specification. 25223811b436bf328d2ace6fe79ce99aeda71f9f06d3ager@chromium.org * Note: The embedding program still owns the data and needs to ensure that 25233811b436bf328d2ace6fe79ce99aeda71f9f06d3ager@chromium.org * the backing store is preserved while V8 has a reference. 25243811b436bf328d2ace6fe79ce99aeda71f9f06d3ager@chromium.org */ 252546a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org void SetIndexedPropertiesToExternalArrayData(void* data, 252646a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org ExternalArrayType array_type, 252746a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org int number_of_elements); 252846a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org bool HasIndexedPropertiesInExternalArrayData(); 252946a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org void* GetIndexedPropertiesExternalArrayData(); 253046a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org ExternalArrayType GetIndexedPropertiesExternalArrayDataType(); 253146a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org int GetIndexedPropertiesExternalArrayDataLength(); 25323811b436bf328d2ace6fe79ce99aeda71f9f06d3ager@chromium.org 25331c09276ce2ac5214e81ca554360b9f101187893blrn@chromium.org /** 253483a4728861129dc263ded92157f3e6389f851f19karlklose@chromium.org * Checks whether a callback is set by the 253583a4728861129dc263ded92157f3e6389f851f19karlklose@chromium.org * ObjectTemplate::SetCallAsFunctionHandler method. 253683a4728861129dc263ded92157f3e6389f851f19karlklose@chromium.org * When an Object is callable this method returns true. 253783a4728861129dc263ded92157f3e6389f851f19karlklose@chromium.org */ 253846a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org bool IsCallable(); 253983a4728861129dc263ded92157f3e6389f851f19karlklose@chromium.org 254083a4728861129dc263ded92157f3e6389f851f19karlklose@chromium.org /** 25411805e21b0aece8c05f4960a5c0751c4463557891fschneider@chromium.org * Call an Object as a function if a callback is set by the 25421c09276ce2ac5214e81ca554360b9f101187893blrn@chromium.org * ObjectTemplate::SetCallAsFunctionHandler method. 25431c09276ce2ac5214e81ca554360b9f101187893blrn@chromium.org */ 2544c3669763e2617aefdac84a072327b201b3dff129jkummerow@chromium.org Local<Value> CallAsFunction(Handle<Value> recv, 254546a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org int argc, 254646a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org Handle<Value> argv[]); 25471c09276ce2ac5214e81ca554360b9f101187893blrn@chromium.org 25481c09276ce2ac5214e81ca554360b9f101187893blrn@chromium.org /** 25497304bcac06a6a63b9f3dcebac2eeceada87ca146vegorov@chromium.org * Call an Object as a constructor if a callback is set by the 25501c09276ce2ac5214e81ca554360b9f101187893blrn@chromium.org * ObjectTemplate::SetCallAsFunctionHandler method. 25511c09276ce2ac5214e81ca554360b9f101187893blrn@chromium.org * Note: This method behaves like the Function::NewInstance method. 25521c09276ce2ac5214e81ca554360b9f101187893blrn@chromium.org */ 255346a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org Local<Value> CallAsConstructor(int argc, Handle<Value> argv[]); 25541c09276ce2ac5214e81ca554360b9f101187893blrn@chromium.org 255537be408adf363bbe682921a4a690752fa0ec33femachenbach@chromium.org static Local<Object> New(Isolate* isolate); 25560f13e74b7310d8b14f19c6b93b36ff95059f97f6ulan@chromium.org 25574a35c5a501e5b966f895ddea8e19c3ca232cb23fdslomov@chromium.org V8_INLINE static Object* Cast(Value* obj); 2558e297f5973a8a9ff0d9945da3f1e2d8a6230c294djkummerow@chromium.org 255943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen private: 256046a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org Object(); 256146a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org static void CheckCast(Value* obj); 256246a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org Local<Value> SlowGetInternalField(int index); 256346a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org void* SlowGetAlignedPointerFromInternalField(int index); 256443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen}; 256543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 256643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 256743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen/** 256843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * An instance of the built-in array constructor (ECMA-262, 15.4.2). 256943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen */ 2570594006017e46d82ed7146611dc12c20e3c509c7ddanno@chromium.orgclass V8_EXPORT Array : public Object { 257143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen public: 257246a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org uint32_t Length() const; 257343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 25743e87580939cb78c5802369f723680d4a16cc2902ager@chromium.org /** 25753e87580939cb78c5802369f723680d4a16cc2902ager@chromium.org * Clones an element at index |index|. Returns an empty 25763e87580939cb78c5802369f723680d4a16cc2902ager@chromium.org * handle if cloning fails (for any reason). 25773e87580939cb78c5802369f723680d4a16cc2902ager@chromium.org */ 257846a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org Local<Object> CloneElementAt(uint32_t index); 25793e87580939cb78c5802369f723680d4a16cc2902ager@chromium.org 2580badaffc570baec00166b0ad3bdc96995751a7e13ricow@chromium.org /** 2581badaffc570baec00166b0ad3bdc96995751a7e13ricow@chromium.org * Creates a JavaScript array with the given length. If the length 2582badaffc570baec00166b0ad3bdc96995751a7e13ricow@chromium.org * is negative the returned array will have length 0. 2583badaffc570baec00166b0ad3bdc96995751a7e13ricow@chromium.org */ 258437be408adf363bbe682921a4a690752fa0ec33femachenbach@chromium.org static Local<Array> New(Isolate* isolate, int length = 0); 2585badaffc570baec00166b0ad3bdc96995751a7e13ricow@chromium.org 25864a35c5a501e5b966f895ddea8e19c3ca232cb23fdslomov@chromium.org V8_INLINE static Array* Cast(Value* obj); 258743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen private: 258846a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org Array(); 258946a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org static void CheckCast(Value* obj); 259043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen}; 259143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 259243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 2593639bac0c5319f96e1bbe3399fb7f7f37344928bddslomov@chromium.orgtemplate<typename T> 2594639bac0c5319f96e1bbe3399fb7f7f37344928bddslomov@chromium.orgclass ReturnValue { 2595639bac0c5319f96e1bbe3399fb7f7f37344928bddslomov@chromium.org public: 25964a35c5a501e5b966f895ddea8e19c3ca232cb23fdslomov@chromium.org template <class S> V8_INLINE ReturnValue(const ReturnValue<S>& that) 2597639bac0c5319f96e1bbe3399fb7f7f37344928bddslomov@chromium.org : value_(that.value_) { 2598639bac0c5319f96e1bbe3399fb7f7f37344928bddslomov@chromium.org TYPE_CHECK(T, S); 2599639bac0c5319f96e1bbe3399fb7f7f37344928bddslomov@chromium.org } 2600639bac0c5319f96e1bbe3399fb7f7f37344928bddslomov@chromium.org // Handle setters 26014a35c5a501e5b966f895ddea8e19c3ca232cb23fdslomov@chromium.org template <typename S> V8_INLINE void Set(const Persistent<S>& handle); 26024a35c5a501e5b966f895ddea8e19c3ca232cb23fdslomov@chromium.org template <typename S> V8_INLINE void Set(const Handle<S> handle); 2603639bac0c5319f96e1bbe3399fb7f7f37344928bddslomov@chromium.org // Fast primitive setters 26044a35c5a501e5b966f895ddea8e19c3ca232cb23fdslomov@chromium.org V8_INLINE void Set(bool value); 26054a35c5a501e5b966f895ddea8e19c3ca232cb23fdslomov@chromium.org V8_INLINE void Set(double i); 26064a35c5a501e5b966f895ddea8e19c3ca232cb23fdslomov@chromium.org V8_INLINE void Set(int32_t i); 26074a35c5a501e5b966f895ddea8e19c3ca232cb23fdslomov@chromium.org V8_INLINE void Set(uint32_t i); 2608639bac0c5319f96e1bbe3399fb7f7f37344928bddslomov@chromium.org // Fast JS primitive setters 26094a35c5a501e5b966f895ddea8e19c3ca232cb23fdslomov@chromium.org V8_INLINE void SetNull(); 26104a35c5a501e5b966f895ddea8e19c3ca232cb23fdslomov@chromium.org V8_INLINE void SetUndefined(); 26114a35c5a501e5b966f895ddea8e19c3ca232cb23fdslomov@chromium.org V8_INLINE void SetEmptyString(); 2612639bac0c5319f96e1bbe3399fb7f7f37344928bddslomov@chromium.org // Convenience getter for Isolate 26134a35c5a501e5b966f895ddea8e19c3ca232cb23fdslomov@chromium.org V8_INLINE Isolate* GetIsolate(); 2614639bac0c5319f96e1bbe3399fb7f7f37344928bddslomov@chromium.org 26153c3c8d733702cb2b41471efa5eead1faf5b5711bmachenbach@chromium.org // Pointer setter: Uncompilable to prevent inadvertent misuse. 26163c3c8d733702cb2b41471efa5eead1faf5b5711bmachenbach@chromium.org template <typename S> 26173c3c8d733702cb2b41471efa5eead1faf5b5711bmachenbach@chromium.org V8_INLINE void Set(S* whatever); 26183c3c8d733702cb2b41471efa5eead1faf5b5711bmachenbach@chromium.org 2619639bac0c5319f96e1bbe3399fb7f7f37344928bddslomov@chromium.org private: 2620639bac0c5319f96e1bbe3399fb7f7f37344928bddslomov@chromium.org template<class F> friend class ReturnValue; 2621639bac0c5319f96e1bbe3399fb7f7f37344928bddslomov@chromium.org template<class F> friend class FunctionCallbackInfo; 2622639bac0c5319f96e1bbe3399fb7f7f37344928bddslomov@chromium.org template<class F> friend class PropertyCallbackInfo; 2623381adef828187e237e8758ab730dee1c2834a0b3machenbach@chromium.org template<class F, class G, class H> friend class PersistentValueMap; 2624381adef828187e237e8758ab730dee1c2834a0b3machenbach@chromium.org V8_INLINE void SetInternal(internal::Object* value) { *value_ = value; } 26254a35c5a501e5b966f895ddea8e19c3ca232cb23fdslomov@chromium.org V8_INLINE internal::Object* GetDefaultValue(); 26264a35c5a501e5b966f895ddea8e19c3ca232cb23fdslomov@chromium.org V8_INLINE explicit ReturnValue(internal::Object** slot); 2627639bac0c5319f96e1bbe3399fb7f7f37344928bddslomov@chromium.org internal::Object** value_; 2628639bac0c5319f96e1bbe3399fb7f7f37344928bddslomov@chromium.org}; 2629639bac0c5319f96e1bbe3399fb7f7f37344928bddslomov@chromium.org 2630639bac0c5319f96e1bbe3399fb7f7f37344928bddslomov@chromium.org 2631639bac0c5319f96e1bbe3399fb7f7f37344928bddslomov@chromium.org/** 2632639bac0c5319f96e1bbe3399fb7f7f37344928bddslomov@chromium.org * The argument information given to function call callbacks. This 2633639bac0c5319f96e1bbe3399fb7f7f37344928bddslomov@chromium.org * class provides access to information about the context of the call, 2634639bac0c5319f96e1bbe3399fb7f7f37344928bddslomov@chromium.org * including the receiver, the number and values of arguments, and 2635639bac0c5319f96e1bbe3399fb7f7f37344928bddslomov@chromium.org * the holder of the function. 2636639bac0c5319f96e1bbe3399fb7f7f37344928bddslomov@chromium.org */ 2637639bac0c5319f96e1bbe3399fb7f7f37344928bddslomov@chromium.orgtemplate<typename T> 2638639bac0c5319f96e1bbe3399fb7f7f37344928bddslomov@chromium.orgclass FunctionCallbackInfo { 2639639bac0c5319f96e1bbe3399fb7f7f37344928bddslomov@chromium.org public: 26404a35c5a501e5b966f895ddea8e19c3ca232cb23fdslomov@chromium.org V8_INLINE int Length() const; 26414a35c5a501e5b966f895ddea8e19c3ca232cb23fdslomov@chromium.org V8_INLINE Local<Value> operator[](int i) const; 26424a35c5a501e5b966f895ddea8e19c3ca232cb23fdslomov@chromium.org V8_INLINE Local<Function> Callee() const; 26434a35c5a501e5b966f895ddea8e19c3ca232cb23fdslomov@chromium.org V8_INLINE Local<Object> This() const; 26444a35c5a501e5b966f895ddea8e19c3ca232cb23fdslomov@chromium.org V8_INLINE Local<Object> Holder() const; 26454a35c5a501e5b966f895ddea8e19c3ca232cb23fdslomov@chromium.org V8_INLINE bool IsConstructCall() const; 26464a35c5a501e5b966f895ddea8e19c3ca232cb23fdslomov@chromium.org V8_INLINE Local<Value> Data() const; 26474a35c5a501e5b966f895ddea8e19c3ca232cb23fdslomov@chromium.org V8_INLINE Isolate* GetIsolate() const; 26484a35c5a501e5b966f895ddea8e19c3ca232cb23fdslomov@chromium.org V8_INLINE ReturnValue<T> GetReturnValue() const; 2649639bac0c5319f96e1bbe3399fb7f7f37344928bddslomov@chromium.org // This shouldn't be public, but the arm compiler needs it. 2650528ce02b8680a3ab6d75c7079f180a4016c69b7amachenbach@chromium.org static const int kArgsLength = 7; 2651639bac0c5319f96e1bbe3399fb7f7f37344928bddslomov@chromium.org 2652639bac0c5319f96e1bbe3399fb7f7f37344928bddslomov@chromium.org protected: 2653639bac0c5319f96e1bbe3399fb7f7f37344928bddslomov@chromium.org friend class internal::FunctionCallbackArguments; 2654639bac0c5319f96e1bbe3399fb7f7f37344928bddslomov@chromium.org friend class internal::CustomArguments<FunctionCallbackInfo>; 2655fb7a7c4ffde9a4d060f5f989371e2ce964ee5831jkummerow@chromium.org static const int kHolderIndex = 0; 2656fb7a7c4ffde9a4d060f5f989371e2ce964ee5831jkummerow@chromium.org static const int kIsolateIndex = 1; 2657fb7a7c4ffde9a4d060f5f989371e2ce964ee5831jkummerow@chromium.org static const int kReturnValueDefaultValueIndex = 2; 2658fb7a7c4ffde9a4d060f5f989371e2ce964ee5831jkummerow@chromium.org static const int kReturnValueIndex = 3; 2659fb7a7c4ffde9a4d060f5f989371e2ce964ee5831jkummerow@chromium.org static const int kDataIndex = 4; 2660fb7a7c4ffde9a4d060f5f989371e2ce964ee5831jkummerow@chromium.org static const int kCalleeIndex = 5; 2661fb7a7c4ffde9a4d060f5f989371e2ce964ee5831jkummerow@chromium.org static const int kContextSaveIndex = 6; 2662639bac0c5319f96e1bbe3399fb7f7f37344928bddslomov@chromium.org 26634a35c5a501e5b966f895ddea8e19c3ca232cb23fdslomov@chromium.org V8_INLINE FunctionCallbackInfo(internal::Object** implicit_args, 2664639bac0c5319f96e1bbe3399fb7f7f37344928bddslomov@chromium.org internal::Object** values, 2665639bac0c5319f96e1bbe3399fb7f7f37344928bddslomov@chromium.org int length, 26664a35c5a501e5b966f895ddea8e19c3ca232cb23fdslomov@chromium.org bool is_construct_call); 2667639bac0c5319f96e1bbe3399fb7f7f37344928bddslomov@chromium.org internal::Object** implicit_args_; 2668639bac0c5319f96e1bbe3399fb7f7f37344928bddslomov@chromium.org internal::Object** values_; 2669639bac0c5319f96e1bbe3399fb7f7f37344928bddslomov@chromium.org int length_; 2670639bac0c5319f96e1bbe3399fb7f7f37344928bddslomov@chromium.org bool is_construct_call_; 2671639bac0c5319f96e1bbe3399fb7f7f37344928bddslomov@chromium.org}; 2672639bac0c5319f96e1bbe3399fb7f7f37344928bddslomov@chromium.org 2673639bac0c5319f96e1bbe3399fb7f7f37344928bddslomov@chromium.org 2674639bac0c5319f96e1bbe3399fb7f7f37344928bddslomov@chromium.org/** 2675639bac0c5319f96e1bbe3399fb7f7f37344928bddslomov@chromium.org * The information passed to a property callback about the context 2676639bac0c5319f96e1bbe3399fb7f7f37344928bddslomov@chromium.org * of the property access. 2677639bac0c5319f96e1bbe3399fb7f7f37344928bddslomov@chromium.org */ 2678639bac0c5319f96e1bbe3399fb7f7f37344928bddslomov@chromium.orgtemplate<typename T> 2679639bac0c5319f96e1bbe3399fb7f7f37344928bddslomov@chromium.orgclass PropertyCallbackInfo { 2680639bac0c5319f96e1bbe3399fb7f7f37344928bddslomov@chromium.org public: 26814a35c5a501e5b966f895ddea8e19c3ca232cb23fdslomov@chromium.org V8_INLINE Isolate* GetIsolate() const; 26824a35c5a501e5b966f895ddea8e19c3ca232cb23fdslomov@chromium.org V8_INLINE Local<Value> Data() const; 2683aa107b240dc43417fae8469b5c1b0f1ec9f98400machenbach@chromium.org V8_INLINE Local<Object> This() const; 26844a35c5a501e5b966f895ddea8e19c3ca232cb23fdslomov@chromium.org V8_INLINE Local<Object> Holder() const; 26854a35c5a501e5b966f895ddea8e19c3ca232cb23fdslomov@chromium.org V8_INLINE ReturnValue<T> GetReturnValue() const; 2686639bac0c5319f96e1bbe3399fb7f7f37344928bddslomov@chromium.org // This shouldn't be public, but the arm compiler needs it. 2687639bac0c5319f96e1bbe3399fb7f7f37344928bddslomov@chromium.org static const int kArgsLength = 6; 2688639bac0c5319f96e1bbe3399fb7f7f37344928bddslomov@chromium.org 2689639bac0c5319f96e1bbe3399fb7f7f37344928bddslomov@chromium.org protected: 2690639bac0c5319f96e1bbe3399fb7f7f37344928bddslomov@chromium.org friend class MacroAssembler; 2691639bac0c5319f96e1bbe3399fb7f7f37344928bddslomov@chromium.org friend class internal::PropertyCallbackArguments; 2692639bac0c5319f96e1bbe3399fb7f7f37344928bddslomov@chromium.org friend class internal::CustomArguments<PropertyCallbackInfo>; 2693fb7a7c4ffde9a4d060f5f989371e2ce964ee5831jkummerow@chromium.org static const int kHolderIndex = 0; 2694fb7a7c4ffde9a4d060f5f989371e2ce964ee5831jkummerow@chromium.org static const int kIsolateIndex = 1; 2695fb7a7c4ffde9a4d060f5f989371e2ce964ee5831jkummerow@chromium.org static const int kReturnValueDefaultValueIndex = 2; 2696fb7a7c4ffde9a4d060f5f989371e2ce964ee5831jkummerow@chromium.org static const int kReturnValueIndex = 3; 2697fb7a7c4ffde9a4d060f5f989371e2ce964ee5831jkummerow@chromium.org static const int kDataIndex = 4; 2698fb7a7c4ffde9a4d060f5f989371e2ce964ee5831jkummerow@chromium.org static const int kThisIndex = 5; 26994a35c5a501e5b966f895ddea8e19c3ca232cb23fdslomov@chromium.org 27004a35c5a501e5b966f895ddea8e19c3ca232cb23fdslomov@chromium.org V8_INLINE PropertyCallbackInfo(internal::Object** args) : args_(args) {} 2701639bac0c5319f96e1bbe3399fb7f7f37344928bddslomov@chromium.org internal::Object** args_; 2702639bac0c5319f96e1bbe3399fb7f7f37344928bddslomov@chromium.org}; 2703639bac0c5319f96e1bbe3399fb7f7f37344928bddslomov@chromium.org 2704639bac0c5319f96e1bbe3399fb7f7f37344928bddslomov@chromium.org 2705639bac0c5319f96e1bbe3399fb7f7f37344928bddslomov@chromium.orgtypedef void (*FunctionCallback)(const FunctionCallbackInfo<Value>& info); 2706639bac0c5319f96e1bbe3399fb7f7f37344928bddslomov@chromium.org 2707639bac0c5319f96e1bbe3399fb7f7f37344928bddslomov@chromium.org 270843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen/** 2709727e995b7bba3c57fb1e5c156d386ca11894f781v * A JavaScript function object (ECMA-262, 15.3). 271043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen */ 2711594006017e46d82ed7146611dc12c20e3c509c7ddanno@chromium.orgclass V8_EXPORT Function : public Object { 271243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen public: 2713639bac0c5319f96e1bbe3399fb7f7f37344928bddslomov@chromium.org /** 2714639bac0c5319f96e1bbe3399fb7f7f37344928bddslomov@chromium.org * Create a function in the current execution context 2715639bac0c5319f96e1bbe3399fb7f7f37344928bddslomov@chromium.org * for a given FunctionCallback. 2716639bac0c5319f96e1bbe3399fb7f7f37344928bddslomov@chromium.org */ 2717639bac0c5319f96e1bbe3399fb7f7f37344928bddslomov@chromium.org static Local<Function> New(Isolate* isolate, 2718639bac0c5319f96e1bbe3399fb7f7f37344928bddslomov@chromium.org FunctionCallback callback, 2719639bac0c5319f96e1bbe3399fb7f7f37344928bddslomov@chromium.org Local<Value> data = Local<Value>(), 2720639bac0c5319f96e1bbe3399fb7f7f37344928bddslomov@chromium.org int length = 0); 2721639bac0c5319f96e1bbe3399fb7f7f37344928bddslomov@chromium.org 272246a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org Local<Object> NewInstance() const; 272346a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org Local<Object> NewInstance(int argc, Handle<Value> argv[]) const; 2724c3669763e2617aefdac84a072327b201b3dff129jkummerow@chromium.org Local<Value> Call(Handle<Value> recv, int argc, Handle<Value> argv[]); 272546a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org void SetName(Handle<String> name); 272646a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org Handle<Value> GetName() const; 27275c838251403b0be9a882540f1922577abba4c872ager@chromium.org 27285c838251403b0be9a882540f1922577abba4c872ager@chromium.org /** 2729659ceec4628056d3c6e7076c850fba1c412cbb8ayangguo@chromium.org * Name inferred from variable or property assignment of this function. 2730659ceec4628056d3c6e7076c850fba1c412cbb8ayangguo@chromium.org * Used to facilitate debugging and profiling of JavaScript code written 2731659ceec4628056d3c6e7076c850fba1c412cbb8ayangguo@chromium.org * in an OO style, where many functions are anonymous but are assigned 2732659ceec4628056d3c6e7076c850fba1c412cbb8ayangguo@chromium.org * to object properties. 2733659ceec4628056d3c6e7076c850fba1c412cbb8ayangguo@chromium.org */ 273446a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org Handle<Value> GetInferredName() const; 2735659ceec4628056d3c6e7076c850fba1c412cbb8ayangguo@chromium.org 2736659ceec4628056d3c6e7076c850fba1c412cbb8ayangguo@chromium.org /** 2737c9913f099d68d3604e53b19d0fc5abe309143bdcbmeurer@chromium.org * User-defined name assigned to the "displayName" property of this function. 2738c9913f099d68d3604e53b19d0fc5abe309143bdcbmeurer@chromium.org * Used to facilitate debugging and profiling of JavaScript code. 2739c9913f099d68d3604e53b19d0fc5abe309143bdcbmeurer@chromium.org */ 2740c9913f099d68d3604e53b19d0fc5abe309143bdcbmeurer@chromium.org Handle<Value> GetDisplayName() const; 2741c9913f099d68d3604e53b19d0fc5abe309143bdcbmeurer@chromium.org 2742c9913f099d68d3604e53b19d0fc5abe309143bdcbmeurer@chromium.org /** 27435c838251403b0be9a882540f1922577abba4c872ager@chromium.org * Returns zero based line number of function body and 27445c838251403b0be9a882540f1922577abba4c872ager@chromium.org * kLineOffsetNotFound if no information available. 27455c838251403b0be9a882540f1922577abba4c872ager@chromium.org */ 274646a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org int GetScriptLineNumber() const; 2747c612e0211bdb8821cbd7886e15b0273ed82d2e9edanno@chromium.org /** 2748c612e0211bdb8821cbd7886e15b0273ed82d2e9edanno@chromium.org * Returns zero based column number of function body and 2749c612e0211bdb8821cbd7886e15b0273ed82d2e9edanno@chromium.org * kLineOffsetNotFound if no information available. 2750c612e0211bdb8821cbd7886e15b0273ed82d2e9edanno@chromium.org */ 275146a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org int GetScriptColumnNumber() const; 27521510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org 27531510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org /** 2754db783297aea0c1b0faf438598202d2abe10da70ebmeurer@chromium.org * Tells whether this function is builtin. 2755db783297aea0c1b0faf438598202d2abe10da70ebmeurer@chromium.org */ 2756db783297aea0c1b0faf438598202d2abe10da70ebmeurer@chromium.org bool IsBuiltin() const; 2757db783297aea0c1b0faf438598202d2abe10da70ebmeurer@chromium.org 2758db783297aea0c1b0faf438598202d2abe10da70ebmeurer@chromium.org /** 27591510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org * Returns scriptId. 27601510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org */ 27611510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org int ScriptId() const; 27621510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org 27634954674151afa960af66efb4831df06bde727333yangguo@chromium.org /** 27644954674151afa960af66efb4831df06bde727333yangguo@chromium.org * Returns the original function if this function is bound, else returns 27654954674151afa960af66efb4831df06bde727333yangguo@chromium.org * v8::Undefined. 27664954674151afa960af66efb4831df06bde727333yangguo@chromium.org */ 27674954674151afa960af66efb4831df06bde727333yangguo@chromium.org Local<Value> GetBoundFunction() const; 27684954674151afa960af66efb4831df06bde727333yangguo@chromium.org 276946a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org ScriptOrigin GetScriptOrigin() const; 27704a35c5a501e5b966f895ddea8e19c3ca232cb23fdslomov@chromium.org V8_INLINE static Function* Cast(Value* obj); 277146a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org static const int kLineOffsetNotFound; 2772c612e0211bdb8821cbd7886e15b0273ed82d2e9edanno@chromium.org 277343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen private: 277446a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org Function(); 277546a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org static void CheckCast(Value* obj); 277643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen}; 277743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 2778486536df718553960f9700559e80e5b10b0d5994dslomov@chromium.org 2779486536df718553960f9700559e80e5b10b0d5994dslomov@chromium.org/** 2780486536df718553960f9700559e80e5b10b0d5994dslomov@chromium.org * An instance of the built-in Promise constructor (ES6 draft). 2781486536df718553960f9700559e80e5b10b0d5994dslomov@chromium.org * This API is experimental. Only works with --harmony flag. 2782486536df718553960f9700559e80e5b10b0d5994dslomov@chromium.org */ 2783486536df718553960f9700559e80e5b10b0d5994dslomov@chromium.orgclass V8_EXPORT Promise : public Object { 2784486536df718553960f9700559e80e5b10b0d5994dslomov@chromium.org public: 27852904d1a42292be3056c2dd3f98822f8e1470fa72machenbach@chromium.org class V8_EXPORT Resolver : public Object { 27862904d1a42292be3056c2dd3f98822f8e1470fa72machenbach@chromium.org public: 27872904d1a42292be3056c2dd3f98822f8e1470fa72machenbach@chromium.org /** 27882904d1a42292be3056c2dd3f98822f8e1470fa72machenbach@chromium.org * Create a new resolver, along with an associated promise in pending state. 27892904d1a42292be3056c2dd3f98822f8e1470fa72machenbach@chromium.org */ 27902904d1a42292be3056c2dd3f98822f8e1470fa72machenbach@chromium.org static Local<Resolver> New(Isolate* isolate); 2791486536df718553960f9700559e80e5b10b0d5994dslomov@chromium.org 27922904d1a42292be3056c2dd3f98822f8e1470fa72machenbach@chromium.org /** 27932904d1a42292be3056c2dd3f98822f8e1470fa72machenbach@chromium.org * Extract the associated promise. 27942904d1a42292be3056c2dd3f98822f8e1470fa72machenbach@chromium.org */ 27952904d1a42292be3056c2dd3f98822f8e1470fa72machenbach@chromium.org Local<Promise> GetPromise(); 27962904d1a42292be3056c2dd3f98822f8e1470fa72machenbach@chromium.org 27972904d1a42292be3056c2dd3f98822f8e1470fa72machenbach@chromium.org /** 27982904d1a42292be3056c2dd3f98822f8e1470fa72machenbach@chromium.org * Resolve/reject the associated promise with a given value. 27992904d1a42292be3056c2dd3f98822f8e1470fa72machenbach@chromium.org * Ignored if the promise is no longer pending. 28002904d1a42292be3056c2dd3f98822f8e1470fa72machenbach@chromium.org */ 28012904d1a42292be3056c2dd3f98822f8e1470fa72machenbach@chromium.org void Resolve(Handle<Value> value); 28022904d1a42292be3056c2dd3f98822f8e1470fa72machenbach@chromium.org void Reject(Handle<Value> value); 28032904d1a42292be3056c2dd3f98822f8e1470fa72machenbach@chromium.org 28042904d1a42292be3056c2dd3f98822f8e1470fa72machenbach@chromium.org V8_INLINE static Resolver* Cast(Value* obj); 28052904d1a42292be3056c2dd3f98822f8e1470fa72machenbach@chromium.org 28062904d1a42292be3056c2dd3f98822f8e1470fa72machenbach@chromium.org private: 28072904d1a42292be3056c2dd3f98822f8e1470fa72machenbach@chromium.org Resolver(); 28082904d1a42292be3056c2dd3f98822f8e1470fa72machenbach@chromium.org static void CheckCast(Value* obj); 28092904d1a42292be3056c2dd3f98822f8e1470fa72machenbach@chromium.org }; 2810486536df718553960f9700559e80e5b10b0d5994dslomov@chromium.org 2811486536df718553960f9700559e80e5b10b0d5994dslomov@chromium.org /** 2812486536df718553960f9700559e80e5b10b0d5994dslomov@chromium.org * Register a resolution/rejection handler with a promise. 2813486536df718553960f9700559e80e5b10b0d5994dslomov@chromium.org * The handler is given the respective resolution/rejection value as 2814486536df718553960f9700559e80e5b10b0d5994dslomov@chromium.org * an argument. If the promise is already resolved/rejected, the handler is 2815486536df718553960f9700559e80e5b10b0d5994dslomov@chromium.org * invoked at the end of turn. 2816486536df718553960f9700559e80e5b10b0d5994dslomov@chromium.org */ 2817486536df718553960f9700559e80e5b10b0d5994dslomov@chromium.org Local<Promise> Chain(Handle<Function> handler); 2818486536df718553960f9700559e80e5b10b0d5994dslomov@chromium.org Local<Promise> Catch(Handle<Function> handler); 28191845eb0120c7a870d7388de091246a7d1b48a4f8machenbach@chromium.org Local<Promise> Then(Handle<Function> handler); 2820486536df718553960f9700559e80e5b10b0d5994dslomov@chromium.org 2821486536df718553960f9700559e80e5b10b0d5994dslomov@chromium.org V8_INLINE static Promise* Cast(Value* obj); 2822486536df718553960f9700559e80e5b10b0d5994dslomov@chromium.org 2823486536df718553960f9700559e80e5b10b0d5994dslomov@chromium.org private: 2824486536df718553960f9700559e80e5b10b0d5994dslomov@chromium.org Promise(); 2825486536df718553960f9700559e80e5b10b0d5994dslomov@chromium.org static void CheckCast(Value* obj); 2826486536df718553960f9700559e80e5b10b0d5994dslomov@chromium.org}; 2827486536df718553960f9700559e80e5b10b0d5994dslomov@chromium.org 2828486536df718553960f9700559e80e5b10b0d5994dslomov@chromium.org 2829a53e8e03bcb23716d1025de362626f90f00da892svenpanne@chromium.org#ifndef V8_ARRAY_BUFFER_INTERNAL_FIELD_COUNT 2830e0e1b0d3e70c933d36ed381d511e9fda39f2a751mstarzinger@chromium.org// The number of required internal fields can be defined by embedder. 2831a53e8e03bcb23716d1025de362626f90f00da892svenpanne@chromium.org#define V8_ARRAY_BUFFER_INTERNAL_FIELD_COUNT 2 2832a53e8e03bcb23716d1025de362626f90f00da892svenpanne@chromium.org#endif 283343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 283443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen/** 2835ca29dd85fa02449d17188f5a6ff9a7cdf2ad9680danno@chromium.org * An instance of the built-in ArrayBuffer constructor (ES6 draft 15.13.5). 2836ca29dd85fa02449d17188f5a6ff9a7cdf2ad9680danno@chromium.org * This API is experimental and may change significantly. 2837ca29dd85fa02449d17188f5a6ff9a7cdf2ad9680danno@chromium.org */ 2838594006017e46d82ed7146611dc12c20e3c509c7ddanno@chromium.orgclass V8_EXPORT ArrayBuffer : public Object { 2839ca29dd85fa02449d17188f5a6ff9a7cdf2ad9680danno@chromium.org public: 2840ca29dd85fa02449d17188f5a6ff9a7cdf2ad9680danno@chromium.org /** 2841837a67edd9afdbfe1b59482b41693f59c48846ffulan@chromium.org * Allocator that V8 uses to allocate |ArrayBuffer|'s memory. 2842837a67edd9afdbfe1b59482b41693f59c48846ffulan@chromium.org * The allocator is a global V8 setting. It should be set with 2843837a67edd9afdbfe1b59482b41693f59c48846ffulan@chromium.org * V8::SetArrayBufferAllocator prior to creation of a first ArrayBuffer. 2844837a67edd9afdbfe1b59482b41693f59c48846ffulan@chromium.org * 2845837a67edd9afdbfe1b59482b41693f59c48846ffulan@chromium.org * This API is experimental and may change significantly. 2846837a67edd9afdbfe1b59482b41693f59c48846ffulan@chromium.org */ 2847594006017e46d82ed7146611dc12c20e3c509c7ddanno@chromium.org class V8_EXPORT Allocator { // NOLINT 2848837a67edd9afdbfe1b59482b41693f59c48846ffulan@chromium.org public: 2849837a67edd9afdbfe1b59482b41693f59c48846ffulan@chromium.org virtual ~Allocator() {} 2850837a67edd9afdbfe1b59482b41693f59c48846ffulan@chromium.org 2851837a67edd9afdbfe1b59482b41693f59c48846ffulan@chromium.org /** 2852837a67edd9afdbfe1b59482b41693f59c48846ffulan@chromium.org * Allocate |length| bytes. Return NULL if allocation is not successful. 2853d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.org * Memory should be initialized to zeroes. 2854837a67edd9afdbfe1b59482b41693f59c48846ffulan@chromium.org */ 2855837a67edd9afdbfe1b59482b41693f59c48846ffulan@chromium.org virtual void* Allocate(size_t length) = 0; 2856d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.org 2857d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.org /** 2858d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.org * Allocate |length| bytes. Return NULL if allocation is not successful. 2859d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.org * Memory does not have to be initialized. 2860d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.org */ 2861e97852de34e44a479f092bd2449134e707cd9cf1dslomov@chromium.org virtual void* AllocateUninitialized(size_t length) = 0; 2862837a67edd9afdbfe1b59482b41693f59c48846ffulan@chromium.org /** 2863307dd6ea3b729c8058ada645b42a1cf083c92128danno@chromium.org * Free the memory block of size |length|, pointed to by |data|. 2864307dd6ea3b729c8058ada645b42a1cf083c92128danno@chromium.org * That memory is guaranteed to be previously allocated by |Allocate|. 2865837a67edd9afdbfe1b59482b41693f59c48846ffulan@chromium.org */ 2866e97852de34e44a479f092bd2449134e707cd9cf1dslomov@chromium.org virtual void Free(void* data, size_t length) = 0; 2867837a67edd9afdbfe1b59482b41693f59c48846ffulan@chromium.org }; 2868837a67edd9afdbfe1b59482b41693f59c48846ffulan@chromium.org 2869837a67edd9afdbfe1b59482b41693f59c48846ffulan@chromium.org /** 2870837a67edd9afdbfe1b59482b41693f59c48846ffulan@chromium.org * The contents of an |ArrayBuffer|. Externalization of |ArrayBuffer| 2871837a67edd9afdbfe1b59482b41693f59c48846ffulan@chromium.org * returns an instance of this class, populated, with a pointer to data 2872837a67edd9afdbfe1b59482b41693f59c48846ffulan@chromium.org * and byte length. 2873837a67edd9afdbfe1b59482b41693f59c48846ffulan@chromium.org * 2874837a67edd9afdbfe1b59482b41693f59c48846ffulan@chromium.org * The Data pointer of ArrayBuffer::Contents is always allocated with 2875837a67edd9afdbfe1b59482b41693f59c48846ffulan@chromium.org * Allocator::Allocate that is set with V8::SetArrayBufferAllocator. 2876837a67edd9afdbfe1b59482b41693f59c48846ffulan@chromium.org * 2877837a67edd9afdbfe1b59482b41693f59c48846ffulan@chromium.org * This API is experimental and may change significantly. 2878837a67edd9afdbfe1b59482b41693f59c48846ffulan@chromium.org */ 2879594006017e46d82ed7146611dc12c20e3c509c7ddanno@chromium.org class V8_EXPORT Contents { // NOLINT 2880837a67edd9afdbfe1b59482b41693f59c48846ffulan@chromium.org public: 2881837a67edd9afdbfe1b59482b41693f59c48846ffulan@chromium.org Contents() : data_(NULL), byte_length_(0) {} 2882837a67edd9afdbfe1b59482b41693f59c48846ffulan@chromium.org 2883837a67edd9afdbfe1b59482b41693f59c48846ffulan@chromium.org void* Data() const { return data_; } 2884837a67edd9afdbfe1b59482b41693f59c48846ffulan@chromium.org size_t ByteLength() const { return byte_length_; } 2885837a67edd9afdbfe1b59482b41693f59c48846ffulan@chromium.org 2886837a67edd9afdbfe1b59482b41693f59c48846ffulan@chromium.org private: 2887837a67edd9afdbfe1b59482b41693f59c48846ffulan@chromium.org void* data_; 2888837a67edd9afdbfe1b59482b41693f59c48846ffulan@chromium.org size_t byte_length_; 2889837a67edd9afdbfe1b59482b41693f59c48846ffulan@chromium.org 2890837a67edd9afdbfe1b59482b41693f59c48846ffulan@chromium.org friend class ArrayBuffer; 2891837a67edd9afdbfe1b59482b41693f59c48846ffulan@chromium.org }; 2892837a67edd9afdbfe1b59482b41693f59c48846ffulan@chromium.org 2893837a67edd9afdbfe1b59482b41693f59c48846ffulan@chromium.org 2894837a67edd9afdbfe1b59482b41693f59c48846ffulan@chromium.org /** 2895ca29dd85fa02449d17188f5a6ff9a7cdf2ad9680danno@chromium.org * Data length in bytes. 2896ca29dd85fa02449d17188f5a6ff9a7cdf2ad9680danno@chromium.org */ 2897ca29dd85fa02449d17188f5a6ff9a7cdf2ad9680danno@chromium.org size_t ByteLength() const; 2898ca29dd85fa02449d17188f5a6ff9a7cdf2ad9680danno@chromium.org 2899ca29dd85fa02449d17188f5a6ff9a7cdf2ad9680danno@chromium.org /** 2900ca29dd85fa02449d17188f5a6ff9a7cdf2ad9680danno@chromium.org * Create a new ArrayBuffer. Allocate |byte_length| bytes. 2901ca29dd85fa02449d17188f5a6ff9a7cdf2ad9680danno@chromium.org * Allocated memory will be owned by a created ArrayBuffer and 2902a53e8e03bcb23716d1025de362626f90f00da892svenpanne@chromium.org * will be deallocated when it is garbage-collected, 2903a53e8e03bcb23716d1025de362626f90f00da892svenpanne@chromium.org * unless the object is externalized. 2904ca29dd85fa02449d17188f5a6ff9a7cdf2ad9680danno@chromium.org */ 290537be408adf363bbe682921a4a690752fa0ec33femachenbach@chromium.org static Local<ArrayBuffer> New(Isolate* isolate, size_t byte_length); 2906ca29dd85fa02449d17188f5a6ff9a7cdf2ad9680danno@chromium.org 2907ca29dd85fa02449d17188f5a6ff9a7cdf2ad9680danno@chromium.org /** 2908ca29dd85fa02449d17188f5a6ff9a7cdf2ad9680danno@chromium.org * Create a new ArrayBuffer over an existing memory block. 2909a53e8e03bcb23716d1025de362626f90f00da892svenpanne@chromium.org * The created array buffer is immediately in externalized state. 2910ca29dd85fa02449d17188f5a6ff9a7cdf2ad9680danno@chromium.org * The memory block will not be reclaimed when a created ArrayBuffer 2911ca29dd85fa02449d17188f5a6ff9a7cdf2ad9680danno@chromium.org * is garbage-collected. 2912ca29dd85fa02449d17188f5a6ff9a7cdf2ad9680danno@chromium.org */ 291337be408adf363bbe682921a4a690752fa0ec33femachenbach@chromium.org static Local<ArrayBuffer> New(Isolate* isolate, void* data, 291437be408adf363bbe682921a4a690752fa0ec33femachenbach@chromium.org size_t byte_length); 2915ca29dd85fa02449d17188f5a6ff9a7cdf2ad9680danno@chromium.org 2916a53e8e03bcb23716d1025de362626f90f00da892svenpanne@chromium.org /** 2917a53e8e03bcb23716d1025de362626f90f00da892svenpanne@chromium.org * Returns true if ArrayBuffer is extrenalized, that is, does not 2918a53e8e03bcb23716d1025de362626f90f00da892svenpanne@chromium.org * own its memory block. 2919a53e8e03bcb23716d1025de362626f90f00da892svenpanne@chromium.org */ 2920a53e8e03bcb23716d1025de362626f90f00da892svenpanne@chromium.org bool IsExternal() const; 2921a53e8e03bcb23716d1025de362626f90f00da892svenpanne@chromium.org 2922a53e8e03bcb23716d1025de362626f90f00da892svenpanne@chromium.org /** 29231fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org * Neuters this ArrayBuffer and all its views (typed arrays). 29241fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org * Neutering sets the byte length of the buffer and all typed arrays to zero, 29251fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org * preventing JavaScript from ever accessing underlying backing store. 29261fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org * ArrayBuffer should have been externalized. 29271fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org */ 29281fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org void Neuter(); 29291fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org 29301fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org /** 2931837a67edd9afdbfe1b59482b41693f59c48846ffulan@chromium.org * Make this ArrayBuffer external. The pointer to underlying memory block 2932837a67edd9afdbfe1b59482b41693f59c48846ffulan@chromium.org * and byte length are returned as |Contents| structure. After ArrayBuffer 2933837a67edd9afdbfe1b59482b41693f59c48846ffulan@chromium.org * had been etxrenalized, it does no longer owns the memory block. The caller 2934837a67edd9afdbfe1b59482b41693f59c48846ffulan@chromium.org * should take steps to free memory when it is no longer needed. 2935837a67edd9afdbfe1b59482b41693f59c48846ffulan@chromium.org * 2936837a67edd9afdbfe1b59482b41693f59c48846ffulan@chromium.org * The memory block is guaranteed to be allocated with |Allocator::Allocate| 2937837a67edd9afdbfe1b59482b41693f59c48846ffulan@chromium.org * that has been set with V8::SetArrayBufferAllocator. 2938a53e8e03bcb23716d1025de362626f90f00da892svenpanne@chromium.org */ 2939837a67edd9afdbfe1b59482b41693f59c48846ffulan@chromium.org Contents Externalize(); 2940a53e8e03bcb23716d1025de362626f90f00da892svenpanne@chromium.org 29414a35c5a501e5b966f895ddea8e19c3ca232cb23fdslomov@chromium.org V8_INLINE static ArrayBuffer* Cast(Value* obj); 2942ca29dd85fa02449d17188f5a6ff9a7cdf2ad9680danno@chromium.org 2943a53e8e03bcb23716d1025de362626f90f00da892svenpanne@chromium.org static const int kInternalFieldCount = V8_ARRAY_BUFFER_INTERNAL_FIELD_COUNT; 2944a53e8e03bcb23716d1025de362626f90f00da892svenpanne@chromium.org 2945ca29dd85fa02449d17188f5a6ff9a7cdf2ad9680danno@chromium.org private: 2946ca29dd85fa02449d17188f5a6ff9a7cdf2ad9680danno@chromium.org ArrayBuffer(); 2947ca29dd85fa02449d17188f5a6ff9a7cdf2ad9680danno@chromium.org static void CheckCast(Value* obj); 2948ca29dd85fa02449d17188f5a6ff9a7cdf2ad9680danno@chromium.org}; 2949ca29dd85fa02449d17188f5a6ff9a7cdf2ad9680danno@chromium.org 2950ca29dd85fa02449d17188f5a6ff9a7cdf2ad9680danno@chromium.org 2951e0e1b0d3e70c933d36ed381d511e9fda39f2a751mstarzinger@chromium.org#ifndef V8_ARRAY_BUFFER_VIEW_INTERNAL_FIELD_COUNT 2952e0e1b0d3e70c933d36ed381d511e9fda39f2a751mstarzinger@chromium.org// The number of required internal fields can be defined by embedder. 2953e0e1b0d3e70c933d36ed381d511e9fda39f2a751mstarzinger@chromium.org#define V8_ARRAY_BUFFER_VIEW_INTERNAL_FIELD_COUNT 2 2954e0e1b0d3e70c933d36ed381d511e9fda39f2a751mstarzinger@chromium.org#endif 2955e0e1b0d3e70c933d36ed381d511e9fda39f2a751mstarzinger@chromium.org 2956e0e1b0d3e70c933d36ed381d511e9fda39f2a751mstarzinger@chromium.org 2957ca29dd85fa02449d17188f5a6ff9a7cdf2ad9680danno@chromium.org/** 29581510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org * A base class for an instance of one of "views" over ArrayBuffer, 29591510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org * including TypedArrays and DataView (ES6 draft 15.13). 29601510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org * 2961f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org * This API is experimental and may change significantly. 2962f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org */ 2963594006017e46d82ed7146611dc12c20e3c509c7ddanno@chromium.orgclass V8_EXPORT ArrayBufferView : public Object { 2964f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org public: 2965f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org /** 2966f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org * Returns underlying ArrayBuffer. 2967f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org */ 2968f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org Local<ArrayBuffer> Buffer(); 2969f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org /** 29701510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org * Byte offset in |Buffer|. 2971f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org */ 2972f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org size_t ByteOffset(); 2973f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org /** 29741510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org * Size of a view in bytes. 2975f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org */ 2976f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org size_t ByteLength(); 2977f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org 29784a35c5a501e5b966f895ddea8e19c3ca232cb23fdslomov@chromium.org V8_INLINE static ArrayBufferView* Cast(Value* obj); 29791510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org 2980e0e1b0d3e70c933d36ed381d511e9fda39f2a751mstarzinger@chromium.org static const int kInternalFieldCount = 2981e0e1b0d3e70c933d36ed381d511e9fda39f2a751mstarzinger@chromium.org V8_ARRAY_BUFFER_VIEW_INTERNAL_FIELD_COUNT; 2982e0e1b0d3e70c933d36ed381d511e9fda39f2a751mstarzinger@chromium.org 29831510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org private: 29841510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org ArrayBufferView(); 29851510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org static void CheckCast(Value* obj); 29861510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org}; 29871510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org 29881510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org 29891510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org/** 29901510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org * A base class for an instance of TypedArray series of constructors 29911510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org * (ES6 draft 15.13.6). 29921510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org * This API is experimental and may change significantly. 29931510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org */ 2994594006017e46d82ed7146611dc12c20e3c509c7ddanno@chromium.orgclass V8_EXPORT TypedArray : public ArrayBufferView { 29951510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org public: 29961510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org /** 29971510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org * Number of elements in this typed array 29981510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org * (e.g. for Int16Array, |ByteLength|/2). 29991510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org */ 30001510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org size_t Length(); 30011510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org 30024a35c5a501e5b966f895ddea8e19c3ca232cb23fdslomov@chromium.org V8_INLINE static TypedArray* Cast(Value* obj); 3003f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org 3004f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org private: 3005f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org TypedArray(); 3006f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org static void CheckCast(Value* obj); 3007f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org}; 3008f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org 3009f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org 3010f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org/** 3011f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org * An instance of Uint8Array constructor (ES6 draft 15.13.6). 3012f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org * This API is experimental and may change significantly. 3013f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org */ 3014594006017e46d82ed7146611dc12c20e3c509c7ddanno@chromium.orgclass V8_EXPORT Uint8Array : public TypedArray { 3015f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org public: 3016f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org static Local<Uint8Array> New(Handle<ArrayBuffer> array_buffer, 3017f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org size_t byte_offset, size_t length); 30184a35c5a501e5b966f895ddea8e19c3ca232cb23fdslomov@chromium.org V8_INLINE static Uint8Array* Cast(Value* obj); 3019f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org 3020f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org private: 3021f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org Uint8Array(); 3022f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org static void CheckCast(Value* obj); 3023f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org}; 3024f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org 3025f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org 3026f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org/** 302757ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org * An instance of Uint8ClampedArray constructor (ES6 draft 15.13.6). 302857ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org * This API is experimental and may change significantly. 302957ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org */ 3030594006017e46d82ed7146611dc12c20e3c509c7ddanno@chromium.orgclass V8_EXPORT Uint8ClampedArray : public TypedArray { 303157ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org public: 303257ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org static Local<Uint8ClampedArray> New(Handle<ArrayBuffer> array_buffer, 303357ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org size_t byte_offset, size_t length); 30344a35c5a501e5b966f895ddea8e19c3ca232cb23fdslomov@chromium.org V8_INLINE static Uint8ClampedArray* Cast(Value* obj); 303557ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org 303657ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org private: 303757ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org Uint8ClampedArray(); 303857ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org static void CheckCast(Value* obj); 303957ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org}; 304057ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org 304157ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org/** 3042f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org * An instance of Int8Array constructor (ES6 draft 15.13.6). 3043f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org * This API is experimental and may change significantly. 3044f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org */ 3045594006017e46d82ed7146611dc12c20e3c509c7ddanno@chromium.orgclass V8_EXPORT Int8Array : public TypedArray { 3046f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org public: 3047f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org static Local<Int8Array> New(Handle<ArrayBuffer> array_buffer, 3048f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org size_t byte_offset, size_t length); 30494a35c5a501e5b966f895ddea8e19c3ca232cb23fdslomov@chromium.org V8_INLINE static Int8Array* Cast(Value* obj); 3050f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org 3051f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org private: 3052f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org Int8Array(); 3053f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org static void CheckCast(Value* obj); 3054f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org}; 3055f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org 3056f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org 3057f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org/** 3058f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org * An instance of Uint16Array constructor (ES6 draft 15.13.6). 3059f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org * This API is experimental and may change significantly. 3060f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org */ 3061594006017e46d82ed7146611dc12c20e3c509c7ddanno@chromium.orgclass V8_EXPORT Uint16Array : public TypedArray { 3062f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org public: 3063f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org static Local<Uint16Array> New(Handle<ArrayBuffer> array_buffer, 3064f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org size_t byte_offset, size_t length); 30654a35c5a501e5b966f895ddea8e19c3ca232cb23fdslomov@chromium.org V8_INLINE static Uint16Array* Cast(Value* obj); 3066f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org 3067f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org private: 3068f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org Uint16Array(); 3069f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org static void CheckCast(Value* obj); 3070f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org}; 3071f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org 3072f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org 3073f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org/** 3074f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org * An instance of Int16Array constructor (ES6 draft 15.13.6). 3075f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org * This API is experimental and may change significantly. 3076f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org */ 3077594006017e46d82ed7146611dc12c20e3c509c7ddanno@chromium.orgclass V8_EXPORT Int16Array : public TypedArray { 3078f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org public: 3079f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org static Local<Int16Array> New(Handle<ArrayBuffer> array_buffer, 3080f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org size_t byte_offset, size_t length); 30814a35c5a501e5b966f895ddea8e19c3ca232cb23fdslomov@chromium.org V8_INLINE static Int16Array* Cast(Value* obj); 3082f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org 3083f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org private: 3084f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org Int16Array(); 3085f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org static void CheckCast(Value* obj); 3086f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org}; 3087f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org 3088f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org 3089f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org/** 3090f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org * An instance of Uint32Array constructor (ES6 draft 15.13.6). 3091f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org * This API is experimental and may change significantly. 3092f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org */ 3093594006017e46d82ed7146611dc12c20e3c509c7ddanno@chromium.orgclass V8_EXPORT Uint32Array : public TypedArray { 3094f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org public: 3095f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org static Local<Uint32Array> New(Handle<ArrayBuffer> array_buffer, 3096f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org size_t byte_offset, size_t length); 30974a35c5a501e5b966f895ddea8e19c3ca232cb23fdslomov@chromium.org V8_INLINE static Uint32Array* Cast(Value* obj); 3098f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org 3099f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org private: 3100f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org Uint32Array(); 3101f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org static void CheckCast(Value* obj); 3102f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org}; 3103f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org 3104f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org 3105f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org/** 3106f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org * An instance of Int32Array constructor (ES6 draft 15.13.6). 3107f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org * This API is experimental and may change significantly. 3108f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org */ 3109594006017e46d82ed7146611dc12c20e3c509c7ddanno@chromium.orgclass V8_EXPORT Int32Array : public TypedArray { 3110f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org public: 3111f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org static Local<Int32Array> New(Handle<ArrayBuffer> array_buffer, 3112f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org size_t byte_offset, size_t length); 31134a35c5a501e5b966f895ddea8e19c3ca232cb23fdslomov@chromium.org V8_INLINE static Int32Array* Cast(Value* obj); 3114f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org 3115f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org private: 3116f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org Int32Array(); 3117f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org static void CheckCast(Value* obj); 3118f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org}; 3119f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org 3120f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org 3121f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org/** 3122f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org * An instance of Float32Array constructor (ES6 draft 15.13.6). 3123f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org * This API is experimental and may change significantly. 3124f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org */ 3125594006017e46d82ed7146611dc12c20e3c509c7ddanno@chromium.orgclass V8_EXPORT Float32Array : public TypedArray { 3126f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org public: 3127f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org static Local<Float32Array> New(Handle<ArrayBuffer> array_buffer, 3128f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org size_t byte_offset, size_t length); 31294a35c5a501e5b966f895ddea8e19c3ca232cb23fdslomov@chromium.org V8_INLINE static Float32Array* Cast(Value* obj); 3130f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org 3131f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org private: 3132f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org Float32Array(); 3133f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org static void CheckCast(Value* obj); 3134f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org}; 3135f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org 3136f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org 3137f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org/** 3138f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org * An instance of Float64Array constructor (ES6 draft 15.13.6). 3139f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org * This API is experimental and may change significantly. 3140f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org */ 3141594006017e46d82ed7146611dc12c20e3c509c7ddanno@chromium.orgclass V8_EXPORT Float64Array : public TypedArray { 3142f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org public: 3143f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org static Local<Float64Array> New(Handle<ArrayBuffer> array_buffer, 3144f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org size_t byte_offset, size_t length); 31454a35c5a501e5b966f895ddea8e19c3ca232cb23fdslomov@chromium.org V8_INLINE static Float64Array* Cast(Value* obj); 3146f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org 3147f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org private: 3148f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org Float64Array(); 3149f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org static void CheckCast(Value* obj); 3150f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org}; 3151f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org 3152f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org 3153f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org/** 31541510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org * An instance of DataView constructor (ES6 draft 15.13.7). 31551510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org * This API is experimental and may change significantly. 31561510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org */ 3157594006017e46d82ed7146611dc12c20e3c509c7ddanno@chromium.orgclass V8_EXPORT DataView : public ArrayBufferView { 31581510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org public: 31591510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org static Local<DataView> New(Handle<ArrayBuffer> array_buffer, 31601510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org size_t byte_offset, size_t length); 31614a35c5a501e5b966f895ddea8e19c3ca232cb23fdslomov@chromium.org V8_INLINE static DataView* Cast(Value* obj); 31621510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org 31631510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org private: 31641510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org DataView(); 31651510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org static void CheckCast(Value* obj); 31661510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org}; 31671510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org 31681510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org 31691510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org/** 3170fb144a0716afe7ab8bf245f2391a9e53b3db3c89fschneider@chromium.org * An instance of the built-in Date constructor (ECMA-262, 15.9). 3171fb144a0716afe7ab8bf245f2391a9e53b3db3c89fschneider@chromium.org */ 3172594006017e46d82ed7146611dc12c20e3c509c7ddanno@chromium.orgclass V8_EXPORT Date : public Object { 3173fb144a0716afe7ab8bf245f2391a9e53b3db3c89fschneider@chromium.org public: 317437be408adf363bbe682921a4a690752fa0ec33femachenbach@chromium.org static Local<Value> New(Isolate* isolate, double time); 3175d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.org 3176fb144a0716afe7ab8bf245f2391a9e53b3db3c89fschneider@chromium.org /** 3177fb144a0716afe7ab8bf245f2391a9e53b3db3c89fschneider@chromium.org * A specialization of Value::NumberValue that is more efficient 3178fb144a0716afe7ab8bf245f2391a9e53b3db3c89fschneider@chromium.org * because we know the structure of this object. 3179fb144a0716afe7ab8bf245f2391a9e53b3db3c89fschneider@chromium.org */ 3180d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.org double ValueOf() const; 3181fb144a0716afe7ab8bf245f2391a9e53b3db3c89fschneider@chromium.org 31824a35c5a501e5b966f895ddea8e19c3ca232cb23fdslomov@chromium.org V8_INLINE static Date* Cast(v8::Value* obj); 3183fb144a0716afe7ab8bf245f2391a9e53b3db3c89fschneider@chromium.org 3184fb144a0716afe7ab8bf245f2391a9e53b3db3c89fschneider@chromium.org /** 3185fb144a0716afe7ab8bf245f2391a9e53b3db3c89fschneider@chromium.org * Notification that the embedder has changed the time zone, 3186fb144a0716afe7ab8bf245f2391a9e53b3db3c89fschneider@chromium.org * daylight savings time, or other date / time configuration 3187fb144a0716afe7ab8bf245f2391a9e53b3db3c89fschneider@chromium.org * parameters. V8 keeps a cache of various values used for 3188fb144a0716afe7ab8bf245f2391a9e53b3db3c89fschneider@chromium.org * date / time computation. This notification will reset 3189fb144a0716afe7ab8bf245f2391a9e53b3db3c89fschneider@chromium.org * those cached values for the current context so that date / 3190fb144a0716afe7ab8bf245f2391a9e53b3db3c89fschneider@chromium.org * time configuration changes would be reflected in the Date 3191fb144a0716afe7ab8bf245f2391a9e53b3db3c89fschneider@chromium.org * object. 3192fb144a0716afe7ab8bf245f2391a9e53b3db3c89fschneider@chromium.org * 3193fb144a0716afe7ab8bf245f2391a9e53b3db3c89fschneider@chromium.org * This API should not be called more than needed as it will 3194fb144a0716afe7ab8bf245f2391a9e53b3db3c89fschneider@chromium.org * negatively impact the performance of date operations. 3195fb144a0716afe7ab8bf245f2391a9e53b3db3c89fschneider@chromium.org */ 319637be408adf363bbe682921a4a690752fa0ec33femachenbach@chromium.org static void DateTimeConfigurationChangeNotification(Isolate* isolate); 3197fb144a0716afe7ab8bf245f2391a9e53b3db3c89fschneider@chromium.org 3198fb144a0716afe7ab8bf245f2391a9e53b3db3c89fschneider@chromium.org private: 319946a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org static void CheckCast(v8::Value* obj); 3200fb144a0716afe7ab8bf245f2391a9e53b3db3c89fschneider@chromium.org}; 3201fb144a0716afe7ab8bf245f2391a9e53b3db3c89fschneider@chromium.org 3202fb144a0716afe7ab8bf245f2391a9e53b3db3c89fschneider@chromium.org 3203fb144a0716afe7ab8bf245f2391a9e53b3db3c89fschneider@chromium.org/** 320484bcc559ac20fb04f806e97d28a314b20b58fd60svenpanne@chromium.org * A Number object (ECMA-262, 4.3.21). 320584bcc559ac20fb04f806e97d28a314b20b58fd60svenpanne@chromium.org */ 3206594006017e46d82ed7146611dc12c20e3c509c7ddanno@chromium.orgclass V8_EXPORT NumberObject : public Object { 320784bcc559ac20fb04f806e97d28a314b20b58fd60svenpanne@chromium.org public: 320837be408adf363bbe682921a4a690752fa0ec33femachenbach@chromium.org static Local<Value> New(Isolate* isolate, double value); 3209d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.org 3210d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.org double ValueOf() const; 321184bcc559ac20fb04f806e97d28a314b20b58fd60svenpanne@chromium.org 32124a35c5a501e5b966f895ddea8e19c3ca232cb23fdslomov@chromium.org V8_INLINE static NumberObject* Cast(v8::Value* obj); 321384bcc559ac20fb04f806e97d28a314b20b58fd60svenpanne@chromium.org 321484bcc559ac20fb04f806e97d28a314b20b58fd60svenpanne@chromium.org private: 321546a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org static void CheckCast(v8::Value* obj); 321684bcc559ac20fb04f806e97d28a314b20b58fd60svenpanne@chromium.org}; 321784bcc559ac20fb04f806e97d28a314b20b58fd60svenpanne@chromium.org 321884bcc559ac20fb04f806e97d28a314b20b58fd60svenpanne@chromium.org 321984bcc559ac20fb04f806e97d28a314b20b58fd60svenpanne@chromium.org/** 322084bcc559ac20fb04f806e97d28a314b20b58fd60svenpanne@chromium.org * A Boolean object (ECMA-262, 4.3.15). 322184bcc559ac20fb04f806e97d28a314b20b58fd60svenpanne@chromium.org */ 3222594006017e46d82ed7146611dc12c20e3c509c7ddanno@chromium.orgclass V8_EXPORT BooleanObject : public Object { 322384bcc559ac20fb04f806e97d28a314b20b58fd60svenpanne@chromium.org public: 322446a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org static Local<Value> New(bool value); 322584bcc559ac20fb04f806e97d28a314b20b58fd60svenpanne@chromium.org 3226d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.org bool ValueOf() const; 322784bcc559ac20fb04f806e97d28a314b20b58fd60svenpanne@chromium.org 32284a35c5a501e5b966f895ddea8e19c3ca232cb23fdslomov@chromium.org V8_INLINE static BooleanObject* Cast(v8::Value* obj); 322984bcc559ac20fb04f806e97d28a314b20b58fd60svenpanne@chromium.org 323084bcc559ac20fb04f806e97d28a314b20b58fd60svenpanne@chromium.org private: 323146a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org static void CheckCast(v8::Value* obj); 323284bcc559ac20fb04f806e97d28a314b20b58fd60svenpanne@chromium.org}; 323384bcc559ac20fb04f806e97d28a314b20b58fd60svenpanne@chromium.org 323484bcc559ac20fb04f806e97d28a314b20b58fd60svenpanne@chromium.org 323584bcc559ac20fb04f806e97d28a314b20b58fd60svenpanne@chromium.org/** 323684bcc559ac20fb04f806e97d28a314b20b58fd60svenpanne@chromium.org * A String object (ECMA-262, 4.3.18). 323784bcc559ac20fb04f806e97d28a314b20b58fd60svenpanne@chromium.org */ 3238594006017e46d82ed7146611dc12c20e3c509c7ddanno@chromium.orgclass V8_EXPORT StringObject : public Object { 323984bcc559ac20fb04f806e97d28a314b20b58fd60svenpanne@chromium.org public: 324046a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org static Local<Value> New(Handle<String> value); 324184bcc559ac20fb04f806e97d28a314b20b58fd60svenpanne@chromium.org 3242d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.org Local<String> ValueOf() const; 324384bcc559ac20fb04f806e97d28a314b20b58fd60svenpanne@chromium.org 32444a35c5a501e5b966f895ddea8e19c3ca232cb23fdslomov@chromium.org V8_INLINE static StringObject* Cast(v8::Value* obj); 324584bcc559ac20fb04f806e97d28a314b20b58fd60svenpanne@chromium.org 324684bcc559ac20fb04f806e97d28a314b20b58fd60svenpanne@chromium.org private: 324746a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org static void CheckCast(v8::Value* obj); 324884bcc559ac20fb04f806e97d28a314b20b58fd60svenpanne@chromium.org}; 324984bcc559ac20fb04f806e97d28a314b20b58fd60svenpanne@chromium.org 325084bcc559ac20fb04f806e97d28a314b20b58fd60svenpanne@chromium.org 325184bcc559ac20fb04f806e97d28a314b20b58fd60svenpanne@chromium.org/** 3252e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org * A Symbol object (ECMA-262 edition 6). 3253e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org * 3254e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org * This is an experimental feature. Use at your own risk. 3255e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org */ 3256594006017e46d82ed7146611dc12c20e3c509c7ddanno@chromium.orgclass V8_EXPORT SymbolObject : public Object { 3257e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org public: 3258e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org static Local<Value> New(Isolate* isolate, Handle<Symbol> value); 3259e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org 3260d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.org Local<Symbol> ValueOf() const; 3261e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org 32624a35c5a501e5b966f895ddea8e19c3ca232cb23fdslomov@chromium.org V8_INLINE static SymbolObject* Cast(v8::Value* obj); 3263e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org 3264e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org private: 3265e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org static void CheckCast(v8::Value* obj); 3266e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org}; 3267e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org 3268e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org 3269e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org/** 3270fb144a0716afe7ab8bf245f2391a9e53b3db3c89fschneider@chromium.org * An instance of the built-in RegExp constructor (ECMA-262, 15.10). 3271fb144a0716afe7ab8bf245f2391a9e53b3db3c89fschneider@chromium.org */ 3272594006017e46d82ed7146611dc12c20e3c509c7ddanno@chromium.orgclass V8_EXPORT RegExp : public Object { 3273fb144a0716afe7ab8bf245f2391a9e53b3db3c89fschneider@chromium.org public: 3274fb144a0716afe7ab8bf245f2391a9e53b3db3c89fschneider@chromium.org /** 3275fb144a0716afe7ab8bf245f2391a9e53b3db3c89fschneider@chromium.org * Regular expression flag bits. They can be or'ed to enable a set 3276fb144a0716afe7ab8bf245f2391a9e53b3db3c89fschneider@chromium.org * of flags. 3277fb144a0716afe7ab8bf245f2391a9e53b3db3c89fschneider@chromium.org */ 3278fb144a0716afe7ab8bf245f2391a9e53b3db3c89fschneider@chromium.org enum Flags { 3279fb144a0716afe7ab8bf245f2391a9e53b3db3c89fschneider@chromium.org kNone = 0, 3280fb144a0716afe7ab8bf245f2391a9e53b3db3c89fschneider@chromium.org kGlobal = 1, 3281fb144a0716afe7ab8bf245f2391a9e53b3db3c89fschneider@chromium.org kIgnoreCase = 2, 3282fb144a0716afe7ab8bf245f2391a9e53b3db3c89fschneider@chromium.org kMultiline = 4 3283fb144a0716afe7ab8bf245f2391a9e53b3db3c89fschneider@chromium.org }; 3284fb144a0716afe7ab8bf245f2391a9e53b3db3c89fschneider@chromium.org 3285fb144a0716afe7ab8bf245f2391a9e53b3db3c89fschneider@chromium.org /** 3286fb144a0716afe7ab8bf245f2391a9e53b3db3c89fschneider@chromium.org * Creates a regular expression from the given pattern string and 3287fb144a0716afe7ab8bf245f2391a9e53b3db3c89fschneider@chromium.org * the flags bit field. May throw a JavaScript exception as 3288fb144a0716afe7ab8bf245f2391a9e53b3db3c89fschneider@chromium.org * described in ECMA-262, 15.10.4.1. 3289fb144a0716afe7ab8bf245f2391a9e53b3db3c89fschneider@chromium.org * 3290fb144a0716afe7ab8bf245f2391a9e53b3db3c89fschneider@chromium.org * For example, 3291fb144a0716afe7ab8bf245f2391a9e53b3db3c89fschneider@chromium.org * RegExp::New(v8::String::New("foo"), 3292fb144a0716afe7ab8bf245f2391a9e53b3db3c89fschneider@chromium.org * static_cast<RegExp::Flags>(kGlobal | kMultiline)) 3293fb144a0716afe7ab8bf245f2391a9e53b3db3c89fschneider@chromium.org * is equivalent to evaluating "/foo/gm". 3294fb144a0716afe7ab8bf245f2391a9e53b3db3c89fschneider@chromium.org */ 329546a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org static Local<RegExp> New(Handle<String> pattern, Flags flags); 3296fb144a0716afe7ab8bf245f2391a9e53b3db3c89fschneider@chromium.org 3297fb144a0716afe7ab8bf245f2391a9e53b3db3c89fschneider@chromium.org /** 3298fb144a0716afe7ab8bf245f2391a9e53b3db3c89fschneider@chromium.org * Returns the value of the source property: a string representing 3299fb144a0716afe7ab8bf245f2391a9e53b3db3c89fschneider@chromium.org * the regular expression. 3300fb144a0716afe7ab8bf245f2391a9e53b3db3c89fschneider@chromium.org */ 330146a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org Local<String> GetSource() const; 3302fb144a0716afe7ab8bf245f2391a9e53b3db3c89fschneider@chromium.org 3303fb144a0716afe7ab8bf245f2391a9e53b3db3c89fschneider@chromium.org /** 3304fb144a0716afe7ab8bf245f2391a9e53b3db3c89fschneider@chromium.org * Returns the flags bit field. 3305fb144a0716afe7ab8bf245f2391a9e53b3db3c89fschneider@chromium.org */ 330646a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org Flags GetFlags() const; 3307fb144a0716afe7ab8bf245f2391a9e53b3db3c89fschneider@chromium.org 33084a35c5a501e5b966f895ddea8e19c3ca232cb23fdslomov@chromium.org V8_INLINE static RegExp* Cast(v8::Value* obj); 3309fb144a0716afe7ab8bf245f2391a9e53b3db3c89fschneider@chromium.org 3310fb144a0716afe7ab8bf245f2391a9e53b3db3c89fschneider@chromium.org private: 331146a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org static void CheckCast(v8::Value* obj); 3312fb144a0716afe7ab8bf245f2391a9e53b3db3c89fschneider@chromium.org}; 3313fb144a0716afe7ab8bf245f2391a9e53b3db3c89fschneider@chromium.org 3314fb144a0716afe7ab8bf245f2391a9e53b3db3c89fschneider@chromium.org 3315fb144a0716afe7ab8bf245f2391a9e53b3db3c89fschneider@chromium.org/** 3316eeb44b681a16e45f1415dfacff0ba3dba9de5d8cyangguo@chromium.org * A JavaScript value that wraps a C++ void*. This type of value is mainly used 3317eeb44b681a16e45f1415dfacff0ba3dba9de5d8cyangguo@chromium.org * to associate C++ data structures with JavaScript objects. 331843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen */ 3319594006017e46d82ed7146611dc12c20e3c509c7ddanno@chromium.orgclass V8_EXPORT External : public Value { 332043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen public: 33210cc095007a3ccded63f6577751c6a04300eb7ae9machenbach@chromium.org static Local<External> New(Isolate* isolate, void* value); 33224a35c5a501e5b966f895ddea8e19c3ca232cb23fdslomov@chromium.org V8_INLINE static External* Cast(Value* obj); 332346a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org void* Value() const; 332443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen private: 332546a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org static void CheckCast(v8::Value* obj); 332643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen}; 332743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 332843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 3329fb144a0716afe7ab8bf245f2391a9e53b3db3c89fschneider@chromium.org// --- Templates --- 333043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 333143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 333243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen/** 333343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * The superclass of object and function templates. 333443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen */ 3335594006017e46d82ed7146611dc12c20e3c509c7ddanno@chromium.orgclass V8_EXPORT Template : public Data { 333643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen public: 333743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen /** Adds a property to each instance created by this template.*/ 3338e2a8937454723a720c81acc3f9e4162b18999b43machenbach@chromium.org void Set(Handle<Name> name, Handle<Data> value, 333943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen PropertyAttribute attributes = None); 334037be408adf363bbe682921a4a690752fa0ec33femachenbach@chromium.org V8_INLINE void Set(Isolate* isolate, const char* name, Handle<Data> value); 33411e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org 33421e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org void SetAccessorProperty( 3343e2a8937454723a720c81acc3f9e4162b18999b43machenbach@chromium.org Local<Name> name, 33441e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org Local<FunctionTemplate> getter = Local<FunctionTemplate>(), 33451e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org Local<FunctionTemplate> setter = Local<FunctionTemplate>(), 33461e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org PropertyAttribute attribute = None, 33471e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org AccessControl settings = DEFAULT); 33481e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org 33493d00d0a753cf5e5091f883517e6612ece769f999jkummerow@chromium.org /** 33503d00d0a753cf5e5091f883517e6612ece769f999jkummerow@chromium.org * Whenever the property with the given name is accessed on objects 33513d00d0a753cf5e5091f883517e6612ece769f999jkummerow@chromium.org * created from this Template the getter and setter callbacks 33523d00d0a753cf5e5091f883517e6612ece769f999jkummerow@chromium.org * are called instead of getting and setting the property directly 33533d00d0a753cf5e5091f883517e6612ece769f999jkummerow@chromium.org * on the JavaScript object. 33543d00d0a753cf5e5091f883517e6612ece769f999jkummerow@chromium.org * 33553d00d0a753cf5e5091f883517e6612ece769f999jkummerow@chromium.org * \param name The name of the property for which an accessor is added. 33563d00d0a753cf5e5091f883517e6612ece769f999jkummerow@chromium.org * \param getter The callback to invoke when getting the property. 33573d00d0a753cf5e5091f883517e6612ece769f999jkummerow@chromium.org * \param setter The callback to invoke when setting the property. 33583d00d0a753cf5e5091f883517e6612ece769f999jkummerow@chromium.org * \param data A piece of data that will be passed to the getter and setter 33593d00d0a753cf5e5091f883517e6612ece769f999jkummerow@chromium.org * callbacks whenever they are invoked. 33603d00d0a753cf5e5091f883517e6612ece769f999jkummerow@chromium.org * \param settings Access control settings for the accessor. This is a bit 33613d00d0a753cf5e5091f883517e6612ece769f999jkummerow@chromium.org * field consisting of one of more of 33623d00d0a753cf5e5091f883517e6612ece769f999jkummerow@chromium.org * DEFAULT = 0, ALL_CAN_READ = 1, or ALL_CAN_WRITE = 2. 33633d00d0a753cf5e5091f883517e6612ece769f999jkummerow@chromium.org * The default is to not allow cross-context access. 33643d00d0a753cf5e5091f883517e6612ece769f999jkummerow@chromium.org * ALL_CAN_READ means that all cross-context reads are allowed. 33653d00d0a753cf5e5091f883517e6612ece769f999jkummerow@chromium.org * ALL_CAN_WRITE means that all cross-context writes are allowed. 33663d00d0a753cf5e5091f883517e6612ece769f999jkummerow@chromium.org * The combination ALL_CAN_READ | ALL_CAN_WRITE can be used to allow all 33673d00d0a753cf5e5091f883517e6612ece769f999jkummerow@chromium.org * cross-context access. 33683d00d0a753cf5e5091f883517e6612ece769f999jkummerow@chromium.org * \param attribute The attributes of the property for which an accessor 33693d00d0a753cf5e5091f883517e6612ece769f999jkummerow@chromium.org * is added. 33703d00d0a753cf5e5091f883517e6612ece769f999jkummerow@chromium.org * \param signature The signature describes valid receivers for the accessor 33713d00d0a753cf5e5091f883517e6612ece769f999jkummerow@chromium.org * and is used to perform implicit instance checks against them. If the 33723d00d0a753cf5e5091f883517e6612ece769f999jkummerow@chromium.org * receiver is incompatible (i.e. is not an instance of the constructor as 33733d00d0a753cf5e5091f883517e6612ece769f999jkummerow@chromium.org * defined by FunctionTemplate::HasInstance()), an implicit TypeError is 33743d00d0a753cf5e5091f883517e6612ece769f999jkummerow@chromium.org * thrown and no callback is invoked. 33753d00d0a753cf5e5091f883517e6612ece769f999jkummerow@chromium.org */ 33763d00d0a753cf5e5091f883517e6612ece769f999jkummerow@chromium.org void SetNativeDataProperty(Local<String> name, 33773d00d0a753cf5e5091f883517e6612ece769f999jkummerow@chromium.org AccessorGetterCallback getter, 33783d00d0a753cf5e5091f883517e6612ece769f999jkummerow@chromium.org AccessorSetterCallback setter = 0, 33793d00d0a753cf5e5091f883517e6612ece769f999jkummerow@chromium.org // TODO(dcarney): gcc can't handle Local below 33803d00d0a753cf5e5091f883517e6612ece769f999jkummerow@chromium.org Handle<Value> data = Handle<Value>(), 33813d00d0a753cf5e5091f883517e6612ece769f999jkummerow@chromium.org PropertyAttribute attribute = None, 33823d00d0a753cf5e5091f883517e6612ece769f999jkummerow@chromium.org Local<AccessorSignature> signature = 33833d00d0a753cf5e5091f883517e6612ece769f999jkummerow@chromium.org Local<AccessorSignature>(), 33843d00d0a753cf5e5091f883517e6612ece769f999jkummerow@chromium.org AccessControl settings = DEFAULT); 3385e2a8937454723a720c81acc3f9e4162b18999b43machenbach@chromium.org void SetNativeDataProperty(Local<Name> name, 3386e2a8937454723a720c81acc3f9e4162b18999b43machenbach@chromium.org AccessorNameGetterCallback getter, 3387e2a8937454723a720c81acc3f9e4162b18999b43machenbach@chromium.org AccessorNameSetterCallback setter = 0, 3388e2a8937454723a720c81acc3f9e4162b18999b43machenbach@chromium.org // TODO(dcarney): gcc can't handle Local below 3389e2a8937454723a720c81acc3f9e4162b18999b43machenbach@chromium.org Handle<Value> data = Handle<Value>(), 3390e2a8937454723a720c81acc3f9e4162b18999b43machenbach@chromium.org PropertyAttribute attribute = None, 3391e2a8937454723a720c81acc3f9e4162b18999b43machenbach@chromium.org Local<AccessorSignature> signature = 3392e2a8937454723a720c81acc3f9e4162b18999b43machenbach@chromium.org Local<AccessorSignature>(), 3393e2a8937454723a720c81acc3f9e4162b18999b43machenbach@chromium.org AccessControl settings = DEFAULT); 33943d00d0a753cf5e5091f883517e6612ece769f999jkummerow@chromium.org 33953d00d0a753cf5e5091f883517e6612ece769f999jkummerow@chromium.org // This function is not yet stable and should not be used at this time. 3396e2a8937454723a720c81acc3f9e4162b18999b43machenbach@chromium.org bool SetDeclaredAccessor(Local<Name> name, 33973d00d0a753cf5e5091f883517e6612ece769f999jkummerow@chromium.org Local<DeclaredAccessorDescriptor> descriptor, 33983d00d0a753cf5e5091f883517e6612ece769f999jkummerow@chromium.org PropertyAttribute attribute = None, 33993d00d0a753cf5e5091f883517e6612ece769f999jkummerow@chromium.org Local<AccessorSignature> signature = 34003d00d0a753cf5e5091f883517e6612ece769f999jkummerow@chromium.org Local<AccessorSignature>(), 34013d00d0a753cf5e5091f883517e6612ece769f999jkummerow@chromium.org AccessControl settings = DEFAULT); 34023d00d0a753cf5e5091f883517e6612ece769f999jkummerow@chromium.org 340343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen private: 340443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen Template(); 340543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 340643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen friend class ObjectTemplate; 340743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen friend class FunctionTemplate; 340843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen}; 340943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 341043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 341143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen/** 341243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * NamedProperty[Getter|Setter] are used as interceptors on object. 341343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * See ObjectTemplate::SetNamedPropertyHandler. 341443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen */ 3415bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.orgtypedef void (*NamedPropertyGetterCallback)( 3416bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.org Local<String> property, 3417bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.org const PropertyCallbackInfo<Value>& info); 341843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 341943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 342043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen/** 342143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * Returns the value if the setter intercepts the request. 342243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * Otherwise, returns an empty handle. 342343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen */ 3424bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.orgtypedef void (*NamedPropertySetterCallback)( 3425bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.org Local<String> property, 3426bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.org Local<Value> value, 3427bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.org const PropertyCallbackInfo<Value>& info); 3428bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.org 342943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 343043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen/** 343143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * Returns a non-empty handle if the interceptor intercepts the request. 34322c186ca6690a1cb19ec7584e71f167234587c87cwhesse@chromium.org * The result is an integer encoding property attributes (like v8::None, 34332c186ca6690a1cb19ec7584e71f167234587c87cwhesse@chromium.org * v8::DontEnum, etc.) 343443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen */ 3435bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.orgtypedef void (*NamedPropertyQueryCallback)( 3436bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.org Local<String> property, 3437bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.org const PropertyCallbackInfo<Integer>& info); 343843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 343943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 344043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen/** 344143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * Returns a non-empty handle if the deleter intercepts the request. 3442727e995b7bba3c57fb1e5c156d386ca11894f781v * The return value is true if the property could be deleted and false 3443727e995b7bba3c57fb1e5c156d386ca11894f781v * otherwise. 344443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen */ 3445bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.orgtypedef void (*NamedPropertyDeleterCallback)( 3446bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.org Local<String> property, 3447bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.org const PropertyCallbackInfo<Boolean>& info); 3448bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.org 344943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 345043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen/** 3451727e995b7bba3c57fb1e5c156d386ca11894f781v * Returns an array containing the names of the properties the named 3452727e995b7bba3c57fb1e5c156d386ca11894f781v * property getter intercepts. 345343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen */ 3454bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.orgtypedef void (*NamedPropertyEnumeratorCallback)( 3455bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.org const PropertyCallbackInfo<Array>& info); 345643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 3457727e995b7bba3c57fb1e5c156d386ca11894f781v 345843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen/** 3459727e995b7bba3c57fb1e5c156d386ca11894f781v * Returns the value of the property if the getter intercepts the 3460727e995b7bba3c57fb1e5c156d386ca11894f781v * request. Otherwise, returns an empty handle. 346143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen */ 3462bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.orgtypedef void (*IndexedPropertyGetterCallback)( 3463bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.org uint32_t index, 3464bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.org const PropertyCallbackInfo<Value>& info); 346543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 346643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 346743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen/** 346843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * Returns the value if the setter intercepts the request. 346943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * Otherwise, returns an empty handle. 347043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen */ 3471bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.orgtypedef void (*IndexedPropertySetterCallback)( 3472bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.org uint32_t index, 3473bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.org Local<Value> value, 3474bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.org const PropertyCallbackInfo<Value>& info); 347543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 347643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 347743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen/** 347843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * Returns a non-empty handle if the interceptor intercepts the request. 3479ea4f62e1df22417fc8dc2c2425485dca98b13d07ager@chromium.org * The result is an integer encoding property attributes. 348043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen */ 3481bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.orgtypedef void (*IndexedPropertyQueryCallback)( 3482bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.org uint32_t index, 3483bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.org const PropertyCallbackInfo<Integer>& info); 3484bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.org 348543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 348643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen/** 348743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * Returns a non-empty handle if the deleter intercepts the request. 3488727e995b7bba3c57fb1e5c156d386ca11894f781v * The return value is true if the property could be deleted and false 3489727e995b7bba3c57fb1e5c156d386ca11894f781v * otherwise. 349043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen */ 3491bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.orgtypedef void (*IndexedPropertyDeleterCallback)( 3492bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.org uint32_t index, 3493bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.org const PropertyCallbackInfo<Boolean>& info); 3494bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.org 349543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 3496727e995b7bba3c57fb1e5c156d386ca11894f781v/** 3497727e995b7bba3c57fb1e5c156d386ca11894f781v * Returns an array containing the indices of the properties the 3498727e995b7bba3c57fb1e5c156d386ca11894f781v * indexed property getter intercepts. 3499727e995b7bba3c57fb1e5c156d386ca11894f781v */ 3500bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.orgtypedef void (*IndexedPropertyEnumeratorCallback)( 3501bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.org const PropertyCallbackInfo<Array>& info); 350243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 350343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 350443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen/** 3505727e995b7bba3c57fb1e5c156d386ca11894f781v * Access type specification. 350643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen */ 350743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenenum AccessType { 350843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen ACCESS_GET, 350943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen ACCESS_SET, 351043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen ACCESS_HAS, 351143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen ACCESS_DELETE, 351243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen ACCESS_KEYS 351343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen}; 351443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 3515727e995b7bba3c57fb1e5c156d386ca11894f781v 3516727e995b7bba3c57fb1e5c156d386ca11894f781v/** 3517727e995b7bba3c57fb1e5c156d386ca11894f781v * Returns true if cross-context access should be allowed to the named 35182bc58ef330b2d92ba287754282872699c151db4achristian.plesner.hansen@gmail.com * property with the given key on the host object. 3519727e995b7bba3c57fb1e5c156d386ca11894f781v */ 35202bc58ef330b2d92ba287754282872699c151db4achristian.plesner.hansen@gmail.comtypedef bool (*NamedSecurityCallback)(Local<Object> host, 352143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen Local<Value> key, 352243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen AccessType type, 352343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen Local<Value> data); 352443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 3525727e995b7bba3c57fb1e5c156d386ca11894f781v 3526727e995b7bba3c57fb1e5c156d386ca11894f781v/** 3527727e995b7bba3c57fb1e5c156d386ca11894f781v * Returns true if cross-context access should be allowed to the indexed 35282bc58ef330b2d92ba287754282872699c151db4achristian.plesner.hansen@gmail.com * property with the given index on the host object. 3529727e995b7bba3c57fb1e5c156d386ca11894f781v */ 35302bc58ef330b2d92ba287754282872699c151db4achristian.plesner.hansen@gmail.comtypedef bool (*IndexedSecurityCallback)(Local<Object> host, 353143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen uint32_t index, 353243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen AccessType type, 353343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen Local<Value> data); 353443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 353543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 353643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen/** 3537727e995b7bba3c57fb1e5c156d386ca11894f781v * A FunctionTemplate is used to create functions at runtime. There 3538727e995b7bba3c57fb1e5c156d386ca11894f781v * can only be one function created from a FunctionTemplate in a 3539c514574143c1bf74d4fb6e7dccb175fe9ff2f5d3sgjesse@chromium.org * context. The lifetime of the created function is equal to the 3540c514574143c1bf74d4fb6e7dccb175fe9ff2f5d3sgjesse@chromium.org * lifetime of the context. So in case the embedder needs to create 3541c514574143c1bf74d4fb6e7dccb175fe9ff2f5d3sgjesse@chromium.org * temporary functions that can be collected using Scripts is 3542c514574143c1bf74d4fb6e7dccb175fe9ff2f5d3sgjesse@chromium.org * preferred. 354343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * 354443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * A FunctionTemplate can have properties, these properties are added to the 3545727e995b7bba3c57fb1e5c156d386ca11894f781v * function object when it is created. 354643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * 3547727e995b7bba3c57fb1e5c156d386ca11894f781v * A FunctionTemplate has a corresponding instance template which is 3548727e995b7bba3c57fb1e5c156d386ca11894f781v * used to create object instances when the function is used as a 3549727e995b7bba3c57fb1e5c156d386ca11894f781v * constructor. Properties added to the instance template are added to 3550727e995b7bba3c57fb1e5c156d386ca11894f781v * each object instance. 355143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * 355243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * A FunctionTemplate can have a prototype template. The prototype template 355343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * is used to create the prototype object of the function. 355443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * 3555727e995b7bba3c57fb1e5c156d386ca11894f781v * The following example shows how to use a FunctionTemplate: 355643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * 3557727e995b7bba3c57fb1e5c156d386ca11894f781v * \code 355843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * v8::Local<v8::FunctionTemplate> t = v8::FunctionTemplate::New(); 355943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * t->Set("func_property", v8::Number::New(1)); 356043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * 356143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * v8::Local<v8::Template> proto_t = t->PrototypeTemplate(); 356243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * proto_t->Set("proto_method", v8::FunctionTemplate::New(InvokeCallback)); 356343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * proto_t->Set("proto_const", v8::Number::New(2)); 356443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * 356543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * v8::Local<v8::ObjectTemplate> instance_t = t->InstanceTemplate(); 356643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * instance_t->SetAccessor("instance_accessor", InstanceAccessorCallback); 356743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * instance_t->SetNamedPropertyHandler(PropertyHandlerCallback, ...); 356843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * instance_t->Set("instance_property", Number::New(3)); 356943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * 357043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * v8::Local<v8::Function> function = t->GetFunction(); 357143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * v8::Local<v8::Object> instance = function->NewInstance(); 3572727e995b7bba3c57fb1e5c156d386ca11894f781v * \endcode 357343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * 357443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * Let's use "function" as the JS variable name of the function object 3575727e995b7bba3c57fb1e5c156d386ca11894f781v * and "instance" for the instance object created above. The function 3576727e995b7bba3c57fb1e5c156d386ca11894f781v * and the instance will have the following properties: 357743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * 3578727e995b7bba3c57fb1e5c156d386ca11894f781v * \code 3579727e995b7bba3c57fb1e5c156d386ca11894f781v * func_property in function == true; 3580727e995b7bba3c57fb1e5c156d386ca11894f781v * function.func_property == 1; 358143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * 3582727e995b7bba3c57fb1e5c156d386ca11894f781v * function.prototype.proto_method() invokes 'InvokeCallback' 3583727e995b7bba3c57fb1e5c156d386ca11894f781v * function.prototype.proto_const == 2; 358443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * 3585727e995b7bba3c57fb1e5c156d386ca11894f781v * instance instanceof function == true; 3586727e995b7bba3c57fb1e5c156d386ca11894f781v * instance.instance_accessor calls 'InstanceAccessorCallback' 3587727e995b7bba3c57fb1e5c156d386ca11894f781v * instance.instance_property == 3; 3588727e995b7bba3c57fb1e5c156d386ca11894f781v * \endcode 358943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * 3590727e995b7bba3c57fb1e5c156d386ca11894f781v * A FunctionTemplate can inherit from another one by calling the 3591727e995b7bba3c57fb1e5c156d386ca11894f781v * FunctionTemplate::Inherit method. The following graph illustrates 3592727e995b7bba3c57fb1e5c156d386ca11894f781v * the semantics of inheritance: 359343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * 3594727e995b7bba3c57fb1e5c156d386ca11894f781v * \code 3595727e995b7bba3c57fb1e5c156d386ca11894f781v * FunctionTemplate Parent -> Parent() . prototype -> { } 3596727e995b7bba3c57fb1e5c156d386ca11894f781v * ^ ^ 3597727e995b7bba3c57fb1e5c156d386ca11894f781v * | Inherit(Parent) | .__proto__ 3598727e995b7bba3c57fb1e5c156d386ca11894f781v * | | 3599727e995b7bba3c57fb1e5c156d386ca11894f781v * FunctionTemplate Child -> Child() . prototype -> { } 3600727e995b7bba3c57fb1e5c156d386ca11894f781v * \endcode 360143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * 3602727e995b7bba3c57fb1e5c156d386ca11894f781v * A FunctionTemplate 'Child' inherits from 'Parent', the prototype 3603727e995b7bba3c57fb1e5c156d386ca11894f781v * object of the Child() function has __proto__ pointing to the 3604727e995b7bba3c57fb1e5c156d386ca11894f781v * Parent() function's prototype object. An instance of the Child 3605727e995b7bba3c57fb1e5c156d386ca11894f781v * function has all properties on Parent's instance templates. 360643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * 3607727e995b7bba3c57fb1e5c156d386ca11894f781v * Let Parent be the FunctionTemplate initialized in the previous 3608727e995b7bba3c57fb1e5c156d386ca11894f781v * section and create a Child FunctionTemplate by: 360943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * 3610727e995b7bba3c57fb1e5c156d386ca11894f781v * \code 361143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * Local<FunctionTemplate> parent = t; 361243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * Local<FunctionTemplate> child = FunctionTemplate::New(); 361343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * child->Inherit(parent); 361443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * 361543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * Local<Function> child_function = child->GetFunction(); 361643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * Local<Object> child_instance = child_function->NewInstance(); 3617727e995b7bba3c57fb1e5c156d386ca11894f781v * \endcode 361843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * 3619727e995b7bba3c57fb1e5c156d386ca11894f781v * The Child function and Child instance will have the following 3620727e995b7bba3c57fb1e5c156d386ca11894f781v * properties: 3621727e995b7bba3c57fb1e5c156d386ca11894f781v * 3622727e995b7bba3c57fb1e5c156d386ca11894f781v * \code 362343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * child_func.prototype.__proto__ == function.prototype; 3624727e995b7bba3c57fb1e5c156d386ca11894f781v * child_instance.instance_accessor calls 'InstanceAccessorCallback' 362543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * child_instance.instance_property == 3; 3626727e995b7bba3c57fb1e5c156d386ca11894f781v * \endcode 362743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen */ 3628594006017e46d82ed7146611dc12c20e3c509c7ddanno@chromium.orgclass V8_EXPORT FunctionTemplate : public Template { 362943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen public: 363043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen /** Creates a function template.*/ 3631bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.org static Local<FunctionTemplate> New( 363237be408adf363bbe682921a4a690752fa0ec33femachenbach@chromium.org Isolate* isolate, 363337be408adf363bbe682921a4a690752fa0ec33femachenbach@chromium.org FunctionCallback callback = 0, 363437be408adf363bbe682921a4a690752fa0ec33femachenbach@chromium.org Handle<Value> data = Handle<Value>(), 363537be408adf363bbe682921a4a690752fa0ec33femachenbach@chromium.org Handle<Signature> signature = Handle<Signature>(), 363637be408adf363bbe682921a4a690752fa0ec33femachenbach@chromium.org int length = 0); 3637bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.org 363843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen /** Returns the unique function instance in the current execution context.*/ 363943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen Local<Function> GetFunction(); 364043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 3641727e995b7bba3c57fb1e5c156d386ca11894f781v /** 3642727e995b7bba3c57fb1e5c156d386ca11894f781v * Set the call-handler callback for a FunctionTemplate. This 3643727e995b7bba3c57fb1e5c156d386ca11894f781v * callback is called whenever the function created from this 3644727e995b7bba3c57fb1e5c156d386ca11894f781v * FunctionTemplate is called. 3645727e995b7bba3c57fb1e5c156d386ca11894f781v */ 3646bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.org void SetCallHandler(FunctionCallback callback, 3647bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.org Handle<Value> data = Handle<Value>()); 364843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 3649a6bbcc801f63c451f814d6da77a1a48fba3d36c6yangguo@chromium.org /** Set the predefined length property for the FunctionTemplate. */ 3650a6bbcc801f63c451f814d6da77a1a48fba3d36c6yangguo@chromium.org void SetLength(int length); 3651a6bbcc801f63c451f814d6da77a1a48fba3d36c6yangguo@chromium.org 3652727e995b7bba3c57fb1e5c156d386ca11894f781v /** Get the InstanceTemplate. */ 365343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen Local<ObjectTemplate> InstanceTemplate(); 365443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 365543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen /** Causes the function template to inherit from a parent function template.*/ 365643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen void Inherit(Handle<FunctionTemplate> parent); 365743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 365843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen /** 365943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * A PrototypeTemplate is the template used to create the prototype object 366043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * of the function created by this template. 366143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen */ 366243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen Local<ObjectTemplate> PrototypeTemplate(); 366343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 3664727e995b7bba3c57fb1e5c156d386ca11894f781v /** 3665727e995b7bba3c57fb1e5c156d386ca11894f781v * Set the class name of the FunctionTemplate. This is used for 3666727e995b7bba3c57fb1e5c156d386ca11894f781v * printing objects created with the function created from the 3667727e995b7bba3c57fb1e5c156d386ca11894f781v * FunctionTemplate as its constructor. 3668727e995b7bba3c57fb1e5c156d386ca11894f781v */ 366943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen void SetClassName(Handle<String> name); 367043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 367143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen /** 3672727e995b7bba3c57fb1e5c156d386ca11894f781v * Determines whether the __proto__ accessor ignores instances of 3673727e995b7bba3c57fb1e5c156d386ca11894f781v * the function template. If instances of the function template are 3674727e995b7bba3c57fb1e5c156d386ca11894f781v * ignored, __proto__ skips all instances and instead returns the 3675727e995b7bba3c57fb1e5c156d386ca11894f781v * next object in the prototype chain. 3676727e995b7bba3c57fb1e5c156d386ca11894f781v * 3677727e995b7bba3c57fb1e5c156d386ca11894f781v * Call with a value of true to make the __proto__ accessor ignore 3678727e995b7bba3c57fb1e5c156d386ca11894f781v * instances of the function template. Call with a value of false 3679727e995b7bba3c57fb1e5c156d386ca11894f781v * to make the __proto__ accessor not ignore instances of the 3680727e995b7bba3c57fb1e5c156d386ca11894f781v * function template. By default, instances of a function template 3681727e995b7bba3c57fb1e5c156d386ca11894f781v * are not ignored. 368243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen */ 368343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen void SetHiddenPrototype(bool value); 368443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 368543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen /** 36862c99e28a7b1fcb3767dc7c0088514fe53be784c5ricow@chromium.org * Sets the ReadOnly flag in the attributes of the 'prototype' property 36872c99e28a7b1fcb3767dc7c0088514fe53be784c5ricow@chromium.org * of functions created from this FunctionTemplate to true. 368804921a8093ce8bbec34084bd742b7aa3d299be15ager@chromium.org */ 36892c99e28a7b1fcb3767dc7c0088514fe53be784c5ricow@chromium.org void ReadOnlyPrototype(); 369004921a8093ce8bbec34084bd742b7aa3d299be15ager@chromium.org 369104921a8093ce8bbec34084bd742b7aa3d299be15ager@chromium.org /** 3692662436e7b124b3535773535c671c53db322070b5verwaest@chromium.org * Removes the prototype property from functions created from this 3693662436e7b124b3535773535c671c53db322070b5verwaest@chromium.org * FunctionTemplate. 3694662436e7b124b3535773535c671c53db322070b5verwaest@chromium.org */ 3695662436e7b124b3535773535c671c53db322070b5verwaest@chromium.org void RemovePrototype(); 3696662436e7b124b3535773535c671c53db322070b5verwaest@chromium.org 3697662436e7b124b3535773535c671c53db322070b5verwaest@chromium.org /** 3698727e995b7bba3c57fb1e5c156d386ca11894f781v * Returns true if the given object is an instance of this function 3699727e995b7bba3c57fb1e5c156d386ca11894f781v * template. 370043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen */ 370143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen bool HasInstance(Handle<Value> object); 370243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 370343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen private: 370443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen FunctionTemplate(); 370543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen friend class Context; 370643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen friend class ObjectTemplate; 370743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen}; 370843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 370943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 371043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen/** 3711727e995b7bba3c57fb1e5c156d386ca11894f781v * An ObjectTemplate is used to create objects at runtime. 3712727e995b7bba3c57fb1e5c156d386ca11894f781v * 3713727e995b7bba3c57fb1e5c156d386ca11894f781v * Properties added to an ObjectTemplate are added to each object 3714727e995b7bba3c57fb1e5c156d386ca11894f781v * created from the ObjectTemplate. 371543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen */ 3716594006017e46d82ed7146611dc12c20e3c509c7ddanno@chromium.orgclass V8_EXPORT ObjectTemplate : public Template { 371743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen public: 3718727e995b7bba3c57fb1e5c156d386ca11894f781v /** Creates an ObjectTemplate. */ 371937be408adf363bbe682921a4a690752fa0ec33femachenbach@chromium.org static Local<ObjectTemplate> New(Isolate* isolate); 372037be408adf363bbe682921a4a690752fa0ec33femachenbach@chromium.org // Will be deprecated soon. 372143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen static Local<ObjectTemplate> New(); 3722727e995b7bba3c57fb1e5c156d386ca11894f781v 372343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen /** Creates a new instance of this template.*/ 372443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen Local<Object> NewInstance(); 372543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 372643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen /** 372743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * Sets an accessor on the object template. 3728727e995b7bba3c57fb1e5c156d386ca11894f781v * 3729727e995b7bba3c57fb1e5c156d386ca11894f781v * Whenever the property with the given name is accessed on objects 3730727e995b7bba3c57fb1e5c156d386ca11894f781v * created from this ObjectTemplate the getter and setter callbacks 3731727e995b7bba3c57fb1e5c156d386ca11894f781v * are called instead of getting and setting the property directly 3732727e995b7bba3c57fb1e5c156d386ca11894f781v * on the JavaScript object. 3733727e995b7bba3c57fb1e5c156d386ca11894f781v * 3734727e995b7bba3c57fb1e5c156d386ca11894f781v * \param name The name of the property for which an accessor is added. 3735727e995b7bba3c57fb1e5c156d386ca11894f781v * \param getter The callback to invoke when getting the property. 3736727e995b7bba3c57fb1e5c156d386ca11894f781v * \param setter The callback to invoke when setting the property. 3737727e995b7bba3c57fb1e5c156d386ca11894f781v * \param data A piece of data that will be passed to the getter and setter 3738727e995b7bba3c57fb1e5c156d386ca11894f781v * callbacks whenever they are invoked. 3739727e995b7bba3c57fb1e5c156d386ca11894f781v * \param settings Access control settings for the accessor. This is a bit 3740727e995b7bba3c57fb1e5c156d386ca11894f781v * field consisting of one of more of 3741727e995b7bba3c57fb1e5c156d386ca11894f781v * DEFAULT = 0, ALL_CAN_READ = 1, or ALL_CAN_WRITE = 2. 3742727e995b7bba3c57fb1e5c156d386ca11894f781v * The default is to not allow cross-context access. 3743727e995b7bba3c57fb1e5c156d386ca11894f781v * ALL_CAN_READ means that all cross-context reads are allowed. 3744727e995b7bba3c57fb1e5c156d386ca11894f781v * ALL_CAN_WRITE means that all cross-context writes are allowed. 3745727e995b7bba3c57fb1e5c156d386ca11894f781v * The combination ALL_CAN_READ | ALL_CAN_WRITE can be used to allow all 3746727e995b7bba3c57fb1e5c156d386ca11894f781v * cross-context access. 3747727e995b7bba3c57fb1e5c156d386ca11894f781v * \param attribute The attributes of the property for which an accessor 3748727e995b7bba3c57fb1e5c156d386ca11894f781v * is added. 37497028c05c1c71b9d5c5fe1bca01f2461d17a2dda7mmassi@chromium.org * \param signature The signature describes valid receivers for the accessor 37507028c05c1c71b9d5c5fe1bca01f2461d17a2dda7mmassi@chromium.org * and is used to perform implicit instance checks against them. If the 37517028c05c1c71b9d5c5fe1bca01f2461d17a2dda7mmassi@chromium.org * receiver is incompatible (i.e. is not an instance of the constructor as 37527028c05c1c71b9d5c5fe1bca01f2461d17a2dda7mmassi@chromium.org * defined by FunctionTemplate::HasInstance()), an implicit TypeError is 37537028c05c1c71b9d5c5fe1bca01f2461d17a2dda7mmassi@chromium.org * thrown and no callback is invoked. 375443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen */ 3755bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.org void SetAccessor(Handle<String> name, 3756bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.org AccessorGetterCallback getter, 3757bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.org AccessorSetterCallback setter = 0, 3758bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.org Handle<Value> data = Handle<Value>(), 3759bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.org AccessControl settings = DEFAULT, 3760bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.org PropertyAttribute attribute = None, 3761bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.org Handle<AccessorSignature> signature = 3762bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.org Handle<AccessorSignature>()); 3763e2a8937454723a720c81acc3f9e4162b18999b43machenbach@chromium.org void SetAccessor(Handle<Name> name, 3764e2a8937454723a720c81acc3f9e4162b18999b43machenbach@chromium.org AccessorNameGetterCallback getter, 3765e2a8937454723a720c81acc3f9e4162b18999b43machenbach@chromium.org AccessorNameSetterCallback setter = 0, 3766e2a8937454723a720c81acc3f9e4162b18999b43machenbach@chromium.org Handle<Value> data = Handle<Value>(), 3767e2a8937454723a720c81acc3f9e4162b18999b43machenbach@chromium.org AccessControl settings = DEFAULT, 3768e2a8937454723a720c81acc3f9e4162b18999b43machenbach@chromium.org PropertyAttribute attribute = None, 3769e2a8937454723a720c81acc3f9e4162b18999b43machenbach@chromium.org Handle<AccessorSignature> signature = 3770e2a8937454723a720c81acc3f9e4162b18999b43machenbach@chromium.org Handle<AccessorSignature>()); 377143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 377243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen /** 377343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * Sets a named property handler on the object template. 3774727e995b7bba3c57fb1e5c156d386ca11894f781v * 3775e2a8937454723a720c81acc3f9e4162b18999b43machenbach@chromium.org * Whenever a property whose name is a string is accessed on objects created 3776e2a8937454723a720c81acc3f9e4162b18999b43machenbach@chromium.org * from this object template, the provided callback is invoked instead of 3777727e995b7bba3c57fb1e5c156d386ca11894f781v * accessing the property directly on the JavaScript object. 3778727e995b7bba3c57fb1e5c156d386ca11894f781v * 3779727e995b7bba3c57fb1e5c156d386ca11894f781v * \param getter The callback to invoke when getting a property. 3780727e995b7bba3c57fb1e5c156d386ca11894f781v * \param setter The callback to invoke when setting a property. 37812c186ca6690a1cb19ec7584e71f167234587c87cwhesse@chromium.org * \param query The callback to invoke to check if a property is present, 37822c186ca6690a1cb19ec7584e71f167234587c87cwhesse@chromium.org * and if present, get its attributes. 3783727e995b7bba3c57fb1e5c156d386ca11894f781v * \param deleter The callback to invoke when deleting a property. 3784727e995b7bba3c57fb1e5c156d386ca11894f781v * \param enumerator The callback to invoke to enumerate all the named 3785727e995b7bba3c57fb1e5c156d386ca11894f781v * properties of an object. 3786727e995b7bba3c57fb1e5c156d386ca11894f781v * \param data A piece of data that will be passed to the callbacks 3787727e995b7bba3c57fb1e5c156d386ca11894f781v * whenever they are invoked. 378843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen */ 3789bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.org void SetNamedPropertyHandler( 3790bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.org NamedPropertyGetterCallback getter, 3791bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.org NamedPropertySetterCallback setter = 0, 3792bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.org NamedPropertyQueryCallback query = 0, 3793bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.org NamedPropertyDeleterCallback deleter = 0, 3794bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.org NamedPropertyEnumeratorCallback enumerator = 0, 3795bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.org Handle<Value> data = Handle<Value>()); 379643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 379743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen /** 379843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * Sets an indexed property handler on the object template. 3799727e995b7bba3c57fb1e5c156d386ca11894f781v * 3800727e995b7bba3c57fb1e5c156d386ca11894f781v * Whenever an indexed property is accessed on objects created from 3801727e995b7bba3c57fb1e5c156d386ca11894f781v * this object template, the provided callback is invoked instead of 3802727e995b7bba3c57fb1e5c156d386ca11894f781v * accessing the property directly on the JavaScript object. 3803727e995b7bba3c57fb1e5c156d386ca11894f781v * 3804727e995b7bba3c57fb1e5c156d386ca11894f781v * \param getter The callback to invoke when getting a property. 3805727e995b7bba3c57fb1e5c156d386ca11894f781v * \param setter The callback to invoke when setting a property. 38067304bcac06a6a63b9f3dcebac2eeceada87ca146vegorov@chromium.org * \param query The callback to invoke to check if an object has a property. 3807727e995b7bba3c57fb1e5c156d386ca11894f781v * \param deleter The callback to invoke when deleting a property. 3808727e995b7bba3c57fb1e5c156d386ca11894f781v * \param enumerator The callback to invoke to enumerate all the indexed 3809727e995b7bba3c57fb1e5c156d386ca11894f781v * properties of an object. 3810727e995b7bba3c57fb1e5c156d386ca11894f781v * \param data A piece of data that will be passed to the callbacks 3811727e995b7bba3c57fb1e5c156d386ca11894f781v * whenever they are invoked. 381243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen */ 3813bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.org void SetIndexedPropertyHandler( 3814bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.org IndexedPropertyGetterCallback getter, 3815bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.org IndexedPropertySetterCallback setter = 0, 3816bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.org IndexedPropertyQueryCallback query = 0, 3817bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.org IndexedPropertyDeleterCallback deleter = 0, 3818bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.org IndexedPropertyEnumeratorCallback enumerator = 0, 3819bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.org Handle<Value> data = Handle<Value>()); 382026c16f8ef35ec25d36420512a4ceaa74ea2e2b05vegorov@chromium.org 382143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen /** 382243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * Sets the callback to be used when calling instances created from 382343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * this template as a function. If no callback is set, instances 3824727e995b7bba3c57fb1e5c156d386ca11894f781v * behave like normal JavaScript objects that cannot be called as a 382543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * function. 382643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen */ 3827bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.org void SetCallAsFunctionHandler(FunctionCallback callback, 3828bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.org Handle<Value> data = Handle<Value>()); 382943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 3830727e995b7bba3c57fb1e5c156d386ca11894f781v /** 3831727e995b7bba3c57fb1e5c156d386ca11894f781v * Mark object instances of the template as undetectable. 3832727e995b7bba3c57fb1e5c156d386ca11894f781v * 3833727e995b7bba3c57fb1e5c156d386ca11894f781v * In many ways, undetectable objects behave as though they are not 3834727e995b7bba3c57fb1e5c156d386ca11894f781v * there. They behave like 'undefined' in conditionals and when 3835727e995b7bba3c57fb1e5c156d386ca11894f781v * printed. However, properties can be accessed and called as on 3836727e995b7bba3c57fb1e5c156d386ca11894f781v * normal objects. 3837727e995b7bba3c57fb1e5c156d386ca11894f781v */ 383843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen void MarkAsUndetectable(); 383943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 3840727e995b7bba3c57fb1e5c156d386ca11894f781v /** 3841727e995b7bba3c57fb1e5c156d386ca11894f781v * Sets access check callbacks on the object template. 3842727e995b7bba3c57fb1e5c156d386ca11894f781v * 3843727e995b7bba3c57fb1e5c156d386ca11894f781v * When accessing properties on instances of this object template, 3844727e995b7bba3c57fb1e5c156d386ca11894f781v * the access check callback will be called to determine whether or 3845727e995b7bba3c57fb1e5c156d386ca11894f781v * not to allow cross-context access to the properties. 38465a8ca6c70c6fc9716f18f6223c98d1fef5752cf6kasperl@chromium.org * The last parameter specifies whether access checks are turned 38475a8ca6c70c6fc9716f18f6223c98d1fef5752cf6kasperl@chromium.org * on by default on instances. If access checks are off by default, 38485a8ca6c70c6fc9716f18f6223c98d1fef5752cf6kasperl@chromium.org * they can be turned on on individual instances by calling 38495a8ca6c70c6fc9716f18f6223c98d1fef5752cf6kasperl@chromium.org * Object::TurnOnAccessCheck(). 3850727e995b7bba3c57fb1e5c156d386ca11894f781v */ 385143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen void SetAccessCheckCallbacks(NamedSecurityCallback named_handler, 385243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen IndexedSecurityCallback indexed_handler, 38535a8ca6c70c6fc9716f18f6223c98d1fef5752cf6kasperl@chromium.org Handle<Value> data = Handle<Value>(), 38545a8ca6c70c6fc9716f18f6223c98d1fef5752cf6kasperl@chromium.org bool turned_on_by_default = true); 385543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 3856212ac23f8231d169b4aa6737d762099993020826kasper.lund /** 3857212ac23f8231d169b4aa6737d762099993020826kasper.lund * Gets the number of internal fields for objects generated from 3858212ac23f8231d169b4aa6737d762099993020826kasper.lund * this template. 3859212ac23f8231d169b4aa6737d762099993020826kasper.lund */ 3860212ac23f8231d169b4aa6737d762099993020826kasper.lund int InternalFieldCount(); 3861212ac23f8231d169b4aa6737d762099993020826kasper.lund 3862212ac23f8231d169b4aa6737d762099993020826kasper.lund /** 3863212ac23f8231d169b4aa6737d762099993020826kasper.lund * Sets the number of internal fields for objects generated from 3864212ac23f8231d169b4aa6737d762099993020826kasper.lund * this template. 3865212ac23f8231d169b4aa6737d762099993020826kasper.lund */ 3866212ac23f8231d169b4aa6737d762099993020826kasper.lund void SetInternalFieldCount(int value); 3867212ac23f8231d169b4aa6737d762099993020826kasper.lund 386843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen private: 386943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen ObjectTemplate(); 387037be408adf363bbe682921a4a690752fa0ec33femachenbach@chromium.org static Local<ObjectTemplate> New(internal::Isolate* isolate, 387137be408adf363bbe682921a4a690752fa0ec33femachenbach@chromium.org Handle<FunctionTemplate> constructor); 387243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen friend class FunctionTemplate; 387343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen}; 387443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 387543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 387643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen/** 38777028c05c1c71b9d5c5fe1bca01f2461d17a2dda7mmassi@chromium.org * A Signature specifies which receivers and arguments are valid 38787028c05c1c71b9d5c5fe1bca01f2461d17a2dda7mmassi@chromium.org * parameters to a function. 387943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen */ 3880594006017e46d82ed7146611dc12c20e3c509c7ddanno@chromium.orgclass V8_EXPORT Signature : public Data { 388143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen public: 388237be408adf363bbe682921a4a690752fa0ec33femachenbach@chromium.org static Local<Signature> New(Isolate* isolate, 388337be408adf363bbe682921a4a690752fa0ec33femachenbach@chromium.org Handle<FunctionTemplate> receiver = 388437be408adf363bbe682921a4a690752fa0ec33femachenbach@chromium.org Handle<FunctionTemplate>(), 388537be408adf363bbe682921a4a690752fa0ec33femachenbach@chromium.org int argc = 0, 388637be408adf363bbe682921a4a690752fa0ec33femachenbach@chromium.org Handle<FunctionTemplate> argv[] = 0); 38879f18d9111f676f2899d9aa2444130c985eb75395machenbach@chromium.org 388843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen private: 388943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen Signature(); 389043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen}; 389143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 389243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 389343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen/** 38947028c05c1c71b9d5c5fe1bca01f2461d17a2dda7mmassi@chromium.org * An AccessorSignature specifies which receivers are valid parameters 38957028c05c1c71b9d5c5fe1bca01f2461d17a2dda7mmassi@chromium.org * to an accessor callback. 38967028c05c1c71b9d5c5fe1bca01f2461d17a2dda7mmassi@chromium.org */ 3897594006017e46d82ed7146611dc12c20e3c509c7ddanno@chromium.orgclass V8_EXPORT AccessorSignature : public Data { 38987028c05c1c71b9d5c5fe1bca01f2461d17a2dda7mmassi@chromium.org public: 389937be408adf363bbe682921a4a690752fa0ec33femachenbach@chromium.org static Local<AccessorSignature> New(Isolate* isolate, 390037be408adf363bbe682921a4a690752fa0ec33femachenbach@chromium.org Handle<FunctionTemplate> receiver = 390137be408adf363bbe682921a4a690752fa0ec33femachenbach@chromium.org Handle<FunctionTemplate>()); 390237be408adf363bbe682921a4a690752fa0ec33femachenbach@chromium.org 39037028c05c1c71b9d5c5fe1bca01f2461d17a2dda7mmassi@chromium.org private: 39047028c05c1c71b9d5c5fe1bca01f2461d17a2dda7mmassi@chromium.org AccessorSignature(); 39057028c05c1c71b9d5c5fe1bca01f2461d17a2dda7mmassi@chromium.org}; 39067028c05c1c71b9d5c5fe1bca01f2461d17a2dda7mmassi@chromium.org 39077028c05c1c71b9d5c5fe1bca01f2461d17a2dda7mmassi@chromium.org 3908594006017e46d82ed7146611dc12c20e3c509c7ddanno@chromium.orgclass V8_EXPORT DeclaredAccessorDescriptor : public Data { 3909750145ab1b720c97adf2b548cc8fbd28c8b8e06dulan@chromium.org private: 3910750145ab1b720c97adf2b548cc8fbd28c8b8e06dulan@chromium.org DeclaredAccessorDescriptor(); 3911750145ab1b720c97adf2b548cc8fbd28c8b8e06dulan@chromium.org}; 3912750145ab1b720c97adf2b548cc8fbd28c8b8e06dulan@chromium.org 3913750145ab1b720c97adf2b548cc8fbd28c8b8e06dulan@chromium.org 3914594006017e46d82ed7146611dc12c20e3c509c7ddanno@chromium.orgclass V8_EXPORT ObjectOperationDescriptor : public Data { 3915750145ab1b720c97adf2b548cc8fbd28c8b8e06dulan@chromium.org public: 3916750145ab1b720c97adf2b548cc8fbd28c8b8e06dulan@chromium.org // This function is not yet stable and should not be used at this time. 3917750145ab1b720c97adf2b548cc8fbd28c8b8e06dulan@chromium.org static Local<RawOperationDescriptor> NewInternalFieldDereference( 3918750145ab1b720c97adf2b548cc8fbd28c8b8e06dulan@chromium.org Isolate* isolate, 3919750145ab1b720c97adf2b548cc8fbd28c8b8e06dulan@chromium.org int internal_field); 3920750145ab1b720c97adf2b548cc8fbd28c8b8e06dulan@chromium.org private: 3921750145ab1b720c97adf2b548cc8fbd28c8b8e06dulan@chromium.org ObjectOperationDescriptor(); 3922750145ab1b720c97adf2b548cc8fbd28c8b8e06dulan@chromium.org}; 3923750145ab1b720c97adf2b548cc8fbd28c8b8e06dulan@chromium.org 3924750145ab1b720c97adf2b548cc8fbd28c8b8e06dulan@chromium.org 3925750145ab1b720c97adf2b548cc8fbd28c8b8e06dulan@chromium.orgenum DeclaredAccessorDescriptorDataType { 3926750145ab1b720c97adf2b548cc8fbd28c8b8e06dulan@chromium.org kDescriptorBoolType, 3927750145ab1b720c97adf2b548cc8fbd28c8b8e06dulan@chromium.org kDescriptorInt8Type, kDescriptorUint8Type, 3928750145ab1b720c97adf2b548cc8fbd28c8b8e06dulan@chromium.org kDescriptorInt16Type, kDescriptorUint16Type, 3929750145ab1b720c97adf2b548cc8fbd28c8b8e06dulan@chromium.org kDescriptorInt32Type, kDescriptorUint32Type, 3930750145ab1b720c97adf2b548cc8fbd28c8b8e06dulan@chromium.org kDescriptorFloatType, kDescriptorDoubleType 3931750145ab1b720c97adf2b548cc8fbd28c8b8e06dulan@chromium.org}; 3932750145ab1b720c97adf2b548cc8fbd28c8b8e06dulan@chromium.org 3933750145ab1b720c97adf2b548cc8fbd28c8b8e06dulan@chromium.org 3934594006017e46d82ed7146611dc12c20e3c509c7ddanno@chromium.orgclass V8_EXPORT RawOperationDescriptor : public Data { 3935750145ab1b720c97adf2b548cc8fbd28c8b8e06dulan@chromium.org public: 3936750145ab1b720c97adf2b548cc8fbd28c8b8e06dulan@chromium.org Local<DeclaredAccessorDescriptor> NewHandleDereference(Isolate* isolate); 3937750145ab1b720c97adf2b548cc8fbd28c8b8e06dulan@chromium.org Local<RawOperationDescriptor> NewRawDereference(Isolate* isolate); 3938750145ab1b720c97adf2b548cc8fbd28c8b8e06dulan@chromium.org Local<RawOperationDescriptor> NewRawShift(Isolate* isolate, 3939750145ab1b720c97adf2b548cc8fbd28c8b8e06dulan@chromium.org int16_t byte_offset); 3940750145ab1b720c97adf2b548cc8fbd28c8b8e06dulan@chromium.org Local<DeclaredAccessorDescriptor> NewPointerCompare(Isolate* isolate, 3941750145ab1b720c97adf2b548cc8fbd28c8b8e06dulan@chromium.org void* compare_value); 3942750145ab1b720c97adf2b548cc8fbd28c8b8e06dulan@chromium.org Local<DeclaredAccessorDescriptor> NewPrimitiveValue( 3943750145ab1b720c97adf2b548cc8fbd28c8b8e06dulan@chromium.org Isolate* isolate, 3944750145ab1b720c97adf2b548cc8fbd28c8b8e06dulan@chromium.org DeclaredAccessorDescriptorDataType data_type, 3945750145ab1b720c97adf2b548cc8fbd28c8b8e06dulan@chromium.org uint8_t bool_offset = 0); 3946750145ab1b720c97adf2b548cc8fbd28c8b8e06dulan@chromium.org Local<DeclaredAccessorDescriptor> NewBitmaskCompare8(Isolate* isolate, 3947750145ab1b720c97adf2b548cc8fbd28c8b8e06dulan@chromium.org uint8_t bitmask, 3948750145ab1b720c97adf2b548cc8fbd28c8b8e06dulan@chromium.org uint8_t compare_value); 3949750145ab1b720c97adf2b548cc8fbd28c8b8e06dulan@chromium.org Local<DeclaredAccessorDescriptor> NewBitmaskCompare16( 3950750145ab1b720c97adf2b548cc8fbd28c8b8e06dulan@chromium.org Isolate* isolate, 3951750145ab1b720c97adf2b548cc8fbd28c8b8e06dulan@chromium.org uint16_t bitmask, 3952750145ab1b720c97adf2b548cc8fbd28c8b8e06dulan@chromium.org uint16_t compare_value); 3953750145ab1b720c97adf2b548cc8fbd28c8b8e06dulan@chromium.org Local<DeclaredAccessorDescriptor> NewBitmaskCompare32( 3954750145ab1b720c97adf2b548cc8fbd28c8b8e06dulan@chromium.org Isolate* isolate, 3955750145ab1b720c97adf2b548cc8fbd28c8b8e06dulan@chromium.org uint32_t bitmask, 3956750145ab1b720c97adf2b548cc8fbd28c8b8e06dulan@chromium.org uint32_t compare_value); 3957750145ab1b720c97adf2b548cc8fbd28c8b8e06dulan@chromium.org 3958750145ab1b720c97adf2b548cc8fbd28c8b8e06dulan@chromium.org private: 3959750145ab1b720c97adf2b548cc8fbd28c8b8e06dulan@chromium.org RawOperationDescriptor(); 3960750145ab1b720c97adf2b548cc8fbd28c8b8e06dulan@chromium.org}; 3961750145ab1b720c97adf2b548cc8fbd28c8b8e06dulan@chromium.org 3962750145ab1b720c97adf2b548cc8fbd28c8b8e06dulan@chromium.org 39637028c05c1c71b9d5c5fe1bca01f2461d17a2dda7mmassi@chromium.org/** 3964727e995b7bba3c57fb1e5c156d386ca11894f781v * A utility for determining the type of objects based on the template 3965727e995b7bba3c57fb1e5c156d386ca11894f781v * they were constructed from. 396643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen */ 3967594006017e46d82ed7146611dc12c20e3c509c7ddanno@chromium.orgclass V8_EXPORT TypeSwitch : public Data { 396843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen public: 396943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen static Local<TypeSwitch> New(Handle<FunctionTemplate> type); 397043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen static Local<TypeSwitch> New(int argc, Handle<FunctionTemplate> types[]); 397143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen int match(Handle<Value> value); 397243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen private: 397343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen TypeSwitch(); 397443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen}; 397543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 397643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 3977fb144a0716afe7ab8bf245f2391a9e53b3db3c89fschneider@chromium.org// --- Extensions --- 397843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 39792c81ceb7f1e1ccf5f304be0646f4c1375941a7f2machenbach@chromium.orgclass V8_EXPORT ExternalOneByteStringResourceImpl 39802c81ceb7f1e1ccf5f304be0646f4c1375941a7f2machenbach@chromium.org : public String::ExternalOneByteStringResource { 3981c3b670ff19220959730d7886892bc4beb95d2ebaerik.corry@gmail.com public: 39822c81ceb7f1e1ccf5f304be0646f4c1375941a7f2machenbach@chromium.org ExternalOneByteStringResourceImpl() : data_(0), length_(0) {} 39832c81ceb7f1e1ccf5f304be0646f4c1375941a7f2machenbach@chromium.org ExternalOneByteStringResourceImpl(const char* data, size_t length) 3984c3b670ff19220959730d7886892bc4beb95d2ebaerik.corry@gmail.com : data_(data), length_(length) {} 3985c3b670ff19220959730d7886892bc4beb95d2ebaerik.corry@gmail.com const char* data() const { return data_; } 3986c3b670ff19220959730d7886892bc4beb95d2ebaerik.corry@gmail.com size_t length() const { return length_; } 3987c3b670ff19220959730d7886892bc4beb95d2ebaerik.corry@gmail.com 3988c3b670ff19220959730d7886892bc4beb95d2ebaerik.corry@gmail.com private: 3989c3b670ff19220959730d7886892bc4beb95d2ebaerik.corry@gmail.com const char* data_; 3990c3b670ff19220959730d7886892bc4beb95d2ebaerik.corry@gmail.com size_t length_; 3991c3b670ff19220959730d7886892bc4beb95d2ebaerik.corry@gmail.com}; 399243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 399343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen/** 399443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * Ignore 399543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen */ 3996594006017e46d82ed7146611dc12c20e3c509c7ddanno@chromium.orgclass V8_EXPORT Extension { // NOLINT 399743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen public: 3998c3b670ff19220959730d7886892bc4beb95d2ebaerik.corry@gmail.com // Note that the strings passed into this constructor must live as long 3999c3b670ff19220959730d7886892bc4beb95d2ebaerik.corry@gmail.com // as the Extension itself. 400043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen Extension(const char* name, 4001355cfd19c23ac613f2738a40e356ea48297f7d5eyangguo@chromium.org const char* source = 0, 400243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen int dep_count = 0, 4003c3b670ff19220959730d7886892bc4beb95d2ebaerik.corry@gmail.com const char** deps = 0, 4004c3b670ff19220959730d7886892bc4beb95d2ebaerik.corry@gmail.com int source_length = -1); 400543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen virtual ~Extension() { } 400637be408adf363bbe682921a4a690752fa0ec33femachenbach@chromium.org virtual v8::Handle<v8::FunctionTemplate> GetNativeFunctionTemplate( 400737be408adf363bbe682921a4a690752fa0ec33femachenbach@chromium.org v8::Isolate* isolate, v8::Handle<v8::String> name) { 400843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen return v8::Handle<v8::FunctionTemplate>(); 400943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } 401043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 4011c3b670ff19220959730d7886892bc4beb95d2ebaerik.corry@gmail.com const char* name() const { return name_; } 4012c3b670ff19220959730d7886892bc4beb95d2ebaerik.corry@gmail.com size_t source_length() const { return source_length_; } 40132c81ceb7f1e1ccf5f304be0646f4c1375941a7f2machenbach@chromium.org const String::ExternalOneByteStringResource* source() const { 4014c3b670ff19220959730d7886892bc4beb95d2ebaerik.corry@gmail.com return &source_; } 401543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen int dependency_count() { return dep_count_; } 401643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen const char** dependencies() { return deps_; } 401743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen void set_auto_enable(bool value) { auto_enable_ = value; } 401843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen bool auto_enable() { return auto_enable_; } 401943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 402043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen private: 402143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen const char* name_; 4022c3b670ff19220959730d7886892bc4beb95d2ebaerik.corry@gmail.com size_t source_length_; // expected to initialize before source_ 40232c81ceb7f1e1ccf5f304be0646f4c1375941a7f2machenbach@chromium.org ExternalOneByteStringResourceImpl source_; 402443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen int dep_count_; 402543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen const char** deps_; 402643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen bool auto_enable_; 402741044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org 402841044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org // Disallow copying and assigning. 402941044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org Extension(const Extension&); 403041044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org void operator=(const Extension&); 403143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen}; 403243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 403343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 4034594006017e46d82ed7146611dc12c20e3c509c7ddanno@chromium.orgvoid V8_EXPORT RegisterExtension(Extension* extension); 403543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 403643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 4037fb144a0716afe7ab8bf245f2391a9e53b3db3c89fschneider@chromium.org// --- Statics --- 403843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 403937be408adf363bbe682921a4a690752fa0ec33femachenbach@chromium.orgV8_INLINE Handle<Primitive> Undefined(Isolate* isolate); 404037be408adf363bbe682921a4a690752fa0ec33femachenbach@chromium.orgV8_INLINE Handle<Primitive> Null(Isolate* isolate); 404137be408adf363bbe682921a4a690752fa0ec33femachenbach@chromium.orgV8_INLINE Handle<Boolean> True(Isolate* isolate); 404237be408adf363bbe682921a4a690752fa0ec33femachenbach@chromium.orgV8_INLINE Handle<Boolean> False(Isolate* isolate); 404343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 404443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 404543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen/** 4046c514574143c1bf74d4fb6e7dccb175fe9ff2f5d3sgjesse@chromium.org * A set of constraints that specifies the limits of the runtime's memory use. 4047c514574143c1bf74d4fb6e7dccb175fe9ff2f5d3sgjesse@chromium.org * You must set the heap size before initializing the VM - the size cannot be 4048c514574143c1bf74d4fb6e7dccb175fe9ff2f5d3sgjesse@chromium.org * adjusted after the VM is initialized. 4049c514574143c1bf74d4fb6e7dccb175fe9ff2f5d3sgjesse@chromium.org * 4050c514574143c1bf74d4fb6e7dccb175fe9ff2f5d3sgjesse@chromium.org * If you are using threads then you should hold the V8::Locker lock while 4051c514574143c1bf74d4fb6e7dccb175fe9ff2f5d3sgjesse@chromium.org * setting the stack limit and you must set a non-default stack limit separately 4052c514574143c1bf74d4fb6e7dccb175fe9ff2f5d3sgjesse@chromium.org * for each thread. 405343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen */ 4054594006017e46d82ed7146611dc12c20e3c509c7ddanno@chromium.orgclass V8_EXPORT ResourceConstraints { 405543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen public: 405643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen ResourceConstraints(); 4057feecfdecd0a36aaebe2d2b7cab8178d2b71d45cfmachenbach@chromium.org 4058feecfdecd0a36aaebe2d2b7cab8178d2b71d45cfmachenbach@chromium.org /** 4059feecfdecd0a36aaebe2d2b7cab8178d2b71d45cfmachenbach@chromium.org * Configures the constraints with reasonable default values based on the 4060feecfdecd0a36aaebe2d2b7cab8178d2b71d45cfmachenbach@chromium.org * capabilities of the current device the VM is running on. 4061feecfdecd0a36aaebe2d2b7cab8178d2b71d45cfmachenbach@chromium.org * 4062feecfdecd0a36aaebe2d2b7cab8178d2b71d45cfmachenbach@chromium.org * \param physical_memory The total amount of physical memory on the current 4063feecfdecd0a36aaebe2d2b7cab8178d2b71d45cfmachenbach@chromium.org * device, in bytes. 40645b080567cf135f6dbaf23973ba6b6fa1d6af83b3machenbach@chromium.org * \param virtual_memory_limit The amount of virtual memory on the current 40655b080567cf135f6dbaf23973ba6b6fa1d6af83b3machenbach@chromium.org * device, in bytes, or zero, if there is no limit. 40669af454f6b1c6a921ac79ba0b9a979c73adb2ca1emachenbach@chromium.org * \param number_of_processors The number of CPUs available on the current 40679af454f6b1c6a921ac79ba0b9a979c73adb2ca1emachenbach@chromium.org * device. 4068feecfdecd0a36aaebe2d2b7cab8178d2b71d45cfmachenbach@chromium.org */ 40699af454f6b1c6a921ac79ba0b9a979c73adb2ca1emachenbach@chromium.org void ConfigureDefaults(uint64_t physical_memory, 40705b080567cf135f6dbaf23973ba6b6fa1d6af83b3machenbach@chromium.org uint64_t virtual_memory_limit, 40719af454f6b1c6a921ac79ba0b9a979c73adb2ca1emachenbach@chromium.org uint32_t number_of_processors); 4072feecfdecd0a36aaebe2d2b7cab8178d2b71d45cfmachenbach@chromium.org 40733c3c8d733702cb2b41471efa5eead1faf5b5711bmachenbach@chromium.org int max_semi_space_size() const { return max_semi_space_size_; } 40743c3c8d733702cb2b41471efa5eead1faf5b5711bmachenbach@chromium.org void set_max_semi_space_size(int value) { max_semi_space_size_ = value; } 40755a8ca6c70c6fc9716f18f6223c98d1fef5752cf6kasperl@chromium.org int max_old_space_size() const { return max_old_space_size_; } 407643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen void set_max_old_space_size(int value) { max_old_space_size_ = value; } 40779af454f6b1c6a921ac79ba0b9a979c73adb2ca1emachenbach@chromium.org int max_executable_size() const { return max_executable_size_; } 407801fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org void set_max_executable_size(int value) { max_executable_size_ = value; } 40795a8ca6c70c6fc9716f18f6223c98d1fef5752cf6kasperl@chromium.org uint32_t* stack_limit() const { return stack_limit_; } 4080c514574143c1bf74d4fb6e7dccb175fe9ff2f5d3sgjesse@chromium.org // Sets an address beyond which the VM's stack may not grow. 408143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen void set_stack_limit(uint32_t* value) { stack_limit_ = value; } 40829af454f6b1c6a921ac79ba0b9a979c73adb2ca1emachenbach@chromium.org int max_available_threads() const { return max_available_threads_; } 40839af454f6b1c6a921ac79ba0b9a979c73adb2ca1emachenbach@chromium.org // Set the number of threads available to V8, assuming at least 1. 40849af454f6b1c6a921ac79ba0b9a979c73adb2ca1emachenbach@chromium.org void set_max_available_threads(int value) { 40859af454f6b1c6a921ac79ba0b9a979c73adb2ca1emachenbach@chromium.org max_available_threads_ = value; 40869af454f6b1c6a921ac79ba0b9a979c73adb2ca1emachenbach@chromium.org } 408770ec1a2160dd946b9578d04d97d631a6d4ab4f8cbmeurer@chromium.org size_t code_range_size() const { return code_range_size_; } 408870ec1a2160dd946b9578d04d97d631a6d4ab4f8cbmeurer@chromium.org void set_code_range_size(size_t value) { 40895b080567cf135f6dbaf23973ba6b6fa1d6af83b3machenbach@chromium.org code_range_size_ = value; 40905b080567cf135f6dbaf23973ba6b6fa1d6af83b3machenbach@chromium.org } 4091c5d4971574b7a205fa0e788d8121dc79485e5e67hpayer@chromium.org 409243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen private: 40933c3c8d733702cb2b41471efa5eead1faf5b5711bmachenbach@chromium.org int max_semi_space_size_; 409443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen int max_old_space_size_; 409501fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org int max_executable_size_; 409643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen uint32_t* stack_limit_; 40979af454f6b1c6a921ac79ba0b9a979c73adb2ca1emachenbach@chromium.org int max_available_threads_; 409870ec1a2160dd946b9578d04d97d631a6d4ab4f8cbmeurer@chromium.org size_t code_range_size_; 409943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen}; 410043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 410143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 4102fb144a0716afe7ab8bf245f2391a9e53b3db3c89fschneider@chromium.org// --- Exceptions --- 410343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 410443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 410543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansentypedef void (*FatalErrorCallback)(const char* location, const char* message); 410643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 410743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 410889e18f5599cb4cd462cb1ed324addd7388fb4d60rossberg@chromium.orgtypedef void (*MessageCallback)(Handle<Message> message, Handle<Value> error); 410943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 4110ca2f2040e0e1a10df95bec18e69499f85f4c1316machenbach@chromium.org// --- Tracing --- 4111ca2f2040e0e1a10df95bec18e69499f85f4c1316machenbach@chromium.org 4112ca2f2040e0e1a10df95bec18e69499f85f4c1316machenbach@chromium.orgtypedef void (*LogEventCallback)(const char* name, int event); 411343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 411443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen/** 411543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * Create new error objects by calling the corresponding error object 411643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * constructor with the message. 411743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen */ 4118594006017e46d82ed7146611dc12c20e3c509c7ddanno@chromium.orgclass V8_EXPORT Exception { 411943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen public: 412043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen static Local<Value> RangeError(Handle<String> message); 412143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen static Local<Value> ReferenceError(Handle<String> message); 412243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen static Local<Value> SyntaxError(Handle<String> message); 412343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen static Local<Value> TypeError(Handle<String> message); 412443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen static Local<Value> Error(Handle<String> message); 412543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen}; 412643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 412743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 4128fb144a0716afe7ab8bf245f2391a9e53b3db3c89fschneider@chromium.org// --- Counters Callbacks --- 412943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 4130a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.orgtypedef int* (*CounterLookupCallback)(const char* name); 413143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 4132bb29dc9819bb6f495ab6eddd2543965eb97a8e43ager@chromium.orgtypedef void* (*CreateHistogramCallback)(const char* name, 4133bb29dc9819bb6f495ab6eddd2543965eb97a8e43ager@chromium.org int min, 4134bb29dc9819bb6f495ab6eddd2543965eb97a8e43ager@chromium.org int max, 4135bb29dc9819bb6f495ab6eddd2543965eb97a8e43ager@chromium.org size_t buckets); 4136bb29dc9819bb6f495ab6eddd2543965eb97a8e43ager@chromium.org 4137bb29dc9819bb6f495ab6eddd2543965eb97a8e43ager@chromium.orgtypedef void (*AddHistogramSampleCallback)(void* histogram, int sample); 4138bb29dc9819bb6f495ab6eddd2543965eb97a8e43ager@chromium.org 4139fb144a0716afe7ab8bf245f2391a9e53b3db3c89fschneider@chromium.org// --- Memory Allocation Callback --- 41403cdd9e13bac71e7c5b63da6962f8d30f6622db14kmillikin@chromium.org enum ObjectSpace { 41413cdd9e13bac71e7c5b63da6962f8d30f6622db14kmillikin@chromium.org kObjectSpaceNewSpace = 1 << 0, 41423cdd9e13bac71e7c5b63da6962f8d30f6622db14kmillikin@chromium.org kObjectSpaceOldPointerSpace = 1 << 1, 41433cdd9e13bac71e7c5b63da6962f8d30f6622db14kmillikin@chromium.org kObjectSpaceOldDataSpace = 1 << 2, 41443cdd9e13bac71e7c5b63da6962f8d30f6622db14kmillikin@chromium.org kObjectSpaceCodeSpace = 1 << 3, 41453cdd9e13bac71e7c5b63da6962f8d30f6622db14kmillikin@chromium.org kObjectSpaceMapSpace = 1 << 4, 41463cdd9e13bac71e7c5b63da6962f8d30f6622db14kmillikin@chromium.org kObjectSpaceLoSpace = 1 << 5, 41473cdd9e13bac71e7c5b63da6962f8d30f6622db14kmillikin@chromium.org 41483cdd9e13bac71e7c5b63da6962f8d30f6622db14kmillikin@chromium.org kObjectSpaceAll = kObjectSpaceNewSpace | kObjectSpaceOldPointerSpace | 41493cdd9e13bac71e7c5b63da6962f8d30f6622db14kmillikin@chromium.org kObjectSpaceOldDataSpace | kObjectSpaceCodeSpace | kObjectSpaceMapSpace | 41503cdd9e13bac71e7c5b63da6962f8d30f6622db14kmillikin@chromium.org kObjectSpaceLoSpace 41513cdd9e13bac71e7c5b63da6962f8d30f6622db14kmillikin@chromium.org }; 41523cdd9e13bac71e7c5b63da6962f8d30f6622db14kmillikin@chromium.org 41533cdd9e13bac71e7c5b63da6962f8d30f6622db14kmillikin@chromium.org enum AllocationAction { 41543cdd9e13bac71e7c5b63da6962f8d30f6622db14kmillikin@chromium.org kAllocationActionAllocate = 1 << 0, 41553cdd9e13bac71e7c5b63da6962f8d30f6622db14kmillikin@chromium.org kAllocationActionFree = 1 << 1, 41563cdd9e13bac71e7c5b63da6962f8d30f6622db14kmillikin@chromium.org kAllocationActionAll = kAllocationActionAllocate | kAllocationActionFree 41573cdd9e13bac71e7c5b63da6962f8d30f6622db14kmillikin@chromium.org }; 41583cdd9e13bac71e7c5b63da6962f8d30f6622db14kmillikin@chromium.org 41593cdd9e13bac71e7c5b63da6962f8d30f6622db14kmillikin@chromium.orgtypedef void (*MemoryAllocationCallback)(ObjectSpace space, 41603cdd9e13bac71e7c5b63da6962f8d30f6622db14kmillikin@chromium.org AllocationAction action, 41613cdd9e13bac71e7c5b63da6962f8d30f6622db14kmillikin@chromium.org int size); 41623cdd9e13bac71e7c5b63da6962f8d30f6622db14kmillikin@chromium.org 4163fab1498f2f42726c7de46c3ed560d56dd072a8b3rossberg@chromium.org// --- Leave Script Callback --- 4164fab1498f2f42726c7de46c3ed560d56dd072a8b3rossberg@chromium.orgtypedef void (*CallCompletedCallback)(); 4165fab1498f2f42726c7de46c3ed560d56dd072a8b3rossberg@chromium.org 416638de99aae2d4efc5796aa6935c1648447ec32fc8machenbach@chromium.org// --- Microtask Callback --- 416738de99aae2d4efc5796aa6935c1648447ec32fc8machenbach@chromium.orgtypedef void (*MicrotaskCallback)(void* data); 416838de99aae2d4efc5796aa6935c1648447ec32fc8machenbach@chromium.org 4169fb144a0716afe7ab8bf245f2391a9e53b3db3c89fschneider@chromium.org// --- Failed Access Check Callback --- 417043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansentypedef void (*FailedAccessCheckCallback)(Local<Object> target, 417143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen AccessType type, 417243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen Local<Value> data); 417343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 4174fb144a0716afe7ab8bf245f2391a9e53b3db3c89fschneider@chromium.org// --- AllowCodeGenerationFromStrings callbacks --- 4175fb144a0716afe7ab8bf245f2391a9e53b3db3c89fschneider@chromium.org 4176fb144a0716afe7ab8bf245f2391a9e53b3db3c89fschneider@chromium.org/** 4177fb144a0716afe7ab8bf245f2391a9e53b3db3c89fschneider@chromium.org * Callback to check if code generation from strings is allowed. See 4178fb144a0716afe7ab8bf245f2391a9e53b3db3c89fschneider@chromium.org * Context::AllowCodeGenerationFromStrings. 4179fb144a0716afe7ab8bf245f2391a9e53b3db3c89fschneider@chromium.org */ 4180fb144a0716afe7ab8bf245f2391a9e53b3db3c89fschneider@chromium.orgtypedef bool (*AllowCodeGenerationFromStringsCallback)(Local<Context> context); 4181fb144a0716afe7ab8bf245f2391a9e53b3db3c89fschneider@chromium.org 4182fb144a0716afe7ab8bf245f2391a9e53b3db3c89fschneider@chromium.org// --- Garbage Collection Callbacks --- 418343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 418443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen/** 41855d8f0e6e7b477f422e3064bdf0dd5f2a23f75544kmillikin@chromium.org * Applications can register callback functions which will be called 41865d8f0e6e7b477f422e3064bdf0dd5f2a23f75544kmillikin@chromium.org * before and after a garbage collection. Allocations are not 41875d8f0e6e7b477f422e3064bdf0dd5f2a23f75544kmillikin@chromium.org * allowed in the callback functions, you therefore cannot manipulate 4188727e995b7bba3c57fb1e5c156d386ca11894f781v * objects (set or delete properties for example) since it is possible 4189727e995b7bba3c57fb1e5c156d386ca11894f781v * such operations will result in the allocation of objects. 419043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen */ 41915d8f0e6e7b477f422e3064bdf0dd5f2a23f75544kmillikin@chromium.orgenum GCType { 41925d8f0e6e7b477f422e3064bdf0dd5f2a23f75544kmillikin@chromium.org kGCTypeScavenge = 1 << 0, 41935d8f0e6e7b477f422e3064bdf0dd5f2a23f75544kmillikin@chromium.org kGCTypeMarkSweepCompact = 1 << 1, 41945d8f0e6e7b477f422e3064bdf0dd5f2a23f75544kmillikin@chromium.org kGCTypeAll = kGCTypeScavenge | kGCTypeMarkSweepCompact 41955d8f0e6e7b477f422e3064bdf0dd5f2a23f75544kmillikin@chromium.org}; 41965d8f0e6e7b477f422e3064bdf0dd5f2a23f75544kmillikin@chromium.org 41975d8f0e6e7b477f422e3064bdf0dd5f2a23f75544kmillikin@chromium.orgenum GCCallbackFlags { 41985d8f0e6e7b477f422e3064bdf0dd5f2a23f75544kmillikin@chromium.org kNoGCCallbackFlags = 0, 4199ca29dd85fa02449d17188f5a6ff9a7cdf2ad9680danno@chromium.org kGCCallbackFlagCompacted = 1 << 0, 42004ddd2f1981d343a2efe6609a3e0ce6b9c80b6ed9machenbach@chromium.org kGCCallbackFlagConstructRetainedObjectInfos = 1 << 1, 42014ddd2f1981d343a2efe6609a3e0ce6b9c80b6ed9machenbach@chromium.org kGCCallbackFlagForced = 1 << 2 42025d8f0e6e7b477f422e3064bdf0dd5f2a23f75544kmillikin@chromium.org}; 42035d8f0e6e7b477f422e3064bdf0dd5f2a23f75544kmillikin@chromium.org 42045d8f0e6e7b477f422e3064bdf0dd5f2a23f75544kmillikin@chromium.orgtypedef void (*GCPrologueCallback)(GCType type, GCCallbackFlags flags); 42055d8f0e6e7b477f422e3064bdf0dd5f2a23f75544kmillikin@chromium.orgtypedef void (*GCEpilogueCallback)(GCType type, GCCallbackFlags flags); 42065d8f0e6e7b477f422e3064bdf0dd5f2a23f75544kmillikin@chromium.org 4207ea9b8ba58955b7efcc3e1550dd33a44fb4530136hpayer@chromium.orgtypedef void (*InterruptCallback)(Isolate* isolate, void* data); 4208ea9b8ba58955b7efcc3e1550dd33a44fb4530136hpayer@chromium.org 420943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 421043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen/** 42113811b436bf328d2ace6fe79ce99aeda71f9f06d3ager@chromium.org * Collection of V8 heap information. 42123811b436bf328d2ace6fe79ce99aeda71f9f06d3ager@chromium.org * 42133811b436bf328d2ace6fe79ce99aeda71f9f06d3ager@chromium.org * Instances of this class can be passed to v8::V8::HeapStatistics to 42143811b436bf328d2ace6fe79ce99aeda71f9f06d3ager@chromium.org * get heap statistics from V8. 42153811b436bf328d2ace6fe79ce99aeda71f9f06d3ager@chromium.org */ 4216594006017e46d82ed7146611dc12c20e3c509c7ddanno@chromium.orgclass V8_EXPORT HeapStatistics { 42173811b436bf328d2ace6fe79ce99aeda71f9f06d3ager@chromium.org public: 42183811b436bf328d2ace6fe79ce99aeda71f9f06d3ager@chromium.org HeapStatistics(); 42193811b436bf328d2ace6fe79ce99aeda71f9f06d3ager@chromium.org size_t total_heap_size() { return total_heap_size_; } 422001fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org size_t total_heap_size_executable() { return total_heap_size_executable_; } 422172204d59e7fb1b8a0e9012e1fac5ef160351e8e4danno@chromium.org size_t total_physical_size() { return total_physical_size_; } 42223811b436bf328d2ace6fe79ce99aeda71f9f06d3ager@chromium.org size_t used_heap_size() { return used_heap_size_; } 4223c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org size_t heap_size_limit() { return heap_size_limit_; } 42243811b436bf328d2ace6fe79ce99aeda71f9f06d3ager@chromium.org 42253811b436bf328d2ace6fe79ce99aeda71f9f06d3ager@chromium.org private: 42263811b436bf328d2ace6fe79ce99aeda71f9f06d3ager@chromium.org size_t total_heap_size_; 422701fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org size_t total_heap_size_executable_; 422872204d59e7fb1b8a0e9012e1fac5ef160351e8e4danno@chromium.org size_t total_physical_size_; 42293811b436bf328d2ace6fe79ce99aeda71f9f06d3ager@chromium.org size_t used_heap_size_; 4230c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org size_t heap_size_limit_; 42313811b436bf328d2ace6fe79ce99aeda71f9f06d3ager@chromium.org 42323811b436bf328d2ace6fe79ce99aeda71f9f06d3ager@chromium.org friend class V8; 42337c3372bc426136cb79479c1b59d1770f5528882ahpayer@chromium.org friend class Isolate; 42343811b436bf328d2ace6fe79ce99aeda71f9f06d3ager@chromium.org}; 42353811b436bf328d2ace6fe79ce99aeda71f9f06d3ager@chromium.org 42363811b436bf328d2ace6fe79ce99aeda71f9f06d3ager@chromium.org 4237b08986cb66c3f6687247cb6da186c1e73057e399whesse@chromium.orgclass RetainedObjectInfo; 4238b08986cb66c3f6687247cb6da186c1e73057e399whesse@chromium.org 42399e2b466e4b4a2026caefa79afe6737f1bad83a19machenbach@chromium.org 42409e2b466e4b4a2026caefa79afe6737f1bad83a19machenbach@chromium.org/** 42419e2b466e4b4a2026caefa79afe6737f1bad83a19machenbach@chromium.org * FunctionEntryHook is the type of the profile entry hook called at entry to 42429e2b466e4b4a2026caefa79afe6737f1bad83a19machenbach@chromium.org * any generated function when function-level profiling is enabled. 42439e2b466e4b4a2026caefa79afe6737f1bad83a19machenbach@chromium.org * 42449e2b466e4b4a2026caefa79afe6737f1bad83a19machenbach@chromium.org * \param function the address of the function that's being entered. 42459e2b466e4b4a2026caefa79afe6737f1bad83a19machenbach@chromium.org * \param return_addr_location points to a location on stack where the machine 42469e2b466e4b4a2026caefa79afe6737f1bad83a19machenbach@chromium.org * return address resides. This can be used to identify the caller of 42479e2b466e4b4a2026caefa79afe6737f1bad83a19machenbach@chromium.org * \p function, and/or modified to divert execution when \p function exits. 42489e2b466e4b4a2026caefa79afe6737f1bad83a19machenbach@chromium.org * 42499e2b466e4b4a2026caefa79afe6737f1bad83a19machenbach@chromium.org * \note the entry hook must not cause garbage collection. 42509e2b466e4b4a2026caefa79afe6737f1bad83a19machenbach@chromium.org */ 42519e2b466e4b4a2026caefa79afe6737f1bad83a19machenbach@chromium.orgtypedef void (*FunctionEntryHook)(uintptr_t function, 42529e2b466e4b4a2026caefa79afe6737f1bad83a19machenbach@chromium.org uintptr_t return_addr_location); 42539e2b466e4b4a2026caefa79afe6737f1bad83a19machenbach@chromium.org 42549e2b466e4b4a2026caefa79afe6737f1bad83a19machenbach@chromium.org/** 42559e2b466e4b4a2026caefa79afe6737f1bad83a19machenbach@chromium.org * A JIT code event is issued each time code is added, moved or removed. 42569e2b466e4b4a2026caefa79afe6737f1bad83a19machenbach@chromium.org * 42579e2b466e4b4a2026caefa79afe6737f1bad83a19machenbach@chromium.org * \note removal events are not currently issued. 42589e2b466e4b4a2026caefa79afe6737f1bad83a19machenbach@chromium.org */ 42599e2b466e4b4a2026caefa79afe6737f1bad83a19machenbach@chromium.orgstruct JitCodeEvent { 42609e2b466e4b4a2026caefa79afe6737f1bad83a19machenbach@chromium.org enum EventType { 42619e2b466e4b4a2026caefa79afe6737f1bad83a19machenbach@chromium.org CODE_ADDED, 42629e2b466e4b4a2026caefa79afe6737f1bad83a19machenbach@chromium.org CODE_MOVED, 42639e2b466e4b4a2026caefa79afe6737f1bad83a19machenbach@chromium.org CODE_REMOVED, 42649e2b466e4b4a2026caefa79afe6737f1bad83a19machenbach@chromium.org CODE_ADD_LINE_POS_INFO, 42659e2b466e4b4a2026caefa79afe6737f1bad83a19machenbach@chromium.org CODE_START_LINE_INFO_RECORDING, 42669e2b466e4b4a2026caefa79afe6737f1bad83a19machenbach@chromium.org CODE_END_LINE_INFO_RECORDING 42679e2b466e4b4a2026caefa79afe6737f1bad83a19machenbach@chromium.org }; 42689e2b466e4b4a2026caefa79afe6737f1bad83a19machenbach@chromium.org // Definition of the code position type. The "POSITION" type means the place 42699e2b466e4b4a2026caefa79afe6737f1bad83a19machenbach@chromium.org // in the source code which are of interest when making stack traces to 42709e2b466e4b4a2026caefa79afe6737f1bad83a19machenbach@chromium.org // pin-point the source location of a stack frame as close as possible. 42719e2b466e4b4a2026caefa79afe6737f1bad83a19machenbach@chromium.org // The "STATEMENT_POSITION" means the place at the beginning of each 42729e2b466e4b4a2026caefa79afe6737f1bad83a19machenbach@chromium.org // statement, and is used to indicate possible break locations. 42739e2b466e4b4a2026caefa79afe6737f1bad83a19machenbach@chromium.org enum PositionType { POSITION, STATEMENT_POSITION }; 42749e2b466e4b4a2026caefa79afe6737f1bad83a19machenbach@chromium.org 42759e2b466e4b4a2026caefa79afe6737f1bad83a19machenbach@chromium.org // Type of event. 42769e2b466e4b4a2026caefa79afe6737f1bad83a19machenbach@chromium.org EventType type; 42779e2b466e4b4a2026caefa79afe6737f1bad83a19machenbach@chromium.org // Start of the instructions. 42789e2b466e4b4a2026caefa79afe6737f1bad83a19machenbach@chromium.org void* code_start; 42799e2b466e4b4a2026caefa79afe6737f1bad83a19machenbach@chromium.org // Size of the instructions. 42809e2b466e4b4a2026caefa79afe6737f1bad83a19machenbach@chromium.org size_t code_len; 42819e2b466e4b4a2026caefa79afe6737f1bad83a19machenbach@chromium.org // Script info for CODE_ADDED event. 42829e2b466e4b4a2026caefa79afe6737f1bad83a19machenbach@chromium.org Handle<UnboundScript> script; 42839e2b466e4b4a2026caefa79afe6737f1bad83a19machenbach@chromium.org // User-defined data for *_LINE_INFO_* event. It's used to hold the source 42849e2b466e4b4a2026caefa79afe6737f1bad83a19machenbach@chromium.org // code line information which is returned from the 42859e2b466e4b4a2026caefa79afe6737f1bad83a19machenbach@chromium.org // CODE_START_LINE_INFO_RECORDING event. And it's passed to subsequent 42869e2b466e4b4a2026caefa79afe6737f1bad83a19machenbach@chromium.org // CODE_ADD_LINE_POS_INFO and CODE_END_LINE_INFO_RECORDING events. 42879e2b466e4b4a2026caefa79afe6737f1bad83a19machenbach@chromium.org void* user_data; 42889e2b466e4b4a2026caefa79afe6737f1bad83a19machenbach@chromium.org 42899e2b466e4b4a2026caefa79afe6737f1bad83a19machenbach@chromium.org struct name_t { 42909e2b466e4b4a2026caefa79afe6737f1bad83a19machenbach@chromium.org // Name of the object associated with the code, note that the string is not 42919e2b466e4b4a2026caefa79afe6737f1bad83a19machenbach@chromium.org // zero-terminated. 42929e2b466e4b4a2026caefa79afe6737f1bad83a19machenbach@chromium.org const char* str; 42939e2b466e4b4a2026caefa79afe6737f1bad83a19machenbach@chromium.org // Number of chars in str. 42949e2b466e4b4a2026caefa79afe6737f1bad83a19machenbach@chromium.org size_t len; 42959e2b466e4b4a2026caefa79afe6737f1bad83a19machenbach@chromium.org }; 42969e2b466e4b4a2026caefa79afe6737f1bad83a19machenbach@chromium.org 42979e2b466e4b4a2026caefa79afe6737f1bad83a19machenbach@chromium.org struct line_info_t { 42989e2b466e4b4a2026caefa79afe6737f1bad83a19machenbach@chromium.org // PC offset 42999e2b466e4b4a2026caefa79afe6737f1bad83a19machenbach@chromium.org size_t offset; 43009e2b466e4b4a2026caefa79afe6737f1bad83a19machenbach@chromium.org // Code postion 43019e2b466e4b4a2026caefa79afe6737f1bad83a19machenbach@chromium.org size_t pos; 43029e2b466e4b4a2026caefa79afe6737f1bad83a19machenbach@chromium.org // The position type. 43039e2b466e4b4a2026caefa79afe6737f1bad83a19machenbach@chromium.org PositionType position_type; 43049e2b466e4b4a2026caefa79afe6737f1bad83a19machenbach@chromium.org }; 43059e2b466e4b4a2026caefa79afe6737f1bad83a19machenbach@chromium.org 43069e2b466e4b4a2026caefa79afe6737f1bad83a19machenbach@chromium.org union { 43079e2b466e4b4a2026caefa79afe6737f1bad83a19machenbach@chromium.org // Only valid for CODE_ADDED. 43089e2b466e4b4a2026caefa79afe6737f1bad83a19machenbach@chromium.org struct name_t name; 43099e2b466e4b4a2026caefa79afe6737f1bad83a19machenbach@chromium.org 43109e2b466e4b4a2026caefa79afe6737f1bad83a19machenbach@chromium.org // Only valid for CODE_ADD_LINE_POS_INFO 43119e2b466e4b4a2026caefa79afe6737f1bad83a19machenbach@chromium.org struct line_info_t line_info; 43129e2b466e4b4a2026caefa79afe6737f1bad83a19machenbach@chromium.org 43139e2b466e4b4a2026caefa79afe6737f1bad83a19machenbach@chromium.org // New location of instructions. Only valid for CODE_MOVED. 43149e2b466e4b4a2026caefa79afe6737f1bad83a19machenbach@chromium.org void* new_code_start; 43159e2b466e4b4a2026caefa79afe6737f1bad83a19machenbach@chromium.org }; 43169e2b466e4b4a2026caefa79afe6737f1bad83a19machenbach@chromium.org}; 43179e2b466e4b4a2026caefa79afe6737f1bad83a19machenbach@chromium.org 43189e2b466e4b4a2026caefa79afe6737f1bad83a19machenbach@chromium.org/** 43199e2b466e4b4a2026caefa79afe6737f1bad83a19machenbach@chromium.org * Option flags passed to the SetJitCodeEventHandler function. 43209e2b466e4b4a2026caefa79afe6737f1bad83a19machenbach@chromium.org */ 43219e2b466e4b4a2026caefa79afe6737f1bad83a19machenbach@chromium.orgenum JitCodeEventOptions { 43229e2b466e4b4a2026caefa79afe6737f1bad83a19machenbach@chromium.org kJitCodeEventDefault = 0, 43239e2b466e4b4a2026caefa79afe6737f1bad83a19machenbach@chromium.org // Generate callbacks for already existent code. 43249e2b466e4b4a2026caefa79afe6737f1bad83a19machenbach@chromium.org kJitCodeEventEnumExisting = 1 43259e2b466e4b4a2026caefa79afe6737f1bad83a19machenbach@chromium.org}; 43269e2b466e4b4a2026caefa79afe6737f1bad83a19machenbach@chromium.org 43279e2b466e4b4a2026caefa79afe6737f1bad83a19machenbach@chromium.org 43289e2b466e4b4a2026caefa79afe6737f1bad83a19machenbach@chromium.org/** 43299e2b466e4b4a2026caefa79afe6737f1bad83a19machenbach@chromium.org * Callback function passed to SetJitCodeEventHandler. 43309e2b466e4b4a2026caefa79afe6737f1bad83a19machenbach@chromium.org * 43319e2b466e4b4a2026caefa79afe6737f1bad83a19machenbach@chromium.org * \param event code add, move or removal event. 43329e2b466e4b4a2026caefa79afe6737f1bad83a19machenbach@chromium.org */ 43339e2b466e4b4a2026caefa79afe6737f1bad83a19machenbach@chromium.orgtypedef void (*JitCodeEventHandler)(const JitCodeEvent* event); 43349e2b466e4b4a2026caefa79afe6737f1bad83a19machenbach@chromium.org 43359e2b466e4b4a2026caefa79afe6737f1bad83a19machenbach@chromium.org 43363811b436bf328d2ace6fe79ce99aeda71f9f06d3ager@chromium.org/** 4337a2c0c1516848536a514b3178d2c040b7df0ceb5bmachenbach@chromium.org * Isolate represents an isolated instance of the V8 engine. V8 isolates have 4338a2c0c1516848536a514b3178d2c040b7df0ceb5bmachenbach@chromium.org * completely separate states. Objects from one isolate must not be used in 4339a2c0c1516848536a514b3178d2c040b7df0ceb5bmachenbach@chromium.org * other isolates. The embedder can create multiple isolates and use them in 4340a2c0c1516848536a514b3178d2c040b7df0ceb5bmachenbach@chromium.org * parallel in multiple threads. An isolate can be entered by at most one 4341a2c0c1516848536a514b3178d2c040b7df0ceb5bmachenbach@chromium.org * thread at any given time. The Locker/Unlocker API must be used to 4342a2c0c1516848536a514b3178d2c040b7df0ceb5bmachenbach@chromium.org * synchronize. 4343ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org */ 4344594006017e46d82ed7146611dc12c20e3c509c7ddanno@chromium.orgclass V8_EXPORT Isolate { 4345ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org public: 4346ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org /** 43479e2b466e4b4a2026caefa79afe6737f1bad83a19machenbach@chromium.org * Initial configuration parameters for a new Isolate. 43489e2b466e4b4a2026caefa79afe6737f1bad83a19machenbach@chromium.org */ 43499e2b466e4b4a2026caefa79afe6737f1bad83a19machenbach@chromium.org struct CreateParams { 4350a2c0c1516848536a514b3178d2c040b7df0ceb5bmachenbach@chromium.org CreateParams() 4351a2c0c1516848536a514b3178d2c040b7df0ceb5bmachenbach@chromium.org : entry_hook(NULL), 4352a2c0c1516848536a514b3178d2c040b7df0ceb5bmachenbach@chromium.org code_event_handler(NULL), 4353a2c0c1516848536a514b3178d2c040b7df0ceb5bmachenbach@chromium.org enable_serializer(false) {} 43549e2b466e4b4a2026caefa79afe6737f1bad83a19machenbach@chromium.org 43559e2b466e4b4a2026caefa79afe6737f1bad83a19machenbach@chromium.org /** 43569e2b466e4b4a2026caefa79afe6737f1bad83a19machenbach@chromium.org * The optional entry_hook allows the host application to provide the 43579e2b466e4b4a2026caefa79afe6737f1bad83a19machenbach@chromium.org * address of a function that's invoked on entry to every V8-generated 43589e2b466e4b4a2026caefa79afe6737f1bad83a19machenbach@chromium.org * function. Note that entry_hook is invoked at the very start of each 43599e2b466e4b4a2026caefa79afe6737f1bad83a19machenbach@chromium.org * generated function. Furthermore, if an entry_hook is given, V8 will 43609e2b466e4b4a2026caefa79afe6737f1bad83a19machenbach@chromium.org * always run without a context snapshot. 43619e2b466e4b4a2026caefa79afe6737f1bad83a19machenbach@chromium.org */ 43629e2b466e4b4a2026caefa79afe6737f1bad83a19machenbach@chromium.org FunctionEntryHook entry_hook; 43639e2b466e4b4a2026caefa79afe6737f1bad83a19machenbach@chromium.org 43649e2b466e4b4a2026caefa79afe6737f1bad83a19machenbach@chromium.org /** 43659e2b466e4b4a2026caefa79afe6737f1bad83a19machenbach@chromium.org * Allows the host application to provide the address of a function that is 43669e2b466e4b4a2026caefa79afe6737f1bad83a19machenbach@chromium.org * notified each time code is added, moved or removed. 43679e2b466e4b4a2026caefa79afe6737f1bad83a19machenbach@chromium.org */ 43689e2b466e4b4a2026caefa79afe6737f1bad83a19machenbach@chromium.org JitCodeEventHandler code_event_handler; 4369d3df75b4472c9d5d4d2615aaea74d2adce4160f8machenbach@chromium.org 4370d3df75b4472c9d5d4d2615aaea74d2adce4160f8machenbach@chromium.org /** 4371d3df75b4472c9d5d4d2615aaea74d2adce4160f8machenbach@chromium.org * ResourceConstraints to use for the new Isolate. 4372d3df75b4472c9d5d4d2615aaea74d2adce4160f8machenbach@chromium.org */ 4373d3df75b4472c9d5d4d2615aaea74d2adce4160f8machenbach@chromium.org ResourceConstraints constraints; 4374a2c0c1516848536a514b3178d2c040b7df0ceb5bmachenbach@chromium.org 4375a2c0c1516848536a514b3178d2c040b7df0ceb5bmachenbach@chromium.org /** 4376a2c0c1516848536a514b3178d2c040b7df0ceb5bmachenbach@chromium.org * This flag currently renders the Isolate unusable. 4377a2c0c1516848536a514b3178d2c040b7df0ceb5bmachenbach@chromium.org */ 4378a2c0c1516848536a514b3178d2c040b7df0ceb5bmachenbach@chromium.org bool enable_serializer; 43799e2b466e4b4a2026caefa79afe6737f1bad83a19machenbach@chromium.org }; 43809e2b466e4b4a2026caefa79afe6737f1bad83a19machenbach@chromium.org 43819e2b466e4b4a2026caefa79afe6737f1bad83a19machenbach@chromium.org 43829e2b466e4b4a2026caefa79afe6737f1bad83a19machenbach@chromium.org /** 4383ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org * Stack-allocated class which sets the isolate for all operations 4384ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org * executed within a local scope. 4385ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org */ 4386594006017e46d82ed7146611dc12c20e3c509c7ddanno@chromium.org class V8_EXPORT Scope { 4387ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org public: 4388ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org explicit Scope(Isolate* isolate) : isolate_(isolate) { 4389ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org isolate->Enter(); 4390ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org } 4391ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org 4392ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org ~Scope() { isolate_->Exit(); } 4393ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org 4394ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org private: 4395ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org Isolate* const isolate_; 4396ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org 4397ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org // Prevent copying of Scope objects. 4398ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org Scope(const Scope&); 4399ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org Scope& operator=(const Scope&); 4400ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org }; 4401ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org 44025697144afb43181fed170b81c194fe1cc0fce3b6machenbach@chromium.org 44035697144afb43181fed170b81c194fe1cc0fce3b6machenbach@chromium.org /** 44045697144afb43181fed170b81c194fe1cc0fce3b6machenbach@chromium.org * Assert that no Javascript code is invoked. 44055697144afb43181fed170b81c194fe1cc0fce3b6machenbach@chromium.org */ 4406c2e08d7d6b03e672e13fc3bf274a292009decce6machenbach@chromium.org class V8_EXPORT DisallowJavascriptExecutionScope { 44075697144afb43181fed170b81c194fe1cc0fce3b6machenbach@chromium.org public: 44085697144afb43181fed170b81c194fe1cc0fce3b6machenbach@chromium.org enum OnFailure { CRASH_ON_FAILURE, THROW_ON_FAILURE }; 44095697144afb43181fed170b81c194fe1cc0fce3b6machenbach@chromium.org 44107010a2d84de67daace72568ffcde315a3e510ab5machenbach@chromium.org DisallowJavascriptExecutionScope(Isolate* isolate, OnFailure on_failure); 44115697144afb43181fed170b81c194fe1cc0fce3b6machenbach@chromium.org ~DisallowJavascriptExecutionScope(); 44125697144afb43181fed170b81c194fe1cc0fce3b6machenbach@chromium.org 44135697144afb43181fed170b81c194fe1cc0fce3b6machenbach@chromium.org private: 44145697144afb43181fed170b81c194fe1cc0fce3b6machenbach@chromium.org bool on_failure_; 44155697144afb43181fed170b81c194fe1cc0fce3b6machenbach@chromium.org void* internal_; 44165697144afb43181fed170b81c194fe1cc0fce3b6machenbach@chromium.org 44175697144afb43181fed170b81c194fe1cc0fce3b6machenbach@chromium.org // Prevent copying of Scope objects. 44185697144afb43181fed170b81c194fe1cc0fce3b6machenbach@chromium.org DisallowJavascriptExecutionScope(const DisallowJavascriptExecutionScope&); 44195697144afb43181fed170b81c194fe1cc0fce3b6machenbach@chromium.org DisallowJavascriptExecutionScope& operator=( 44205697144afb43181fed170b81c194fe1cc0fce3b6machenbach@chromium.org const DisallowJavascriptExecutionScope&); 44215697144afb43181fed170b81c194fe1cc0fce3b6machenbach@chromium.org }; 44225697144afb43181fed170b81c194fe1cc0fce3b6machenbach@chromium.org 44235697144afb43181fed170b81c194fe1cc0fce3b6machenbach@chromium.org 44245697144afb43181fed170b81c194fe1cc0fce3b6machenbach@chromium.org /** 44255697144afb43181fed170b81c194fe1cc0fce3b6machenbach@chromium.org * Introduce exception to DisallowJavascriptExecutionScope. 44265697144afb43181fed170b81c194fe1cc0fce3b6machenbach@chromium.org */ 4427c2e08d7d6b03e672e13fc3bf274a292009decce6machenbach@chromium.org class V8_EXPORT AllowJavascriptExecutionScope { 44285697144afb43181fed170b81c194fe1cc0fce3b6machenbach@chromium.org public: 44295697144afb43181fed170b81c194fe1cc0fce3b6machenbach@chromium.org explicit AllowJavascriptExecutionScope(Isolate* isolate); 44305697144afb43181fed170b81c194fe1cc0fce3b6machenbach@chromium.org ~AllowJavascriptExecutionScope(); 44315697144afb43181fed170b81c194fe1cc0fce3b6machenbach@chromium.org 44325697144afb43181fed170b81c194fe1cc0fce3b6machenbach@chromium.org private: 44335697144afb43181fed170b81c194fe1cc0fce3b6machenbach@chromium.org void* internal_throws_; 44345697144afb43181fed170b81c194fe1cc0fce3b6machenbach@chromium.org void* internal_assert_; 44355697144afb43181fed170b81c194fe1cc0fce3b6machenbach@chromium.org 44365697144afb43181fed170b81c194fe1cc0fce3b6machenbach@chromium.org // Prevent copying of Scope objects. 44375697144afb43181fed170b81c194fe1cc0fce3b6machenbach@chromium.org AllowJavascriptExecutionScope(const AllowJavascriptExecutionScope&); 44385697144afb43181fed170b81c194fe1cc0fce3b6machenbach@chromium.org AllowJavascriptExecutionScope& operator=( 44395697144afb43181fed170b81c194fe1cc0fce3b6machenbach@chromium.org const AllowJavascriptExecutionScope&); 44405697144afb43181fed170b81c194fe1cc0fce3b6machenbach@chromium.org }; 44415697144afb43181fed170b81c194fe1cc0fce3b6machenbach@chromium.org 4442ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org /** 4443c8e8806f9e54a027d667425f1bb1b28cf9cbb6f7machenbach@chromium.org * Do not run microtasks while this scope is active, even if microtasks are 4444c8e8806f9e54a027d667425f1bb1b28cf9cbb6f7machenbach@chromium.org * automatically executed otherwise. 4445c8e8806f9e54a027d667425f1bb1b28cf9cbb6f7machenbach@chromium.org */ 4446c8e8806f9e54a027d667425f1bb1b28cf9cbb6f7machenbach@chromium.org class V8_EXPORT SuppressMicrotaskExecutionScope { 4447c8e8806f9e54a027d667425f1bb1b28cf9cbb6f7machenbach@chromium.org public: 4448c8e8806f9e54a027d667425f1bb1b28cf9cbb6f7machenbach@chromium.org explicit SuppressMicrotaskExecutionScope(Isolate* isolate); 4449c8e8806f9e54a027d667425f1bb1b28cf9cbb6f7machenbach@chromium.org ~SuppressMicrotaskExecutionScope(); 4450c8e8806f9e54a027d667425f1bb1b28cf9cbb6f7machenbach@chromium.org 4451c8e8806f9e54a027d667425f1bb1b28cf9cbb6f7machenbach@chromium.org private: 4452c8e8806f9e54a027d667425f1bb1b28cf9cbb6f7machenbach@chromium.org internal::Isolate* isolate_; 4453c8e8806f9e54a027d667425f1bb1b28cf9cbb6f7machenbach@chromium.org 4454c8e8806f9e54a027d667425f1bb1b28cf9cbb6f7machenbach@chromium.org // Prevent copying of Scope objects. 4455c8e8806f9e54a027d667425f1bb1b28cf9cbb6f7machenbach@chromium.org SuppressMicrotaskExecutionScope(const SuppressMicrotaskExecutionScope&); 4456c8e8806f9e54a027d667425f1bb1b28cf9cbb6f7machenbach@chromium.org SuppressMicrotaskExecutionScope& operator=( 4457c8e8806f9e54a027d667425f1bb1b28cf9cbb6f7machenbach@chromium.org const SuppressMicrotaskExecutionScope&); 4458c8e8806f9e54a027d667425f1bb1b28cf9cbb6f7machenbach@chromium.org }; 4459c8e8806f9e54a027d667425f1bb1b28cf9cbb6f7machenbach@chromium.org 4460c8e8806f9e54a027d667425f1bb1b28cf9cbb6f7machenbach@chromium.org /** 44614ddd2f1981d343a2efe6609a3e0ce6b9c80b6ed9machenbach@chromium.org * Types of garbage collections that can be requested via 44624ddd2f1981d343a2efe6609a3e0ce6b9c80b6ed9machenbach@chromium.org * RequestGarbageCollectionForTesting. 44634ddd2f1981d343a2efe6609a3e0ce6b9c80b6ed9machenbach@chromium.org */ 44644ddd2f1981d343a2efe6609a3e0ce6b9c80b6ed9machenbach@chromium.org enum GarbageCollectionType { 44654ddd2f1981d343a2efe6609a3e0ce6b9c80b6ed9machenbach@chromium.org kFullGarbageCollection, 44664ddd2f1981d343a2efe6609a3e0ce6b9c80b6ed9machenbach@chromium.org kMinorGarbageCollection 44674ddd2f1981d343a2efe6609a3e0ce6b9c80b6ed9machenbach@chromium.org }; 44684ddd2f1981d343a2efe6609a3e0ce6b9c80b6ed9machenbach@chromium.org 44694ddd2f1981d343a2efe6609a3e0ce6b9c80b6ed9machenbach@chromium.org /** 4470975b940441085887fc02bebf8877d5ec97e1e06cmachenbach@chromium.org * Features reported via the SetUseCounterCallback callback. Do not chang 4471975b940441085887fc02bebf8877d5ec97e1e06cmachenbach@chromium.org * assigned numbers of existing items; add new features to the end of this 4472975b940441085887fc02bebf8877d5ec97e1e06cmachenbach@chromium.org * list. 4473975b940441085887fc02bebf8877d5ec97e1e06cmachenbach@chromium.org */ 4474975b940441085887fc02bebf8877d5ec97e1e06cmachenbach@chromium.org enum UseCounterFeature { 44755de0074a922429f5e0ec2cf140c2d2989bf88140yangguo@chromium.org kUseAsm = 0, 44765de0074a922429f5e0ec2cf140c2d2989bf88140yangguo@chromium.org kUseCounterFeatureCount // This enum value must be last. 4477975b940441085887fc02bebf8877d5ec97e1e06cmachenbach@chromium.org }; 4478975b940441085887fc02bebf8877d5ec97e1e06cmachenbach@chromium.org 4479975b940441085887fc02bebf8877d5ec97e1e06cmachenbach@chromium.org typedef void (*UseCounterCallback)(Isolate* isolate, 4480975b940441085887fc02bebf8877d5ec97e1e06cmachenbach@chromium.org UseCounterFeature feature); 4481975b940441085887fc02bebf8877d5ec97e1e06cmachenbach@chromium.org 4482975b940441085887fc02bebf8877d5ec97e1e06cmachenbach@chromium.org 4483975b940441085887fc02bebf8877d5ec97e1e06cmachenbach@chromium.org /** 4484ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org * Creates a new isolate. Does not change the currently entered 4485ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org * isolate. 4486ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org * 4487ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org * When an isolate is no longer used its resources should be freed 4488ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org * by calling Dispose(). Using the delete operator is not allowed. 4489a2c0c1516848536a514b3178d2c040b7df0ceb5bmachenbach@chromium.org * 4490a2c0c1516848536a514b3178d2c040b7df0ceb5bmachenbach@chromium.org * V8::Initialize() must have run prior to this. 4491ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org */ 44929e2b466e4b4a2026caefa79afe6737f1bad83a19machenbach@chromium.org static Isolate* New(const CreateParams& params = CreateParams()); 4493ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org 4494ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org /** 4495ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org * Returns the entered isolate for the current thread or NULL in 4496ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org * case there is no current isolate. 4497ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org */ 4498ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org static Isolate* GetCurrent(); 4499ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org 4500ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org /** 4501ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org * Methods below this point require holding a lock (using Locker) in 4502ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org * a multi-threaded environment. 4503ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org */ 4504ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org 4505ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org /** 4506ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org * Sets this isolate as the entered one for the current thread. 4507ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org * Saves the previously entered one (if any), so that it can be 4508ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org * restored when exiting. Re-entering an isolate is allowed. 4509ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org */ 4510ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org void Enter(); 4511ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org 4512ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org /** 4513ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org * Exits this isolate by restoring the previously entered one in the 4514ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org * current thread. The isolate may still stay the same, if it was 4515ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org * entered more than once. 4516ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org * 4517ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org * Requires: this == Isolate::GetCurrent(). 4518ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org */ 4519ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org void Exit(); 4520ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org 4521ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org /** 4522ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org * Disposes the isolate. The isolate must not be entered by any 4523ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org * thread to be disposable. 4524ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org */ 4525ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org void Dispose(); 4526ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org 4527ea91cc579ade536e3a08498a8157921dd4f533d1ager@chromium.org /** 45287ff7607c2315ea91e4d13330ce14125e4bb4851amachenbach@chromium.org * Associate embedder-specific data with the isolate. |slot| has to be 45297ff7607c2315ea91e4d13330ce14125e4bb4851amachenbach@chromium.org * between 0 and GetNumberOfDataSlots() - 1. 45307ff7607c2315ea91e4d13330ce14125e4bb4851amachenbach@chromium.org */ 45317ff7607c2315ea91e4d13330ce14125e4bb4851amachenbach@chromium.org V8_INLINE void SetData(uint32_t slot, void* data); 45327ff7607c2315ea91e4d13330ce14125e4bb4851amachenbach@chromium.org 45337ff7607c2315ea91e4d13330ce14125e4bb4851amachenbach@chromium.org /** 45347ff7607c2315ea91e4d13330ce14125e4bb4851amachenbach@chromium.org * Retrieve embedder-specific data from the isolate. 45357ff7607c2315ea91e4d13330ce14125e4bb4851amachenbach@chromium.org * Returns NULL if SetData has never been called for the given |slot|. 45367ff7607c2315ea91e4d13330ce14125e4bb4851amachenbach@chromium.org */ 45377ff7607c2315ea91e4d13330ce14125e4bb4851amachenbach@chromium.org V8_INLINE void* GetData(uint32_t slot); 45387ff7607c2315ea91e4d13330ce14125e4bb4851amachenbach@chromium.org 45397ff7607c2315ea91e4d13330ce14125e4bb4851amachenbach@chromium.org /** 45407ff7607c2315ea91e4d13330ce14125e4bb4851amachenbach@chromium.org * Returns the maximum number of available embedder data slots. Valid slots 45417ff7607c2315ea91e4d13330ce14125e4bb4851amachenbach@chromium.org * are in the range of 0 - GetNumberOfDataSlots() - 1. 45427ff7607c2315ea91e4d13330ce14125e4bb4851amachenbach@chromium.org */ 45437ff7607c2315ea91e4d13330ce14125e4bb4851amachenbach@chromium.org V8_INLINE static uint32_t GetNumberOfDataSlots(); 45447ff7607c2315ea91e4d13330ce14125e4bb4851amachenbach@chromium.org 45457ff7607c2315ea91e4d13330ce14125e4bb4851amachenbach@chromium.org /** 45467c3372bc426136cb79479c1b59d1770f5528882ahpayer@chromium.org * Get statistics about the heap memory usage. 45477c3372bc426136cb79479c1b59d1770f5528882ahpayer@chromium.org */ 45487c3372bc426136cb79479c1b59d1770f5528882ahpayer@chromium.org void GetHeapStatistics(HeapStatistics* heap_statistics); 45497c3372bc426136cb79479c1b59d1770f5528882ahpayer@chromium.org 45502bda543d75374afd8d7e98f56ca99a57ae1b7bd1svenpanne@chromium.org /** 45512bda543d75374afd8d7e98f56ca99a57ae1b7bd1svenpanne@chromium.org * Adjusts the amount of registered external memory. Used to give V8 an 45522bda543d75374afd8d7e98f56ca99a57ae1b7bd1svenpanne@chromium.org * indication of the amount of externally allocated memory that is kept alive 45532bda543d75374afd8d7e98f56ca99a57ae1b7bd1svenpanne@chromium.org * by JavaScript objects. V8 uses this to decide when to perform global 45542bda543d75374afd8d7e98f56ca99a57ae1b7bd1svenpanne@chromium.org * garbage collections. Registering externally allocated memory will trigger 45552bda543d75374afd8d7e98f56ca99a57ae1b7bd1svenpanne@chromium.org * global garbage collections more often than it would otherwise in an attempt 45562bda543d75374afd8d7e98f56ca99a57ae1b7bd1svenpanne@chromium.org * to garbage collect the JavaScript objects that keep the externally 45572bda543d75374afd8d7e98f56ca99a57ae1b7bd1svenpanne@chromium.org * allocated memory alive. 45582bda543d75374afd8d7e98f56ca99a57ae1b7bd1svenpanne@chromium.org * 45592bda543d75374afd8d7e98f56ca99a57ae1b7bd1svenpanne@chromium.org * \param change_in_bytes the change in externally allocated memory that is 45602bda543d75374afd8d7e98f56ca99a57ae1b7bd1svenpanne@chromium.org * kept alive by JavaScript objects. 45612bda543d75374afd8d7e98f56ca99a57ae1b7bd1svenpanne@chromium.org * \returns the adjusted value. 45622bda543d75374afd8d7e98f56ca99a57ae1b7bd1svenpanne@chromium.org */ 45631e2d50cf3d94ff48285da107b7a9da1ad0fc873dmachenbach@chromium.org V8_INLINE int64_t 45641e2d50cf3d94ff48285da107b7a9da1ad0fc873dmachenbach@chromium.org AdjustAmountOfExternalAllocatedMemory(int64_t change_in_bytes); 45652bda543d75374afd8d7e98f56ca99a57ae1b7bd1svenpanne@chromium.org 4566f705b5034dc5bc422ac1019b591469a7d0534772mstarzinger@chromium.org /** 4567f705b5034dc5bc422ac1019b591469a7d0534772mstarzinger@chromium.org * Returns heap profiler for this isolate. Will return NULL until the isolate 4568f705b5034dc5bc422ac1019b591469a7d0534772mstarzinger@chromium.org * is initialized. 4569f705b5034dc5bc422ac1019b591469a7d0534772mstarzinger@chromium.org */ 4570f705b5034dc5bc422ac1019b591469a7d0534772mstarzinger@chromium.org HeapProfiler* GetHeapProfiler(); 4571f705b5034dc5bc422ac1019b591469a7d0534772mstarzinger@chromium.org 4572f705b5034dc5bc422ac1019b591469a7d0534772mstarzinger@chromium.org /** 457393a47f4837f2137c8d8349250fd8e91da3108126jkummerow@chromium.org * Returns CPU profiler for this isolate. Will return NULL unless the isolate 457493a47f4837f2137c8d8349250fd8e91da3108126jkummerow@chromium.org * is initialized. It is the embedder's responsibility to stop all CPU 457593a47f4837f2137c8d8349250fd8e91da3108126jkummerow@chromium.org * profiling activities if it has started any. 4576f705b5034dc5bc422ac1019b591469a7d0534772mstarzinger@chromium.org */ 4577f705b5034dc5bc422ac1019b591469a7d0534772mstarzinger@chromium.org CpuProfiler* GetCpuProfiler(); 4578f705b5034dc5bc422ac1019b591469a7d0534772mstarzinger@chromium.org 4579528ce02b8680a3ab6d75c7079f180a4016c69b7amachenbach@chromium.org /** Returns true if this isolate has a current context. */ 4580528ce02b8680a3ab6d75c7079f180a4016c69b7amachenbach@chromium.org bool InContext(); 4581528ce02b8680a3ab6d75c7079f180a4016c69b7amachenbach@chromium.org 458240ce96b9446ccab86d0d80ee90bb86a9cca33aa7mvstanton@chromium.org /** Returns the context that is on the top of the stack. */ 458340ce96b9446ccab86d0d80ee90bb86a9cca33aa7mvstanton@chromium.org Local<Context> GetCurrentContext(); 458440ce96b9446ccab86d0d80ee90bb86a9cca33aa7mvstanton@chromium.org 4585ca29dd85fa02449d17188f5a6ff9a7cdf2ad9680danno@chromium.org /** 4586528ce02b8680a3ab6d75c7079f180a4016c69b7amachenbach@chromium.org * Returns the context of the calling JavaScript code. That is the 4587528ce02b8680a3ab6d75c7079f180a4016c69b7amachenbach@chromium.org * context of the top-most JavaScript frame. If there are no 4588528ce02b8680a3ab6d75c7079f180a4016c69b7amachenbach@chromium.org * JavaScript frames an empty handle is returned. 4589528ce02b8680a3ab6d75c7079f180a4016c69b7amachenbach@chromium.org */ 4590528ce02b8680a3ab6d75c7079f180a4016c69b7amachenbach@chromium.org Local<Context> GetCallingContext(); 4591528ce02b8680a3ab6d75c7079f180a4016c69b7amachenbach@chromium.org 4592528ce02b8680a3ab6d75c7079f180a4016c69b7amachenbach@chromium.org /** Returns the last entered context. */ 4593528ce02b8680a3ab6d75c7079f180a4016c69b7amachenbach@chromium.org Local<Context> GetEnteredContext(); 4594528ce02b8680a3ab6d75c7079f180a4016c69b7amachenbach@chromium.org 4595528ce02b8680a3ab6d75c7079f180a4016c69b7amachenbach@chromium.org /** 4596cfdf67d672b8e2cd6cc1df14c082671511745746machenbach@chromium.org * Schedules an exception to be thrown when returning to JavaScript. When an 4597cfdf67d672b8e2cd6cc1df14c082671511745746machenbach@chromium.org * exception has been scheduled it is illegal to invoke any JavaScript 4598cfdf67d672b8e2cd6cc1df14c082671511745746machenbach@chromium.org * operation; the caller must return immediately and only after the exception 4599cfdf67d672b8e2cd6cc1df14c082671511745746machenbach@chromium.org * has been handled does it become legal to invoke JavaScript operations. 4600cfdf67d672b8e2cd6cc1df14c082671511745746machenbach@chromium.org */ 4601cfdf67d672b8e2cd6cc1df14c082671511745746machenbach@chromium.org Local<Value> ThrowException(Local<Value> exception); 4602cfdf67d672b8e2cd6cc1df14c082671511745746machenbach@chromium.org 4603cfdf67d672b8e2cd6cc1df14c082671511745746machenbach@chromium.org /** 4604ca29dd85fa02449d17188f5a6ff9a7cdf2ad9680danno@chromium.org * Allows the host application to group objects together. If one 4605ca29dd85fa02449d17188f5a6ff9a7cdf2ad9680danno@chromium.org * object in the group is alive, all objects in the group are alive. 4606ca29dd85fa02449d17188f5a6ff9a7cdf2ad9680danno@chromium.org * After each garbage collection, object groups are removed. It is 4607ca29dd85fa02449d17188f5a6ff9a7cdf2ad9680danno@chromium.org * intended to be used in the before-garbage-collection callback 4608ca29dd85fa02449d17188f5a6ff9a7cdf2ad9680danno@chromium.org * function, for instance to simulate DOM tree connections among JS 4609ca29dd85fa02449d17188f5a6ff9a7cdf2ad9680danno@chromium.org * wrapper objects. Object groups for all dependent handles need to 4610ca29dd85fa02449d17188f5a6ff9a7cdf2ad9680danno@chromium.org * be provided for kGCTypeMarkSweepCompact collections, for all other 4611ca29dd85fa02449d17188f5a6ff9a7cdf2ad9680danno@chromium.org * garbage collection types it is sufficient to provide object groups 4612ca29dd85fa02449d17188f5a6ff9a7cdf2ad9680danno@chromium.org * for partially dependent handles only. 4613ca29dd85fa02449d17188f5a6ff9a7cdf2ad9680danno@chromium.org */ 4614690083842e7c67a362017dae50909d4bb0b2a9c2mstarzinger@chromium.org template<typename T> void SetObjectGroupId(const Persistent<T>& object, 4615690083842e7c67a362017dae50909d4bb0b2a9c2mstarzinger@chromium.org UniqueId id); 4616ca29dd85fa02449d17188f5a6ff9a7cdf2ad9680danno@chromium.org 4617ca29dd85fa02449d17188f5a6ff9a7cdf2ad9680danno@chromium.org /** 4618ca29dd85fa02449d17188f5a6ff9a7cdf2ad9680danno@chromium.org * Allows the host application to declare implicit references from an object 4619ca29dd85fa02449d17188f5a6ff9a7cdf2ad9680danno@chromium.org * group to an object. If the objects of the object group are alive, the child 4620ca29dd85fa02449d17188f5a6ff9a7cdf2ad9680danno@chromium.org * object is alive too. After each garbage collection, all implicit references 4621ca29dd85fa02449d17188f5a6ff9a7cdf2ad9680danno@chromium.org * are removed. It is intended to be used in the before-garbage-collection 4622ca29dd85fa02449d17188f5a6ff9a7cdf2ad9680danno@chromium.org * callback function. 4623ca29dd85fa02449d17188f5a6ff9a7cdf2ad9680danno@chromium.org */ 4624690083842e7c67a362017dae50909d4bb0b2a9c2mstarzinger@chromium.org template<typename T> void SetReferenceFromGroup(UniqueId id, 4625690083842e7c67a362017dae50909d4bb0b2a9c2mstarzinger@chromium.org const Persistent<T>& child); 4626ca29dd85fa02449d17188f5a6ff9a7cdf2ad9680danno@chromium.org 4627ca29dd85fa02449d17188f5a6ff9a7cdf2ad9680danno@chromium.org /** 4628ca29dd85fa02449d17188f5a6ff9a7cdf2ad9680danno@chromium.org * Allows the host application to declare implicit references from an object 4629ca29dd85fa02449d17188f5a6ff9a7cdf2ad9680danno@chromium.org * to another object. If the parent object is alive, the child object is alive 4630ca29dd85fa02449d17188f5a6ff9a7cdf2ad9680danno@chromium.org * too. After each garbage collection, all implicit references are removed. It 4631ca29dd85fa02449d17188f5a6ff9a7cdf2ad9680danno@chromium.org * is intended to be used in the before-garbage-collection callback function. 4632ca29dd85fa02449d17188f5a6ff9a7cdf2ad9680danno@chromium.org */ 4633690083842e7c67a362017dae50909d4bb0b2a9c2mstarzinger@chromium.org template<typename T, typename S> 4634690083842e7c67a362017dae50909d4bb0b2a9c2mstarzinger@chromium.org void SetReference(const Persistent<T>& parent, const Persistent<S>& child); 4635ca29dd85fa02449d17188f5a6ff9a7cdf2ad9680danno@chromium.org 4636528ce02b8680a3ab6d75c7079f180a4016c69b7amachenbach@chromium.org typedef void (*GCPrologueCallback)(Isolate* isolate, 4637528ce02b8680a3ab6d75c7079f180a4016c69b7amachenbach@chromium.org GCType type, 4638528ce02b8680a3ab6d75c7079f180a4016c69b7amachenbach@chromium.org GCCallbackFlags flags); 4639528ce02b8680a3ab6d75c7079f180a4016c69b7amachenbach@chromium.org typedef void (*GCEpilogueCallback)(Isolate* isolate, 4640528ce02b8680a3ab6d75c7079f180a4016c69b7amachenbach@chromium.org GCType type, 4641528ce02b8680a3ab6d75c7079f180a4016c69b7amachenbach@chromium.org GCCallbackFlags flags); 4642528ce02b8680a3ab6d75c7079f180a4016c69b7amachenbach@chromium.org 4643528ce02b8680a3ab6d75c7079f180a4016c69b7amachenbach@chromium.org /** 4644528ce02b8680a3ab6d75c7079f180a4016c69b7amachenbach@chromium.org * Enables the host application to receive a notification before a 46452904d1a42292be3056c2dd3f98822f8e1470fa72machenbach@chromium.org * garbage collection. Allocations are allowed in the callback function, 46462904d1a42292be3056c2dd3f98822f8e1470fa72machenbach@chromium.org * but the callback is not re-entrant: if the allocation inside it will 46472904d1a42292be3056c2dd3f98822f8e1470fa72machenbach@chromium.org * trigger the garbage collection, the callback won't be called again. 46482904d1a42292be3056c2dd3f98822f8e1470fa72machenbach@chromium.org * It is possible to specify the GCType filter for your callback. But it is 46492904d1a42292be3056c2dd3f98822f8e1470fa72machenbach@chromium.org * not possible to register the same callback function two times with 46502904d1a42292be3056c2dd3f98822f8e1470fa72machenbach@chromium.org * different GCType filters. 4651528ce02b8680a3ab6d75c7079f180a4016c69b7amachenbach@chromium.org */ 4652528ce02b8680a3ab6d75c7079f180a4016c69b7amachenbach@chromium.org void AddGCPrologueCallback( 4653528ce02b8680a3ab6d75c7079f180a4016c69b7amachenbach@chromium.org GCPrologueCallback callback, GCType gc_type_filter = kGCTypeAll); 4654528ce02b8680a3ab6d75c7079f180a4016c69b7amachenbach@chromium.org 4655528ce02b8680a3ab6d75c7079f180a4016c69b7amachenbach@chromium.org /** 4656528ce02b8680a3ab6d75c7079f180a4016c69b7amachenbach@chromium.org * This function removes callback which was installed by 4657528ce02b8680a3ab6d75c7079f180a4016c69b7amachenbach@chromium.org * AddGCPrologueCallback function. 4658528ce02b8680a3ab6d75c7079f180a4016c69b7amachenbach@chromium.org */ 4659528ce02b8680a3ab6d75c7079f180a4016c69b7amachenbach@chromium.org void RemoveGCPrologueCallback(GCPrologueCallback callback); 4660528ce02b8680a3ab6d75c7079f180a4016c69b7amachenbach@chromium.org 4661528ce02b8680a3ab6d75c7079f180a4016c69b7amachenbach@chromium.org /** 4662528ce02b8680a3ab6d75c7079f180a4016c69b7amachenbach@chromium.org * Enables the host application to receive a notification after a 46632904d1a42292be3056c2dd3f98822f8e1470fa72machenbach@chromium.org * garbage collection. Allocations are allowed in the callback function, 46642904d1a42292be3056c2dd3f98822f8e1470fa72machenbach@chromium.org * but the callback is not re-entrant: if the allocation inside it will 46652904d1a42292be3056c2dd3f98822f8e1470fa72machenbach@chromium.org * trigger the garbage collection, the callback won't be called again. 46662904d1a42292be3056c2dd3f98822f8e1470fa72machenbach@chromium.org * It is possible to specify the GCType filter for your callback. But it is 46672904d1a42292be3056c2dd3f98822f8e1470fa72machenbach@chromium.org * not possible to register the same callback function two times with 46682904d1a42292be3056c2dd3f98822f8e1470fa72machenbach@chromium.org * different GCType filters. 4669528ce02b8680a3ab6d75c7079f180a4016c69b7amachenbach@chromium.org */ 4670528ce02b8680a3ab6d75c7079f180a4016c69b7amachenbach@chromium.org void AddGCEpilogueCallback( 4671528ce02b8680a3ab6d75c7079f180a4016c69b7amachenbach@chromium.org GCEpilogueCallback callback, GCType gc_type_filter = kGCTypeAll); 4672528ce02b8680a3ab6d75c7079f180a4016c69b7amachenbach@chromium.org 4673528ce02b8680a3ab6d75c7079f180a4016c69b7amachenbach@chromium.org /** 4674528ce02b8680a3ab6d75c7079f180a4016c69b7amachenbach@chromium.org * This function removes callback which was installed by 4675528ce02b8680a3ab6d75c7079f180a4016c69b7amachenbach@chromium.org * AddGCEpilogueCallback function. 4676528ce02b8680a3ab6d75c7079f180a4016c69b7amachenbach@chromium.org */ 4677528ce02b8680a3ab6d75c7079f180a4016c69b7amachenbach@chromium.org void RemoveGCEpilogueCallback(GCEpilogueCallback callback); 4678528ce02b8680a3ab6d75c7079f180a4016c69b7amachenbach@chromium.org 4679ea9b8ba58955b7efcc3e1550dd33a44fb4530136hpayer@chromium.org /** 4680ea9b8ba58955b7efcc3e1550dd33a44fb4530136hpayer@chromium.org * Request V8 to interrupt long running JavaScript code and invoke 4681ea9b8ba58955b7efcc3e1550dd33a44fb4530136hpayer@chromium.org * the given |callback| passing the given |data| to it. After |callback| 4682ea9b8ba58955b7efcc3e1550dd33a44fb4530136hpayer@chromium.org * returns control will be returned to the JavaScript code. 4683ea9b8ba58955b7efcc3e1550dd33a44fb4530136hpayer@chromium.org * At any given moment V8 can remember only a single callback for the very 4684ea9b8ba58955b7efcc3e1550dd33a44fb4530136hpayer@chromium.org * last interrupt request. 4685ea9b8ba58955b7efcc3e1550dd33a44fb4530136hpayer@chromium.org * Can be called from another thread without acquiring a |Locker|. 4686ea9b8ba58955b7efcc3e1550dd33a44fb4530136hpayer@chromium.org * Registered |callback| must not reenter interrupted Isolate. 4687ea9b8ba58955b7efcc3e1550dd33a44fb4530136hpayer@chromium.org */ 4688ea9b8ba58955b7efcc3e1550dd33a44fb4530136hpayer@chromium.org void RequestInterrupt(InterruptCallback callback, void* data); 4689ea9b8ba58955b7efcc3e1550dd33a44fb4530136hpayer@chromium.org 4690ea9b8ba58955b7efcc3e1550dd33a44fb4530136hpayer@chromium.org /** 4691ea9b8ba58955b7efcc3e1550dd33a44fb4530136hpayer@chromium.org * Clear interrupt request created by |RequestInterrupt|. 4692ea9b8ba58955b7efcc3e1550dd33a44fb4530136hpayer@chromium.org * Can be called from another thread without acquiring a |Locker|. 4693ea9b8ba58955b7efcc3e1550dd33a44fb4530136hpayer@chromium.org */ 4694ea9b8ba58955b7efcc3e1550dd33a44fb4530136hpayer@chromium.org void ClearInterrupt(); 4695ea9b8ba58955b7efcc3e1550dd33a44fb4530136hpayer@chromium.org 46964ddd2f1981d343a2efe6609a3e0ce6b9c80b6ed9machenbach@chromium.org /** 46974ddd2f1981d343a2efe6609a3e0ce6b9c80b6ed9machenbach@chromium.org * Request garbage collection in this Isolate. It is only valid to call this 46984ddd2f1981d343a2efe6609a3e0ce6b9c80b6ed9machenbach@chromium.org * function if --expose_gc was specified. 46994ddd2f1981d343a2efe6609a3e0ce6b9c80b6ed9machenbach@chromium.org * 47004ddd2f1981d343a2efe6609a3e0ce6b9c80b6ed9machenbach@chromium.org * This should only be used for testing purposes and not to enforce a garbage 47014ddd2f1981d343a2efe6609a3e0ce6b9c80b6ed9machenbach@chromium.org * collection schedule. It has strong negative impact on the garbage 47024ddd2f1981d343a2efe6609a3e0ce6b9c80b6ed9machenbach@chromium.org * collection performance. Use IdleNotification() or LowMemoryNotification() 47034ddd2f1981d343a2efe6609a3e0ce6b9c80b6ed9machenbach@chromium.org * instead to influence the garbage collection schedule. 47044ddd2f1981d343a2efe6609a3e0ce6b9c80b6ed9machenbach@chromium.org */ 47054ddd2f1981d343a2efe6609a3e0ce6b9c80b6ed9machenbach@chromium.org void RequestGarbageCollectionForTesting(GarbageCollectionType type); 47064ddd2f1981d343a2efe6609a3e0ce6b9c80b6ed9machenbach@chromium.org 4707ca2f2040e0e1a10df95bec18e69499f85f4c1316machenbach@chromium.org /** 4708ca2f2040e0e1a10df95bec18e69499f85f4c1316machenbach@chromium.org * Set the callback to invoke for logging event. 4709ca2f2040e0e1a10df95bec18e69499f85f4c1316machenbach@chromium.org */ 4710ca2f2040e0e1a10df95bec18e69499f85f4c1316machenbach@chromium.org void SetEventLogger(LogEventCallback that); 4711ca2f2040e0e1a10df95bec18e69499f85f4c1316machenbach@chromium.org 4712255043f8054e713a64509c707cfabadd42344683machenbach@chromium.org /** 4713255043f8054e713a64509c707cfabadd42344683machenbach@chromium.org * Adds a callback to notify the host application when a script finished 4714255043f8054e713a64509c707cfabadd42344683machenbach@chromium.org * running. If a script re-enters the runtime during executing, the 4715255043f8054e713a64509c707cfabadd42344683machenbach@chromium.org * CallCompletedCallback is only invoked when the outer-most script 4716255043f8054e713a64509c707cfabadd42344683machenbach@chromium.org * execution ends. Executing scripts inside the callback do not trigger 4717255043f8054e713a64509c707cfabadd42344683machenbach@chromium.org * further callbacks. 4718255043f8054e713a64509c707cfabadd42344683machenbach@chromium.org */ 4719255043f8054e713a64509c707cfabadd42344683machenbach@chromium.org void AddCallCompletedCallback(CallCompletedCallback callback); 4720255043f8054e713a64509c707cfabadd42344683machenbach@chromium.org 4721255043f8054e713a64509c707cfabadd42344683machenbach@chromium.org /** 4722255043f8054e713a64509c707cfabadd42344683machenbach@chromium.org * Removes callback that was installed by AddCallCompletedCallback. 4723255043f8054e713a64509c707cfabadd42344683machenbach@chromium.org */ 4724255043f8054e713a64509c707cfabadd42344683machenbach@chromium.org void RemoveCallCompletedCallback(CallCompletedCallback callback); 4725255043f8054e713a64509c707cfabadd42344683machenbach@chromium.org 4726c8e8806f9e54a027d667425f1bb1b28cf9cbb6f7machenbach@chromium.org /** 4727c8e8806f9e54a027d667425f1bb1b28cf9cbb6f7machenbach@chromium.org * Experimental: Runs the Microtask Work Queue until empty 4728e31b63e9608909e17e35a3330b0075140af2fe91machenbach@chromium.org * Any exceptions thrown by microtask callbacks are swallowed. 4729c8e8806f9e54a027d667425f1bb1b28cf9cbb6f7machenbach@chromium.org */ 4730c8e8806f9e54a027d667425f1bb1b28cf9cbb6f7machenbach@chromium.org void RunMicrotasks(); 4731c8e8806f9e54a027d667425f1bb1b28cf9cbb6f7machenbach@chromium.org 4732c8e8806f9e54a027d667425f1bb1b28cf9cbb6f7machenbach@chromium.org /** 4733c8e8806f9e54a027d667425f1bb1b28cf9cbb6f7machenbach@chromium.org * Experimental: Enqueues the callback to the Microtask Work Queue 4734c8e8806f9e54a027d667425f1bb1b28cf9cbb6f7machenbach@chromium.org */ 4735c8e8806f9e54a027d667425f1bb1b28cf9cbb6f7machenbach@chromium.org void EnqueueMicrotask(Handle<Function> microtask); 4736c8e8806f9e54a027d667425f1bb1b28cf9cbb6f7machenbach@chromium.org 473738de99aae2d4efc5796aa6935c1648447ec32fc8machenbach@chromium.org /** 473838de99aae2d4efc5796aa6935c1648447ec32fc8machenbach@chromium.org * Experimental: Enqueues the callback to the Microtask Work Queue 473938de99aae2d4efc5796aa6935c1648447ec32fc8machenbach@chromium.org */ 474038de99aae2d4efc5796aa6935c1648447ec32fc8machenbach@chromium.org void EnqueueMicrotask(MicrotaskCallback microtask, void* data = NULL); 474138de99aae2d4efc5796aa6935c1648447ec32fc8machenbach@chromium.org 4742c8e8806f9e54a027d667425f1bb1b28cf9cbb6f7machenbach@chromium.org /** 4743c8e8806f9e54a027d667425f1bb1b28cf9cbb6f7machenbach@chromium.org * Experimental: Controls whether the Microtask Work Queue is automatically 4744c8e8806f9e54a027d667425f1bb1b28cf9cbb6f7machenbach@chromium.org * run when the script call depth decrements to zero. 4745c8e8806f9e54a027d667425f1bb1b28cf9cbb6f7machenbach@chromium.org */ 4746c8e8806f9e54a027d667425f1bb1b28cf9cbb6f7machenbach@chromium.org void SetAutorunMicrotasks(bool autorun); 4747c8e8806f9e54a027d667425f1bb1b28cf9cbb6f7machenbach@chromium.org 4748a3b66334e4dd35d9d4874d275ef9c4a756f0225cmachenbach@chromium.org /** 4749a3b66334e4dd35d9d4874d275ef9c4a756f0225cmachenbach@chromium.org * Experimental: Returns whether the Microtask Work Queue is automatically 4750a3b66334e4dd35d9d4874d275ef9c4a756f0225cmachenbach@chromium.org * run when the script call depth decrements to zero. 4751a3b66334e4dd35d9d4874d275ef9c4a756f0225cmachenbach@chromium.org */ 4752a3b66334e4dd35d9d4874d275ef9c4a756f0225cmachenbach@chromium.org bool WillAutorunMicrotasks() const; 4753a3b66334e4dd35d9d4874d275ef9c4a756f0225cmachenbach@chromium.org 4754975b940441085887fc02bebf8877d5ec97e1e06cmachenbach@chromium.org /** 4755975b940441085887fc02bebf8877d5ec97e1e06cmachenbach@chromium.org * Sets a callback for counting the number of times a feature of V8 is used. 4756975b940441085887fc02bebf8877d5ec97e1e06cmachenbach@chromium.org */ 4757975b940441085887fc02bebf8877d5ec97e1e06cmachenbach@chromium.org void SetUseCounterCallback(UseCounterCallback callback); 4758975b940441085887fc02bebf8877d5ec97e1e06cmachenbach@chromium.org 47596b0d137a5839eff3ce1a98ca9e12310027eff30fmachenbach@chromium.org /** 47606b0d137a5839eff3ce1a98ca9e12310027eff30fmachenbach@chromium.org * Enables the host application to provide a mechanism for recording 47616b0d137a5839eff3ce1a98ca9e12310027eff30fmachenbach@chromium.org * statistics counters. 47626b0d137a5839eff3ce1a98ca9e12310027eff30fmachenbach@chromium.org */ 47636b0d137a5839eff3ce1a98ca9e12310027eff30fmachenbach@chromium.org void SetCounterFunction(CounterLookupCallback); 47646b0d137a5839eff3ce1a98ca9e12310027eff30fmachenbach@chromium.org 47656b0d137a5839eff3ce1a98ca9e12310027eff30fmachenbach@chromium.org /** 47666b0d137a5839eff3ce1a98ca9e12310027eff30fmachenbach@chromium.org * Enables the host application to provide a mechanism for recording 47676b0d137a5839eff3ce1a98ca9e12310027eff30fmachenbach@chromium.org * histograms. The CreateHistogram function returns a 47686b0d137a5839eff3ce1a98ca9e12310027eff30fmachenbach@chromium.org * histogram which will later be passed to the AddHistogramSample 47696b0d137a5839eff3ce1a98ca9e12310027eff30fmachenbach@chromium.org * function. 47706b0d137a5839eff3ce1a98ca9e12310027eff30fmachenbach@chromium.org */ 47716b0d137a5839eff3ce1a98ca9e12310027eff30fmachenbach@chromium.org void SetCreateHistogramFunction(CreateHistogramCallback); 47726b0d137a5839eff3ce1a98ca9e12310027eff30fmachenbach@chromium.org void SetAddHistogramSampleFunction(AddHistogramSampleCallback); 47736b0d137a5839eff3ce1a98ca9e12310027eff30fmachenbach@chromium.org 4774f2af15a6b44ea6276bdd609ee122babe52842a42machenbach@chromium.org /** 4775f2af15a6b44ea6276bdd609ee122babe52842a42machenbach@chromium.org * Optional notification that the embedder is idle. 4776f2af15a6b44ea6276bdd609ee122babe52842a42machenbach@chromium.org * V8 uses the notification to reduce memory footprint. 4777f2af15a6b44ea6276bdd609ee122babe52842a42machenbach@chromium.org * This call can be used repeatedly if the embedder remains idle. 4778f2af15a6b44ea6276bdd609ee122babe52842a42machenbach@chromium.org * Returns true if the embedder should stop calling IdleNotification 4779f2af15a6b44ea6276bdd609ee122babe52842a42machenbach@chromium.org * until real work has been done. This indicates that V8 has done 4780f2af15a6b44ea6276bdd609ee122babe52842a42machenbach@chromium.org * as much cleanup as it will be able to do. 4781f2af15a6b44ea6276bdd609ee122babe52842a42machenbach@chromium.org * 4782f2af15a6b44ea6276bdd609ee122babe52842a42machenbach@chromium.org * The idle_time_in_ms argument specifies the time V8 has to do reduce 4783f2af15a6b44ea6276bdd609ee122babe52842a42machenbach@chromium.org * the memory footprint. There is no guarantee that the actual work will be 4784f2af15a6b44ea6276bdd609ee122babe52842a42machenbach@chromium.org * done within the time limit. 4785f2af15a6b44ea6276bdd609ee122babe52842a42machenbach@chromium.org */ 4786f2af15a6b44ea6276bdd609ee122babe52842a42machenbach@chromium.org bool IdleNotification(int idle_time_in_ms); 4787f2af15a6b44ea6276bdd609ee122babe52842a42machenbach@chromium.org 4788f2af15a6b44ea6276bdd609ee122babe52842a42machenbach@chromium.org /** 4789f2af15a6b44ea6276bdd609ee122babe52842a42machenbach@chromium.org * Optional notification that the system is running low on memory. 4790f2af15a6b44ea6276bdd609ee122babe52842a42machenbach@chromium.org * V8 uses these notifications to attempt to free memory. 4791f2af15a6b44ea6276bdd609ee122babe52842a42machenbach@chromium.org */ 4792f2af15a6b44ea6276bdd609ee122babe52842a42machenbach@chromium.org void LowMemoryNotification(); 4793f2af15a6b44ea6276bdd609ee122babe52842a42machenbach@chromium.org 4794f2af15a6b44ea6276bdd609ee122babe52842a42machenbach@chromium.org /** 4795f2af15a6b44ea6276bdd609ee122babe52842a42machenbach@chromium.org * Optional notification that a context has been disposed. V8 uses 4796f2af15a6b44ea6276bdd609ee122babe52842a42machenbach@chromium.org * these notifications to guide the GC heuristic. Returns the number 4797f2af15a6b44ea6276bdd609ee122babe52842a42machenbach@chromium.org * of context disposals - including this one - since the last time 4798f2af15a6b44ea6276bdd609ee122babe52842a42machenbach@chromium.org * V8 had a chance to clean up. 4799f2af15a6b44ea6276bdd609ee122babe52842a42machenbach@chromium.org */ 4800f2af15a6b44ea6276bdd609ee122babe52842a42machenbach@chromium.org int ContextDisposedNotification(); 4801f2af15a6b44ea6276bdd609ee122babe52842a42machenbach@chromium.org 48029e2b466e4b4a2026caefa79afe6737f1bad83a19machenbach@chromium.org /** 48039e2b466e4b4a2026caefa79afe6737f1bad83a19machenbach@chromium.org * Allows the host application to provide the address of a function that is 48049e2b466e4b4a2026caefa79afe6737f1bad83a19machenbach@chromium.org * notified each time code is added, moved or removed. 48059e2b466e4b4a2026caefa79afe6737f1bad83a19machenbach@chromium.org * 48069e2b466e4b4a2026caefa79afe6737f1bad83a19machenbach@chromium.org * \param options options for the JIT code event handler. 48079e2b466e4b4a2026caefa79afe6737f1bad83a19machenbach@chromium.org * \param event_handler the JIT code event handler, which will be invoked 48089e2b466e4b4a2026caefa79afe6737f1bad83a19machenbach@chromium.org * each time code is added, moved or removed. 48099e2b466e4b4a2026caefa79afe6737f1bad83a19machenbach@chromium.org * \note \p event_handler won't get notified of existent code. 48109e2b466e4b4a2026caefa79afe6737f1bad83a19machenbach@chromium.org * \note since code removal notifications are not currently issued, the 48119e2b466e4b4a2026caefa79afe6737f1bad83a19machenbach@chromium.org * \p event_handler may get notifications of code that overlaps earlier 48129e2b466e4b4a2026caefa79afe6737f1bad83a19machenbach@chromium.org * code notifications. This happens when code areas are reused, and the 48139e2b466e4b4a2026caefa79afe6737f1bad83a19machenbach@chromium.org * earlier overlapping code areas should therefore be discarded. 48149e2b466e4b4a2026caefa79afe6737f1bad83a19machenbach@chromium.org * \note the events passed to \p event_handler and the strings they point to 48159e2b466e4b4a2026caefa79afe6737f1bad83a19machenbach@chromium.org * are not guaranteed to live past each call. The \p event_handler must 48169e2b466e4b4a2026caefa79afe6737f1bad83a19machenbach@chromium.org * copy strings and other parameters it needs to keep around. 48179e2b466e4b4a2026caefa79afe6737f1bad83a19machenbach@chromium.org * \note the set of events declared in JitCodeEvent::EventType is expected to 48189e2b466e4b4a2026caefa79afe6737f1bad83a19machenbach@chromium.org * grow over time, and the JitCodeEvent structure is expected to accrue 48199e2b466e4b4a2026caefa79afe6737f1bad83a19machenbach@chromium.org * new members. The \p event_handler function must ignore event codes 48209e2b466e4b4a2026caefa79afe6737f1bad83a19machenbach@chromium.org * it does not recognize to maintain future compatibility. 48219e2b466e4b4a2026caefa79afe6737f1bad83a19machenbach@chromium.org * \note Use Isolate::CreateParams to get events for code executed during 48229e2b466e4b4a2026caefa79afe6737f1bad83a19machenbach@chromium.org * Isolate setup. 48239e2b466e4b4a2026caefa79afe6737f1bad83a19machenbach@chromium.org */ 48249e2b466e4b4a2026caefa79afe6737f1bad83a19machenbach@chromium.org void SetJitCodeEventHandler(JitCodeEventOptions options, 48259e2b466e4b4a2026caefa79afe6737f1bad83a19machenbach@chromium.org JitCodeEventHandler event_handler); 48269e2b466e4b4a2026caefa79afe6737f1bad83a19machenbach@chromium.org 4827d3df75b4472c9d5d4d2615aaea74d2adce4160f8machenbach@chromium.org /** 4828d3df75b4472c9d5d4d2615aaea74d2adce4160f8machenbach@chromium.org * Modifies the stack limit for this Isolate. 4829d3df75b4472c9d5d4d2615aaea74d2adce4160f8machenbach@chromium.org * 4830d3df75b4472c9d5d4d2615aaea74d2adce4160f8machenbach@chromium.org * \param stack_limit An address beyond which the Vm's stack may not grow. 4831d3df75b4472c9d5d4d2615aaea74d2adce4160f8machenbach@chromium.org * 4832d3df75b4472c9d5d4d2615aaea74d2adce4160f8machenbach@chromium.org * \note If you are using threads then you should hold the V8::Locker lock 4833d3df75b4472c9d5d4d2615aaea74d2adce4160f8machenbach@chromium.org * while setting the stack limit and you must set a non-default stack 4834d3df75b4472c9d5d4d2615aaea74d2adce4160f8machenbach@chromium.org * limit separately for each thread. 4835d3df75b4472c9d5d4d2615aaea74d2adce4160f8machenbach@chromium.org */ 4836d3df75b4472c9d5d4d2615aaea74d2adce4160f8machenbach@chromium.org void SetStackLimit(uintptr_t stack_limit); 4837d3df75b4472c9d5d4d2615aaea74d2adce4160f8machenbach@chromium.org 4838ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org private: 4839381adef828187e237e8758ab730dee1c2834a0b3machenbach@chromium.org template<class K, class V, class Traits> friend class PersistentValueMap; 4840381adef828187e237e8758ab730dee1c2834a0b3machenbach@chromium.org 4841ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org Isolate(); 4842ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org Isolate(const Isolate&); 4843ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org ~Isolate(); 4844ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org Isolate& operator=(const Isolate&); 4845ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org void* operator new(size_t size); 4846ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org void operator delete(void*, size_t); 4847ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org 4848690083842e7c67a362017dae50909d4bb0b2a9c2mstarzinger@chromium.org void SetObjectGroupId(internal::Object** object, UniqueId id); 4849690083842e7c67a362017dae50909d4bb0b2a9c2mstarzinger@chromium.org void SetReferenceFromGroup(UniqueId id, internal::Object** object); 4850690083842e7c67a362017dae50909d4bb0b2a9c2mstarzinger@chromium.org void SetReference(internal::Object** parent, internal::Object** child); 48511e2d50cf3d94ff48285da107b7a9da1ad0fc873dmachenbach@chromium.org void CollectAllGarbage(const char* gc_reason); 4852690083842e7c67a362017dae50909d4bb0b2a9c2mstarzinger@chromium.org}; 4853ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org 4854594006017e46d82ed7146611dc12c20e3c509c7ddanno@chromium.orgclass V8_EXPORT StartupData { 48558e8294a88dc7d58f579aee0ba08c19fc8a616e2dsgjesse@chromium.org public: 48568e8294a88dc7d58f579aee0ba08c19fc8a616e2dsgjesse@chromium.org enum CompressionAlgorithm { 48578e8294a88dc7d58f579aee0ba08c19fc8a616e2dsgjesse@chromium.org kUncompressed, 48588e8294a88dc7d58f579aee0ba08c19fc8a616e2dsgjesse@chromium.org kBZip2 48598e8294a88dc7d58f579aee0ba08c19fc8a616e2dsgjesse@chromium.org }; 48608e8294a88dc7d58f579aee0ba08c19fc8a616e2dsgjesse@chromium.org 48618e8294a88dc7d58f579aee0ba08c19fc8a616e2dsgjesse@chromium.org const char* data; 48628e8294a88dc7d58f579aee0ba08c19fc8a616e2dsgjesse@chromium.org int compressed_size; 48638e8294a88dc7d58f579aee0ba08c19fc8a616e2dsgjesse@chromium.org int raw_size; 48648e8294a88dc7d58f579aee0ba08c19fc8a616e2dsgjesse@chromium.org}; 48658e8294a88dc7d58f579aee0ba08c19fc8a616e2dsgjesse@chromium.org 4866e297f5973a8a9ff0d9945da3f1e2d8a6230c294djkummerow@chromium.org 4867e297f5973a8a9ff0d9945da3f1e2d8a6230c294djkummerow@chromium.org/** 4868e297f5973a8a9ff0d9945da3f1e2d8a6230c294djkummerow@chromium.org * A helper class for driving V8 startup data decompression. It is based on 4869e297f5973a8a9ff0d9945da3f1e2d8a6230c294djkummerow@chromium.org * "CompressedStartupData" API functions from the V8 class. It isn't mandatory 4870e297f5973a8a9ff0d9945da3f1e2d8a6230c294djkummerow@chromium.org * for an embedder to use this class, instead, API functions can be used 4871e297f5973a8a9ff0d9945da3f1e2d8a6230c294djkummerow@chromium.org * directly. 4872e297f5973a8a9ff0d9945da3f1e2d8a6230c294djkummerow@chromium.org * 4873e297f5973a8a9ff0d9945da3f1e2d8a6230c294djkummerow@chromium.org * For an example of the class usage, see the "shell.cc" sample application. 4874e297f5973a8a9ff0d9945da3f1e2d8a6230c294djkummerow@chromium.org */ 4875594006017e46d82ed7146611dc12c20e3c509c7ddanno@chromium.orgclass V8_EXPORT StartupDataDecompressor { // NOLINT 4876e297f5973a8a9ff0d9945da3f1e2d8a6230c294djkummerow@chromium.org public: 4877e297f5973a8a9ff0d9945da3f1e2d8a6230c294djkummerow@chromium.org StartupDataDecompressor(); 4878e297f5973a8a9ff0d9945da3f1e2d8a6230c294djkummerow@chromium.org virtual ~StartupDataDecompressor(); 4879e297f5973a8a9ff0d9945da3f1e2d8a6230c294djkummerow@chromium.org int Decompress(); 4880e297f5973a8a9ff0d9945da3f1e2d8a6230c294djkummerow@chromium.org 4881e297f5973a8a9ff0d9945da3f1e2d8a6230c294djkummerow@chromium.org protected: 4882e297f5973a8a9ff0d9945da3f1e2d8a6230c294djkummerow@chromium.org virtual int DecompressData(char* raw_data, 4883e297f5973a8a9ff0d9945da3f1e2d8a6230c294djkummerow@chromium.org int* raw_data_size, 4884e297f5973a8a9ff0d9945da3f1e2d8a6230c294djkummerow@chromium.org const char* compressed_data, 4885e297f5973a8a9ff0d9945da3f1e2d8a6230c294djkummerow@chromium.org int compressed_data_size) = 0; 4886e297f5973a8a9ff0d9945da3f1e2d8a6230c294djkummerow@chromium.org 4887e297f5973a8a9ff0d9945da3f1e2d8a6230c294djkummerow@chromium.org private: 4888e297f5973a8a9ff0d9945da3f1e2d8a6230c294djkummerow@chromium.org char** raw_data; 4889e297f5973a8a9ff0d9945da3f1e2d8a6230c294djkummerow@chromium.org}; 4890e297f5973a8a9ff0d9945da3f1e2d8a6230c294djkummerow@chromium.org 489184bcc559ac20fb04f806e97d28a314b20b58fd60svenpanne@chromium.org 489284bcc559ac20fb04f806e97d28a314b20b58fd60svenpanne@chromium.org/** 489384bcc559ac20fb04f806e97d28a314b20b58fd60svenpanne@chromium.org * EntropySource is used as a callback function when v8 needs a source 489484bcc559ac20fb04f806e97d28a314b20b58fd60svenpanne@chromium.org * of entropy. 489584bcc559ac20fb04f806e97d28a314b20b58fd60svenpanne@chromium.org */ 489684bcc559ac20fb04f806e97d28a314b20b58fd60svenpanne@chromium.orgtypedef bool (*EntropySource)(unsigned char* buffer, size_t length); 489784bcc559ac20fb04f806e97d28a314b20b58fd60svenpanne@chromium.org 4898f2038fb01417bcf7698b87a5dfaa4a861539618aerik.corry@gmail.com 4899f2038fb01417bcf7698b87a5dfaa4a861539618aerik.corry@gmail.com/** 4900967e270a034432457500dbf950d2c4951a929e52ulan@chromium.org * ReturnAddressLocationResolver is used as a callback function when v8 is 4901967e270a034432457500dbf950d2c4951a929e52ulan@chromium.org * resolving the location of a return address on the stack. Profilers that 4902967e270a034432457500dbf950d2c4951a929e52ulan@chromium.org * change the return address on the stack can use this to resolve the stack 4903967e270a034432457500dbf950d2c4951a929e52ulan@chromium.org * location to whereever the profiler stashed the original return address. 4904753aee4dcf0868130789b5af7c1eeb6ab2ab24f9verwaest@chromium.org * 4905753aee4dcf0868130789b5af7c1eeb6ab2ab24f9verwaest@chromium.org * \param return_addr_location points to a location on stack where a machine 4906753aee4dcf0868130789b5af7c1eeb6ab2ab24f9verwaest@chromium.org * return address resides. 4907753aee4dcf0868130789b5af7c1eeb6ab2ab24f9verwaest@chromium.org * \returns either return_addr_location, or else a pointer to the profiler's 4908753aee4dcf0868130789b5af7c1eeb6ab2ab24f9verwaest@chromium.org * copy of the original return address. 4909753aee4dcf0868130789b5af7c1eeb6ab2ab24f9verwaest@chromium.org * 4910753aee4dcf0868130789b5af7c1eeb6ab2ab24f9verwaest@chromium.org * \note the resolver function must not cause garbage collection. 4911967e270a034432457500dbf950d2c4951a929e52ulan@chromium.org */ 4912967e270a034432457500dbf950d2c4951a929e52ulan@chromium.orgtypedef uintptr_t (*ReturnAddressLocationResolver)( 4913967e270a034432457500dbf950d2c4951a929e52ulan@chromium.org uintptr_t return_addr_location); 4914967e270a034432457500dbf950d2c4951a929e52ulan@chromium.org 4915967e270a034432457500dbf950d2c4951a929e52ulan@chromium.org 4916967e270a034432457500dbf950d2c4951a929e52ulan@chromium.org/** 491789e18f5599cb4cd462cb1ed324addd7388fb4d60rossberg@chromium.org * Interface for iterating through all external resources in the heap. 4918f2038fb01417bcf7698b87a5dfaa4a861539618aerik.corry@gmail.com */ 4919594006017e46d82ed7146611dc12c20e3c509c7ddanno@chromium.orgclass V8_EXPORT ExternalResourceVisitor { // NOLINT 4920f2038fb01417bcf7698b87a5dfaa4a861539618aerik.corry@gmail.com public: 4921f2038fb01417bcf7698b87a5dfaa4a861539618aerik.corry@gmail.com virtual ~ExternalResourceVisitor() {} 4922f2038fb01417bcf7698b87a5dfaa4a861539618aerik.corry@gmail.com virtual void VisitExternalString(Handle<String> string) {} 4923f2038fb01417bcf7698b87a5dfaa4a861539618aerik.corry@gmail.com}; 4924f2038fb01417bcf7698b87a5dfaa4a861539618aerik.corry@gmail.com 4925f2038fb01417bcf7698b87a5dfaa4a861539618aerik.corry@gmail.com 4926ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org/** 492789e18f5599cb4cd462cb1ed324addd7388fb4d60rossberg@chromium.org * Interface for iterating through all the persistent handles in the heap. 492889e18f5599cb4cd462cb1ed324addd7388fb4d60rossberg@chromium.org */ 4929594006017e46d82ed7146611dc12c20e3c509c7ddanno@chromium.orgclass V8_EXPORT PersistentHandleVisitor { // NOLINT 493089e18f5599cb4cd462cb1ed324addd7388fb4d60rossberg@chromium.org public: 493189e18f5599cb4cd462cb1ed324addd7388fb4d60rossberg@chromium.org virtual ~PersistentHandleVisitor() {} 4932b99c75496e05b4cd58815ada1e39e6029130d11crossberg@chromium.org virtual void VisitPersistentHandle(Persistent<Value>* value, 4933b99c75496e05b4cd58815ada1e39e6029130d11crossberg@chromium.org uint16_t class_id) {} 493489e18f5599cb4cd462cb1ed324addd7388fb4d60rossberg@chromium.org}; 493589e18f5599cb4cd462cb1ed324addd7388fb4d60rossberg@chromium.org 493689e18f5599cb4cd462cb1ed324addd7388fb4d60rossberg@chromium.org 493789e18f5599cb4cd462cb1ed324addd7388fb4d60rossberg@chromium.org/** 493843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * Container class for static utility functions. 493943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen */ 4940594006017e46d82ed7146611dc12c20e3c509c7ddanno@chromium.orgclass V8_EXPORT V8 { 494143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen public: 4942727e995b7bba3c57fb1e5c156d386ca11894f781v /** Set the callback to invoke in case of fatal errors. */ 494343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen static void SetFatalErrorHandler(FatalErrorCallback that); 494443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 4945727e995b7bba3c57fb1e5c156d386ca11894f781v /** 4946fb144a0716afe7ab8bf245f2391a9e53b3db3c89fschneider@chromium.org * Set the callback to invoke to check if code generation from 4947fb144a0716afe7ab8bf245f2391a9e53b3db3c89fschneider@chromium.org * strings should be allowed. 4948fb144a0716afe7ab8bf245f2391a9e53b3db3c89fschneider@chromium.org */ 4949fb144a0716afe7ab8bf245f2391a9e53b3db3c89fschneider@chromium.org static void SetAllowCodeGenerationFromStringsCallback( 4950fb144a0716afe7ab8bf245f2391a9e53b3db3c89fschneider@chromium.org AllowCodeGenerationFromStringsCallback that); 4951fb144a0716afe7ab8bf245f2391a9e53b3db3c89fschneider@chromium.org 4952fb144a0716afe7ab8bf245f2391a9e53b3db3c89fschneider@chromium.org /** 4953837a67edd9afdbfe1b59482b41693f59c48846ffulan@chromium.org * Set allocator to use for ArrayBuffer memory. 4954837a67edd9afdbfe1b59482b41693f59c48846ffulan@chromium.org * The allocator should be set only once. The allocator should be set 4955837a67edd9afdbfe1b59482b41693f59c48846ffulan@chromium.org * before any code tha uses ArrayBuffers is executed. 4956837a67edd9afdbfe1b59482b41693f59c48846ffulan@chromium.org * This allocator is used in all isolates. 4957837a67edd9afdbfe1b59482b41693f59c48846ffulan@chromium.org */ 4958837a67edd9afdbfe1b59482b41693f59c48846ffulan@chromium.org static void SetArrayBufferAllocator(ArrayBuffer::Allocator* allocator); 4959837a67edd9afdbfe1b59482b41693f59c48846ffulan@chromium.org 4960837a67edd9afdbfe1b59482b41693f59c48846ffulan@chromium.org /** 49619258b6bc66e09368ada54001f619d53b4fc976d5ager@chromium.org * Check if V8 is dead and therefore unusable. This is the case after 4962727e995b7bba3c57fb1e5c156d386ca11894f781v * fatal errors such as out-of-memory situations. 4963727e995b7bba3c57fb1e5c156d386ca11894f781v */ 496443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen static bool IsDead(); 496543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 496643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen /** 49678e8294a88dc7d58f579aee0ba08c19fc8a616e2dsgjesse@chromium.org * The following 4 functions are to be used when V8 is built with 49688e8294a88dc7d58f579aee0ba08c19fc8a616e2dsgjesse@chromium.org * the 'compress_startup_data' flag enabled. In this case, the 49698e8294a88dc7d58f579aee0ba08c19fc8a616e2dsgjesse@chromium.org * embedder must decompress startup data prior to initializing V8. 49708e8294a88dc7d58f579aee0ba08c19fc8a616e2dsgjesse@chromium.org * 49718e8294a88dc7d58f579aee0ba08c19fc8a616e2dsgjesse@chromium.org * This is how interaction with V8 should look like: 49728e8294a88dc7d58f579aee0ba08c19fc8a616e2dsgjesse@chromium.org * int compressed_data_count = v8::V8::GetCompressedStartupDataCount(); 49738e8294a88dc7d58f579aee0ba08c19fc8a616e2dsgjesse@chromium.org * v8::StartupData* compressed_data = 49748e8294a88dc7d58f579aee0ba08c19fc8a616e2dsgjesse@chromium.org * new v8::StartupData[compressed_data_count]; 49758e8294a88dc7d58f579aee0ba08c19fc8a616e2dsgjesse@chromium.org * v8::V8::GetCompressedStartupData(compressed_data); 49768e8294a88dc7d58f579aee0ba08c19fc8a616e2dsgjesse@chromium.org * ... decompress data (compressed_data can be updated in-place) ... 49778e8294a88dc7d58f579aee0ba08c19fc8a616e2dsgjesse@chromium.org * v8::V8::SetDecompressedStartupData(compressed_data); 49788e8294a88dc7d58f579aee0ba08c19fc8a616e2dsgjesse@chromium.org * ... now V8 can be initialized 49798e8294a88dc7d58f579aee0ba08c19fc8a616e2dsgjesse@chromium.org * ... make sure the decompressed data stays valid until V8 shutdown 4980e297f5973a8a9ff0d9945da3f1e2d8a6230c294djkummerow@chromium.org * 4981e297f5973a8a9ff0d9945da3f1e2d8a6230c294djkummerow@chromium.org * A helper class StartupDataDecompressor is provided. It implements 4982e297f5973a8a9ff0d9945da3f1e2d8a6230c294djkummerow@chromium.org * the protocol of the interaction described above, and can be used in 4983e297f5973a8a9ff0d9945da3f1e2d8a6230c294djkummerow@chromium.org * most cases instead of calling these API functions directly. 49848e8294a88dc7d58f579aee0ba08c19fc8a616e2dsgjesse@chromium.org */ 49858e8294a88dc7d58f579aee0ba08c19fc8a616e2dsgjesse@chromium.org static StartupData::CompressionAlgorithm GetCompressedStartupDataAlgorithm(); 49868e8294a88dc7d58f579aee0ba08c19fc8a616e2dsgjesse@chromium.org static int GetCompressedStartupDataCount(); 49878e8294a88dc7d58f579aee0ba08c19fc8a616e2dsgjesse@chromium.org static void GetCompressedStartupData(StartupData* compressed_data); 49888e8294a88dc7d58f579aee0ba08c19fc8a616e2dsgjesse@chromium.org static void SetDecompressedStartupData(StartupData* decompressed_data); 49898e8294a88dc7d58f579aee0ba08c19fc8a616e2dsgjesse@chromium.org 49908e8294a88dc7d58f579aee0ba08c19fc8a616e2dsgjesse@chromium.org /** 4991975b940441085887fc02bebf8877d5ec97e1e06cmachenbach@chromium.org * Hand startup data to V8, in case the embedder has chosen to build 4992975b940441085887fc02bebf8877d5ec97e1e06cmachenbach@chromium.org * V8 with external startup data. 4993975b940441085887fc02bebf8877d5ec97e1e06cmachenbach@chromium.org * 4994975b940441085887fc02bebf8877d5ec97e1e06cmachenbach@chromium.org * Note: 4995975b940441085887fc02bebf8877d5ec97e1e06cmachenbach@chromium.org * - By default the startup data is linked into the V8 library, in which 4996975b940441085887fc02bebf8877d5ec97e1e06cmachenbach@chromium.org * case this function is not meaningful. 4997975b940441085887fc02bebf8877d5ec97e1e06cmachenbach@chromium.org * - If this needs to be called, it needs to be called before V8 4998975b940441085887fc02bebf8877d5ec97e1e06cmachenbach@chromium.org * tries to make use of its built-ins. 4999975b940441085887fc02bebf8877d5ec97e1e06cmachenbach@chromium.org * - To avoid unnecessary copies of data, V8 will point directly into the 5000975b940441085887fc02bebf8877d5ec97e1e06cmachenbach@chromium.org * given data blob, so pretty please keep it around until V8 exit. 5001975b940441085887fc02bebf8877d5ec97e1e06cmachenbach@chromium.org * - Compression of the startup blob might be useful, but needs to 5002975b940441085887fc02bebf8877d5ec97e1e06cmachenbach@chromium.org * handled entirely on the embedders' side. 5003975b940441085887fc02bebf8877d5ec97e1e06cmachenbach@chromium.org * - The call will abort if the data is invalid. 5004975b940441085887fc02bebf8877d5ec97e1e06cmachenbach@chromium.org */ 5005975b940441085887fc02bebf8877d5ec97e1e06cmachenbach@chromium.org static void SetNativesDataBlob(StartupData* startup_blob); 5006975b940441085887fc02bebf8877d5ec97e1e06cmachenbach@chromium.org static void SetSnapshotDataBlob(StartupData* startup_blob); 5007975b940441085887fc02bebf8877d5ec97e1e06cmachenbach@chromium.org 5008975b940441085887fc02bebf8877d5ec97e1e06cmachenbach@chromium.org /** 5009727e995b7bba3c57fb1e5c156d386ca11894f781v * Adds a message listener. 5010727e995b7bba3c57fb1e5c156d386ca11894f781v * 50117304bcac06a6a63b9f3dcebac2eeceada87ca146vegorov@chromium.org * The same message listener can be added more than once and in that 5012727e995b7bba3c57fb1e5c156d386ca11894f781v * case it will be called more than once for each message. 50138432c9102e4b2125d8eec741d35237cf23167471hpayer@chromium.org * 50148432c9102e4b2125d8eec741d35237cf23167471hpayer@chromium.org * If data is specified, it will be passed to the callback when it is called. 50158432c9102e4b2125d8eec741d35237cf23167471hpayer@chromium.org * Otherwise, the exception object will be passed to the callback instead. 501643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen */ 50178432c9102e4b2125d8eec741d35237cf23167471hpayer@chromium.org static bool AddMessageListener(MessageCallback that, 50188432c9102e4b2125d8eec741d35237cf23167471hpayer@chromium.org Handle<Value> data = Handle<Value>()); 501943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 502043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen /** 502143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * Remove all message listeners from the specified callback function. 502243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen */ 502343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen static void RemoveMessageListeners(MessageCallback that); 502443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 502543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen /** 50266a2b0aa331a1ae1829a9b9637ad18cfc7ec9d840ager@chromium.org * Tells V8 to capture current stack trace when uncaught exception occurs 50276a2b0aa331a1ae1829a9b9637ad18cfc7ec9d840ager@chromium.org * and report it to the message listeners. The option is off by default. 50286a2b0aa331a1ae1829a9b9637ad18cfc7ec9d840ager@chromium.org */ 50296a2b0aa331a1ae1829a9b9637ad18cfc7ec9d840ager@chromium.org static void SetCaptureStackTraceForUncaughtExceptions( 50306a2b0aa331a1ae1829a9b9637ad18cfc7ec9d840ager@chromium.org bool capture, 50316a2b0aa331a1ae1829a9b9637ad18cfc7ec9d840ager@chromium.org int frame_limit = 10, 50326a2b0aa331a1ae1829a9b9637ad18cfc7ec9d840ager@chromium.org StackTrace::StackTraceOptions options = StackTrace::kOverview); 50336a2b0aa331a1ae1829a9b9637ad18cfc7ec9d840ager@chromium.org 50346a2b0aa331a1ae1829a9b9637ad18cfc7ec9d840ager@chromium.org /** 5035727e995b7bba3c57fb1e5c156d386ca11894f781v * Sets V8 flags from a string. 503643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen */ 503743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen static void SetFlagsFromString(const char* str, int length); 503843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 50399a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.com /** 5040727e995b7bba3c57fb1e5c156d386ca11894f781v * Sets V8 flags from the command line. 50419a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.com */ 50429a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.com static void SetFlagsFromCommandLine(int* argc, 50439a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.com char** argv, 50449a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.com bool remove_flags); 50459a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.com 50467276f14ca716596e0a0d17539516370c1f453847kasper.lund /** Get the version string. */ 50477276f14ca716596e0a0d17539516370c1f453847kasper.lund static const char* GetVersion(); 504843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 504943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen /** Callback function for reporting failed access checks.*/ 505043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen static void SetFailedAccessCheckCallbackFunction(FailedAccessCheckCallback); 505143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 505243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen /** 5053727e995b7bba3c57fb1e5c156d386ca11894f781v * Enables the host application to receive a notification before a 50545d8f0e6e7b477f422e3064bdf0dd5f2a23f75544kmillikin@chromium.org * garbage collection. Allocations are not allowed in the 50555d8f0e6e7b477f422e3064bdf0dd5f2a23f75544kmillikin@chromium.org * callback function, you therefore cannot manipulate objects (set 50565d8f0e6e7b477f422e3064bdf0dd5f2a23f75544kmillikin@chromium.org * or delete properties for example) since it is possible such 50575d8f0e6e7b477f422e3064bdf0dd5f2a23f75544kmillikin@chromium.org * operations will result in the allocation of objects. It is possible 50585d8f0e6e7b477f422e3064bdf0dd5f2a23f75544kmillikin@chromium.org * to specify the GCType filter for your callback. But it is not possible to 50595d8f0e6e7b477f422e3064bdf0dd5f2a23f75544kmillikin@chromium.org * register the same callback function two times with different 50605d8f0e6e7b477f422e3064bdf0dd5f2a23f75544kmillikin@chromium.org * GCType filters. 50615d8f0e6e7b477f422e3064bdf0dd5f2a23f75544kmillikin@chromium.org */ 50625d8f0e6e7b477f422e3064bdf0dd5f2a23f75544kmillikin@chromium.org static void AddGCPrologueCallback( 50635d8f0e6e7b477f422e3064bdf0dd5f2a23f75544kmillikin@chromium.org GCPrologueCallback callback, GCType gc_type_filter = kGCTypeAll); 50645d8f0e6e7b477f422e3064bdf0dd5f2a23f75544kmillikin@chromium.org 50655d8f0e6e7b477f422e3064bdf0dd5f2a23f75544kmillikin@chromium.org /** 50665d8f0e6e7b477f422e3064bdf0dd5f2a23f75544kmillikin@chromium.org * This function removes callback which was installed by 50675d8f0e6e7b477f422e3064bdf0dd5f2a23f75544kmillikin@chromium.org * AddGCPrologueCallback function. 50685d8f0e6e7b477f422e3064bdf0dd5f2a23f75544kmillikin@chromium.org */ 50695d8f0e6e7b477f422e3064bdf0dd5f2a23f75544kmillikin@chromium.org static void RemoveGCPrologueCallback(GCPrologueCallback callback); 50705d8f0e6e7b477f422e3064bdf0dd5f2a23f75544kmillikin@chromium.org 50715d8f0e6e7b477f422e3064bdf0dd5f2a23f75544kmillikin@chromium.org /** 5072727e995b7bba3c57fb1e5c156d386ca11894f781v * Enables the host application to receive a notification after a 50735d8f0e6e7b477f422e3064bdf0dd5f2a23f75544kmillikin@chromium.org * garbage collection. Allocations are not allowed in the 50745d8f0e6e7b477f422e3064bdf0dd5f2a23f75544kmillikin@chromium.org * callback function, you therefore cannot manipulate objects (set 50755d8f0e6e7b477f422e3064bdf0dd5f2a23f75544kmillikin@chromium.org * or delete properties for example) since it is possible such 50765d8f0e6e7b477f422e3064bdf0dd5f2a23f75544kmillikin@chromium.org * operations will result in the allocation of objects. It is possible 50775d8f0e6e7b477f422e3064bdf0dd5f2a23f75544kmillikin@chromium.org * to specify the GCType filter for your callback. But it is not possible to 50785d8f0e6e7b477f422e3064bdf0dd5f2a23f75544kmillikin@chromium.org * register the same callback function two times with different 50795d8f0e6e7b477f422e3064bdf0dd5f2a23f75544kmillikin@chromium.org * GCType filters. 50805d8f0e6e7b477f422e3064bdf0dd5f2a23f75544kmillikin@chromium.org */ 50815d8f0e6e7b477f422e3064bdf0dd5f2a23f75544kmillikin@chromium.org static void AddGCEpilogueCallback( 50825d8f0e6e7b477f422e3064bdf0dd5f2a23f75544kmillikin@chromium.org GCEpilogueCallback callback, GCType gc_type_filter = kGCTypeAll); 50835d8f0e6e7b477f422e3064bdf0dd5f2a23f75544kmillikin@chromium.org 50845d8f0e6e7b477f422e3064bdf0dd5f2a23f75544kmillikin@chromium.org /** 50855d8f0e6e7b477f422e3064bdf0dd5f2a23f75544kmillikin@chromium.org * This function removes callback which was installed by 50865d8f0e6e7b477f422e3064bdf0dd5f2a23f75544kmillikin@chromium.org * AddGCEpilogueCallback function. 50875d8f0e6e7b477f422e3064bdf0dd5f2a23f75544kmillikin@chromium.org */ 50885d8f0e6e7b477f422e3064bdf0dd5f2a23f75544kmillikin@chromium.org static void RemoveGCEpilogueCallback(GCEpilogueCallback callback); 50895d8f0e6e7b477f422e3064bdf0dd5f2a23f75544kmillikin@chromium.org 50905d8f0e6e7b477f422e3064bdf0dd5f2a23f75544kmillikin@chromium.org /** 50913cdd9e13bac71e7c5b63da6962f8d30f6622db14kmillikin@chromium.org * Enables the host application to provide a mechanism to be notified 50923cdd9e13bac71e7c5b63da6962f8d30f6622db14kmillikin@chromium.org * and perform custom logging when V8 Allocates Executable Memory. 50933cdd9e13bac71e7c5b63da6962f8d30f6622db14kmillikin@chromium.org */ 50943cdd9e13bac71e7c5b63da6962f8d30f6622db14kmillikin@chromium.org static void AddMemoryAllocationCallback(MemoryAllocationCallback callback, 50953cdd9e13bac71e7c5b63da6962f8d30f6622db14kmillikin@chromium.org ObjectSpace space, 50963cdd9e13bac71e7c5b63da6962f8d30f6622db14kmillikin@chromium.org AllocationAction action); 50973cdd9e13bac71e7c5b63da6962f8d30f6622db14kmillikin@chromium.org 50983cdd9e13bac71e7c5b63da6962f8d30f6622db14kmillikin@chromium.org /** 5099fab1498f2f42726c7de46c3ed560d56dd072a8b3rossberg@chromium.org * Removes callback that was installed by AddMemoryAllocationCallback. 51003cdd9e13bac71e7c5b63da6962f8d30f6622db14kmillikin@chromium.org */ 51013cdd9e13bac71e7c5b63da6962f8d30f6622db14kmillikin@chromium.org static void RemoveMemoryAllocationCallback(MemoryAllocationCallback callback); 51023cdd9e13bac71e7c5b63da6962f8d30f6622db14kmillikin@chromium.org 51033cdd9e13bac71e7c5b63da6962f8d30f6622db14kmillikin@chromium.org /** 5104a2c0c1516848536a514b3178d2c040b7df0ceb5bmachenbach@chromium.org * Initializes V8. This function needs to be called before the first Isolate 5105a2c0c1516848536a514b3178d2c040b7df0ceb5bmachenbach@chromium.org * is created. It always returns true. 510643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen */ 510743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen static bool Initialize(); 510843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 51097276f14ca716596e0a0d17539516370c1f453847kasper.lund /** 511084bcc559ac20fb04f806e97d28a314b20b58fd60svenpanne@chromium.org * Allows the host application to provide a callback which can be used 511184bcc559ac20fb04f806e97d28a314b20b58fd60svenpanne@chromium.org * as a source of entropy for random number generators. 511284bcc559ac20fb04f806e97d28a314b20b58fd60svenpanne@chromium.org */ 511384bcc559ac20fb04f806e97d28a314b20b58fd60svenpanne@chromium.org static void SetEntropySource(EntropySource source); 511484bcc559ac20fb04f806e97d28a314b20b58fd60svenpanne@chromium.org 511584bcc559ac20fb04f806e97d28a314b20b58fd60svenpanne@chromium.org /** 5116967e270a034432457500dbf950d2c4951a929e52ulan@chromium.org * Allows the host application to provide a callback that allows v8 to 5117967e270a034432457500dbf950d2c4951a929e52ulan@chromium.org * cooperate with a profiler that rewrites return addresses on stack. 5118967e270a034432457500dbf950d2c4951a929e52ulan@chromium.org */ 5119967e270a034432457500dbf950d2c4951a929e52ulan@chromium.org static void SetReturnAddressLocationResolver( 5120967e270a034432457500dbf950d2c4951a929e52ulan@chromium.org ReturnAddressLocationResolver return_address_resolver); 5121967e270a034432457500dbf950d2c4951a929e52ulan@chromium.org 5122967e270a034432457500dbf950d2c4951a929e52ulan@chromium.org /** 5123ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org * Forcefully terminate the current thread of JavaScript execution 5124e9fd6580f52407c94d77bfcb4be04207f2ebb2f1machenbach@chromium.org * in the given isolate. 5125c81c894dabeceb472d668027ca59e73096f5cfafsgjesse@chromium.org * 5126c81c894dabeceb472d668027ca59e73096f5cfafsgjesse@chromium.org * This method can be used by any thread even if that thread has not 5127c81c894dabeceb472d668027ca59e73096f5cfafsgjesse@chromium.org * acquired the V8 lock with a Locker object. 5128ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org * 5129ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org * \param isolate The isolate in which to terminate the current JS execution. 5130c81c894dabeceb472d668027ca59e73096f5cfafsgjesse@chromium.org */ 5131e9fd6580f52407c94d77bfcb4be04207f2ebb2f1machenbach@chromium.org static void TerminateExecution(Isolate* isolate); 51329085a016223a6b72bf580d5781c93ec7b9e54422ager@chromium.org 51332ab99526496cda7ff426115c76a1c475a1b4f4a5sgjesse@chromium.org /** 51342ab99526496cda7ff426115c76a1c475a1b4f4a5sgjesse@chromium.org * Is V8 terminating JavaScript execution. 51352ab99526496cda7ff426115c76a1c475a1b4f4a5sgjesse@chromium.org * 51362ab99526496cda7ff426115c76a1c475a1b4f4a5sgjesse@chromium.org * Returns true if JavaScript execution is currently terminating 51372ab99526496cda7ff426115c76a1c475a1b4f4a5sgjesse@chromium.org * because of a call to TerminateExecution. In that case there are 51382ab99526496cda7ff426115c76a1c475a1b4f4a5sgjesse@chromium.org * still JavaScript frames on the stack and the termination 51392ab99526496cda7ff426115c76a1c475a1b4f4a5sgjesse@chromium.org * exception is still active. 51406d786c9805481bd13ecb29c3155540f2f32950e1svenpanne@chromium.org * 51416d786c9805481bd13ecb29c3155540f2f32950e1svenpanne@chromium.org * \param isolate The isolate in which to check. 51422ab99526496cda7ff426115c76a1c475a1b4f4a5sgjesse@chromium.org */ 51436d786c9805481bd13ecb29c3155540f2f32950e1svenpanne@chromium.org static bool IsExecutionTerminating(Isolate* isolate = NULL); 51442ab99526496cda7ff426115c76a1c475a1b4f4a5sgjesse@chromium.org 51459085a016223a6b72bf580d5781c93ec7b9e54422ager@chromium.org /** 514632d7dbafe29be06cec1edd36c31fbe2865c799f4ulan@chromium.org * Resume execution capability in the given isolate, whose execution 514732d7dbafe29be06cec1edd36c31fbe2865c799f4ulan@chromium.org * was previously forcefully terminated using TerminateExecution(). 514832d7dbafe29be06cec1edd36c31fbe2865c799f4ulan@chromium.org * 514932d7dbafe29be06cec1edd36c31fbe2865c799f4ulan@chromium.org * When execution is forcefully terminated using TerminateExecution(), 515032d7dbafe29be06cec1edd36c31fbe2865c799f4ulan@chromium.org * the isolate can not resume execution until all JavaScript frames 515132d7dbafe29be06cec1edd36c31fbe2865c799f4ulan@chromium.org * have propagated the uncatchable exception which is generated. This 515232d7dbafe29be06cec1edd36c31fbe2865c799f4ulan@chromium.org * method allows the program embedding the engine to handle the 515332d7dbafe29be06cec1edd36c31fbe2865c799f4ulan@chromium.org * termination event and resume execution capability, even if 515432d7dbafe29be06cec1edd36c31fbe2865c799f4ulan@chromium.org * JavaScript frames remain on the stack. 515532d7dbafe29be06cec1edd36c31fbe2865c799f4ulan@chromium.org * 515632d7dbafe29be06cec1edd36c31fbe2865c799f4ulan@chromium.org * This method can be used by any thread even if that thread has not 515732d7dbafe29be06cec1edd36c31fbe2865c799f4ulan@chromium.org * acquired the V8 lock with a Locker object. 515832d7dbafe29be06cec1edd36c31fbe2865c799f4ulan@chromium.org * 515932d7dbafe29be06cec1edd36c31fbe2865c799f4ulan@chromium.org * \param isolate The isolate in which to resume execution capability. 516032d7dbafe29be06cec1edd36c31fbe2865c799f4ulan@chromium.org */ 516132d7dbafe29be06cec1edd36c31fbe2865c799f4ulan@chromium.org static void CancelTerminateExecution(Isolate* isolate); 516232d7dbafe29be06cec1edd36c31fbe2865c799f4ulan@chromium.org 516332d7dbafe29be06cec1edd36c31fbe2865c799f4ulan@chromium.org /** 516441826e77311db718135ef6517b846933dfd275f3ager@chromium.org * Releases any resources used by v8 and stops any utility threads 516541826e77311db718135ef6517b846933dfd275f3ager@chromium.org * that may be running. Note that disposing v8 is permanent, it 516641826e77311db718135ef6517b846933dfd275f3ager@chromium.org * cannot be reinitialized. 516741826e77311db718135ef6517b846933dfd275f3ager@chromium.org * 516841826e77311db718135ef6517b846933dfd275f3ager@chromium.org * It should generally not be necessary to dispose v8 before exiting 516941826e77311db718135ef6517b846933dfd275f3ager@chromium.org * a process, this should happen automatically. It is only necessary 517041826e77311db718135ef6517b846933dfd275f3ager@chromium.org * to use if the process needs the resources taken up by v8. 517141826e77311db718135ef6517b846933dfd275f3ager@chromium.org */ 517241826e77311db718135ef6517b846933dfd275f3ager@chromium.org static bool Dispose(); 517341826e77311db718135ef6517b846933dfd275f3ager@chromium.org 5174add848f7b25aaacf2ebb523696c074d8be15e215ager@chromium.org /** 5175f2038fb01417bcf7698b87a5dfaa4a861539618aerik.corry@gmail.com * Iterates through all external resources referenced from current isolate 5176e4ee6de0de64744d55b63da83156827c989c7099verwaest@chromium.org * heap. GC is not invoked prior to iterating, therefore there is no 5177e4ee6de0de64744d55b63da83156827c989c7099verwaest@chromium.org * guarantee that visited objects are still alive. 5178f2038fb01417bcf7698b87a5dfaa4a861539618aerik.corry@gmail.com */ 5179f2038fb01417bcf7698b87a5dfaa4a861539618aerik.corry@gmail.com static void VisitExternalResources(ExternalResourceVisitor* visitor); 5180f2038fb01417bcf7698b87a5dfaa4a861539618aerik.corry@gmail.com 5181f2038fb01417bcf7698b87a5dfaa4a861539618aerik.corry@gmail.com /** 518289e18f5599cb4cd462cb1ed324addd7388fb4d60rossberg@chromium.org * Iterates through all the persistent handles in the current isolate's heap 518389e18f5599cb4cd462cb1ed324addd7388fb4d60rossberg@chromium.org * that have class_ids. 518489e18f5599cb4cd462cb1ed324addd7388fb4d60rossberg@chromium.org */ 518589e18f5599cb4cd462cb1ed324addd7388fb4d60rossberg@chromium.org static void VisitHandlesWithClassIds(PersistentHandleVisitor* visitor); 518689e18f5599cb4cd462cb1ed324addd7388fb4d60rossberg@chromium.org 518789e18f5599cb4cd462cb1ed324addd7388fb4d60rossberg@chromium.org /** 5188003650ee766f5e92756d470a37973fd371757485yangguo@chromium.org * Iterates through all the persistent handles in the current isolate's heap 5189003650ee766f5e92756d470a37973fd371757485yangguo@chromium.org * that have class_ids and are candidates to be marked as partially dependent 5190003650ee766f5e92756d470a37973fd371757485yangguo@chromium.org * handles. This will visit handles to young objects created since the last 5191003650ee766f5e92756d470a37973fd371757485yangguo@chromium.org * garbage collection but is free to visit an arbitrary superset of these 5192003650ee766f5e92756d470a37973fd371757485yangguo@chromium.org * objects. 5193003650ee766f5e92756d470a37973fd371757485yangguo@chromium.org */ 5194003650ee766f5e92756d470a37973fd371757485yangguo@chromium.org static void VisitHandlesForPartialDependence( 5195003650ee766f5e92756d470a37973fd371757485yangguo@chromium.org Isolate* isolate, PersistentHandleVisitor* visitor); 5196003650ee766f5e92756d470a37973fd371757485yangguo@chromium.org 5197003650ee766f5e92756d470a37973fd371757485yangguo@chromium.org /** 5198169691d93a961c8b511f8ac8fd8ee33d081ca10fdanno@chromium.org * Initialize the ICU library bundled with V8. The embedder should only 5199169691d93a961c8b511f8ac8fd8ee33d081ca10fdanno@chromium.org * invoke this method when using the bundled ICU. Returns true on success. 5200b5ed9300c59e8590c9dc588727b6564c244b0f5cmachenbach@chromium.org * 5201b5ed9300c59e8590c9dc588727b6564c244b0f5cmachenbach@chromium.org * If V8 was compiled with the ICU data in an external file, the location 5202b5ed9300c59e8590c9dc588727b6564c244b0f5cmachenbach@chromium.org * of the data file has to be provided. 5203169691d93a961c8b511f8ac8fd8ee33d081ca10fdanno@chromium.org */ 5204b5ed9300c59e8590c9dc588727b6564c244b0f5cmachenbach@chromium.org static bool InitializeICU(const char* icu_data_file = NULL); 5205169691d93a961c8b511f8ac8fd8ee33d081ca10fdanno@chromium.org 520690dca01eac542464c29011d239bf18f26e0b8f00machenbach@chromium.org /** 520790dca01eac542464c29011d239bf18f26e0b8f00machenbach@chromium.org * Sets the v8::Platform to use. This should be invoked before V8 is 520890dca01eac542464c29011d239bf18f26e0b8f00machenbach@chromium.org * initialized. 520990dca01eac542464c29011d239bf18f26e0b8f00machenbach@chromium.org */ 521090dca01eac542464c29011d239bf18f26e0b8f00machenbach@chromium.org static void InitializePlatform(Platform* platform); 521190dca01eac542464c29011d239bf18f26e0b8f00machenbach@chromium.org 521290dca01eac542464c29011d239bf18f26e0b8f00machenbach@chromium.org /** 521390dca01eac542464c29011d239bf18f26e0b8f00machenbach@chromium.org * Clears all references to the v8::Platform. This should be invoked after 521490dca01eac542464c29011d239bf18f26e0b8f00machenbach@chromium.org * V8 was disposed. 521590dca01eac542464c29011d239bf18f26e0b8f00machenbach@chromium.org */ 521690dca01eac542464c29011d239bf18f26e0b8f00machenbach@chromium.org static void ShutdownPlatform(); 521790dca01eac542464c29011d239bf18f26e0b8f00machenbach@chromium.org 521843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen private: 521943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen V8(); 522043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 5221d16d8531698e91e9c60a7db9e0ba3c3bb15aff20mvstanton@chromium.org static internal::Object** GlobalizeReference(internal::Isolate* isolate, 5222d16d8531698e91e9c60a7db9e0ba3c3bb15aff20mvstanton@chromium.org internal::Object** handle); 5223639bac0c5319f96e1bbe3399fb7f7f37344928bddslomov@chromium.org static internal::Object** CopyPersistent(internal::Object** handle); 5224a53e8e03bcb23716d1025de362626f90f00da892svenpanne@chromium.org static void DisposeGlobal(internal::Object** global_handle); 5225639bac0c5319f96e1bbe3399fb7f7f37344928bddslomov@chromium.org typedef WeakCallbackData<Value, void>::Callback WeakCallback; 5226b99c75496e05b4cd58815ada1e39e6029130d11crossberg@chromium.org static void MakeWeak(internal::Object** global_handle, 522732280cf2786219b2d9a668f7f00778fb59ac40b3mstarzinger@chromium.org void* data, 52284f99be9ff2091451687891a05d99cc31990de709hpayer@chromium.org WeakCallback weak_callback); 5229381adef828187e237e8758ab730dee1c2834a0b3machenbach@chromium.org static void* ClearWeak(internal::Object** global_handle); 52301e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org static void Eternalize(Isolate* isolate, 52311e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org Value* handle, 52321e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org int* index); 52331e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org static Local<Value> GetEternal(Isolate* isolate, int index); 523443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 523543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen template <class T> friend class Handle; 523643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen template <class T> friend class Local; 52371e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org template <class T> friend class Eternal; 5238c86e8c29eea534916f0d6a2a285b65a86d1b3b67machenbach@chromium.org template <class T> friend class PersistentBase; 5239639bac0c5319f96e1bbe3399fb7f7f37344928bddslomov@chromium.org template <class T, class M> friend class Persistent; 524043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen friend class Context; 524143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen}; 524243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 524343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 524443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen/** 524543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * An external exception handler. 524643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen */ 5247594006017e46d82ed7146611dc12c20e3c509c7ddanno@chromium.orgclass V8_EXPORT TryCatch { 524843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen public: 524943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen /** 525049a44674c6935d62c3e776dfbf896b7f6f34228ammassi@chromium.org * Creates a new try/catch block and registers it with v8. Note that 525149a44674c6935d62c3e776dfbf896b7f6f34228ammassi@chromium.org * all TryCatch blocks should be stack allocated because the memory 525249a44674c6935d62c3e776dfbf896b7f6f34228ammassi@chromium.org * location itself is compared against JavaScript try/catch blocks. 525343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen */ 525443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen TryCatch(); 525543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 525643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen /** 525743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * Unregisters and deletes this try/catch block. 525843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen */ 525943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen ~TryCatch(); 526043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 526143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen /** 526243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * Returns true if an exception has been caught by this try/catch block. 526343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen */ 52645a8ca6c70c6fc9716f18f6223c98d1fef5752cf6kasperl@chromium.org bool HasCaught() const; 526543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 526643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen /** 526732d7dbafe29be06cec1edd36c31fbe2865c799f4ulan@chromium.org * For certain types of exceptions, it makes no sense to continue execution. 5268c81c894dabeceb472d668027ca59e73096f5cfafsgjesse@chromium.org * 526932d7dbafe29be06cec1edd36c31fbe2865c799f4ulan@chromium.org * If CanContinue returns false, the correct action is to perform any C++ 527032d7dbafe29be06cec1edd36c31fbe2865c799f4ulan@chromium.org * cleanup needed and then return. If CanContinue returns false and 527132d7dbafe29be06cec1edd36c31fbe2865c799f4ulan@chromium.org * HasTerminated returns true, it is possible to call 527232d7dbafe29be06cec1edd36c31fbe2865c799f4ulan@chromium.org * CancelTerminateExecution in order to continue calling into the engine. 5273c81c894dabeceb472d668027ca59e73096f5cfafsgjesse@chromium.org */ 5274c81c894dabeceb472d668027ca59e73096f5cfafsgjesse@chromium.org bool CanContinue() const; 5275c81c894dabeceb472d668027ca59e73096f5cfafsgjesse@chromium.org 5276c81c894dabeceb472d668027ca59e73096f5cfafsgjesse@chromium.org /** 527732d7dbafe29be06cec1edd36c31fbe2865c799f4ulan@chromium.org * Returns true if an exception has been caught due to script execution 527832d7dbafe29be06cec1edd36c31fbe2865c799f4ulan@chromium.org * being terminated. 527932d7dbafe29be06cec1edd36c31fbe2865c799f4ulan@chromium.org * 528032d7dbafe29be06cec1edd36c31fbe2865c799f4ulan@chromium.org * There is no JavaScript representation of an execution termination 528132d7dbafe29be06cec1edd36c31fbe2865c799f4ulan@chromium.org * exception. Such exceptions are thrown when the TerminateExecution 528232d7dbafe29be06cec1edd36c31fbe2865c799f4ulan@chromium.org * methods are called to terminate a long-running script. 528332d7dbafe29be06cec1edd36c31fbe2865c799f4ulan@chromium.org * 528432d7dbafe29be06cec1edd36c31fbe2865c799f4ulan@chromium.org * If such an exception has been thrown, HasTerminated will return true, 528532d7dbafe29be06cec1edd36c31fbe2865c799f4ulan@chromium.org * indicating that it is possible to call CancelTerminateExecution in order 528632d7dbafe29be06cec1edd36c31fbe2865c799f4ulan@chromium.org * to continue calling into the engine. 528732d7dbafe29be06cec1edd36c31fbe2865c799f4ulan@chromium.org */ 528832d7dbafe29be06cec1edd36c31fbe2865c799f4ulan@chromium.org bool HasTerminated() const; 528932d7dbafe29be06cec1edd36c31fbe2865c799f4ulan@chromium.org 529032d7dbafe29be06cec1edd36c31fbe2865c799f4ulan@chromium.org /** 5291b9ce637a396f3cb3845105ba1f5553d25b25abefchristian.plesner.hansen@gmail.com * Throws the exception caught by this TryCatch in a way that avoids 5292b9ce637a396f3cb3845105ba1f5553d25b25abefchristian.plesner.hansen@gmail.com * it being caught again by this same TryCatch. As with ThrowException 5293b9ce637a396f3cb3845105ba1f5553d25b25abefchristian.plesner.hansen@gmail.com * it is illegal to execute any JavaScript operations after calling 5294b9ce637a396f3cb3845105ba1f5553d25b25abefchristian.plesner.hansen@gmail.com * ReThrow; the caller must return immediately to where the exception 5295b9ce637a396f3cb3845105ba1f5553d25b25abefchristian.plesner.hansen@gmail.com * is caught. 5296b9ce637a396f3cb3845105ba1f5553d25b25abefchristian.plesner.hansen@gmail.com */ 5297b9ce637a396f3cb3845105ba1f5553d25b25abefchristian.plesner.hansen@gmail.com Handle<Value> ReThrow(); 5298b9ce637a396f3cb3845105ba1f5553d25b25abefchristian.plesner.hansen@gmail.com 5299b9ce637a396f3cb3845105ba1f5553d25b25abefchristian.plesner.hansen@gmail.com /** 530043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * Returns the exception caught by this try/catch block. If no exception has 530143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * been caught an empty handle is returned. 530243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * 530343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * The returned handle is valid until this TryCatch block has been destroyed. 530443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen */ 53055a8ca6c70c6fc9716f18f6223c98d1fef5752cf6kasperl@chromium.org Local<Value> Exception() const; 530643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 530743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen /** 5308911335cff40a2630bbe1dfb77b1897be991241bfsgjesse@chromium.org * Returns the .stack property of the thrown object. If no .stack 5309911335cff40a2630bbe1dfb77b1897be991241bfsgjesse@chromium.org * property is present an empty handle is returned. 5310911335cff40a2630bbe1dfb77b1897be991241bfsgjesse@chromium.org */ 5311911335cff40a2630bbe1dfb77b1897be991241bfsgjesse@chromium.org Local<Value> StackTrace() const; 5312911335cff40a2630bbe1dfb77b1897be991241bfsgjesse@chromium.org 5313911335cff40a2630bbe1dfb77b1897be991241bfsgjesse@chromium.org /** 53149258b6bc66e09368ada54001f619d53b4fc976d5ager@chromium.org * Returns the message associated with this exception. If there is 53159258b6bc66e09368ada54001f619d53b4fc976d5ager@chromium.org * no message associated an empty handle is returned. 53169258b6bc66e09368ada54001f619d53b4fc976d5ager@chromium.org * 53179258b6bc66e09368ada54001f619d53b4fc976d5ager@chromium.org * The returned handle is valid until this TryCatch block has been 53189258b6bc66e09368ada54001f619d53b4fc976d5ager@chromium.org * destroyed. 53199258b6bc66e09368ada54001f619d53b4fc976d5ager@chromium.org */ 53205a8ca6c70c6fc9716f18f6223c98d1fef5752cf6kasperl@chromium.org Local<v8::Message> Message() const; 53219258b6bc66e09368ada54001f619d53b4fc976d5ager@chromium.org 53229258b6bc66e09368ada54001f619d53b4fc976d5ager@chromium.org /** 532343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * Clears any exceptions that may have been caught by this try/catch block. 53248640107360766c74218cf16d51b714b1f2138839machenbach@chromium.org * After this method has been called, HasCaught() will return false. Cancels 53258640107360766c74218cf16d51b714b1f2138839machenbach@chromium.org * the scheduled exception if it is caught and ReThrow() is not called before. 532643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * 532743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * It is not necessary to clear a try/catch block before using it again; if 532843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * another exception is thrown the previously caught exception will just be 532943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * overwritten. However, it is often a good idea since it makes it easier 533043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * to determine which operation threw a given exception. 533143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen */ 533243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen void Reset(); 533343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 5334727e995b7bba3c57fb1e5c156d386ca11894f781v /** 5335727e995b7bba3c57fb1e5c156d386ca11894f781v * Set verbosity of the external exception handler. 5336727e995b7bba3c57fb1e5c156d386ca11894f781v * 5337727e995b7bba3c57fb1e5c156d386ca11894f781v * By default, exceptions that are caught by an external exception 5338727e995b7bba3c57fb1e5c156d386ca11894f781v * handler are not reported. Call SetVerbose with true on an 5339727e995b7bba3c57fb1e5c156d386ca11894f781v * external exception handler to have exceptions caught by the 5340727e995b7bba3c57fb1e5c156d386ca11894f781v * handler reported as if they were not caught. 5341727e995b7bba3c57fb1e5c156d386ca11894f781v */ 534243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen void SetVerbose(bool value); 534343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 53449258b6bc66e09368ada54001f619d53b4fc976d5ager@chromium.org /** 53459258b6bc66e09368ada54001f619d53b4fc976d5ager@chromium.org * Set whether or not this TryCatch should capture a Message object 53469258b6bc66e09368ada54001f619d53b4fc976d5ager@chromium.org * which holds source information about where the exception 53479258b6bc66e09368ada54001f619d53b4fc976d5ager@chromium.org * occurred. True by default. 53489258b6bc66e09368ada54001f619d53b4fc976d5ager@chromium.org */ 53499258b6bc66e09368ada54001f619d53b4fc976d5ager@chromium.org void SetCaptureMessage(bool value); 53509258b6bc66e09368ada54001f619d53b4fc976d5ager@chromium.org 53516a4d394882dba70a85567fb90ffd4f428a9eb170machenbach@chromium.org /** 53526a4d394882dba70a85567fb90ffd4f428a9eb170machenbach@chromium.org * There are cases when the raw address of C++ TryCatch object cannot be 53536a4d394882dba70a85567fb90ffd4f428a9eb170machenbach@chromium.org * used for comparisons with addresses into the JS stack. The cases are: 53546a4d394882dba70a85567fb90ffd4f428a9eb170machenbach@chromium.org * 1) ARM, ARM64 and MIPS simulators which have separate JS stack. 53556a4d394882dba70a85567fb90ffd4f428a9eb170machenbach@chromium.org * 2) Address sanitizer allocates local C++ object in the heap when 53566a4d394882dba70a85567fb90ffd4f428a9eb170machenbach@chromium.org * UseAfterReturn mode is enabled. 53576a4d394882dba70a85567fb90ffd4f428a9eb170machenbach@chromium.org * This method returns address that can be used for comparisons with 53586a4d394882dba70a85567fb90ffd4f428a9eb170machenbach@chromium.org * addresses into the JS stack. When neither simulator nor ASAN's 53596a4d394882dba70a85567fb90ffd4f428a9eb170machenbach@chromium.org * UseAfterReturn is enabled, then the address returned will be the address 53606a4d394882dba70a85567fb90ffd4f428a9eb170machenbach@chromium.org * of the C++ try catch handler itself. 53616a4d394882dba70a85567fb90ffd4f428a9eb170machenbach@chromium.org */ 53626a4d394882dba70a85567fb90ffd4f428a9eb170machenbach@chromium.org static void* JSStackComparableAddress(v8::TryCatch* handler) { 53636a4d394882dba70a85567fb90ffd4f428a9eb170machenbach@chromium.org if (handler == NULL) return NULL; 53646a4d394882dba70a85567fb90ffd4f428a9eb170machenbach@chromium.org return handler->js_stack_comparable_address_; 53656a4d394882dba70a85567fb90ffd4f428a9eb170machenbach@chromium.org } 53666a4d394882dba70a85567fb90ffd4f428a9eb170machenbach@chromium.org 5367c4c927273ae2b690c4a015b4640a2a469c9a1a69ager@chromium.org private: 53688640107360766c74218cf16d51b714b1f2138839machenbach@chromium.org void ResetInternal(); 53698640107360766c74218cf16d51b714b1f2138839machenbach@chromium.org 537049a44674c6935d62c3e776dfbf896b7f6f34228ammassi@chromium.org // Make it hard to create heap-allocated TryCatch blocks. 537149a44674c6935d62c3e776dfbf896b7f6f34228ammassi@chromium.org TryCatch(const TryCatch&); 537249a44674c6935d62c3e776dfbf896b7f6f34228ammassi@chromium.org void operator=(const TryCatch&); 537349a44674c6935d62c3e776dfbf896b7f6f34228ammassi@chromium.org void* operator new(size_t size); 537449a44674c6935d62c3e776dfbf896b7f6f34228ammassi@chromium.org void operator delete(void*, size_t); 537549a44674c6935d62c3e776dfbf896b7f6f34228ammassi@chromium.org 5376e297f5973a8a9ff0d9945da3f1e2d8a6230c294djkummerow@chromium.org v8::internal::Isolate* isolate_; 53776a4d394882dba70a85567fb90ffd4f428a9eb170machenbach@chromium.org v8::TryCatch* next_; 537843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen void* exception_; 537993a47f4837f2137c8d8349250fd8e91da3108126jkummerow@chromium.org void* message_obj_; 538093a47f4837f2137c8d8349250fd8e91da3108126jkummerow@chromium.org void* message_script_; 53816a4d394882dba70a85567fb90ffd4f428a9eb170machenbach@chromium.org void* js_stack_comparable_address_; 538293a47f4837f2137c8d8349250fd8e91da3108126jkummerow@chromium.org int message_start_pos_; 538393a47f4837f2137c8d8349250fd8e91da3108126jkummerow@chromium.org int message_end_pos_; 5384b9ce637a396f3cb3845105ba1f5553d25b25abefchristian.plesner.hansen@gmail.com bool is_verbose_ : 1; 5385b9ce637a396f3cb3845105ba1f5553d25b25abefchristian.plesner.hansen@gmail.com bool can_continue_ : 1; 5386b9ce637a396f3cb3845105ba1f5553d25b25abefchristian.plesner.hansen@gmail.com bool capture_message_ : 1; 5387b9ce637a396f3cb3845105ba1f5553d25b25abefchristian.plesner.hansen@gmail.com bool rethrow_ : 1; 538832d7dbafe29be06cec1edd36c31fbe2865c799f4ulan@chromium.org bool has_terminated_ : 1; 5389c4c927273ae2b690c4a015b4640a2a469c9a1a69ager@chromium.org 5390ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org friend class v8::internal::Isolate; 539143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen}; 539243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 539343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 5394fb144a0716afe7ab8bf245f2391a9e53b3db3c89fschneider@chromium.org// --- Context --- 539543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 539643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 539743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen/** 539826ca35cc4ec47151d9c6d3890b0f052fc79cb8afmachenbach@chromium.org * A container for extension names. 539943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen */ 5400594006017e46d82ed7146611dc12c20e3c509c7ddanno@chromium.orgclass V8_EXPORT ExtensionConfiguration { 540143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen public: 540226ca35cc4ec47151d9c6d3890b0f052fc79cb8afmachenbach@chromium.org ExtensionConfiguration() : name_count_(0), names_(NULL) { } 540343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen ExtensionConfiguration(int name_count, const char* names[]) 540443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen : name_count_(name_count), names_(names) { } 540526ca35cc4ec47151d9c6d3890b0f052fc79cb8afmachenbach@chromium.org 540626ca35cc4ec47151d9c6d3890b0f052fc79cb8afmachenbach@chromium.org const char** begin() const { return &names_[0]; } 540726ca35cc4ec47151d9c6d3890b0f052fc79cb8afmachenbach@chromium.org const char** end() const { return &names_[name_count_]; } 540826ca35cc4ec47151d9c6d3890b0f052fc79cb8afmachenbach@chromium.org 540943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen private: 541026ca35cc4ec47151d9c6d3890b0f052fc79cb8afmachenbach@chromium.org const int name_count_; 541143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen const char** names_; 541243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen}; 541343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 541443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 541543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen/** 541643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * A sandboxed execution context with its own set of built-in objects 541743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * and functions. 541843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen */ 5419594006017e46d82ed7146611dc12c20e3c509c7ddanno@chromium.orgclass V8_EXPORT Context { 542043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen public: 54217a392b3bfb39dbbc1ff22f0b53109aa5763fde57whesse@chromium.org /** 5422113035e2f19feb7032fbe57b2e3e376f1dfc4110jkummerow@chromium.org * Returns the global proxy object. 54237a392b3bfb39dbbc1ff22f0b53109aa5763fde57whesse@chromium.org * 5424113035e2f19feb7032fbe57b2e3e376f1dfc4110jkummerow@chromium.org * Global proxy object is a thin wrapper whose prototype points to actual 5425113035e2f19feb7032fbe57b2e3e376f1dfc4110jkummerow@chromium.org * context's global object with the properties like Object, etc. This is done 5426113035e2f19feb7032fbe57b2e3e376f1dfc4110jkummerow@chromium.org * that way for security reasons (for more details see 54277a392b3bfb39dbbc1ff22f0b53109aa5763fde57whesse@chromium.org * https://wiki.mozilla.org/Gecko:SplitWindow). 54287a392b3bfb39dbbc1ff22f0b53109aa5763fde57whesse@chromium.org * 54297a392b3bfb39dbbc1ff22f0b53109aa5763fde57whesse@chromium.org * Please note that changes to global proxy object prototype most probably 5430113035e2f19feb7032fbe57b2e3e376f1dfc4110jkummerow@chromium.org * would break VM---v8 expects only global object as a prototype of global 5431113035e2f19feb7032fbe57b2e3e376f1dfc4110jkummerow@chromium.org * proxy object. 54327a392b3bfb39dbbc1ff22f0b53109aa5763fde57whesse@chromium.org */ 543343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen Local<Object> Global(); 543443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 54355a8ca6c70c6fc9716f18f6223c98d1fef5752cf6kasperl@chromium.org /** 54365a8ca6c70c6fc9716f18f6223c98d1fef5752cf6kasperl@chromium.org * Detaches the global object from its context before 54375a8ca6c70c6fc9716f18f6223c98d1fef5752cf6kasperl@chromium.org * the global object can be reused to create a new context. 54385a8ca6c70c6fc9716f18f6223c98d1fef5752cf6kasperl@chromium.org */ 54395a8ca6c70c6fc9716f18f6223c98d1fef5752cf6kasperl@chromium.org void DetachGlobal(); 54405a8ca6c70c6fc9716f18f6223c98d1fef5752cf6kasperl@chromium.org 5441df7a284a293865a5fa9390be2e8f82ba3ac8598asgjesse@chromium.org /** 5442e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org * Creates a new context and returns a handle to the newly allocated 5443e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org * context. 54449155e252524a2bf92aecd27493feafed86702312kmillikin@chromium.org * 5445e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org * \param isolate The isolate in which to create the context. 54465d00b60c201d860c74821f553fdc34f4e057b411lrn@chromium.org * 54475d00b60c201d860c74821f553fdc34f4e057b411lrn@chromium.org * \param extensions An optional extension configuration containing 54485d00b60c201d860c74821f553fdc34f4e057b411lrn@chromium.org * the extensions to be installed in the newly created context. 54495d00b60c201d860c74821f553fdc34f4e057b411lrn@chromium.org * 54505d00b60c201d860c74821f553fdc34f4e057b411lrn@chromium.org * \param global_template An optional object template from which the 54515d00b60c201d860c74821f553fdc34f4e057b411lrn@chromium.org * global object for the newly created context will be created. 54525d00b60c201d860c74821f553fdc34f4e057b411lrn@chromium.org * 54535d00b60c201d860c74821f553fdc34f4e057b411lrn@chromium.org * \param global_object An optional global object to be reused for 54545d00b60c201d860c74821f553fdc34f4e057b411lrn@chromium.org * the newly created context. This global object must have been 54555d00b60c201d860c74821f553fdc34f4e057b411lrn@chromium.org * created by a previous call to Context::New with the same global 54565d00b60c201d860c74821f553fdc34f4e057b411lrn@chromium.org * template. The state of the global object will be completely reset 54575d00b60c201d860c74821f553fdc34f4e057b411lrn@chromium.org * and only object identify will remain. 54589155e252524a2bf92aecd27493feafed86702312kmillikin@chromium.org */ 5459e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org static Local<Context> New( 5460e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org Isolate* isolate, 5461e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org ExtensionConfiguration* extensions = NULL, 5462e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org Handle<ObjectTemplate> global_template = Handle<ObjectTemplate>(), 5463e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org Handle<Value> global_object = Handle<Value>()); 5464e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org 54651bf0cd04f43405cf4353d7c5360e53149ecb9f2cager@chromium.org /** 546643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * Sets the security token for the context. To access an object in 546743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * another context, the security tokens must match. 546843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen */ 546943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen void SetSecurityToken(Handle<Value> token); 547043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 54715a8ca6c70c6fc9716f18f6223c98d1fef5752cf6kasperl@chromium.org /** Restores the security token to the default value. */ 54725a8ca6c70c6fc9716f18f6223c98d1fef5752cf6kasperl@chromium.org void UseDefaultSecurityToken(); 54735a8ca6c70c6fc9716f18f6223c98d1fef5752cf6kasperl@chromium.org 547443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen /** Returns the security token of this context.*/ 547543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen Handle<Value> GetSecurityToken(); 547643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 5477727e995b7bba3c57fb1e5c156d386ca11894f781v /** 5478727e995b7bba3c57fb1e5c156d386ca11894f781v * Enter this context. After entering a context, all code compiled 5479727e995b7bba3c57fb1e5c156d386ca11894f781v * and run is compiled and run in this context. If another context 5480727e995b7bba3c57fb1e5c156d386ca11894f781v * is already entered, this old context is saved so it can be 5481727e995b7bba3c57fb1e5c156d386ca11894f781v * restored when the new context is exited. 5482727e995b7bba3c57fb1e5c156d386ca11894f781v */ 548343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen void Enter(); 5484727e995b7bba3c57fb1e5c156d386ca11894f781v 5485727e995b7bba3c57fb1e5c156d386ca11894f781v /** 5486727e995b7bba3c57fb1e5c156d386ca11894f781v * Exit this context. Exiting the current context restores the 5487727e995b7bba3c57fb1e5c156d386ca11894f781v * context that was in place when entering the current context. 5488727e995b7bba3c57fb1e5c156d386ca11894f781v */ 548943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen void Exit(); 549043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 549146a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org /** Returns an isolate associated with a current context. */ 549246a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org v8::Isolate* GetIsolate(); 5493e19986e2807a2b21b2c4840812fed1d45b6fc227yangguo@chromium.org 5494e19986e2807a2b21b2c4840812fed1d45b6fc227yangguo@chromium.org /** 5495eeb44b681a16e45f1415dfacff0ba3dba9de5d8cyangguo@chromium.org * Gets the embedder data with the given index, which must have been set by a 5496eeb44b681a16e45f1415dfacff0ba3dba9de5d8cyangguo@chromium.org * previous call to SetEmbedderData with the same index. Note that index 0 5497eeb44b681a16e45f1415dfacff0ba3dba9de5d8cyangguo@chromium.org * currently has a special meaning for Chrome's debugger. 5498eeb44b681a16e45f1415dfacff0ba3dba9de5d8cyangguo@chromium.org */ 54994a35c5a501e5b966f895ddea8e19c3ca232cb23fdslomov@chromium.org V8_INLINE Local<Value> GetEmbedderData(int index); 5500eeb44b681a16e45f1415dfacff0ba3dba9de5d8cyangguo@chromium.org 5501eeb44b681a16e45f1415dfacff0ba3dba9de5d8cyangguo@chromium.org /** 5502eeb44b681a16e45f1415dfacff0ba3dba9de5d8cyangguo@chromium.org * Sets the embedder data with the given index, growing the data as 5503eeb44b681a16e45f1415dfacff0ba3dba9de5d8cyangguo@chromium.org * needed. Note that index 0 currently has a special meaning for Chrome's 5504eeb44b681a16e45f1415dfacff0ba3dba9de5d8cyangguo@chromium.org * debugger. 5505eeb44b681a16e45f1415dfacff0ba3dba9de5d8cyangguo@chromium.org */ 5506eeb44b681a16e45f1415dfacff0ba3dba9de5d8cyangguo@chromium.org void SetEmbedderData(int index, Handle<Value> value); 5507eeb44b681a16e45f1415dfacff0ba3dba9de5d8cyangguo@chromium.org 5508eeb44b681a16e45f1415dfacff0ba3dba9de5d8cyangguo@chromium.org /** 5509eeb44b681a16e45f1415dfacff0ba3dba9de5d8cyangguo@chromium.org * Gets a 2-byte-aligned native pointer from the embedder data with the given 5510eeb44b681a16e45f1415dfacff0ba3dba9de5d8cyangguo@chromium.org * index, which must have bees set by a previous call to 5511eeb44b681a16e45f1415dfacff0ba3dba9de5d8cyangguo@chromium.org * SetAlignedPointerInEmbedderData with the same index. Note that index 0 5512eeb44b681a16e45f1415dfacff0ba3dba9de5d8cyangguo@chromium.org * currently has a special meaning for Chrome's debugger. 5513eeb44b681a16e45f1415dfacff0ba3dba9de5d8cyangguo@chromium.org */ 55144a35c5a501e5b966f895ddea8e19c3ca232cb23fdslomov@chromium.org V8_INLINE void* GetAlignedPointerFromEmbedderData(int index); 5515eeb44b681a16e45f1415dfacff0ba3dba9de5d8cyangguo@chromium.org 5516eeb44b681a16e45f1415dfacff0ba3dba9de5d8cyangguo@chromium.org /** 5517eeb44b681a16e45f1415dfacff0ba3dba9de5d8cyangguo@chromium.org * Sets a 2-byte-aligned native pointer in the embedder data with the given 5518eeb44b681a16e45f1415dfacff0ba3dba9de5d8cyangguo@chromium.org * index, growing the data as needed. Note that index 0 currently has a 5519eeb44b681a16e45f1415dfacff0ba3dba9de5d8cyangguo@chromium.org * special meaning for Chrome's debugger. 5520eeb44b681a16e45f1415dfacff0ba3dba9de5d8cyangguo@chromium.org */ 5521eeb44b681a16e45f1415dfacff0ba3dba9de5d8cyangguo@chromium.org void SetAlignedPointerInEmbedderData(int index, void* value); 55229085a016223a6b72bf580d5781c93ec7b9e54422ager@chromium.org 55239085a016223a6b72bf580d5781c93ec7b9e54422ager@chromium.org /** 5524fb144a0716afe7ab8bf245f2391a9e53b3db3c89fschneider@chromium.org * Control whether code generation from strings is allowed. Calling 5525fb144a0716afe7ab8bf245f2391a9e53b3db3c89fschneider@chromium.org * this method with false will disable 'eval' and the 'Function' 5526fb144a0716afe7ab8bf245f2391a9e53b3db3c89fschneider@chromium.org * constructor for code running in this context. If 'eval' or the 5527fb144a0716afe7ab8bf245f2391a9e53b3db3c89fschneider@chromium.org * 'Function' constructor are used an exception will be thrown. 5528fb144a0716afe7ab8bf245f2391a9e53b3db3c89fschneider@chromium.org * 5529fb144a0716afe7ab8bf245f2391a9e53b3db3c89fschneider@chromium.org * If code generation from strings is not allowed the 5530fb144a0716afe7ab8bf245f2391a9e53b3db3c89fschneider@chromium.org * V8::AllowCodeGenerationFromStrings callback will be invoked if 5531fb144a0716afe7ab8bf245f2391a9e53b3db3c89fschneider@chromium.org * set before blocking the call to 'eval' or the 'Function' 5532fb144a0716afe7ab8bf245f2391a9e53b3db3c89fschneider@chromium.org * constructor. If that callback returns true, the call will be 5533fb144a0716afe7ab8bf245f2391a9e53b3db3c89fschneider@chromium.org * allowed, otherwise an exception will be thrown. If no callback is 5534fb144a0716afe7ab8bf245f2391a9e53b3db3c89fschneider@chromium.org * set an exception will be thrown. 5535fb144a0716afe7ab8bf245f2391a9e53b3db3c89fschneider@chromium.org */ 5536fb144a0716afe7ab8bf245f2391a9e53b3db3c89fschneider@chromium.org void AllowCodeGenerationFromStrings(bool allow); 5537fb144a0716afe7ab8bf245f2391a9e53b3db3c89fschneider@chromium.org 5538fb144a0716afe7ab8bf245f2391a9e53b3db3c89fschneider@chromium.org /** 55391145ef852a4e230e1f642eecd8de155f2b26bc53jkummerow@chromium.org * Returns true if code generation from strings is allowed for the context. 55401145ef852a4e230e1f642eecd8de155f2b26bc53jkummerow@chromium.org * For more details see AllowCodeGenerationFromStrings(bool) documentation. 55411145ef852a4e230e1f642eecd8de155f2b26bc53jkummerow@chromium.org */ 55421145ef852a4e230e1f642eecd8de155f2b26bc53jkummerow@chromium.org bool IsCodeGenerationFromStringsAllowed(); 55431145ef852a4e230e1f642eecd8de155f2b26bc53jkummerow@chromium.org 55441145ef852a4e230e1f642eecd8de155f2b26bc53jkummerow@chromium.org /** 554556c14afabc547f0a8ab2e24d789c00030f8df892ulan@chromium.org * Sets the error description for the exception that is thrown when 554656c14afabc547f0a8ab2e24d789c00030f8df892ulan@chromium.org * code generation from strings is not allowed and 'eval' or the 'Function' 554756c14afabc547f0a8ab2e24d789c00030f8df892ulan@chromium.org * constructor are called. 554856c14afabc547f0a8ab2e24d789c00030f8df892ulan@chromium.org */ 554956c14afabc547f0a8ab2e24d789c00030f8df892ulan@chromium.org void SetErrorMessageForCodeGenerationFromStrings(Handle<String> message); 555056c14afabc547f0a8ab2e24d789c00030f8df892ulan@chromium.org 555156c14afabc547f0a8ab2e24d789c00030f8df892ulan@chromium.org /** 555243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * Stack-allocated class which sets the execution context for all 555343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * operations executed within a local scope. 555443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen */ 555569ea3965ef6e0d3f020a402cf7e6b96b9cb651aekmillikin@chromium.org class Scope { 555643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen public: 55574a35c5a501e5b966f895ddea8e19c3ca232cb23fdslomov@chromium.org explicit V8_INLINE Scope(Handle<Context> context) : context_(context) { 555843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen context_->Enter(); 555943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } 55604a35c5a501e5b966f895ddea8e19c3ca232cb23fdslomov@chromium.org V8_INLINE ~Scope() { context_->Exit(); } 556157ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org 556243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen private: 556343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen Handle<Context> context_; 556443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen }; 556543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 556643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen private: 556743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen friend class Value; 556843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen friend class Script; 556943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen friend class Object; 557043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen friend class Function; 5571eeb44b681a16e45f1415dfacff0ba3dba9de5d8cyangguo@chromium.org 5572eeb44b681a16e45f1415dfacff0ba3dba9de5d8cyangguo@chromium.org Local<Value> SlowGetEmbedderData(int index); 5573eeb44b681a16e45f1415dfacff0ba3dba9de5d8cyangguo@chromium.org void* SlowGetAlignedPointerFromEmbedderData(int index); 557443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen}; 557543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 557643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 557743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen/** 557846a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org * Multiple threads in V8 are allowed, but only one thread at a time is allowed 557946a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org * to use any given V8 isolate, see the comments in the Isolate class. The 558046a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org * definition of 'using a V8 isolate' includes accessing handles or holding onto 558146a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org * object pointers obtained from V8 handles while in the particular V8 isolate. 558246a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org * It is up to the user of V8 to ensure, perhaps with locking, that this 558346a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org * constraint is not violated. In addition to any other synchronization 558446a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org * mechanism that may be used, the v8::Locker and v8::Unlocker classes must be 558546a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org * used to signal thead switches to V8. 5586ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org * 558746a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org * v8::Locker is a scoped lock object. While it's active, i.e. between its 558846a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org * construction and destruction, the current thread is allowed to use the locked 558946a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org * isolate. V8 guarantees that an isolate can be locked by at most one thread at 559046a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org * any time. In other words, the scope of a v8::Locker is a critical section. 559143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * 55921c09276ce2ac5214e81ca554360b9f101187893blrn@chromium.org * Sample usage: 55931c09276ce2ac5214e81ca554360b9f101187893blrn@chromium.org* \code 559443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * ... 559543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * { 55961c09276ce2ac5214e81ca554360b9f101187893blrn@chromium.org * v8::Locker locker(isolate); 55971c09276ce2ac5214e81ca554360b9f101187893blrn@chromium.org * v8::Isolate::Scope isolate_scope(isolate); 559843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * ... 55991c09276ce2ac5214e81ca554360b9f101187893blrn@chromium.org * // Code using V8 and isolate goes here. 560043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * ... 560143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * } // Destructor called here 5602727e995b7bba3c57fb1e5c156d386ca11894f781v * \endcode 560343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * 560446a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org * If you wish to stop using V8 in a thread A you can do this either by 560546a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org * destroying the v8::Locker object as above or by constructing a v8::Unlocker 560646a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org * object: 560743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * 5608727e995b7bba3c57fb1e5c156d386ca11894f781v * \code 560943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * { 56101c09276ce2ac5214e81ca554360b9f101187893blrn@chromium.org * isolate->Exit(); 56111c09276ce2ac5214e81ca554360b9f101187893blrn@chromium.org * v8::Unlocker unlocker(isolate); 561243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * ... 561343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * // Code not using V8 goes here while V8 can run in another thread. 561443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * ... 561543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * } // Destructor called here. 56161c09276ce2ac5214e81ca554360b9f101187893blrn@chromium.org * isolate->Enter(); 5617727e995b7bba3c57fb1e5c156d386ca11894f781v * \endcode 561843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * 561946a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org * The Unlocker object is intended for use in a long-running callback from V8, 562046a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org * where you want to release the V8 lock for other threads to use. 562143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * 562246a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org * The v8::Locker is a recursive lock, i.e. you can lock more than once in a 562346a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org * given thread. This can be useful if you have code that can be called either 562446a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org * from code that holds the lock or from code that does not. The Unlocker is 562546a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org * not recursive so you can not have several Unlockers on the stack at once, and 562646a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org * you can not use an Unlocker in a thread that is not inside a Locker's scope. 562743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * 562846a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org * An unlocker will unlock several lockers if it has to and reinstate the 562946a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org * correct depth of locking on its destruction, e.g.: 563043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * 5631727e995b7bba3c57fb1e5c156d386ca11894f781v * \code 563243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * // V8 not locked. 563343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * { 56341c09276ce2ac5214e81ca554360b9f101187893blrn@chromium.org * v8::Locker locker(isolate); 56351c09276ce2ac5214e81ca554360b9f101187893blrn@chromium.org * Isolate::Scope isolate_scope(isolate); 563643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * // V8 locked. 563743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * { 56381c09276ce2ac5214e81ca554360b9f101187893blrn@chromium.org * v8::Locker another_locker(isolate); 563943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * // V8 still locked (2 levels). 564043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * { 56411c09276ce2ac5214e81ca554360b9f101187893blrn@chromium.org * isolate->Exit(); 56421c09276ce2ac5214e81ca554360b9f101187893blrn@chromium.org * v8::Unlocker unlocker(isolate); 564343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * // V8 not locked. 564443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * } 56451c09276ce2ac5214e81ca554360b9f101187893blrn@chromium.org * isolate->Enter(); 564643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * // V8 locked again (2 levels). 564743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * } 564843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * // V8 still locked (1 level). 564943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * } 565043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * // V8 Now no longer locked. 5651727e995b7bba3c57fb1e5c156d386ca11894f781v * \endcode 565243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen */ 5653594006017e46d82ed7146611dc12c20e3c509c7ddanno@chromium.orgclass V8_EXPORT Unlocker { 565443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen public: 56551c09276ce2ac5214e81ca554360b9f101187893blrn@chromium.org /** 565646a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org * Initialize Unlocker for a given Isolate. 56571c09276ce2ac5214e81ca554360b9f101187893blrn@chromium.org */ 56584a35c5a501e5b966f895ddea8e19c3ca232cb23fdslomov@chromium.org V8_INLINE explicit Unlocker(Isolate* isolate) { Initialize(isolate); } 565946a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org 566043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen ~Unlocker(); 56611c09276ce2ac5214e81ca554360b9f101187893blrn@chromium.org private: 566246a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org void Initialize(Isolate* isolate); 566346a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org 56641c09276ce2ac5214e81ca554360b9f101187893blrn@chromium.org internal::Isolate* isolate_; 566543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen}; 566643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 566743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 5668594006017e46d82ed7146611dc12c20e3c509c7ddanno@chromium.orgclass V8_EXPORT Locker { 566943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen public: 56701c09276ce2ac5214e81ca554360b9f101187893blrn@chromium.org /** 567146a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org * Initialize Locker for a given Isolate. 56721c09276ce2ac5214e81ca554360b9f101187893blrn@chromium.org */ 56734a35c5a501e5b966f895ddea8e19c3ca232cb23fdslomov@chromium.org V8_INLINE explicit Locker(Isolate* isolate) { Initialize(isolate); } 567446a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org 567543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen ~Locker(); 5676727e995b7bba3c57fb1e5c156d386ca11894f781v 56779258b6bc66e09368ada54001f619d53b4fc976d5ager@chromium.org /** 567846a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org * Returns whether or not the locker for a given isolate, is locked by the 567946a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org * current thread. 56809258b6bc66e09368ada54001f619d53b4fc976d5ager@chromium.org */ 568146a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org static bool IsLocked(Isolate* isolate); 56829258b6bc66e09368ada54001f619d53b4fc976d5ager@chromium.org 5683ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org /** 5684ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org * Returns whether v8::Locker is being used by this V8 instance. 5685ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org */ 56867c2628c3f0353f0558760c3ca442f934263ea766kmillikin@chromium.org static bool IsActive(); 5687ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org 568843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen private: 568946a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org void Initialize(Isolate* isolate); 569046a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org 569143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen bool has_lock_; 569243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen bool top_level_; 56931c09276ce2ac5214e81ca554360b9f101187893blrn@chromium.org internal::Isolate* isolate_; 569441044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org 5695ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org static bool active_; 5696ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org 569741044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org // Disallow copying and assigning. 569841044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org Locker(const Locker&); 569941044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org void operator=(const Locker&); 570043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen}; 570143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 570243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 5703fb144a0716afe7ab8bf245f2391a9e53b3db3c89fschneider@chromium.org// --- Implementation --- 570443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 570518ad94b919217ffbcd2d3159eeb5f8c588761c47ager@chromium.org 570618ad94b919217ffbcd2d3159eeb5f8c588761c47ager@chromium.orgnamespace internal { 570718ad94b919217ffbcd2d3159eeb5f8c588761c47ager@chromium.org 57081b3afd1cab9087ca3c4e585d3da77d374d65c082mstarzinger@chromium.orgconst int kApiPointerSize = sizeof(void*); // NOLINT 57091b3afd1cab9087ca3c4e585d3da77d374d65c082mstarzinger@chromium.orgconst int kApiIntSize = sizeof(int); // NOLINT 57101e2d50cf3d94ff48285da107b7a9da1ad0fc873dmachenbach@chromium.orgconst int kApiInt64Size = sizeof(int64_t); // NOLINT 571118ad94b919217ffbcd2d3159eeb5f8c588761c47ager@chromium.org 571218ad94b919217ffbcd2d3159eeb5f8c588761c47ager@chromium.org// Tag information for HeapObject. 571318ad94b919217ffbcd2d3159eeb5f8c588761c47ager@chromium.orgconst int kHeapObjectTag = 1; 571418ad94b919217ffbcd2d3159eeb5f8c588761c47ager@chromium.orgconst int kHeapObjectTagSize = 2; 571518ad94b919217ffbcd2d3159eeb5f8c588761c47ager@chromium.orgconst intptr_t kHeapObjectTagMask = (1 << kHeapObjectTagSize) - 1; 571618ad94b919217ffbcd2d3159eeb5f8c588761c47ager@chromium.org 571718ad94b919217ffbcd2d3159eeb5f8c588761c47ager@chromium.org// Tag information for Smi. 571818ad94b919217ffbcd2d3159eeb5f8c588761c47ager@chromium.orgconst int kSmiTag = 0; 571918ad94b919217ffbcd2d3159eeb5f8c588761c47ager@chromium.orgconst int kSmiTagSize = 1; 572018ad94b919217ffbcd2d3159eeb5f8c588761c47ager@chromium.orgconst intptr_t kSmiTagMask = (1 << kSmiTagSize) - 1; 572118ad94b919217ffbcd2d3159eeb5f8c588761c47ager@chromium.org 5722c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.orgtemplate <size_t ptr_size> struct SmiTagging; 57239d58c2b1c27d8b2890b9bd46e57d3842b09e0292christian.plesner.hansen@gmail.com 5724bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.orgtemplate<int kSmiShiftSize> 57254a35c5a501e5b966f895ddea8e19c3ca232cb23fdslomov@chromium.orgV8_INLINE internal::Object* IntToSmi(int value) { 5726bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.org int smi_shift_bits = kSmiTagSize + kSmiShiftSize; 57272c81ceb7f1e1ccf5f304be0646f4c1375941a7f2machenbach@chromium.org uintptr_t tagged_value = 57282c81ceb7f1e1ccf5f304be0646f4c1375941a7f2machenbach@chromium.org (static_cast<uintptr_t>(value) << smi_shift_bits) | kSmiTag; 5729bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.org return reinterpret_cast<internal::Object*>(tagged_value); 5730bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.org} 5731bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.org 57329d58c2b1c27d8b2890b9bd46e57d3842b09e0292christian.plesner.hansen@gmail.com// Smi constants for 32-bit systems. 5733c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.orgtemplate <> struct SmiTagging<4> { 5734ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.org enum { kSmiShiftSize = 0, kSmiValueSize = 31 }; 5735ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.org static int SmiShiftSize() { return kSmiShiftSize; } 5736ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.org static int SmiValueSize() { return kSmiValueSize; } 57374b0feeef5d01dbc2948080b4f69daa37e1083461machenbach@chromium.org V8_INLINE static int SmiToInt(const internal::Object* value) { 57389d58c2b1c27d8b2890b9bd46e57d3842b09e0292christian.plesner.hansen@gmail.com int shift_bits = kSmiTagSize + kSmiShiftSize; 57399d58c2b1c27d8b2890b9bd46e57d3842b09e0292christian.plesner.hansen@gmail.com // Throw away top 32 bits and shift down (requires >> to be sign extending). 57409d58c2b1c27d8b2890b9bd46e57d3842b09e0292christian.plesner.hansen@gmail.com return static_cast<int>(reinterpret_cast<intptr_t>(value)) >> shift_bits; 57419d58c2b1c27d8b2890b9bd46e57d3842b09e0292christian.plesner.hansen@gmail.com } 57424a35c5a501e5b966f895ddea8e19c3ca232cb23fdslomov@chromium.org V8_INLINE static internal::Object* IntToSmi(int value) { 5743bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.org return internal::IntToSmi<kSmiShiftSize>(value); 5744bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.org } 57454a35c5a501e5b966f895ddea8e19c3ca232cb23fdslomov@chromium.org V8_INLINE static bool IsValidSmi(intptr_t value) { 5746bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.org // To be representable as an tagged small integer, the two 5747bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.org // most-significant bits of 'value' must be either 00 or 11 due to 5748bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.org // sign-extension. To check this we add 01 to the two 5749bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.org // most-significant bits, and check if the most-significant bit is 0 5750bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.org // 5751bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.org // CAUTION: The original code below: 5752bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.org // bool result = ((value + 0x40000000) & 0x80000000) == 0; 5753bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.org // may lead to incorrect results according to the C language spec, and 5754bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.org // in fact doesn't work correctly with gcc4.1.1 in some cases: The 5755bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.org // compiler may produce undefined results in case of signed integer 5756bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.org // overflow. The computation must be done w/ unsigned ints. 5757bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.org return static_cast<uintptr_t>(value + 0x40000000U) < 0x80000000U; 5758bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.org } 57599d58c2b1c27d8b2890b9bd46e57d3842b09e0292christian.plesner.hansen@gmail.com}; 57609d58c2b1c27d8b2890b9bd46e57d3842b09e0292christian.plesner.hansen@gmail.com 57619d58c2b1c27d8b2890b9bd46e57d3842b09e0292christian.plesner.hansen@gmail.com// Smi constants for 64-bit systems. 5762c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.orgtemplate <> struct SmiTagging<8> { 5763ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.org enum { kSmiShiftSize = 31, kSmiValueSize = 32 }; 5764ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.org static int SmiShiftSize() { return kSmiShiftSize; } 5765ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.org static int SmiValueSize() { return kSmiValueSize; } 57664b0feeef5d01dbc2948080b4f69daa37e1083461machenbach@chromium.org V8_INLINE static int SmiToInt(const internal::Object* value) { 57679d58c2b1c27d8b2890b9bd46e57d3842b09e0292christian.plesner.hansen@gmail.com int shift_bits = kSmiTagSize + kSmiShiftSize; 57689d58c2b1c27d8b2890b9bd46e57d3842b09e0292christian.plesner.hansen@gmail.com // Shift down and throw away top 32 bits. 57699d58c2b1c27d8b2890b9bd46e57d3842b09e0292christian.plesner.hansen@gmail.com return static_cast<int>(reinterpret_cast<intptr_t>(value) >> shift_bits); 57709d58c2b1c27d8b2890b9bd46e57d3842b09e0292christian.plesner.hansen@gmail.com } 57714a35c5a501e5b966f895ddea8e19c3ca232cb23fdslomov@chromium.org V8_INLINE static internal::Object* IntToSmi(int value) { 5772bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.org return internal::IntToSmi<kSmiShiftSize>(value); 5773bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.org } 57744a35c5a501e5b966f895ddea8e19c3ca232cb23fdslomov@chromium.org V8_INLINE static bool IsValidSmi(intptr_t value) { 5775bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.org // To be representable as a long smi, the value must be a 32-bit integer. 5776bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.org return (value == static_cast<int32_t>(value)); 5777bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.org } 57789d58c2b1c27d8b2890b9bd46e57d3842b09e0292christian.plesner.hansen@gmail.com}; 57799d58c2b1c27d8b2890b9bd46e57d3842b09e0292christian.plesner.hansen@gmail.com 5780c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.orgtypedef SmiTagging<kApiPointerSize> PlatformSmiTagging; 5781c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.orgconst int kSmiShiftSize = PlatformSmiTagging::kSmiShiftSize; 5782c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.orgconst int kSmiValueSize = PlatformSmiTagging::kSmiValueSize; 57834a35c5a501e5b966f895ddea8e19c3ca232cb23fdslomov@chromium.orgV8_INLINE static bool SmiValuesAre31Bits() { return kSmiValueSize == 31; } 57844a35c5a501e5b966f895ddea8e19c3ca232cb23fdslomov@chromium.orgV8_INLINE static bool SmiValuesAre32Bits() { return kSmiValueSize == 32; } 578518ad94b919217ffbcd2d3159eeb5f8c588761c47ager@chromium.org 578618ad94b919217ffbcd2d3159eeb5f8c588761c47ager@chromium.org/** 578718ad94b919217ffbcd2d3159eeb5f8c588761c47ager@chromium.org * This class exports constants and functionality from within v8 that 578818ad94b919217ffbcd2d3159eeb5f8c588761c47ager@chromium.org * is necessary to implement inline functions in the v8 api. Don't 578918ad94b919217ffbcd2d3159eeb5f8c588761c47ager@chromium.org * depend on functions and constants defined here. 579018ad94b919217ffbcd2d3159eeb5f8c588761c47ager@chromium.org */ 579118ad94b919217ffbcd2d3159eeb5f8c588761c47ager@chromium.orgclass Internals { 579218ad94b919217ffbcd2d3159eeb5f8c588761c47ager@chromium.org public: 579318ad94b919217ffbcd2d3159eeb5f8c588761c47ager@chromium.org // These values match non-compiler-dependent values defined within 579418ad94b919217ffbcd2d3159eeb5f8c588761c47ager@chromium.org // the implementation of v8. 579518ad94b919217ffbcd2d3159eeb5f8c588761c47ager@chromium.org static const int kHeapObjectMapOffset = 0; 57964b0feeef5d01dbc2948080b4f69daa37e1083461machenbach@chromium.org static const int kMapInstanceTypeAndBitFieldOffset = 57974b0feeef5d01dbc2948080b4f69daa37e1083461machenbach@chromium.org 1 * kApiPointerSize + kApiIntSize; 5798efdb9d70bddd496ceb6a281dadcc065efbce37a1yangguo@chromium.org static const int kStringResourceOffset = 3 * kApiPointerSize; 5799ac6aa175ab59d65cfb7a88dbb621e1d7f1a80b8fsgjesse@chromium.org 5800fb0463312815affb1f0e9d5e351b7f9a3422e3a2svenpanne@chromium.org static const int kOddballKindOffset = 3 * kApiPointerSize; 5801ea91cc579ade536e3a08498a8157921dd4f533d1ager@chromium.org static const int kForeignAddressOffset = kApiPointerSize; 58024a6c3279070e8f133607a74c08d8c08ac394ab98erik.corry@gmail.com static const int kJSObjectHeaderSize = 3 * kApiPointerSize; 5803eeb44b681a16e45f1415dfacff0ba3dba9de5d8cyangguo@chromium.org static const int kFixedArrayHeaderSize = 2 * kApiPointerSize; 5804eeb44b681a16e45f1415dfacff0ba3dba9de5d8cyangguo@chromium.org static const int kContextHeaderSize = 2 * kApiPointerSize; 58057d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org static const int kContextEmbedderDataIndex = 95; 580618ad94b919217ffbcd2d3159eeb5f8c588761c47ager@chromium.org static const int kFullStringRepresentationMask = 0x07; 580756c14afabc547f0a8ab2e24d789c00030f8df892ulan@chromium.org static const int kStringEncodingMask = 0x4; 580882dbbabc05f6729248cef210931fe34556fd7ca0sgjesse@chromium.org static const int kExternalTwoByteRepresentationTag = 0x02; 58092c81ceb7f1e1ccf5f304be0646f4c1375941a7f2machenbach@chromium.org static const int kExternalOneByteRepresentationTag = 0x06; 581018ad94b919217ffbcd2d3159eeb5f8c588761c47ager@chromium.org 58117ff7607c2315ea91e4d13330ce14125e4bb4851amachenbach@chromium.org static const int kIsolateEmbedderDataOffset = 0 * kApiPointerSize; 58121e2d50cf3d94ff48285da107b7a9da1ad0fc873dmachenbach@chromium.org static const int kAmountOfExternalAllocatedMemoryOffset = 58131e2d50cf3d94ff48285da107b7a9da1ad0fc873dmachenbach@chromium.org 4 * kApiPointerSize; 58141e2d50cf3d94ff48285da107b7a9da1ad0fc873dmachenbach@chromium.org static const int kAmountOfExternalAllocatedMemoryAtLastGlobalGCOffset = 58151e2d50cf3d94ff48285da107b7a9da1ad0fc873dmachenbach@chromium.org kAmountOfExternalAllocatedMemoryOffset + kApiInt64Size; 58161e2d50cf3d94ff48285da107b7a9da1ad0fc873dmachenbach@chromium.org static const int kIsolateRootsOffset = 58171e2d50cf3d94ff48285da107b7a9da1ad0fc873dmachenbach@chromium.org kAmountOfExternalAllocatedMemoryAtLastGlobalGCOffset + kApiInt64Size + 58181e2d50cf3d94ff48285da107b7a9da1ad0fc873dmachenbach@chromium.org kApiPointerSize; 5819efdb9d70bddd496ceb6a281dadcc065efbce37a1yangguo@chromium.org static const int kUndefinedValueRootIndex = 5; 5820efdb9d70bddd496ceb6a281dadcc065efbce37a1yangguo@chromium.org static const int kNullValueRootIndex = 7; 5821efdb9d70bddd496ceb6a281dadcc065efbce37a1yangguo@chromium.org static const int kTrueValueRootIndex = 8; 5822efdb9d70bddd496ceb6a281dadcc065efbce37a1yangguo@chromium.org static const int kFalseValueRootIndex = 9; 58236474a1cfee1cdad45de5cc96960085e1c7daf11cmachenbach@chromium.org static const int kEmptyStringRootIndex = 164; 5824efdb9d70bddd496ceb6a281dadcc065efbce37a1yangguo@chromium.org 58251e2d50cf3d94ff48285da107b7a9da1ad0fc873dmachenbach@chromium.org // The external allocation limit should be below 256 MB on all architectures 58261e2d50cf3d94ff48285da107b7a9da1ad0fc873dmachenbach@chromium.org // to avoid that resource-constrained embedders run low on memory. 58271e2d50cf3d94ff48285da107b7a9da1ad0fc873dmachenbach@chromium.org static const int kExternalAllocationLimit = 192 * 1024 * 1024; 58281e2d50cf3d94ff48285da107b7a9da1ad0fc873dmachenbach@chromium.org 5829d16d8531698e91e9c60a7db9e0ba3c3bb15aff20mvstanton@chromium.org static const int kNodeClassIdOffset = 1 * kApiPointerSize; 5830d16d8531698e91e9c60a7db9e0ba3c3bb15aff20mvstanton@chromium.org static const int kNodeFlagsOffset = 1 * kApiPointerSize + 3; 5831d16d8531698e91e9c60a7db9e0ba3c3bb15aff20mvstanton@chromium.org static const int kNodeStateMask = 0xf; 5832d16d8531698e91e9c60a7db9e0ba3c3bb15aff20mvstanton@chromium.org static const int kNodeStateIsWeakValue = 2; 5833c16e8281e6e3e3b57e157b62d5a1ca530e23e4bfdanno@chromium.org static const int kNodeStateIsPendingValue = 3; 5834d16d8531698e91e9c60a7db9e0ba3c3bb15aff20mvstanton@chromium.org static const int kNodeStateIsNearDeathValue = 4; 583546a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org static const int kNodeIsIndependentShift = 4; 583646a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org static const int kNodeIsPartiallyDependentShift = 5; 583746a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org 583858a725587734a6889c689668fd01f0157ed749a6machenbach@chromium.org static const int kJSObjectType = 0xbc; 58395ad5acef6bd4ebc785f946d8bcc2a88b1e031827ricow@chromium.org static const int kFirstNonstringType = 0x80; 58404a9f6553038df6b893b3d3ccae351723f4cbbae7yangguo@chromium.org static const int kOddballType = 0x83; 584158a725587734a6889c689668fd01f0157ed749a6machenbach@chromium.org static const int kForeignType = 0x88; 584218ad94b919217ffbcd2d3159eeb5f8c588761c47ager@chromium.org 5843fb0463312815affb1f0e9d5e351b7f9a3422e3a2svenpanne@chromium.org static const int kUndefinedOddballKind = 5; 5844fb0463312815affb1f0e9d5e351b7f9a3422e3a2svenpanne@chromium.org static const int kNullOddballKind = 3; 5845fb0463312815affb1f0e9d5e351b7f9a3422e3a2svenpanne@chromium.org 58467ff7607c2315ea91e4d13330ce14125e4bb4851amachenbach@chromium.org static const uint32_t kNumIsolateDataSlots = 4; 58477ff7607c2315ea91e4d13330ce14125e4bb4851amachenbach@chromium.org 5848cfdf67d672b8e2cd6cc1df14c082671511745746machenbach@chromium.org V8_EXPORT static void CheckInitializedImpl(v8::Isolate* isolate); 58494a35c5a501e5b966f895ddea8e19c3ca232cb23fdslomov@chromium.org V8_INLINE static void CheckInitialized(v8::Isolate* isolate) { 58501510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org#ifdef V8_ENABLE_CHECKS 585193a47f4837f2137c8d8349250fd8e91da3108126jkummerow@chromium.org CheckInitializedImpl(isolate); 58521510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org#endif 585393a47f4837f2137c8d8349250fd8e91da3108126jkummerow@chromium.org } 58541510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org 58554b0feeef5d01dbc2948080b4f69daa37e1083461machenbach@chromium.org V8_INLINE static bool HasHeapObjectTag(const internal::Object* value) { 585618ad94b919217ffbcd2d3159eeb5f8c588761c47ager@chromium.org return ((reinterpret_cast<intptr_t>(value) & kHeapObjectTagMask) == 585718ad94b919217ffbcd2d3159eeb5f8c588761c47ager@chromium.org kHeapObjectTag); 585818ad94b919217ffbcd2d3159eeb5f8c588761c47ager@chromium.org } 5859c514574143c1bf74d4fb6e7dccb175fe9ff2f5d3sgjesse@chromium.org 58604b0feeef5d01dbc2948080b4f69daa37e1083461machenbach@chromium.org V8_INLINE static int SmiValue(const internal::Object* value) { 5861c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org return PlatformSmiTagging::SmiToInt(value); 58629d58c2b1c27d8b2890b9bd46e57d3842b09e0292christian.plesner.hansen@gmail.com } 58639d58c2b1c27d8b2890b9bd46e57d3842b09e0292christian.plesner.hansen@gmail.com 58644a35c5a501e5b966f895ddea8e19c3ca232cb23fdslomov@chromium.org V8_INLINE static internal::Object* IntToSmi(int value) { 5865bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.org return PlatformSmiTagging::IntToSmi(value); 5866bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.org } 5867bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.org 58684a35c5a501e5b966f895ddea8e19c3ca232cb23fdslomov@chromium.org V8_INLINE static bool IsValidSmi(intptr_t value) { 5869bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.org return PlatformSmiTagging::IsValidSmi(value); 5870bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.org } 5871bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.org 58724b0feeef5d01dbc2948080b4f69daa37e1083461machenbach@chromium.org V8_INLINE static int GetInstanceType(const internal::Object* obj) { 58739d58c2b1c27d8b2890b9bd46e57d3842b09e0292christian.plesner.hansen@gmail.com typedef internal::Object O; 58749d58c2b1c27d8b2890b9bd46e57d3842b09e0292christian.plesner.hansen@gmail.com O* map = ReadField<O*>(obj, kHeapObjectMapOffset); 58754b0feeef5d01dbc2948080b4f69daa37e1083461machenbach@chromium.org // Map::InstanceType is defined so that it will always be loaded into 58764b0feeef5d01dbc2948080b4f69daa37e1083461machenbach@chromium.org // the LS 8 bits of one 16-bit word, regardless of endianess. 58774b0feeef5d01dbc2948080b4f69daa37e1083461machenbach@chromium.org return ReadField<uint16_t>(map, kMapInstanceTypeAndBitFieldOffset) & 0xff; 58789d58c2b1c27d8b2890b9bd46e57d3842b09e0292christian.plesner.hansen@gmail.com } 58799d58c2b1c27d8b2890b9bd46e57d3842b09e0292christian.plesner.hansen@gmail.com 58804b0feeef5d01dbc2948080b4f69daa37e1083461machenbach@chromium.org V8_INLINE static int GetOddballKind(const internal::Object* obj) { 5881fb0463312815affb1f0e9d5e351b7f9a3422e3a2svenpanne@chromium.org typedef internal::Object O; 5882fb0463312815affb1f0e9d5e351b7f9a3422e3a2svenpanne@chromium.org return SmiValue(ReadField<O*>(obj, kOddballKindOffset)); 5883fb0463312815affb1f0e9d5e351b7f9a3422e3a2svenpanne@chromium.org } 5884fb0463312815affb1f0e9d5e351b7f9a3422e3a2svenpanne@chromium.org 58854a35c5a501e5b966f895ddea8e19c3ca232cb23fdslomov@chromium.org V8_INLINE static bool IsExternalTwoByteString(int instance_type) { 588618ad94b919217ffbcd2d3159eeb5f8c588761c47ager@chromium.org int representation = (instance_type & kFullStringRepresentationMask); 588718ad94b919217ffbcd2d3159eeb5f8c588761c47ager@chromium.org return representation == kExternalTwoByteRepresentationTag; 588818ad94b919217ffbcd2d3159eeb5f8c588761c47ager@chromium.org } 588918ad94b919217ffbcd2d3159eeb5f8c588761c47ager@chromium.org 58904a35c5a501e5b966f895ddea8e19c3ca232cb23fdslomov@chromium.org V8_INLINE static uint8_t GetNodeFlag(internal::Object** obj, int shift) { 589146a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org uint8_t* addr = reinterpret_cast<uint8_t*>(obj) + kNodeFlagsOffset; 5892594006017e46d82ed7146611dc12c20e3c509c7ddanno@chromium.org return *addr & static_cast<uint8_t>(1U << shift); 589346a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org } 589446a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org 58954a35c5a501e5b966f895ddea8e19c3ca232cb23fdslomov@chromium.org V8_INLINE static void UpdateNodeFlag(internal::Object** obj, 58964a35c5a501e5b966f895ddea8e19c3ca232cb23fdslomov@chromium.org bool value, int shift) { 589746a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org uint8_t* addr = reinterpret_cast<uint8_t*>(obj) + kNodeFlagsOffset; 58982c81ceb7f1e1ccf5f304be0646f4c1375941a7f2machenbach@chromium.org uint8_t mask = static_cast<uint8_t>(1U << shift); 5899594006017e46d82ed7146611dc12c20e3c509c7ddanno@chromium.org *addr = static_cast<uint8_t>((*addr & ~mask) | (value << shift)); 590046a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org } 590146a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org 59024a35c5a501e5b966f895ddea8e19c3ca232cb23fdslomov@chromium.org V8_INLINE static uint8_t GetNodeState(internal::Object** obj) { 5903d16d8531698e91e9c60a7db9e0ba3c3bb15aff20mvstanton@chromium.org uint8_t* addr = reinterpret_cast<uint8_t*>(obj) + kNodeFlagsOffset; 5904d16d8531698e91e9c60a7db9e0ba3c3bb15aff20mvstanton@chromium.org return *addr & kNodeStateMask; 5905d16d8531698e91e9c60a7db9e0ba3c3bb15aff20mvstanton@chromium.org } 5906d16d8531698e91e9c60a7db9e0ba3c3bb15aff20mvstanton@chromium.org 59074a35c5a501e5b966f895ddea8e19c3ca232cb23fdslomov@chromium.org V8_INLINE static void UpdateNodeState(internal::Object** obj, 59084a35c5a501e5b966f895ddea8e19c3ca232cb23fdslomov@chromium.org uint8_t value) { 5909d16d8531698e91e9c60a7db9e0ba3c3bb15aff20mvstanton@chromium.org uint8_t* addr = reinterpret_cast<uint8_t*>(obj) + kNodeFlagsOffset; 5910594006017e46d82ed7146611dc12c20e3c509c7ddanno@chromium.org *addr = static_cast<uint8_t>((*addr & ~kNodeStateMask) | value); 5911d16d8531698e91e9c60a7db9e0ba3c3bb15aff20mvstanton@chromium.org } 5912d16d8531698e91e9c60a7db9e0ba3c3bb15aff20mvstanton@chromium.org 59134b0feeef5d01dbc2948080b4f69daa37e1083461machenbach@chromium.org V8_INLINE static void SetEmbedderData(v8::Isolate* isolate, 59147ff7607c2315ea91e4d13330ce14125e4bb4851amachenbach@chromium.org uint32_t slot, 59154b0feeef5d01dbc2948080b4f69daa37e1083461machenbach@chromium.org void* data) { 59167ff7607c2315ea91e4d13330ce14125e4bb4851amachenbach@chromium.org uint8_t *addr = reinterpret_cast<uint8_t *>(isolate) + 59177ff7607c2315ea91e4d13330ce14125e4bb4851amachenbach@chromium.org kIsolateEmbedderDataOffset + slot * kApiPointerSize; 5918efdb9d70bddd496ceb6a281dadcc065efbce37a1yangguo@chromium.org *reinterpret_cast<void**>(addr) = data; 5919efdb9d70bddd496ceb6a281dadcc065efbce37a1yangguo@chromium.org } 5920efdb9d70bddd496ceb6a281dadcc065efbce37a1yangguo@chromium.org 59214b0feeef5d01dbc2948080b4f69daa37e1083461machenbach@chromium.org V8_INLINE static void* GetEmbedderData(const v8::Isolate* isolate, 59224b0feeef5d01dbc2948080b4f69daa37e1083461machenbach@chromium.org uint32_t slot) { 59234b0feeef5d01dbc2948080b4f69daa37e1083461machenbach@chromium.org const uint8_t* addr = reinterpret_cast<const uint8_t*>(isolate) + 59247ff7607c2315ea91e4d13330ce14125e4bb4851amachenbach@chromium.org kIsolateEmbedderDataOffset + slot * kApiPointerSize; 59254b0feeef5d01dbc2948080b4f69daa37e1083461machenbach@chromium.org return *reinterpret_cast<void* const*>(addr); 5926efdb9d70bddd496ceb6a281dadcc065efbce37a1yangguo@chromium.org } 5927efdb9d70bddd496ceb6a281dadcc065efbce37a1yangguo@chromium.org 59284a35c5a501e5b966f895ddea8e19c3ca232cb23fdslomov@chromium.org V8_INLINE static internal::Object** GetRoot(v8::Isolate* isolate, 59294a35c5a501e5b966f895ddea8e19c3ca232cb23fdslomov@chromium.org int index) { 5930efdb9d70bddd496ceb6a281dadcc065efbce37a1yangguo@chromium.org uint8_t* addr = reinterpret_cast<uint8_t*>(isolate) + kIsolateRootsOffset; 5931efdb9d70bddd496ceb6a281dadcc065efbce37a1yangguo@chromium.org return reinterpret_cast<internal::Object**>(addr + index * kApiPointerSize); 5932efdb9d70bddd496ceb6a281dadcc065efbce37a1yangguo@chromium.org } 5933efdb9d70bddd496ceb6a281dadcc065efbce37a1yangguo@chromium.org 59347e6132b924829c353864933f29124419916db550machenbach@chromium.org template <typename T> 59354b0feeef5d01dbc2948080b4f69daa37e1083461machenbach@chromium.org V8_INLINE static T ReadField(const internal::Object* ptr, int offset) { 59364b0feeef5d01dbc2948080b4f69daa37e1083461machenbach@chromium.org const uint8_t* addr = 59374b0feeef5d01dbc2948080b4f69daa37e1083461machenbach@chromium.org reinterpret_cast<const uint8_t*>(ptr) + offset - kHeapObjectTag; 59384b0feeef5d01dbc2948080b4f69daa37e1083461machenbach@chromium.org return *reinterpret_cast<const T*>(addr); 593918ad94b919217ffbcd2d3159eeb5f8c588761c47ager@chromium.org } 5940ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org 5941eeb44b681a16e45f1415dfacff0ba3dba9de5d8cyangguo@chromium.org template <typename T> 59424b0feeef5d01dbc2948080b4f69daa37e1083461machenbach@chromium.org V8_INLINE static T ReadEmbedderData(const v8::Context* context, int index) { 5943eeb44b681a16e45f1415dfacff0ba3dba9de5d8cyangguo@chromium.org typedef internal::Object O; 5944eeb44b681a16e45f1415dfacff0ba3dba9de5d8cyangguo@chromium.org typedef internal::Internals I; 59454b0feeef5d01dbc2948080b4f69daa37e1083461machenbach@chromium.org O* ctx = *reinterpret_cast<O* const*>(context); 5946eeb44b681a16e45f1415dfacff0ba3dba9de5d8cyangguo@chromium.org int embedder_data_offset = I::kContextHeaderSize + 5947eeb44b681a16e45f1415dfacff0ba3dba9de5d8cyangguo@chromium.org (internal::kApiPointerSize * I::kContextEmbedderDataIndex); 5948eeb44b681a16e45f1415dfacff0ba3dba9de5d8cyangguo@chromium.org O* embedder_data = I::ReadField<O*>(ctx, embedder_data_offset); 5949eeb44b681a16e45f1415dfacff0ba3dba9de5d8cyangguo@chromium.org int value_offset = 5950eeb44b681a16e45f1415dfacff0ba3dba9de5d8cyangguo@chromium.org I::kFixedArrayHeaderSize + (internal::kApiPointerSize * index); 5951eeb44b681a16e45f1415dfacff0ba3dba9de5d8cyangguo@chromium.org return I::ReadField<T>(embedder_data, value_offset); 5952eeb44b681a16e45f1415dfacff0ba3dba9de5d8cyangguo@chromium.org } 595318ad94b919217ffbcd2d3159eeb5f8c588761c47ager@chromium.org}; 595418ad94b919217ffbcd2d3159eeb5f8c588761c47ager@chromium.org 5955f0ac72dfa39ec827de605aafc57d4834237aa7f3whesse@chromium.org} // namespace internal 595618ad94b919217ffbcd2d3159eeb5f8c588761c47ager@chromium.org 595718ad94b919217ffbcd2d3159eeb5f8c588761c47ager@chromium.org 595843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansentemplate <class T> 595943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenLocal<T>::Local() : Handle<T>() { } 596043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 596143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 596243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansentemplate <class T> 5963d16d8531698e91e9c60a7db9e0ba3c3bb15aff20mvstanton@chromium.orgLocal<T> Local<T>::New(Isolate* isolate, Handle<T> that) { 596457ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org return New(isolate, that.val_); 596557ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org} 596657ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org 596757ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.orgtemplate <class T> 5968c86e8c29eea534916f0d6a2a285b65a86d1b3b67machenbach@chromium.orgLocal<T> Local<T>::New(Isolate* isolate, const PersistentBase<T>& that) { 596957ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org return New(isolate, that.val_); 597057ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org} 597157ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org 597257ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.orgtemplate <class T> 597357ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.orgHandle<T> Handle<T>::New(Isolate* isolate, T* that) { 597457ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org if (that == NULL) return Handle<T>(); 597557ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org T* that_ptr = that; 597657ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org internal::Object** p = reinterpret_cast<internal::Object**>(that_ptr); 597757ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org return Handle<T>(reinterpret_cast<T*>(HandleScope::CreateHandle( 597857ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org reinterpret_cast<internal::Isolate*>(isolate), *p))); 597957ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org} 598057ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org 598157ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org 598257ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.orgtemplate <class T> 598357ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.orgLocal<T> Local<T>::New(Isolate* isolate, T* that) { 598457ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org if (that == NULL) return Local<T>(); 598557ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org T* that_ptr = that; 598632280cf2786219b2d9a668f7f00778fb59ac40b3mstarzinger@chromium.org internal::Object** p = reinterpret_cast<internal::Object**>(that_ptr); 598732280cf2786219b2d9a668f7f00778fb59ac40b3mstarzinger@chromium.org return Local<T>(reinterpret_cast<T*>(HandleScope::CreateHandle( 598832280cf2786219b2d9a668f7f00778fb59ac40b3mstarzinger@chromium.org reinterpret_cast<internal::Isolate*>(isolate), *p))); 598932280cf2786219b2d9a668f7f00778fb59ac40b3mstarzinger@chromium.org} 599032280cf2786219b2d9a668f7f00778fb59ac40b3mstarzinger@chromium.org 599132280cf2786219b2d9a668f7f00778fb59ac40b3mstarzinger@chromium.org 5992594006017e46d82ed7146611dc12c20e3c509c7ddanno@chromium.orgtemplate<class T> 59931e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.orgtemplate<class S> 59941e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.orgvoid Eternal<T>::Set(Isolate* isolate, Local<S> handle) { 59951e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org TYPE_CHECK(T, S); 5996dc94e19484d1700cb0ec22365444223e49a3ac1ejkummerow@chromium.org V8::Eternalize(isolate, reinterpret_cast<Value*>(*handle), &this->index_); 5997594006017e46d82ed7146611dc12c20e3c509c7ddanno@chromium.org} 5998594006017e46d82ed7146611dc12c20e3c509c7ddanno@chromium.org 5999594006017e46d82ed7146611dc12c20e3c509c7ddanno@chromium.org 6000594006017e46d82ed7146611dc12c20e3c509c7ddanno@chromium.orgtemplate<class T> 60011e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.orgLocal<T> Eternal<T>::Get(Isolate* isolate) { 6002dc94e19484d1700cb0ec22365444223e49a3ac1ejkummerow@chromium.org return Local<T>(reinterpret_cast<T*>(*V8::GetEternal(isolate, index_))); 6003594006017e46d82ed7146611dc12c20e3c509c7ddanno@chromium.org} 6004594006017e46d82ed7146611dc12c20e3c509c7ddanno@chromium.org 6005594006017e46d82ed7146611dc12c20e3c509c7ddanno@chromium.org 6006c86e8c29eea534916f0d6a2a285b65a86d1b3b67machenbach@chromium.orgtemplate <class T> 6007c86e8c29eea534916f0d6a2a285b65a86d1b3b67machenbach@chromium.orgT* PersistentBase<T>::New(Isolate* isolate, T* that) { 6008f95d4b920abb640ab0986d138ad559a7d3b91d04danno@chromium.org if (that == NULL) return NULL; 600957ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org internal::Object** p = reinterpret_cast<internal::Object**>(that); 6010f95d4b920abb640ab0986d138ad559a7d3b91d04danno@chromium.org return reinterpret_cast<T*>( 6011d16d8531698e91e9c60a7db9e0ba3c3bb15aff20mvstanton@chromium.org V8::GlobalizeReference(reinterpret_cast<internal::Isolate*>(isolate), 6012f95d4b920abb640ab0986d138ad559a7d3b91d04danno@chromium.org p)); 601343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} 601443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 601543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 6016639bac0c5319f96e1bbe3399fb7f7f37344928bddslomov@chromium.orgtemplate <class T, class M> 6017639bac0c5319f96e1bbe3399fb7f7f37344928bddslomov@chromium.orgtemplate <class S, class M2> 6018639bac0c5319f96e1bbe3399fb7f7f37344928bddslomov@chromium.orgvoid Persistent<T, M>::Copy(const Persistent<S, M2>& that) { 6019639bac0c5319f96e1bbe3399fb7f7f37344928bddslomov@chromium.org TYPE_CHECK(T, S); 6020c86e8c29eea534916f0d6a2a285b65a86d1b3b67machenbach@chromium.org this->Reset(); 6021639bac0c5319f96e1bbe3399fb7f7f37344928bddslomov@chromium.org if (that.IsEmpty()) return; 6022639bac0c5319f96e1bbe3399fb7f7f37344928bddslomov@chromium.org internal::Object** p = reinterpret_cast<internal::Object**>(that.val_); 6023639bac0c5319f96e1bbe3399fb7f7f37344928bddslomov@chromium.org this->val_ = reinterpret_cast<T*>(V8::CopyPersistent(p)); 6024639bac0c5319f96e1bbe3399fb7f7f37344928bddslomov@chromium.org M::Copy(that, this); 6025639bac0c5319f96e1bbe3399fb7f7f37344928bddslomov@chromium.org} 6026639bac0c5319f96e1bbe3399fb7f7f37344928bddslomov@chromium.org 6027639bac0c5319f96e1bbe3399fb7f7f37344928bddslomov@chromium.org 6028c86e8c29eea534916f0d6a2a285b65a86d1b3b67machenbach@chromium.orgtemplate <class T> 6029c86e8c29eea534916f0d6a2a285b65a86d1b3b67machenbach@chromium.orgbool PersistentBase<T>::IsIndependent() const { 603046a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org typedef internal::Internals I; 6031e4ee6de0de64744d55b63da83156827c989c7099verwaest@chromium.org if (this->IsEmpty()) return false; 603257ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org return I::GetNodeFlag(reinterpret_cast<internal::Object**>(this->val_), 603346a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org I::kNodeIsIndependentShift); 6034e4ee6de0de64744d55b63da83156827c989c7099verwaest@chromium.org} 6035e4ee6de0de64744d55b63da83156827c989c7099verwaest@chromium.org 6036e4ee6de0de64744d55b63da83156827c989c7099verwaest@chromium.org 6037c86e8c29eea534916f0d6a2a285b65a86d1b3b67machenbach@chromium.orgtemplate <class T> 6038c86e8c29eea534916f0d6a2a285b65a86d1b3b67machenbach@chromium.orgbool PersistentBase<T>::IsNearDeath() const { 6039d16d8531698e91e9c60a7db9e0ba3c3bb15aff20mvstanton@chromium.org typedef internal::Internals I; 604043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen if (this->IsEmpty()) return false; 6041c16e8281e6e3e3b57e157b62d5a1ca530e23e4bfdanno@chromium.org uint8_t node_state = 6042c16e8281e6e3e3b57e157b62d5a1ca530e23e4bfdanno@chromium.org I::GetNodeState(reinterpret_cast<internal::Object**>(this->val_)); 6043c16e8281e6e3e3b57e157b62d5a1ca530e23e4bfdanno@chromium.org return node_state == I::kNodeStateIsNearDeathValue || 6044c16e8281e6e3e3b57e157b62d5a1ca530e23e4bfdanno@chromium.org node_state == I::kNodeStateIsPendingValue; 604543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} 604643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 604743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 6048c86e8c29eea534916f0d6a2a285b65a86d1b3b67machenbach@chromium.orgtemplate <class T> 6049c86e8c29eea534916f0d6a2a285b65a86d1b3b67machenbach@chromium.orgbool PersistentBase<T>::IsWeak() const { 6050d16d8531698e91e9c60a7db9e0ba3c3bb15aff20mvstanton@chromium.org typedef internal::Internals I; 605132280cf2786219b2d9a668f7f00778fb59ac40b3mstarzinger@chromium.org if (this->IsEmpty()) return false; 605257ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org return I::GetNodeState(reinterpret_cast<internal::Object**>(this->val_)) == 6053d16d8531698e91e9c60a7db9e0ba3c3bb15aff20mvstanton@chromium.org I::kNodeStateIsWeakValue; 605432280cf2786219b2d9a668f7f00778fb59ac40b3mstarzinger@chromium.org} 605532280cf2786219b2d9a668f7f00778fb59ac40b3mstarzinger@chromium.org 605632280cf2786219b2d9a668f7f00778fb59ac40b3mstarzinger@chromium.org 6057c86e8c29eea534916f0d6a2a285b65a86d1b3b67machenbach@chromium.orgtemplate <class T> 6058c86e8c29eea534916f0d6a2a285b65a86d1b3b67machenbach@chromium.orgvoid PersistentBase<T>::Reset() { 6059a53e8e03bcb23716d1025de362626f90f00da892svenpanne@chromium.org if (this->IsEmpty()) return; 6060a53e8e03bcb23716d1025de362626f90f00da892svenpanne@chromium.org V8::DisposeGlobal(reinterpret_cast<internal::Object**>(this->val_)); 6061a53e8e03bcb23716d1025de362626f90f00da892svenpanne@chromium.org val_ = 0; 606243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} 606343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 606443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 6065c86e8c29eea534916f0d6a2a285b65a86d1b3b67machenbach@chromium.orgtemplate <class T> 6066639bac0c5319f96e1bbe3399fb7f7f37344928bddslomov@chromium.orgtemplate <class S> 6067c86e8c29eea534916f0d6a2a285b65a86d1b3b67machenbach@chromium.orgvoid PersistentBase<T>::Reset(Isolate* isolate, const Handle<S>& other) { 6068639bac0c5319f96e1bbe3399fb7f7f37344928bddslomov@chromium.org TYPE_CHECK(T, S); 6069639bac0c5319f96e1bbe3399fb7f7f37344928bddslomov@chromium.org Reset(); 6070639bac0c5319f96e1bbe3399fb7f7f37344928bddslomov@chromium.org if (other.IsEmpty()) return; 6071639bac0c5319f96e1bbe3399fb7f7f37344928bddslomov@chromium.org this->val_ = New(isolate, other.val_); 6072639bac0c5319f96e1bbe3399fb7f7f37344928bddslomov@chromium.org} 6073639bac0c5319f96e1bbe3399fb7f7f37344928bddslomov@chromium.org 6074639bac0c5319f96e1bbe3399fb7f7f37344928bddslomov@chromium.org 6075c86e8c29eea534916f0d6a2a285b65a86d1b3b67machenbach@chromium.orgtemplate <class T> 6076c86e8c29eea534916f0d6a2a285b65a86d1b3b67machenbach@chromium.orgtemplate <class S> 6077c86e8c29eea534916f0d6a2a285b65a86d1b3b67machenbach@chromium.orgvoid PersistentBase<T>::Reset(Isolate* isolate, 6078c86e8c29eea534916f0d6a2a285b65a86d1b3b67machenbach@chromium.org const PersistentBase<S>& other) { 6079639bac0c5319f96e1bbe3399fb7f7f37344928bddslomov@chromium.org TYPE_CHECK(T, S); 6080639bac0c5319f96e1bbe3399fb7f7f37344928bddslomov@chromium.org Reset(); 6081639bac0c5319f96e1bbe3399fb7f7f37344928bddslomov@chromium.org if (other.IsEmpty()) return; 6082639bac0c5319f96e1bbe3399fb7f7f37344928bddslomov@chromium.org this->val_ = New(isolate, other.val_); 6083639bac0c5319f96e1bbe3399fb7f7f37344928bddslomov@chromium.org} 6084639bac0c5319f96e1bbe3399fb7f7f37344928bddslomov@chromium.org 6085639bac0c5319f96e1bbe3399fb7f7f37344928bddslomov@chromium.org 6086c86e8c29eea534916f0d6a2a285b65a86d1b3b67machenbach@chromium.orgtemplate <class T> 608757ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.orgtemplate <typename S, typename P> 6088c86e8c29eea534916f0d6a2a285b65a86d1b3b67machenbach@chromium.orgvoid PersistentBase<T>::SetWeak( 6089639bac0c5319f96e1bbe3399fb7f7f37344928bddslomov@chromium.org P* parameter, 6090639bac0c5319f96e1bbe3399fb7f7f37344928bddslomov@chromium.org typename WeakCallbackData<S, P>::Callback callback) { 609157ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org TYPE_CHECK(S, T); 6092639bac0c5319f96e1bbe3399fb7f7f37344928bddslomov@chromium.org typedef typename WeakCallbackData<Value, void>::Callback Callback; 6093b99c75496e05b4cd58815ada1e39e6029130d11crossberg@chromium.org V8::MakeWeak(reinterpret_cast<internal::Object**>(this->val_), 6094639bac0c5319f96e1bbe3399fb7f7f37344928bddslomov@chromium.org parameter, 60954f99be9ff2091451687891a05d99cc31990de709hpayer@chromium.org reinterpret_cast<Callback>(callback)); 609643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} 609743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 609857ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org 6099c86e8c29eea534916f0d6a2a285b65a86d1b3b67machenbach@chromium.orgtemplate <class T> 610057ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.orgtemplate <typename P> 6101c86e8c29eea534916f0d6a2a285b65a86d1b3b67machenbach@chromium.orgvoid PersistentBase<T>::SetWeak( 6102639bac0c5319f96e1bbe3399fb7f7f37344928bddslomov@chromium.org P* parameter, 6103639bac0c5319f96e1bbe3399fb7f7f37344928bddslomov@chromium.org typename WeakCallbackData<T, P>::Callback callback) { 6104639bac0c5319f96e1bbe3399fb7f7f37344928bddslomov@chromium.org SetWeak<T, P>(parameter, callback); 610557ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org} 610657ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org 610757ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org 6108c86e8c29eea534916f0d6a2a285b65a86d1b3b67machenbach@chromium.orgtemplate <class T> 6109381adef828187e237e8758ab730dee1c2834a0b3machenbach@chromium.orgtemplate<typename P> 6110381adef828187e237e8758ab730dee1c2834a0b3machenbach@chromium.orgP* PersistentBase<T>::ClearWeak() { 6111381adef828187e237e8758ab730dee1c2834a0b3machenbach@chromium.org return reinterpret_cast<P*>( 6112381adef828187e237e8758ab730dee1c2834a0b3machenbach@chromium.org V8::ClearWeak(reinterpret_cast<internal::Object**>(this->val_))); 6113d16d8531698e91e9c60a7db9e0ba3c3bb15aff20mvstanton@chromium.org} 6114d16d8531698e91e9c60a7db9e0ba3c3bb15aff20mvstanton@chromium.org 611543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 6116c86e8c29eea534916f0d6a2a285b65a86d1b3b67machenbach@chromium.orgtemplate <class T> 6117c86e8c29eea534916f0d6a2a285b65a86d1b3b67machenbach@chromium.orgvoid PersistentBase<T>::MarkIndependent() { 611846a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org typedef internal::Internals I; 611946a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org if (this->IsEmpty()) return; 612057ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org I::UpdateNodeFlag(reinterpret_cast<internal::Object**>(this->val_), 6121d16d8531698e91e9c60a7db9e0ba3c3bb15aff20mvstanton@chromium.org true, 6122d16d8531698e91e9c60a7db9e0ba3c3bb15aff20mvstanton@chromium.org I::kNodeIsIndependentShift); 6123e4ac3ef2f6fa9300bc78c5a4cb7d4cb66ac6e83dmvstanton@chromium.org} 6124e4ac3ef2f6fa9300bc78c5a4cb7d4cb66ac6e83dmvstanton@chromium.org 6125e4ac3ef2f6fa9300bc78c5a4cb7d4cb66ac6e83dmvstanton@chromium.org 6126c86e8c29eea534916f0d6a2a285b65a86d1b3b67machenbach@chromium.orgtemplate <class T> 6127c86e8c29eea534916f0d6a2a285b65a86d1b3b67machenbach@chromium.orgvoid PersistentBase<T>::MarkPartiallyDependent() { 612846a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org typedef internal::Internals I; 612946a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org if (this->IsEmpty()) return; 613057ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org I::UpdateNodeFlag(reinterpret_cast<internal::Object**>(this->val_), 6131d16d8531698e91e9c60a7db9e0ba3c3bb15aff20mvstanton@chromium.org true, 6132d16d8531698e91e9c60a7db9e0ba3c3bb15aff20mvstanton@chromium.org I::kNodeIsPartiallyDependentShift); 6133e4ac3ef2f6fa9300bc78c5a4cb7d4cb66ac6e83dmvstanton@chromium.org} 6134e4ac3ef2f6fa9300bc78c5a4cb7d4cb66ac6e83dmvstanton@chromium.org 6135906e2fb760f52fe6e75b744b1ea42576ea5b2c29ulan@chromium.org 6136639bac0c5319f96e1bbe3399fb7f7f37344928bddslomov@chromium.orgtemplate <class T, class M> 6137639bac0c5319f96e1bbe3399fb7f7f37344928bddslomov@chromium.orgT* Persistent<T, M>::ClearAndLeak() { 6138906e2fb760f52fe6e75b744b1ea42576ea5b2c29ulan@chromium.org T* old; 6139c86e8c29eea534916f0d6a2a285b65a86d1b3b67machenbach@chromium.org old = this->val_; 6140c86e8c29eea534916f0d6a2a285b65a86d1b3b67machenbach@chromium.org this->val_ = NULL; 6141906e2fb760f52fe6e75b744b1ea42576ea5b2c29ulan@chromium.org return old; 6142906e2fb760f52fe6e75b744b1ea42576ea5b2c29ulan@chromium.org} 6143906e2fb760f52fe6e75b744b1ea42576ea5b2c29ulan@chromium.org 6144906e2fb760f52fe6e75b744b1ea42576ea5b2c29ulan@chromium.org 6145c86e8c29eea534916f0d6a2a285b65a86d1b3b67machenbach@chromium.orgtemplate <class T> 6146c86e8c29eea534916f0d6a2a285b65a86d1b3b67machenbach@chromium.orgvoid PersistentBase<T>::SetWrapperClassId(uint16_t class_id) { 614746a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org typedef internal::Internals I; 6148d16d8531698e91e9c60a7db9e0ba3c3bb15aff20mvstanton@chromium.org if (this->IsEmpty()) return; 614957ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org internal::Object** obj = reinterpret_cast<internal::Object**>(this->val_); 615046a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org uint8_t* addr = reinterpret_cast<uint8_t*>(obj) + I::kNodeClassIdOffset; 615146a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org *reinterpret_cast<uint16_t*>(addr) = class_id; 6152b08986cb66c3f6687247cb6da186c1e73057e399whesse@chromium.org} 615369ea3965ef6e0d3f020a402cf7e6b96b9cb651aekmillikin@chromium.org 6154d16d8531698e91e9c60a7db9e0ba3c3bb15aff20mvstanton@chromium.org 6155c86e8c29eea534916f0d6a2a285b65a86d1b3b67machenbach@chromium.orgtemplate <class T> 6156c86e8c29eea534916f0d6a2a285b65a86d1b3b67machenbach@chromium.orguint16_t PersistentBase<T>::WrapperClassId() const { 615746a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org typedef internal::Internals I; 6158d16d8531698e91e9c60a7db9e0ba3c3bb15aff20mvstanton@chromium.org if (this->IsEmpty()) return 0; 615957ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org internal::Object** obj = reinterpret_cast<internal::Object**>(this->val_); 616046a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org uint8_t* addr = reinterpret_cast<uint8_t*>(obj) + I::kNodeClassIdOffset; 616146a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org return *reinterpret_cast<uint16_t*>(addr); 616289e18f5599cb4cd462cb1ed324addd7388fb4d60rossberg@chromium.org} 616389e18f5599cb4cd462cb1ed324addd7388fb4d60rossberg@chromium.org 6164bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.org 6165bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.orgtemplate<typename T> 6166bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.orgReturnValue<T>::ReturnValue(internal::Object** slot) : value_(slot) {} 6167bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.org 6168bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.orgtemplate<typename T> 6169c118402c43ae44cf9255d36608a44886c98537c5jkummerow@chromium.orgtemplate<typename S> 6170c118402c43ae44cf9255d36608a44886c98537c5jkummerow@chromium.orgvoid ReturnValue<T>::Set(const Persistent<S>& handle) { 6171c118402c43ae44cf9255d36608a44886c98537c5jkummerow@chromium.org TYPE_CHECK(T, S); 6172b99c75496e05b4cd58815ada1e39e6029130d11crossberg@chromium.org if (V8_UNLIKELY(handle.IsEmpty())) { 61738a00e82ec5c3dbedfd3dcb56996c7df2452da4a5verwaest@chromium.org *value_ = GetDefaultValue(); 6174b99c75496e05b4cd58815ada1e39e6029130d11crossberg@chromium.org } else { 6175b99c75496e05b4cd58815ada1e39e6029130d11crossberg@chromium.org *value_ = *reinterpret_cast<internal::Object**>(*handle); 6176b99c75496e05b4cd58815ada1e39e6029130d11crossberg@chromium.org } 6177bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.org} 6178bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.org 6179bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.orgtemplate<typename T> 6180c118402c43ae44cf9255d36608a44886c98537c5jkummerow@chromium.orgtemplate<typename S> 6181c118402c43ae44cf9255d36608a44886c98537c5jkummerow@chromium.orgvoid ReturnValue<T>::Set(const Handle<S> handle) { 6182c118402c43ae44cf9255d36608a44886c98537c5jkummerow@chromium.org TYPE_CHECK(T, S); 6183b99c75496e05b4cd58815ada1e39e6029130d11crossberg@chromium.org if (V8_UNLIKELY(handle.IsEmpty())) { 61848a00e82ec5c3dbedfd3dcb56996c7df2452da4a5verwaest@chromium.org *value_ = GetDefaultValue(); 6185b99c75496e05b4cd58815ada1e39e6029130d11crossberg@chromium.org } else { 6186b99c75496e05b4cd58815ada1e39e6029130d11crossberg@chromium.org *value_ = *reinterpret_cast<internal::Object**>(*handle); 6187b99c75496e05b4cd58815ada1e39e6029130d11crossberg@chromium.org } 6188bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.org} 6189bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.org 6190bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.orgtemplate<typename T> 619153ad17558c81e6099cef4442237d7da643a5becfsvenpanne@chromium.orgvoid ReturnValue<T>::Set(double i) { 6192b752d4061aaeb7d6a6ec368607871789d54b0207dslomov@chromium.org TYPE_CHECK(T, Number); 619353ad17558c81e6099cef4442237d7da643a5becfsvenpanne@chromium.org Set(Number::New(GetIsolate(), i)); 6194bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.org} 6195bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.org 6196bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.orgtemplate<typename T> 619753ad17558c81e6099cef4442237d7da643a5becfsvenpanne@chromium.orgvoid ReturnValue<T>::Set(int32_t i) { 6198b752d4061aaeb7d6a6ec368607871789d54b0207dslomov@chromium.org TYPE_CHECK(T, Integer); 6199bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.org typedef internal::Internals I; 6200bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.org if (V8_LIKELY(I::IsValidSmi(i))) { 6201bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.org *value_ = I::IntToSmi(i); 6202bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.org return; 6203bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.org } 62040f13e74b7310d8b14f19c6b93b36ff95059f97f6ulan@chromium.org Set(Integer::New(GetIsolate(), i)); 6205bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.org} 6206bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.org 6207bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.orgtemplate<typename T> 620853ad17558c81e6099cef4442237d7da643a5becfsvenpanne@chromium.orgvoid ReturnValue<T>::Set(uint32_t i) { 6209b752d4061aaeb7d6a6ec368607871789d54b0207dslomov@chromium.org TYPE_CHECK(T, Integer); 62101fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org // Can't simply use INT32_MAX here for whatever reason. 6211594006017e46d82ed7146611dc12c20e3c509c7ddanno@chromium.org bool fits_into_int32_t = (i & (1U << 31)) == 0; 62121fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org if (V8_LIKELY(fits_into_int32_t)) { 62131fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org Set(static_cast<int32_t>(i)); 6214bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.org return; 6215bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.org } 62160f13e74b7310d8b14f19c6b93b36ff95059f97f6ulan@chromium.org Set(Integer::NewFromUnsigned(GetIsolate(), i)); 6217bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.org} 6218bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.org 6219bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.orgtemplate<typename T> 622053ad17558c81e6099cef4442237d7da643a5becfsvenpanne@chromium.orgvoid ReturnValue<T>::Set(bool value) { 6221b752d4061aaeb7d6a6ec368607871789d54b0207dslomov@chromium.org TYPE_CHECK(T, Boolean); 622253ad17558c81e6099cef4442237d7da643a5becfsvenpanne@chromium.org typedef internal::Internals I; 622353ad17558c81e6099cef4442237d7da643a5becfsvenpanne@chromium.org int root_index; 6224bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.org if (value) { 622553ad17558c81e6099cef4442237d7da643a5becfsvenpanne@chromium.org root_index = I::kTrueValueRootIndex; 6226bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.org } else { 622753ad17558c81e6099cef4442237d7da643a5becfsvenpanne@chromium.org root_index = I::kFalseValueRootIndex; 6228bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.org } 622953ad17558c81e6099cef4442237d7da643a5becfsvenpanne@chromium.org *value_ = *I::GetRoot(GetIsolate(), root_index); 6230bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.org} 6231bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.org 6232bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.orgtemplate<typename T> 623353ad17558c81e6099cef4442237d7da643a5becfsvenpanne@chromium.orgvoid ReturnValue<T>::SetNull() { 6234b752d4061aaeb7d6a6ec368607871789d54b0207dslomov@chromium.org TYPE_CHECK(T, Primitive); 6235bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.org typedef internal::Internals I; 623653ad17558c81e6099cef4442237d7da643a5becfsvenpanne@chromium.org *value_ = *I::GetRoot(GetIsolate(), I::kNullValueRootIndex); 6237bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.org} 6238bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.org 6239bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.orgtemplate<typename T> 624053ad17558c81e6099cef4442237d7da643a5becfsvenpanne@chromium.orgvoid ReturnValue<T>::SetUndefined() { 6241b752d4061aaeb7d6a6ec368607871789d54b0207dslomov@chromium.org TYPE_CHECK(T, Primitive); 6242bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.org typedef internal::Internals I; 624353ad17558c81e6099cef4442237d7da643a5becfsvenpanne@chromium.org *value_ = *I::GetRoot(GetIsolate(), I::kUndefinedValueRootIndex); 6244bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.org} 6245bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.org 6246bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.orgtemplate<typename T> 6247837a67edd9afdbfe1b59482b41693f59c48846ffulan@chromium.orgvoid ReturnValue<T>::SetEmptyString() { 6248b752d4061aaeb7d6a6ec368607871789d54b0207dslomov@chromium.org TYPE_CHECK(T, String); 6249837a67edd9afdbfe1b59482b41693f59c48846ffulan@chromium.org typedef internal::Internals I; 6250837a67edd9afdbfe1b59482b41693f59c48846ffulan@chromium.org *value_ = *I::GetRoot(GetIsolate(), I::kEmptyStringRootIndex); 6251837a67edd9afdbfe1b59482b41693f59c48846ffulan@chromium.org} 6252837a67edd9afdbfe1b59482b41693f59c48846ffulan@chromium.org 6253837a67edd9afdbfe1b59482b41693f59c48846ffulan@chromium.orgtemplate<typename T> 625453ad17558c81e6099cef4442237d7da643a5becfsvenpanne@chromium.orgIsolate* ReturnValue<T>::GetIsolate() { 62558a00e82ec5c3dbedfd3dcb56996c7df2452da4a5verwaest@chromium.org // Isolate is always the pointer below the default value on the stack. 62568a00e82ec5c3dbedfd3dcb56996c7df2452da4a5verwaest@chromium.org return *reinterpret_cast<Isolate**>(&value_[-2]); 62578a00e82ec5c3dbedfd3dcb56996c7df2452da4a5verwaest@chromium.org} 62588a00e82ec5c3dbedfd3dcb56996c7df2452da4a5verwaest@chromium.org 62598a00e82ec5c3dbedfd3dcb56996c7df2452da4a5verwaest@chromium.orgtemplate<typename T> 62603c3c8d733702cb2b41471efa5eead1faf5b5711bmachenbach@chromium.orgtemplate<typename S> 62613c3c8d733702cb2b41471efa5eead1faf5b5711bmachenbach@chromium.orgvoid ReturnValue<T>::Set(S* whatever) { 62623c3c8d733702cb2b41471efa5eead1faf5b5711bmachenbach@chromium.org // Uncompilable to prevent inadvertent misuse. 62633c3c8d733702cb2b41471efa5eead1faf5b5711bmachenbach@chromium.org TYPE_CHECK(S*, Primitive); 62643c3c8d733702cb2b41471efa5eead1faf5b5711bmachenbach@chromium.org} 62653c3c8d733702cb2b41471efa5eead1faf5b5711bmachenbach@chromium.org 62663c3c8d733702cb2b41471efa5eead1faf5b5711bmachenbach@chromium.orgtemplate<typename T> 62678a00e82ec5c3dbedfd3dcb56996c7df2452da4a5verwaest@chromium.orginternal::Object* ReturnValue<T>::GetDefaultValue() { 62688a00e82ec5c3dbedfd3dcb56996c7df2452da4a5verwaest@chromium.org // Default value is always the pointer below value_ on the stack. 62698a00e82ec5c3dbedfd3dcb56996c7df2452da4a5verwaest@chromium.org return value_[-1]; 6270bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.org} 6271bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.org 6272bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.org 6273bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.orgtemplate<typename T> 6274bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.orgFunctionCallbackInfo<T>::FunctionCallbackInfo(internal::Object** implicit_args, 6275bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.org internal::Object** values, 6276bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.org int length, 6277bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.org bool is_construct_call) 6278e03fb64ef23331755b7986d2560bc4c00ba3e67bfschneider@chromium.org : implicit_args_(implicit_args), 6279e03fb64ef23331755b7986d2560bc4c00ba3e67bfschneider@chromium.org values_(values), 6280e03fb64ef23331755b7986d2560bc4c00ba3e67bfschneider@chromium.org length_(length), 6281e03fb64ef23331755b7986d2560bc4c00ba3e67bfschneider@chromium.org is_construct_call_(is_construct_call) { } 628269ea3965ef6e0d3f020a402cf7e6b96b9cb651aekmillikin@chromium.org 628369ea3965ef6e0d3f020a402cf7e6b96b9cb651aekmillikin@chromium.org 6284bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.orgtemplate<typename T> 6285bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.orgLocal<Value> FunctionCallbackInfo<T>::operator[](int i) const { 6286cfdf67d672b8e2cd6cc1df14c082671511745746machenbach@chromium.org if (i < 0 || length_ <= i) return Local<Value>(*Undefined(GetIsolate())); 628743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen return Local<Value>(reinterpret_cast<Value*>(values_ - i)); 628843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} 628943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 629043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 6291bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.orgtemplate<typename T> 6292bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.orgLocal<Function> FunctionCallbackInfo<T>::Callee() const { 6293e03fb64ef23331755b7986d2560bc4c00ba3e67bfschneider@chromium.org return Local<Function>(reinterpret_cast<Function*>( 6294e03fb64ef23331755b7986d2560bc4c00ba3e67bfschneider@chromium.org &implicit_args_[kCalleeIndex])); 629543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} 629643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 629743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 6298bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.orgtemplate<typename T> 6299bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.orgLocal<Object> FunctionCallbackInfo<T>::This() const { 630043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen return Local<Object>(reinterpret_cast<Object*>(values_ + 1)); 630143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} 630243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 630343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 6304bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.orgtemplate<typename T> 6305bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.orgLocal<Object> FunctionCallbackInfo<T>::Holder() const { 6306e03fb64ef23331755b7986d2560bc4c00ba3e67bfschneider@chromium.org return Local<Object>(reinterpret_cast<Object*>( 6307e03fb64ef23331755b7986d2560bc4c00ba3e67bfschneider@chromium.org &implicit_args_[kHolderIndex])); 630843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} 630943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 631043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 6311bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.orgtemplate<typename T> 6312bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.orgLocal<Value> FunctionCallbackInfo<T>::Data() const { 6313e03fb64ef23331755b7986d2560bc4c00ba3e67bfschneider@chromium.org return Local<Value>(reinterpret_cast<Value*>(&implicit_args_[kDataIndex])); 631443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} 631543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 631643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 6317bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.orgtemplate<typename T> 6318bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.orgIsolate* FunctionCallbackInfo<T>::GetIsolate() const { 631928faa982749c4aa9c090939453dea14bb118f613jkummerow@chromium.org return *reinterpret_cast<Isolate**>(&implicit_args_[kIsolateIndex]); 632028faa982749c4aa9c090939453dea14bb118f613jkummerow@chromium.org} 632128faa982749c4aa9c090939453dea14bb118f613jkummerow@chromium.org 632228faa982749c4aa9c090939453dea14bb118f613jkummerow@chromium.org 6323bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.orgtemplate<typename T> 6324bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.orgReturnValue<T> FunctionCallbackInfo<T>::GetReturnValue() const { 6325bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.org return ReturnValue<T>(&implicit_args_[kReturnValueIndex]); 6326bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.org} 6327bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.org 6328bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.org 6329bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.orgtemplate<typename T> 6330bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.orgbool FunctionCallbackInfo<T>::IsConstructCall() const { 633143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen return is_construct_call_; 633243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} 633343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 633443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 6335bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.orgtemplate<typename T> 6336bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.orgint FunctionCallbackInfo<T>::Length() const { 633743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen return length_; 633843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} 633943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 634043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 63415a8ca6c70c6fc9716f18f6223c98d1fef5752cf6kasperl@chromium.orgHandle<Value> ScriptOrigin::ResourceName() const { 634243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen return resource_name_; 634343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} 634443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 634543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 63465a8ca6c70c6fc9716f18f6223c98d1fef5752cf6kasperl@chromium.orgHandle<Integer> ScriptOrigin::ResourceLineOffset() const { 634743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen return resource_line_offset_; 634843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} 634943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 635043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 63515a8ca6c70c6fc9716f18f6223c98d1fef5752cf6kasperl@chromium.orgHandle<Integer> ScriptOrigin::ResourceColumnOffset() const { 635243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen return resource_column_offset_; 635343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} 635443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 6355f15d0cdbef11a212e108432465f014a7d3c3aa12machenbach@chromium.org 6356d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.orgHandle<Boolean> ScriptOrigin::ResourceIsSharedCrossOrigin() const { 6357d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.org return resource_is_shared_cross_origin_; 6358d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.org} 6359d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.org 636043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 6361f15d0cdbef11a212e108432465f014a7d3c3aa12machenbach@chromium.orgHandle<Integer> ScriptOrigin::ScriptID() const { 6362f15d0cdbef11a212e108432465f014a7d3c3aa12machenbach@chromium.org return script_id_; 6363f15d0cdbef11a212e108432465f014a7d3c3aa12machenbach@chromium.org} 6364f15d0cdbef11a212e108432465f014a7d3c3aa12machenbach@chromium.org 6365f15d0cdbef11a212e108432465f014a7d3c3aa12machenbach@chromium.org 6366a221880197f38ff22d942851060daffa5d036bdfmachenbach@chromium.orgScriptCompiler::Source::Source(Local<String> string, const ScriptOrigin& origin, 6367a221880197f38ff22d942851060daffa5d036bdfmachenbach@chromium.org CachedData* data) 6368a221880197f38ff22d942851060daffa5d036bdfmachenbach@chromium.org : source_string(string), 6369a221880197f38ff22d942851060daffa5d036bdfmachenbach@chromium.org resource_name(origin.ResourceName()), 6370a221880197f38ff22d942851060daffa5d036bdfmachenbach@chromium.org resource_line_offset(origin.ResourceLineOffset()), 6371a221880197f38ff22d942851060daffa5d036bdfmachenbach@chromium.org resource_column_offset(origin.ResourceColumnOffset()), 6372a221880197f38ff22d942851060daffa5d036bdfmachenbach@chromium.org resource_is_shared_cross_origin(origin.ResourceIsSharedCrossOrigin()), 6373a221880197f38ff22d942851060daffa5d036bdfmachenbach@chromium.org cached_data(data) {} 6374a221880197f38ff22d942851060daffa5d036bdfmachenbach@chromium.org 6375a221880197f38ff22d942851060daffa5d036bdfmachenbach@chromium.org 6376a221880197f38ff22d942851060daffa5d036bdfmachenbach@chromium.orgScriptCompiler::Source::Source(Local<String> string, 6377a221880197f38ff22d942851060daffa5d036bdfmachenbach@chromium.org CachedData* data) 6378a221880197f38ff22d942851060daffa5d036bdfmachenbach@chromium.org : source_string(string), cached_data(data) {} 6379a221880197f38ff22d942851060daffa5d036bdfmachenbach@chromium.org 6380a221880197f38ff22d942851060daffa5d036bdfmachenbach@chromium.org 6381a221880197f38ff22d942851060daffa5d036bdfmachenbach@chromium.orgScriptCompiler::Source::~Source() { 6382a221880197f38ff22d942851060daffa5d036bdfmachenbach@chromium.org delete cached_data; 6383a221880197f38ff22d942851060daffa5d036bdfmachenbach@chromium.org} 6384a221880197f38ff22d942851060daffa5d036bdfmachenbach@chromium.org 6385a221880197f38ff22d942851060daffa5d036bdfmachenbach@chromium.org 6386a221880197f38ff22d942851060daffa5d036bdfmachenbach@chromium.orgconst ScriptCompiler::CachedData* ScriptCompiler::Source::GetCachedData() 6387a221880197f38ff22d942851060daffa5d036bdfmachenbach@chromium.org const { 6388a221880197f38ff22d942851060daffa5d036bdfmachenbach@chromium.org return cached_data; 6389a221880197f38ff22d942851060daffa5d036bdfmachenbach@chromium.org} 6390a221880197f38ff22d942851060daffa5d036bdfmachenbach@chromium.org 6391a221880197f38ff22d942851060daffa5d036bdfmachenbach@chromium.org 639237be408adf363bbe682921a4a690752fa0ec33femachenbach@chromium.orgHandle<Boolean> Boolean::New(Isolate* isolate, bool value) { 6393cfdf67d672b8e2cd6cc1df14c082671511745746machenbach@chromium.org return value ? True(isolate) : False(isolate); 639443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} 639543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 639643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 639737be408adf363bbe682921a4a690752fa0ec33femachenbach@chromium.orgvoid Template::Set(Isolate* isolate, const char* name, v8::Handle<Data> value) { 639837be408adf363bbe682921a4a690752fa0ec33femachenbach@chromium.org Set(v8::String::NewFromUtf8(isolate, name), value); 639937be408adf363bbe682921a4a690752fa0ec33femachenbach@chromium.org} 640037be408adf363bbe682921a4a690752fa0ec33femachenbach@chromium.org 640137be408adf363bbe682921a4a690752fa0ec33femachenbach@chromium.org 640218ad94b919217ffbcd2d3159eeb5f8c588761c47ager@chromium.orgLocal<Value> Object::GetInternalField(int index) { 640318ad94b919217ffbcd2d3159eeb5f8c588761c47ager@chromium.org#ifndef V8_ENABLE_CHECKS 640418ad94b919217ffbcd2d3159eeb5f8c588761c47ager@chromium.org typedef internal::Object O; 6405cfdf67d672b8e2cd6cc1df14c082671511745746machenbach@chromium.org typedef internal::HeapObject HO; 640618ad94b919217ffbcd2d3159eeb5f8c588761c47ager@chromium.org typedef internal::Internals I; 640718ad94b919217ffbcd2d3159eeb5f8c588761c47ager@chromium.org O* obj = *reinterpret_cast<O**>(this); 6408eeb44b681a16e45f1415dfacff0ba3dba9de5d8cyangguo@chromium.org // Fast path: If the object is a plain JSObject, which is the common case, we 6409eeb44b681a16e45f1415dfacff0ba3dba9de5d8cyangguo@chromium.org // know where to find the internal fields and can return the value directly. 64109d58c2b1c27d8b2890b9bd46e57d3842b09e0292christian.plesner.hansen@gmail.com if (I::GetInstanceType(obj) == I::kJSObjectType) { 64114a6c3279070e8f133607a74c08d8c08ac394ab98erik.corry@gmail.com int offset = I::kJSObjectHeaderSize + (internal::kApiPointerSize * index); 641218ad94b919217ffbcd2d3159eeb5f8c588761c47ager@chromium.org O* value = I::ReadField<O*>(obj, offset); 6413cfdf67d672b8e2cd6cc1df14c082671511745746machenbach@chromium.org O** result = HandleScope::CreateHandle(reinterpret_cast<HO*>(obj), value); 641418ad94b919217ffbcd2d3159eeb5f8c588761c47ager@chromium.org return Local<Value>(reinterpret_cast<Value*>(result)); 641518ad94b919217ffbcd2d3159eeb5f8c588761c47ager@chromium.org } 641618ad94b919217ffbcd2d3159eeb5f8c588761c47ager@chromium.org#endif 6417eeb44b681a16e45f1415dfacff0ba3dba9de5d8cyangguo@chromium.org return SlowGetInternalField(index); 641818ad94b919217ffbcd2d3159eeb5f8c588761c47ager@chromium.org} 641918ad94b919217ffbcd2d3159eeb5f8c588761c47ager@chromium.org 642018ad94b919217ffbcd2d3159eeb5f8c588761c47ager@chromium.org 6421eeb44b681a16e45f1415dfacff0ba3dba9de5d8cyangguo@chromium.orgvoid* Object::GetAlignedPointerFromInternalField(int index) { 6422eeb44b681a16e45f1415dfacff0ba3dba9de5d8cyangguo@chromium.org#ifndef V8_ENABLE_CHECKS 64239d58c2b1c27d8b2890b9bd46e57d3842b09e0292christian.plesner.hansen@gmail.com typedef internal::Object O; 64249d58c2b1c27d8b2890b9bd46e57d3842b09e0292christian.plesner.hansen@gmail.com typedef internal::Internals I; 64259d58c2b1c27d8b2890b9bd46e57d3842b09e0292christian.plesner.hansen@gmail.com O* obj = *reinterpret_cast<O**>(this); 6426eeb44b681a16e45f1415dfacff0ba3dba9de5d8cyangguo@chromium.org // Fast path: If the object is a plain JSObject, which is the common case, we 6427eeb44b681a16e45f1415dfacff0ba3dba9de5d8cyangguo@chromium.org // know where to find the internal fields and can return the value directly. 6428ca29dd85fa02449d17188f5a6ff9a7cdf2ad9680danno@chromium.org if (V8_LIKELY(I::GetInstanceType(obj) == I::kJSObjectType)) { 64294a6c3279070e8f133607a74c08d8c08ac394ab98erik.corry@gmail.com int offset = I::kJSObjectHeaderSize + (internal::kApiPointerSize * index); 6430eeb44b681a16e45f1415dfacff0ba3dba9de5d8cyangguo@chromium.org return I::ReadField<void*>(obj, offset); 64319d58c2b1c27d8b2890b9bd46e57d3842b09e0292christian.plesner.hansen@gmail.com } 6432eeb44b681a16e45f1415dfacff0ba3dba9de5d8cyangguo@chromium.org#endif 6433eeb44b681a16e45f1415dfacff0ba3dba9de5d8cyangguo@chromium.org return SlowGetAlignedPointerFromInternalField(index); 643418ad94b919217ffbcd2d3159eeb5f8c588761c47ager@chromium.org} 643518ad94b919217ffbcd2d3159eeb5f8c588761c47ager@chromium.org 643618ad94b919217ffbcd2d3159eeb5f8c588761c47ager@chromium.org 643718ad94b919217ffbcd2d3159eeb5f8c588761c47ager@chromium.orgString* String::Cast(v8::Value* value) { 643818ad94b919217ffbcd2d3159eeb5f8c588761c47ager@chromium.org#ifdef V8_ENABLE_CHECKS 643918ad94b919217ffbcd2d3159eeb5f8c588761c47ager@chromium.org CheckCast(value); 644018ad94b919217ffbcd2d3159eeb5f8c588761c47ager@chromium.org#endif 644118ad94b919217ffbcd2d3159eeb5f8c588761c47ager@chromium.org return static_cast<String*>(value); 644218ad94b919217ffbcd2d3159eeb5f8c588761c47ager@chromium.org} 644318ad94b919217ffbcd2d3159eeb5f8c588761c47ager@chromium.org 644418ad94b919217ffbcd2d3159eeb5f8c588761c47ager@chromium.org 6445efdb9d70bddd496ceb6a281dadcc065efbce37a1yangguo@chromium.orgLocal<String> String::Empty(Isolate* isolate) { 6446efdb9d70bddd496ceb6a281dadcc065efbce37a1yangguo@chromium.org typedef internal::Object* S; 6447efdb9d70bddd496ceb6a281dadcc065efbce37a1yangguo@chromium.org typedef internal::Internals I; 64481510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org I::CheckInitialized(isolate); 64494a9f6553038df6b893b3d3ccae351723f4cbbae7yangguo@chromium.org S* slot = I::GetRoot(isolate, I::kEmptyStringRootIndex); 6450efdb9d70bddd496ceb6a281dadcc065efbce37a1yangguo@chromium.org return Local<String>(reinterpret_cast<String*>(slot)); 6451efdb9d70bddd496ceb6a281dadcc065efbce37a1yangguo@chromium.org} 6452efdb9d70bddd496ceb6a281dadcc065efbce37a1yangguo@chromium.org 6453efdb9d70bddd496ceb6a281dadcc065efbce37a1yangguo@chromium.org 645418ad94b919217ffbcd2d3159eeb5f8c588761c47ager@chromium.orgString::ExternalStringResource* String::GetExternalStringResource() const { 645518ad94b919217ffbcd2d3159eeb5f8c588761c47ager@chromium.org typedef internal::Object O; 645618ad94b919217ffbcd2d3159eeb5f8c588761c47ager@chromium.org typedef internal::Internals I; 645708e7569a10f8edbb47b8fe70a6e160a4e0c9cd30machenbach@chromium.org O* obj = *reinterpret_cast<O* const*>(this); 645818ad94b919217ffbcd2d3159eeb5f8c588761c47ager@chromium.org String::ExternalStringResource* result; 64599d58c2b1c27d8b2890b9bd46e57d3842b09e0292christian.plesner.hansen@gmail.com if (I::IsExternalTwoByteString(I::GetInstanceType(obj))) { 646018ad94b919217ffbcd2d3159eeb5f8c588761c47ager@chromium.org void* value = I::ReadField<void*>(obj, I::kStringResourceOffset); 646118ad94b919217ffbcd2d3159eeb5f8c588761c47ager@chromium.org result = reinterpret_cast<String::ExternalStringResource*>(value); 646218ad94b919217ffbcd2d3159eeb5f8c588761c47ager@chromium.org } else { 646318ad94b919217ffbcd2d3159eeb5f8c588761c47ager@chromium.org result = NULL; 646418ad94b919217ffbcd2d3159eeb5f8c588761c47ager@chromium.org } 646518ad94b919217ffbcd2d3159eeb5f8c588761c47ager@chromium.org#ifdef V8_ENABLE_CHECKS 646618ad94b919217ffbcd2d3159eeb5f8c588761c47ager@chromium.org VerifyExternalStringResource(result); 646718ad94b919217ffbcd2d3159eeb5f8c588761c47ager@chromium.org#endif 646818ad94b919217ffbcd2d3159eeb5f8c588761c47ager@chromium.org return result; 646918ad94b919217ffbcd2d3159eeb5f8c588761c47ager@chromium.org} 647018ad94b919217ffbcd2d3159eeb5f8c588761c47ager@chromium.org 647118ad94b919217ffbcd2d3159eeb5f8c588761c47ager@chromium.org 647256c14afabc547f0a8ab2e24d789c00030f8df892ulan@chromium.orgString::ExternalStringResourceBase* String::GetExternalStringResourceBase( 647356c14afabc547f0a8ab2e24d789c00030f8df892ulan@chromium.org String::Encoding* encoding_out) const { 647456c14afabc547f0a8ab2e24d789c00030f8df892ulan@chromium.org typedef internal::Object O; 647556c14afabc547f0a8ab2e24d789c00030f8df892ulan@chromium.org typedef internal::Internals I; 647608e7569a10f8edbb47b8fe70a6e160a4e0c9cd30machenbach@chromium.org O* obj = *reinterpret_cast<O* const*>(this); 647756c14afabc547f0a8ab2e24d789c00030f8df892ulan@chromium.org int type = I::GetInstanceType(obj) & I::kFullStringRepresentationMask; 647856c14afabc547f0a8ab2e24d789c00030f8df892ulan@chromium.org *encoding_out = static_cast<Encoding>(type & I::kStringEncodingMask); 647956c14afabc547f0a8ab2e24d789c00030f8df892ulan@chromium.org ExternalStringResourceBase* resource = NULL; 64802c81ceb7f1e1ccf5f304be0646f4c1375941a7f2machenbach@chromium.org if (type == I::kExternalOneByteRepresentationTag || 648156c14afabc547f0a8ab2e24d789c00030f8df892ulan@chromium.org type == I::kExternalTwoByteRepresentationTag) { 648256c14afabc547f0a8ab2e24d789c00030f8df892ulan@chromium.org void* value = I::ReadField<void*>(obj, I::kStringResourceOffset); 648356c14afabc547f0a8ab2e24d789c00030f8df892ulan@chromium.org resource = static_cast<ExternalStringResourceBase*>(value); 648456c14afabc547f0a8ab2e24d789c00030f8df892ulan@chromium.org } 648556c14afabc547f0a8ab2e24d789c00030f8df892ulan@chromium.org#ifdef V8_ENABLE_CHECKS 648656c14afabc547f0a8ab2e24d789c00030f8df892ulan@chromium.org VerifyExternalStringResourceBase(resource, *encoding_out); 648756c14afabc547f0a8ab2e24d789c00030f8df892ulan@chromium.org#endif 648856c14afabc547f0a8ab2e24d789c00030f8df892ulan@chromium.org return resource; 648956c14afabc547f0a8ab2e24d789c00030f8df892ulan@chromium.org} 649056c14afabc547f0a8ab2e24d789c00030f8df892ulan@chromium.org 649156c14afabc547f0a8ab2e24d789c00030f8df892ulan@chromium.org 6492fb0463312815affb1f0e9d5e351b7f9a3422e3a2svenpanne@chromium.orgbool Value::IsUndefined() const { 6493fb0463312815affb1f0e9d5e351b7f9a3422e3a2svenpanne@chromium.org#ifdef V8_ENABLE_CHECKS 6494fb0463312815affb1f0e9d5e351b7f9a3422e3a2svenpanne@chromium.org return FullIsUndefined(); 6495fb0463312815affb1f0e9d5e351b7f9a3422e3a2svenpanne@chromium.org#else 6496fb0463312815affb1f0e9d5e351b7f9a3422e3a2svenpanne@chromium.org return QuickIsUndefined(); 6497fb0463312815affb1f0e9d5e351b7f9a3422e3a2svenpanne@chromium.org#endif 6498fb0463312815affb1f0e9d5e351b7f9a3422e3a2svenpanne@chromium.org} 6499fb0463312815affb1f0e9d5e351b7f9a3422e3a2svenpanne@chromium.org 6500fb0463312815affb1f0e9d5e351b7f9a3422e3a2svenpanne@chromium.orgbool Value::QuickIsUndefined() const { 6501fb0463312815affb1f0e9d5e351b7f9a3422e3a2svenpanne@chromium.org typedef internal::Object O; 6502fb0463312815affb1f0e9d5e351b7f9a3422e3a2svenpanne@chromium.org typedef internal::Internals I; 650308e7569a10f8edbb47b8fe70a6e160a4e0c9cd30machenbach@chromium.org O* obj = *reinterpret_cast<O* const*>(this); 6504fb0463312815affb1f0e9d5e351b7f9a3422e3a2svenpanne@chromium.org if (!I::HasHeapObjectTag(obj)) return false; 6505fb0463312815affb1f0e9d5e351b7f9a3422e3a2svenpanne@chromium.org if (I::GetInstanceType(obj) != I::kOddballType) return false; 6506fb0463312815affb1f0e9d5e351b7f9a3422e3a2svenpanne@chromium.org return (I::GetOddballKind(obj) == I::kUndefinedOddballKind); 6507fb0463312815affb1f0e9d5e351b7f9a3422e3a2svenpanne@chromium.org} 6508fb0463312815affb1f0e9d5e351b7f9a3422e3a2svenpanne@chromium.org 6509fb0463312815affb1f0e9d5e351b7f9a3422e3a2svenpanne@chromium.org 6510fb0463312815affb1f0e9d5e351b7f9a3422e3a2svenpanne@chromium.orgbool Value::IsNull() const { 6511fb0463312815affb1f0e9d5e351b7f9a3422e3a2svenpanne@chromium.org#ifdef V8_ENABLE_CHECKS 6512fb0463312815affb1f0e9d5e351b7f9a3422e3a2svenpanne@chromium.org return FullIsNull(); 6513fb0463312815affb1f0e9d5e351b7f9a3422e3a2svenpanne@chromium.org#else 6514fb0463312815affb1f0e9d5e351b7f9a3422e3a2svenpanne@chromium.org return QuickIsNull(); 6515fb0463312815affb1f0e9d5e351b7f9a3422e3a2svenpanne@chromium.org#endif 6516fb0463312815affb1f0e9d5e351b7f9a3422e3a2svenpanne@chromium.org} 6517fb0463312815affb1f0e9d5e351b7f9a3422e3a2svenpanne@chromium.org 6518fb0463312815affb1f0e9d5e351b7f9a3422e3a2svenpanne@chromium.orgbool Value::QuickIsNull() const { 6519fb0463312815affb1f0e9d5e351b7f9a3422e3a2svenpanne@chromium.org typedef internal::Object O; 6520fb0463312815affb1f0e9d5e351b7f9a3422e3a2svenpanne@chromium.org typedef internal::Internals I; 652108e7569a10f8edbb47b8fe70a6e160a4e0c9cd30machenbach@chromium.org O* obj = *reinterpret_cast<O* const*>(this); 6522fb0463312815affb1f0e9d5e351b7f9a3422e3a2svenpanne@chromium.org if (!I::HasHeapObjectTag(obj)) return false; 6523fb0463312815affb1f0e9d5e351b7f9a3422e3a2svenpanne@chromium.org if (I::GetInstanceType(obj) != I::kOddballType) return false; 6524fb0463312815affb1f0e9d5e351b7f9a3422e3a2svenpanne@chromium.org return (I::GetOddballKind(obj) == I::kNullOddballKind); 6525fb0463312815affb1f0e9d5e351b7f9a3422e3a2svenpanne@chromium.org} 6526fb0463312815affb1f0e9d5e351b7f9a3422e3a2svenpanne@chromium.org 6527fb0463312815affb1f0e9d5e351b7f9a3422e3a2svenpanne@chromium.org 652818ad94b919217ffbcd2d3159eeb5f8c588761c47ager@chromium.orgbool Value::IsString() const { 652918ad94b919217ffbcd2d3159eeb5f8c588761c47ager@chromium.org#ifdef V8_ENABLE_CHECKS 653018ad94b919217ffbcd2d3159eeb5f8c588761c47ager@chromium.org return FullIsString(); 653118ad94b919217ffbcd2d3159eeb5f8c588761c47ager@chromium.org#else 653218ad94b919217ffbcd2d3159eeb5f8c588761c47ager@chromium.org return QuickIsString(); 653318ad94b919217ffbcd2d3159eeb5f8c588761c47ager@chromium.org#endif 653418ad94b919217ffbcd2d3159eeb5f8c588761c47ager@chromium.org} 653518ad94b919217ffbcd2d3159eeb5f8c588761c47ager@chromium.org 653618ad94b919217ffbcd2d3159eeb5f8c588761c47ager@chromium.orgbool Value::QuickIsString() const { 653718ad94b919217ffbcd2d3159eeb5f8c588761c47ager@chromium.org typedef internal::Object O; 653818ad94b919217ffbcd2d3159eeb5f8c588761c47ager@chromium.org typedef internal::Internals I; 653908e7569a10f8edbb47b8fe70a6e160a4e0c9cd30machenbach@chromium.org O* obj = *reinterpret_cast<O* const*>(this); 654018ad94b919217ffbcd2d3159eeb5f8c588761c47ager@chromium.org if (!I::HasHeapObjectTag(obj)) return false; 65419d58c2b1c27d8b2890b9bd46e57d3842b09e0292christian.plesner.hansen@gmail.com return (I::GetInstanceType(obj) < I::kFirstNonstringType); 654218ad94b919217ffbcd2d3159eeb5f8c588761c47ager@chromium.org} 654318ad94b919217ffbcd2d3159eeb5f8c588761c47ager@chromium.org 654418ad94b919217ffbcd2d3159eeb5f8c588761c47ager@chromium.org 65451fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.orgtemplate <class T> Value* Value::Cast(T* value) { 65461fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org return static_cast<Value*>(value); 65471fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org} 65481fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org 65491fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org 6550e2a8937454723a720c81acc3f9e4162b18999b43machenbach@chromium.orgName* Name::Cast(v8::Value* value) { 6551e2a8937454723a720c81acc3f9e4162b18999b43machenbach@chromium.org#ifdef V8_ENABLE_CHECKS 6552e2a8937454723a720c81acc3f9e4162b18999b43machenbach@chromium.org CheckCast(value); 6553e2a8937454723a720c81acc3f9e4162b18999b43machenbach@chromium.org#endif 6554e2a8937454723a720c81acc3f9e4162b18999b43machenbach@chromium.org return static_cast<Name*>(value); 6555e2a8937454723a720c81acc3f9e4162b18999b43machenbach@chromium.org} 6556e2a8937454723a720c81acc3f9e4162b18999b43machenbach@chromium.org 6557e2a8937454723a720c81acc3f9e4162b18999b43machenbach@chromium.org 6558e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.orgSymbol* Symbol::Cast(v8::Value* value) { 6559e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org#ifdef V8_ENABLE_CHECKS 6560e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org CheckCast(value); 6561e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org#endif 6562e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org return static_cast<Symbol*>(value); 6563e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org} 6564e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org 6565e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org 656618ad94b919217ffbcd2d3159eeb5f8c588761c47ager@chromium.orgNumber* Number::Cast(v8::Value* value) { 656718ad94b919217ffbcd2d3159eeb5f8c588761c47ager@chromium.org#ifdef V8_ENABLE_CHECKS 656818ad94b919217ffbcd2d3159eeb5f8c588761c47ager@chromium.org CheckCast(value); 656918ad94b919217ffbcd2d3159eeb5f8c588761c47ager@chromium.org#endif 657018ad94b919217ffbcd2d3159eeb5f8c588761c47ager@chromium.org return static_cast<Number*>(value); 657118ad94b919217ffbcd2d3159eeb5f8c588761c47ager@chromium.org} 657218ad94b919217ffbcd2d3159eeb5f8c588761c47ager@chromium.org 657318ad94b919217ffbcd2d3159eeb5f8c588761c47ager@chromium.org 657418ad94b919217ffbcd2d3159eeb5f8c588761c47ager@chromium.orgInteger* Integer::Cast(v8::Value* value) { 657518ad94b919217ffbcd2d3159eeb5f8c588761c47ager@chromium.org#ifdef V8_ENABLE_CHECKS 657618ad94b919217ffbcd2d3159eeb5f8c588761c47ager@chromium.org CheckCast(value); 657718ad94b919217ffbcd2d3159eeb5f8c588761c47ager@chromium.org#endif 657818ad94b919217ffbcd2d3159eeb5f8c588761c47ager@chromium.org return static_cast<Integer*>(value); 657918ad94b919217ffbcd2d3159eeb5f8c588761c47ager@chromium.org} 658018ad94b919217ffbcd2d3159eeb5f8c588761c47ager@chromium.org 658118ad94b919217ffbcd2d3159eeb5f8c588761c47ager@chromium.org 658218ad94b919217ffbcd2d3159eeb5f8c588761c47ager@chromium.orgDate* Date::Cast(v8::Value* value) { 658318ad94b919217ffbcd2d3159eeb5f8c588761c47ager@chromium.org#ifdef V8_ENABLE_CHECKS 658418ad94b919217ffbcd2d3159eeb5f8c588761c47ager@chromium.org CheckCast(value); 658518ad94b919217ffbcd2d3159eeb5f8c588761c47ager@chromium.org#endif 658618ad94b919217ffbcd2d3159eeb5f8c588761c47ager@chromium.org return static_cast<Date*>(value); 658718ad94b919217ffbcd2d3159eeb5f8c588761c47ager@chromium.org} 658818ad94b919217ffbcd2d3159eeb5f8c588761c47ager@chromium.org 658918ad94b919217ffbcd2d3159eeb5f8c588761c47ager@chromium.org 659084bcc559ac20fb04f806e97d28a314b20b58fd60svenpanne@chromium.orgStringObject* StringObject::Cast(v8::Value* value) { 659184bcc559ac20fb04f806e97d28a314b20b58fd60svenpanne@chromium.org#ifdef V8_ENABLE_CHECKS 659284bcc559ac20fb04f806e97d28a314b20b58fd60svenpanne@chromium.org CheckCast(value); 659384bcc559ac20fb04f806e97d28a314b20b58fd60svenpanne@chromium.org#endif 659484bcc559ac20fb04f806e97d28a314b20b58fd60svenpanne@chromium.org return static_cast<StringObject*>(value); 659584bcc559ac20fb04f806e97d28a314b20b58fd60svenpanne@chromium.org} 659684bcc559ac20fb04f806e97d28a314b20b58fd60svenpanne@chromium.org 659784bcc559ac20fb04f806e97d28a314b20b58fd60svenpanne@chromium.org 6598e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.orgSymbolObject* SymbolObject::Cast(v8::Value* value) { 6599e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org#ifdef V8_ENABLE_CHECKS 6600e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org CheckCast(value); 6601e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org#endif 6602e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org return static_cast<SymbolObject*>(value); 6603e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org} 6604e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org 6605e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org 660684bcc559ac20fb04f806e97d28a314b20b58fd60svenpanne@chromium.orgNumberObject* NumberObject::Cast(v8::Value* value) { 660784bcc559ac20fb04f806e97d28a314b20b58fd60svenpanne@chromium.org#ifdef V8_ENABLE_CHECKS 660884bcc559ac20fb04f806e97d28a314b20b58fd60svenpanne@chromium.org CheckCast(value); 660984bcc559ac20fb04f806e97d28a314b20b58fd60svenpanne@chromium.org#endif 661084bcc559ac20fb04f806e97d28a314b20b58fd60svenpanne@chromium.org return static_cast<NumberObject*>(value); 661184bcc559ac20fb04f806e97d28a314b20b58fd60svenpanne@chromium.org} 661284bcc559ac20fb04f806e97d28a314b20b58fd60svenpanne@chromium.org 661384bcc559ac20fb04f806e97d28a314b20b58fd60svenpanne@chromium.org 661484bcc559ac20fb04f806e97d28a314b20b58fd60svenpanne@chromium.orgBooleanObject* BooleanObject::Cast(v8::Value* value) { 661584bcc559ac20fb04f806e97d28a314b20b58fd60svenpanne@chromium.org#ifdef V8_ENABLE_CHECKS 661684bcc559ac20fb04f806e97d28a314b20b58fd60svenpanne@chromium.org CheckCast(value); 661784bcc559ac20fb04f806e97d28a314b20b58fd60svenpanne@chromium.org#endif 661884bcc559ac20fb04f806e97d28a314b20b58fd60svenpanne@chromium.org return static_cast<BooleanObject*>(value); 661984bcc559ac20fb04f806e97d28a314b20b58fd60svenpanne@chromium.org} 662084bcc559ac20fb04f806e97d28a314b20b58fd60svenpanne@chromium.org 662184bcc559ac20fb04f806e97d28a314b20b58fd60svenpanne@chromium.org 6622b61a0d13e9690ef4c2de424bbe82a38884d981a6ager@chromium.orgRegExp* RegExp::Cast(v8::Value* value) { 6623b61a0d13e9690ef4c2de424bbe82a38884d981a6ager@chromium.org#ifdef V8_ENABLE_CHECKS 6624b61a0d13e9690ef4c2de424bbe82a38884d981a6ager@chromium.org CheckCast(value); 6625b61a0d13e9690ef4c2de424bbe82a38884d981a6ager@chromium.org#endif 6626b61a0d13e9690ef4c2de424bbe82a38884d981a6ager@chromium.org return static_cast<RegExp*>(value); 6627b61a0d13e9690ef4c2de424bbe82a38884d981a6ager@chromium.org} 6628b61a0d13e9690ef4c2de424bbe82a38884d981a6ager@chromium.org 6629b61a0d13e9690ef4c2de424bbe82a38884d981a6ager@chromium.org 663018ad94b919217ffbcd2d3159eeb5f8c588761c47ager@chromium.orgObject* Object::Cast(v8::Value* value) { 663118ad94b919217ffbcd2d3159eeb5f8c588761c47ager@chromium.org#ifdef V8_ENABLE_CHECKS 663218ad94b919217ffbcd2d3159eeb5f8c588761c47ager@chromium.org CheckCast(value); 663318ad94b919217ffbcd2d3159eeb5f8c588761c47ager@chromium.org#endif 663418ad94b919217ffbcd2d3159eeb5f8c588761c47ager@chromium.org return static_cast<Object*>(value); 663518ad94b919217ffbcd2d3159eeb5f8c588761c47ager@chromium.org} 663618ad94b919217ffbcd2d3159eeb5f8c588761c47ager@chromium.org 663718ad94b919217ffbcd2d3159eeb5f8c588761c47ager@chromium.org 663818ad94b919217ffbcd2d3159eeb5f8c588761c47ager@chromium.orgArray* Array::Cast(v8::Value* value) { 663918ad94b919217ffbcd2d3159eeb5f8c588761c47ager@chromium.org#ifdef V8_ENABLE_CHECKS 664018ad94b919217ffbcd2d3159eeb5f8c588761c47ager@chromium.org CheckCast(value); 664118ad94b919217ffbcd2d3159eeb5f8c588761c47ager@chromium.org#endif 664218ad94b919217ffbcd2d3159eeb5f8c588761c47ager@chromium.org return static_cast<Array*>(value); 664318ad94b919217ffbcd2d3159eeb5f8c588761c47ager@chromium.org} 664418ad94b919217ffbcd2d3159eeb5f8c588761c47ager@chromium.org 664518ad94b919217ffbcd2d3159eeb5f8c588761c47ager@chromium.org 6646486536df718553960f9700559e80e5b10b0d5994dslomov@chromium.orgPromise* Promise::Cast(v8::Value* value) { 6647486536df718553960f9700559e80e5b10b0d5994dslomov@chromium.org#ifdef V8_ENABLE_CHECKS 6648486536df718553960f9700559e80e5b10b0d5994dslomov@chromium.org CheckCast(value); 6649486536df718553960f9700559e80e5b10b0d5994dslomov@chromium.org#endif 6650486536df718553960f9700559e80e5b10b0d5994dslomov@chromium.org return static_cast<Promise*>(value); 6651486536df718553960f9700559e80e5b10b0d5994dslomov@chromium.org} 6652486536df718553960f9700559e80e5b10b0d5994dslomov@chromium.org 6653486536df718553960f9700559e80e5b10b0d5994dslomov@chromium.org 66542904d1a42292be3056c2dd3f98822f8e1470fa72machenbach@chromium.orgPromise::Resolver* Promise::Resolver::Cast(v8::Value* value) { 66552904d1a42292be3056c2dd3f98822f8e1470fa72machenbach@chromium.org#ifdef V8_ENABLE_CHECKS 66562904d1a42292be3056c2dd3f98822f8e1470fa72machenbach@chromium.org CheckCast(value); 66572904d1a42292be3056c2dd3f98822f8e1470fa72machenbach@chromium.org#endif 66582904d1a42292be3056c2dd3f98822f8e1470fa72machenbach@chromium.org return static_cast<Promise::Resolver*>(value); 66592904d1a42292be3056c2dd3f98822f8e1470fa72machenbach@chromium.org} 66602904d1a42292be3056c2dd3f98822f8e1470fa72machenbach@chromium.org 66612904d1a42292be3056c2dd3f98822f8e1470fa72machenbach@chromium.org 6662ca29dd85fa02449d17188f5a6ff9a7cdf2ad9680danno@chromium.orgArrayBuffer* ArrayBuffer::Cast(v8::Value* value) { 6663ca29dd85fa02449d17188f5a6ff9a7cdf2ad9680danno@chromium.org#ifdef V8_ENABLE_CHECKS 6664ca29dd85fa02449d17188f5a6ff9a7cdf2ad9680danno@chromium.org CheckCast(value); 6665ca29dd85fa02449d17188f5a6ff9a7cdf2ad9680danno@chromium.org#endif 6666ca29dd85fa02449d17188f5a6ff9a7cdf2ad9680danno@chromium.org return static_cast<ArrayBuffer*>(value); 6667ca29dd85fa02449d17188f5a6ff9a7cdf2ad9680danno@chromium.org} 6668ca29dd85fa02449d17188f5a6ff9a7cdf2ad9680danno@chromium.org 6669ca29dd85fa02449d17188f5a6ff9a7cdf2ad9680danno@chromium.org 66701510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.orgArrayBufferView* ArrayBufferView::Cast(v8::Value* value) { 66711510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org#ifdef V8_ENABLE_CHECKS 66721510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org CheckCast(value); 66731510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org#endif 66741510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org return static_cast<ArrayBufferView*>(value); 66751510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org} 66761510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org 66771510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org 6678f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.orgTypedArray* TypedArray::Cast(v8::Value* value) { 6679f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org#ifdef V8_ENABLE_CHECKS 6680f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org CheckCast(value); 6681f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org#endif 6682f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org return static_cast<TypedArray*>(value); 6683f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org} 6684f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org 6685f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org 6686f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.orgUint8Array* Uint8Array::Cast(v8::Value* value) { 6687f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org#ifdef V8_ENABLE_CHECKS 6688f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org CheckCast(value); 6689f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org#endif 6690f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org return static_cast<Uint8Array*>(value); 6691f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org} 6692f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org 6693f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org 6694f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.orgInt8Array* Int8Array::Cast(v8::Value* value) { 6695f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org#ifdef V8_ENABLE_CHECKS 6696f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org CheckCast(value); 6697f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org#endif 6698f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org return static_cast<Int8Array*>(value); 6699f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org} 6700f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org 6701f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org 6702f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.orgUint16Array* Uint16Array::Cast(v8::Value* value) { 6703f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org#ifdef V8_ENABLE_CHECKS 6704f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org CheckCast(value); 6705f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org#endif 6706f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org return static_cast<Uint16Array*>(value); 6707f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org} 6708f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org 6709f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org 6710f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.orgInt16Array* Int16Array::Cast(v8::Value* value) { 6711f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org#ifdef V8_ENABLE_CHECKS 6712f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org CheckCast(value); 6713f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org#endif 6714f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org return static_cast<Int16Array*>(value); 6715f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org} 6716f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org 6717f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org 6718f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.orgUint32Array* Uint32Array::Cast(v8::Value* value) { 6719f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org#ifdef V8_ENABLE_CHECKS 6720f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org CheckCast(value); 6721f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org#endif 6722f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org return static_cast<Uint32Array*>(value); 6723f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org} 6724f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org 6725f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org 6726f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.orgInt32Array* Int32Array::Cast(v8::Value* value) { 6727f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org#ifdef V8_ENABLE_CHECKS 6728f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org CheckCast(value); 6729f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org#endif 6730f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org return static_cast<Int32Array*>(value); 6731f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org} 6732f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org 6733f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org 6734f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.orgFloat32Array* Float32Array::Cast(v8::Value* value) { 6735f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org#ifdef V8_ENABLE_CHECKS 6736f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org CheckCast(value); 6737f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org#endif 6738f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org return static_cast<Float32Array*>(value); 6739f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org} 6740f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org 6741f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org 6742f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.orgFloat64Array* Float64Array::Cast(v8::Value* value) { 6743f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org#ifdef V8_ENABLE_CHECKS 6744f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org CheckCast(value); 6745f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org#endif 6746f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org return static_cast<Float64Array*>(value); 6747f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org} 6748f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org 6749f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org 67501fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.orgUint8ClampedArray* Uint8ClampedArray::Cast(v8::Value* value) { 67511fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org#ifdef V8_ENABLE_CHECKS 67521fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org CheckCast(value); 67531fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org#endif 67541fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org return static_cast<Uint8ClampedArray*>(value); 67551fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org} 67561fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org 67571fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org 67581510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.orgDataView* DataView::Cast(v8::Value* value) { 67591510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org#ifdef V8_ENABLE_CHECKS 67601510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org CheckCast(value); 67611510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org#endif 67621510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org return static_cast<DataView*>(value); 67631510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org} 67641510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org 67651510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org 676618ad94b919217ffbcd2d3159eeb5f8c588761c47ager@chromium.orgFunction* Function::Cast(v8::Value* value) { 676718ad94b919217ffbcd2d3159eeb5f8c588761c47ager@chromium.org#ifdef V8_ENABLE_CHECKS 676818ad94b919217ffbcd2d3159eeb5f8c588761c47ager@chromium.org CheckCast(value); 676918ad94b919217ffbcd2d3159eeb5f8c588761c47ager@chromium.org#endif 677018ad94b919217ffbcd2d3159eeb5f8c588761c47ager@chromium.org return static_cast<Function*>(value); 677118ad94b919217ffbcd2d3159eeb5f8c588761c47ager@chromium.org} 677218ad94b919217ffbcd2d3159eeb5f8c588761c47ager@chromium.org 677318ad94b919217ffbcd2d3159eeb5f8c588761c47ager@chromium.org 677418ad94b919217ffbcd2d3159eeb5f8c588761c47ager@chromium.orgExternal* External::Cast(v8::Value* value) { 677518ad94b919217ffbcd2d3159eeb5f8c588761c47ager@chromium.org#ifdef V8_ENABLE_CHECKS 677618ad94b919217ffbcd2d3159eeb5f8c588761c47ager@chromium.org CheckCast(value); 677718ad94b919217ffbcd2d3159eeb5f8c588761c47ager@chromium.org#endif 677818ad94b919217ffbcd2d3159eeb5f8c588761c47ager@chromium.org return static_cast<External*>(value); 677918ad94b919217ffbcd2d3159eeb5f8c588761c47ager@chromium.org} 678018ad94b919217ffbcd2d3159eeb5f8c588761c47ager@chromium.org 678118ad94b919217ffbcd2d3159eeb5f8c588761c47ager@chromium.org 6782bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.orgtemplate<typename T> 6783bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.orgIsolate* PropertyCallbackInfo<T>::GetIsolate() const { 6784bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.org return *reinterpret_cast<Isolate**>(&args_[kIsolateIndex]); 6785bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.org} 6786bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.org 6787bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.org 6788bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.orgtemplate<typename T> 6789bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.orgLocal<Value> PropertyCallbackInfo<T>::Data() const { 6790bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.org return Local<Value>(reinterpret_cast<Value*>(&args_[kDataIndex])); 679128faa982749c4aa9c090939453dea14bb118f613jkummerow@chromium.org} 679228faa982749c4aa9c090939453dea14bb118f613jkummerow@chromium.org 679328faa982749c4aa9c090939453dea14bb118f613jkummerow@chromium.org 6794bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.orgtemplate<typename T> 6795aa107b240dc43417fae8469b5c1b0f1ec9f98400machenbach@chromium.orgLocal<Object> PropertyCallbackInfo<T>::This() const { 6796aa107b240dc43417fae8469b5c1b0f1ec9f98400machenbach@chromium.org return Local<Object>(reinterpret_cast<Object*>(&args_[kThisIndex])); 6797c514574143c1bf74d4fb6e7dccb175fe9ff2f5d3sgjesse@chromium.org} 6798c514574143c1bf74d4fb6e7dccb175fe9ff2f5d3sgjesse@chromium.org 6799c514574143c1bf74d4fb6e7dccb175fe9ff2f5d3sgjesse@chromium.org 6800bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.orgtemplate<typename T> 6801bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.orgLocal<Object> PropertyCallbackInfo<T>::Holder() const { 6802bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.org return Local<Object>(reinterpret_cast<Object*>(&args_[kHolderIndex])); 6803c514574143c1bf74d4fb6e7dccb175fe9ff2f5d3sgjesse@chromium.org} 6804c514574143c1bf74d4fb6e7dccb175fe9ff2f5d3sgjesse@chromium.org 6805c514574143c1bf74d4fb6e7dccb175fe9ff2f5d3sgjesse@chromium.org 6806bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.orgtemplate<typename T> 6807bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.orgReturnValue<T> PropertyCallbackInfo<T>::GetReturnValue() const { 6808bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.org return ReturnValue<T>(&args_[kReturnValueIndex]); 6809c514574143c1bf74d4fb6e7dccb175fe9ff2f5d3sgjesse@chromium.org} 6810c514574143c1bf74d4fb6e7dccb175fe9ff2f5d3sgjesse@chromium.org 6811c514574143c1bf74d4fb6e7dccb175fe9ff2f5d3sgjesse@chromium.org 6812efdb9d70bddd496ceb6a281dadcc065efbce37a1yangguo@chromium.orgHandle<Primitive> Undefined(Isolate* isolate) { 6813efdb9d70bddd496ceb6a281dadcc065efbce37a1yangguo@chromium.org typedef internal::Object* S; 6814efdb9d70bddd496ceb6a281dadcc065efbce37a1yangguo@chromium.org typedef internal::Internals I; 68151510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org I::CheckInitialized(isolate); 6816efdb9d70bddd496ceb6a281dadcc065efbce37a1yangguo@chromium.org S* slot = I::GetRoot(isolate, I::kUndefinedValueRootIndex); 6817efdb9d70bddd496ceb6a281dadcc065efbce37a1yangguo@chromium.org return Handle<Primitive>(reinterpret_cast<Primitive*>(slot)); 6818efdb9d70bddd496ceb6a281dadcc065efbce37a1yangguo@chromium.org} 6819efdb9d70bddd496ceb6a281dadcc065efbce37a1yangguo@chromium.org 6820efdb9d70bddd496ceb6a281dadcc065efbce37a1yangguo@chromium.org 6821efdb9d70bddd496ceb6a281dadcc065efbce37a1yangguo@chromium.orgHandle<Primitive> Null(Isolate* isolate) { 6822efdb9d70bddd496ceb6a281dadcc065efbce37a1yangguo@chromium.org typedef internal::Object* S; 6823efdb9d70bddd496ceb6a281dadcc065efbce37a1yangguo@chromium.org typedef internal::Internals I; 68241510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org I::CheckInitialized(isolate); 6825efdb9d70bddd496ceb6a281dadcc065efbce37a1yangguo@chromium.org S* slot = I::GetRoot(isolate, I::kNullValueRootIndex); 6826efdb9d70bddd496ceb6a281dadcc065efbce37a1yangguo@chromium.org return Handle<Primitive>(reinterpret_cast<Primitive*>(slot)); 6827efdb9d70bddd496ceb6a281dadcc065efbce37a1yangguo@chromium.org} 6828efdb9d70bddd496ceb6a281dadcc065efbce37a1yangguo@chromium.org 6829efdb9d70bddd496ceb6a281dadcc065efbce37a1yangguo@chromium.org 6830efdb9d70bddd496ceb6a281dadcc065efbce37a1yangguo@chromium.orgHandle<Boolean> True(Isolate* isolate) { 6831efdb9d70bddd496ceb6a281dadcc065efbce37a1yangguo@chromium.org typedef internal::Object* S; 6832efdb9d70bddd496ceb6a281dadcc065efbce37a1yangguo@chromium.org typedef internal::Internals I; 68331510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org I::CheckInitialized(isolate); 6834efdb9d70bddd496ceb6a281dadcc065efbce37a1yangguo@chromium.org S* slot = I::GetRoot(isolate, I::kTrueValueRootIndex); 6835efdb9d70bddd496ceb6a281dadcc065efbce37a1yangguo@chromium.org return Handle<Boolean>(reinterpret_cast<Boolean*>(slot)); 6836efdb9d70bddd496ceb6a281dadcc065efbce37a1yangguo@chromium.org} 6837efdb9d70bddd496ceb6a281dadcc065efbce37a1yangguo@chromium.org 6838efdb9d70bddd496ceb6a281dadcc065efbce37a1yangguo@chromium.org 6839efdb9d70bddd496ceb6a281dadcc065efbce37a1yangguo@chromium.orgHandle<Boolean> False(Isolate* isolate) { 6840efdb9d70bddd496ceb6a281dadcc065efbce37a1yangguo@chromium.org typedef internal::Object* S; 6841efdb9d70bddd496ceb6a281dadcc065efbce37a1yangguo@chromium.org typedef internal::Internals I; 68421510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org I::CheckInitialized(isolate); 6843efdb9d70bddd496ceb6a281dadcc065efbce37a1yangguo@chromium.org S* slot = I::GetRoot(isolate, I::kFalseValueRootIndex); 6844efdb9d70bddd496ceb6a281dadcc065efbce37a1yangguo@chromium.org return Handle<Boolean>(reinterpret_cast<Boolean*>(slot)); 6845efdb9d70bddd496ceb6a281dadcc065efbce37a1yangguo@chromium.org} 6846efdb9d70bddd496ceb6a281dadcc065efbce37a1yangguo@chromium.org 6847efdb9d70bddd496ceb6a281dadcc065efbce37a1yangguo@chromium.org 68487ff7607c2315ea91e4d13330ce14125e4bb4851amachenbach@chromium.orgvoid Isolate::SetData(uint32_t slot, void* data) { 68497ff7607c2315ea91e4d13330ce14125e4bb4851amachenbach@chromium.org typedef internal::Internals I; 68507ff7607c2315ea91e4d13330ce14125e4bb4851amachenbach@chromium.org I::SetEmbedderData(this, slot, data); 68517ff7607c2315ea91e4d13330ce14125e4bb4851amachenbach@chromium.org} 68527ff7607c2315ea91e4d13330ce14125e4bb4851amachenbach@chromium.org 68537ff7607c2315ea91e4d13330ce14125e4bb4851amachenbach@chromium.org 68547ff7607c2315ea91e4d13330ce14125e4bb4851amachenbach@chromium.orgvoid* Isolate::GetData(uint32_t slot) { 68557ff7607c2315ea91e4d13330ce14125e4bb4851amachenbach@chromium.org typedef internal::Internals I; 68567ff7607c2315ea91e4d13330ce14125e4bb4851amachenbach@chromium.org return I::GetEmbedderData(this, slot); 68577ff7607c2315ea91e4d13330ce14125e4bb4851amachenbach@chromium.org} 68587ff7607c2315ea91e4d13330ce14125e4bb4851amachenbach@chromium.org 68597ff7607c2315ea91e4d13330ce14125e4bb4851amachenbach@chromium.org 68607ff7607c2315ea91e4d13330ce14125e4bb4851amachenbach@chromium.orguint32_t Isolate::GetNumberOfDataSlots() { 68617ff7607c2315ea91e4d13330ce14125e4bb4851amachenbach@chromium.org typedef internal::Internals I; 68627ff7607c2315ea91e4d13330ce14125e4bb4851amachenbach@chromium.org return I::kNumIsolateDataSlots; 6863efdb9d70bddd496ceb6a281dadcc065efbce37a1yangguo@chromium.org} 6864efdb9d70bddd496ceb6a281dadcc065efbce37a1yangguo@chromium.org 6865efdb9d70bddd496ceb6a281dadcc065efbce37a1yangguo@chromium.org 68661e2d50cf3d94ff48285da107b7a9da1ad0fc873dmachenbach@chromium.orgint64_t Isolate::AdjustAmountOfExternalAllocatedMemory( 68671e2d50cf3d94ff48285da107b7a9da1ad0fc873dmachenbach@chromium.org int64_t change_in_bytes) { 68681e2d50cf3d94ff48285da107b7a9da1ad0fc873dmachenbach@chromium.org typedef internal::Internals I; 68691e2d50cf3d94ff48285da107b7a9da1ad0fc873dmachenbach@chromium.org int64_t* amount_of_external_allocated_memory = 68701e2d50cf3d94ff48285da107b7a9da1ad0fc873dmachenbach@chromium.org reinterpret_cast<int64_t*>(reinterpret_cast<uint8_t*>(this) + 68711e2d50cf3d94ff48285da107b7a9da1ad0fc873dmachenbach@chromium.org I::kAmountOfExternalAllocatedMemoryOffset); 68721e2d50cf3d94ff48285da107b7a9da1ad0fc873dmachenbach@chromium.org int64_t* amount_of_external_allocated_memory_at_last_global_gc = 68731e2d50cf3d94ff48285da107b7a9da1ad0fc873dmachenbach@chromium.org reinterpret_cast<int64_t*>( 68741e2d50cf3d94ff48285da107b7a9da1ad0fc873dmachenbach@chromium.org reinterpret_cast<uint8_t*>(this) + 68751e2d50cf3d94ff48285da107b7a9da1ad0fc873dmachenbach@chromium.org I::kAmountOfExternalAllocatedMemoryAtLastGlobalGCOffset); 68761e2d50cf3d94ff48285da107b7a9da1ad0fc873dmachenbach@chromium.org int64_t amount = *amount_of_external_allocated_memory + change_in_bytes; 68771e2d50cf3d94ff48285da107b7a9da1ad0fc873dmachenbach@chromium.org if (change_in_bytes > 0 && 68781e2d50cf3d94ff48285da107b7a9da1ad0fc873dmachenbach@chromium.org amount - *amount_of_external_allocated_memory_at_last_global_gc > 68791e2d50cf3d94ff48285da107b7a9da1ad0fc873dmachenbach@chromium.org I::kExternalAllocationLimit) { 68801e2d50cf3d94ff48285da107b7a9da1ad0fc873dmachenbach@chromium.org CollectAllGarbage("external memory allocation limit reached."); 68811e2d50cf3d94ff48285da107b7a9da1ad0fc873dmachenbach@chromium.org } else { 68821e2d50cf3d94ff48285da107b7a9da1ad0fc873dmachenbach@chromium.org *amount_of_external_allocated_memory = amount; 68831e2d50cf3d94ff48285da107b7a9da1ad0fc873dmachenbach@chromium.org } 68841e2d50cf3d94ff48285da107b7a9da1ad0fc873dmachenbach@chromium.org return *amount_of_external_allocated_memory; 68851e2d50cf3d94ff48285da107b7a9da1ad0fc873dmachenbach@chromium.org} 68861e2d50cf3d94ff48285da107b7a9da1ad0fc873dmachenbach@chromium.org 68871e2d50cf3d94ff48285da107b7a9da1ad0fc873dmachenbach@chromium.org 6888690083842e7c67a362017dae50909d4bb0b2a9c2mstarzinger@chromium.orgtemplate<typename T> 6889690083842e7c67a362017dae50909d4bb0b2a9c2mstarzinger@chromium.orgvoid Isolate::SetObjectGroupId(const Persistent<T>& object, 6890690083842e7c67a362017dae50909d4bb0b2a9c2mstarzinger@chromium.org UniqueId id) { 6891690083842e7c67a362017dae50909d4bb0b2a9c2mstarzinger@chromium.org TYPE_CHECK(Value, T); 6892690083842e7c67a362017dae50909d4bb0b2a9c2mstarzinger@chromium.org SetObjectGroupId(reinterpret_cast<v8::internal::Object**>(object.val_), id); 6893690083842e7c67a362017dae50909d4bb0b2a9c2mstarzinger@chromium.org} 6894690083842e7c67a362017dae50909d4bb0b2a9c2mstarzinger@chromium.org 6895690083842e7c67a362017dae50909d4bb0b2a9c2mstarzinger@chromium.org 6896690083842e7c67a362017dae50909d4bb0b2a9c2mstarzinger@chromium.orgtemplate<typename T> 6897690083842e7c67a362017dae50909d4bb0b2a9c2mstarzinger@chromium.orgvoid Isolate::SetReferenceFromGroup(UniqueId id, 6898690083842e7c67a362017dae50909d4bb0b2a9c2mstarzinger@chromium.org const Persistent<T>& object) { 6899690083842e7c67a362017dae50909d4bb0b2a9c2mstarzinger@chromium.org TYPE_CHECK(Value, T); 6900690083842e7c67a362017dae50909d4bb0b2a9c2mstarzinger@chromium.org SetReferenceFromGroup(id, 6901690083842e7c67a362017dae50909d4bb0b2a9c2mstarzinger@chromium.org reinterpret_cast<v8::internal::Object**>(object.val_)); 6902690083842e7c67a362017dae50909d4bb0b2a9c2mstarzinger@chromium.org} 6903690083842e7c67a362017dae50909d4bb0b2a9c2mstarzinger@chromium.org 6904690083842e7c67a362017dae50909d4bb0b2a9c2mstarzinger@chromium.org 6905690083842e7c67a362017dae50909d4bb0b2a9c2mstarzinger@chromium.orgtemplate<typename T, typename S> 6906690083842e7c67a362017dae50909d4bb0b2a9c2mstarzinger@chromium.orgvoid Isolate::SetReference(const Persistent<T>& parent, 6907690083842e7c67a362017dae50909d4bb0b2a9c2mstarzinger@chromium.org const Persistent<S>& child) { 6908690083842e7c67a362017dae50909d4bb0b2a9c2mstarzinger@chromium.org TYPE_CHECK(Object, T); 6909690083842e7c67a362017dae50909d4bb0b2a9c2mstarzinger@chromium.org TYPE_CHECK(Value, S); 6910690083842e7c67a362017dae50909d4bb0b2a9c2mstarzinger@chromium.org SetReference(reinterpret_cast<v8::internal::Object**>(parent.val_), 6911690083842e7c67a362017dae50909d4bb0b2a9c2mstarzinger@chromium.org reinterpret_cast<v8::internal::Object**>(child.val_)); 6912690083842e7c67a362017dae50909d4bb0b2a9c2mstarzinger@chromium.org} 6913690083842e7c67a362017dae50909d4bb0b2a9c2mstarzinger@chromium.org 6914690083842e7c67a362017dae50909d4bb0b2a9c2mstarzinger@chromium.org 6915eeb44b681a16e45f1415dfacff0ba3dba9de5d8cyangguo@chromium.orgLocal<Value> Context::GetEmbedderData(int index) { 6916eeb44b681a16e45f1415dfacff0ba3dba9de5d8cyangguo@chromium.org#ifndef V8_ENABLE_CHECKS 6917eeb44b681a16e45f1415dfacff0ba3dba9de5d8cyangguo@chromium.org typedef internal::Object O; 6918cfdf67d672b8e2cd6cc1df14c082671511745746machenbach@chromium.org typedef internal::HeapObject HO; 6919eeb44b681a16e45f1415dfacff0ba3dba9de5d8cyangguo@chromium.org typedef internal::Internals I; 6920cfdf67d672b8e2cd6cc1df14c082671511745746machenbach@chromium.org HO* context = *reinterpret_cast<HO**>(this); 6921cfdf67d672b8e2cd6cc1df14c082671511745746machenbach@chromium.org O** result = 6922cfdf67d672b8e2cd6cc1df14c082671511745746machenbach@chromium.org HandleScope::CreateHandle(context, I::ReadEmbedderData<O*>(this, index)); 6923eeb44b681a16e45f1415dfacff0ba3dba9de5d8cyangguo@chromium.org return Local<Value>(reinterpret_cast<Value*>(result)); 6924eeb44b681a16e45f1415dfacff0ba3dba9de5d8cyangguo@chromium.org#else 6925eeb44b681a16e45f1415dfacff0ba3dba9de5d8cyangguo@chromium.org return SlowGetEmbedderData(index); 6926eeb44b681a16e45f1415dfacff0ba3dba9de5d8cyangguo@chromium.org#endif 6927eeb44b681a16e45f1415dfacff0ba3dba9de5d8cyangguo@chromium.org} 6928eeb44b681a16e45f1415dfacff0ba3dba9de5d8cyangguo@chromium.org 6929eeb44b681a16e45f1415dfacff0ba3dba9de5d8cyangguo@chromium.org 6930eeb44b681a16e45f1415dfacff0ba3dba9de5d8cyangguo@chromium.orgvoid* Context::GetAlignedPointerFromEmbedderData(int index) { 6931eeb44b681a16e45f1415dfacff0ba3dba9de5d8cyangguo@chromium.org#ifndef V8_ENABLE_CHECKS 6932eeb44b681a16e45f1415dfacff0ba3dba9de5d8cyangguo@chromium.org typedef internal::Internals I; 6933eeb44b681a16e45f1415dfacff0ba3dba9de5d8cyangguo@chromium.org return I::ReadEmbedderData<void*>(this, index); 6934eeb44b681a16e45f1415dfacff0ba3dba9de5d8cyangguo@chromium.org#else 6935eeb44b681a16e45f1415dfacff0ba3dba9de5d8cyangguo@chromium.org return SlowGetAlignedPointerFromEmbedderData(index); 6936eeb44b681a16e45f1415dfacff0ba3dba9de5d8cyangguo@chromium.org#endif 6937eeb44b681a16e45f1415dfacff0ba3dba9de5d8cyangguo@chromium.org} 6938eeb44b681a16e45f1415dfacff0ba3dba9de5d8cyangguo@chromium.org 6939eeb44b681a16e45f1415dfacff0ba3dba9de5d8cyangguo@chromium.org 694043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen/** 6941727e995b7bba3c57fb1e5c156d386ca11894f781v * \example shell.cc 6942727e995b7bba3c57fb1e5c156d386ca11894f781v * A simple shell that takes a list of expressions on the 694343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * command-line and executes them. 694443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen */ 694543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 694643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 694743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen/** 694843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * \example process.cc 694943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen */ 695043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 695143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 695243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} // namespace v8 695343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 695443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 695543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen#undef TYPE_CHECK 695643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 695743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 69589258b6bc66e09368ada54001f619d53b4fc976d5ager@chromium.org#endif // V8_H_ 6959