128faa982749c4aa9c090939453dea14bb118f613jkummerow@chromium.org// Copyright 2012 the V8 project authors. All rights reserved. 243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// Redistribution and use in source and binary forms, with or without 343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// modification, are permitted provided that the following conditions are 443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// met: 543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// 643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// * Redistributions of source code must retain the above copyright 743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// notice, this list of conditions and the following disclaimer. 843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// * Redistributions in binary form must reproduce the above 943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// copyright notice, this list of conditions and the following 1043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// disclaimer in the documentation and/or other materials provided 1143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// with the distribution. 1243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// * Neither the name of Google Inc. nor the names of its 1343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// contributors may be used to endorse or promote products derived 1443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// from this software without specific prior written permission. 1543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// 1643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 1743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 1843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 1943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 2043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 2143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 2243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 2343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 2443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 2543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 2643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 2743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 28727e995b7bba3c57fb1e5c156d386ca11894f781v/** \mainpage V8 API Reference Guide 299258b6bc66e09368ada54001f619d53b4fc976d5ager@chromium.org * 309258b6bc66e09368ada54001f619d53b4fc976d5ager@chromium.org * V8 is Google's open source JavaScript engine. 31727e995b7bba3c57fb1e5c156d386ca11894f781v * 32727e995b7bba3c57fb1e5c156d386ca11894f781v * This set of documents provides reference material generated from the 33727e995b7bba3c57fb1e5c156d386ca11894f781v * V8 header file, include/v8.h. 34727e995b7bba3c57fb1e5c156d386ca11894f781v * 35727e995b7bba3c57fb1e5c156d386ca11894f781v * For other documentation see http://code.google.com/apis/v8/ 3643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen */ 37727e995b7bba3c57fb1e5c156d386ca11894f781v 389258b6bc66e09368ada54001f619d53b4fc976d5ager@chromium.org#ifndef V8_H_ 399258b6bc66e09368ada54001f619d53b4fc976d5ager@chromium.org#define V8_H_ 4043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 41f0ac72dfa39ec827de605aafc57d4834237aa7f3whesse@chromium.org#include "v8stdint.h" 4243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 43594006017e46d82ed7146611dc12c20e3c509c7ddanno@chromium.org// We reserve the V8_* prefix for macros defined in V8 public API and 44594006017e46d82ed7146611dc12c20e3c509c7ddanno@chromium.org// assume there are no name conflicts with the embedder's code. 45594006017e46d82ed7146611dc12c20e3c509c7ddanno@chromium.org 4643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen#ifdef _WIN32 479a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.com 489a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.com// Setup for Windows DLL export/import. When building the V8 DLL the 499a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.com// BUILDING_V8_SHARED needs to be defined. When building a program which uses 509a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.com// the V8 DLL USING_V8_SHARED needs to be defined. When either building the V8 519a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.com// static library or building a program which uses the V8 static library neither 529a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.com// BUILDING_V8_SHARED nor USING_V8_SHARED should be defined. 539a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.com#if defined(BUILDING_V8_SHARED) && defined(USING_V8_SHARED) 549a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.com#error both BUILDING_V8_SHARED and USING_V8_SHARED are set - please check the\ 559a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.com build configuration to ensure that at most one of these is set 569a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.com#endif 579a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.com 589a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.com#ifdef BUILDING_V8_SHARED 59594006017e46d82ed7146611dc12c20e3c509c7ddanno@chromium.org#define V8_EXPORT __declspec(dllexport) 609a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.com#elif USING_V8_SHARED 61594006017e46d82ed7146611dc12c20e3c509c7ddanno@chromium.org#define V8_EXPORT __declspec(dllimport) 6243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen#else 63594006017e46d82ed7146611dc12c20e3c509c7ddanno@chromium.org#define V8_EXPORT 649a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.com#endif // BUILDING_V8_SHARED 659a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.com 669a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.com#else // _WIN32 679085a016223a6b72bf580d5781c93ec7b9e54422ager@chromium.org 68d6899c3545b051ec84363203d4235f883b4981bfulan@chromium.org// Setup for Linux shared library export. 69b6d052d4d08b0de341804f273713741dee560c5everwaest@chromium.org#if defined(__GNUC__) && ((__GNUC__ >= 4) || \ 70b6d052d4d08b0de341804f273713741dee560c5everwaest@chromium.org (__GNUC__ == 3 && __GNUC_MINOR__ >= 3)) && defined(V8_SHARED) 71d6899c3545b051ec84363203d4235f883b4981bfulan@chromium.org#ifdef BUILDING_V8_SHARED 72594006017e46d82ed7146611dc12c20e3c509c7ddanno@chromium.org#define V8_EXPORT __attribute__ ((visibility("default"))) 73d6899c3545b051ec84363203d4235f883b4981bfulan@chromium.org#else 74594006017e46d82ed7146611dc12c20e3c509c7ddanno@chromium.org#define V8_EXPORT 75d6899c3545b051ec84363203d4235f883b4981bfulan@chromium.org#endif 76b6d052d4d08b0de341804f273713741dee560c5everwaest@chromium.org#else 77594006017e46d82ed7146611dc12c20e3c509c7ddanno@chromium.org#define V8_EXPORT 78b6d052d4d08b0de341804f273713741dee560c5everwaest@chromium.org#endif 799a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.com 809a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.com#endif // _WIN32 8143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 8232280cf2786219b2d9a668f7f00778fb59ac40b3mstarzinger@chromium.org#if defined(__GNUC__) && !defined(DEBUG) 8332280cf2786219b2d9a668f7f00778fb59ac40b3mstarzinger@chromium.org#define V8_INLINE(declarator) inline __attribute__((always_inline)) declarator 8432280cf2786219b2d9a668f7f00778fb59ac40b3mstarzinger@chromium.org#elif defined(_MSC_VER) && !defined(DEBUG) 8532280cf2786219b2d9a668f7f00778fb59ac40b3mstarzinger@chromium.org#define V8_INLINE(declarator) __forceinline declarator 8632280cf2786219b2d9a668f7f00778fb59ac40b3mstarzinger@chromium.org#else 8732280cf2786219b2d9a668f7f00778fb59ac40b3mstarzinger@chromium.org#define V8_INLINE(declarator) inline declarator 8832280cf2786219b2d9a668f7f00778fb59ac40b3mstarzinger@chromium.org#endif 8932280cf2786219b2d9a668f7f00778fb59ac40b3mstarzinger@chromium.org 908e8d8825f97138de12985f8e0d3163074dff5258ulan@chromium.org#if defined(__GNUC__) && !V8_DISABLE_DEPRECATIONS 9132280cf2786219b2d9a668f7f00778fb59ac40b3mstarzinger@chromium.org#define V8_DEPRECATED(declarator) declarator __attribute__ ((deprecated)) 928e8d8825f97138de12985f8e0d3163074dff5258ulan@chromium.org#elif defined(_MSC_VER) && !V8_DISABLE_DEPRECATIONS 9332280cf2786219b2d9a668f7f00778fb59ac40b3mstarzinger@chromium.org#define V8_DEPRECATED(declarator) __declspec(deprecated) declarator 94eeb44b681a16e45f1415dfacff0ba3dba9de5d8cyangguo@chromium.org#else 9532280cf2786219b2d9a668f7f00778fb59ac40b3mstarzinger@chromium.org#define V8_DEPRECATED(declarator) declarator 96eeb44b681a16e45f1415dfacff0ba3dba9de5d8cyangguo@chromium.org#endif 97eeb44b681a16e45f1415dfacff0ba3dba9de5d8cyangguo@chromium.org 98ca29dd85fa02449d17188f5a6ff9a7cdf2ad9680danno@chromium.org#if __GNUC__ > 2 || (__GNUC__ == 2 && (__GNUC_MINOR__ > 95)) 99ca29dd85fa02449d17188f5a6ff9a7cdf2ad9680danno@chromium.org #define V8_UNLIKELY(condition) __builtin_expect((condition), 0) 100ca29dd85fa02449d17188f5a6ff9a7cdf2ad9680danno@chromium.org #define V8_LIKELY(condition) __builtin_expect((condition), 1) 101ca29dd85fa02449d17188f5a6ff9a7cdf2ad9680danno@chromium.org#else 102ca29dd85fa02449d17188f5a6ff9a7cdf2ad9680danno@chromium.org #define V8_UNLIKELY(condition) (condition) 103ca29dd85fa02449d17188f5a6ff9a7cdf2ad9680danno@chromium.org #define V8_LIKELY(condition) (condition) 104ca29dd85fa02449d17188f5a6ff9a7cdf2ad9680danno@chromium.org#endif 105ca29dd85fa02449d17188f5a6ff9a7cdf2ad9680danno@chromium.org 10643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen/** 107727e995b7bba3c57fb1e5c156d386ca11894f781v * The v8 JavaScript engine. 10843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen */ 10943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansennamespace v8 { 11043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 1114c54a2aa3c7806f38af0c7dfde22395232ebdff7jkummerow@chromium.orgclass AccessorInfo; 1124c54a2aa3c7806f38af0c7dfde22395232ebdff7jkummerow@chromium.orgclass AccessorSignature; 11343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenclass Array; 11443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenclass Boolean; 11584bcc559ac20fb04f806e97d28a314b20b58fd60svenpanne@chromium.orgclass BooleanObject; 1164c54a2aa3c7806f38af0c7dfde22395232ebdff7jkummerow@chromium.orgclass Context; 117f705b5034dc5bc422ac1019b591469a7d0534772mstarzinger@chromium.orgclass CpuProfiler; 1184c54a2aa3c7806f38af0c7dfde22395232ebdff7jkummerow@chromium.orgclass Data; 11943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenclass Date; 1204c54a2aa3c7806f38af0c7dfde22395232ebdff7jkummerow@chromium.orgclass DeclaredAccessorDescriptor; 1214c54a2aa3c7806f38af0c7dfde22395232ebdff7jkummerow@chromium.orgclass External; 1224c54a2aa3c7806f38af0c7dfde22395232ebdff7jkummerow@chromium.orgclass Function; 1234c54a2aa3c7806f38af0c7dfde22395232ebdff7jkummerow@chromium.orgclass FunctionTemplate; 124f705b5034dc5bc422ac1019b591469a7d0534772mstarzinger@chromium.orgclass HeapProfiler; 12543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenclass ImplementationUtilities; 1264c54a2aa3c7806f38af0c7dfde22395232ebdff7jkummerow@chromium.orgclass Int32; 1274c54a2aa3c7806f38af0c7dfde22395232ebdff7jkummerow@chromium.orgclass Integer; 1284c54a2aa3c7806f38af0c7dfde22395232ebdff7jkummerow@chromium.orgclass Isolate; 1294c54a2aa3c7806f38af0c7dfde22395232ebdff7jkummerow@chromium.orgclass Number; 1304c54a2aa3c7806f38af0c7dfde22395232ebdff7jkummerow@chromium.orgclass NumberObject; 1314c54a2aa3c7806f38af0c7dfde22395232ebdff7jkummerow@chromium.orgclass Object; 1324c54a2aa3c7806f38af0c7dfde22395232ebdff7jkummerow@chromium.orgclass ObjectOperationDescriptor; 1334c54a2aa3c7806f38af0c7dfde22395232ebdff7jkummerow@chromium.orgclass ObjectTemplate; 1344c54a2aa3c7806f38af0c7dfde22395232ebdff7jkummerow@chromium.orgclass Primitive; 1354c54a2aa3c7806f38af0c7dfde22395232ebdff7jkummerow@chromium.orgclass RawOperationDescriptor; 13643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenclass Signature; 1374c54a2aa3c7806f38af0c7dfde22395232ebdff7jkummerow@chromium.orgclass StackFrame; 1384c54a2aa3c7806f38af0c7dfde22395232ebdff7jkummerow@chromium.orgclass StackTrace; 1394c54a2aa3c7806f38af0c7dfde22395232ebdff7jkummerow@chromium.orgclass String; 1404c54a2aa3c7806f38af0c7dfde22395232ebdff7jkummerow@chromium.orgclass StringObject; 141e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.orgclass Symbol; 142e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.orgclass SymbolObject; 1434c54a2aa3c7806f38af0c7dfde22395232ebdff7jkummerow@chromium.orgclass Uint32; 1444c54a2aa3c7806f38af0c7dfde22395232ebdff7jkummerow@chromium.orgclass Utils; 1454c54a2aa3c7806f38af0c7dfde22395232ebdff7jkummerow@chromium.orgclass Value; 14643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansentemplate <class T> class Handle; 14743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansentemplate <class T> class Local; 14843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansentemplate <class T> class Persistent; 149bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.orgclass FunctionTemplate; 150bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.orgclass ObjectTemplate; 151bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.orgclass Data; 152bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.orgclass AccessorInfo; 153bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.orgtemplate<typename T> class PropertyCallbackInfo; 154bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.orgclass StackTrace; 155bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.orgclass StackFrame; 156bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.orgclass Isolate; 157bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.orgclass DeclaredAccessorDescriptor; 158bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.orgclass ObjectOperationDescriptor; 159bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.orgclass RawOperationDescriptor; 1601510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.orgclass CallHandlerHelper; 16143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 16218ad94b919217ffbcd2d3159eeb5f8c588761c47ager@chromium.orgnamespace internal { 163c514574143c1bf74d4fb6e7dccb175fe9ff2f5d3sgjesse@chromium.orgclass Arguments; 1642356e6fbe66ac3aa027b61cb43a3c3619b3c3a5evegorov@chromium.orgclass Heap; 165ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.orgclass HeapObject; 166ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.orgclass Isolate; 1674c54a2aa3c7806f38af0c7dfde22395232ebdff7jkummerow@chromium.orgclass Object; 168f95d4b920abb640ab0986d138ad559a7d3b91d04danno@chromium.orgtemplate<typename T> class CustomArguments; 169bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.orgclass PropertyCallbackArguments; 170bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.orgclass FunctionCallbackArguments; 17118ad94b919217ffbcd2d3159eeb5f8c588761c47ager@chromium.org} 17218ad94b919217ffbcd2d3159eeb5f8c588761c47ager@chromium.org 17343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 174ca29dd85fa02449d17188f5a6ff9a7cdf2ad9680danno@chromium.org/** 175ca29dd85fa02449d17188f5a6ff9a7cdf2ad9680danno@chromium.org * General purpose unique identifier. 176ca29dd85fa02449d17188f5a6ff9a7cdf2ad9680danno@chromium.org */ 177ca29dd85fa02449d17188f5a6ff9a7cdf2ad9680danno@chromium.orgclass UniqueId { 178ca29dd85fa02449d17188f5a6ff9a7cdf2ad9680danno@chromium.org public: 179ca29dd85fa02449d17188f5a6ff9a7cdf2ad9680danno@chromium.org explicit UniqueId(intptr_t data) 180ca29dd85fa02449d17188f5a6ff9a7cdf2ad9680danno@chromium.org : data_(data) {} 181ca29dd85fa02449d17188f5a6ff9a7cdf2ad9680danno@chromium.org 182ca29dd85fa02449d17188f5a6ff9a7cdf2ad9680danno@chromium.org bool operator==(const UniqueId& other) const { 183ca29dd85fa02449d17188f5a6ff9a7cdf2ad9680danno@chromium.org return data_ == other.data_; 184ca29dd85fa02449d17188f5a6ff9a7cdf2ad9680danno@chromium.org } 185ca29dd85fa02449d17188f5a6ff9a7cdf2ad9680danno@chromium.org 186ca29dd85fa02449d17188f5a6ff9a7cdf2ad9680danno@chromium.org bool operator!=(const UniqueId& other) const { 187ca29dd85fa02449d17188f5a6ff9a7cdf2ad9680danno@chromium.org return data_ != other.data_; 188ca29dd85fa02449d17188f5a6ff9a7cdf2ad9680danno@chromium.org } 189ca29dd85fa02449d17188f5a6ff9a7cdf2ad9680danno@chromium.org 190ca29dd85fa02449d17188f5a6ff9a7cdf2ad9680danno@chromium.org bool operator<(const UniqueId& other) const { 191ca29dd85fa02449d17188f5a6ff9a7cdf2ad9680danno@chromium.org return data_ < other.data_; 192ca29dd85fa02449d17188f5a6ff9a7cdf2ad9680danno@chromium.org } 193ca29dd85fa02449d17188f5a6ff9a7cdf2ad9680danno@chromium.org 194ca29dd85fa02449d17188f5a6ff9a7cdf2ad9680danno@chromium.org private: 195ca29dd85fa02449d17188f5a6ff9a7cdf2ad9680danno@chromium.org intptr_t data_; 196ca29dd85fa02449d17188f5a6ff9a7cdf2ad9680danno@chromium.org}; 197ca29dd85fa02449d17188f5a6ff9a7cdf2ad9680danno@chromium.org 198ca29dd85fa02449d17188f5a6ff9a7cdf2ad9680danno@chromium.org 199fb144a0716afe7ab8bf245f2391a9e53b3db3c89fschneider@chromium.org// --- Weak Handles --- 20043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 20143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 20243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen/** 20343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * A weak reference callback function. 20443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * 205ed78ffdee6ea4f4f94420b464e7377b610fdac2ffschneider@chromium.org * This callback should either explicitly invoke Dispose on |object| if 206ed78ffdee6ea4f4f94420b464e7377b610fdac2ffschneider@chromium.org * V8 wrapper is not needed anymore, or 'revive' it by invocation of MakeWeak. 207ed78ffdee6ea4f4f94420b464e7377b610fdac2ffschneider@chromium.org * 20843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * \param object the weak global object to be reclaimed by the garbage collector 20943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * \param parameter the value passed in when making the weak global object 21043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen */ 21157ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.orgtemplate<typename T, typename P> 21257ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.orgclass WeakReferenceCallbacks { 21357ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org public: 21457ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org typedef void (*Revivable)(Isolate* isolate, 21557ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org Persistent<T>* object, 21657ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org P* parameter); 21757ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org}; 21843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 219fb144a0716afe7ab8bf245f2391a9e53b3db3c89fschneider@chromium.org// --- Handles --- 22043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 221ed78ffdee6ea4f4f94420b464e7377b610fdac2ffschneider@chromium.org#define TYPE_CHECK(T, S) \ 222ed78ffdee6ea4f4f94420b464e7377b610fdac2ffschneider@chromium.org while (false) { \ 223ed78ffdee6ea4f4f94420b464e7377b610fdac2ffschneider@chromium.org *(static_cast<T* volatile*>(0)) = static_cast<S*>(0); \ 22443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } 22543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 22657ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org 22743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen/** 22843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * An object reference managed by the v8 garbage collector. 22943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * 23043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * All objects returned from v8 have to be tracked by the garbage 23143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * collector so that it knows that the objects are still alive. Also, 23243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * because the garbage collector may move objects, it is unsafe to 23343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * point directly to an object. Instead, all objects are stored in 23443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * handles which are known by the garbage collector and updated 23543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * whenever an object moves. Handles should always be passed by value 23643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * (except in cases like out-parameters) and they should never be 23743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * allocated on the heap. 23843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * 23943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * There are two types of handles: local and persistent handles. 24043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * Local handles are light-weight and transient and typically used in 24143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * local operations. They are managed by HandleScopes. Persistent 24243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * handles can be used when storing objects across several independent 24343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * operations and have to be explicitly deallocated when they're no 24443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * longer used. 24543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * 24643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * It is safe to extract the object stored in the handle by 24743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * dereferencing the handle (for instance, to extract the Object* from 2487304bcac06a6a63b9f3dcebac2eeceada87ca146vegorov@chromium.org * a Handle<Object>); the value will still be governed by a handle 24943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * behind the scenes and the same rules apply to these values as to 25043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * their handles. 25143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen */ 25269ea3965ef6e0d3f020a402cf7e6b96b9cb651aekmillikin@chromium.orgtemplate <class T> class Handle { 25343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen public: 25443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen /** 25543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * Creates an empty handle. 25643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen */ 25732280cf2786219b2d9a668f7f00778fb59ac40b3mstarzinger@chromium.org V8_INLINE(Handle()) : val_(0) {} 25843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 25957ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org#ifdef V8_USE_UNSAFE_HANDLES 26043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen /** 26143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * Creates a new handle for the specified value. 26243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen */ 26332280cf2786219b2d9a668f7f00778fb59ac40b3mstarzinger@chromium.org V8_INLINE(explicit Handle(T* val)) : val_(val) {} 26457ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org#endif 26543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 26643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen /** 26743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * Creates a handle for the contents of the specified handle. This 26843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * constructor allows you to pass handles as arguments by value and 269727e995b7bba3c57fb1e5c156d386ca11894f781v * to assign between handles. However, if you try to assign between 27043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * incompatible handles, for instance from a Handle<String> to a 2717304bcac06a6a63b9f3dcebac2eeceada87ca146vegorov@chromium.org * Handle<Number> it will cause a compile-time error. Assigning 27243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * between compatible handles, for instance assigning a 27343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * Handle<String> to a variable declared as Handle<Value>, is legal 27443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * because String is a subclass of Value. 27543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen */ 27632280cf2786219b2d9a668f7f00778fb59ac40b3mstarzinger@chromium.org template <class S> V8_INLINE(Handle(Handle<S> that)) 27743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen : val_(reinterpret_cast<T*>(*that)) { 27843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen /** 27943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * This check fails when trying to convert between incompatible 28043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * handles. For example, converting from a Handle<String> to a 28143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * Handle<Number>. 28243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen */ 28343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen TYPE_CHECK(T, S); 28443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } 28543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 28643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen /** 28743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * Returns true if the handle is empty. 28843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen */ 28932280cf2786219b2d9a668f7f00778fb59ac40b3mstarzinger@chromium.org V8_INLINE(bool IsEmpty() const) { return val_ == 0; } 29043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 29143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen /** 29243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * Sets the handle to be empty. IsEmpty() will then return true. 29343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen */ 29432280cf2786219b2d9a668f7f00778fb59ac40b3mstarzinger@chromium.org V8_INLINE(void Clear()) { val_ = 0; } 295b645116853c677aca8a316381b87441ba6004f67danno@chromium.org 29632280cf2786219b2d9a668f7f00778fb59ac40b3mstarzinger@chromium.org V8_INLINE(T* operator->() const) { return val_; } 297b645116853c677aca8a316381b87441ba6004f67danno@chromium.org 29832280cf2786219b2d9a668f7f00778fb59ac40b3mstarzinger@chromium.org V8_INLINE(T* operator*() const) { return val_; } 29943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 30043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen /** 30143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * Checks whether two handles are the same. 30243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * Returns true if both are empty, or if the objects 30343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * to which they refer are identical. 30443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * The handles' references are not checked. 30543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen */ 30657ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org template <class S> V8_INLINE(bool operator==(const Handle<S> that) const) { 30718ad94b919217ffbcd2d3159eeb5f8c588761c47ager@chromium.org internal::Object** a = reinterpret_cast<internal::Object**>(**this); 30818ad94b919217ffbcd2d3159eeb5f8c588761c47ager@chromium.org internal::Object** b = reinterpret_cast<internal::Object**>(*that); 30943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen if (a == 0) return b == 0; 31043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen if (b == 0) return false; 31143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen return *a == *b; 31243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } 31343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 31457ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org#ifndef V8_USE_UNSAFE_HANDLES 31557ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org template <class S> V8_INLINE( 31657ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org bool operator==(const Persistent<S>& that) const) { 31757ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org internal::Object** a = reinterpret_cast<internal::Object**>(**this); 31857ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org internal::Object** b = reinterpret_cast<internal::Object**>(*that); 31957ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org if (a == 0) return b == 0; 32057ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org if (b == 0) return false; 32157ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org return *a == *b; 32257ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org } 32357ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org#endif 32457ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org 32543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen /** 32643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * Checks whether two handles are different. 32743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * Returns true if only one of the handles is empty, or if 32843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * the objects to which they refer are different. 32943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * The handles' references are not checked. 33043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen */ 33132280cf2786219b2d9a668f7f00778fb59ac40b3mstarzinger@chromium.org template <class S> V8_INLINE(bool operator!=(Handle<S> that) const) { 33243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen return !operator==(that); 33343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } 33443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 33532280cf2786219b2d9a668f7f00778fb59ac40b3mstarzinger@chromium.org template <class S> V8_INLINE(static Handle<T> Cast(Handle<S> that)) { 33618ad94b919217ffbcd2d3159eeb5f8c588761c47ager@chromium.org#ifdef V8_ENABLE_CHECKS 33718ad94b919217ffbcd2d3159eeb5f8c588761c47ager@chromium.org // If we're going to perform the type check then we have to check 33818ad94b919217ffbcd2d3159eeb5f8c588761c47ager@chromium.org // that the handle isn't empty before doing the checked cast. 33943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen if (that.IsEmpty()) return Handle<T>(); 34018ad94b919217ffbcd2d3159eeb5f8c588761c47ager@chromium.org#endif 34143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen return Handle<T>(T::Cast(*that)); 34243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } 34343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 34432280cf2786219b2d9a668f7f00778fb59ac40b3mstarzinger@chromium.org template <class S> V8_INLINE(Handle<S> As()) { 345ce5e87bd905d592a8bd612b3dedf7a994177c13aager@chromium.org return Handle<S>::Cast(*this); 346ce5e87bd905d592a8bd612b3dedf7a994177c13aager@chromium.org } 347ce5e87bd905d592a8bd612b3dedf7a994177c13aager@chromium.org 34857ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org#ifndef V8_USE_UNSAFE_HANDLES 34957ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org V8_INLINE(static Handle<T> New(Isolate* isolate, Handle<T> that)) { 35057ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org return New(isolate, that.val_); 35157ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org } 35257ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org // TODO(dcarney): remove before cutover 35357ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org V8_INLINE(static Handle<T> New(Isolate* isolate, const Persistent<T>& that)) { 35457ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org return New(isolate, that.val_); 35557ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org } 35657ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org 35757ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org#ifndef V8_ALLOW_ACCESS_TO_RAW_HANDLE_CONSTRUCTOR 35857ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org 35957ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org private: 36057ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org#endif 36157ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org /** 36257ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org * Creates a new handle for the specified value. 36357ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org */ 36457ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org V8_INLINE(explicit Handle(T* val)) : val_(val) {} 36557ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org#endif 36657ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org 36743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen private: 368f95d4b920abb640ab0986d138ad559a7d3b91d04danno@chromium.org friend class Utils; 369b99c75496e05b4cd58815ada1e39e6029130d11crossberg@chromium.org template<class F> friend class Persistent; 370b99c75496e05b4cd58815ada1e39e6029130d11crossberg@chromium.org template<class F> friend class Local; 37157ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org friend class Arguments; 372b99c75496e05b4cd58815ada1e39e6029130d11crossberg@chromium.org template<class F> friend class FunctionCallbackInfo; 373b99c75496e05b4cd58815ada1e39e6029130d11crossberg@chromium.org template<class F> friend class PropertyCallbackInfo; 374f95d4b920abb640ab0986d138ad559a7d3b91d04danno@chromium.org template<class F> friend class internal::CustomArguments; 37557ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org friend class AccessorInfo; 37657ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org friend Handle<Primitive> Undefined(Isolate* isolate); 37757ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org friend Handle<Primitive> Null(Isolate* isolate); 37857ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org friend Handle<Boolean> True(Isolate* isolate); 37957ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org friend Handle<Boolean> False(Isolate* isolate); 38057ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org friend class Context; 381b99c75496e05b4cd58815ada1e39e6029130d11crossberg@chromium.org friend class HandleScope; 38257ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org 38357ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org#ifndef V8_USE_UNSAFE_HANDLES 38457ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org V8_INLINE(static Handle<T> New(Isolate* isolate, T* that)); 38557ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org#endif 38657ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org 38743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen T* val_; 38843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen}; 38943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 39043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 391594006017e46d82ed7146611dc12c20e3c509c7ddanno@chromium.org// A value which will never be returned by Local::Eternalize 392594006017e46d82ed7146611dc12c20e3c509c7ddanno@chromium.org// Useful for static initialization 393594006017e46d82ed7146611dc12c20e3c509c7ddanno@chromium.orgconst int kUninitializedEternalIndex = -1; 394594006017e46d82ed7146611dc12c20e3c509c7ddanno@chromium.org 395594006017e46d82ed7146611dc12c20e3c509c7ddanno@chromium.org 39643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen/** 39743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * A light-weight stack-allocated object handle. All operations 39843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * that return objects from within v8 return them in local handles. They 39943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * are created within HandleScopes, and all local handles allocated within a 40043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * handle scope are destroyed when the handle scope is destroyed. Hence it 40143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * is not necessary to explicitly deallocate local handles. 40243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen */ 40357ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org// TODO(dcarney): deprecate entire class 40469ea3965ef6e0d3f020a402cf7e6b96b9cb651aekmillikin@chromium.orgtemplate <class T> class Local : public Handle<T> { 40543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen public: 40632280cf2786219b2d9a668f7f00778fb59ac40b3mstarzinger@chromium.org V8_INLINE(Local()); 40732280cf2786219b2d9a668f7f00778fb59ac40b3mstarzinger@chromium.org template <class S> V8_INLINE(Local(Local<S> that)) 40843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen : Handle<T>(reinterpret_cast<T*>(*that)) { 40943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen /** 41043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * This check fails when trying to convert between incompatible 41143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * handles. For example, converting from a Handle<String> to a 41243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * Handle<Number>. 41343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen */ 41443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen TYPE_CHECK(T, S); 41543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } 41657ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org 41757ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org 41857ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org#ifdef V8_USE_UNSAFE_HANDLES 41932280cf2786219b2d9a668f7f00778fb59ac40b3mstarzinger@chromium.org template <class S> V8_INLINE(Local(S* that) : Handle<T>(that)) { } 42057ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org#endif 42157ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org 42232280cf2786219b2d9a668f7f00778fb59ac40b3mstarzinger@chromium.org template <class S> V8_INLINE(static Local<T> Cast(Local<S> that)) { 42318ad94b919217ffbcd2d3159eeb5f8c588761c47ager@chromium.org#ifdef V8_ENABLE_CHECKS 42418ad94b919217ffbcd2d3159eeb5f8c588761c47ager@chromium.org // If we're going to perform the type check then we have to check 42518ad94b919217ffbcd2d3159eeb5f8c588761c47ager@chromium.org // that the handle isn't empty before doing the checked cast. 42643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen if (that.IsEmpty()) return Local<T>(); 42718ad94b919217ffbcd2d3159eeb5f8c588761c47ager@chromium.org#endif 42843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen return Local<T>(T::Cast(*that)); 42943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } 43057ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org#ifndef V8_USE_UNSAFE_HANDLES 43157ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org template <class S> V8_INLINE(Local(Handle<S> that)) 43257ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org : Handle<T>(reinterpret_cast<T*>(*that)) { 43357ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org TYPE_CHECK(T, S); 43457ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org } 43557ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org#endif 43643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 43732280cf2786219b2d9a668f7f00778fb59ac40b3mstarzinger@chromium.org template <class S> V8_INLINE(Local<S> As()) { 438ce5e87bd905d592a8bd612b3dedf7a994177c13aager@chromium.org return Local<S>::Cast(*this); 439ce5e87bd905d592a8bd612b3dedf7a994177c13aager@chromium.org } 440ce5e87bd905d592a8bd612b3dedf7a994177c13aager@chromium.org 441594006017e46d82ed7146611dc12c20e3c509c7ddanno@chromium.org // Keep this Local alive for the lifetime of the Isolate. 442594006017e46d82ed7146611dc12c20e3c509c7ddanno@chromium.org // It remains retrievable via the returned index, 443594006017e46d82ed7146611dc12c20e3c509c7ddanno@chromium.org V8_INLINE(int Eternalize(Isolate* isolate)); 444594006017e46d82ed7146611dc12c20e3c509c7ddanno@chromium.org V8_INLINE(static Local<T> GetEternal(Isolate* isolate, int index)); 445594006017e46d82ed7146611dc12c20e3c509c7ddanno@chromium.org 44632280cf2786219b2d9a668f7f00778fb59ac40b3mstarzinger@chromium.org /** 44732280cf2786219b2d9a668f7f00778fb59ac40b3mstarzinger@chromium.org * Create a local handle for the content of another handle. 44832280cf2786219b2d9a668f7f00778fb59ac40b3mstarzinger@chromium.org * The referee is kept alive by the local handle even when 44932280cf2786219b2d9a668f7f00778fb59ac40b3mstarzinger@chromium.org * the original handle is destroyed/disposed. 45043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen */ 45132280cf2786219b2d9a668f7f00778fb59ac40b3mstarzinger@chromium.org V8_INLINE(static Local<T> New(Handle<T> that)); 45232280cf2786219b2d9a668f7f00778fb59ac40b3mstarzinger@chromium.org V8_INLINE(static Local<T> New(Isolate* isolate, Handle<T> that)); 45357ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org#ifndef V8_USE_UNSAFE_HANDLES 45457ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org // TODO(dcarney): remove before cutover 45557ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org V8_INLINE(static Local<T> New(Isolate* isolate, const Persistent<T>& that)); 45643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 45757ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org#ifndef V8_ALLOW_ACCESS_TO_RAW_HANDLE_CONSTRUCTOR 45857ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org 45957ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org private: 46057ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org#endif 46157ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org template <class S> V8_INLINE(Local(S* that) : Handle<T>(that)) { } 46257ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org#endif 46357ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org 46457ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org private: 465f95d4b920abb640ab0986d138ad559a7d3b91d04danno@chromium.org friend class Utils; 466b99c75496e05b4cd58815ada1e39e6029130d11crossberg@chromium.org template<class F> friend class Persistent; 467b99c75496e05b4cd58815ada1e39e6029130d11crossberg@chromium.org template<class F> friend class Handle; 46857ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org friend class Arguments; 469b99c75496e05b4cd58815ada1e39e6029130d11crossberg@chromium.org template<class F> friend class FunctionCallbackInfo; 470b99c75496e05b4cd58815ada1e39e6029130d11crossberg@chromium.org template<class F> friend class PropertyCallbackInfo; 47157ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org friend class String; 47257ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org friend class Object; 47357ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org friend class AccessorInfo; 47457ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org friend class Context; 475f95d4b920abb640ab0986d138ad559a7d3b91d04danno@chromium.org template<class F> friend class internal::CustomArguments; 476b99c75496e05b4cd58815ada1e39e6029130d11crossberg@chromium.org friend class HandleScope; 47757ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org 47857ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org V8_INLINE(static Local<T> New(Isolate* isolate, T* that)); 47957ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org}; 48043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 48143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen/** 48243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * An object reference that is independent of any handle scope. Where 483727e995b7bba3c57fb1e5c156d386ca11894f781v * a Local handle only lives as long as the HandleScope in which it was 48443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * allocated, a Persistent handle remains valid until it is explicitly 48543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * disposed. 48643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * 48743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * A persistent handle contains a reference to a storage cell within 48843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * the v8 engine which holds an object value and which is updated by 48943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * the garbage collector whenever the object is moved. A new storage 49043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * cell can be created using Persistent::New and existing handles can 49143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * be disposed using Persistent::Dispose. Since persistent handles 49243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * are passed by value you may have many persistent handle objects 49343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * that point to the same storage cell. For instance, if you pass a 49443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * persistent handle as an argument to a function you will not get two 49543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * different storage cells but rather two references to the same 49643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * storage cell. 49743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen */ 49857ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.orgtemplate <class T> class Persistent // NOLINT 49957ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org#ifdef V8_USE_UNSAFE_HANDLES 50057ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org : public Handle<T> { 50157ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org#else 50257ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org { // NOLINT 50357ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org#endif 50443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen public: 50557ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org#ifndef V8_USE_UNSAFE_HANDLES 50657ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org V8_INLINE(Persistent()) : val_(0) { } 507b752d4061aaeb7d6a6ec368607871789d54b0207dslomov@chromium.org // TODO(dcarney): add this back before cutover. 508b752d4061aaeb7d6a6ec368607871789d54b0207dslomov@chromium.org// V8_INLINE(~Persistent()) { 509b752d4061aaeb7d6a6ec368607871789d54b0207dslomov@chromium.org// Dispose(); 510b752d4061aaeb7d6a6ec368607871789d54b0207dslomov@chromium.org// } 51157ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org V8_INLINE(bool IsEmpty() const) { return val_ == 0; } 51257ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org // TODO(dcarney): remove somehow before cutover 51357ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org // The handle should either be 0, or a pointer to a live cell. 51457ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org V8_INLINE(void Clear()) { val_ = 0; } 51557ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org 51657ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org /** 51757ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org * A constructor that creates a new global cell pointing to that. In contrast 51857ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org * to the copy constructor, this creates a new persistent handle which needs 51957ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org * to be separately disposed. 52057ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org */ 52157ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org template <class S> V8_INLINE(Persistent(Isolate* isolate, Handle<S> that)) 522f95d4b920abb640ab0986d138ad559a7d3b91d04danno@chromium.org : val_(New(isolate, *that)) { } 52357ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org 524b99c75496e05b4cd58815ada1e39e6029130d11crossberg@chromium.org template <class S> V8_INLINE(Persistent(Isolate* isolate, 5251510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org const Persistent<S>& that)) // NOLINT 526f95d4b920abb640ab0986d138ad559a7d3b91d04danno@chromium.org : val_(New(isolate, *that)) { } 527b99c75496e05b4cd58815ada1e39e6029130d11crossberg@chromium.org 52857ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org#else 52943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen /** 53043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * Creates an empty persistent handle that doesn't point to any 53143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * storage cell. 53243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen */ 53357ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org V8_INLINE(Persistent()) : Handle<T>() { } 53443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 53543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen /** 53643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * Creates a persistent handle for the same storage cell as the 53743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * specified handle. This constructor allows you to pass persistent 53843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * handles as arguments by value and to assign between persistent 539727e995b7bba3c57fb1e5c156d386ca11894f781v * handles. However, attempting to assign between incompatible 54043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * persistent handles, for instance from a Persistent<String> to a 5417304bcac06a6a63b9f3dcebac2eeceada87ca146vegorov@chromium.org * Persistent<Number> will cause a compile-time error. Assigning 54243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * between compatible persistent handles, for instance assigning a 54343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * Persistent<String> to a variable declared as Persistent<Value>, 544727e995b7bba3c57fb1e5c156d386ca11894f781v * is allowed as String is a subclass of Value. 54543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen */ 54632280cf2786219b2d9a668f7f00778fb59ac40b3mstarzinger@chromium.org template <class S> V8_INLINE(Persistent(Persistent<S> that)) 54743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen : Handle<T>(reinterpret_cast<T*>(*that)) { 54843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen /** 54943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * This check fails when trying to convert between incompatible 55043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * handles. For example, converting from a Handle<String> to a 55143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * Handle<Number>. 55243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen */ 55343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen TYPE_CHECK(T, S); 55443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } 55543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 55632280cf2786219b2d9a668f7f00778fb59ac40b3mstarzinger@chromium.org template <class S> V8_INLINE(Persistent(S* that)) : Handle<T>(that) { } 55743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 5585a8ca6c70c6fc9716f18f6223c98d1fef5752cf6kasperl@chromium.org /** 559ca29dd85fa02449d17188f5a6ff9a7cdf2ad9680danno@chromium.org * A constructor that creates a new global cell pointing to that. In contrast 560ca29dd85fa02449d17188f5a6ff9a7cdf2ad9680danno@chromium.org * to the copy constructor, this creates a new persistent handle which needs 561ca29dd85fa02449d17188f5a6ff9a7cdf2ad9680danno@chromium.org * to be separately disposed. 562ca29dd85fa02449d17188f5a6ff9a7cdf2ad9680danno@chromium.org */ 563ca29dd85fa02449d17188f5a6ff9a7cdf2ad9680danno@chromium.org template <class S> V8_INLINE(Persistent(Isolate* isolate, Handle<S> that)) 564ca29dd85fa02449d17188f5a6ff9a7cdf2ad9680danno@chromium.org : Handle<T>(New(isolate, that)) { } 565ca29dd85fa02449d17188f5a6ff9a7cdf2ad9680danno@chromium.org 566ca29dd85fa02449d17188f5a6ff9a7cdf2ad9680danno@chromium.org /** 5675a8ca6c70c6fc9716f18f6223c98d1fef5752cf6kasperl@chromium.org * "Casts" a plain handle which is known to be a persistent handle 5685a8ca6c70c6fc9716f18f6223c98d1fef5752cf6kasperl@chromium.org * to a persistent handle. 5695a8ca6c70c6fc9716f18f6223c98d1fef5752cf6kasperl@chromium.org */ 57032280cf2786219b2d9a668f7f00778fb59ac40b3mstarzinger@chromium.org template <class S> explicit V8_INLINE(Persistent(Handle<S> that)) 57143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen : Handle<T>(*that) { } 57243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 57357ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org#endif 57457ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org 575c118402c43ae44cf9255d36608a44886c98537c5jkummerow@chromium.org#ifdef V8_USE_UNSAFE_HANDLES 57632280cf2786219b2d9a668f7f00778fb59ac40b3mstarzinger@chromium.org template <class S> V8_INLINE(static Persistent<T> Cast(Persistent<S> that)) { 57718ad94b919217ffbcd2d3159eeb5f8c588761c47ager@chromium.org#ifdef V8_ENABLE_CHECKS 57818ad94b919217ffbcd2d3159eeb5f8c588761c47ager@chromium.org // If we're going to perform the type check then we have to check 57918ad94b919217ffbcd2d3159eeb5f8c588761c47ager@chromium.org // that the handle isn't empty before doing the checked cast. 58043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen if (that.IsEmpty()) return Persistent<T>(); 58118ad94b919217ffbcd2d3159eeb5f8c588761c47ager@chromium.org#endif 58243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen return Persistent<T>(T::Cast(*that)); 58343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } 58443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 58532280cf2786219b2d9a668f7f00778fb59ac40b3mstarzinger@chromium.org template <class S> V8_INLINE(Persistent<S> As()) { 586ce5e87bd905d592a8bd612b3dedf7a994177c13aager@chromium.org return Persistent<S>::Cast(*this); 587ce5e87bd905d592a8bd612b3dedf7a994177c13aager@chromium.org } 588ce5e87bd905d592a8bd612b3dedf7a994177c13aager@chromium.org 589c118402c43ae44cf9255d36608a44886c98537c5jkummerow@chromium.org#else 590c118402c43ae44cf9255d36608a44886c98537c5jkummerow@chromium.org template <class S> 591c118402c43ae44cf9255d36608a44886c98537c5jkummerow@chromium.org V8_INLINE(static Persistent<T>& Cast(Persistent<S>& that)) { // NOLINT 592c118402c43ae44cf9255d36608a44886c98537c5jkummerow@chromium.org#ifdef V8_ENABLE_CHECKS 593c118402c43ae44cf9255d36608a44886c98537c5jkummerow@chromium.org // If we're going to perform the type check then we have to check 594c118402c43ae44cf9255d36608a44886c98537c5jkummerow@chromium.org // that the handle isn't empty before doing the checked cast. 595c118402c43ae44cf9255d36608a44886c98537c5jkummerow@chromium.org if (!that.IsEmpty()) T::Cast(*that); 596c118402c43ae44cf9255d36608a44886c98537c5jkummerow@chromium.org#endif 597c118402c43ae44cf9255d36608a44886c98537c5jkummerow@chromium.org return reinterpret_cast<Persistent<T>&>(that); 598c118402c43ae44cf9255d36608a44886c98537c5jkummerow@chromium.org } 599c118402c43ae44cf9255d36608a44886c98537c5jkummerow@chromium.org 600c118402c43ae44cf9255d36608a44886c98537c5jkummerow@chromium.org template <class S> V8_INLINE(Persistent<S>& As()) { // NOLINT 601c118402c43ae44cf9255d36608a44886c98537c5jkummerow@chromium.org return Persistent<S>::Cast(*this); 602c118402c43ae44cf9255d36608a44886c98537c5jkummerow@chromium.org } 603c118402c43ae44cf9255d36608a44886c98537c5jkummerow@chromium.org#endif 604c118402c43ae44cf9255d36608a44886c98537c5jkummerow@chromium.org 605f95d4b920abb640ab0986d138ad559a7d3b91d04danno@chromium.org#ifdef V8_USE_UNSAFE_HANDLES 606d16d8531698e91e9c60a7db9e0ba3c3bb15aff20mvstanton@chromium.org V8_DEPRECATED(static Persistent<T> New(Handle<T> that)); 607d16d8531698e91e9c60a7db9e0ba3c3bb15aff20mvstanton@chromium.org V8_INLINE(static Persistent<T> New(Isolate* isolate, Handle<T> that)); 60857ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org V8_INLINE(static Persistent<T> New(Isolate* isolate, Persistent<T> that)); 60957ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org#endif 610d16d8531698e91e9c60a7db9e0ba3c3bb15aff20mvstanton@chromium.org 61157ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org#ifndef V8_USE_UNSAFE_HANDLES 61257ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org template <class S> V8_INLINE( 61357ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org bool operator==(const Persistent<S>& that) const) { 61457ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org internal::Object** a = reinterpret_cast<internal::Object**>(**this); 61557ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org internal::Object** b = reinterpret_cast<internal::Object**>(*that); 61657ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org if (a == 0) return b == 0; 61757ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org if (b == 0) return false; 61857ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org return *a == *b; 61957ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org } 62057ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org 62157ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org template <class S> V8_INLINE(bool operator==(const Handle<S> that) const) { 62257ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org internal::Object** a = reinterpret_cast<internal::Object**>(**this); 62357ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org internal::Object** b = reinterpret_cast<internal::Object**>(*that); 62457ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org if (a == 0) return b == 0; 62557ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org if (b == 0) return false; 62657ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org return *a == *b; 62757ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org } 62857ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org#endif 62957ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org 63057ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org V8_INLINE(void Dispose()); 63143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 63243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen /** 63343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * Releases the storage cell referenced by this persistent handle. 63443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * Does not remove the reference to the cell from any handles. 6357304bcac06a6a63b9f3dcebac2eeceada87ca146vegorov@chromium.org * This handle's reference, and any other references to the storage 63643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * cell remain and IsEmpty will still return false. 63743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen */ 638b99c75496e05b4cd58815ada1e39e6029130d11crossberg@chromium.org // TODO(dcarney): deprecate 639b99c75496e05b4cd58815ada1e39e6029130d11crossberg@chromium.org V8_INLINE(void Dispose(Isolate* isolate)) { Dispose(); } 64043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 641b99c75496e05b4cd58815ada1e39e6029130d11crossberg@chromium.org /** 642b99c75496e05b4cd58815ada1e39e6029130d11crossberg@chromium.org * Make the reference to this object weak. When only weak handles 643b99c75496e05b4cd58815ada1e39e6029130d11crossberg@chromium.org * refer to the object, the garbage collector will perform a 644b99c75496e05b4cd58815ada1e39e6029130d11crossberg@chromium.org * callback to the given V8::NearDeathCallback function, passing 645b99c75496e05b4cd58815ada1e39e6029130d11crossberg@chromium.org * it the object reference and the given parameters. 646b99c75496e05b4cd58815ada1e39e6029130d11crossberg@chromium.org */ 64757ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org template<typename S, typename P> 64857ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org V8_INLINE(void MakeWeak( 64957ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org P* parameters, 65057ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org typename WeakReferenceCallbacks<S, P>::Revivable callback)); 65157ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org 65257ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org template<typename P> 65357ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org V8_INLINE(void MakeWeak( 65457ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org P* parameters, 65557ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org typename WeakReferenceCallbacks<T, P>::Revivable callback)); 656d16d8531698e91e9c60a7db9e0ba3c3bb15aff20mvstanton@chromium.org 657b99c75496e05b4cd58815ada1e39e6029130d11crossberg@chromium.org template<typename S, typename P> 658f95d4b920abb640ab0986d138ad559a7d3b91d04danno@chromium.org V8_DEPRECATED(void MakeWeak( 659b99c75496e05b4cd58815ada1e39e6029130d11crossberg@chromium.org Isolate* isolate, 660b99c75496e05b4cd58815ada1e39e6029130d11crossberg@chromium.org P* parameters, 661f95d4b920abb640ab0986d138ad559a7d3b91d04danno@chromium.org typename WeakReferenceCallbacks<S, P>::Revivable callback)); 662b99c75496e05b4cd58815ada1e39e6029130d11crossberg@chromium.org 663b99c75496e05b4cd58815ada1e39e6029130d11crossberg@chromium.org template<typename P> 664f95d4b920abb640ab0986d138ad559a7d3b91d04danno@chromium.org V8_DEPRECATED(void MakeWeak( 665b99c75496e05b4cd58815ada1e39e6029130d11crossberg@chromium.org Isolate* isolate, 666b99c75496e05b4cd58815ada1e39e6029130d11crossberg@chromium.org P* parameters, 667f95d4b920abb640ab0986d138ad559a7d3b91d04danno@chromium.org typename WeakReferenceCallbacks<T, P>::Revivable callback)); 668b99c75496e05b4cd58815ada1e39e6029130d11crossberg@chromium.org 66957ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org V8_INLINE(void ClearWeak()); 67043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 671b99c75496e05b4cd58815ada1e39e6029130d11crossberg@chromium.org // TODO(dcarney): deprecate 672b99c75496e05b4cd58815ada1e39e6029130d11crossberg@chromium.org V8_INLINE(void ClearWeak(Isolate* isolate)) { ClearWeak(); } 67343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 67443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen /** 675d16d8531698e91e9c60a7db9e0ba3c3bb15aff20mvstanton@chromium.org * Marks the reference to this object independent. Garbage collector is free 676d16d8531698e91e9c60a7db9e0ba3c3bb15aff20mvstanton@chromium.org * to ignore any object groups containing this object. Weak callback for an 677d16d8531698e91e9c60a7db9e0ba3c3bb15aff20mvstanton@chromium.org * independent handle should not assume that it will be preceded by a global 678d16d8531698e91e9c60a7db9e0ba3c3bb15aff20mvstanton@chromium.org * GC prologue callback or followed by a global GC epilogue callback. 679c53e10d01c5495df3896b9d318910b58688c6929kmillikin@chromium.org */ 680b99c75496e05b4cd58815ada1e39e6029130d11crossberg@chromium.org V8_INLINE(void MarkIndependent()); 681e4ac3ef2f6fa9300bc78c5a4cb7d4cb66ac6e83dmvstanton@chromium.org 682b99c75496e05b4cd58815ada1e39e6029130d11crossberg@chromium.org // TODO(dcarney): deprecate 683b99c75496e05b4cd58815ada1e39e6029130d11crossberg@chromium.org V8_INLINE(void MarkIndependent(Isolate* isolate)) { MarkIndependent(); } 684d16d8531698e91e9c60a7db9e0ba3c3bb15aff20mvstanton@chromium.org 685e4ac3ef2f6fa9300bc78c5a4cb7d4cb66ac6e83dmvstanton@chromium.org /** 686d16d8531698e91e9c60a7db9e0ba3c3bb15aff20mvstanton@chromium.org * Marks the reference to this object partially dependent. Partially dependent 687d16d8531698e91e9c60a7db9e0ba3c3bb15aff20mvstanton@chromium.org * handles only depend on other partially dependent handles and these 688d16d8531698e91e9c60a7db9e0ba3c3bb15aff20mvstanton@chromium.org * dependencies are provided through object groups. It provides a way to build 689d16d8531698e91e9c60a7db9e0ba3c3bb15aff20mvstanton@chromium.org * smaller object groups for young objects that represent only a subset of all 690d16d8531698e91e9c60a7db9e0ba3c3bb15aff20mvstanton@chromium.org * external dependencies. This mark is automatically cleared after each 691d16d8531698e91e9c60a7db9e0ba3c3bb15aff20mvstanton@chromium.org * garbage collection. 692e4ac3ef2f6fa9300bc78c5a4cb7d4cb66ac6e83dmvstanton@chromium.org */ 693b99c75496e05b4cd58815ada1e39e6029130d11crossberg@chromium.org V8_INLINE(void MarkPartiallyDependent()); 694c53e10d01c5495df3896b9d318910b58688c6929kmillikin@chromium.org 695b99c75496e05b4cd58815ada1e39e6029130d11crossberg@chromium.org // TODO(dcarney): deprecate 696b99c75496e05b4cd58815ada1e39e6029130d11crossberg@chromium.org V8_INLINE(void MarkPartiallyDependent(Isolate* isolate)) { 697b99c75496e05b4cd58815ada1e39e6029130d11crossberg@chromium.org MarkPartiallyDependent(); 698b99c75496e05b4cd58815ada1e39e6029130d11crossberg@chromium.org } 699d16d8531698e91e9c60a7db9e0ba3c3bb15aff20mvstanton@chromium.org 700b99c75496e05b4cd58815ada1e39e6029130d11crossberg@chromium.org V8_INLINE(bool IsIndependent() const); 70189e18f5599cb4cd462cb1ed324addd7388fb4d60rossberg@chromium.org 702b99c75496e05b4cd58815ada1e39e6029130d11crossberg@chromium.org // TODO(dcarney): deprecate 703b99c75496e05b4cd58815ada1e39e6029130d11crossberg@chromium.org V8_INLINE(bool IsIndependent(Isolate* isolate) const) { 704b99c75496e05b4cd58815ada1e39e6029130d11crossberg@chromium.org return IsIndependent(); 705b99c75496e05b4cd58815ada1e39e6029130d11crossberg@chromium.org } 706d16d8531698e91e9c60a7db9e0ba3c3bb15aff20mvstanton@chromium.org 70789e18f5599cb4cd462cb1ed324addd7388fb4d60rossberg@chromium.org /** Checks if the handle holds the only reference to an object. */ 708b99c75496e05b4cd58815ada1e39e6029130d11crossberg@chromium.org V8_INLINE(bool IsNearDeath() const); 709d16d8531698e91e9c60a7db9e0ba3c3bb15aff20mvstanton@chromium.org 710b99c75496e05b4cd58815ada1e39e6029130d11crossberg@chromium.org // TODO(dcarney): deprecate 711b99c75496e05b4cd58815ada1e39e6029130d11crossberg@chromium.org V8_INLINE(bool IsNearDeath(Isolate* isolate) const) { return IsNearDeath(); } 71243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 71389e18f5599cb4cd462cb1ed324addd7388fb4d60rossberg@chromium.org /** Returns true if the handle's reference is weak. */ 714b99c75496e05b4cd58815ada1e39e6029130d11crossberg@chromium.org V8_INLINE(bool IsWeak() const); 71543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 716b99c75496e05b4cd58815ada1e39e6029130d11crossberg@chromium.org // TODO(dcarney): deprecate 717b99c75496e05b4cd58815ada1e39e6029130d11crossberg@chromium.org V8_INLINE(bool IsWeak(Isolate* isolate) const) { return IsWeak(); } 718d16d8531698e91e9c60a7db9e0ba3c3bb15aff20mvstanton@chromium.org 719b08986cb66c3f6687247cb6da186c1e73057e399whesse@chromium.org /** 720d16d8531698e91e9c60a7db9e0ba3c3bb15aff20mvstanton@chromium.org * Assigns a wrapper class ID to the handle. See RetainedObjectInfo interface 721d16d8531698e91e9c60a7db9e0ba3c3bb15aff20mvstanton@chromium.org * description in v8-profiler.h for details. 722b08986cb66c3f6687247cb6da186c1e73057e399whesse@chromium.org */ 723b99c75496e05b4cd58815ada1e39e6029130d11crossberg@chromium.org V8_INLINE(void SetWrapperClassId(uint16_t class_id)); 724d16d8531698e91e9c60a7db9e0ba3c3bb15aff20mvstanton@chromium.org 725b99c75496e05b4cd58815ada1e39e6029130d11crossberg@chromium.org // TODO(dcarney): deprecate 726b99c75496e05b4cd58815ada1e39e6029130d11crossberg@chromium.org V8_INLINE(void SetWrapperClassId(Isolate* isolate, uint16_t class_id)) { 727b99c75496e05b4cd58815ada1e39e6029130d11crossberg@chromium.org SetWrapperClassId(class_id); 728b99c75496e05b4cd58815ada1e39e6029130d11crossberg@chromium.org } 729b08986cb66c3f6687247cb6da186c1e73057e399whesse@chromium.org 73089e18f5599cb4cd462cb1ed324addd7388fb4d60rossberg@chromium.org /** 731d16d8531698e91e9c60a7db9e0ba3c3bb15aff20mvstanton@chromium.org * Returns the class ID previously assigned to this handle or 0 if no class ID 732d16d8531698e91e9c60a7db9e0ba3c3bb15aff20mvstanton@chromium.org * was previously assigned. 73389e18f5599cb4cd462cb1ed324addd7388fb4d60rossberg@chromium.org */ 734b99c75496e05b4cd58815ada1e39e6029130d11crossberg@chromium.org V8_INLINE(uint16_t WrapperClassId() const); 735b99c75496e05b4cd58815ada1e39e6029130d11crossberg@chromium.org 736b99c75496e05b4cd58815ada1e39e6029130d11crossberg@chromium.org // TODO(dcarney): deprecate 737b99c75496e05b4cd58815ada1e39e6029130d11crossberg@chromium.org V8_INLINE(uint16_t WrapperClassId(Isolate* isolate) const) { 738b99c75496e05b4cd58815ada1e39e6029130d11crossberg@chromium.org return WrapperClassId(); 739b99c75496e05b4cd58815ada1e39e6029130d11crossberg@chromium.org } 74089e18f5599cb4cd462cb1ed324addd7388fb4d60rossberg@chromium.org 74157ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org /** 74257ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org * Disposes the current contents of the handle and replaces it. 74357ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org */ 74457ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org V8_INLINE(void Reset(Isolate* isolate, const Handle<T>& other)); 74557ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org 746b99c75496e05b4cd58815ada1e39e6029130d11crossberg@chromium.org#ifndef V8_USE_UNSAFE_HANDLES 747b99c75496e05b4cd58815ada1e39e6029130d11crossberg@chromium.org V8_INLINE(void Reset(Isolate* isolate, const Persistent<T>& other)); 748b99c75496e05b4cd58815ada1e39e6029130d11crossberg@chromium.org#endif 749b99c75496e05b4cd58815ada1e39e6029130d11crossberg@chromium.org 750906e2fb760f52fe6e75b744b1ea42576ea5b2c29ulan@chromium.org /** 751906e2fb760f52fe6e75b744b1ea42576ea5b2c29ulan@chromium.org * Returns the underlying raw pointer and clears the handle. The caller is 752906e2fb760f52fe6e75b744b1ea42576ea5b2c29ulan@chromium.org * responsible of eventually destroying the underlying object (by creating a 753906e2fb760f52fe6e75b744b1ea42576ea5b2c29ulan@chromium.org * Persistent handle which points to it and Disposing it). In the future, 754906e2fb760f52fe6e75b744b1ea42576ea5b2c29ulan@chromium.org * destructing a Persistent will also Dispose it. With this function, the 755906e2fb760f52fe6e75b744b1ea42576ea5b2c29ulan@chromium.org * embedder can let the Persistent go out of scope without it getting 756906e2fb760f52fe6e75b744b1ea42576ea5b2c29ulan@chromium.org * disposed. 757906e2fb760f52fe6e75b744b1ea42576ea5b2c29ulan@chromium.org */ 758906e2fb760f52fe6e75b744b1ea42576ea5b2c29ulan@chromium.org V8_INLINE(T* ClearAndLeak()); 759906e2fb760f52fe6e75b744b1ea42576ea5b2c29ulan@chromium.org 76057ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org#ifndef V8_USE_UNSAFE_HANDLES 76157ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org 76243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen private: 76357ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org // TODO(dcarney): make unlinkable before cutover 76457ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org V8_INLINE(Persistent(const Persistent& that)) : val_(that.val_) {} 76557ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org // TODO(dcarney): make unlinkable before cutover 76657ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org V8_INLINE(Persistent& operator=(const Persistent& that)) { // NOLINT 76757ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org this->val_ = that.val_; 76857ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org return *this; 76957ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org } 77057ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org 77157ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org public: 77257ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org#ifndef V8_ALLOW_ACCESS_TO_RAW_HANDLE_CONSTRUCTOR 77357ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org 77457ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org private: 77557ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org#endif 77657ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org // TODO(dcarney): remove before cutover 77757ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org template <class S> V8_INLINE(Persistent(S* that)) : val_(that) { } 778f95d4b920abb640ab0986d138ad559a7d3b91d04danno@chromium.org 77957ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org // TODO(dcarney): remove before cutover 78057ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org V8_INLINE(T* operator*() const) { return val_; } 78157ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org 78257ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org private: 78357ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org // TODO(dcarney): remove before cutover 78457ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org V8_INLINE(T* operator->() const) { return val_; } 78557ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org public: 78657ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org#endif 78757ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org 78857ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org private: 789f95d4b920abb640ab0986d138ad559a7d3b91d04danno@chromium.org friend class Utils; 790b99c75496e05b4cd58815ada1e39e6029130d11crossberg@chromium.org template<class F> friend class Handle; 791b99c75496e05b4cd58815ada1e39e6029130d11crossberg@chromium.org template<class F> friend class Local; 792f95d4b920abb640ab0986d138ad559a7d3b91d04danno@chromium.org template<class F> friend class Persistent; 7931fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org template<class F> friend class ReturnValue; 79457ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org 795f95d4b920abb640ab0986d138ad559a7d3b91d04danno@chromium.org V8_INLINE(static T* New(Isolate* isolate, T* that)); 79657ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org 79757ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org#ifndef V8_USE_UNSAFE_HANDLES 79857ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org T* val_; 79957ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org#endif 80043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen}; 80143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 80243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 803727e995b7bba3c57fb1e5c156d386ca11894f781v /** 80443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * A stack-allocated class that governs a number of local handles. 80543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * After a handle scope has been created, all local handles will be 80643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * allocated within that handle scope until either the handle scope is 80743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * deleted or another handle scope is created. If there is already a 80843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * handle scope and a new one is created, all allocations will take 809727e995b7bba3c57fb1e5c156d386ca11894f781v * place in the new handle scope until it is deleted. After that, 81043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * new handles will again be allocated in the original handle scope. 81143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * 81243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * After the handle scope of a local handle has been deleted the 81343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * garbage collector will no longer track the object stored in the 81443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * handle and may deallocate it. The behavior of accessing a handle 81543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * for which the handle scope has been deleted is undefined. 81643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen */ 817594006017e46d82ed7146611dc12c20e3c509c7ddanno@chromium.orgclass V8_EXPORT HandleScope { 81843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen public: 8192bda543d75374afd8d7e98f56ca99a57ae1b7bd1svenpanne@chromium.org // TODO(svenpanne) Deprecate me when Chrome is fixed! 820ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org HandleScope(); 82143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 8222bda543d75374afd8d7e98f56ca99a57ae1b7bd1svenpanne@chromium.org HandleScope(Isolate* isolate); 8232bda543d75374afd8d7e98f56ca99a57ae1b7bd1svenpanne@chromium.org 824ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org ~HandleScope(); 82543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 82643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen /** 82743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * Closes the handle scope and returns the value as a handle in the 82843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * previous scope, which is the new current scope after the call. 82943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen */ 83043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen template <class T> Local<T> Close(Handle<T> value); 83143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 83243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen /** 83343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * Counts the number of allocated handles. 83443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen */ 83543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen static int NumberOfHandles(); 83643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 83743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen /** 83843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * Creates a new handle with the given value. 83943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen */ 84018ad94b919217ffbcd2d3159eeb5f8c588761c47ager@chromium.org static internal::Object** CreateHandle(internal::Object* value); 84132280cf2786219b2d9a668f7f00778fb59ac40b3mstarzinger@chromium.org static internal::Object** CreateHandle(internal::Isolate* isolate, 84232280cf2786219b2d9a668f7f00778fb59ac40b3mstarzinger@chromium.org internal::Object* value); 843ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org // Faster version, uses HeapObject to obtain the current Isolate. 844ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org static internal::Object** CreateHandle(internal::HeapObject* value); 84543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 84643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen private: 84749a44674c6935d62c3e776dfbf896b7f6f34228ammassi@chromium.org // Make it hard to create heap-allocated or illegal handle scopes by 84849a44674c6935d62c3e776dfbf896b7f6f34228ammassi@chromium.org // disallowing certain operations. 84943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen HandleScope(const HandleScope&); 85043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen void operator=(const HandleScope&); 85143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen void* operator new(size_t size); 85243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen void operator delete(void*, size_t); 85343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 8543811b436bf328d2ace6fe79ce99aeda71f9f06d3ager@chromium.org // This Data class is accessible internally as HandleScopeData through a 8553811b436bf328d2ace6fe79ce99aeda71f9f06d3ager@chromium.org // typedef in the ImplementationUtilities class. 856594006017e46d82ed7146611dc12c20e3c509c7ddanno@chromium.org class V8_EXPORT Data { 85743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen public: 85818ad94b919217ffbcd2d3159eeb5f8c588761c47ager@chromium.org internal::Object** next; 85918ad94b919217ffbcd2d3159eeb5f8c588761c47ager@chromium.org internal::Object** limit; 860303ada708275d2d425b846fb237f1ba7598ee239lrn@chromium.org int level; 86132280cf2786219b2d9a668f7f00778fb59ac40b3mstarzinger@chromium.org V8_INLINE(void Initialize()) { 86243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen next = limit = NULL; 863303ada708275d2d425b846fb237f1ba7598ee239lrn@chromium.org level = 0; 86443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } 86543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen }; 866f0ac72dfa39ec827de605aafc57d4834237aa7f3whesse@chromium.org 8672bda543d75374afd8d7e98f56ca99a57ae1b7bd1svenpanne@chromium.org void Initialize(Isolate* isolate); 868303ada708275d2d425b846fb237f1ba7598ee239lrn@chromium.org void Leave(); 86943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 870ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org internal::Isolate* isolate_; 871303ada708275d2d425b846fb237f1ba7598ee239lrn@chromium.org internal::Object** prev_next_; 872303ada708275d2d425b846fb237f1ba7598ee239lrn@chromium.org internal::Object** prev_limit_; 87343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 874ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org // Allow for the active closing of HandleScopes which allows to pass a handle 875ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org // from the HandleScope being closed to the next top most HandleScope. 87643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen bool is_closed_; 87718ad94b919217ffbcd2d3159eeb5f8c588761c47ager@chromium.org internal::Object** RawClose(internal::Object** value); 87843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 87943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen friend class ImplementationUtilities; 88043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen}; 88143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 88243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 883fb144a0716afe7ab8bf245f2391a9e53b3db3c89fschneider@chromium.org// --- Special objects --- 88443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 88543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 88643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen/** 88743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * The superclass of values and API object templates. 88843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen */ 889594006017e46d82ed7146611dc12c20e3c509c7ddanno@chromium.orgclass V8_EXPORT Data { 89043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen private: 89143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen Data(); 89243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen}; 89343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 89443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 89543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen/** 89643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * Pre-compilation data that can be associated with a script. This 89743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * data can be calculated for a script in advance of actually 8989258b6bc66e09368ada54001f619d53b4fc976d5ager@chromium.org * compiling it, and can be stored between compilations. When script 899727e995b7bba3c57fb1e5c156d386ca11894f781v * data is given to the compile method compilation will be faster. 90043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen */ 901594006017e46d82ed7146611dc12c20e3c509c7ddanno@chromium.orgclass V8_EXPORT ScriptData { // NOLINT 90243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen public: 90343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen virtual ~ScriptData() { } 9042356e6fbe66ac3aa027b61cb43a3c3619b3c3a5evegorov@chromium.org 9059155e252524a2bf92aecd27493feafed86702312kmillikin@chromium.org /** 9069155e252524a2bf92aecd27493feafed86702312kmillikin@chromium.org * Pre-compiles the specified script (context-independent). 9079155e252524a2bf92aecd27493feafed86702312kmillikin@chromium.org * 9089155e252524a2bf92aecd27493feafed86702312kmillikin@chromium.org * \param input Pointer to UTF-8 script source code. 9099155e252524a2bf92aecd27493feafed86702312kmillikin@chromium.org * \param length Length of UTF-8 script source code. 9109155e252524a2bf92aecd27493feafed86702312kmillikin@chromium.org */ 91143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen static ScriptData* PreCompile(const char* input, int length); 91243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 9139155e252524a2bf92aecd27493feafed86702312kmillikin@chromium.org /** 9142356e6fbe66ac3aa027b61cb43a3c3619b3c3a5evegorov@chromium.org * Pre-compiles the specified script (context-independent). 9152356e6fbe66ac3aa027b61cb43a3c3619b3c3a5evegorov@chromium.org * 9162356e6fbe66ac3aa027b61cb43a3c3619b3c3a5evegorov@chromium.org * NOTE: Pre-compilation using this method cannot happen on another thread 9172356e6fbe66ac3aa027b61cb43a3c3619b3c3a5evegorov@chromium.org * without using Lockers. 9182356e6fbe66ac3aa027b61cb43a3c3619b3c3a5evegorov@chromium.org * 9192356e6fbe66ac3aa027b61cb43a3c3619b3c3a5evegorov@chromium.org * \param source Script source code. 9202356e6fbe66ac3aa027b61cb43a3c3619b3c3a5evegorov@chromium.org */ 9212356e6fbe66ac3aa027b61cb43a3c3619b3c3a5evegorov@chromium.org static ScriptData* PreCompile(Handle<String> source); 9222356e6fbe66ac3aa027b61cb43a3c3619b3c3a5evegorov@chromium.org 9232356e6fbe66ac3aa027b61cb43a3c3619b3c3a5evegorov@chromium.org /** 9249155e252524a2bf92aecd27493feafed86702312kmillikin@chromium.org * Load previous pre-compilation data. 9259155e252524a2bf92aecd27493feafed86702312kmillikin@chromium.org * 9269155e252524a2bf92aecd27493feafed86702312kmillikin@chromium.org * \param data Pointer to data returned by a call to Data() of a previous 9279155e252524a2bf92aecd27493feafed86702312kmillikin@chromium.org * ScriptData. Ownership is not transferred. 9289155e252524a2bf92aecd27493feafed86702312kmillikin@chromium.org * \param length Length of data. 9299155e252524a2bf92aecd27493feafed86702312kmillikin@chromium.org */ 9309155e252524a2bf92aecd27493feafed86702312kmillikin@chromium.org static ScriptData* New(const char* data, int length); 9319155e252524a2bf92aecd27493feafed86702312kmillikin@chromium.org 9329155e252524a2bf92aecd27493feafed86702312kmillikin@chromium.org /** 9339155e252524a2bf92aecd27493feafed86702312kmillikin@chromium.org * Returns the length of Data(). 9349155e252524a2bf92aecd27493feafed86702312kmillikin@chromium.org */ 93543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen virtual int Length() = 0; 9369155e252524a2bf92aecd27493feafed86702312kmillikin@chromium.org 9379155e252524a2bf92aecd27493feafed86702312kmillikin@chromium.org /** 9389155e252524a2bf92aecd27493feafed86702312kmillikin@chromium.org * Returns a serialized representation of this ScriptData that can later be 9399155e252524a2bf92aecd27493feafed86702312kmillikin@chromium.org * passed to New(). NOTE: Serialized data is platform-dependent. 9409155e252524a2bf92aecd27493feafed86702312kmillikin@chromium.org */ 9419155e252524a2bf92aecd27493feafed86702312kmillikin@chromium.org virtual const char* Data() = 0; 9429155e252524a2bf92aecd27493feafed86702312kmillikin@chromium.org 9439155e252524a2bf92aecd27493feafed86702312kmillikin@chromium.org /** 9449155e252524a2bf92aecd27493feafed86702312kmillikin@chromium.org * Returns true if the source code could not be parsed. 9459155e252524a2bf92aecd27493feafed86702312kmillikin@chromium.org */ 9460c20e676f8a0209982ff89e5a9c707771748a585fschneider@chromium.org virtual bool HasError() = 0; 94743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen}; 94843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 94943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 95043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen/** 95143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * The origin, within a file, of a script. 95243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen */ 9536bec0093ef661b53a1e338a233d7aafb9536a307mvstanton@chromium.orgclass ScriptOrigin { 95443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen public: 95532280cf2786219b2d9a668f7f00778fb59ac40b3mstarzinger@chromium.org V8_INLINE(ScriptOrigin( 95669ea3965ef6e0d3f020a402cf7e6b96b9cb651aekmillikin@chromium.org Handle<Value> resource_name, 95769ea3965ef6e0d3f020a402cf7e6b96b9cb651aekmillikin@chromium.org Handle<Integer> resource_line_offset = Handle<Integer>(), 958d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.org Handle<Integer> resource_column_offset = Handle<Integer>(), 959d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.org Handle<Boolean> resource_is_shared_cross_origin = Handle<Boolean>())) 96043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen : resource_name_(resource_name), 96143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen resource_line_offset_(resource_line_offset), 962d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.org resource_column_offset_(resource_column_offset), 963d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.org resource_is_shared_cross_origin_(resource_is_shared_cross_origin) { } 96432280cf2786219b2d9a668f7f00778fb59ac40b3mstarzinger@chromium.org V8_INLINE(Handle<Value> ResourceName() const); 96532280cf2786219b2d9a668f7f00778fb59ac40b3mstarzinger@chromium.org V8_INLINE(Handle<Integer> ResourceLineOffset() const); 96632280cf2786219b2d9a668f7f00778fb59ac40b3mstarzinger@chromium.org V8_INLINE(Handle<Integer> ResourceColumnOffset() const); 967d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.org V8_INLINE(Handle<Boolean> ResourceIsSharedCrossOrigin() const); 96843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen private: 969cbaa060d2827a6c7aab497845a1fe6ae6f2dfab4mads.s.ager Handle<Value> resource_name_; 97043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen Handle<Integer> resource_line_offset_; 97143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen Handle<Integer> resource_column_offset_; 972d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.org Handle<Boolean> resource_is_shared_cross_origin_; 97343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen}; 97443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 97543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 97643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen/** 977727e995b7bba3c57fb1e5c156d386ca11894f781v * A compiled JavaScript script. 97843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen */ 979594006017e46d82ed7146611dc12c20e3c509c7ddanno@chromium.orgclass V8_EXPORT Script { 98043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen public: 9815c838251403b0be9a882540f1922577abba4c872ager@chromium.org /** 9825c838251403b0be9a882540f1922577abba4c872ager@chromium.org * Compiles the specified script (context-independent). 9835c838251403b0be9a882540f1922577abba4c872ager@chromium.org * 9845c838251403b0be9a882540f1922577abba4c872ager@chromium.org * \param source Script source code. 985ce5e87bd905d592a8bd612b3dedf7a994177c13aager@chromium.org * \param origin Script origin, owned by caller, no references are kept 9865c838251403b0be9a882540f1922577abba4c872ager@chromium.org * when New() returns 9875c838251403b0be9a882540f1922577abba4c872ager@chromium.org * \param pre_data Pre-parsing data, as obtained by ScriptData::PreCompile() 9885c838251403b0be9a882540f1922577abba4c872ager@chromium.org * using pre_data speeds compilation if it's done multiple times. 9895c838251403b0be9a882540f1922577abba4c872ager@chromium.org * Owned by caller, no references are kept when New() returns. 9905c838251403b0be9a882540f1922577abba4c872ager@chromium.org * \param script_data Arbitrary data associated with script. Using 991ce5e87bd905d592a8bd612b3dedf7a994177c13aager@chromium.org * this has same effect as calling SetData(), but allows data to be 9925c838251403b0be9a882540f1922577abba4c872ager@chromium.org * available to compile event handlers. 9935c838251403b0be9a882540f1922577abba4c872ager@chromium.org * \return Compiled script object (context independent; when run it 9945c838251403b0be9a882540f1922577abba4c872ager@chromium.org * will use the currently entered context). 9955c838251403b0be9a882540f1922577abba4c872ager@chromium.org */ 9965c838251403b0be9a882540f1922577abba4c872ager@chromium.org static Local<Script> New(Handle<String> source, 9975c838251403b0be9a882540f1922577abba4c872ager@chromium.org ScriptOrigin* origin = NULL, 9985c838251403b0be9a882540f1922577abba4c872ager@chromium.org ScriptData* pre_data = NULL, 9995c838251403b0be9a882540f1922577abba4c872ager@chromium.org Handle<String> script_data = Handle<String>()); 1000911335cff40a2630bbe1dfb77b1897be991241bfsgjesse@chromium.org 10015c838251403b0be9a882540f1922577abba4c872ager@chromium.org /** 10025c838251403b0be9a882540f1922577abba4c872ager@chromium.org * Compiles the specified script using the specified file name 10035c838251403b0be9a882540f1922577abba4c872ager@chromium.org * object (typically a string) as the script's origin. 10045c838251403b0be9a882540f1922577abba4c872ager@chromium.org * 10055c838251403b0be9a882540f1922577abba4c872ager@chromium.org * \param source Script source code. 1006ce5e87bd905d592a8bd612b3dedf7a994177c13aager@chromium.org * \param file_name file name object (typically a string) to be used 10075c838251403b0be9a882540f1922577abba4c872ager@chromium.org * as the script's origin. 10085c838251403b0be9a882540f1922577abba4c872ager@chromium.org * \return Compiled script object (context independent; when run it 10095c838251403b0be9a882540f1922577abba4c872ager@chromium.org * will use the currently entered context). 10105c838251403b0be9a882540f1922577abba4c872ager@chromium.org */ 10115c838251403b0be9a882540f1922577abba4c872ager@chromium.org static Local<Script> New(Handle<String> source, 10125c838251403b0be9a882540f1922577abba4c872ager@chromium.org Handle<Value> file_name); 10135c838251403b0be9a882540f1922577abba4c872ager@chromium.org 10145c838251403b0be9a882540f1922577abba4c872ager@chromium.org /** 10155c838251403b0be9a882540f1922577abba4c872ager@chromium.org * Compiles the specified script (bound to current context). 1016911335cff40a2630bbe1dfb77b1897be991241bfsgjesse@chromium.org * 10175c838251403b0be9a882540f1922577abba4c872ager@chromium.org * \param source Script source code. 1018ce5e87bd905d592a8bd612b3dedf7a994177c13aager@chromium.org * \param origin Script origin, owned by caller, no references are kept 10195c838251403b0be9a882540f1922577abba4c872ager@chromium.org * when Compile() returns 10205c838251403b0be9a882540f1922577abba4c872ager@chromium.org * \param pre_data Pre-parsing data, as obtained by ScriptData::PreCompile() 10215c838251403b0be9a882540f1922577abba4c872ager@chromium.org * using pre_data speeds compilation if it's done multiple times. 10225c838251403b0be9a882540f1922577abba4c872ager@chromium.org * Owned by caller, no references are kept when Compile() returns. 10235c838251403b0be9a882540f1922577abba4c872ager@chromium.org * \param script_data Arbitrary data associated with script. Using 10245c838251403b0be9a882540f1922577abba4c872ager@chromium.org * this has same effect as calling SetData(), but makes data available 10255c838251403b0be9a882540f1922577abba4c872ager@chromium.org * earlier (i.e. to compile event handlers). 10265c838251403b0be9a882540f1922577abba4c872ager@chromium.org * \return Compiled script object, bound to the context that was active 10275c838251403b0be9a882540f1922577abba4c872ager@chromium.org * when this function was called. When run it will always use this 10285c838251403b0be9a882540f1922577abba4c872ager@chromium.org * context. 102943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen */ 103043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen static Local<Script> Compile(Handle<String> source, 103143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen ScriptOrigin* origin = NULL, 10325c838251403b0be9a882540f1922577abba4c872ager@chromium.org ScriptData* pre_data = NULL, 10335c838251403b0be9a882540f1922577abba4c872ager@chromium.org Handle<String> script_data = Handle<String>()); 103443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 1035cbaa060d2827a6c7aab497845a1fe6ae6f2dfab4mads.s.ager /** 1036cbaa060d2827a6c7aab497845a1fe6ae6f2dfab4mads.s.ager * Compiles the specified script using the specified file name 1037cbaa060d2827a6c7aab497845a1fe6ae6f2dfab4mads.s.ager * object (typically a string) as the script's origin. 1038911335cff40a2630bbe1dfb77b1897be991241bfsgjesse@chromium.org * 10395c838251403b0be9a882540f1922577abba4c872ager@chromium.org * \param source Script source code. 10405c838251403b0be9a882540f1922577abba4c872ager@chromium.org * \param file_name File name to use as script's origin 10415c838251403b0be9a882540f1922577abba4c872ager@chromium.org * \param script_data Arbitrary data associated with script. Using 10425c838251403b0be9a882540f1922577abba4c872ager@chromium.org * this has same effect as calling SetData(), but makes data available 10435c838251403b0be9a882540f1922577abba4c872ager@chromium.org * earlier (i.e. to compile event handlers). 10445c838251403b0be9a882540f1922577abba4c872ager@chromium.org * \return Compiled script object, bound to the context that was active 10455c838251403b0be9a882540f1922577abba4c872ager@chromium.org * when this function was called. When run it will always use this 10465c838251403b0be9a882540f1922577abba4c872ager@chromium.org * context. 1047cbaa060d2827a6c7aab497845a1fe6ae6f2dfab4mads.s.ager */ 1048cbaa060d2827a6c7aab497845a1fe6ae6f2dfab4mads.s.ager static Local<Script> Compile(Handle<String> source, 10495c838251403b0be9a882540f1922577abba4c872ager@chromium.org Handle<Value> file_name, 10505c838251403b0be9a882540f1922577abba4c872ager@chromium.org Handle<String> script_data = Handle<String>()); 1051cbaa060d2827a6c7aab497845a1fe6ae6f2dfab4mads.s.ager 1052727e995b7bba3c57fb1e5c156d386ca11894f781v /** 1053911335cff40a2630bbe1dfb77b1897be991241bfsgjesse@chromium.org * Runs the script returning the resulting value. If the script is 1054911335cff40a2630bbe1dfb77b1897be991241bfsgjesse@chromium.org * context independent (created using ::New) it will be run in the 1055911335cff40a2630bbe1dfb77b1897be991241bfsgjesse@chromium.org * currently entered context. If it is context specific (created 1056911335cff40a2630bbe1dfb77b1897be991241bfsgjesse@chromium.org * using ::Compile) it will be run in the context in which it was 1057911335cff40a2630bbe1dfb77b1897be991241bfsgjesse@chromium.org * compiled. 1058727e995b7bba3c57fb1e5c156d386ca11894f781v */ 105943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen Local<Value> Run(); 10607be3c996bea370e151c9fe4ecf7f779cdc5f87adkasperl@chromium.org 10617be3c996bea370e151c9fe4ecf7f779cdc5f87adkasperl@chromium.org /** 10627be3c996bea370e151c9fe4ecf7f779cdc5f87adkasperl@chromium.org * Returns the script id value. 10631510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org * DEPRECATED: Please use GetId(). 10647be3c996bea370e151c9fe4ecf7f779cdc5f87adkasperl@chromium.org */ 10657be3c996bea370e151c9fe4ecf7f779cdc5f87adkasperl@chromium.org Local<Value> Id(); 106665dad4b091d2925543c6326db635d0f7cf9e1edcager@chromium.org 106765dad4b091d2925543c6326db635d0f7cf9e1edcager@chromium.org /** 10681510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org * Returns the script id. 10691510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org */ 10701510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org int GetId(); 10711510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org 10721510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org /** 107365dad4b091d2925543c6326db635d0f7cf9e1edcager@chromium.org * Associate an additional data object with the script. This is mainly used 107465dad4b091d2925543c6326db635d0f7cf9e1edcager@chromium.org * with the debugger as this data object is only available through the 107565dad4b091d2925543c6326db635d0f7cf9e1edcager@chromium.org * debugger API. 107665dad4b091d2925543c6326db635d0f7cf9e1edcager@chromium.org */ 1077499aaa52a876ef8e8b81ac115cafb969eb585c96sgjesse@chromium.org void SetData(Handle<String> data); 1078e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org 1079e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org /** 1080e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org * Returns the name value of one Script. 1081e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org */ 1082e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org Handle<Value> GetScriptName(); 1083e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org 1084e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org /** 1085e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org * Returns zero based line number of the code_pos location in the script. 1086e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org * -1 will be returned if no information available. 1087e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org */ 1088e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org int GetLineNumber(int code_pos); 10891510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org 10901510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org static const int kNoScriptId = 0; 109143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen}; 109243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 109343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 109443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen/** 109543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * An error message. 109643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen */ 1097594006017e46d82ed7146611dc12c20e3c509c7ddanno@chromium.orgclass V8_EXPORT Message { 109843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen public: 10993291210ab99f306b74430ebbc4b7d939629e699fager@chromium.org Local<String> Get() const; 11003291210ab99f306b74430ebbc4b7d939629e699fager@chromium.org Local<String> GetSourceLine() const; 110143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 110265dad4b091d2925543c6326db635d0f7cf9e1edcager@chromium.org /** 110365dad4b091d2925543c6326db635d0f7cf9e1edcager@chromium.org * Returns the resource name for the script from where the function causing 110465dad4b091d2925543c6326db635d0f7cf9e1edcager@chromium.org * the error originates. 110565dad4b091d2925543c6326db635d0f7cf9e1edcager@chromium.org */ 11063291210ab99f306b74430ebbc4b7d939629e699fager@chromium.org Handle<Value> GetScriptResourceName() const; 110743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 11089258b6bc66e09368ada54001f619d53b4fc976d5ager@chromium.org /** 110965dad4b091d2925543c6326db635d0f7cf9e1edcager@chromium.org * Returns the resource data for the script from where the function causing 111065dad4b091d2925543c6326db635d0f7cf9e1edcager@chromium.org * the error originates. 111165dad4b091d2925543c6326db635d0f7cf9e1edcager@chromium.org */ 111265dad4b091d2925543c6326db635d0f7cf9e1edcager@chromium.org Handle<Value> GetScriptData() const; 111365dad4b091d2925543c6326db635d0f7cf9e1edcager@chromium.org 111465dad4b091d2925543c6326db635d0f7cf9e1edcager@chromium.org /** 11156a2b0aa331a1ae1829a9b9637ad18cfc7ec9d840ager@chromium.org * Exception stack trace. By default stack traces are not captured for 11166a2b0aa331a1ae1829a9b9637ad18cfc7ec9d840ager@chromium.org * uncaught exceptions. SetCaptureStackTraceForUncaughtExceptions allows 11176a2b0aa331a1ae1829a9b9637ad18cfc7ec9d840ager@chromium.org * to change this option. 11186a2b0aa331a1ae1829a9b9637ad18cfc7ec9d840ager@chromium.org */ 11196a2b0aa331a1ae1829a9b9637ad18cfc7ec9d840ager@chromium.org Handle<StackTrace> GetStackTrace() const; 11206a2b0aa331a1ae1829a9b9637ad18cfc7ec9d840ager@chromium.org 11216a2b0aa331a1ae1829a9b9637ad18cfc7ec9d840ager@chromium.org /** 11229258b6bc66e09368ada54001f619d53b4fc976d5ager@chromium.org * Returns the number, 1-based, of the line where the error occurred. 11239258b6bc66e09368ada54001f619d53b4fc976d5ager@chromium.org */ 11243291210ab99f306b74430ebbc4b7d939629e699fager@chromium.org int GetLineNumber() const; 112543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 11269258b6bc66e09368ada54001f619d53b4fc976d5ager@chromium.org /** 11279258b6bc66e09368ada54001f619d53b4fc976d5ager@chromium.org * Returns the index within the script of the first character where 11289258b6bc66e09368ada54001f619d53b4fc976d5ager@chromium.org * the error occurred. 11299258b6bc66e09368ada54001f619d53b4fc976d5ager@chromium.org */ 11303291210ab99f306b74430ebbc4b7d939629e699fager@chromium.org int GetStartPosition() const; 11319258b6bc66e09368ada54001f619d53b4fc976d5ager@chromium.org 11329258b6bc66e09368ada54001f619d53b4fc976d5ager@chromium.org /** 11339258b6bc66e09368ada54001f619d53b4fc976d5ager@chromium.org * Returns the index within the script of the last character where 11349258b6bc66e09368ada54001f619d53b4fc976d5ager@chromium.org * the error occurred. 11359258b6bc66e09368ada54001f619d53b4fc976d5ager@chromium.org */ 11363291210ab99f306b74430ebbc4b7d939629e699fager@chromium.org int GetEndPosition() const; 11379258b6bc66e09368ada54001f619d53b4fc976d5ager@chromium.org 11389258b6bc66e09368ada54001f619d53b4fc976d5ager@chromium.org /** 11399258b6bc66e09368ada54001f619d53b4fc976d5ager@chromium.org * Returns the index within the line of the first character where 11409258b6bc66e09368ada54001f619d53b4fc976d5ager@chromium.org * the error occurred. 11419258b6bc66e09368ada54001f619d53b4fc976d5ager@chromium.org */ 11423291210ab99f306b74430ebbc4b7d939629e699fager@chromium.org int GetStartColumn() const; 11439258b6bc66e09368ada54001f619d53b4fc976d5ager@chromium.org 11449258b6bc66e09368ada54001f619d53b4fc976d5ager@chromium.org /** 11459258b6bc66e09368ada54001f619d53b4fc976d5ager@chromium.org * Returns the index within the line of the last character where 11469258b6bc66e09368ada54001f619d53b4fc976d5ager@chromium.org * the error occurred. 11479258b6bc66e09368ada54001f619d53b4fc976d5ager@chromium.org */ 11483291210ab99f306b74430ebbc4b7d939629e699fager@chromium.org int GetEndColumn() const; 11499258b6bc66e09368ada54001f619d53b4fc976d5ager@chromium.org 1150d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.org /** 1151d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.org * Passes on the value set by the embedder when it fed the script from which 1152d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.org * this Message was generated to V8. 1153d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.org */ 1154d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.org bool IsSharedCrossOrigin() const; 1155d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.org 115643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen // TODO(1245381): Print to a string instead of on a FILE. 115743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen static void PrintCurrentStackTrace(FILE* out); 1158720dc0bc17114e33b9b2177fcb6726bda9cabd62sgjesse@chromium.org 1159720dc0bc17114e33b9b2177fcb6726bda9cabd62sgjesse@chromium.org static const int kNoLineNumberInfo = 0; 1160720dc0bc17114e33b9b2177fcb6726bda9cabd62sgjesse@chromium.org static const int kNoColumnInfo = 0; 1161720dc0bc17114e33b9b2177fcb6726bda9cabd62sgjesse@chromium.org}; 1162720dc0bc17114e33b9b2177fcb6726bda9cabd62sgjesse@chromium.org 1163720dc0bc17114e33b9b2177fcb6726bda9cabd62sgjesse@chromium.org 1164720dc0bc17114e33b9b2177fcb6726bda9cabd62sgjesse@chromium.org/** 1165720dc0bc17114e33b9b2177fcb6726bda9cabd62sgjesse@chromium.org * Representation of a JavaScript stack trace. The information collected is a 1166720dc0bc17114e33b9b2177fcb6726bda9cabd62sgjesse@chromium.org * snapshot of the execution stack and the information remains valid after 1167720dc0bc17114e33b9b2177fcb6726bda9cabd62sgjesse@chromium.org * execution continues. 1168720dc0bc17114e33b9b2177fcb6726bda9cabd62sgjesse@chromium.org */ 1169594006017e46d82ed7146611dc12c20e3c509c7ddanno@chromium.orgclass V8_EXPORT StackTrace { 1170720dc0bc17114e33b9b2177fcb6726bda9cabd62sgjesse@chromium.org public: 1171720dc0bc17114e33b9b2177fcb6726bda9cabd62sgjesse@chromium.org /** 1172720dc0bc17114e33b9b2177fcb6726bda9cabd62sgjesse@chromium.org * Flags that determine what information is placed captured for each 1173720dc0bc17114e33b9b2177fcb6726bda9cabd62sgjesse@chromium.org * StackFrame when grabbing the current stack trace. 1174720dc0bc17114e33b9b2177fcb6726bda9cabd62sgjesse@chromium.org */ 1175720dc0bc17114e33b9b2177fcb6726bda9cabd62sgjesse@chromium.org enum StackTraceOptions { 1176720dc0bc17114e33b9b2177fcb6726bda9cabd62sgjesse@chromium.org kLineNumber = 1, 1177720dc0bc17114e33b9b2177fcb6726bda9cabd62sgjesse@chromium.org kColumnOffset = 1 << 1 | kLineNumber, 1178720dc0bc17114e33b9b2177fcb6726bda9cabd62sgjesse@chromium.org kScriptName = 1 << 2, 1179720dc0bc17114e33b9b2177fcb6726bda9cabd62sgjesse@chromium.org kFunctionName = 1 << 3, 1180720dc0bc17114e33b9b2177fcb6726bda9cabd62sgjesse@chromium.org kIsEval = 1 << 4, 1181720dc0bc17114e33b9b2177fcb6726bda9cabd62sgjesse@chromium.org kIsConstructor = 1 << 5, 1182b61a0d13e9690ef4c2de424bbe82a38884d981a6ager@chromium.org kScriptNameOrSourceURL = 1 << 6, 1183720dc0bc17114e33b9b2177fcb6726bda9cabd62sgjesse@chromium.org kOverview = kLineNumber | kColumnOffset | kScriptName | kFunctionName, 1184b61a0d13e9690ef4c2de424bbe82a38884d981a6ager@chromium.org kDetailed = kOverview | kIsEval | kIsConstructor | kScriptNameOrSourceURL 1185720dc0bc17114e33b9b2177fcb6726bda9cabd62sgjesse@chromium.org }; 1186720dc0bc17114e33b9b2177fcb6726bda9cabd62sgjesse@chromium.org 1187720dc0bc17114e33b9b2177fcb6726bda9cabd62sgjesse@chromium.org /** 1188720dc0bc17114e33b9b2177fcb6726bda9cabd62sgjesse@chromium.org * Returns a StackFrame at a particular index. 1189720dc0bc17114e33b9b2177fcb6726bda9cabd62sgjesse@chromium.org */ 1190720dc0bc17114e33b9b2177fcb6726bda9cabd62sgjesse@chromium.org Local<StackFrame> GetFrame(uint32_t index) const; 1191720dc0bc17114e33b9b2177fcb6726bda9cabd62sgjesse@chromium.org 1192720dc0bc17114e33b9b2177fcb6726bda9cabd62sgjesse@chromium.org /** 1193720dc0bc17114e33b9b2177fcb6726bda9cabd62sgjesse@chromium.org * Returns the number of StackFrames. 1194720dc0bc17114e33b9b2177fcb6726bda9cabd62sgjesse@chromium.org */ 1195720dc0bc17114e33b9b2177fcb6726bda9cabd62sgjesse@chromium.org int GetFrameCount() const; 1196720dc0bc17114e33b9b2177fcb6726bda9cabd62sgjesse@chromium.org 1197720dc0bc17114e33b9b2177fcb6726bda9cabd62sgjesse@chromium.org /** 1198720dc0bc17114e33b9b2177fcb6726bda9cabd62sgjesse@chromium.org * Returns StackTrace as a v8::Array that contains StackFrame objects. 1199720dc0bc17114e33b9b2177fcb6726bda9cabd62sgjesse@chromium.org */ 1200720dc0bc17114e33b9b2177fcb6726bda9cabd62sgjesse@chromium.org Local<Array> AsArray(); 1201720dc0bc17114e33b9b2177fcb6726bda9cabd62sgjesse@chromium.org 1202720dc0bc17114e33b9b2177fcb6726bda9cabd62sgjesse@chromium.org /** 12037304bcac06a6a63b9f3dcebac2eeceada87ca146vegorov@chromium.org * Grab a snapshot of the current JavaScript execution stack. 1204720dc0bc17114e33b9b2177fcb6726bda9cabd62sgjesse@chromium.org * 1205720dc0bc17114e33b9b2177fcb6726bda9cabd62sgjesse@chromium.org * \param frame_limit The maximum number of stack frames we want to capture. 1206720dc0bc17114e33b9b2177fcb6726bda9cabd62sgjesse@chromium.org * \param options Enumerates the set of things we will capture for each 1207720dc0bc17114e33b9b2177fcb6726bda9cabd62sgjesse@chromium.org * StackFrame. 1208720dc0bc17114e33b9b2177fcb6726bda9cabd62sgjesse@chromium.org */ 1209720dc0bc17114e33b9b2177fcb6726bda9cabd62sgjesse@chromium.org static Local<StackTrace> CurrentStackTrace( 1210720dc0bc17114e33b9b2177fcb6726bda9cabd62sgjesse@chromium.org int frame_limit, 1211720dc0bc17114e33b9b2177fcb6726bda9cabd62sgjesse@chromium.org StackTraceOptions options = kOverview); 1212720dc0bc17114e33b9b2177fcb6726bda9cabd62sgjesse@chromium.org}; 1213720dc0bc17114e33b9b2177fcb6726bda9cabd62sgjesse@chromium.org 1214720dc0bc17114e33b9b2177fcb6726bda9cabd62sgjesse@chromium.org 1215720dc0bc17114e33b9b2177fcb6726bda9cabd62sgjesse@chromium.org/** 1216720dc0bc17114e33b9b2177fcb6726bda9cabd62sgjesse@chromium.org * A single JavaScript stack frame. 1217720dc0bc17114e33b9b2177fcb6726bda9cabd62sgjesse@chromium.org */ 1218594006017e46d82ed7146611dc12c20e3c509c7ddanno@chromium.orgclass V8_EXPORT StackFrame { 1219720dc0bc17114e33b9b2177fcb6726bda9cabd62sgjesse@chromium.org public: 1220720dc0bc17114e33b9b2177fcb6726bda9cabd62sgjesse@chromium.org /** 1221720dc0bc17114e33b9b2177fcb6726bda9cabd62sgjesse@chromium.org * Returns the number, 1-based, of the line for the associate function call. 1222720dc0bc17114e33b9b2177fcb6726bda9cabd62sgjesse@chromium.org * This method will return Message::kNoLineNumberInfo if it is unable to 1223720dc0bc17114e33b9b2177fcb6726bda9cabd62sgjesse@chromium.org * retrieve the line number, or if kLineNumber was not passed as an option 1224720dc0bc17114e33b9b2177fcb6726bda9cabd62sgjesse@chromium.org * when capturing the StackTrace. 1225720dc0bc17114e33b9b2177fcb6726bda9cabd62sgjesse@chromium.org */ 1226720dc0bc17114e33b9b2177fcb6726bda9cabd62sgjesse@chromium.org int GetLineNumber() const; 1227720dc0bc17114e33b9b2177fcb6726bda9cabd62sgjesse@chromium.org 1228720dc0bc17114e33b9b2177fcb6726bda9cabd62sgjesse@chromium.org /** 1229720dc0bc17114e33b9b2177fcb6726bda9cabd62sgjesse@chromium.org * Returns the 1-based column offset on the line for the associated function 1230720dc0bc17114e33b9b2177fcb6726bda9cabd62sgjesse@chromium.org * call. 1231720dc0bc17114e33b9b2177fcb6726bda9cabd62sgjesse@chromium.org * This method will return Message::kNoColumnInfo if it is unable to retrieve 1232720dc0bc17114e33b9b2177fcb6726bda9cabd62sgjesse@chromium.org * the column number, or if kColumnOffset was not passed as an option when 1233720dc0bc17114e33b9b2177fcb6726bda9cabd62sgjesse@chromium.org * capturing the StackTrace. 1234720dc0bc17114e33b9b2177fcb6726bda9cabd62sgjesse@chromium.org */ 1235720dc0bc17114e33b9b2177fcb6726bda9cabd62sgjesse@chromium.org int GetColumn() const; 1236720dc0bc17114e33b9b2177fcb6726bda9cabd62sgjesse@chromium.org 1237720dc0bc17114e33b9b2177fcb6726bda9cabd62sgjesse@chromium.org /** 1238720dc0bc17114e33b9b2177fcb6726bda9cabd62sgjesse@chromium.org * Returns the name of the resource that contains the script for the 1239720dc0bc17114e33b9b2177fcb6726bda9cabd62sgjesse@chromium.org * function for this StackFrame. 1240720dc0bc17114e33b9b2177fcb6726bda9cabd62sgjesse@chromium.org */ 1241720dc0bc17114e33b9b2177fcb6726bda9cabd62sgjesse@chromium.org Local<String> GetScriptName() const; 1242720dc0bc17114e33b9b2177fcb6726bda9cabd62sgjesse@chromium.org 1243720dc0bc17114e33b9b2177fcb6726bda9cabd62sgjesse@chromium.org /** 1244b61a0d13e9690ef4c2de424bbe82a38884d981a6ager@chromium.org * Returns the name of the resource that contains the script for the 1245b61a0d13e9690ef4c2de424bbe82a38884d981a6ager@chromium.org * function for this StackFrame or sourceURL value if the script name 1246b99c75496e05b4cd58815ada1e39e6029130d11crossberg@chromium.org * is undefined and its source ends with //# sourceURL=... string or 1247b99c75496e05b4cd58815ada1e39e6029130d11crossberg@chromium.org * deprecated //@ sourceURL=... string. 1248b61a0d13e9690ef4c2de424bbe82a38884d981a6ager@chromium.org */ 1249b61a0d13e9690ef4c2de424bbe82a38884d981a6ager@chromium.org Local<String> GetScriptNameOrSourceURL() const; 1250b61a0d13e9690ef4c2de424bbe82a38884d981a6ager@chromium.org 1251b61a0d13e9690ef4c2de424bbe82a38884d981a6ager@chromium.org /** 1252720dc0bc17114e33b9b2177fcb6726bda9cabd62sgjesse@chromium.org * Returns the name of the function associated with this stack frame. 1253720dc0bc17114e33b9b2177fcb6726bda9cabd62sgjesse@chromium.org */ 1254720dc0bc17114e33b9b2177fcb6726bda9cabd62sgjesse@chromium.org Local<String> GetFunctionName() const; 1255720dc0bc17114e33b9b2177fcb6726bda9cabd62sgjesse@chromium.org 1256720dc0bc17114e33b9b2177fcb6726bda9cabd62sgjesse@chromium.org /** 1257720dc0bc17114e33b9b2177fcb6726bda9cabd62sgjesse@chromium.org * Returns whether or not the associated function is compiled via a call to 1258720dc0bc17114e33b9b2177fcb6726bda9cabd62sgjesse@chromium.org * eval(). 1259720dc0bc17114e33b9b2177fcb6726bda9cabd62sgjesse@chromium.org */ 1260720dc0bc17114e33b9b2177fcb6726bda9cabd62sgjesse@chromium.org bool IsEval() const; 1261720dc0bc17114e33b9b2177fcb6726bda9cabd62sgjesse@chromium.org 1262720dc0bc17114e33b9b2177fcb6726bda9cabd62sgjesse@chromium.org /** 12637304bcac06a6a63b9f3dcebac2eeceada87ca146vegorov@chromium.org * Returns whether or not the associated function is called as a 1264720dc0bc17114e33b9b2177fcb6726bda9cabd62sgjesse@chromium.org * constructor via "new". 1265720dc0bc17114e33b9b2177fcb6726bda9cabd62sgjesse@chromium.org */ 1266720dc0bc17114e33b9b2177fcb6726bda9cabd62sgjesse@chromium.org bool IsConstructor() const; 126743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen}; 126843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 126943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 1270594006017e46d82ed7146611dc12c20e3c509c7ddanno@chromium.org/** 1271594006017e46d82ed7146611dc12c20e3c509c7ddanno@chromium.org * A JSON Parser. 1272594006017e46d82ed7146611dc12c20e3c509c7ddanno@chromium.org */ 1273594006017e46d82ed7146611dc12c20e3c509c7ddanno@chromium.orgclass V8_EXPORT JSON { 1274594006017e46d82ed7146611dc12c20e3c509c7ddanno@chromium.org public: 1275594006017e46d82ed7146611dc12c20e3c509c7ddanno@chromium.org /** 1276594006017e46d82ed7146611dc12c20e3c509c7ddanno@chromium.org * Tries to parse the string |json_string| and returns it as value if 1277594006017e46d82ed7146611dc12c20e3c509c7ddanno@chromium.org * successful. 1278594006017e46d82ed7146611dc12c20e3c509c7ddanno@chromium.org * 1279594006017e46d82ed7146611dc12c20e3c509c7ddanno@chromium.org * \param json_string The string to parse. 1280594006017e46d82ed7146611dc12c20e3c509c7ddanno@chromium.org * \return The corresponding value if successfully parsed. 1281594006017e46d82ed7146611dc12c20e3c509c7ddanno@chromium.org */ 1282594006017e46d82ed7146611dc12c20e3c509c7ddanno@chromium.org static Local<Value> Parse(Local<String> json_string); 1283594006017e46d82ed7146611dc12c20e3c509c7ddanno@chromium.org}; 1284594006017e46d82ed7146611dc12c20e3c509c7ddanno@chromium.org 1285594006017e46d82ed7146611dc12c20e3c509c7ddanno@chromium.org 1286fb144a0716afe7ab8bf245f2391a9e53b3db3c89fschneider@chromium.org// --- Value --- 128743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 128843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 128943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen/** 1290727e995b7bba3c57fb1e5c156d386ca11894f781v * The superclass of all JavaScript values and objects. 129143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen */ 1292594006017e46d82ed7146611dc12c20e3c509c7ddanno@chromium.orgclass V8_EXPORT Value : public Data { 129343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen public: 129443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen /** 129543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * Returns true if this value is the undefined value. See ECMA-262 129643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * 4.3.10. 129743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen */ 129832280cf2786219b2d9a668f7f00778fb59ac40b3mstarzinger@chromium.org V8_INLINE(bool IsUndefined() const); 129943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 130043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen /** 130143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * Returns true if this value is the null value. See ECMA-262 130243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * 4.3.11. 130343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen */ 130432280cf2786219b2d9a668f7f00778fb59ac40b3mstarzinger@chromium.org V8_INLINE(bool IsNull() const); 130543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 130643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen /** 130743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * Returns true if this value is true. 130843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen */ 130946a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org bool IsTrue() const; 131043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 131143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen /** 131243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * Returns true if this value is false. 131343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen */ 131446a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org bool IsFalse() const; 131543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 131643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen /** 131743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * Returns true if this value is an instance of the String type. 131843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * See ECMA-262 8.4. 131943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen */ 132032280cf2786219b2d9a668f7f00778fb59ac40b3mstarzinger@chromium.org V8_INLINE(bool IsString() const); 132143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 132243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen /** 1323e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org * Returns true if this value is a symbol. 1324e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org * This is an experimental feature. 1325e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org */ 1326e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org bool IsSymbol() const; 1327e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org 1328e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org /** 132943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * Returns true if this value is a function. 133043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen */ 133146a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org bool IsFunction() const; 133243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 133343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen /** 133443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * Returns true if this value is an array. 133543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen */ 133646a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org bool IsArray() const; 133743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 1338727e995b7bba3c57fb1e5c156d386ca11894f781v /** 133943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * Returns true if this value is an object. 134043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen */ 134146a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org bool IsObject() const; 134243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 1343727e995b7bba3c57fb1e5c156d386ca11894f781v /** 134443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * Returns true if this value is boolean. 134543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen */ 134646a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org bool IsBoolean() const; 13479258b6bc66e09368ada54001f619d53b4fc976d5ager@chromium.org 1348727e995b7bba3c57fb1e5c156d386ca11894f781v /** 134943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * Returns true if this value is a number. 135043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen */ 135146a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org bool IsNumber() const; 135243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 1353727e995b7bba3c57fb1e5c156d386ca11894f781v /** 135443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * Returns true if this value is external. 135543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen */ 135646a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org bool IsExternal() const; 135743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 1358727e995b7bba3c57fb1e5c156d386ca11894f781v /** 135943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * Returns true if this value is a 32-bit signed integer. 136043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen */ 136146a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org bool IsInt32() const; 136243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 13635a8ca6c70c6fc9716f18f6223c98d1fef5752cf6kasperl@chromium.org /** 1364c34f5802a37a9fa2ce8f3929d1d5159ddcf04ff3lrn@chromium.org * Returns true if this value is a 32-bit unsigned integer. 1365ce5e87bd905d592a8bd612b3dedf7a994177c13aager@chromium.org */ 136646a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org bool IsUint32() const; 1367ce5e87bd905d592a8bd612b3dedf7a994177c13aager@chromium.org 1368ce5e87bd905d592a8bd612b3dedf7a994177c13aager@chromium.org /** 13695a8ca6c70c6fc9716f18f6223c98d1fef5752cf6kasperl@chromium.org * Returns true if this value is a Date. 13705a8ca6c70c6fc9716f18f6223c98d1fef5752cf6kasperl@chromium.org */ 137146a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org bool IsDate() const; 13725a8ca6c70c6fc9716f18f6223c98d1fef5752cf6kasperl@chromium.org 137326c16f8ef35ec25d36420512a4ceaa74ea2e2b05vegorov@chromium.org /** 137484bcc559ac20fb04f806e97d28a314b20b58fd60svenpanne@chromium.org * Returns true if this value is a Boolean object. 137584bcc559ac20fb04f806e97d28a314b20b58fd60svenpanne@chromium.org */ 137646a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org bool IsBooleanObject() const; 137784bcc559ac20fb04f806e97d28a314b20b58fd60svenpanne@chromium.org 137884bcc559ac20fb04f806e97d28a314b20b58fd60svenpanne@chromium.org /** 137984bcc559ac20fb04f806e97d28a314b20b58fd60svenpanne@chromium.org * Returns true if this value is a Number object. 138084bcc559ac20fb04f806e97d28a314b20b58fd60svenpanne@chromium.org */ 138146a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org bool IsNumberObject() const; 138284bcc559ac20fb04f806e97d28a314b20b58fd60svenpanne@chromium.org 138384bcc559ac20fb04f806e97d28a314b20b58fd60svenpanne@chromium.org /** 138484bcc559ac20fb04f806e97d28a314b20b58fd60svenpanne@chromium.org * Returns true if this value is a String object. 138584bcc559ac20fb04f806e97d28a314b20b58fd60svenpanne@chromium.org */ 138646a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org bool IsStringObject() const; 138784bcc559ac20fb04f806e97d28a314b20b58fd60svenpanne@chromium.org 138884bcc559ac20fb04f806e97d28a314b20b58fd60svenpanne@chromium.org /** 1389e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org * Returns true if this value is a Symbol object. 1390e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org * This is an experimental feature. 1391e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org */ 1392e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org bool IsSymbolObject() const; 1393e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org 1394e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org /** 139584bcc559ac20fb04f806e97d28a314b20b58fd60svenpanne@chromium.org * Returns true if this value is a NativeError. 139684bcc559ac20fb04f806e97d28a314b20b58fd60svenpanne@chromium.org */ 139746a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org bool IsNativeError() const; 139884bcc559ac20fb04f806e97d28a314b20b58fd60svenpanne@chromium.org 139984bcc559ac20fb04f806e97d28a314b20b58fd60svenpanne@chromium.org /** 140026c16f8ef35ec25d36420512a4ceaa74ea2e2b05vegorov@chromium.org * Returns true if this value is a RegExp. 140126c16f8ef35ec25d36420512a4ceaa74ea2e2b05vegorov@chromium.org */ 140246a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org bool IsRegExp() const; 140326c16f8ef35ec25d36420512a4ceaa74ea2e2b05vegorov@chromium.org 140457ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org 140557ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org /** 140657ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org * Returns true if this value is an ArrayBuffer. 140757ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org * This is an experimental feature. 140857ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org */ 140957ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org bool IsArrayBuffer() const; 141057ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org 141157ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org /** 14121510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org * Returns true if this value is an ArrayBufferView. 14131510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org * This is an experimental feature. 14141510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org */ 14151510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org bool IsArrayBufferView() const; 14161510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org 14171510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org /** 141857ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org * Returns true if this value is one of TypedArrays. 141957ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org * This is an experimental feature. 142057ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org */ 142157ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org bool IsTypedArray() const; 142257ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org 142357ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org /** 142457ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org * Returns true if this value is an Uint8Array. 142557ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org * This is an experimental feature. 142657ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org */ 142757ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org bool IsUint8Array() const; 142857ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org 142957ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org /** 143057ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org * Returns true if this value is an Uint8ClampedArray. 143157ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org * This is an experimental feature. 143257ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org */ 143357ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org bool IsUint8ClampedArray() const; 143457ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org 143557ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org /** 143657ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org * Returns true if this value is an Int8Array. 143757ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org * This is an experimental feature. 143857ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org */ 143957ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org bool IsInt8Array() const; 144057ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org 144157ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org /** 144257ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org * Returns true if this value is an Uint16Array. 144357ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org * This is an experimental feature. 144457ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org */ 144557ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org bool IsUint16Array() const; 144657ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org 144757ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org /** 144857ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org * Returns true if this value is an Int16Array. 144957ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org * This is an experimental feature. 145057ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org */ 145157ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org bool IsInt16Array() const; 145257ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org 145357ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org /** 145457ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org * Returns true if this value is an Uint32Array. 145557ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org * This is an experimental feature. 145657ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org */ 145757ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org bool IsUint32Array() const; 145857ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org 145957ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org /** 146057ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org * Returns true if this value is an Int32Array. 146157ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org * This is an experimental feature. 146257ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org */ 146357ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org bool IsInt32Array() const; 146457ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org 146557ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org /** 146657ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org * Returns true if this value is a Float32Array. 146757ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org * This is an experimental feature. 146857ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org */ 146957ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org bool IsFloat32Array() const; 147057ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org 147157ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org /** 147257ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org * Returns true if this value is a Float64Array. 147357ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org * This is an experimental feature. 147457ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org */ 147557ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org bool IsFloat64Array() const; 147657ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org 14771510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org /** 14781510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org * Returns true if this value is a DataView. 14791510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org * This is an experimental feature. 14801510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org */ 14811510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org bool IsDataView() const; 14821510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org 148346a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org Local<Boolean> ToBoolean() const; 148446a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org Local<Number> ToNumber() const; 148546a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org Local<String> ToString() const; 148646a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org Local<String> ToDetailString() const; 148746a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org Local<Object> ToObject() const; 148846a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org Local<Integer> ToInteger() const; 148946a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org Local<Uint32> ToUint32() const; 149046a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org Local<Int32> ToInt32() const; 149143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 149243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen /** 149343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * Attempts to convert a string to an array index. 149443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * Returns an empty handle if the conversion fails. 149543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen */ 149646a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org Local<Uint32> ToArrayIndex() const; 149743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 149846a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org bool BooleanValue() const; 149946a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org double NumberValue() const; 150046a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org int64_t IntegerValue() const; 150146a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org uint32_t Uint32Value() const; 150246a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org int32_t Int32Value() const; 150343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 150443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen /** JS == */ 150546a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org bool Equals(Handle<Value> that) const; 150646a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org bool StrictEquals(Handle<Value> that) const; 15079d58c2b1c27d8b2890b9bd46e57d3842b09e0292christian.plesner.hansen@gmail.com 15081fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org template <class T> V8_INLINE(static Value* Cast(T* value)); 15091fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org 151018ad94b919217ffbcd2d3159eeb5f8c588761c47ager@chromium.org private: 151132280cf2786219b2d9a668f7f00778fb59ac40b3mstarzinger@chromium.org V8_INLINE(bool QuickIsUndefined() const); 151232280cf2786219b2d9a668f7f00778fb59ac40b3mstarzinger@chromium.org V8_INLINE(bool QuickIsNull() const); 151332280cf2786219b2d9a668f7f00778fb59ac40b3mstarzinger@chromium.org V8_INLINE(bool QuickIsString() const); 151446a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org bool FullIsUndefined() const; 151546a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org bool FullIsNull() const; 151646a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org bool FullIsString() const; 151743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen}; 151843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 151943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 152043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen/** 152143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * The superclass of primitive values. See ECMA-262 4.3.2. 152243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen */ 1523594006017e46d82ed7146611dc12c20e3c509c7ddanno@chromium.orgclass V8_EXPORT Primitive : public Value { }; 152443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 152543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 152643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen/** 152743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * A primitive boolean value (ECMA-262, 4.3.14). Either the true 152843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * or false value. 152943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen */ 1530594006017e46d82ed7146611dc12c20e3c509c7ddanno@chromium.orgclass V8_EXPORT Boolean : public Primitive { 153143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen public: 153246a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org bool Value() const; 153332280cf2786219b2d9a668f7f00778fb59ac40b3mstarzinger@chromium.org V8_INLINE(static Handle<Boolean> New(bool value)); 153443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen}; 153543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 153643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 153743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen/** 1538727e995b7bba3c57fb1e5c156d386ca11894f781v * A JavaScript string value (ECMA-262, 4.3.17). 153943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen */ 1540594006017e46d82ed7146611dc12c20e3c509c7ddanno@chromium.orgclass V8_EXPORT String : public Primitive { 154143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen public: 154256c14afabc547f0a8ab2e24d789c00030f8df892ulan@chromium.org enum Encoding { 154356c14afabc547f0a8ab2e24d789c00030f8df892ulan@chromium.org UNKNOWN_ENCODING = 0x1, 154456c14afabc547f0a8ab2e24d789c00030f8df892ulan@chromium.org TWO_BYTE_ENCODING = 0x0, 154546a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org ASCII_ENCODING = 0x4, 154646a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org ONE_BYTE_ENCODING = 0x4 154756c14afabc547f0a8ab2e24d789c00030f8df892ulan@chromium.org }; 15489258b6bc66e09368ada54001f619d53b4fc976d5ager@chromium.org /** 15499258b6bc66e09368ada54001f619d53b4fc976d5ager@chromium.org * Returns the number of characters in this string. 15509258b6bc66e09368ada54001f619d53b4fc976d5ager@chromium.org */ 155146a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org int Length() const; 155243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 1553727e995b7bba3c57fb1e5c156d386ca11894f781v /** 15549258b6bc66e09368ada54001f619d53b4fc976d5ager@chromium.org * Returns the number of bytes in the UTF-8 encoded 15559258b6bc66e09368ada54001f619d53b4fc976d5ager@chromium.org * representation of this string. 15569258b6bc66e09368ada54001f619d53b4fc976d5ager@chromium.org */ 155746a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org int Utf8Length() const; 15589258b6bc66e09368ada54001f619d53b4fc976d5ager@chromium.org 15599258b6bc66e09368ada54001f619d53b4fc976d5ager@chromium.org /** 1560ca29dd85fa02449d17188f5a6ff9a7cdf2ad9680danno@chromium.org * This function is no longer useful. 15612c067b150f65db3e076b6b5a813e7f6f2492f770rossberg@chromium.org */ 156257ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org V8_DEPRECATED(V8_INLINE(bool MayContainNonAscii()) const) { return true; } 156346a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org 156446a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org /** 1565dfe53073738bbf16023d96fce5118358a1037fd3ulan@chromium.org * Returns whether this string is known to contain only one byte data. 1566dfe53073738bbf16023d96fce5118358a1037fd3ulan@chromium.org * Does not read the string. 1567dfe53073738bbf16023d96fce5118358a1037fd3ulan@chromium.org * False negatives are possible. 156846a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org */ 156946a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org bool IsOneByte() const; 15702c067b150f65db3e076b6b5a813e7f6f2492f770rossberg@chromium.org 15712c067b150f65db3e076b6b5a813e7f6f2492f770rossberg@chromium.org /** 1572dfe53073738bbf16023d96fce5118358a1037fd3ulan@chromium.org * Returns whether this string contain only one byte data. 1573dfe53073738bbf16023d96fce5118358a1037fd3ulan@chromium.org * Will read the entire string in some cases. 1574dfe53073738bbf16023d96fce5118358a1037fd3ulan@chromium.org */ 1575dfe53073738bbf16023d96fce5118358a1037fd3ulan@chromium.org bool ContainsOnlyOneByte() const; 1576dfe53073738bbf16023d96fce5118358a1037fd3ulan@chromium.org 1577dfe53073738bbf16023d96fce5118358a1037fd3ulan@chromium.org /** 1578727e995b7bba3c57fb1e5c156d386ca11894f781v * Write the contents of the string to an external buffer. 1579727e995b7bba3c57fb1e5c156d386ca11894f781v * If no arguments are given, expects the buffer to be large 1580727e995b7bba3c57fb1e5c156d386ca11894f781v * enough to hold the entire string and NULL terminator. Copies 1581727e995b7bba3c57fb1e5c156d386ca11894f781v * the contents of the string and the NULL terminator into the 1582727e995b7bba3c57fb1e5c156d386ca11894f781v * buffer. 1583727e995b7bba3c57fb1e5c156d386ca11894f781v * 15845f0c45f2cacb31d36a8f80c31f17bda7751a3644ager@chromium.org * WriteUtf8 will not write partial UTF-8 sequences, preferring to stop 15855f0c45f2cacb31d36a8f80c31f17bda7751a3644ager@chromium.org * before the end of the buffer. 15865f0c45f2cacb31d36a8f80c31f17bda7751a3644ager@chromium.org * 1587727e995b7bba3c57fb1e5c156d386ca11894f781v * Copies up to length characters into the output buffer. 1588727e995b7bba3c57fb1e5c156d386ca11894f781v * Only null-terminates if there is enough space in the buffer. 1589727e995b7bba3c57fb1e5c156d386ca11894f781v * 1590727e995b7bba3c57fb1e5c156d386ca11894f781v * \param buffer The buffer into which the string will be copied. 1591727e995b7bba3c57fb1e5c156d386ca11894f781v * \param start The starting position within the string at which 1592727e995b7bba3c57fb1e5c156d386ca11894f781v * copying begins. 15935f0c45f2cacb31d36a8f80c31f17bda7751a3644ager@chromium.org * \param length The number of characters to copy from the string. For 15945f0c45f2cacb31d36a8f80c31f17bda7751a3644ager@chromium.org * WriteUtf8 the number of bytes in the buffer. 1595357bf65ed5309ac3a2c4bf20b6ce7770488787c2ager@chromium.org * \param nchars_ref The number of characters written, can be NULL. 1596ddd545c4c343dcf4331b9d80d2a0bdfa373a4a0fricow@chromium.org * \param options Various options that might affect performance of this or 1597c9c80823e038328f2e1060d7feef0762a50adf06ricow@chromium.org * subsequent operations. 15985f0c45f2cacb31d36a8f80c31f17bda7751a3644ager@chromium.org * \return The number of characters copied to the buffer excluding the null 15995f0c45f2cacb31d36a8f80c31f17bda7751a3644ager@chromium.org * terminator. For WriteUtf8: The number of bytes copied to the buffer 1600ddd545c4c343dcf4331b9d80d2a0bdfa373a4a0fricow@chromium.org * including the null terminator (if written). 1601727e995b7bba3c57fb1e5c156d386ca11894f781v */ 1602ddd545c4c343dcf4331b9d80d2a0bdfa373a4a0fricow@chromium.org enum WriteOptions { 1603ddd545c4c343dcf4331b9d80d2a0bdfa373a4a0fricow@chromium.org NO_OPTIONS = 0, 1604ddd545c4c343dcf4331b9d80d2a0bdfa373a4a0fricow@chromium.org HINT_MANY_WRITES_EXPECTED = 1, 1605304cc33f8259ef467e8e3c79f448d0bae0e8cd85yangguo@chromium.org NO_NULL_TERMINATION = 2, 1606304cc33f8259ef467e8e3c79f448d0bae0e8cd85yangguo@chromium.org PRESERVE_ASCII_NULL = 4 1607b6e43bb9b1cd7673592be9dfd0a036fe8dab4dcdwhesse@chromium.org }; 1608b6e43bb9b1cd7673592be9dfd0a036fe8dab4dcdwhesse@chromium.org 160934e60787ea1e76f3ee49e859f71f036170c21f0elrn@chromium.org // 16-bit character codes. 161046a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org int Write(uint16_t* buffer, 161146a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org int start = 0, 161246a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org int length = -1, 161346a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org int options = NO_OPTIONS) const; 161434e60787ea1e76f3ee49e859f71f036170c21f0elrn@chromium.org // ASCII characters. 161557ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org V8_DEPRECATED(int WriteAscii(char* buffer, 161657ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org int start = 0, 161757ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org int length = -1, 161857ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org int options = NO_OPTIONS) const); 161946a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org // One byte characters. 162046a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org int WriteOneByte(uint8_t* buffer, 162146a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org int start = 0, 162246a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org int length = -1, 162346a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org int options = NO_OPTIONS) const; 162434e60787ea1e76f3ee49e859f71f036170c21f0elrn@chromium.org // UTF-8 encoded characters. 162546a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org int WriteUtf8(char* buffer, 162646a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org int length = -1, 162746a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org int* nchars_ref = NULL, 162846a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org int options = NO_OPTIONS) const; 162943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 1630727e995b7bba3c57fb1e5c156d386ca11894f781v /** 1631563b8dce8453a0464b60f21746e2f95a893f7a3aager@chromium.org * A zero length string. 1632563b8dce8453a0464b60f21746e2f95a893f7a3aager@chromium.org */ 163346a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org static v8::Local<v8::String> Empty(); 163432280cf2786219b2d9a668f7f00778fb59ac40b3mstarzinger@chromium.org V8_INLINE(static v8::Local<v8::String> Empty(Isolate* isolate)); 1635563b8dce8453a0464b60f21746e2f95a893f7a3aager@chromium.org 1636563b8dce8453a0464b60f21746e2f95a893f7a3aager@chromium.org /** 1637727e995b7bba3c57fb1e5c156d386ca11894f781v * Returns true if the string is external 1638727e995b7bba3c57fb1e5c156d386ca11894f781v */ 163946a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org bool IsExternal() const; 164043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 1641727e995b7bba3c57fb1e5c156d386ca11894f781v /** 164234e60787ea1e76f3ee49e859f71f036170c21f0elrn@chromium.org * Returns true if the string is both external and ASCII 1643727e995b7bba3c57fb1e5c156d386ca11894f781v */ 164446a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org bool IsExternalAscii() const; 164513bd294acf56c7f824d92d4941a2aeb3cec58e0ckmillikin@chromium.org 1646594006017e46d82ed7146611dc12c20e3c509c7ddanno@chromium.org class V8_EXPORT ExternalStringResourceBase { // NOLINT 164713bd294acf56c7f824d92d4941a2aeb3cec58e0ckmillikin@chromium.org public: 164813bd294acf56c7f824d92d4941a2aeb3cec58e0ckmillikin@chromium.org virtual ~ExternalStringResourceBase() {} 16492356e6fbe66ac3aa027b61cb43a3c3619b3c3a5evegorov@chromium.org 165013bd294acf56c7f824d92d4941a2aeb3cec58e0ckmillikin@chromium.org protected: 165113bd294acf56c7f824d92d4941a2aeb3cec58e0ckmillikin@chromium.org ExternalStringResourceBase() {} 16522356e6fbe66ac3aa027b61cb43a3c3619b3c3a5evegorov@chromium.org 16532356e6fbe66ac3aa027b61cb43a3c3619b3c3a5evegorov@chromium.org /** 16542356e6fbe66ac3aa027b61cb43a3c3619b3c3a5evegorov@chromium.org * Internally V8 will call this Dispose method when the external string 16552356e6fbe66ac3aa027b61cb43a3c3619b3c3a5evegorov@chromium.org * resource is no longer needed. The default implementation will use the 16562356e6fbe66ac3aa027b61cb43a3c3619b3c3a5evegorov@chromium.org * delete operator. This method can be overridden in subclasses to 16572356e6fbe66ac3aa027b61cb43a3c3619b3c3a5evegorov@chromium.org * control how allocated external string resources are disposed. 16582356e6fbe66ac3aa027b61cb43a3c3619b3c3a5evegorov@chromium.org */ 16592356e6fbe66ac3aa027b61cb43a3c3619b3c3a5evegorov@chromium.org virtual void Dispose() { delete this; } 16602356e6fbe66ac3aa027b61cb43a3c3619b3c3a5evegorov@chromium.org 166113bd294acf56c7f824d92d4941a2aeb3cec58e0ckmillikin@chromium.org private: 166213bd294acf56c7f824d92d4941a2aeb3cec58e0ckmillikin@chromium.org // Disallow copying and assigning. 166313bd294acf56c7f824d92d4941a2aeb3cec58e0ckmillikin@chromium.org ExternalStringResourceBase(const ExternalStringResourceBase&); 166413bd294acf56c7f824d92d4941a2aeb3cec58e0ckmillikin@chromium.org void operator=(const ExternalStringResourceBase&); 16652356e6fbe66ac3aa027b61cb43a3c3619b3c3a5evegorov@chromium.org 16662356e6fbe66ac3aa027b61cb43a3c3619b3c3a5evegorov@chromium.org friend class v8::internal::Heap; 166713bd294acf56c7f824d92d4941a2aeb3cec58e0ckmillikin@chromium.org }; 166813bd294acf56c7f824d92d4941a2aeb3cec58e0ckmillikin@chromium.org 1669727e995b7bba3c57fb1e5c156d386ca11894f781v /** 1670727e995b7bba3c57fb1e5c156d386ca11894f781v * An ExternalStringResource is a wrapper around a two-byte string 1671727e995b7bba3c57fb1e5c156d386ca11894f781v * buffer that resides outside V8's heap. Implement an 1672727e995b7bba3c57fb1e5c156d386ca11894f781v * ExternalStringResource to manage the life cycle of the underlying 16739258b6bc66e09368ada54001f619d53b4fc976d5ager@chromium.org * buffer. Note that the string data must be immutable. 1674727e995b7bba3c57fb1e5c156d386ca11894f781v */ 1675594006017e46d82ed7146611dc12c20e3c509c7ddanno@chromium.org class V8_EXPORT ExternalStringResource 167613bd294acf56c7f824d92d4941a2aeb3cec58e0ckmillikin@chromium.org : public ExternalStringResourceBase { 167743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen public: 167843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen /** 167943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * Override the destructor to manage the life cycle of the underlying 168043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * buffer. 168143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen */ 168243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen virtual ~ExternalStringResource() {} 16832356e6fbe66ac3aa027b61cb43a3c3619b3c3a5evegorov@chromium.org 16842356e6fbe66ac3aa027b61cb43a3c3619b3c3a5evegorov@chromium.org /** 16852356e6fbe66ac3aa027b61cb43a3c3619b3c3a5evegorov@chromium.org * The string data from the underlying buffer. 16862356e6fbe66ac3aa027b61cb43a3c3619b3c3a5evegorov@chromium.org */ 168743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen virtual const uint16_t* data() const = 0; 16882356e6fbe66ac3aa027b61cb43a3c3619b3c3a5evegorov@chromium.org 16892356e6fbe66ac3aa027b61cb43a3c3619b3c3a5evegorov@chromium.org /** 16902356e6fbe66ac3aa027b61cb43a3c3619b3c3a5evegorov@chromium.org * The length of the string. That is, the number of two-byte characters. 16912356e6fbe66ac3aa027b61cb43a3c3619b3c3a5evegorov@chromium.org */ 169243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen virtual size_t length() const = 0; 16932356e6fbe66ac3aa027b61cb43a3c3619b3c3a5evegorov@chromium.org 169443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen protected: 169543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen ExternalStringResource() {} 169643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen }; 169743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 169843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen /** 169934e60787ea1e76f3ee49e859f71f036170c21f0elrn@chromium.org * An ExternalAsciiStringResource is a wrapper around an ASCII 1700727e995b7bba3c57fb1e5c156d386ca11894f781v * string buffer that resides outside V8's heap. Implement an 1701727e995b7bba3c57fb1e5c156d386ca11894f781v * ExternalAsciiStringResource to manage the life cycle of the 17029258b6bc66e09368ada54001f619d53b4fc976d5ager@chromium.org * underlying buffer. Note that the string data must be immutable 170334e60787ea1e76f3ee49e859f71f036170c21f0elrn@chromium.org * and that the data must be strict (7-bit) ASCII, not Latin-1 or 17049258b6bc66e09368ada54001f619d53b4fc976d5ager@chromium.org * UTF-8, which would require special treatment internally in the 17059258b6bc66e09368ada54001f619d53b4fc976d5ager@chromium.org * engine and, in the case of UTF-8, do not allow efficient indexing. 17069258b6bc66e09368ada54001f619d53b4fc976d5ager@chromium.org * Use String::New or convert to 16 bit data for non-ASCII. 1707727e995b7bba3c57fb1e5c156d386ca11894f781v */ 170843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 1709594006017e46d82ed7146611dc12c20e3c509c7ddanno@chromium.org class V8_EXPORT ExternalAsciiStringResource 171013bd294acf56c7f824d92d4941a2aeb3cec58e0ckmillikin@chromium.org : public ExternalStringResourceBase { 171143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen public: 171243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen /** 171343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * Override the destructor to manage the life cycle of the underlying 171443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * buffer. 171543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen */ 171643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen virtual ~ExternalAsciiStringResource() {} 171743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen /** The string data from the underlying buffer.*/ 171843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen virtual const char* data() const = 0; 171934e60787ea1e76f3ee49e859f71f036170c21f0elrn@chromium.org /** The number of ASCII characters in the string.*/ 172043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen virtual size_t length() const = 0; 172143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen protected: 172243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen ExternalAsciiStringResource() {} 172343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen }; 172443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 172546a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org typedef ExternalAsciiStringResource ExternalOneByteStringResource; 172646a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org 172743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen /** 172856c14afabc547f0a8ab2e24d789c00030f8df892ulan@chromium.org * If the string is an external string, return the ExternalStringResourceBase 172956c14afabc547f0a8ab2e24d789c00030f8df892ulan@chromium.org * regardless of the encoding, otherwise return NULL. The encoding of the 173056c14afabc547f0a8ab2e24d789c00030f8df892ulan@chromium.org * string is returned in encoding_out. 173156c14afabc547f0a8ab2e24d789c00030f8df892ulan@chromium.org */ 173232280cf2786219b2d9a668f7f00778fb59ac40b3mstarzinger@chromium.org V8_INLINE(ExternalStringResourceBase* GetExternalStringResourceBase( 173332280cf2786219b2d9a668f7f00778fb59ac40b3mstarzinger@chromium.org Encoding* encoding_out) const); 173456c14afabc547f0a8ab2e24d789c00030f8df892ulan@chromium.org 173556c14afabc547f0a8ab2e24d789c00030f8df892ulan@chromium.org /** 17369085a016223a6b72bf580d5781c93ec7b9e54422ager@chromium.org * Get the ExternalStringResource for an external string. Returns 17379085a016223a6b72bf580d5781c93ec7b9e54422ager@chromium.org * NULL if IsExternal() doesn't return true. 173843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen */ 173932280cf2786219b2d9a668f7f00778fb59ac40b3mstarzinger@chromium.org V8_INLINE(ExternalStringResource* GetExternalStringResource() const); 174043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 174143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen /** 174234e60787ea1e76f3ee49e859f71f036170c21f0elrn@chromium.org * Get the ExternalAsciiStringResource for an external ASCII string. 17439085a016223a6b72bf580d5781c93ec7b9e54422ager@chromium.org * Returns NULL if IsExternalAscii() doesn't return true. 174443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen */ 174546a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org const ExternalAsciiStringResource* GetExternalAsciiStringResource() const; 174643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 174732280cf2786219b2d9a668f7f00778fb59ac40b3mstarzinger@chromium.org V8_INLINE(static String* Cast(v8::Value* obj)); 174843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 174932d7dbafe29be06cec1edd36c31fbe2865c799f4ulan@chromium.org // TODO(dcarney): deprecate 175043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen /** 175134e60787ea1e76f3ee49e859f71f036170c21f0elrn@chromium.org * Allocates a new string from either UTF-8 encoded or ASCII data. 1752a6bbcc801f63c451f814d6da77a1a48fba3d36c6yangguo@chromium.org * The second parameter 'length' gives the buffer length. If omitted, 1753a6bbcc801f63c451f814d6da77a1a48fba3d36c6yangguo@chromium.org * the function calls 'strlen' to determine the buffer length. 175443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen */ 175532d7dbafe29be06cec1edd36c31fbe2865c799f4ulan@chromium.org V8_INLINE(static Local<String> New(const char* data, int length = -1)); 175643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 175732d7dbafe29be06cec1edd36c31fbe2865c799f4ulan@chromium.org // TODO(dcarney): deprecate 175834e60787ea1e76f3ee49e859f71f036170c21f0elrn@chromium.org /** Allocates a new string from 16-bit character codes.*/ 175932d7dbafe29be06cec1edd36c31fbe2865c799f4ulan@chromium.org V8_INLINE(static Local<String> New(const uint16_t* data, int length = -1)); 176043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 176132d7dbafe29be06cec1edd36c31fbe2865c799f4ulan@chromium.org // TODO(dcarney): deprecate 1762e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org /** 1763e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org * Creates an internalized string (historically called a "symbol", 1764e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org * not to be confused with ES6 symbols). Returns one if it exists already. 1765e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org */ 176632d7dbafe29be06cec1edd36c31fbe2865c799f4ulan@chromium.org V8_INLINE(static Local<String> NewSymbol(const char* data, int length = -1)); 176732d7dbafe29be06cec1edd36c31fbe2865c799f4ulan@chromium.org 176832d7dbafe29be06cec1edd36c31fbe2865c799f4ulan@chromium.org enum NewStringType { 176932d7dbafe29be06cec1edd36c31fbe2865c799f4ulan@chromium.org kNormalString, kInternalizedString, kUndetectableString 177032d7dbafe29be06cec1edd36c31fbe2865c799f4ulan@chromium.org }; 177132d7dbafe29be06cec1edd36c31fbe2865c799f4ulan@chromium.org 177232d7dbafe29be06cec1edd36c31fbe2865c799f4ulan@chromium.org /** Allocates a new string from UTF-8 data.*/ 177332d7dbafe29be06cec1edd36c31fbe2865c799f4ulan@chromium.org static Local<String> NewFromUtf8(Isolate* isolate, 177432d7dbafe29be06cec1edd36c31fbe2865c799f4ulan@chromium.org const char* data, 177532d7dbafe29be06cec1edd36c31fbe2865c799f4ulan@chromium.org NewStringType type = kNormalString, 177632d7dbafe29be06cec1edd36c31fbe2865c799f4ulan@chromium.org int length = -1); 177732d7dbafe29be06cec1edd36c31fbe2865c799f4ulan@chromium.org 177832d7dbafe29be06cec1edd36c31fbe2865c799f4ulan@chromium.org /** Allocates a new string from Latin-1 data.*/ 177932d7dbafe29be06cec1edd36c31fbe2865c799f4ulan@chromium.org static Local<String> NewFromOneByte( 178032d7dbafe29be06cec1edd36c31fbe2865c799f4ulan@chromium.org Isolate* isolate, 178132d7dbafe29be06cec1edd36c31fbe2865c799f4ulan@chromium.org const uint8_t* data, 178232d7dbafe29be06cec1edd36c31fbe2865c799f4ulan@chromium.org NewStringType type = kNormalString, 178332d7dbafe29be06cec1edd36c31fbe2865c799f4ulan@chromium.org int length = -1); 178432d7dbafe29be06cec1edd36c31fbe2865c799f4ulan@chromium.org 178532d7dbafe29be06cec1edd36c31fbe2865c799f4ulan@chromium.org /** Allocates a new string from UTF-16 data.*/ 178632d7dbafe29be06cec1edd36c31fbe2865c799f4ulan@chromium.org static Local<String> NewFromTwoByte( 178732d7dbafe29be06cec1edd36c31fbe2865c799f4ulan@chromium.org Isolate* isolate, 178832d7dbafe29be06cec1edd36c31fbe2865c799f4ulan@chromium.org const uint16_t* data, 178932d7dbafe29be06cec1edd36c31fbe2865c799f4ulan@chromium.org NewStringType type = kNormalString, 179032d7dbafe29be06cec1edd36c31fbe2865c799f4ulan@chromium.org int length = -1); 179143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 1792727e995b7bba3c57fb1e5c156d386ca11894f781v /** 17939d58c2b1c27d8b2890b9bd46e57d3842b09e0292christian.plesner.hansen@gmail.com * Creates a new string by concatenating the left and the right strings 17949d58c2b1c27d8b2890b9bd46e57d3842b09e0292christian.plesner.hansen@gmail.com * passed in as parameters. 17959d58c2b1c27d8b2890b9bd46e57d3842b09e0292christian.plesner.hansen@gmail.com */ 179646a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org static Local<String> Concat(Handle<String> left, Handle<String> right); 17979d58c2b1c27d8b2890b9bd46e57d3842b09e0292christian.plesner.hansen@gmail.com 17989d58c2b1c27d8b2890b9bd46e57d3842b09e0292christian.plesner.hansen@gmail.com /** 1799727e995b7bba3c57fb1e5c156d386ca11894f781v * Creates a new external string using the data defined in the given 18001af7e1b5f676e5556c041fe09a5c4f5a906f27a0lrn@chromium.org * resource. When the external string is no longer live on V8's heap the 18012356e6fbe66ac3aa027b61cb43a3c3619b3c3a5evegorov@chromium.org * resource will be disposed by calling its Dispose method. The caller of 18022356e6fbe66ac3aa027b61cb43a3c3619b3c3a5evegorov@chromium.org * this function should not otherwise delete or modify the resource. Neither 18032356e6fbe66ac3aa027b61cb43a3c3619b3c3a5evegorov@chromium.org * should the underlying buffer be deallocated or modified except through the 18042356e6fbe66ac3aa027b61cb43a3c3619b3c3a5evegorov@chromium.org * destructor of the external string resource. 1805727e995b7bba3c57fb1e5c156d386ca11894f781v */ 180646a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org static Local<String> NewExternal(ExternalStringResource* resource); 1807bb29dc9819bb6f495ab6eddd2543965eb97a8e43ager@chromium.org 18086f10e41fef1524c70846d970268de222e41c594cager@chromium.org /** 18096f10e41fef1524c70846d970268de222e41c594cager@chromium.org * Associate an external string resource with this string by transforming it 18106f10e41fef1524c70846d970268de222e41c594cager@chromium.org * in place so that existing references to this string in the JavaScript heap 18116f10e41fef1524c70846d970268de222e41c594cager@chromium.org * will use the external string resource. The external string resource's 18127304bcac06a6a63b9f3dcebac2eeceada87ca146vegorov@chromium.org * character contents need to be equivalent to this string. 18136f10e41fef1524c70846d970268de222e41c594cager@chromium.org * Returns true if the string has been changed to be an external string. 18141af7e1b5f676e5556c041fe09a5c4f5a906f27a0lrn@chromium.org * The string is not modified if the operation fails. See NewExternal for 18151af7e1b5f676e5556c041fe09a5c4f5a906f27a0lrn@chromium.org * information on the lifetime of the resource. 18166f10e41fef1524c70846d970268de222e41c594cager@chromium.org */ 181746a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org bool MakeExternal(ExternalStringResource* resource); 181843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 1819727e995b7bba3c57fb1e5c156d386ca11894f781v /** 182034e60787ea1e76f3ee49e859f71f036170c21f0elrn@chromium.org * Creates a new external string using the ASCII data defined in the given 18211af7e1b5f676e5556c041fe09a5c4f5a906f27a0lrn@chromium.org * resource. When the external string is no longer live on V8's heap the 18222356e6fbe66ac3aa027b61cb43a3c3619b3c3a5evegorov@chromium.org * resource will be disposed by calling its Dispose method. The caller of 18232356e6fbe66ac3aa027b61cb43a3c3619b3c3a5evegorov@chromium.org * this function should not otherwise delete or modify the resource. Neither 18242356e6fbe66ac3aa027b61cb43a3c3619b3c3a5evegorov@chromium.org * should the underlying buffer be deallocated or modified except through the 18252356e6fbe66ac3aa027b61cb43a3c3619b3c3a5evegorov@chromium.org * destructor of the external string resource. 182646a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org */ 182746a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org static Local<String> NewExternal(ExternalAsciiStringResource* resource); 1828bb29dc9819bb6f495ab6eddd2543965eb97a8e43ager@chromium.org 18296f10e41fef1524c70846d970268de222e41c594cager@chromium.org /** 18306f10e41fef1524c70846d970268de222e41c594cager@chromium.org * Associate an external string resource with this string by transforming it 18316f10e41fef1524c70846d970268de222e41c594cager@chromium.org * in place so that existing references to this string in the JavaScript heap 18326f10e41fef1524c70846d970268de222e41c594cager@chromium.org * will use the external string resource. The external string resource's 18337304bcac06a6a63b9f3dcebac2eeceada87ca146vegorov@chromium.org * character contents need to be equivalent to this string. 18346f10e41fef1524c70846d970268de222e41c594cager@chromium.org * Returns true if the string has been changed to be an external string. 18351af7e1b5f676e5556c041fe09a5c4f5a906f27a0lrn@chromium.org * The string is not modified if the operation fails. See NewExternal for 18361af7e1b5f676e5556c041fe09a5c4f5a906f27a0lrn@chromium.org * information on the lifetime of the resource. 18376f10e41fef1524c70846d970268de222e41c594cager@chromium.org */ 183846a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org bool MakeExternal(ExternalAsciiStringResource* resource); 183943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 18405a6af92a1549c81fb61855518f43b712e4c0e469christian.plesner.hansen@gmail.com /** 18415a6af92a1549c81fb61855518f43b712e4c0e469christian.plesner.hansen@gmail.com * Returns true if this string can be made external. 18425a6af92a1549c81fb61855518f43b712e4c0e469christian.plesner.hansen@gmail.com */ 184346a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org bool CanMakeExternal(); 18445a6af92a1549c81fb61855518f43b712e4c0e469christian.plesner.hansen@gmail.com 184532d7dbafe29be06cec1edd36c31fbe2865c799f4ulan@chromium.org // TODO(dcarney): deprecate 184634e60787ea1e76f3ee49e859f71f036170c21f0elrn@chromium.org /** Creates an undetectable string from the supplied ASCII or UTF-8 data.*/ 184732d7dbafe29be06cec1edd36c31fbe2865c799f4ulan@chromium.org V8_INLINE( 184832d7dbafe29be06cec1edd36c31fbe2865c799f4ulan@chromium.org static Local<String> NewUndetectable(const char* data, int length = -1)); 184943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 185032d7dbafe29be06cec1edd36c31fbe2865c799f4ulan@chromium.org // TODO(dcarney): deprecate 185134e60787ea1e76f3ee49e859f71f036170c21f0elrn@chromium.org /** Creates an undetectable string from the supplied 16-bit character codes.*/ 185232d7dbafe29be06cec1edd36c31fbe2865c799f4ulan@chromium.org V8_INLINE(static Local<String> NewUndetectable( 185332d7dbafe29be06cec1edd36c31fbe2865c799f4ulan@chromium.org const uint16_t* data, int length = -1)); 185443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 185543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen /** 185634e60787ea1e76f3ee49e859f71f036170c21f0elrn@chromium.org * Converts an object to a UTF-8-encoded character array. Useful if 185771daaf639544be2a6638e3566f78e0b14f05cd7bager@chromium.org * you want to print the object. If conversion to a string fails 185834e60787ea1e76f3ee49e859f71f036170c21f0elrn@chromium.org * (e.g. due to an exception in the toString() method of the object) 185971daaf639544be2a6638e3566f78e0b14f05cd7bager@chromium.org * then the length() method returns 0 and the * operator returns 186071daaf639544be2a6638e3566f78e0b14f05cd7bager@chromium.org * NULL. 18619258b6bc66e09368ada54001f619d53b4fc976d5ager@chromium.org */ 1862594006017e46d82ed7146611dc12c20e3c509c7ddanno@chromium.org class V8_EXPORT Utf8Value { 18639258b6bc66e09368ada54001f619d53b4fc976d5ager@chromium.org public: 18649258b6bc66e09368ada54001f619d53b4fc976d5ager@chromium.org explicit Utf8Value(Handle<v8::Value> obj); 18659258b6bc66e09368ada54001f619d53b4fc976d5ager@chromium.org ~Utf8Value(); 1866a1645e29968e70a41226edda2c49788fcea48b74ager@chromium.org char* operator*() { return str_; } 1867a1645e29968e70a41226edda2c49788fcea48b74ager@chromium.org const char* operator*() const { return str_; } 1868a1645e29968e70a41226edda2c49788fcea48b74ager@chromium.org int length() const { return length_; } 18699258b6bc66e09368ada54001f619d53b4fc976d5ager@chromium.org private: 18709258b6bc66e09368ada54001f619d53b4fc976d5ager@chromium.org char* str_; 18719258b6bc66e09368ada54001f619d53b4fc976d5ager@chromium.org int length_; 187241044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org 187341044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org // Disallow copying and assigning. 187441044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org Utf8Value(const Utf8Value&); 187541044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org void operator=(const Utf8Value&); 18769258b6bc66e09368ada54001f619d53b4fc976d5ager@chromium.org }; 18779258b6bc66e09368ada54001f619d53b4fc976d5ager@chromium.org 18789258b6bc66e09368ada54001f619d53b4fc976d5ager@chromium.org /** 187934e60787ea1e76f3ee49e859f71f036170c21f0elrn@chromium.org * Converts an object to an ASCII string. 188043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * Useful if you want to print the object. 188171daaf639544be2a6638e3566f78e0b14f05cd7bager@chromium.org * If conversion to a string fails (eg. due to an exception in the toString() 188271daaf639544be2a6638e3566f78e0b14f05cd7bager@chromium.org * method of the object) then the length() method returns 0 and the * operator 188371daaf639544be2a6638e3566f78e0b14f05cd7bager@chromium.org * returns NULL. 188443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen */ 1885594006017e46d82ed7146611dc12c20e3c509c7ddanno@chromium.org class V8_EXPORT AsciiValue { 188643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen public: 1887906e2fb760f52fe6e75b744b1ea42576ea5b2c29ulan@chromium.org // TODO(dcarney): deprecate 188843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen explicit AsciiValue(Handle<v8::Value> obj); 188943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen ~AsciiValue(); 1890a1645e29968e70a41226edda2c49788fcea48b74ager@chromium.org char* operator*() { return str_; } 1891a1645e29968e70a41226edda2c49788fcea48b74ager@chromium.org const char* operator*() const { return str_; } 1892a1645e29968e70a41226edda2c49788fcea48b74ager@chromium.org int length() const { return length_; } 189343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen private: 189443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen char* str_; 18959258b6bc66e09368ada54001f619d53b4fc976d5ager@chromium.org int length_; 189641044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org 189741044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org // Disallow copying and assigning. 189841044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org AsciiValue(const AsciiValue&); 189941044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org void operator=(const AsciiValue&); 190043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen }; 190143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 190243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen /** 190343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * Converts an object to a two-byte string. 190471daaf639544be2a6638e3566f78e0b14f05cd7bager@chromium.org * If conversion to a string fails (eg. due to an exception in the toString() 190571daaf639544be2a6638e3566f78e0b14f05cd7bager@chromium.org * method of the object) then the length() method returns 0 and the * operator 190671daaf639544be2a6638e3566f78e0b14f05cd7bager@chromium.org * returns NULL. 190743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen */ 1908594006017e46d82ed7146611dc12c20e3c509c7ddanno@chromium.org class V8_EXPORT Value { 190943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen public: 191043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen explicit Value(Handle<v8::Value> obj); 191143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen ~Value(); 1912a1645e29968e70a41226edda2c49788fcea48b74ager@chromium.org uint16_t* operator*() { return str_; } 1913a1645e29968e70a41226edda2c49788fcea48b74ager@chromium.org const uint16_t* operator*() const { return str_; } 1914a1645e29968e70a41226edda2c49788fcea48b74ager@chromium.org int length() const { return length_; } 191543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen private: 191643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen uint16_t* str_; 19179258b6bc66e09368ada54001f619d53b4fc976d5ager@chromium.org int length_; 191841044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org 191941044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org // Disallow copying and assigning. 192041044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org Value(const Value&); 192141044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org void operator=(const Value&); 192243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen }; 19239d58c2b1c27d8b2890b9bd46e57d3842b09e0292christian.plesner.hansen@gmail.com 192418ad94b919217ffbcd2d3159eeb5f8c588761c47ager@chromium.org private: 192546a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org void VerifyExternalStringResourceBase(ExternalStringResourceBase* v, 192646a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org Encoding encoding) const; 192746a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org void VerifyExternalStringResource(ExternalStringResource* val) const; 192846a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org static void CheckCast(v8::Value* obj); 192943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen}; 193043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 193143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 193243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen/** 1933e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org * A JavaScript symbol (ECMA-262 edition 6) 1934e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org * 1935e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org * This is an experimental feature. Use at your own risk. 1936e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org */ 1937594006017e46d82ed7146611dc12c20e3c509c7ddanno@chromium.orgclass V8_EXPORT Symbol : public Primitive { 1938e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org public: 1939e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org // Returns the print name string of the symbol, or undefined if none. 1940e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org Local<Value> Name() const; 1941e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org 1942e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org // Create a symbol without a print name. 1943e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org static Local<Symbol> New(Isolate* isolate); 1944e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org 1945e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org // Create a symbol with a print name. 1946e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org static Local<Symbol> New(Isolate *isolate, const char* data, int length = -1); 1947e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org 1948e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org V8_INLINE(static Symbol* Cast(v8::Value* obj)); 1949e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org private: 1950e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org Symbol(); 1951e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org static void CheckCast(v8::Value* obj); 1952e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org}; 1953e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org 1954e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org 1955e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org/** 1956727e995b7bba3c57fb1e5c156d386ca11894f781v * A JavaScript number value (ECMA-262, 4.3.20) 195743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen */ 1958594006017e46d82ed7146611dc12c20e3c509c7ddanno@chromium.orgclass V8_EXPORT Number : public Primitive { 195943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen public: 196046a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org double Value() const; 196146a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org static Local<Number> New(double value); 1962bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.org static Local<Number> New(Isolate* isolate, double value); 196332280cf2786219b2d9a668f7f00778fb59ac40b3mstarzinger@chromium.org V8_INLINE(static Number* Cast(v8::Value* obj)); 196443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen private: 196546a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org Number(); 196646a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org static void CheckCast(v8::Value* obj); 196743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen}; 196843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 196943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 197043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen/** 1971727e995b7bba3c57fb1e5c156d386ca11894f781v * A JavaScript value representing a signed integer. 197243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen */ 1973594006017e46d82ed7146611dc12c20e3c509c7ddanno@chromium.orgclass V8_EXPORT Integer : public Number { 197443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen public: 197546a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org static Local<Integer> New(int32_t value); 197646a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org static Local<Integer> NewFromUnsigned(uint32_t value); 197746a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org static Local<Integer> New(int32_t value, Isolate*); 197846a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org static Local<Integer> NewFromUnsigned(uint32_t value, Isolate*); 197946a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org int64_t Value() const; 198032280cf2786219b2d9a668f7f00778fb59ac40b3mstarzinger@chromium.org V8_INLINE(static Integer* Cast(v8::Value* obj)); 198143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen private: 198246a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org Integer(); 198346a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org static void CheckCast(v8::Value* obj); 198443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen}; 198543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 198643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 198743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen/** 1988727e995b7bba3c57fb1e5c156d386ca11894f781v * A JavaScript value representing a 32-bit signed integer. 198943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen */ 1990594006017e46d82ed7146611dc12c20e3c509c7ddanno@chromium.orgclass V8_EXPORT Int32 : public Integer { 199143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen public: 199246a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org int32_t Value() const; 199343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen private: 199446a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org Int32(); 199543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen}; 199643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 199743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 199843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen/** 1999727e995b7bba3c57fb1e5c156d386ca11894f781v * A JavaScript value representing a 32-bit unsigned integer. 200043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen */ 2001594006017e46d82ed7146611dc12c20e3c509c7ddanno@chromium.orgclass V8_EXPORT Uint32 : public Integer { 200243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen public: 200346a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org uint32_t Value() const; 200443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen private: 200546a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org Uint32(); 200643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen}; 200743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 200843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 200943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenenum PropertyAttribute { 201043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen None = 0, 201143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen ReadOnly = 1 << 0, 201243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen DontEnum = 1 << 1, 201343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen DontDelete = 1 << 2 201443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen}; 201543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 20163811b436bf328d2ace6fe79ce99aeda71f9f06d3ager@chromium.orgenum ExternalArrayType { 20173811b436bf328d2ace6fe79ce99aeda71f9f06d3ager@chromium.org kExternalByteArray = 1, 20183811b436bf328d2ace6fe79ce99aeda71f9f06d3ager@chromium.org kExternalUnsignedByteArray, 20193811b436bf328d2ace6fe79ce99aeda71f9f06d3ager@chromium.org kExternalShortArray, 20203811b436bf328d2ace6fe79ce99aeda71f9f06d3ager@chromium.org kExternalUnsignedShortArray, 20213811b436bf328d2ace6fe79ce99aeda71f9f06d3ager@chromium.org kExternalIntArray, 20223811b436bf328d2ace6fe79ce99aeda71f9f06d3ager@chromium.org kExternalUnsignedIntArray, 20234d3fe4e246b0312eba361689f288ddf8dd516960danno@chromium.org kExternalFloatArray, 20243847bd5ff857259e945a01d75fdb383e2351d166erik.corry@gmail.com kExternalDoubleArray, 20254d3fe4e246b0312eba361689f288ddf8dd516960danno@chromium.org kExternalPixelArray 20263811b436bf328d2ace6fe79ce99aeda71f9f06d3ager@chromium.org}; 20273811b436bf328d2ace6fe79ce99aeda71f9f06d3ager@chromium.org 202843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen/** 20299155e252524a2bf92aecd27493feafed86702312kmillikin@chromium.org * Accessor[Getter|Setter] are used as callback functions when 20309155e252524a2bf92aecd27493feafed86702312kmillikin@chromium.org * setting|getting a particular property. See Object and ObjectTemplate's 20319155e252524a2bf92aecd27493feafed86702312kmillikin@chromium.org * method SetAccessor. 20329155e252524a2bf92aecd27493feafed86702312kmillikin@chromium.org */ 20339155e252524a2bf92aecd27493feafed86702312kmillikin@chromium.orgtypedef Handle<Value> (*AccessorGetter)(Local<String> property, 20349155e252524a2bf92aecd27493feafed86702312kmillikin@chromium.org const AccessorInfo& info); 2035bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.orgtypedef void (*AccessorGetterCallback)( 2036bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.org Local<String> property, 2037bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.org const PropertyCallbackInfo<Value>& info); 20389155e252524a2bf92aecd27493feafed86702312kmillikin@chromium.org 20399155e252524a2bf92aecd27493feafed86702312kmillikin@chromium.org 20409155e252524a2bf92aecd27493feafed86702312kmillikin@chromium.orgtypedef void (*AccessorSetter)(Local<String> property, 20419155e252524a2bf92aecd27493feafed86702312kmillikin@chromium.org Local<Value> value, 20429155e252524a2bf92aecd27493feafed86702312kmillikin@chromium.org const AccessorInfo& info); 2043bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.orgtypedef void (*AccessorSetterCallback)( 2044bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.org Local<String> property, 2045bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.org Local<Value> value, 2046bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.org const PropertyCallbackInfo<void>& info); 20479155e252524a2bf92aecd27493feafed86702312kmillikin@chromium.org 20489155e252524a2bf92aecd27493feafed86702312kmillikin@chromium.org 20499155e252524a2bf92aecd27493feafed86702312kmillikin@chromium.org/** 20509155e252524a2bf92aecd27493feafed86702312kmillikin@chromium.org * Access control specifications. 20519155e252524a2bf92aecd27493feafed86702312kmillikin@chromium.org * 20529155e252524a2bf92aecd27493feafed86702312kmillikin@chromium.org * Some accessors should be accessible across contexts. These 20539155e252524a2bf92aecd27493feafed86702312kmillikin@chromium.org * accessors have an explicit access control parameter which specifies 20549155e252524a2bf92aecd27493feafed86702312kmillikin@chromium.org * the kind of cross-context access that should be allowed. 20559155e252524a2bf92aecd27493feafed86702312kmillikin@chromium.org * 20569155e252524a2bf92aecd27493feafed86702312kmillikin@chromium.org * Additionally, for security, accessors can prohibit overwriting by 20579155e252524a2bf92aecd27493feafed86702312kmillikin@chromium.org * accessors defined in JavaScript. For objects that have such 20589155e252524a2bf92aecd27493feafed86702312kmillikin@chromium.org * accessors either locally or in their prototype chain it is not 20599155e252524a2bf92aecd27493feafed86702312kmillikin@chromium.org * possible to overwrite the accessor by using __defineGetter__ or 20609155e252524a2bf92aecd27493feafed86702312kmillikin@chromium.org * __defineSetter__ from JavaScript code. 20619155e252524a2bf92aecd27493feafed86702312kmillikin@chromium.org */ 20629155e252524a2bf92aecd27493feafed86702312kmillikin@chromium.orgenum AccessControl { 20639155e252524a2bf92aecd27493feafed86702312kmillikin@chromium.org DEFAULT = 0, 20649155e252524a2bf92aecd27493feafed86702312kmillikin@chromium.org ALL_CAN_READ = 1, 20659155e252524a2bf92aecd27493feafed86702312kmillikin@chromium.org ALL_CAN_WRITE = 1 << 1, 20669155e252524a2bf92aecd27493feafed86702312kmillikin@chromium.org PROHIBITS_OVERWRITING = 1 << 2 20679155e252524a2bf92aecd27493feafed86702312kmillikin@chromium.org}; 20689155e252524a2bf92aecd27493feafed86702312kmillikin@chromium.org 20699155e252524a2bf92aecd27493feafed86702312kmillikin@chromium.org 20709155e252524a2bf92aecd27493feafed86702312kmillikin@chromium.org/** 2071727e995b7bba3c57fb1e5c156d386ca11894f781v * A JavaScript object (ECMA-262, 4.3.3) 207243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen */ 2073594006017e46d82ed7146611dc12c20e3c509c7ddanno@chromium.orgclass V8_EXPORT Object : public Value { 207443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen public: 207546a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org bool Set(Handle<Value> key, 207646a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org Handle<Value> value, 207746a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org PropertyAttribute attribs = None); 207865dad4b091d2925543c6326db635d0f7cf9e1edcager@chromium.org 207946a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org bool Set(uint32_t index, Handle<Value> value); 2080ce5e87bd905d592a8bd612b3dedf7a994177c13aager@chromium.org 2081e2902be65446e26fd63a3b4eab2f14257cf4ebafager@chromium.org // Sets a local property on this object bypassing interceptors and 208265dad4b091d2925543c6326db635d0f7cf9e1edcager@chromium.org // overriding accessors or read-only properties. 208365dad4b091d2925543c6326db635d0f7cf9e1edcager@chromium.org // 208465dad4b091d2925543c6326db635d0f7cf9e1edcager@chromium.org // Note that if the object has an interceptor the property will be set 208565dad4b091d2925543c6326db635d0f7cf9e1edcager@chromium.org // locally, but since the interceptor takes precedence the local property 208665dad4b091d2925543c6326db635d0f7cf9e1edcager@chromium.org // will only be returned if the interceptor doesn't return a value. 208765dad4b091d2925543c6326db635d0f7cf9e1edcager@chromium.org // 208865dad4b091d2925543c6326db635d0f7cf9e1edcager@chromium.org // Note also that this only works for named properties. 208946a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org bool ForceSet(Handle<Value> key, 209046a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org Handle<Value> value, 209146a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org PropertyAttribute attribs = None); 2092e2902be65446e26fd63a3b4eab2f14257cf4ebafager@chromium.org 209346a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org Local<Value> Get(Handle<Value> key); 209443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 209546a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org Local<Value> Get(uint32_t index); 2096ce5e87bd905d592a8bd612b3dedf7a994177c13aager@chromium.org 2097717967fd64e99e759ff094df6f069440cc866266rossberg@chromium.org /** 2098717967fd64e99e759ff094df6f069440cc866266rossberg@chromium.org * Gets the property attributes of a property which can be None or 2099717967fd64e99e759ff094df6f069440cc866266rossberg@chromium.org * any combination of ReadOnly, DontEnum and DontDelete. Returns 2100717967fd64e99e759ff094df6f069440cc866266rossberg@chromium.org * None when the property doesn't exist. 2101717967fd64e99e759ff094df6f069440cc866266rossberg@chromium.org */ 210246a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org PropertyAttribute GetPropertyAttributes(Handle<Value> key); 2103717967fd64e99e759ff094df6f069440cc866266rossberg@chromium.org 2104e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org bool Has(Handle<Value> key); 2105e2902be65446e26fd63a3b4eab2f14257cf4ebafager@chromium.org 2106e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org bool Delete(Handle<Value> key); 2107e2902be65446e26fd63a3b4eab2f14257cf4ebafager@chromium.org 2108e2902be65446e26fd63a3b4eab2f14257cf4ebafager@chromium.org // Delete a property on this object bypassing interceptors and 2109e2902be65446e26fd63a3b4eab2f14257cf4ebafager@chromium.org // ignoring dont-delete attributes. 211046a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org bool ForceDelete(Handle<Value> key); 2111e2902be65446e26fd63a3b4eab2f14257cf4ebafager@chromium.org 211246a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org bool Has(uint32_t index); 2113e2902be65446e26fd63a3b4eab2f14257cf4ebafager@chromium.org 211446a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org bool Delete(uint32_t index); 211543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 21161510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org V8_DEPRECATED(bool SetAccessor(Handle<String> name, 21171510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org AccessorGetter getter, 21181510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org AccessorSetter setter = 0, 21191510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org Handle<Value> data = Handle<Value>(), 21201510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org AccessControl settings = DEFAULT, 21211510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org PropertyAttribute attribute = None)); 2122bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.org bool SetAccessor(Handle<String> name, 2123bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.org AccessorGetterCallback getter, 2124bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.org AccessorSetterCallback setter = 0, 2125bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.org Handle<Value> data = Handle<Value>(), 2126bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.org AccessControl settings = DEFAULT, 2127bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.org PropertyAttribute attribute = None); 21289155e252524a2bf92aecd27493feafed86702312kmillikin@chromium.org 2129750145ab1b720c97adf2b548cc8fbd28c8b8e06dulan@chromium.org // This function is not yet stable and should not be used at this time. 2130750145ab1b720c97adf2b548cc8fbd28c8b8e06dulan@chromium.org bool SetAccessor(Handle<String> name, 2131750145ab1b720c97adf2b548cc8fbd28c8b8e06dulan@chromium.org Handle<DeclaredAccessorDescriptor> descriptor, 2132750145ab1b720c97adf2b548cc8fbd28c8b8e06dulan@chromium.org AccessControl settings = DEFAULT, 2133750145ab1b720c97adf2b548cc8fbd28c8b8e06dulan@chromium.org PropertyAttribute attribute = None); 2134750145ab1b720c97adf2b548cc8fbd28c8b8e06dulan@chromium.org 213543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen /** 21365a8ca6c70c6fc9716f18f6223c98d1fef5752cf6kasperl@chromium.org * Returns an array containing the names of the enumerable properties 21375a8ca6c70c6fc9716f18f6223c98d1fef5752cf6kasperl@chromium.org * of this object, including properties from prototype objects. The 21385a8ca6c70c6fc9716f18f6223c98d1fef5752cf6kasperl@chromium.org * array returned by this method contains the same values as would 21395a8ca6c70c6fc9716f18f6223c98d1fef5752cf6kasperl@chromium.org * be enumerated by a for-in statement over this object. 21405a8ca6c70c6fc9716f18f6223c98d1fef5752cf6kasperl@chromium.org */ 214146a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org Local<Array> GetPropertyNames(); 21425a8ca6c70c6fc9716f18f6223c98d1fef5752cf6kasperl@chromium.org 21435a8ca6c70c6fc9716f18f6223c98d1fef5752cf6kasperl@chromium.org /** 21446d786c9805481bd13ecb29c3155540f2f32950e1svenpanne@chromium.org * This function has the same functionality as GetPropertyNames but 21456d786c9805481bd13ecb29c3155540f2f32950e1svenpanne@chromium.org * the returned array doesn't contain the names of properties from 21466d786c9805481bd13ecb29c3155540f2f32950e1svenpanne@chromium.org * prototype objects. 21476d786c9805481bd13ecb29c3155540f2f32950e1svenpanne@chromium.org */ 214846a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org Local<Array> GetOwnPropertyNames(); 21496d786c9805481bd13ecb29c3155540f2f32950e1svenpanne@chromium.org 21506d786c9805481bd13ecb29c3155540f2f32950e1svenpanne@chromium.org /** 215143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * Get the prototype object. This does not skip objects marked to 215243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * be skipped by __proto__ and it does not consult the security 215343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * handler. 215443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen */ 215546a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org Local<Value> GetPrototype(); 215643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 215743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen /** 21585c838251403b0be9a882540f1922577abba4c872ager@chromium.org * Set the prototype object. This does not skip objects marked to 21595c838251403b0be9a882540f1922577abba4c872ager@chromium.org * be skipped by __proto__ and it does not consult the security 21605c838251403b0be9a882540f1922577abba4c872ager@chromium.org * handler. 21615c838251403b0be9a882540f1922577abba4c872ager@chromium.org */ 216246a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org bool SetPrototype(Handle<Value> prototype); 21635c838251403b0be9a882540f1922577abba4c872ager@chromium.org 21645c838251403b0be9a882540f1922577abba4c872ager@chromium.org /** 2165900d3b7262f6cf66f9e2d89ceb64ffd929c6cca0sgjesse@chromium.org * Finds an instance of the given function template in the prototype 2166900d3b7262f6cf66f9e2d89ceb64ffd929c6cca0sgjesse@chromium.org * chain. 2167900d3b7262f6cf66f9e2d89ceb64ffd929c6cca0sgjesse@chromium.org */ 216846a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org Local<Object> FindInstanceInPrototypeChain(Handle<FunctionTemplate> tmpl); 2169900d3b7262f6cf66f9e2d89ceb64ffd929c6cca0sgjesse@chromium.org 2170900d3b7262f6cf66f9e2d89ceb64ffd929c6cca0sgjesse@chromium.org /** 217143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * Call builtin Object.prototype.toString on this object. 217243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * This is different from Value::ToString() that may call 217343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * user-defined toString function. This one does not. 217443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen */ 217546a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org Local<String> ObjectProtoToString(); 217643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 2177beb2571dca14508fbbbb47a2f606327d5968ee92ager@chromium.org /** 2178c74d674717b2e229addbb9349986cd157947f7edyangguo@chromium.org * Returns the function invoked as a constructor for this object. 2179c74d674717b2e229addbb9349986cd157947f7edyangguo@chromium.org * May be the null value. 2180c74d674717b2e229addbb9349986cd157947f7edyangguo@chromium.org */ 218146a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org Local<Value> GetConstructor(); 2182c74d674717b2e229addbb9349986cd157947f7edyangguo@chromium.org 2183c74d674717b2e229addbb9349986cd157947f7edyangguo@chromium.org /** 2184beb2571dca14508fbbbb47a2f606327d5968ee92ager@chromium.org * Returns the name of the function invoked as a constructor for this object. 2185beb2571dca14508fbbbb47a2f606327d5968ee92ager@chromium.org */ 218646a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org Local<String> GetConstructorName(); 2187beb2571dca14508fbbbb47a2f606327d5968ee92ager@chromium.org 2188212ac23f8231d169b4aa6737d762099993020826kasper.lund /** Gets the number of internal fields for this Object. */ 218946a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org int InternalFieldCount(); 2190eeb44b681a16e45f1415dfacff0ba3dba9de5d8cyangguo@chromium.org 2191eeb44b681a16e45f1415dfacff0ba3dba9de5d8cyangguo@chromium.org /** Gets the value from an internal field. */ 219232280cf2786219b2d9a668f7f00778fb59ac40b3mstarzinger@chromium.org V8_INLINE(Local<Value> GetInternalField(int index)); 2193eeb44b681a16e45f1415dfacff0ba3dba9de5d8cyangguo@chromium.org 2194212ac23f8231d169b4aa6737d762099993020826kasper.lund /** Sets the value in an internal field. */ 219546a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org void SetInternalField(int index, Handle<Value> value); 21969d58c2b1c27d8b2890b9bd46e57d3842b09e0292christian.plesner.hansen@gmail.com 2197eeb44b681a16e45f1415dfacff0ba3dba9de5d8cyangguo@chromium.org /** 2198eeb44b681a16e45f1415dfacff0ba3dba9de5d8cyangguo@chromium.org * Gets a 2-byte-aligned native pointer from an internal field. This field 2199eeb44b681a16e45f1415dfacff0ba3dba9de5d8cyangguo@chromium.org * must have been set by SetAlignedPointerInInternalField, everything else 2200eeb44b681a16e45f1415dfacff0ba3dba9de5d8cyangguo@chromium.org * leads to undefined behavior. 2201eeb44b681a16e45f1415dfacff0ba3dba9de5d8cyangguo@chromium.org */ 220232280cf2786219b2d9a668f7f00778fb59ac40b3mstarzinger@chromium.org V8_INLINE(void* GetAlignedPointerFromInternalField(int index)); 2203eeb44b681a16e45f1415dfacff0ba3dba9de5d8cyangguo@chromium.org 2204eeb44b681a16e45f1415dfacff0ba3dba9de5d8cyangguo@chromium.org /** 2205eeb44b681a16e45f1415dfacff0ba3dba9de5d8cyangguo@chromium.org * Sets a 2-byte-aligned native pointer in an internal field. To retrieve such 2206eeb44b681a16e45f1415dfacff0ba3dba9de5d8cyangguo@chromium.org * a field, GetAlignedPointerFromInternalField must be used, everything else 2207eeb44b681a16e45f1415dfacff0ba3dba9de5d8cyangguo@chromium.org * leads to undefined behavior. 2208eeb44b681a16e45f1415dfacff0ba3dba9de5d8cyangguo@chromium.org */ 220946a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org void SetAlignedPointerInInternalField(int index, void* value); 2210e959c18cf7193e2f021245584a3c8f1f32f82c92kasperl@chromium.org 221143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen // Testers for local properties. 221246a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org bool HasOwnProperty(Handle<String> key); 221346a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org bool HasRealNamedProperty(Handle<String> key); 221446a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org bool HasRealIndexedProperty(uint32_t index); 221546a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org bool HasRealNamedCallbackProperty(Handle<String> key); 221643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 221743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen /** 221843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * If result.IsEmpty() no real property was located in the prototype chain. 221943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * This means interceptors in the prototype chain are not called. 222043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen */ 222146a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org Local<Value> GetRealNamedPropertyInPrototypeChain(Handle<String> key); 222298aff2fe110015974dbb787dc353f9760034df71sgjesse@chromium.org 222398aff2fe110015974dbb787dc353f9760034df71sgjesse@chromium.org /** 222498aff2fe110015974dbb787dc353f9760034df71sgjesse@chromium.org * If result.IsEmpty() no real property was located on the object or 222598aff2fe110015974dbb787dc353f9760034df71sgjesse@chromium.org * in the prototype chain. 222698aff2fe110015974dbb787dc353f9760034df71sgjesse@chromium.org * This means interceptors in the prototype chain are not called. 222798aff2fe110015974dbb787dc353f9760034df71sgjesse@chromium.org */ 222846a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org Local<Value> GetRealNamedProperty(Handle<String> key); 222943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 223043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen /** Tests for a named lookup interceptor.*/ 223146a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org bool HasNamedLookupInterceptor(); 223243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 2233212ac23f8231d169b4aa6737d762099993020826kasper.lund /** Tests for an index lookup interceptor.*/ 223446a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org bool HasIndexedLookupInterceptor(); 223543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 22365a8ca6c70c6fc9716f18f6223c98d1fef5752cf6kasperl@chromium.org /** 22375a8ca6c70c6fc9716f18f6223c98d1fef5752cf6kasperl@chromium.org * Turns on access check on the object if the object is an instance of 22385a8ca6c70c6fc9716f18f6223c98d1fef5752cf6kasperl@chromium.org * a template that has access check callbacks. If an object has no 22395a8ca6c70c6fc9716f18f6223c98d1fef5752cf6kasperl@chromium.org * access check info, the object cannot be accessed by anyone. 22405a8ca6c70c6fc9716f18f6223c98d1fef5752cf6kasperl@chromium.org */ 224146a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org void TurnOnAccessCheck(); 224241826e77311db718135ef6517b846933dfd275f3ager@chromium.org 22433b45ab59f57a3f7a11fdc5278839a881780cb9cbager@chromium.org /** 22447304bcac06a6a63b9f3dcebac2eeceada87ca146vegorov@chromium.org * Returns the identity hash for this object. The current implementation 22457304bcac06a6a63b9f3dcebac2eeceada87ca146vegorov@chromium.org * uses a hidden property on the object to store the identity hash. 22465ec4892aef9cca42940d7d92302abf674365f6b7ager@chromium.org * 22479085a016223a6b72bf580d5781c93ec7b9e54422ager@chromium.org * The return value will never be 0. Also, it is not guaranteed to be 22485ec4892aef9cca42940d7d92302abf674365f6b7ager@chromium.org * unique. 22493b45ab59f57a3f7a11fdc5278839a881780cb9cbager@chromium.org */ 225046a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org int GetIdentityHash(); 225141826e77311db718135ef6517b846933dfd275f3ager@chromium.org 22523b45ab59f57a3f7a11fdc5278839a881780cb9cbager@chromium.org /** 22533b45ab59f57a3f7a11fdc5278839a881780cb9cbager@chromium.org * Access hidden properties on JavaScript objects. These properties are 22543b45ab59f57a3f7a11fdc5278839a881780cb9cbager@chromium.org * hidden from the executing JavaScript and only accessible through the V8 22553b45ab59f57a3f7a11fdc5278839a881780cb9cbager@chromium.org * C++ API. Hidden properties introduced by V8 internally (for example the 22563b45ab59f57a3f7a11fdc5278839a881780cb9cbager@chromium.org * identity hash) are prefixed with "v8::". 22573b45ab59f57a3f7a11fdc5278839a881780cb9cbager@chromium.org */ 225846a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org bool SetHiddenValue(Handle<String> key, Handle<Value> value); 225946a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org Local<Value> GetHiddenValue(Handle<String> key); 226046a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org bool DeleteHiddenValue(Handle<String> key); 22619d58c2b1c27d8b2890b9bd46e57d3842b09e0292christian.plesner.hansen@gmail.com 22622bc58ef330b2d92ba287754282872699c151db4achristian.plesner.hansen@gmail.com /** 22632bc58ef330b2d92ba287754282872699c151db4achristian.plesner.hansen@gmail.com * Returns true if this is an instance of an api function (one 22642bc58ef330b2d92ba287754282872699c151db4achristian.plesner.hansen@gmail.com * created from a function created from a function template) and has 22652bc58ef330b2d92ba287754282872699c151db4achristian.plesner.hansen@gmail.com * been modified since it was created. Note that this method is 22662bc58ef330b2d92ba287754282872699c151db4achristian.plesner.hansen@gmail.com * conservative and may return true for objects that haven't actually 22672bc58ef330b2d92ba287754282872699c151db4achristian.plesner.hansen@gmail.com * been modified. 22682bc58ef330b2d92ba287754282872699c151db4achristian.plesner.hansen@gmail.com */ 226946a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org bool IsDirty(); 22703b45ab59f57a3f7a11fdc5278839a881780cb9cbager@chromium.org 22713b45ab59f57a3f7a11fdc5278839a881780cb9cbager@chromium.org /** 22723b45ab59f57a3f7a11fdc5278839a881780cb9cbager@chromium.org * Clone this object with a fast but shallow copy. Values will point 22733b45ab59f57a3f7a11fdc5278839a881780cb9cbager@chromium.org * to the same values as the original object. 22743b45ab59f57a3f7a11fdc5278839a881780cb9cbager@chromium.org */ 227546a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org Local<Object> Clone(); 227643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 22770b6db5975a9d1ebcf3de7b18603380d99f789e66sgjesse@chromium.org /** 2278c36ce6e8979bbbd43539f0a0effc87ea20dd65cckmillikin@chromium.org * Returns the context in which the object was created. 2279c36ce6e8979bbbd43539f0a0effc87ea20dd65cckmillikin@chromium.org */ 228046a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org Local<Context> CreationContext(); 2281c36ce6e8979bbbd43539f0a0effc87ea20dd65cckmillikin@chromium.org 2282c36ce6e8979bbbd43539f0a0effc87ea20dd65cckmillikin@chromium.org /** 22830b6db5975a9d1ebcf3de7b18603380d99f789e66sgjesse@chromium.org * Set the backing store of the indexed properties to be managed by the 22840b6db5975a9d1ebcf3de7b18603380d99f789e66sgjesse@chromium.org * embedding layer. Access to the indexed properties will follow the rules 22850b6db5975a9d1ebcf3de7b18603380d99f789e66sgjesse@chromium.org * spelled out in CanvasPixelArray. 22860b6db5975a9d1ebcf3de7b18603380d99f789e66sgjesse@chromium.org * Note: The embedding program still owns the data and needs to ensure that 22870b6db5975a9d1ebcf3de7b18603380d99f789e66sgjesse@chromium.org * the backing store is preserved while V8 has a reference. 22880b6db5975a9d1ebcf3de7b18603380d99f789e66sgjesse@chromium.org */ 228946a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org void SetIndexedPropertiesToPixelData(uint8_t* data, int length); 229046a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org bool HasIndexedPropertiesInPixelData(); 229146a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org uint8_t* GetIndexedPropertiesPixelData(); 229246a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org int GetIndexedPropertiesPixelDataLength(); 22930b6db5975a9d1ebcf3de7b18603380d99f789e66sgjesse@chromium.org 22943811b436bf328d2ace6fe79ce99aeda71f9f06d3ager@chromium.org /** 22953811b436bf328d2ace6fe79ce99aeda71f9f06d3ager@chromium.org * Set the backing store of the indexed properties to be managed by the 22963811b436bf328d2ace6fe79ce99aeda71f9f06d3ager@chromium.org * embedding layer. Access to the indexed properties will follow the rules 22973811b436bf328d2ace6fe79ce99aeda71f9f06d3ager@chromium.org * spelled out for the CanvasArray subtypes in the WebGL specification. 22983811b436bf328d2ace6fe79ce99aeda71f9f06d3ager@chromium.org * Note: The embedding program still owns the data and needs to ensure that 22993811b436bf328d2ace6fe79ce99aeda71f9f06d3ager@chromium.org * the backing store is preserved while V8 has a reference. 23003811b436bf328d2ace6fe79ce99aeda71f9f06d3ager@chromium.org */ 230146a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org void SetIndexedPropertiesToExternalArrayData(void* data, 230246a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org ExternalArrayType array_type, 230346a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org int number_of_elements); 230446a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org bool HasIndexedPropertiesInExternalArrayData(); 230546a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org void* GetIndexedPropertiesExternalArrayData(); 230646a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org ExternalArrayType GetIndexedPropertiesExternalArrayDataType(); 230746a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org int GetIndexedPropertiesExternalArrayDataLength(); 23083811b436bf328d2ace6fe79ce99aeda71f9f06d3ager@chromium.org 23091c09276ce2ac5214e81ca554360b9f101187893blrn@chromium.org /** 231083a4728861129dc263ded92157f3e6389f851f19karlklose@chromium.org * Checks whether a callback is set by the 231183a4728861129dc263ded92157f3e6389f851f19karlklose@chromium.org * ObjectTemplate::SetCallAsFunctionHandler method. 231283a4728861129dc263ded92157f3e6389f851f19karlklose@chromium.org * When an Object is callable this method returns true. 231383a4728861129dc263ded92157f3e6389f851f19karlklose@chromium.org */ 231446a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org bool IsCallable(); 231583a4728861129dc263ded92157f3e6389f851f19karlklose@chromium.org 231683a4728861129dc263ded92157f3e6389f851f19karlklose@chromium.org /** 23171805e21b0aece8c05f4960a5c0751c4463557891fschneider@chromium.org * Call an Object as a function if a callback is set by the 23181c09276ce2ac5214e81ca554360b9f101187893blrn@chromium.org * ObjectTemplate::SetCallAsFunctionHandler method. 23191c09276ce2ac5214e81ca554360b9f101187893blrn@chromium.org */ 232046a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org Local<Value> CallAsFunction(Handle<Object> recv, 232146a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org int argc, 232246a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org Handle<Value> argv[]); 23231c09276ce2ac5214e81ca554360b9f101187893blrn@chromium.org 23241c09276ce2ac5214e81ca554360b9f101187893blrn@chromium.org /** 23257304bcac06a6a63b9f3dcebac2eeceada87ca146vegorov@chromium.org * Call an Object as a constructor if a callback is set by the 23261c09276ce2ac5214e81ca554360b9f101187893blrn@chromium.org * ObjectTemplate::SetCallAsFunctionHandler method. 23271c09276ce2ac5214e81ca554360b9f101187893blrn@chromium.org * Note: This method behaves like the Function::NewInstance method. 23281c09276ce2ac5214e81ca554360b9f101187893blrn@chromium.org */ 232946a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org Local<Value> CallAsConstructor(int argc, Handle<Value> argv[]); 23301c09276ce2ac5214e81ca554360b9f101187893blrn@chromium.org 233146a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org static Local<Object> New(); 233232280cf2786219b2d9a668f7f00778fb59ac40b3mstarzinger@chromium.org V8_INLINE(static Object* Cast(Value* obj)); 2333e297f5973a8a9ff0d9945da3f1e2d8a6230c294djkummerow@chromium.org 233443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen private: 233546a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org Object(); 233646a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org static void CheckCast(Value* obj); 233746a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org Local<Value> SlowGetInternalField(int index); 233846a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org void* SlowGetAlignedPointerFromInternalField(int index); 233943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen}; 234043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 234143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 234243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen/** 234343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * An instance of the built-in array constructor (ECMA-262, 15.4.2). 234443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen */ 2345594006017e46d82ed7146611dc12c20e3c509c7ddanno@chromium.orgclass V8_EXPORT Array : public Object { 234643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen public: 234746a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org uint32_t Length() const; 234843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 23493e87580939cb78c5802369f723680d4a16cc2902ager@chromium.org /** 23503e87580939cb78c5802369f723680d4a16cc2902ager@chromium.org * Clones an element at index |index|. Returns an empty 23513e87580939cb78c5802369f723680d4a16cc2902ager@chromium.org * handle if cloning fails (for any reason). 23523e87580939cb78c5802369f723680d4a16cc2902ager@chromium.org */ 235346a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org Local<Object> CloneElementAt(uint32_t index); 23543e87580939cb78c5802369f723680d4a16cc2902ager@chromium.org 2355badaffc570baec00166b0ad3bdc96995751a7e13ricow@chromium.org /** 2356badaffc570baec00166b0ad3bdc96995751a7e13ricow@chromium.org * Creates a JavaScript array with the given length. If the length 2357badaffc570baec00166b0ad3bdc96995751a7e13ricow@chromium.org * is negative the returned array will have length 0. 2358badaffc570baec00166b0ad3bdc96995751a7e13ricow@chromium.org */ 235946a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org static Local<Array> New(int length = 0); 2360badaffc570baec00166b0ad3bdc96995751a7e13ricow@chromium.org 236132280cf2786219b2d9a668f7f00778fb59ac40b3mstarzinger@chromium.org V8_INLINE(static Array* Cast(Value* obj)); 236243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen private: 236346a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org Array(); 236446a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org static void CheckCast(Value* obj); 236543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen}; 236643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 236743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 236843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen/** 2369727e995b7bba3c57fb1e5c156d386ca11894f781v * A JavaScript function object (ECMA-262, 15.3). 237043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen */ 2371594006017e46d82ed7146611dc12c20e3c509c7ddanno@chromium.orgclass V8_EXPORT Function : public Object { 237243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen public: 237346a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org Local<Object> NewInstance() const; 237446a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org Local<Object> NewInstance(int argc, Handle<Value> argv[]) const; 237546a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org Local<Value> Call(Handle<Object> recv, int argc, Handle<Value> argv[]); 237646a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org void SetName(Handle<String> name); 237746a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org Handle<Value> GetName() const; 23785c838251403b0be9a882540f1922577abba4c872ager@chromium.org 23795c838251403b0be9a882540f1922577abba4c872ager@chromium.org /** 2380659ceec4628056d3c6e7076c850fba1c412cbb8ayangguo@chromium.org * Name inferred from variable or property assignment of this function. 2381659ceec4628056d3c6e7076c850fba1c412cbb8ayangguo@chromium.org * Used to facilitate debugging and profiling of JavaScript code written 2382659ceec4628056d3c6e7076c850fba1c412cbb8ayangguo@chromium.org * in an OO style, where many functions are anonymous but are assigned 2383659ceec4628056d3c6e7076c850fba1c412cbb8ayangguo@chromium.org * to object properties. 2384659ceec4628056d3c6e7076c850fba1c412cbb8ayangguo@chromium.org */ 238546a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org Handle<Value> GetInferredName() const; 2386659ceec4628056d3c6e7076c850fba1c412cbb8ayangguo@chromium.org 2387659ceec4628056d3c6e7076c850fba1c412cbb8ayangguo@chromium.org /** 23885c838251403b0be9a882540f1922577abba4c872ager@chromium.org * Returns zero based line number of function body and 23895c838251403b0be9a882540f1922577abba4c872ager@chromium.org * kLineOffsetNotFound if no information available. 23905c838251403b0be9a882540f1922577abba4c872ager@chromium.org */ 239146a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org int GetScriptLineNumber() const; 2392c612e0211bdb8821cbd7886e15b0273ed82d2e9edanno@chromium.org /** 2393c612e0211bdb8821cbd7886e15b0273ed82d2e9edanno@chromium.org * Returns zero based column number of function body and 2394c612e0211bdb8821cbd7886e15b0273ed82d2e9edanno@chromium.org * kLineOffsetNotFound if no information available. 2395c612e0211bdb8821cbd7886e15b0273ed82d2e9edanno@chromium.org */ 239646a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org int GetScriptColumnNumber() const; 23971510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org 23981510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org /** 23991510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org * Returns scriptId object. 24001510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org * DEPRECATED: use ScriptId() instead. 24011510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org */ 240246a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org Handle<Value> GetScriptId() const; 24031510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org 24041510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org /** 24051510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org * Returns scriptId. 24061510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org */ 24071510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org int ScriptId() const; 24081510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org 240946a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org ScriptOrigin GetScriptOrigin() const; 241032280cf2786219b2d9a668f7f00778fb59ac40b3mstarzinger@chromium.org V8_INLINE(static Function* Cast(Value* obj)); 241146a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org static const int kLineOffsetNotFound; 2412c612e0211bdb8821cbd7886e15b0273ed82d2e9edanno@chromium.org 241343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen private: 241446a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org Function(); 241546a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org static void CheckCast(Value* obj); 241643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen}; 241743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 2418a53e8e03bcb23716d1025de362626f90f00da892svenpanne@chromium.org#ifndef V8_ARRAY_BUFFER_INTERNAL_FIELD_COUNT 2419e0e1b0d3e70c933d36ed381d511e9fda39f2a751mstarzinger@chromium.org// The number of required internal fields can be defined by embedder. 2420a53e8e03bcb23716d1025de362626f90f00da892svenpanne@chromium.org#define V8_ARRAY_BUFFER_INTERNAL_FIELD_COUNT 2 2421a53e8e03bcb23716d1025de362626f90f00da892svenpanne@chromium.org#endif 242243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 242343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen/** 2424ca29dd85fa02449d17188f5a6ff9a7cdf2ad9680danno@chromium.org * An instance of the built-in ArrayBuffer constructor (ES6 draft 15.13.5). 2425ca29dd85fa02449d17188f5a6ff9a7cdf2ad9680danno@chromium.org * This API is experimental and may change significantly. 2426ca29dd85fa02449d17188f5a6ff9a7cdf2ad9680danno@chromium.org */ 2427594006017e46d82ed7146611dc12c20e3c509c7ddanno@chromium.orgclass V8_EXPORT ArrayBuffer : public Object { 2428ca29dd85fa02449d17188f5a6ff9a7cdf2ad9680danno@chromium.org public: 2429ca29dd85fa02449d17188f5a6ff9a7cdf2ad9680danno@chromium.org /** 2430837a67edd9afdbfe1b59482b41693f59c48846ffulan@chromium.org * Allocator that V8 uses to allocate |ArrayBuffer|'s memory. 2431837a67edd9afdbfe1b59482b41693f59c48846ffulan@chromium.org * The allocator is a global V8 setting. It should be set with 2432837a67edd9afdbfe1b59482b41693f59c48846ffulan@chromium.org * V8::SetArrayBufferAllocator prior to creation of a first ArrayBuffer. 2433837a67edd9afdbfe1b59482b41693f59c48846ffulan@chromium.org * 2434837a67edd9afdbfe1b59482b41693f59c48846ffulan@chromium.org * This API is experimental and may change significantly. 2435837a67edd9afdbfe1b59482b41693f59c48846ffulan@chromium.org */ 2436594006017e46d82ed7146611dc12c20e3c509c7ddanno@chromium.org class V8_EXPORT Allocator { // NOLINT 2437837a67edd9afdbfe1b59482b41693f59c48846ffulan@chromium.org public: 2438837a67edd9afdbfe1b59482b41693f59c48846ffulan@chromium.org virtual ~Allocator() {} 2439837a67edd9afdbfe1b59482b41693f59c48846ffulan@chromium.org 2440837a67edd9afdbfe1b59482b41693f59c48846ffulan@chromium.org /** 2441837a67edd9afdbfe1b59482b41693f59c48846ffulan@chromium.org * Allocate |length| bytes. Return NULL if allocation is not successful. 2442d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.org * Memory should be initialized to zeroes. 2443837a67edd9afdbfe1b59482b41693f59c48846ffulan@chromium.org */ 2444837a67edd9afdbfe1b59482b41693f59c48846ffulan@chromium.org virtual void* Allocate(size_t length) = 0; 2445d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.org 2446d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.org /** 2447d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.org * Allocate |length| bytes. Return NULL if allocation is not successful. 2448d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.org * Memory does not have to be initialized. 2449d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.org */ 2450d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.org virtual void* AllocateUninitialized(size_t length) { 2451d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.org // Override with call to |Allocate| for compatibility 2452d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.org // with legacy version. 2453d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.org return Allocate(length); 2454d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.org } 2455d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.org 2456837a67edd9afdbfe1b59482b41693f59c48846ffulan@chromium.org /** 2457307dd6ea3b729c8058ada645b42a1cf083c92128danno@chromium.org * Free the memory block of size |length|, pointed to by |data|. 2458307dd6ea3b729c8058ada645b42a1cf083c92128danno@chromium.org * That memory is guaranteed to be previously allocated by |Allocate|. 2459837a67edd9afdbfe1b59482b41693f59c48846ffulan@chromium.org */ 2460307dd6ea3b729c8058ada645b42a1cf083c92128danno@chromium.org virtual void Free(void* data, size_t length) { 2461307dd6ea3b729c8058ada645b42a1cf083c92128danno@chromium.org // Override with call to |Free(void*)| for compatibility 2462307dd6ea3b729c8058ada645b42a1cf083c92128danno@chromium.org // with legacy version. 2463307dd6ea3b729c8058ada645b42a1cf083c92128danno@chromium.org Free(data); 2464307dd6ea3b729c8058ada645b42a1cf083c92128danno@chromium.org } 2465307dd6ea3b729c8058ada645b42a1cf083c92128danno@chromium.org 2466307dd6ea3b729c8058ada645b42a1cf083c92128danno@chromium.org /** 2467307dd6ea3b729c8058ada645b42a1cf083c92128danno@chromium.org * Deprecated. Never called directly by V8. 2468307dd6ea3b729c8058ada645b42a1cf083c92128danno@chromium.org * For compatibility with legacy version of this interface. 2469307dd6ea3b729c8058ada645b42a1cf083c92128danno@chromium.org */ 2470307dd6ea3b729c8058ada645b42a1cf083c92128danno@chromium.org virtual void Free(void* data); 2471837a67edd9afdbfe1b59482b41693f59c48846ffulan@chromium.org }; 2472837a67edd9afdbfe1b59482b41693f59c48846ffulan@chromium.org 2473837a67edd9afdbfe1b59482b41693f59c48846ffulan@chromium.org /** 2474837a67edd9afdbfe1b59482b41693f59c48846ffulan@chromium.org * The contents of an |ArrayBuffer|. Externalization of |ArrayBuffer| 2475837a67edd9afdbfe1b59482b41693f59c48846ffulan@chromium.org * returns an instance of this class, populated, with a pointer to data 2476837a67edd9afdbfe1b59482b41693f59c48846ffulan@chromium.org * and byte length. 2477837a67edd9afdbfe1b59482b41693f59c48846ffulan@chromium.org * 2478837a67edd9afdbfe1b59482b41693f59c48846ffulan@chromium.org * The Data pointer of ArrayBuffer::Contents is always allocated with 2479837a67edd9afdbfe1b59482b41693f59c48846ffulan@chromium.org * Allocator::Allocate that is set with V8::SetArrayBufferAllocator. 2480837a67edd9afdbfe1b59482b41693f59c48846ffulan@chromium.org * 2481837a67edd9afdbfe1b59482b41693f59c48846ffulan@chromium.org * This API is experimental and may change significantly. 2482837a67edd9afdbfe1b59482b41693f59c48846ffulan@chromium.org */ 2483594006017e46d82ed7146611dc12c20e3c509c7ddanno@chromium.org class V8_EXPORT Contents { // NOLINT 2484837a67edd9afdbfe1b59482b41693f59c48846ffulan@chromium.org public: 2485837a67edd9afdbfe1b59482b41693f59c48846ffulan@chromium.org Contents() : data_(NULL), byte_length_(0) {} 2486837a67edd9afdbfe1b59482b41693f59c48846ffulan@chromium.org 2487837a67edd9afdbfe1b59482b41693f59c48846ffulan@chromium.org void* Data() const { return data_; } 2488837a67edd9afdbfe1b59482b41693f59c48846ffulan@chromium.org size_t ByteLength() const { return byte_length_; } 2489837a67edd9afdbfe1b59482b41693f59c48846ffulan@chromium.org 2490837a67edd9afdbfe1b59482b41693f59c48846ffulan@chromium.org private: 2491837a67edd9afdbfe1b59482b41693f59c48846ffulan@chromium.org void* data_; 2492837a67edd9afdbfe1b59482b41693f59c48846ffulan@chromium.org size_t byte_length_; 2493837a67edd9afdbfe1b59482b41693f59c48846ffulan@chromium.org 2494837a67edd9afdbfe1b59482b41693f59c48846ffulan@chromium.org friend class ArrayBuffer; 2495837a67edd9afdbfe1b59482b41693f59c48846ffulan@chromium.org }; 2496837a67edd9afdbfe1b59482b41693f59c48846ffulan@chromium.org 2497837a67edd9afdbfe1b59482b41693f59c48846ffulan@chromium.org 2498837a67edd9afdbfe1b59482b41693f59c48846ffulan@chromium.org /** 2499ca29dd85fa02449d17188f5a6ff9a7cdf2ad9680danno@chromium.org * Data length in bytes. 2500ca29dd85fa02449d17188f5a6ff9a7cdf2ad9680danno@chromium.org */ 2501ca29dd85fa02449d17188f5a6ff9a7cdf2ad9680danno@chromium.org size_t ByteLength() const; 2502ca29dd85fa02449d17188f5a6ff9a7cdf2ad9680danno@chromium.org 2503ca29dd85fa02449d17188f5a6ff9a7cdf2ad9680danno@chromium.org /** 2504ca29dd85fa02449d17188f5a6ff9a7cdf2ad9680danno@chromium.org * Create a new ArrayBuffer. Allocate |byte_length| bytes. 2505ca29dd85fa02449d17188f5a6ff9a7cdf2ad9680danno@chromium.org * Allocated memory will be owned by a created ArrayBuffer and 2506a53e8e03bcb23716d1025de362626f90f00da892svenpanne@chromium.org * will be deallocated when it is garbage-collected, 2507a53e8e03bcb23716d1025de362626f90f00da892svenpanne@chromium.org * unless the object is externalized. 2508ca29dd85fa02449d17188f5a6ff9a7cdf2ad9680danno@chromium.org */ 2509ca29dd85fa02449d17188f5a6ff9a7cdf2ad9680danno@chromium.org static Local<ArrayBuffer> New(size_t byte_length); 2510ca29dd85fa02449d17188f5a6ff9a7cdf2ad9680danno@chromium.org 2511ca29dd85fa02449d17188f5a6ff9a7cdf2ad9680danno@chromium.org /** 2512ca29dd85fa02449d17188f5a6ff9a7cdf2ad9680danno@chromium.org * Create a new ArrayBuffer over an existing memory block. 2513a53e8e03bcb23716d1025de362626f90f00da892svenpanne@chromium.org * The created array buffer is immediately in externalized state. 2514ca29dd85fa02449d17188f5a6ff9a7cdf2ad9680danno@chromium.org * The memory block will not be reclaimed when a created ArrayBuffer 2515ca29dd85fa02449d17188f5a6ff9a7cdf2ad9680danno@chromium.org * is garbage-collected. 2516ca29dd85fa02449d17188f5a6ff9a7cdf2ad9680danno@chromium.org */ 2517ca29dd85fa02449d17188f5a6ff9a7cdf2ad9680danno@chromium.org static Local<ArrayBuffer> New(void* data, size_t byte_length); 2518ca29dd85fa02449d17188f5a6ff9a7cdf2ad9680danno@chromium.org 2519a53e8e03bcb23716d1025de362626f90f00da892svenpanne@chromium.org /** 2520a53e8e03bcb23716d1025de362626f90f00da892svenpanne@chromium.org * Returns true if ArrayBuffer is extrenalized, that is, does not 2521a53e8e03bcb23716d1025de362626f90f00da892svenpanne@chromium.org * own its memory block. 2522a53e8e03bcb23716d1025de362626f90f00da892svenpanne@chromium.org */ 2523a53e8e03bcb23716d1025de362626f90f00da892svenpanne@chromium.org bool IsExternal() const; 2524a53e8e03bcb23716d1025de362626f90f00da892svenpanne@chromium.org 2525a53e8e03bcb23716d1025de362626f90f00da892svenpanne@chromium.org /** 25261fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org * Neuters this ArrayBuffer and all its views (typed arrays). 25271fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org * Neutering sets the byte length of the buffer and all typed arrays to zero, 25281fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org * preventing JavaScript from ever accessing underlying backing store. 25291fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org * ArrayBuffer should have been externalized. 25301fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org */ 25311fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org void Neuter(); 25321fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org 25331fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org /** 2534837a67edd9afdbfe1b59482b41693f59c48846ffulan@chromium.org * Make this ArrayBuffer external. The pointer to underlying memory block 2535837a67edd9afdbfe1b59482b41693f59c48846ffulan@chromium.org * and byte length are returned as |Contents| structure. After ArrayBuffer 2536837a67edd9afdbfe1b59482b41693f59c48846ffulan@chromium.org * had been etxrenalized, it does no longer owns the memory block. The caller 2537837a67edd9afdbfe1b59482b41693f59c48846ffulan@chromium.org * should take steps to free memory when it is no longer needed. 2538837a67edd9afdbfe1b59482b41693f59c48846ffulan@chromium.org * 2539837a67edd9afdbfe1b59482b41693f59c48846ffulan@chromium.org * The memory block is guaranteed to be allocated with |Allocator::Allocate| 2540837a67edd9afdbfe1b59482b41693f59c48846ffulan@chromium.org * that has been set with V8::SetArrayBufferAllocator. 2541a53e8e03bcb23716d1025de362626f90f00da892svenpanne@chromium.org */ 2542837a67edd9afdbfe1b59482b41693f59c48846ffulan@chromium.org Contents Externalize(); 2543a53e8e03bcb23716d1025de362626f90f00da892svenpanne@chromium.org 2544ca29dd85fa02449d17188f5a6ff9a7cdf2ad9680danno@chromium.org V8_INLINE(static ArrayBuffer* Cast(Value* obj)); 2545ca29dd85fa02449d17188f5a6ff9a7cdf2ad9680danno@chromium.org 2546a53e8e03bcb23716d1025de362626f90f00da892svenpanne@chromium.org static const int kInternalFieldCount = V8_ARRAY_BUFFER_INTERNAL_FIELD_COUNT; 2547a53e8e03bcb23716d1025de362626f90f00da892svenpanne@chromium.org 2548ca29dd85fa02449d17188f5a6ff9a7cdf2ad9680danno@chromium.org private: 2549ca29dd85fa02449d17188f5a6ff9a7cdf2ad9680danno@chromium.org ArrayBuffer(); 2550ca29dd85fa02449d17188f5a6ff9a7cdf2ad9680danno@chromium.org static void CheckCast(Value* obj); 2551ca29dd85fa02449d17188f5a6ff9a7cdf2ad9680danno@chromium.org}; 2552ca29dd85fa02449d17188f5a6ff9a7cdf2ad9680danno@chromium.org 2553ca29dd85fa02449d17188f5a6ff9a7cdf2ad9680danno@chromium.org 2554e0e1b0d3e70c933d36ed381d511e9fda39f2a751mstarzinger@chromium.org#ifndef V8_ARRAY_BUFFER_VIEW_INTERNAL_FIELD_COUNT 2555e0e1b0d3e70c933d36ed381d511e9fda39f2a751mstarzinger@chromium.org// The number of required internal fields can be defined by embedder. 2556e0e1b0d3e70c933d36ed381d511e9fda39f2a751mstarzinger@chromium.org#define V8_ARRAY_BUFFER_VIEW_INTERNAL_FIELD_COUNT 2 2557e0e1b0d3e70c933d36ed381d511e9fda39f2a751mstarzinger@chromium.org#endif 2558e0e1b0d3e70c933d36ed381d511e9fda39f2a751mstarzinger@chromium.org 2559e0e1b0d3e70c933d36ed381d511e9fda39f2a751mstarzinger@chromium.org 2560ca29dd85fa02449d17188f5a6ff9a7cdf2ad9680danno@chromium.org/** 25611510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org * A base class for an instance of one of "views" over ArrayBuffer, 25621510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org * including TypedArrays and DataView (ES6 draft 15.13). 25631510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org * 2564f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org * This API is experimental and may change significantly. 2565f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org */ 2566594006017e46d82ed7146611dc12c20e3c509c7ddanno@chromium.orgclass V8_EXPORT ArrayBufferView : public Object { 2567f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org public: 2568f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org /** 2569f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org * Returns underlying ArrayBuffer. 2570f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org */ 2571f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org Local<ArrayBuffer> Buffer(); 2572f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org /** 25731510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org * Byte offset in |Buffer|. 2574f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org */ 2575f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org size_t ByteOffset(); 2576f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org /** 25771510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org * Size of a view in bytes. 2578f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org */ 2579f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org size_t ByteLength(); 2580f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org /** 25811510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org * Base address of a view. 2582f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org */ 2583f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org void* BaseAddress(); 2584f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org 25851510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org V8_INLINE(static ArrayBufferView* Cast(Value* obj)); 25861510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org 2587e0e1b0d3e70c933d36ed381d511e9fda39f2a751mstarzinger@chromium.org static const int kInternalFieldCount = 2588e0e1b0d3e70c933d36ed381d511e9fda39f2a751mstarzinger@chromium.org V8_ARRAY_BUFFER_VIEW_INTERNAL_FIELD_COUNT; 2589e0e1b0d3e70c933d36ed381d511e9fda39f2a751mstarzinger@chromium.org 25901510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org private: 25911510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org ArrayBufferView(); 25921510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org static void CheckCast(Value* obj); 25931510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org}; 25941510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org 25951510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org 25961510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org/** 25971510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org * A base class for an instance of TypedArray series of constructors 25981510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org * (ES6 draft 15.13.6). 25991510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org * This API is experimental and may change significantly. 26001510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org */ 2601594006017e46d82ed7146611dc12c20e3c509c7ddanno@chromium.orgclass V8_EXPORT TypedArray : public ArrayBufferView { 26021510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org public: 26031510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org /** 26041510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org * Number of elements in this typed array 26051510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org * (e.g. for Int16Array, |ByteLength|/2). 26061510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org */ 26071510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org size_t Length(); 26081510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org 2609f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org V8_INLINE(static TypedArray* Cast(Value* obj)); 2610f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org 2611f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org private: 2612f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org TypedArray(); 2613f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org static void CheckCast(Value* obj); 2614f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org}; 2615f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org 2616f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org 2617f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org/** 2618f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org * An instance of Uint8Array constructor (ES6 draft 15.13.6). 2619f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org * This API is experimental and may change significantly. 2620f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org */ 2621594006017e46d82ed7146611dc12c20e3c509c7ddanno@chromium.orgclass V8_EXPORT Uint8Array : public TypedArray { 2622f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org public: 2623f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org static Local<Uint8Array> New(Handle<ArrayBuffer> array_buffer, 2624f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org size_t byte_offset, size_t length); 2625f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org V8_INLINE(static Uint8Array* Cast(Value* obj)); 2626f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org 2627f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org private: 2628f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org Uint8Array(); 2629f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org static void CheckCast(Value* obj); 2630f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org}; 2631f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org 2632f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org 2633f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org/** 263457ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org * An instance of Uint8ClampedArray constructor (ES6 draft 15.13.6). 263557ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org * This API is experimental and may change significantly. 263657ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org */ 2637594006017e46d82ed7146611dc12c20e3c509c7ddanno@chromium.orgclass V8_EXPORT Uint8ClampedArray : public TypedArray { 263857ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org public: 263957ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org static Local<Uint8ClampedArray> New(Handle<ArrayBuffer> array_buffer, 264057ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org size_t byte_offset, size_t length); 264157ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org V8_INLINE(static Uint8ClampedArray* Cast(Value* obj)); 264257ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org 264357ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org private: 264457ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org Uint8ClampedArray(); 264557ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org static void CheckCast(Value* obj); 264657ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org}; 264757ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org 264857ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org/** 2649f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org * An instance of Int8Array constructor (ES6 draft 15.13.6). 2650f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org * This API is experimental and may change significantly. 2651f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org */ 2652594006017e46d82ed7146611dc12c20e3c509c7ddanno@chromium.orgclass V8_EXPORT Int8Array : public TypedArray { 2653f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org public: 2654f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org static Local<Int8Array> New(Handle<ArrayBuffer> array_buffer, 2655f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org size_t byte_offset, size_t length); 2656f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org V8_INLINE(static Int8Array* Cast(Value* obj)); 2657f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org 2658f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org private: 2659f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org Int8Array(); 2660f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org static void CheckCast(Value* obj); 2661f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org}; 2662f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org 2663f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org 2664f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org/** 2665f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org * An instance of Uint16Array constructor (ES6 draft 15.13.6). 2666f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org * This API is experimental and may change significantly. 2667f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org */ 2668594006017e46d82ed7146611dc12c20e3c509c7ddanno@chromium.orgclass V8_EXPORT Uint16Array : public TypedArray { 2669f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org public: 2670f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org static Local<Uint16Array> New(Handle<ArrayBuffer> array_buffer, 2671f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org size_t byte_offset, size_t length); 2672f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org V8_INLINE(static Uint16Array* Cast(Value* obj)); 2673f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org 2674f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org private: 2675f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org Uint16Array(); 2676f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org static void CheckCast(Value* obj); 2677f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org}; 2678f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org 2679f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org 2680f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org/** 2681f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org * An instance of Int16Array constructor (ES6 draft 15.13.6). 2682f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org * This API is experimental and may change significantly. 2683f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org */ 2684594006017e46d82ed7146611dc12c20e3c509c7ddanno@chromium.orgclass V8_EXPORT Int16Array : public TypedArray { 2685f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org public: 2686f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org static Local<Int16Array> New(Handle<ArrayBuffer> array_buffer, 2687f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org size_t byte_offset, size_t length); 2688f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org V8_INLINE(static Int16Array* Cast(Value* obj)); 2689f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org 2690f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org private: 2691f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org Int16Array(); 2692f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org static void CheckCast(Value* obj); 2693f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org}; 2694f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org 2695f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org 2696f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org/** 2697f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org * An instance of Uint32Array constructor (ES6 draft 15.13.6). 2698f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org * This API is experimental and may change significantly. 2699f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org */ 2700594006017e46d82ed7146611dc12c20e3c509c7ddanno@chromium.orgclass V8_EXPORT Uint32Array : public TypedArray { 2701f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org public: 2702f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org static Local<Uint32Array> New(Handle<ArrayBuffer> array_buffer, 2703f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org size_t byte_offset, size_t length); 2704f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org V8_INLINE(static Uint32Array* Cast(Value* obj)); 2705f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org 2706f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org private: 2707f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org Uint32Array(); 2708f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org static void CheckCast(Value* obj); 2709f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org}; 2710f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org 2711f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org 2712f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org/** 2713f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org * An instance of Int32Array constructor (ES6 draft 15.13.6). 2714f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org * This API is experimental and may change significantly. 2715f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org */ 2716594006017e46d82ed7146611dc12c20e3c509c7ddanno@chromium.orgclass V8_EXPORT Int32Array : public TypedArray { 2717f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org public: 2718f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org static Local<Int32Array> New(Handle<ArrayBuffer> array_buffer, 2719f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org size_t byte_offset, size_t length); 2720f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org V8_INLINE(static Int32Array* Cast(Value* obj)); 2721f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org 2722f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org private: 2723f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org Int32Array(); 2724f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org static void CheckCast(Value* obj); 2725f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org}; 2726f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org 2727f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org 2728f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org/** 2729f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org * An instance of Float32Array constructor (ES6 draft 15.13.6). 2730f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org * This API is experimental and may change significantly. 2731f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org */ 2732594006017e46d82ed7146611dc12c20e3c509c7ddanno@chromium.orgclass V8_EXPORT Float32Array : public TypedArray { 2733f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org public: 2734f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org static Local<Float32Array> New(Handle<ArrayBuffer> array_buffer, 2735f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org size_t byte_offset, size_t length); 2736f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org V8_INLINE(static Float32Array* Cast(Value* obj)); 2737f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org 2738f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org private: 2739f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org Float32Array(); 2740f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org static void CheckCast(Value* obj); 2741f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org}; 2742f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org 2743f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org 2744f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org/** 2745f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org * An instance of Float64Array constructor (ES6 draft 15.13.6). 2746f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org * This API is experimental and may change significantly. 2747f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org */ 2748594006017e46d82ed7146611dc12c20e3c509c7ddanno@chromium.orgclass V8_EXPORT Float64Array : public TypedArray { 2749f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org public: 2750f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org static Local<Float64Array> New(Handle<ArrayBuffer> array_buffer, 2751f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org size_t byte_offset, size_t length); 2752f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org V8_INLINE(static Float64Array* Cast(Value* obj)); 2753f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org 2754f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org private: 2755f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org Float64Array(); 2756f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org static void CheckCast(Value* obj); 2757f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org}; 2758f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org 2759f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org 2760f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org/** 27611510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org * An instance of DataView constructor (ES6 draft 15.13.7). 27621510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org * This API is experimental and may change significantly. 27631510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org */ 2764594006017e46d82ed7146611dc12c20e3c509c7ddanno@chromium.orgclass V8_EXPORT DataView : public ArrayBufferView { 27651510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org public: 27661510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org static Local<DataView> New(Handle<ArrayBuffer> array_buffer, 27671510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org size_t byte_offset, size_t length); 27681510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org V8_INLINE(static DataView* Cast(Value* obj)); 27691510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org 27701510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org private: 27711510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org DataView(); 27721510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org static void CheckCast(Value* obj); 27731510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org}; 27741510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org 27751510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org 27761510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org/** 2777fb144a0716afe7ab8bf245f2391a9e53b3db3c89fschneider@chromium.org * An instance of the built-in Date constructor (ECMA-262, 15.9). 2778fb144a0716afe7ab8bf245f2391a9e53b3db3c89fschneider@chromium.org */ 2779594006017e46d82ed7146611dc12c20e3c509c7ddanno@chromium.orgclass V8_EXPORT Date : public Object { 2780fb144a0716afe7ab8bf245f2391a9e53b3db3c89fschneider@chromium.org public: 278146a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org static Local<Value> New(double time); 2782fb144a0716afe7ab8bf245f2391a9e53b3db3c89fschneider@chromium.org 2783d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.org // Deprecated, use Date::ValueOf() instead. 2784d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.org // TODO(svenpanne) Actually deprecate when Chrome is adapted. 2785d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.org double NumberValue() const { return ValueOf(); } 2786d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.org 2787fb144a0716afe7ab8bf245f2391a9e53b3db3c89fschneider@chromium.org /** 2788fb144a0716afe7ab8bf245f2391a9e53b3db3c89fschneider@chromium.org * A specialization of Value::NumberValue that is more efficient 2789fb144a0716afe7ab8bf245f2391a9e53b3db3c89fschneider@chromium.org * because we know the structure of this object. 2790fb144a0716afe7ab8bf245f2391a9e53b3db3c89fschneider@chromium.org */ 2791d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.org double ValueOf() const; 2792fb144a0716afe7ab8bf245f2391a9e53b3db3c89fschneider@chromium.org 279332280cf2786219b2d9a668f7f00778fb59ac40b3mstarzinger@chromium.org V8_INLINE(static Date* Cast(v8::Value* obj)); 2794fb144a0716afe7ab8bf245f2391a9e53b3db3c89fschneider@chromium.org 2795fb144a0716afe7ab8bf245f2391a9e53b3db3c89fschneider@chromium.org /** 2796fb144a0716afe7ab8bf245f2391a9e53b3db3c89fschneider@chromium.org * Notification that the embedder has changed the time zone, 2797fb144a0716afe7ab8bf245f2391a9e53b3db3c89fschneider@chromium.org * daylight savings time, or other date / time configuration 2798fb144a0716afe7ab8bf245f2391a9e53b3db3c89fschneider@chromium.org * parameters. V8 keeps a cache of various values used for 2799fb144a0716afe7ab8bf245f2391a9e53b3db3c89fschneider@chromium.org * date / time computation. This notification will reset 2800fb144a0716afe7ab8bf245f2391a9e53b3db3c89fschneider@chromium.org * those cached values for the current context so that date / 2801fb144a0716afe7ab8bf245f2391a9e53b3db3c89fschneider@chromium.org * time configuration changes would be reflected in the Date 2802fb144a0716afe7ab8bf245f2391a9e53b3db3c89fschneider@chromium.org * object. 2803fb144a0716afe7ab8bf245f2391a9e53b3db3c89fschneider@chromium.org * 2804fb144a0716afe7ab8bf245f2391a9e53b3db3c89fschneider@chromium.org * This API should not be called more than needed as it will 2805fb144a0716afe7ab8bf245f2391a9e53b3db3c89fschneider@chromium.org * negatively impact the performance of date operations. 2806fb144a0716afe7ab8bf245f2391a9e53b3db3c89fschneider@chromium.org */ 280746a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org static void DateTimeConfigurationChangeNotification(); 2808fb144a0716afe7ab8bf245f2391a9e53b3db3c89fschneider@chromium.org 2809fb144a0716afe7ab8bf245f2391a9e53b3db3c89fschneider@chromium.org private: 281046a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org static void CheckCast(v8::Value* obj); 2811fb144a0716afe7ab8bf245f2391a9e53b3db3c89fschneider@chromium.org}; 2812fb144a0716afe7ab8bf245f2391a9e53b3db3c89fschneider@chromium.org 2813fb144a0716afe7ab8bf245f2391a9e53b3db3c89fschneider@chromium.org 2814fb144a0716afe7ab8bf245f2391a9e53b3db3c89fschneider@chromium.org/** 281584bcc559ac20fb04f806e97d28a314b20b58fd60svenpanne@chromium.org * A Number object (ECMA-262, 4.3.21). 281684bcc559ac20fb04f806e97d28a314b20b58fd60svenpanne@chromium.org */ 2817594006017e46d82ed7146611dc12c20e3c509c7ddanno@chromium.orgclass V8_EXPORT NumberObject : public Object { 281884bcc559ac20fb04f806e97d28a314b20b58fd60svenpanne@chromium.org public: 281946a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org static Local<Value> New(double value); 282084bcc559ac20fb04f806e97d28a314b20b58fd60svenpanne@chromium.org 2821d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.org // Deprecated, use NumberObject::ValueOf() instead. 2822d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.org // TODO(svenpanne) Actually deprecate when Chrome is adapted. 2823d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.org double NumberValue() const { return ValueOf(); } 2824d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.org 282584bcc559ac20fb04f806e97d28a314b20b58fd60svenpanne@chromium.org /** 282684bcc559ac20fb04f806e97d28a314b20b58fd60svenpanne@chromium.org * Returns the Number held by the object. 282784bcc559ac20fb04f806e97d28a314b20b58fd60svenpanne@chromium.org */ 2828d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.org double ValueOf() const; 282984bcc559ac20fb04f806e97d28a314b20b58fd60svenpanne@chromium.org 283032280cf2786219b2d9a668f7f00778fb59ac40b3mstarzinger@chromium.org V8_INLINE(static NumberObject* Cast(v8::Value* obj)); 283184bcc559ac20fb04f806e97d28a314b20b58fd60svenpanne@chromium.org 283284bcc559ac20fb04f806e97d28a314b20b58fd60svenpanne@chromium.org private: 283346a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org static void CheckCast(v8::Value* obj); 283484bcc559ac20fb04f806e97d28a314b20b58fd60svenpanne@chromium.org}; 283584bcc559ac20fb04f806e97d28a314b20b58fd60svenpanne@chromium.org 283684bcc559ac20fb04f806e97d28a314b20b58fd60svenpanne@chromium.org 283784bcc559ac20fb04f806e97d28a314b20b58fd60svenpanne@chromium.org/** 283884bcc559ac20fb04f806e97d28a314b20b58fd60svenpanne@chromium.org * A Boolean object (ECMA-262, 4.3.15). 283984bcc559ac20fb04f806e97d28a314b20b58fd60svenpanne@chromium.org */ 2840594006017e46d82ed7146611dc12c20e3c509c7ddanno@chromium.orgclass V8_EXPORT BooleanObject : public Object { 284184bcc559ac20fb04f806e97d28a314b20b58fd60svenpanne@chromium.org public: 284246a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org static Local<Value> New(bool value); 284384bcc559ac20fb04f806e97d28a314b20b58fd60svenpanne@chromium.org 2844d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.org // Deprecated, use BooleanObject::ValueOf() instead. 2845d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.org // TODO(svenpanne) Actually deprecate when Chrome is adapted. 2846d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.org bool BooleanValue() const { return ValueOf(); } 2847d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.org 284884bcc559ac20fb04f806e97d28a314b20b58fd60svenpanne@chromium.org /** 284984bcc559ac20fb04f806e97d28a314b20b58fd60svenpanne@chromium.org * Returns the Boolean held by the object. 285084bcc559ac20fb04f806e97d28a314b20b58fd60svenpanne@chromium.org */ 2851d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.org bool ValueOf() const; 285284bcc559ac20fb04f806e97d28a314b20b58fd60svenpanne@chromium.org 285332280cf2786219b2d9a668f7f00778fb59ac40b3mstarzinger@chromium.org V8_INLINE(static BooleanObject* Cast(v8::Value* obj)); 285484bcc559ac20fb04f806e97d28a314b20b58fd60svenpanne@chromium.org 285584bcc559ac20fb04f806e97d28a314b20b58fd60svenpanne@chromium.org private: 285646a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org static void CheckCast(v8::Value* obj); 285784bcc559ac20fb04f806e97d28a314b20b58fd60svenpanne@chromium.org}; 285884bcc559ac20fb04f806e97d28a314b20b58fd60svenpanne@chromium.org 285984bcc559ac20fb04f806e97d28a314b20b58fd60svenpanne@chromium.org 286084bcc559ac20fb04f806e97d28a314b20b58fd60svenpanne@chromium.org/** 286184bcc559ac20fb04f806e97d28a314b20b58fd60svenpanne@chromium.org * A String object (ECMA-262, 4.3.18). 286284bcc559ac20fb04f806e97d28a314b20b58fd60svenpanne@chromium.org */ 2863594006017e46d82ed7146611dc12c20e3c509c7ddanno@chromium.orgclass V8_EXPORT StringObject : public Object { 286484bcc559ac20fb04f806e97d28a314b20b58fd60svenpanne@chromium.org public: 286546a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org static Local<Value> New(Handle<String> value); 286684bcc559ac20fb04f806e97d28a314b20b58fd60svenpanne@chromium.org 2867d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.org // Deprecated, use StringObject::ValueOf() instead. 2868d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.org // TODO(svenpanne) Actually deprecate when Chrome is adapted. 2869d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.org Local<String> StringValue() const { return ValueOf(); } 2870d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.org 287184bcc559ac20fb04f806e97d28a314b20b58fd60svenpanne@chromium.org /** 287284bcc559ac20fb04f806e97d28a314b20b58fd60svenpanne@chromium.org * Returns the String held by the object. 287384bcc559ac20fb04f806e97d28a314b20b58fd60svenpanne@chromium.org */ 2874d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.org Local<String> ValueOf() const; 287584bcc559ac20fb04f806e97d28a314b20b58fd60svenpanne@chromium.org 287632280cf2786219b2d9a668f7f00778fb59ac40b3mstarzinger@chromium.org V8_INLINE(static StringObject* Cast(v8::Value* obj)); 287784bcc559ac20fb04f806e97d28a314b20b58fd60svenpanne@chromium.org 287884bcc559ac20fb04f806e97d28a314b20b58fd60svenpanne@chromium.org private: 287946a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org static void CheckCast(v8::Value* obj); 288084bcc559ac20fb04f806e97d28a314b20b58fd60svenpanne@chromium.org}; 288184bcc559ac20fb04f806e97d28a314b20b58fd60svenpanne@chromium.org 288284bcc559ac20fb04f806e97d28a314b20b58fd60svenpanne@chromium.org 288384bcc559ac20fb04f806e97d28a314b20b58fd60svenpanne@chromium.org/** 2884e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org * A Symbol object (ECMA-262 edition 6). 2885e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org * 2886e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org * This is an experimental feature. Use at your own risk. 2887e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org */ 2888594006017e46d82ed7146611dc12c20e3c509c7ddanno@chromium.orgclass V8_EXPORT SymbolObject : public Object { 2889e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org public: 2890e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org static Local<Value> New(Isolate* isolate, Handle<Symbol> value); 2891e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org 2892d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.org // Deprecated, use SymbolObject::ValueOf() instead. 2893d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.org // TODO(svenpanne) Actually deprecate when Chrome is adapted. 2894d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.org Local<Symbol> SymbolValue() const { return ValueOf(); } 2895d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.org 2896e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org /** 2897e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org * Returns the Symbol held by the object. 2898e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org */ 2899d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.org Local<Symbol> ValueOf() const; 2900e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org 2901e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org V8_INLINE(static SymbolObject* Cast(v8::Value* obj)); 2902e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org 2903e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org private: 2904e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org static void CheckCast(v8::Value* obj); 2905e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org}; 2906e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org 2907e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org 2908e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org/** 2909fb144a0716afe7ab8bf245f2391a9e53b3db3c89fschneider@chromium.org * An instance of the built-in RegExp constructor (ECMA-262, 15.10). 2910fb144a0716afe7ab8bf245f2391a9e53b3db3c89fschneider@chromium.org */ 2911594006017e46d82ed7146611dc12c20e3c509c7ddanno@chromium.orgclass V8_EXPORT RegExp : public Object { 2912fb144a0716afe7ab8bf245f2391a9e53b3db3c89fschneider@chromium.org public: 2913fb144a0716afe7ab8bf245f2391a9e53b3db3c89fschneider@chromium.org /** 2914fb144a0716afe7ab8bf245f2391a9e53b3db3c89fschneider@chromium.org * Regular expression flag bits. They can be or'ed to enable a set 2915fb144a0716afe7ab8bf245f2391a9e53b3db3c89fschneider@chromium.org * of flags. 2916fb144a0716afe7ab8bf245f2391a9e53b3db3c89fschneider@chromium.org */ 2917fb144a0716afe7ab8bf245f2391a9e53b3db3c89fschneider@chromium.org enum Flags { 2918fb144a0716afe7ab8bf245f2391a9e53b3db3c89fschneider@chromium.org kNone = 0, 2919fb144a0716afe7ab8bf245f2391a9e53b3db3c89fschneider@chromium.org kGlobal = 1, 2920fb144a0716afe7ab8bf245f2391a9e53b3db3c89fschneider@chromium.org kIgnoreCase = 2, 2921fb144a0716afe7ab8bf245f2391a9e53b3db3c89fschneider@chromium.org kMultiline = 4 2922fb144a0716afe7ab8bf245f2391a9e53b3db3c89fschneider@chromium.org }; 2923fb144a0716afe7ab8bf245f2391a9e53b3db3c89fschneider@chromium.org 2924fb144a0716afe7ab8bf245f2391a9e53b3db3c89fschneider@chromium.org /** 2925fb144a0716afe7ab8bf245f2391a9e53b3db3c89fschneider@chromium.org * Creates a regular expression from the given pattern string and 2926fb144a0716afe7ab8bf245f2391a9e53b3db3c89fschneider@chromium.org * the flags bit field. May throw a JavaScript exception as 2927fb144a0716afe7ab8bf245f2391a9e53b3db3c89fschneider@chromium.org * described in ECMA-262, 15.10.4.1. 2928fb144a0716afe7ab8bf245f2391a9e53b3db3c89fschneider@chromium.org * 2929fb144a0716afe7ab8bf245f2391a9e53b3db3c89fschneider@chromium.org * For example, 2930fb144a0716afe7ab8bf245f2391a9e53b3db3c89fschneider@chromium.org * RegExp::New(v8::String::New("foo"), 2931fb144a0716afe7ab8bf245f2391a9e53b3db3c89fschneider@chromium.org * static_cast<RegExp::Flags>(kGlobal | kMultiline)) 2932fb144a0716afe7ab8bf245f2391a9e53b3db3c89fschneider@chromium.org * is equivalent to evaluating "/foo/gm". 2933fb144a0716afe7ab8bf245f2391a9e53b3db3c89fschneider@chromium.org */ 293446a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org static Local<RegExp> New(Handle<String> pattern, Flags flags); 2935fb144a0716afe7ab8bf245f2391a9e53b3db3c89fschneider@chromium.org 2936fb144a0716afe7ab8bf245f2391a9e53b3db3c89fschneider@chromium.org /** 2937fb144a0716afe7ab8bf245f2391a9e53b3db3c89fschneider@chromium.org * Returns the value of the source property: a string representing 2938fb144a0716afe7ab8bf245f2391a9e53b3db3c89fschneider@chromium.org * the regular expression. 2939fb144a0716afe7ab8bf245f2391a9e53b3db3c89fschneider@chromium.org */ 294046a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org Local<String> GetSource() const; 2941fb144a0716afe7ab8bf245f2391a9e53b3db3c89fschneider@chromium.org 2942fb144a0716afe7ab8bf245f2391a9e53b3db3c89fschneider@chromium.org /** 2943fb144a0716afe7ab8bf245f2391a9e53b3db3c89fschneider@chromium.org * Returns the flags bit field. 2944fb144a0716afe7ab8bf245f2391a9e53b3db3c89fschneider@chromium.org */ 294546a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org Flags GetFlags() const; 2946fb144a0716afe7ab8bf245f2391a9e53b3db3c89fschneider@chromium.org 294732280cf2786219b2d9a668f7f00778fb59ac40b3mstarzinger@chromium.org V8_INLINE(static RegExp* Cast(v8::Value* obj)); 2948fb144a0716afe7ab8bf245f2391a9e53b3db3c89fschneider@chromium.org 2949fb144a0716afe7ab8bf245f2391a9e53b3db3c89fschneider@chromium.org private: 295046a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org static void CheckCast(v8::Value* obj); 2951fb144a0716afe7ab8bf245f2391a9e53b3db3c89fschneider@chromium.org}; 2952fb144a0716afe7ab8bf245f2391a9e53b3db3c89fschneider@chromium.org 2953fb144a0716afe7ab8bf245f2391a9e53b3db3c89fschneider@chromium.org 2954fb144a0716afe7ab8bf245f2391a9e53b3db3c89fschneider@chromium.org/** 2955eeb44b681a16e45f1415dfacff0ba3dba9de5d8cyangguo@chromium.org * A JavaScript value that wraps a C++ void*. This type of value is mainly used 2956eeb44b681a16e45f1415dfacff0ba3dba9de5d8cyangguo@chromium.org * to associate C++ data structures with JavaScript objects. 295743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen */ 2958594006017e46d82ed7146611dc12c20e3c509c7ddanno@chromium.orgclass V8_EXPORT External : public Value { 295943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen public: 296046a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org static Local<External> New(void* value); 296132280cf2786219b2d9a668f7f00778fb59ac40b3mstarzinger@chromium.org V8_INLINE(static External* Cast(Value* obj)); 296246a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org void* Value() const; 296343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen private: 296446a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org static void CheckCast(v8::Value* obj); 296543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen}; 296643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 296743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 2968fb144a0716afe7ab8bf245f2391a9e53b3db3c89fschneider@chromium.org// --- Templates --- 296943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 297043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 297143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen/** 297243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * The superclass of object and function templates. 297343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen */ 2974594006017e46d82ed7146611dc12c20e3c509c7ddanno@chromium.orgclass V8_EXPORT Template : public Data { 297543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen public: 297643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen /** Adds a property to each instance created by this template.*/ 297743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen void Set(Handle<String> name, Handle<Data> value, 297843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen PropertyAttribute attributes = None); 297932280cf2786219b2d9a668f7f00778fb59ac40b3mstarzinger@chromium.org V8_INLINE(void Set(const char* name, Handle<Data> value)); 298043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen private: 298143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen Template(); 298243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 298343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen friend class ObjectTemplate; 298443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen friend class FunctionTemplate; 298543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen}; 298643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 298743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 2988bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.orgtemplate<typename T> 2989867c3b0ba722de75ec681cfe23a56f0692b49b7aulan@chromium.orgclass ReturnValue { 2990bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.org public: 2991dfe53073738bbf16023d96fce5118358a1037fd3ulan@chromium.org template <class S> V8_INLINE(ReturnValue(const ReturnValue<S>& that)) 2992dfe53073738bbf16023d96fce5118358a1037fd3ulan@chromium.org : value_(that.value_) { 2993dfe53073738bbf16023d96fce5118358a1037fd3ulan@chromium.org TYPE_CHECK(T, S); 2994dfe53073738bbf16023d96fce5118358a1037fd3ulan@chromium.org } 2995bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.org // Handle setters 2996c118402c43ae44cf9255d36608a44886c98537c5jkummerow@chromium.org template <typename S> V8_INLINE(void Set(const Persistent<S>& handle)); 2997c118402c43ae44cf9255d36608a44886c98537c5jkummerow@chromium.org template <typename S> V8_INLINE(void Set(const Handle<S> handle)); 2998bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.org // Fast primitive setters 299953ad17558c81e6099cef4442237d7da643a5becfsvenpanne@chromium.org V8_INLINE(void Set(bool value)); 300053ad17558c81e6099cef4442237d7da643a5becfsvenpanne@chromium.org V8_INLINE(void Set(double i)); 300153ad17558c81e6099cef4442237d7da643a5becfsvenpanne@chromium.org V8_INLINE(void Set(int32_t i)); 300253ad17558c81e6099cef4442237d7da643a5becfsvenpanne@chromium.org V8_INLINE(void Set(uint32_t i)); 3003bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.org // Fast JS primitive setters 300453ad17558c81e6099cef4442237d7da643a5becfsvenpanne@chromium.org V8_INLINE(void SetNull()); 300553ad17558c81e6099cef4442237d7da643a5becfsvenpanne@chromium.org V8_INLINE(void SetUndefined()); 3006837a67edd9afdbfe1b59482b41693f59c48846ffulan@chromium.org V8_INLINE(void SetEmptyString()); 300753ad17558c81e6099cef4442237d7da643a5becfsvenpanne@chromium.org // Convenience getter for Isolate 300853ad17558c81e6099cef4442237d7da643a5becfsvenpanne@chromium.org V8_INLINE(Isolate* GetIsolate()); 3009dfe53073738bbf16023d96fce5118358a1037fd3ulan@chromium.org 3010bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.org private: 3011dfe53073738bbf16023d96fce5118358a1037fd3ulan@chromium.org template<class F> friend class ReturnValue; 3012dfe53073738bbf16023d96fce5118358a1037fd3ulan@chromium.org template<class F> friend class FunctionCallbackInfo; 3013dfe53073738bbf16023d96fce5118358a1037fd3ulan@chromium.org template<class F> friend class PropertyCallbackInfo; 30148a00e82ec5c3dbedfd3dcb56996c7df2452da4a5verwaest@chromium.org V8_INLINE(internal::Object* GetDefaultValue()); 3015dfe53073738bbf16023d96fce5118358a1037fd3ulan@chromium.org V8_INLINE(explicit ReturnValue(internal::Object** slot)); 3016bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.org internal::Object** value_; 3017bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.org}; 3018bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.org 3019bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.org 302043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen/** 302143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * The argument information given to function call callbacks. This 3022727e995b7bba3c57fb1e5c156d386ca11894f781v * class provides access to information about the context of the call, 302343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * including the receiver, the number and values of arguments, and 302443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * the holder of the function. 302543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen */ 3026bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.orgtemplate<typename T> 3027867c3b0ba722de75ec681cfe23a56f0692b49b7aulan@chromium.orgclass FunctionCallbackInfo { 302843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen public: 302932280cf2786219b2d9a668f7f00778fb59ac40b3mstarzinger@chromium.org V8_INLINE(int Length() const); 303032280cf2786219b2d9a668f7f00778fb59ac40b3mstarzinger@chromium.org V8_INLINE(Local<Value> operator[](int i) const); 303132280cf2786219b2d9a668f7f00778fb59ac40b3mstarzinger@chromium.org V8_INLINE(Local<Function> Callee() const); 303232280cf2786219b2d9a668f7f00778fb59ac40b3mstarzinger@chromium.org V8_INLINE(Local<Object> This() const); 303332280cf2786219b2d9a668f7f00778fb59ac40b3mstarzinger@chromium.org V8_INLINE(Local<Object> Holder() const); 303432280cf2786219b2d9a668f7f00778fb59ac40b3mstarzinger@chromium.org V8_INLINE(bool IsConstructCall() const); 303532280cf2786219b2d9a668f7f00778fb59ac40b3mstarzinger@chromium.org V8_INLINE(Local<Value> Data() const); 303632280cf2786219b2d9a668f7f00778fb59ac40b3mstarzinger@chromium.org V8_INLINE(Isolate* GetIsolate() const); 3037bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.org V8_INLINE(ReturnValue<T> GetReturnValue() const); 3038bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.org // This shouldn't be public, but the arm compiler needs it. 30398a00e82ec5c3dbedfd3dcb56996c7df2452da4a5verwaest@chromium.org static const int kArgsLength = 6; 30403ee08a60067751ecfad036b933a23002989d7450jkummerow@chromium.org 3041bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.org protected: 3042bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.org friend class internal::FunctionCallbackArguments; 3043bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.org friend class internal::CustomArguments<FunctionCallbackInfo>; 3044bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.org static const int kReturnValueIndex = 0; 30458a00e82ec5c3dbedfd3dcb56996c7df2452da4a5verwaest@chromium.org static const int kReturnValueDefaultValueIndex = -1; 30468a00e82ec5c3dbedfd3dcb56996c7df2452da4a5verwaest@chromium.org static const int kIsolateIndex = -2; 30478a00e82ec5c3dbedfd3dcb56996c7df2452da4a5verwaest@chromium.org static const int kDataIndex = -3; 30488a00e82ec5c3dbedfd3dcb56996c7df2452da4a5verwaest@chromium.org static const int kCalleeIndex = -4; 30498a00e82ec5c3dbedfd3dcb56996c7df2452da4a5verwaest@chromium.org static const int kHolderIndex = -5; 3050bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.org 3051bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.org V8_INLINE(FunctionCallbackInfo(internal::Object** implicit_args, 3052e03fb64ef23331755b7986d2560bc4c00ba3e67bfschneider@chromium.org internal::Object** values, 3053e03fb64ef23331755b7986d2560bc4c00ba3e67bfschneider@chromium.org int length, 305432280cf2786219b2d9a668f7f00778fb59ac40b3mstarzinger@chromium.org bool is_construct_call)); 3055e03fb64ef23331755b7986d2560bc4c00ba3e67bfschneider@chromium.org internal::Object** implicit_args_; 3056e03fb64ef23331755b7986d2560bc4c00ba3e67bfschneider@chromium.org internal::Object** values_; 305743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen int length_; 3058e03fb64ef23331755b7986d2560bc4c00ba3e67bfschneider@chromium.org bool is_construct_call_; 305943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen}; 306043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 306143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 3062594006017e46d82ed7146611dc12c20e3c509c7ddanno@chromium.orgclass V8_EXPORT Arguments : public FunctionCallbackInfo<Value> { 3063bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.org private: 3064bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.org friend class internal::FunctionCallbackArguments; 3065bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.org V8_INLINE(Arguments(internal::Object** implicit_args, 3066bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.org internal::Object** values, 3067bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.org int length, 3068bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.org bool is_construct_call)); 3069bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.org}; 3070bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.org 307143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen/** 3072bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.org * The information passed to a property callback about the context 307343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * of the property access. 307443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen */ 3075bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.orgtemplate<typename T> 3076867c3b0ba722de75ec681cfe23a56f0692b49b7aulan@chromium.orgclass PropertyCallbackInfo { 307743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen public: 307832280cf2786219b2d9a668f7f00778fb59ac40b3mstarzinger@chromium.org V8_INLINE(Isolate* GetIsolate() const); 307932280cf2786219b2d9a668f7f00778fb59ac40b3mstarzinger@chromium.org V8_INLINE(Local<Value> Data() const); 308032280cf2786219b2d9a668f7f00778fb59ac40b3mstarzinger@chromium.org V8_INLINE(Local<Object> This() const); 308132280cf2786219b2d9a668f7f00778fb59ac40b3mstarzinger@chromium.org V8_INLINE(Local<Object> Holder() const); 3082bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.org V8_INLINE(ReturnValue<T> GetReturnValue() const); 3083bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.org // This shouldn't be public, but the arm compiler needs it. 30848a00e82ec5c3dbedfd3dcb56996c7df2452da4a5verwaest@chromium.org static const int kArgsLength = 6; 30853ee08a60067751ecfad036b933a23002989d7450jkummerow@chromium.org 3086bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.org protected: 3087bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.org friend class MacroAssembler; 3088bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.org friend class internal::PropertyCallbackArguments; 3089bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.org friend class internal::CustomArguments<PropertyCallbackInfo>; 3090bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.org static const int kThisIndex = 0; 3091bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.org static const int kHolderIndex = -1; 3092bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.org static const int kDataIndex = -2; 309353ad17558c81e6099cef4442237d7da643a5becfsvenpanne@chromium.org static const int kReturnValueIndex = -3; 30948a00e82ec5c3dbedfd3dcb56996c7df2452da4a5verwaest@chromium.org static const int kReturnValueDefaultValueIndex = -4; 30958a00e82ec5c3dbedfd3dcb56996c7df2452da4a5verwaest@chromium.org static const int kIsolateIndex = -5; 3096bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.org 3097bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.org V8_INLINE(PropertyCallbackInfo(internal::Object** args)) 3098bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.org : args_(args) { } 3099c514574143c1bf74d4fb6e7dccb175fe9ff2f5d3sgjesse@chromium.org internal::Object** args_; 310043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen}; 310143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 310243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 3103594006017e46d82ed7146611dc12c20e3c509c7ddanno@chromium.orgclass V8_EXPORT AccessorInfo : public PropertyCallbackInfo<Value> { 3104bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.org private: 3105bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.org friend class internal::PropertyCallbackArguments; 3106bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.org V8_INLINE(AccessorInfo(internal::Object** args)) 3107bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.org : PropertyCallbackInfo<Value>(args) { } 3108bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.org}; 3109bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.org 3110bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.org 311143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansentypedef Handle<Value> (*InvocationCallback)(const Arguments& args); 3112bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.orgtypedef void (*FunctionCallback)(const FunctionCallbackInfo<Value>& info); 311343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 311443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen/** 311543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * NamedProperty[Getter|Setter] are used as interceptors on object. 311643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * See ObjectTemplate::SetNamedPropertyHandler. 311743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen */ 311843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansentypedef Handle<Value> (*NamedPropertyGetter)(Local<String> property, 311943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen const AccessorInfo& info); 3120bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.orgtypedef void (*NamedPropertyGetterCallback)( 3121bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.org Local<String> property, 3122bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.org const PropertyCallbackInfo<Value>& info); 312343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 312443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 312543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen/** 312643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * Returns the value if the setter intercepts the request. 312743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * Otherwise, returns an empty handle. 312843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen */ 312943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansentypedef Handle<Value> (*NamedPropertySetter)(Local<String> property, 313043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen Local<Value> value, 313143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen const AccessorInfo& info); 3132bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.orgtypedef void (*NamedPropertySetterCallback)( 3133bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.org Local<String> property, 3134bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.org Local<Value> value, 3135bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.org const PropertyCallbackInfo<Value>& info); 3136bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.org 313743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 313843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen/** 313943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * Returns a non-empty handle if the interceptor intercepts the request. 31402c186ca6690a1cb19ec7584e71f167234587c87cwhesse@chromium.org * The result is an integer encoding property attributes (like v8::None, 31412c186ca6690a1cb19ec7584e71f167234587c87cwhesse@chromium.org * v8::DontEnum, etc.) 314243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen */ 31431af7e1b5f676e5556c041fe09a5c4f5a906f27a0lrn@chromium.orgtypedef Handle<Integer> (*NamedPropertyQuery)(Local<String> property, 31441af7e1b5f676e5556c041fe09a5c4f5a906f27a0lrn@chromium.org const AccessorInfo& info); 3145bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.orgtypedef void (*NamedPropertyQueryCallback)( 3146bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.org Local<String> property, 3147bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.org const PropertyCallbackInfo<Integer>& info); 314843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 314943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 315043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen/** 315143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * Returns a non-empty handle if the deleter intercepts the request. 3152727e995b7bba3c57fb1e5c156d386ca11894f781v * The return value is true if the property could be deleted and false 3153727e995b7bba3c57fb1e5c156d386ca11894f781v * otherwise. 315443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen */ 315543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansentypedef Handle<Boolean> (*NamedPropertyDeleter)(Local<String> property, 315643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen const AccessorInfo& info); 3157bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.orgtypedef void (*NamedPropertyDeleterCallback)( 3158bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.org Local<String> property, 3159bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.org const PropertyCallbackInfo<Boolean>& info); 3160bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.org 316143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 316243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen/** 3163727e995b7bba3c57fb1e5c156d386ca11894f781v * Returns an array containing the names of the properties the named 3164727e995b7bba3c57fb1e5c156d386ca11894f781v * property getter intercepts. 316543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen */ 316643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansentypedef Handle<Array> (*NamedPropertyEnumerator)(const AccessorInfo& info); 3167bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.orgtypedef void (*NamedPropertyEnumeratorCallback)( 3168bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.org const PropertyCallbackInfo<Array>& info); 316943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 3170727e995b7bba3c57fb1e5c156d386ca11894f781v 317143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen/** 3172727e995b7bba3c57fb1e5c156d386ca11894f781v * Returns the value of the property if the getter intercepts the 3173727e995b7bba3c57fb1e5c156d386ca11894f781v * request. Otherwise, returns an empty handle. 317443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen */ 317543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansentypedef Handle<Value> (*IndexedPropertyGetter)(uint32_t index, 317643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen const AccessorInfo& info); 3177bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.orgtypedef void (*IndexedPropertyGetterCallback)( 3178bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.org uint32_t index, 3179bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.org const PropertyCallbackInfo<Value>& info); 318043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 318143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 318243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen/** 318343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * Returns the value if the setter intercepts the request. 318443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * Otherwise, returns an empty handle. 318543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen */ 318643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansentypedef Handle<Value> (*IndexedPropertySetter)(uint32_t index, 318743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen Local<Value> value, 318843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen const AccessorInfo& info); 3189bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.orgtypedef void (*IndexedPropertySetterCallback)( 3190bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.org uint32_t index, 3191bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.org Local<Value> value, 3192bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.org const PropertyCallbackInfo<Value>& info); 319343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 319443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 319543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen/** 319643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * Returns a non-empty handle if the interceptor intercepts the request. 3197ea4f62e1df22417fc8dc2c2425485dca98b13d07ager@chromium.org * The result is an integer encoding property attributes. 319843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen */ 319926c16f8ef35ec25d36420512a4ceaa74ea2e2b05vegorov@chromium.orgtypedef Handle<Integer> (*IndexedPropertyQuery)(uint32_t index, 320026c16f8ef35ec25d36420512a4ceaa74ea2e2b05vegorov@chromium.org const AccessorInfo& info); 3201bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.orgtypedef void (*IndexedPropertyQueryCallback)( 3202bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.org uint32_t index, 3203bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.org const PropertyCallbackInfo<Integer>& info); 3204bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.org 320543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 320643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen/** 320743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * Returns a non-empty handle if the deleter intercepts the request. 3208727e995b7bba3c57fb1e5c156d386ca11894f781v * The return value is true if the property could be deleted and false 3209727e995b7bba3c57fb1e5c156d386ca11894f781v * otherwise. 321043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen */ 321143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansentypedef Handle<Boolean> (*IndexedPropertyDeleter)(uint32_t index, 321243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen const AccessorInfo& info); 3213bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.orgtypedef void (*IndexedPropertyDeleterCallback)( 3214bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.org uint32_t index, 3215bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.org const PropertyCallbackInfo<Boolean>& info); 3216bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.org 321743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 3218727e995b7bba3c57fb1e5c156d386ca11894f781v/** 3219727e995b7bba3c57fb1e5c156d386ca11894f781v * Returns an array containing the indices of the properties the 3220727e995b7bba3c57fb1e5c156d386ca11894f781v * indexed property getter intercepts. 3221727e995b7bba3c57fb1e5c156d386ca11894f781v */ 322243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansentypedef Handle<Array> (*IndexedPropertyEnumerator)(const AccessorInfo& info); 3223bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.orgtypedef void (*IndexedPropertyEnumeratorCallback)( 3224bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.org const PropertyCallbackInfo<Array>& info); 322543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 322643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 322743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen/** 3228727e995b7bba3c57fb1e5c156d386ca11894f781v * Access type specification. 322943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen */ 323043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenenum AccessType { 323143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen ACCESS_GET, 323243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen ACCESS_SET, 323343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen ACCESS_HAS, 323443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen ACCESS_DELETE, 323543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen ACCESS_KEYS 323643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen}; 323743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 3238727e995b7bba3c57fb1e5c156d386ca11894f781v 3239727e995b7bba3c57fb1e5c156d386ca11894f781v/** 3240727e995b7bba3c57fb1e5c156d386ca11894f781v * Returns true if cross-context access should be allowed to the named 32412bc58ef330b2d92ba287754282872699c151db4achristian.plesner.hansen@gmail.com * property with the given key on the host object. 3242727e995b7bba3c57fb1e5c156d386ca11894f781v */ 32432bc58ef330b2d92ba287754282872699c151db4achristian.plesner.hansen@gmail.comtypedef bool (*NamedSecurityCallback)(Local<Object> host, 324443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen Local<Value> key, 324543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen AccessType type, 324643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen Local<Value> data); 324743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 3248727e995b7bba3c57fb1e5c156d386ca11894f781v 3249727e995b7bba3c57fb1e5c156d386ca11894f781v/** 3250727e995b7bba3c57fb1e5c156d386ca11894f781v * Returns true if cross-context access should be allowed to the indexed 32512bc58ef330b2d92ba287754282872699c151db4achristian.plesner.hansen@gmail.com * property with the given index on the host object. 3252727e995b7bba3c57fb1e5c156d386ca11894f781v */ 32532bc58ef330b2d92ba287754282872699c151db4achristian.plesner.hansen@gmail.comtypedef bool (*IndexedSecurityCallback)(Local<Object> host, 325443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen uint32_t index, 325543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen AccessType type, 325643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen Local<Value> data); 325743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 325843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 325943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen/** 3260727e995b7bba3c57fb1e5c156d386ca11894f781v * A FunctionTemplate is used to create functions at runtime. There 3261727e995b7bba3c57fb1e5c156d386ca11894f781v * can only be one function created from a FunctionTemplate in a 3262c514574143c1bf74d4fb6e7dccb175fe9ff2f5d3sgjesse@chromium.org * context. The lifetime of the created function is equal to the 3263c514574143c1bf74d4fb6e7dccb175fe9ff2f5d3sgjesse@chromium.org * lifetime of the context. So in case the embedder needs to create 3264c514574143c1bf74d4fb6e7dccb175fe9ff2f5d3sgjesse@chromium.org * temporary functions that can be collected using Scripts is 3265c514574143c1bf74d4fb6e7dccb175fe9ff2f5d3sgjesse@chromium.org * preferred. 326643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * 326743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * A FunctionTemplate can have properties, these properties are added to the 3268727e995b7bba3c57fb1e5c156d386ca11894f781v * function object when it is created. 326943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * 3270727e995b7bba3c57fb1e5c156d386ca11894f781v * A FunctionTemplate has a corresponding instance template which is 3271727e995b7bba3c57fb1e5c156d386ca11894f781v * used to create object instances when the function is used as a 3272727e995b7bba3c57fb1e5c156d386ca11894f781v * constructor. Properties added to the instance template are added to 3273727e995b7bba3c57fb1e5c156d386ca11894f781v * each object instance. 327443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * 327543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * A FunctionTemplate can have a prototype template. The prototype template 327643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * is used to create the prototype object of the function. 327743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * 3278727e995b7bba3c57fb1e5c156d386ca11894f781v * The following example shows how to use a FunctionTemplate: 327943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * 3280727e995b7bba3c57fb1e5c156d386ca11894f781v * \code 328143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * v8::Local<v8::FunctionTemplate> t = v8::FunctionTemplate::New(); 328243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * t->Set("func_property", v8::Number::New(1)); 328343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * 328443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * v8::Local<v8::Template> proto_t = t->PrototypeTemplate(); 328543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * proto_t->Set("proto_method", v8::FunctionTemplate::New(InvokeCallback)); 328643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * proto_t->Set("proto_const", v8::Number::New(2)); 328743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * 328843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * v8::Local<v8::ObjectTemplate> instance_t = t->InstanceTemplate(); 328943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * instance_t->SetAccessor("instance_accessor", InstanceAccessorCallback); 329043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * instance_t->SetNamedPropertyHandler(PropertyHandlerCallback, ...); 329143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * instance_t->Set("instance_property", Number::New(3)); 329243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * 329343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * v8::Local<v8::Function> function = t->GetFunction(); 329443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * v8::Local<v8::Object> instance = function->NewInstance(); 3295727e995b7bba3c57fb1e5c156d386ca11894f781v * \endcode 329643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * 329743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * Let's use "function" as the JS variable name of the function object 3298727e995b7bba3c57fb1e5c156d386ca11894f781v * and "instance" for the instance object created above. The function 3299727e995b7bba3c57fb1e5c156d386ca11894f781v * and the instance will have the following properties: 330043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * 3301727e995b7bba3c57fb1e5c156d386ca11894f781v * \code 3302727e995b7bba3c57fb1e5c156d386ca11894f781v * func_property in function == true; 3303727e995b7bba3c57fb1e5c156d386ca11894f781v * function.func_property == 1; 330443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * 3305727e995b7bba3c57fb1e5c156d386ca11894f781v * function.prototype.proto_method() invokes 'InvokeCallback' 3306727e995b7bba3c57fb1e5c156d386ca11894f781v * function.prototype.proto_const == 2; 330743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * 3308727e995b7bba3c57fb1e5c156d386ca11894f781v * instance instanceof function == true; 3309727e995b7bba3c57fb1e5c156d386ca11894f781v * instance.instance_accessor calls 'InstanceAccessorCallback' 3310727e995b7bba3c57fb1e5c156d386ca11894f781v * instance.instance_property == 3; 3311727e995b7bba3c57fb1e5c156d386ca11894f781v * \endcode 331243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * 3313727e995b7bba3c57fb1e5c156d386ca11894f781v * A FunctionTemplate can inherit from another one by calling the 3314727e995b7bba3c57fb1e5c156d386ca11894f781v * FunctionTemplate::Inherit method. The following graph illustrates 3315727e995b7bba3c57fb1e5c156d386ca11894f781v * the semantics of inheritance: 331643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * 3317727e995b7bba3c57fb1e5c156d386ca11894f781v * \code 3318727e995b7bba3c57fb1e5c156d386ca11894f781v * FunctionTemplate Parent -> Parent() . prototype -> { } 3319727e995b7bba3c57fb1e5c156d386ca11894f781v * ^ ^ 3320727e995b7bba3c57fb1e5c156d386ca11894f781v * | Inherit(Parent) | .__proto__ 3321727e995b7bba3c57fb1e5c156d386ca11894f781v * | | 3322727e995b7bba3c57fb1e5c156d386ca11894f781v * FunctionTemplate Child -> Child() . prototype -> { } 3323727e995b7bba3c57fb1e5c156d386ca11894f781v * \endcode 332443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * 3325727e995b7bba3c57fb1e5c156d386ca11894f781v * A FunctionTemplate 'Child' inherits from 'Parent', the prototype 3326727e995b7bba3c57fb1e5c156d386ca11894f781v * object of the Child() function has __proto__ pointing to the 3327727e995b7bba3c57fb1e5c156d386ca11894f781v * Parent() function's prototype object. An instance of the Child 3328727e995b7bba3c57fb1e5c156d386ca11894f781v * function has all properties on Parent's instance templates. 332943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * 3330727e995b7bba3c57fb1e5c156d386ca11894f781v * Let Parent be the FunctionTemplate initialized in the previous 3331727e995b7bba3c57fb1e5c156d386ca11894f781v * section and create a Child FunctionTemplate by: 333243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * 3333727e995b7bba3c57fb1e5c156d386ca11894f781v * \code 333443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * Local<FunctionTemplate> parent = t; 333543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * Local<FunctionTemplate> child = FunctionTemplate::New(); 333643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * child->Inherit(parent); 333743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * 333843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * Local<Function> child_function = child->GetFunction(); 333943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * Local<Object> child_instance = child_function->NewInstance(); 3340727e995b7bba3c57fb1e5c156d386ca11894f781v * \endcode 334143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * 3342727e995b7bba3c57fb1e5c156d386ca11894f781v * The Child function and Child instance will have the following 3343727e995b7bba3c57fb1e5c156d386ca11894f781v * properties: 3344727e995b7bba3c57fb1e5c156d386ca11894f781v * 3345727e995b7bba3c57fb1e5c156d386ca11894f781v * \code 334643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * child_func.prototype.__proto__ == function.prototype; 3347727e995b7bba3c57fb1e5c156d386ca11894f781v * child_instance.instance_accessor calls 'InstanceAccessorCallback' 334843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * child_instance.instance_property == 3; 3349727e995b7bba3c57fb1e5c156d386ca11894f781v * \endcode 335043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen */ 3351594006017e46d82ed7146611dc12c20e3c509c7ddanno@chromium.orgclass V8_EXPORT FunctionTemplate : public Template { 335243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen public: 335343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen /** Creates a function template.*/ 33541510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org V8_DEPRECATED(static Local<FunctionTemplate> New( 33551510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org InvocationCallback callback, 3356727e995b7bba3c57fb1e5c156d386ca11894f781v Handle<Value> data = Handle<Value>(), 3357a6bbcc801f63c451f814d6da77a1a48fba3d36c6yangguo@chromium.org Handle<Signature> signature = Handle<Signature>(), 33581510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org int length = 0)); 3359bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.org static Local<FunctionTemplate> New( 33601510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org FunctionCallback callback = 0, 3361bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.org Handle<Value> data = Handle<Value>(), 3362bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.org Handle<Signature> signature = Handle<Signature>(), 3363bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.org int length = 0); 3364bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.org 336543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen /** Returns the unique function instance in the current execution context.*/ 336643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen Local<Function> GetFunction(); 336743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 3368727e995b7bba3c57fb1e5c156d386ca11894f781v /** 3369727e995b7bba3c57fb1e5c156d386ca11894f781v * Set the call-handler callback for a FunctionTemplate. This 3370727e995b7bba3c57fb1e5c156d386ca11894f781v * callback is called whenever the function created from this 3371727e995b7bba3c57fb1e5c156d386ca11894f781v * FunctionTemplate is called. 3372727e995b7bba3c57fb1e5c156d386ca11894f781v */ 33731510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org V8_DEPRECATED(void SetCallHandler(InvocationCallback callback, 33741510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org Handle<Value> data = Handle<Value>())); 3375bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.org void SetCallHandler(FunctionCallback callback, 3376bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.org Handle<Value> data = Handle<Value>()); 337743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 3378a6bbcc801f63c451f814d6da77a1a48fba3d36c6yangguo@chromium.org /** Set the predefined length property for the FunctionTemplate. */ 3379a6bbcc801f63c451f814d6da77a1a48fba3d36c6yangguo@chromium.org void SetLength(int length); 3380a6bbcc801f63c451f814d6da77a1a48fba3d36c6yangguo@chromium.org 3381727e995b7bba3c57fb1e5c156d386ca11894f781v /** Get the InstanceTemplate. */ 338243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen Local<ObjectTemplate> InstanceTemplate(); 338343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 338443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen /** Causes the function template to inherit from a parent function template.*/ 338543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen void Inherit(Handle<FunctionTemplate> parent); 338643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 338743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen /** 338843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * A PrototypeTemplate is the template used to create the prototype object 338943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * of the function created by this template. 339043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen */ 339143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen Local<ObjectTemplate> PrototypeTemplate(); 339243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 3393727e995b7bba3c57fb1e5c156d386ca11894f781v /** 3394727e995b7bba3c57fb1e5c156d386ca11894f781v * Set the class name of the FunctionTemplate. This is used for 3395727e995b7bba3c57fb1e5c156d386ca11894f781v * printing objects created with the function created from the 3396727e995b7bba3c57fb1e5c156d386ca11894f781v * FunctionTemplate as its constructor. 3397727e995b7bba3c57fb1e5c156d386ca11894f781v */ 339843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen void SetClassName(Handle<String> name); 339943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 340043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen /** 3401727e995b7bba3c57fb1e5c156d386ca11894f781v * Determines whether the __proto__ accessor ignores instances of 3402727e995b7bba3c57fb1e5c156d386ca11894f781v * the function template. If instances of the function template are 3403727e995b7bba3c57fb1e5c156d386ca11894f781v * ignored, __proto__ skips all instances and instead returns the 3404727e995b7bba3c57fb1e5c156d386ca11894f781v * next object in the prototype chain. 3405727e995b7bba3c57fb1e5c156d386ca11894f781v * 3406727e995b7bba3c57fb1e5c156d386ca11894f781v * Call with a value of true to make the __proto__ accessor ignore 3407727e995b7bba3c57fb1e5c156d386ca11894f781v * instances of the function template. Call with a value of false 3408727e995b7bba3c57fb1e5c156d386ca11894f781v * to make the __proto__ accessor not ignore instances of the 3409727e995b7bba3c57fb1e5c156d386ca11894f781v * function template. By default, instances of a function template 3410727e995b7bba3c57fb1e5c156d386ca11894f781v * are not ignored. 341143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen */ 341243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen void SetHiddenPrototype(bool value); 341343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 341443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen /** 34152c99e28a7b1fcb3767dc7c0088514fe53be784c5ricow@chromium.org * Sets the ReadOnly flag in the attributes of the 'prototype' property 34162c99e28a7b1fcb3767dc7c0088514fe53be784c5ricow@chromium.org * of functions created from this FunctionTemplate to true. 341704921a8093ce8bbec34084bd742b7aa3d299be15ager@chromium.org */ 34182c99e28a7b1fcb3767dc7c0088514fe53be784c5ricow@chromium.org void ReadOnlyPrototype(); 341904921a8093ce8bbec34084bd742b7aa3d299be15ager@chromium.org 342004921a8093ce8bbec34084bd742b7aa3d299be15ager@chromium.org /** 3421727e995b7bba3c57fb1e5c156d386ca11894f781v * Returns true if the given object is an instance of this function 3422727e995b7bba3c57fb1e5c156d386ca11894f781v * template. 342343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen */ 342443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen bool HasInstance(Handle<Value> object); 342543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 342643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen private: 342743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen FunctionTemplate(); 34281510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org // TODO(dcarney): Remove with SetCallHandler. 34291510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org friend class v8::CallHandlerHelper; 34301510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org void SetCallHandlerInternal(InvocationCallback callback, Handle<Value> data); 343143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen friend class Context; 343243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen friend class ObjectTemplate; 343343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen}; 343443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 343543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 343643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen/** 3437727e995b7bba3c57fb1e5c156d386ca11894f781v * An ObjectTemplate is used to create objects at runtime. 3438727e995b7bba3c57fb1e5c156d386ca11894f781v * 3439727e995b7bba3c57fb1e5c156d386ca11894f781v * Properties added to an ObjectTemplate are added to each object 3440727e995b7bba3c57fb1e5c156d386ca11894f781v * created from the ObjectTemplate. 344143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen */ 3442594006017e46d82ed7146611dc12c20e3c509c7ddanno@chromium.orgclass V8_EXPORT ObjectTemplate : public Template { 344343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen public: 3444727e995b7bba3c57fb1e5c156d386ca11894f781v /** Creates an ObjectTemplate. */ 344543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen static Local<ObjectTemplate> New(); 3446727e995b7bba3c57fb1e5c156d386ca11894f781v 344743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen /** Creates a new instance of this template.*/ 344843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen Local<Object> NewInstance(); 344943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 345043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen /** 345143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * Sets an accessor on the object template. 3452727e995b7bba3c57fb1e5c156d386ca11894f781v * 3453727e995b7bba3c57fb1e5c156d386ca11894f781v * Whenever the property with the given name is accessed on objects 3454727e995b7bba3c57fb1e5c156d386ca11894f781v * created from this ObjectTemplate the getter and setter callbacks 3455727e995b7bba3c57fb1e5c156d386ca11894f781v * are called instead of getting and setting the property directly 3456727e995b7bba3c57fb1e5c156d386ca11894f781v * on the JavaScript object. 3457727e995b7bba3c57fb1e5c156d386ca11894f781v * 3458727e995b7bba3c57fb1e5c156d386ca11894f781v * \param name The name of the property for which an accessor is added. 3459727e995b7bba3c57fb1e5c156d386ca11894f781v * \param getter The callback to invoke when getting the property. 3460727e995b7bba3c57fb1e5c156d386ca11894f781v * \param setter The callback to invoke when setting the property. 3461727e995b7bba3c57fb1e5c156d386ca11894f781v * \param data A piece of data that will be passed to the getter and setter 3462727e995b7bba3c57fb1e5c156d386ca11894f781v * callbacks whenever they are invoked. 3463727e995b7bba3c57fb1e5c156d386ca11894f781v * \param settings Access control settings for the accessor. This is a bit 3464727e995b7bba3c57fb1e5c156d386ca11894f781v * field consisting of one of more of 3465727e995b7bba3c57fb1e5c156d386ca11894f781v * DEFAULT = 0, ALL_CAN_READ = 1, or ALL_CAN_WRITE = 2. 3466727e995b7bba3c57fb1e5c156d386ca11894f781v * The default is to not allow cross-context access. 3467727e995b7bba3c57fb1e5c156d386ca11894f781v * ALL_CAN_READ means that all cross-context reads are allowed. 3468727e995b7bba3c57fb1e5c156d386ca11894f781v * ALL_CAN_WRITE means that all cross-context writes are allowed. 3469727e995b7bba3c57fb1e5c156d386ca11894f781v * The combination ALL_CAN_READ | ALL_CAN_WRITE can be used to allow all 3470727e995b7bba3c57fb1e5c156d386ca11894f781v * cross-context access. 3471727e995b7bba3c57fb1e5c156d386ca11894f781v * \param attribute The attributes of the property for which an accessor 3472727e995b7bba3c57fb1e5c156d386ca11894f781v * is added. 34737028c05c1c71b9d5c5fe1bca01f2461d17a2dda7mmassi@chromium.org * \param signature The signature describes valid receivers for the accessor 34747028c05c1c71b9d5c5fe1bca01f2461d17a2dda7mmassi@chromium.org * and is used to perform implicit instance checks against them. If the 34757028c05c1c71b9d5c5fe1bca01f2461d17a2dda7mmassi@chromium.org * receiver is incompatible (i.e. is not an instance of the constructor as 34767028c05c1c71b9d5c5fe1bca01f2461d17a2dda7mmassi@chromium.org * defined by FunctionTemplate::HasInstance()), an implicit TypeError is 34777028c05c1c71b9d5c5fe1bca01f2461d17a2dda7mmassi@chromium.org * thrown and no callback is invoked. 347843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen */ 34791510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org V8_DEPRECATED(void SetAccessor(Handle<String> name, 34801510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org AccessorGetter getter, 34811510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org AccessorSetter setter = 0, 34821510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org Handle<Value> data = Handle<Value>(), 34831510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org AccessControl settings = DEFAULT, 34841510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org PropertyAttribute attribute = None, 34851510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org Handle<AccessorSignature> signature = 34861510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org Handle<AccessorSignature>())); 3487bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.org void SetAccessor(Handle<String> name, 3488bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.org AccessorGetterCallback getter, 3489bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.org AccessorSetterCallback setter = 0, 3490bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.org Handle<Value> data = Handle<Value>(), 3491bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.org AccessControl settings = DEFAULT, 3492bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.org PropertyAttribute attribute = None, 3493bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.org Handle<AccessorSignature> signature = 3494bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.org Handle<AccessorSignature>()); 349543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 3496750145ab1b720c97adf2b548cc8fbd28c8b8e06dulan@chromium.org // This function is not yet stable and should not be used at this time. 3497750145ab1b720c97adf2b548cc8fbd28c8b8e06dulan@chromium.org bool SetAccessor(Handle<String> name, 3498750145ab1b720c97adf2b548cc8fbd28c8b8e06dulan@chromium.org Handle<DeclaredAccessorDescriptor> descriptor, 3499750145ab1b720c97adf2b548cc8fbd28c8b8e06dulan@chromium.org AccessControl settings = DEFAULT, 3500750145ab1b720c97adf2b548cc8fbd28c8b8e06dulan@chromium.org PropertyAttribute attribute = None, 3501750145ab1b720c97adf2b548cc8fbd28c8b8e06dulan@chromium.org Handle<AccessorSignature> signature = 3502750145ab1b720c97adf2b548cc8fbd28c8b8e06dulan@chromium.org Handle<AccessorSignature>()); 3503750145ab1b720c97adf2b548cc8fbd28c8b8e06dulan@chromium.org 350443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen /** 350543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * Sets a named property handler on the object template. 3506727e995b7bba3c57fb1e5c156d386ca11894f781v * 3507727e995b7bba3c57fb1e5c156d386ca11894f781v * Whenever a named property is accessed on objects created from 3508727e995b7bba3c57fb1e5c156d386ca11894f781v * this object template, the provided callback is invoked instead of 3509727e995b7bba3c57fb1e5c156d386ca11894f781v * accessing the property directly on the JavaScript object. 3510727e995b7bba3c57fb1e5c156d386ca11894f781v * 3511727e995b7bba3c57fb1e5c156d386ca11894f781v * \param getter The callback to invoke when getting a property. 3512727e995b7bba3c57fb1e5c156d386ca11894f781v * \param setter The callback to invoke when setting a property. 35132c186ca6690a1cb19ec7584e71f167234587c87cwhesse@chromium.org * \param query The callback to invoke to check if a property is present, 35142c186ca6690a1cb19ec7584e71f167234587c87cwhesse@chromium.org * and if present, get its attributes. 3515727e995b7bba3c57fb1e5c156d386ca11894f781v * \param deleter The callback to invoke when deleting a property. 3516727e995b7bba3c57fb1e5c156d386ca11894f781v * \param enumerator The callback to invoke to enumerate all the named 3517727e995b7bba3c57fb1e5c156d386ca11894f781v * properties of an object. 3518727e995b7bba3c57fb1e5c156d386ca11894f781v * \param data A piece of data that will be passed to the callbacks 3519727e995b7bba3c57fb1e5c156d386ca11894f781v * whenever they are invoked. 352043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen */ 35211510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org V8_DEPRECATED(void SetNamedPropertyHandler( 35221510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org NamedPropertyGetter getter, 35231510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org NamedPropertySetter setter = 0, 35241510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org NamedPropertyQuery query = 0, 35251510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org NamedPropertyDeleter deleter = 0, 35261510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org NamedPropertyEnumerator enumerator = 0, 35271510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org Handle<Value> data = Handle<Value>())); 3528bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.org void SetNamedPropertyHandler( 3529bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.org NamedPropertyGetterCallback getter, 3530bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.org NamedPropertySetterCallback setter = 0, 3531bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.org NamedPropertyQueryCallback query = 0, 3532bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.org NamedPropertyDeleterCallback deleter = 0, 3533bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.org NamedPropertyEnumeratorCallback enumerator = 0, 3534bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.org Handle<Value> data = Handle<Value>()); 353543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 353643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen /** 353743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * Sets an indexed property handler on the object template. 3538727e995b7bba3c57fb1e5c156d386ca11894f781v * 3539727e995b7bba3c57fb1e5c156d386ca11894f781v * Whenever an indexed property is accessed on objects created from 3540727e995b7bba3c57fb1e5c156d386ca11894f781v * this object template, the provided callback is invoked instead of 3541727e995b7bba3c57fb1e5c156d386ca11894f781v * accessing the property directly on the JavaScript object. 3542727e995b7bba3c57fb1e5c156d386ca11894f781v * 3543727e995b7bba3c57fb1e5c156d386ca11894f781v * \param getter The callback to invoke when getting a property. 3544727e995b7bba3c57fb1e5c156d386ca11894f781v * \param setter The callback to invoke when setting a property. 35457304bcac06a6a63b9f3dcebac2eeceada87ca146vegorov@chromium.org * \param query The callback to invoke to check if an object has a property. 3546727e995b7bba3c57fb1e5c156d386ca11894f781v * \param deleter The callback to invoke when deleting a property. 3547727e995b7bba3c57fb1e5c156d386ca11894f781v * \param enumerator The callback to invoke to enumerate all the indexed 3548727e995b7bba3c57fb1e5c156d386ca11894f781v * properties of an object. 3549727e995b7bba3c57fb1e5c156d386ca11894f781v * \param data A piece of data that will be passed to the callbacks 3550727e995b7bba3c57fb1e5c156d386ca11894f781v * whenever they are invoked. 355143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen */ 35521510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org V8_DEPRECATED(void SetIndexedPropertyHandler( 35531510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org IndexedPropertyGetter getter, 35541510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org IndexedPropertySetter setter = 0, 35551510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org IndexedPropertyQuery query = 0, 35561510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org IndexedPropertyDeleter deleter = 0, 35571510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org IndexedPropertyEnumerator enumerator = 0, 35581510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org Handle<Value> data = Handle<Value>())); 3559bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.org void SetIndexedPropertyHandler( 3560bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.org IndexedPropertyGetterCallback getter, 3561bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.org IndexedPropertySetterCallback setter = 0, 3562bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.org IndexedPropertyQueryCallback query = 0, 3563bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.org IndexedPropertyDeleterCallback deleter = 0, 3564bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.org IndexedPropertyEnumeratorCallback enumerator = 0, 3565bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.org Handle<Value> data = Handle<Value>()); 356626c16f8ef35ec25d36420512a4ceaa74ea2e2b05vegorov@chromium.org 356743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen /** 356843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * Sets the callback to be used when calling instances created from 356943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * this template as a function. If no callback is set, instances 3570727e995b7bba3c57fb1e5c156d386ca11894f781v * behave like normal JavaScript objects that cannot be called as a 357143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * function. 357243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen */ 35731510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org V8_DEPRECATED(void SetCallAsFunctionHandler( 35741510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org InvocationCallback callback, 35751510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org Handle<Value> data = Handle<Value>())); 3576bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.org void SetCallAsFunctionHandler(FunctionCallback callback, 3577bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.org Handle<Value> data = Handle<Value>()); 357843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 3579727e995b7bba3c57fb1e5c156d386ca11894f781v /** 3580727e995b7bba3c57fb1e5c156d386ca11894f781v * Mark object instances of the template as undetectable. 3581727e995b7bba3c57fb1e5c156d386ca11894f781v * 3582727e995b7bba3c57fb1e5c156d386ca11894f781v * In many ways, undetectable objects behave as though they are not 3583727e995b7bba3c57fb1e5c156d386ca11894f781v * there. They behave like 'undefined' in conditionals and when 3584727e995b7bba3c57fb1e5c156d386ca11894f781v * printed. However, properties can be accessed and called as on 3585727e995b7bba3c57fb1e5c156d386ca11894f781v * normal objects. 3586727e995b7bba3c57fb1e5c156d386ca11894f781v */ 358743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen void MarkAsUndetectable(); 358843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 3589727e995b7bba3c57fb1e5c156d386ca11894f781v /** 3590727e995b7bba3c57fb1e5c156d386ca11894f781v * Sets access check callbacks on the object template. 3591727e995b7bba3c57fb1e5c156d386ca11894f781v * 3592727e995b7bba3c57fb1e5c156d386ca11894f781v * When accessing properties on instances of this object template, 3593727e995b7bba3c57fb1e5c156d386ca11894f781v * the access check callback will be called to determine whether or 3594727e995b7bba3c57fb1e5c156d386ca11894f781v * not to allow cross-context access to the properties. 35955a8ca6c70c6fc9716f18f6223c98d1fef5752cf6kasperl@chromium.org * The last parameter specifies whether access checks are turned 35965a8ca6c70c6fc9716f18f6223c98d1fef5752cf6kasperl@chromium.org * on by default on instances. If access checks are off by default, 35975a8ca6c70c6fc9716f18f6223c98d1fef5752cf6kasperl@chromium.org * they can be turned on on individual instances by calling 35985a8ca6c70c6fc9716f18f6223c98d1fef5752cf6kasperl@chromium.org * Object::TurnOnAccessCheck(). 3599727e995b7bba3c57fb1e5c156d386ca11894f781v */ 360043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen void SetAccessCheckCallbacks(NamedSecurityCallback named_handler, 360143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen IndexedSecurityCallback indexed_handler, 36025a8ca6c70c6fc9716f18f6223c98d1fef5752cf6kasperl@chromium.org Handle<Value> data = Handle<Value>(), 36035a8ca6c70c6fc9716f18f6223c98d1fef5752cf6kasperl@chromium.org bool turned_on_by_default = true); 360443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 3605212ac23f8231d169b4aa6737d762099993020826kasper.lund /** 3606212ac23f8231d169b4aa6737d762099993020826kasper.lund * Gets the number of internal fields for objects generated from 3607212ac23f8231d169b4aa6737d762099993020826kasper.lund * this template. 3608212ac23f8231d169b4aa6737d762099993020826kasper.lund */ 3609212ac23f8231d169b4aa6737d762099993020826kasper.lund int InternalFieldCount(); 3610212ac23f8231d169b4aa6737d762099993020826kasper.lund 3611212ac23f8231d169b4aa6737d762099993020826kasper.lund /** 3612212ac23f8231d169b4aa6737d762099993020826kasper.lund * Sets the number of internal fields for objects generated from 3613212ac23f8231d169b4aa6737d762099993020826kasper.lund * this template. 3614212ac23f8231d169b4aa6737d762099993020826kasper.lund */ 3615212ac23f8231d169b4aa6737d762099993020826kasper.lund void SetInternalFieldCount(int value); 3616212ac23f8231d169b4aa6737d762099993020826kasper.lund 361743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen private: 361843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen ObjectTemplate(); 361943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen static Local<ObjectTemplate> New(Handle<FunctionTemplate> constructor); 362043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen friend class FunctionTemplate; 362143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen}; 362243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 362343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 362443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen/** 36257028c05c1c71b9d5c5fe1bca01f2461d17a2dda7mmassi@chromium.org * A Signature specifies which receivers and arguments are valid 36267028c05c1c71b9d5c5fe1bca01f2461d17a2dda7mmassi@chromium.org * parameters to a function. 362743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen */ 3628594006017e46d82ed7146611dc12c20e3c509c7ddanno@chromium.orgclass V8_EXPORT Signature : public Data { 362943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen public: 363043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen static Local<Signature> New(Handle<FunctionTemplate> receiver = 363143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen Handle<FunctionTemplate>(), 363243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen int argc = 0, 363343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen Handle<FunctionTemplate> argv[] = 0); 363443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen private: 363543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen Signature(); 363643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen}; 363743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 363843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 363943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen/** 36407028c05c1c71b9d5c5fe1bca01f2461d17a2dda7mmassi@chromium.org * An AccessorSignature specifies which receivers are valid parameters 36417028c05c1c71b9d5c5fe1bca01f2461d17a2dda7mmassi@chromium.org * to an accessor callback. 36427028c05c1c71b9d5c5fe1bca01f2461d17a2dda7mmassi@chromium.org */ 3643594006017e46d82ed7146611dc12c20e3c509c7ddanno@chromium.orgclass V8_EXPORT AccessorSignature : public Data { 36447028c05c1c71b9d5c5fe1bca01f2461d17a2dda7mmassi@chromium.org public: 36457028c05c1c71b9d5c5fe1bca01f2461d17a2dda7mmassi@chromium.org static Local<AccessorSignature> New(Handle<FunctionTemplate> receiver = 36467028c05c1c71b9d5c5fe1bca01f2461d17a2dda7mmassi@chromium.org Handle<FunctionTemplate>()); 36477028c05c1c71b9d5c5fe1bca01f2461d17a2dda7mmassi@chromium.org private: 36487028c05c1c71b9d5c5fe1bca01f2461d17a2dda7mmassi@chromium.org AccessorSignature(); 36497028c05c1c71b9d5c5fe1bca01f2461d17a2dda7mmassi@chromium.org}; 36507028c05c1c71b9d5c5fe1bca01f2461d17a2dda7mmassi@chromium.org 36517028c05c1c71b9d5c5fe1bca01f2461d17a2dda7mmassi@chromium.org 3652594006017e46d82ed7146611dc12c20e3c509c7ddanno@chromium.orgclass V8_EXPORT DeclaredAccessorDescriptor : public Data { 3653750145ab1b720c97adf2b548cc8fbd28c8b8e06dulan@chromium.org private: 3654750145ab1b720c97adf2b548cc8fbd28c8b8e06dulan@chromium.org DeclaredAccessorDescriptor(); 3655750145ab1b720c97adf2b548cc8fbd28c8b8e06dulan@chromium.org}; 3656750145ab1b720c97adf2b548cc8fbd28c8b8e06dulan@chromium.org 3657750145ab1b720c97adf2b548cc8fbd28c8b8e06dulan@chromium.org 3658594006017e46d82ed7146611dc12c20e3c509c7ddanno@chromium.orgclass V8_EXPORT ObjectOperationDescriptor : public Data { 3659750145ab1b720c97adf2b548cc8fbd28c8b8e06dulan@chromium.org public: 3660750145ab1b720c97adf2b548cc8fbd28c8b8e06dulan@chromium.org // This function is not yet stable and should not be used at this time. 3661750145ab1b720c97adf2b548cc8fbd28c8b8e06dulan@chromium.org static Local<RawOperationDescriptor> NewInternalFieldDereference( 3662750145ab1b720c97adf2b548cc8fbd28c8b8e06dulan@chromium.org Isolate* isolate, 3663750145ab1b720c97adf2b548cc8fbd28c8b8e06dulan@chromium.org int internal_field); 3664750145ab1b720c97adf2b548cc8fbd28c8b8e06dulan@chromium.org private: 3665750145ab1b720c97adf2b548cc8fbd28c8b8e06dulan@chromium.org ObjectOperationDescriptor(); 3666750145ab1b720c97adf2b548cc8fbd28c8b8e06dulan@chromium.org}; 3667750145ab1b720c97adf2b548cc8fbd28c8b8e06dulan@chromium.org 3668750145ab1b720c97adf2b548cc8fbd28c8b8e06dulan@chromium.org 3669750145ab1b720c97adf2b548cc8fbd28c8b8e06dulan@chromium.orgenum DeclaredAccessorDescriptorDataType { 3670750145ab1b720c97adf2b548cc8fbd28c8b8e06dulan@chromium.org kDescriptorBoolType, 3671750145ab1b720c97adf2b548cc8fbd28c8b8e06dulan@chromium.org kDescriptorInt8Type, kDescriptorUint8Type, 3672750145ab1b720c97adf2b548cc8fbd28c8b8e06dulan@chromium.org kDescriptorInt16Type, kDescriptorUint16Type, 3673750145ab1b720c97adf2b548cc8fbd28c8b8e06dulan@chromium.org kDescriptorInt32Type, kDescriptorUint32Type, 3674750145ab1b720c97adf2b548cc8fbd28c8b8e06dulan@chromium.org kDescriptorFloatType, kDescriptorDoubleType 3675750145ab1b720c97adf2b548cc8fbd28c8b8e06dulan@chromium.org}; 3676750145ab1b720c97adf2b548cc8fbd28c8b8e06dulan@chromium.org 3677750145ab1b720c97adf2b548cc8fbd28c8b8e06dulan@chromium.org 3678594006017e46d82ed7146611dc12c20e3c509c7ddanno@chromium.orgclass V8_EXPORT RawOperationDescriptor : public Data { 3679750145ab1b720c97adf2b548cc8fbd28c8b8e06dulan@chromium.org public: 3680750145ab1b720c97adf2b548cc8fbd28c8b8e06dulan@chromium.org Local<DeclaredAccessorDescriptor> NewHandleDereference(Isolate* isolate); 3681750145ab1b720c97adf2b548cc8fbd28c8b8e06dulan@chromium.org Local<RawOperationDescriptor> NewRawDereference(Isolate* isolate); 3682750145ab1b720c97adf2b548cc8fbd28c8b8e06dulan@chromium.org Local<RawOperationDescriptor> NewRawShift(Isolate* isolate, 3683750145ab1b720c97adf2b548cc8fbd28c8b8e06dulan@chromium.org int16_t byte_offset); 3684750145ab1b720c97adf2b548cc8fbd28c8b8e06dulan@chromium.org Local<DeclaredAccessorDescriptor> NewPointerCompare(Isolate* isolate, 3685750145ab1b720c97adf2b548cc8fbd28c8b8e06dulan@chromium.org void* compare_value); 3686750145ab1b720c97adf2b548cc8fbd28c8b8e06dulan@chromium.org Local<DeclaredAccessorDescriptor> NewPrimitiveValue( 3687750145ab1b720c97adf2b548cc8fbd28c8b8e06dulan@chromium.org Isolate* isolate, 3688750145ab1b720c97adf2b548cc8fbd28c8b8e06dulan@chromium.org DeclaredAccessorDescriptorDataType data_type, 3689750145ab1b720c97adf2b548cc8fbd28c8b8e06dulan@chromium.org uint8_t bool_offset = 0); 3690750145ab1b720c97adf2b548cc8fbd28c8b8e06dulan@chromium.org Local<DeclaredAccessorDescriptor> NewBitmaskCompare8(Isolate* isolate, 3691750145ab1b720c97adf2b548cc8fbd28c8b8e06dulan@chromium.org uint8_t bitmask, 3692750145ab1b720c97adf2b548cc8fbd28c8b8e06dulan@chromium.org uint8_t compare_value); 3693750145ab1b720c97adf2b548cc8fbd28c8b8e06dulan@chromium.org Local<DeclaredAccessorDescriptor> NewBitmaskCompare16( 3694750145ab1b720c97adf2b548cc8fbd28c8b8e06dulan@chromium.org Isolate* isolate, 3695750145ab1b720c97adf2b548cc8fbd28c8b8e06dulan@chromium.org uint16_t bitmask, 3696750145ab1b720c97adf2b548cc8fbd28c8b8e06dulan@chromium.org uint16_t compare_value); 3697750145ab1b720c97adf2b548cc8fbd28c8b8e06dulan@chromium.org Local<DeclaredAccessorDescriptor> NewBitmaskCompare32( 3698750145ab1b720c97adf2b548cc8fbd28c8b8e06dulan@chromium.org Isolate* isolate, 3699750145ab1b720c97adf2b548cc8fbd28c8b8e06dulan@chromium.org uint32_t bitmask, 3700750145ab1b720c97adf2b548cc8fbd28c8b8e06dulan@chromium.org uint32_t compare_value); 3701750145ab1b720c97adf2b548cc8fbd28c8b8e06dulan@chromium.org 3702750145ab1b720c97adf2b548cc8fbd28c8b8e06dulan@chromium.org private: 3703750145ab1b720c97adf2b548cc8fbd28c8b8e06dulan@chromium.org RawOperationDescriptor(); 3704750145ab1b720c97adf2b548cc8fbd28c8b8e06dulan@chromium.org}; 3705750145ab1b720c97adf2b548cc8fbd28c8b8e06dulan@chromium.org 3706750145ab1b720c97adf2b548cc8fbd28c8b8e06dulan@chromium.org 37077028c05c1c71b9d5c5fe1bca01f2461d17a2dda7mmassi@chromium.org/** 3708727e995b7bba3c57fb1e5c156d386ca11894f781v * A utility for determining the type of objects based on the template 3709727e995b7bba3c57fb1e5c156d386ca11894f781v * they were constructed from. 371043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen */ 3711594006017e46d82ed7146611dc12c20e3c509c7ddanno@chromium.orgclass V8_EXPORT TypeSwitch : public Data { 371243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen public: 371343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen static Local<TypeSwitch> New(Handle<FunctionTemplate> type); 371443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen static Local<TypeSwitch> New(int argc, Handle<FunctionTemplate> types[]); 371543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen int match(Handle<Value> value); 371643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen private: 371743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen TypeSwitch(); 371843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen}; 371943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 372043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 3721fb144a0716afe7ab8bf245f2391a9e53b3db3c89fschneider@chromium.org// --- Extensions --- 372243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 3723594006017e46d82ed7146611dc12c20e3c509c7ddanno@chromium.orgclass V8_EXPORT ExternalAsciiStringResourceImpl 3724c3b670ff19220959730d7886892bc4beb95d2ebaerik.corry@gmail.com : public String::ExternalAsciiStringResource { 3725c3b670ff19220959730d7886892bc4beb95d2ebaerik.corry@gmail.com public: 3726c3b670ff19220959730d7886892bc4beb95d2ebaerik.corry@gmail.com ExternalAsciiStringResourceImpl() : data_(0), length_(0) {} 3727c3b670ff19220959730d7886892bc4beb95d2ebaerik.corry@gmail.com ExternalAsciiStringResourceImpl(const char* data, size_t length) 3728c3b670ff19220959730d7886892bc4beb95d2ebaerik.corry@gmail.com : data_(data), length_(length) {} 3729c3b670ff19220959730d7886892bc4beb95d2ebaerik.corry@gmail.com const char* data() const { return data_; } 3730c3b670ff19220959730d7886892bc4beb95d2ebaerik.corry@gmail.com size_t length() const { return length_; } 3731c3b670ff19220959730d7886892bc4beb95d2ebaerik.corry@gmail.com 3732c3b670ff19220959730d7886892bc4beb95d2ebaerik.corry@gmail.com private: 3733c3b670ff19220959730d7886892bc4beb95d2ebaerik.corry@gmail.com const char* data_; 3734c3b670ff19220959730d7886892bc4beb95d2ebaerik.corry@gmail.com size_t length_; 3735c3b670ff19220959730d7886892bc4beb95d2ebaerik.corry@gmail.com}; 373643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 373743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen/** 373843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * Ignore 373943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen */ 3740594006017e46d82ed7146611dc12c20e3c509c7ddanno@chromium.orgclass V8_EXPORT Extension { // NOLINT 374143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen public: 3742c3b670ff19220959730d7886892bc4beb95d2ebaerik.corry@gmail.com // Note that the strings passed into this constructor must live as long 3743c3b670ff19220959730d7886892bc4beb95d2ebaerik.corry@gmail.com // as the Extension itself. 374443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen Extension(const char* name, 3745355cfd19c23ac613f2738a40e356ea48297f7d5eyangguo@chromium.org const char* source = 0, 374643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen int dep_count = 0, 3747c3b670ff19220959730d7886892bc4beb95d2ebaerik.corry@gmail.com const char** deps = 0, 3748c3b670ff19220959730d7886892bc4beb95d2ebaerik.corry@gmail.com int source_length = -1); 374943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen virtual ~Extension() { } 375043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen virtual v8::Handle<v8::FunctionTemplate> 375143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen GetNativeFunction(v8::Handle<v8::String> name) { 375243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen return v8::Handle<v8::FunctionTemplate>(); 375343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } 375443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 3755c3b670ff19220959730d7886892bc4beb95d2ebaerik.corry@gmail.com const char* name() const { return name_; } 3756c3b670ff19220959730d7886892bc4beb95d2ebaerik.corry@gmail.com size_t source_length() const { return source_length_; } 3757c3b670ff19220959730d7886892bc4beb95d2ebaerik.corry@gmail.com const String::ExternalAsciiStringResource* source() const { 3758c3b670ff19220959730d7886892bc4beb95d2ebaerik.corry@gmail.com return &source_; } 375943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen int dependency_count() { return dep_count_; } 376043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen const char** dependencies() { return deps_; } 376143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen void set_auto_enable(bool value) { auto_enable_ = value; } 376243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen bool auto_enable() { return auto_enable_; } 376343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 376443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen private: 376543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen const char* name_; 3766c3b670ff19220959730d7886892bc4beb95d2ebaerik.corry@gmail.com size_t source_length_; // expected to initialize before source_ 3767c3b670ff19220959730d7886892bc4beb95d2ebaerik.corry@gmail.com ExternalAsciiStringResourceImpl source_; 376843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen int dep_count_; 376943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen const char** deps_; 377043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen bool auto_enable_; 377141044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org 377241044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org // Disallow copying and assigning. 377341044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org Extension(const Extension&); 377441044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org void operator=(const Extension&); 377543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen}; 377643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 377743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 3778594006017e46d82ed7146611dc12c20e3c509c7ddanno@chromium.orgvoid V8_EXPORT RegisterExtension(Extension* extension); 377943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 378043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 378143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen/** 378243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * Ignore 378343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen */ 3784594006017e46d82ed7146611dc12c20e3c509c7ddanno@chromium.orgclass V8_EXPORT DeclareExtension { 378543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen public: 378632280cf2786219b2d9a668f7f00778fb59ac40b3mstarzinger@chromium.org V8_INLINE(DeclareExtension(Extension* extension)) { 378743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen RegisterExtension(extension); 378843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } 378943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen}; 379043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 379143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 3792fb144a0716afe7ab8bf245f2391a9e53b3db3c89fschneider@chromium.org// --- Statics --- 379343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 379443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 3795594006017e46d82ed7146611dc12c20e3c509c7ddanno@chromium.orgHandle<Primitive> V8_EXPORT Undefined(); 3796594006017e46d82ed7146611dc12c20e3c509c7ddanno@chromium.orgHandle<Primitive> V8_EXPORT Null(); 3797594006017e46d82ed7146611dc12c20e3c509c7ddanno@chromium.orgHandle<Boolean> V8_EXPORT True(); 3798594006017e46d82ed7146611dc12c20e3c509c7ddanno@chromium.orgHandle<Boolean> V8_EXPORT False(); 379943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 380032280cf2786219b2d9a668f7f00778fb59ac40b3mstarzinger@chromium.orgV8_INLINE(Handle<Primitive> Undefined(Isolate* isolate)); 380132280cf2786219b2d9a668f7f00778fb59ac40b3mstarzinger@chromium.orgV8_INLINE(Handle<Primitive> Null(Isolate* isolate)); 380232280cf2786219b2d9a668f7f00778fb59ac40b3mstarzinger@chromium.orgV8_INLINE(Handle<Boolean> True(Isolate* isolate)); 380332280cf2786219b2d9a668f7f00778fb59ac40b3mstarzinger@chromium.orgV8_INLINE(Handle<Boolean> False(Isolate* isolate)); 3804efdb9d70bddd496ceb6a281dadcc065efbce37a1yangguo@chromium.org 380543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 380643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen/** 3807c514574143c1bf74d4fb6e7dccb175fe9ff2f5d3sgjesse@chromium.org * A set of constraints that specifies the limits of the runtime's memory use. 3808c514574143c1bf74d4fb6e7dccb175fe9ff2f5d3sgjesse@chromium.org * You must set the heap size before initializing the VM - the size cannot be 3809c514574143c1bf74d4fb6e7dccb175fe9ff2f5d3sgjesse@chromium.org * adjusted after the VM is initialized. 3810c514574143c1bf74d4fb6e7dccb175fe9ff2f5d3sgjesse@chromium.org * 3811c514574143c1bf74d4fb6e7dccb175fe9ff2f5d3sgjesse@chromium.org * If you are using threads then you should hold the V8::Locker lock while 3812c514574143c1bf74d4fb6e7dccb175fe9ff2f5d3sgjesse@chromium.org * setting the stack limit and you must set a non-default stack limit separately 3813c514574143c1bf74d4fb6e7dccb175fe9ff2f5d3sgjesse@chromium.org * for each thread. 381443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen */ 3815594006017e46d82ed7146611dc12c20e3c509c7ddanno@chromium.orgclass V8_EXPORT ResourceConstraints { 381643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen public: 381743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen ResourceConstraints(); 38185a8ca6c70c6fc9716f18f6223c98d1fef5752cf6kasperl@chromium.org int max_young_space_size() const { return max_young_space_size_; } 381943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen void set_max_young_space_size(int value) { max_young_space_size_ = value; } 38205a8ca6c70c6fc9716f18f6223c98d1fef5752cf6kasperl@chromium.org int max_old_space_size() const { return max_old_space_size_; } 382143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen void set_max_old_space_size(int value) { max_old_space_size_ = value; } 382201fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org int max_executable_size() { return max_executable_size_; } 382301fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org void set_max_executable_size(int value) { max_executable_size_ = value; } 38245a8ca6c70c6fc9716f18f6223c98d1fef5752cf6kasperl@chromium.org uint32_t* stack_limit() const { return stack_limit_; } 3825c514574143c1bf74d4fb6e7dccb175fe9ff2f5d3sgjesse@chromium.org // Sets an address beyond which the VM's stack may not grow. 382643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen void set_stack_limit(uint32_t* value) { stack_limit_ = value; } 382743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen private: 382843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen int max_young_space_size_; 382943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen int max_old_space_size_; 383001fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org int max_executable_size_; 383143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen uint32_t* stack_limit_; 383243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen}; 383343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 383443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 3835594006017e46d82ed7146611dc12c20e3c509c7ddanno@chromium.orgbool V8_EXPORT SetResourceConstraints(ResourceConstraints* constraints); 383643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 383743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 3838fb144a0716afe7ab8bf245f2391a9e53b3db3c89fschneider@chromium.org// --- Exceptions --- 383943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 384043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 384143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansentypedef void (*FatalErrorCallback)(const char* location, const char* message); 384243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 384343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 384489e18f5599cb4cd462cb1ed324addd7388fb4d60rossberg@chromium.orgtypedef void (*MessageCallback)(Handle<Message> message, Handle<Value> error); 384543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 384643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 384743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen/** 3848727e995b7bba3c57fb1e5c156d386ca11894f781v * Schedules an exception to be thrown when returning to JavaScript. When an 3849727e995b7bba3c57fb1e5c156d386ca11894f781v * exception has been scheduled it is illegal to invoke any JavaScript 385043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * operation; the caller must return immediately and only after the exception 3851727e995b7bba3c57fb1e5c156d386ca11894f781v * has been handled does it become legal to invoke JavaScript operations. 385243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen */ 3853594006017e46d82ed7146611dc12c20e3c509c7ddanno@chromium.orgHandle<Value> V8_EXPORT ThrowException(Handle<Value> exception); 385443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 385543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen/** 385643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * Create new error objects by calling the corresponding error object 385743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * constructor with the message. 385843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen */ 3859594006017e46d82ed7146611dc12c20e3c509c7ddanno@chromium.orgclass V8_EXPORT Exception { 386043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen public: 386143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen static Local<Value> RangeError(Handle<String> message); 386243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen static Local<Value> ReferenceError(Handle<String> message); 386343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen static Local<Value> SyntaxError(Handle<String> message); 386443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen static Local<Value> TypeError(Handle<String> message); 386543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen static Local<Value> Error(Handle<String> message); 386643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen}; 386743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 386843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 3869fb144a0716afe7ab8bf245f2391a9e53b3db3c89fschneider@chromium.org// --- Counters Callbacks --- 387043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 3871a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.orgtypedef int* (*CounterLookupCallback)(const char* name); 387243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 3873bb29dc9819bb6f495ab6eddd2543965eb97a8e43ager@chromium.orgtypedef void* (*CreateHistogramCallback)(const char* name, 3874bb29dc9819bb6f495ab6eddd2543965eb97a8e43ager@chromium.org int min, 3875bb29dc9819bb6f495ab6eddd2543965eb97a8e43ager@chromium.org int max, 3876bb29dc9819bb6f495ab6eddd2543965eb97a8e43ager@chromium.org size_t buckets); 3877bb29dc9819bb6f495ab6eddd2543965eb97a8e43ager@chromium.org 3878bb29dc9819bb6f495ab6eddd2543965eb97a8e43ager@chromium.orgtypedef void (*AddHistogramSampleCallback)(void* histogram, int sample); 3879bb29dc9819bb6f495ab6eddd2543965eb97a8e43ager@chromium.org 3880fb144a0716afe7ab8bf245f2391a9e53b3db3c89fschneider@chromium.org// --- Memory Allocation Callback --- 38813cdd9e13bac71e7c5b63da6962f8d30f6622db14kmillikin@chromium.org enum ObjectSpace { 38823cdd9e13bac71e7c5b63da6962f8d30f6622db14kmillikin@chromium.org kObjectSpaceNewSpace = 1 << 0, 38833cdd9e13bac71e7c5b63da6962f8d30f6622db14kmillikin@chromium.org kObjectSpaceOldPointerSpace = 1 << 1, 38843cdd9e13bac71e7c5b63da6962f8d30f6622db14kmillikin@chromium.org kObjectSpaceOldDataSpace = 1 << 2, 38853cdd9e13bac71e7c5b63da6962f8d30f6622db14kmillikin@chromium.org kObjectSpaceCodeSpace = 1 << 3, 38863cdd9e13bac71e7c5b63da6962f8d30f6622db14kmillikin@chromium.org kObjectSpaceMapSpace = 1 << 4, 38873cdd9e13bac71e7c5b63da6962f8d30f6622db14kmillikin@chromium.org kObjectSpaceLoSpace = 1 << 5, 38883cdd9e13bac71e7c5b63da6962f8d30f6622db14kmillikin@chromium.org 38893cdd9e13bac71e7c5b63da6962f8d30f6622db14kmillikin@chromium.org kObjectSpaceAll = kObjectSpaceNewSpace | kObjectSpaceOldPointerSpace | 38903cdd9e13bac71e7c5b63da6962f8d30f6622db14kmillikin@chromium.org kObjectSpaceOldDataSpace | kObjectSpaceCodeSpace | kObjectSpaceMapSpace | 38913cdd9e13bac71e7c5b63da6962f8d30f6622db14kmillikin@chromium.org kObjectSpaceLoSpace 38923cdd9e13bac71e7c5b63da6962f8d30f6622db14kmillikin@chromium.org }; 38933cdd9e13bac71e7c5b63da6962f8d30f6622db14kmillikin@chromium.org 38943cdd9e13bac71e7c5b63da6962f8d30f6622db14kmillikin@chromium.org enum AllocationAction { 38953cdd9e13bac71e7c5b63da6962f8d30f6622db14kmillikin@chromium.org kAllocationActionAllocate = 1 << 0, 38963cdd9e13bac71e7c5b63da6962f8d30f6622db14kmillikin@chromium.org kAllocationActionFree = 1 << 1, 38973cdd9e13bac71e7c5b63da6962f8d30f6622db14kmillikin@chromium.org kAllocationActionAll = kAllocationActionAllocate | kAllocationActionFree 38983cdd9e13bac71e7c5b63da6962f8d30f6622db14kmillikin@chromium.org }; 38993cdd9e13bac71e7c5b63da6962f8d30f6622db14kmillikin@chromium.org 39003cdd9e13bac71e7c5b63da6962f8d30f6622db14kmillikin@chromium.orgtypedef void (*MemoryAllocationCallback)(ObjectSpace space, 39013cdd9e13bac71e7c5b63da6962f8d30f6622db14kmillikin@chromium.org AllocationAction action, 39023cdd9e13bac71e7c5b63da6962f8d30f6622db14kmillikin@chromium.org int size); 39033cdd9e13bac71e7c5b63da6962f8d30f6622db14kmillikin@chromium.org 3904fab1498f2f42726c7de46c3ed560d56dd072a8b3rossberg@chromium.org// --- Leave Script Callback --- 3905fab1498f2f42726c7de46c3ed560d56dd072a8b3rossberg@chromium.orgtypedef void (*CallCompletedCallback)(); 3906fab1498f2f42726c7de46c3ed560d56dd072a8b3rossberg@chromium.org 3907fb144a0716afe7ab8bf245f2391a9e53b3db3c89fschneider@chromium.org// --- Failed Access Check Callback --- 390843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansentypedef void (*FailedAccessCheckCallback)(Local<Object> target, 390943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen AccessType type, 391043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen Local<Value> data); 391143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 3912fb144a0716afe7ab8bf245f2391a9e53b3db3c89fschneider@chromium.org// --- AllowCodeGenerationFromStrings callbacks --- 3913fb144a0716afe7ab8bf245f2391a9e53b3db3c89fschneider@chromium.org 3914fb144a0716afe7ab8bf245f2391a9e53b3db3c89fschneider@chromium.org/** 3915fb144a0716afe7ab8bf245f2391a9e53b3db3c89fschneider@chromium.org * Callback to check if code generation from strings is allowed. See 3916fb144a0716afe7ab8bf245f2391a9e53b3db3c89fschneider@chromium.org * Context::AllowCodeGenerationFromStrings. 3917fb144a0716afe7ab8bf245f2391a9e53b3db3c89fschneider@chromium.org */ 3918fb144a0716afe7ab8bf245f2391a9e53b3db3c89fschneider@chromium.orgtypedef bool (*AllowCodeGenerationFromStringsCallback)(Local<Context> context); 3919fb144a0716afe7ab8bf245f2391a9e53b3db3c89fschneider@chromium.org 3920fb144a0716afe7ab8bf245f2391a9e53b3db3c89fschneider@chromium.org// --- Garbage Collection Callbacks --- 392143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 392243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen/** 39235d8f0e6e7b477f422e3064bdf0dd5f2a23f75544kmillikin@chromium.org * Applications can register callback functions which will be called 39245d8f0e6e7b477f422e3064bdf0dd5f2a23f75544kmillikin@chromium.org * before and after a garbage collection. Allocations are not 39255d8f0e6e7b477f422e3064bdf0dd5f2a23f75544kmillikin@chromium.org * allowed in the callback functions, you therefore cannot manipulate 3926727e995b7bba3c57fb1e5c156d386ca11894f781v * objects (set or delete properties for example) since it is possible 3927727e995b7bba3c57fb1e5c156d386ca11894f781v * such operations will result in the allocation of objects. 392843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen */ 39295d8f0e6e7b477f422e3064bdf0dd5f2a23f75544kmillikin@chromium.orgenum GCType { 39305d8f0e6e7b477f422e3064bdf0dd5f2a23f75544kmillikin@chromium.org kGCTypeScavenge = 1 << 0, 39315d8f0e6e7b477f422e3064bdf0dd5f2a23f75544kmillikin@chromium.org kGCTypeMarkSweepCompact = 1 << 1, 39325d8f0e6e7b477f422e3064bdf0dd5f2a23f75544kmillikin@chromium.org kGCTypeAll = kGCTypeScavenge | kGCTypeMarkSweepCompact 39335d8f0e6e7b477f422e3064bdf0dd5f2a23f75544kmillikin@chromium.org}; 39345d8f0e6e7b477f422e3064bdf0dd5f2a23f75544kmillikin@chromium.org 39355d8f0e6e7b477f422e3064bdf0dd5f2a23f75544kmillikin@chromium.orgenum GCCallbackFlags { 39365d8f0e6e7b477f422e3064bdf0dd5f2a23f75544kmillikin@chromium.org kNoGCCallbackFlags = 0, 3937ca29dd85fa02449d17188f5a6ff9a7cdf2ad9680danno@chromium.org kGCCallbackFlagCompacted = 1 << 0, 3938ca29dd85fa02449d17188f5a6ff9a7cdf2ad9680danno@chromium.org kGCCallbackFlagConstructRetainedObjectInfos = 1 << 1 39395d8f0e6e7b477f422e3064bdf0dd5f2a23f75544kmillikin@chromium.org}; 39405d8f0e6e7b477f422e3064bdf0dd5f2a23f75544kmillikin@chromium.org 39415d8f0e6e7b477f422e3064bdf0dd5f2a23f75544kmillikin@chromium.orgtypedef void (*GCPrologueCallback)(GCType type, GCCallbackFlags flags); 39425d8f0e6e7b477f422e3064bdf0dd5f2a23f75544kmillikin@chromium.orgtypedef void (*GCEpilogueCallback)(GCType type, GCCallbackFlags flags); 39435d8f0e6e7b477f422e3064bdf0dd5f2a23f75544kmillikin@chromium.org 394443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansentypedef void (*GCCallback)(); 394543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 394643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 394743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen/** 39483811b436bf328d2ace6fe79ce99aeda71f9f06d3ager@chromium.org * Collection of V8 heap information. 39493811b436bf328d2ace6fe79ce99aeda71f9f06d3ager@chromium.org * 39503811b436bf328d2ace6fe79ce99aeda71f9f06d3ager@chromium.org * Instances of this class can be passed to v8::V8::HeapStatistics to 39513811b436bf328d2ace6fe79ce99aeda71f9f06d3ager@chromium.org * get heap statistics from V8. 39523811b436bf328d2ace6fe79ce99aeda71f9f06d3ager@chromium.org */ 3953594006017e46d82ed7146611dc12c20e3c509c7ddanno@chromium.orgclass V8_EXPORT HeapStatistics { 39543811b436bf328d2ace6fe79ce99aeda71f9f06d3ager@chromium.org public: 39553811b436bf328d2ace6fe79ce99aeda71f9f06d3ager@chromium.org HeapStatistics(); 39563811b436bf328d2ace6fe79ce99aeda71f9f06d3ager@chromium.org size_t total_heap_size() { return total_heap_size_; } 395701fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org size_t total_heap_size_executable() { return total_heap_size_executable_; } 395872204d59e7fb1b8a0e9012e1fac5ef160351e8e4danno@chromium.org size_t total_physical_size() { return total_physical_size_; } 39593811b436bf328d2ace6fe79ce99aeda71f9f06d3ager@chromium.org size_t used_heap_size() { return used_heap_size_; } 3960c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org size_t heap_size_limit() { return heap_size_limit_; } 39613811b436bf328d2ace6fe79ce99aeda71f9f06d3ager@chromium.org 39623811b436bf328d2ace6fe79ce99aeda71f9f06d3ager@chromium.org private: 39633811b436bf328d2ace6fe79ce99aeda71f9f06d3ager@chromium.org size_t total_heap_size_; 396401fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org size_t total_heap_size_executable_; 396572204d59e7fb1b8a0e9012e1fac5ef160351e8e4danno@chromium.org size_t total_physical_size_; 39663811b436bf328d2ace6fe79ce99aeda71f9f06d3ager@chromium.org size_t used_heap_size_; 3967c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org size_t heap_size_limit_; 39683811b436bf328d2ace6fe79ce99aeda71f9f06d3ager@chromium.org 39693811b436bf328d2ace6fe79ce99aeda71f9f06d3ager@chromium.org friend class V8; 39707c3372bc426136cb79479c1b59d1770f5528882ahpayer@chromium.org friend class Isolate; 39713811b436bf328d2ace6fe79ce99aeda71f9f06d3ager@chromium.org}; 39723811b436bf328d2ace6fe79ce99aeda71f9f06d3ager@chromium.org 39733811b436bf328d2ace6fe79ce99aeda71f9f06d3ager@chromium.org 3974b08986cb66c3f6687247cb6da186c1e73057e399whesse@chromium.orgclass RetainedObjectInfo; 3975b08986cb66c3f6687247cb6da186c1e73057e399whesse@chromium.org 39763811b436bf328d2ace6fe79ce99aeda71f9f06d3ager@chromium.org/** 3977ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org * Isolate represents an isolated instance of the V8 engine. V8 3978ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org * isolates have completely separate states. Objects from one isolate 3979ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org * must not be used in other isolates. When V8 is initialized a 3980ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org * default isolate is implicitly created and entered. The embedder 3981ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org * can create additional isolates and use them in parallel in multiple 3982ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org * threads. An isolate can be entered by at most one thread at any 3983659ceec4628056d3c6e7076c850fba1c412cbb8ayangguo@chromium.org * given time. The Locker/Unlocker API must be used to synchronize. 3984ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org */ 3985594006017e46d82ed7146611dc12c20e3c509c7ddanno@chromium.orgclass V8_EXPORT Isolate { 3986ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org public: 3987ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org /** 3988ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org * Stack-allocated class which sets the isolate for all operations 3989ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org * executed within a local scope. 3990ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org */ 3991594006017e46d82ed7146611dc12c20e3c509c7ddanno@chromium.org class V8_EXPORT Scope { 3992ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org public: 3993ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org explicit Scope(Isolate* isolate) : isolate_(isolate) { 3994ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org isolate->Enter(); 3995ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org } 3996ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org 3997ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org ~Scope() { isolate_->Exit(); } 3998ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org 3999ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org private: 4000ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org Isolate* const isolate_; 4001ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org 4002ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org // Prevent copying of Scope objects. 4003ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org Scope(const Scope&); 4004ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org Scope& operator=(const Scope&); 4005ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org }; 4006ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org 4007ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org /** 4008ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org * Creates a new isolate. Does not change the currently entered 4009ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org * isolate. 4010ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org * 4011ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org * When an isolate is no longer used its resources should be freed 4012ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org * by calling Dispose(). Using the delete operator is not allowed. 4013ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org */ 4014ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org static Isolate* New(); 4015ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org 4016ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org /** 4017ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org * Returns the entered isolate for the current thread or NULL in 4018ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org * case there is no current isolate. 4019ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org */ 4020ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org static Isolate* GetCurrent(); 4021ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org 4022ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org /** 4023ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org * Methods below this point require holding a lock (using Locker) in 4024ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org * a multi-threaded environment. 4025ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org */ 4026ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org 4027ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org /** 4028ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org * Sets this isolate as the entered one for the current thread. 4029ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org * Saves the previously entered one (if any), so that it can be 4030ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org * restored when exiting. Re-entering an isolate is allowed. 4031ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org */ 4032ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org void Enter(); 4033ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org 4034ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org /** 4035ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org * Exits this isolate by restoring the previously entered one in the 4036ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org * current thread. The isolate may still stay the same, if it was 4037ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org * entered more than once. 4038ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org * 4039ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org * Requires: this == Isolate::GetCurrent(). 4040ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org */ 4041ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org void Exit(); 4042ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org 4043ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org /** 4044ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org * Disposes the isolate. The isolate must not be entered by any 4045ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org * thread to be disposable. 4046ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org */ 4047ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org void Dispose(); 4048ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org 4049ea91cc579ade536e3a08498a8157921dd4f533d1ager@chromium.org /** 4050ea91cc579ade536e3a08498a8157921dd4f533d1ager@chromium.org * Associate embedder-specific data with the isolate 4051ea91cc579ade536e3a08498a8157921dd4f533d1ager@chromium.org */ 405232280cf2786219b2d9a668f7f00778fb59ac40b3mstarzinger@chromium.org V8_INLINE(void SetData(void* data)); 4053ea91cc579ade536e3a08498a8157921dd4f533d1ager@chromium.org 4054ea91cc579ade536e3a08498a8157921dd4f533d1ager@chromium.org /** 4055efdb9d70bddd496ceb6a281dadcc065efbce37a1yangguo@chromium.org * Retrieve embedder-specific data from the isolate. 4056ea91cc579ade536e3a08498a8157921dd4f533d1ager@chromium.org * Returns NULL if SetData has never been called. 4057ea91cc579ade536e3a08498a8157921dd4f533d1ager@chromium.org */ 405832280cf2786219b2d9a668f7f00778fb59ac40b3mstarzinger@chromium.org V8_INLINE(void* GetData()); 4059ea91cc579ade536e3a08498a8157921dd4f533d1ager@chromium.org 40607c3372bc426136cb79479c1b59d1770f5528882ahpayer@chromium.org /** 40617c3372bc426136cb79479c1b59d1770f5528882ahpayer@chromium.org * Get statistics about the heap memory usage. 40627c3372bc426136cb79479c1b59d1770f5528882ahpayer@chromium.org */ 40637c3372bc426136cb79479c1b59d1770f5528882ahpayer@chromium.org void GetHeapStatistics(HeapStatistics* heap_statistics); 40647c3372bc426136cb79479c1b59d1770f5528882ahpayer@chromium.org 40652bda543d75374afd8d7e98f56ca99a57ae1b7bd1svenpanne@chromium.org /** 40662bda543d75374afd8d7e98f56ca99a57ae1b7bd1svenpanne@chromium.org * Adjusts the amount of registered external memory. Used to give V8 an 40672bda543d75374afd8d7e98f56ca99a57ae1b7bd1svenpanne@chromium.org * indication of the amount of externally allocated memory that is kept alive 40682bda543d75374afd8d7e98f56ca99a57ae1b7bd1svenpanne@chromium.org * by JavaScript objects. V8 uses this to decide when to perform global 40692bda543d75374afd8d7e98f56ca99a57ae1b7bd1svenpanne@chromium.org * garbage collections. Registering externally allocated memory will trigger 40702bda543d75374afd8d7e98f56ca99a57ae1b7bd1svenpanne@chromium.org * global garbage collections more often than it would otherwise in an attempt 40712bda543d75374afd8d7e98f56ca99a57ae1b7bd1svenpanne@chromium.org * to garbage collect the JavaScript objects that keep the externally 40722bda543d75374afd8d7e98f56ca99a57ae1b7bd1svenpanne@chromium.org * allocated memory alive. 40732bda543d75374afd8d7e98f56ca99a57ae1b7bd1svenpanne@chromium.org * 40742bda543d75374afd8d7e98f56ca99a57ae1b7bd1svenpanne@chromium.org * \param change_in_bytes the change in externally allocated memory that is 40752bda543d75374afd8d7e98f56ca99a57ae1b7bd1svenpanne@chromium.org * kept alive by JavaScript objects. 40762bda543d75374afd8d7e98f56ca99a57ae1b7bd1svenpanne@chromium.org * \returns the adjusted value. 40772bda543d75374afd8d7e98f56ca99a57ae1b7bd1svenpanne@chromium.org */ 40782bda543d75374afd8d7e98f56ca99a57ae1b7bd1svenpanne@chromium.org intptr_t AdjustAmountOfExternalAllocatedMemory(intptr_t change_in_bytes); 40792bda543d75374afd8d7e98f56ca99a57ae1b7bd1svenpanne@chromium.org 4080f705b5034dc5bc422ac1019b591469a7d0534772mstarzinger@chromium.org /** 4081f705b5034dc5bc422ac1019b591469a7d0534772mstarzinger@chromium.org * Returns heap profiler for this isolate. Will return NULL until the isolate 4082f705b5034dc5bc422ac1019b591469a7d0534772mstarzinger@chromium.org * is initialized. 4083f705b5034dc5bc422ac1019b591469a7d0534772mstarzinger@chromium.org */ 4084f705b5034dc5bc422ac1019b591469a7d0534772mstarzinger@chromium.org HeapProfiler* GetHeapProfiler(); 4085f705b5034dc5bc422ac1019b591469a7d0534772mstarzinger@chromium.org 4086f705b5034dc5bc422ac1019b591469a7d0534772mstarzinger@chromium.org /** 408793a47f4837f2137c8d8349250fd8e91da3108126jkummerow@chromium.org * Returns CPU profiler for this isolate. Will return NULL unless the isolate 408893a47f4837f2137c8d8349250fd8e91da3108126jkummerow@chromium.org * is initialized. It is the embedder's responsibility to stop all CPU 408993a47f4837f2137c8d8349250fd8e91da3108126jkummerow@chromium.org * profiling activities if it has started any. 4090f705b5034dc5bc422ac1019b591469a7d0534772mstarzinger@chromium.org */ 4091f705b5034dc5bc422ac1019b591469a7d0534772mstarzinger@chromium.org CpuProfiler* GetCpuProfiler(); 4092f705b5034dc5bc422ac1019b591469a7d0534772mstarzinger@chromium.org 409340ce96b9446ccab86d0d80ee90bb86a9cca33aa7mvstanton@chromium.org /** Returns the context that is on the top of the stack. */ 409440ce96b9446ccab86d0d80ee90bb86a9cca33aa7mvstanton@chromium.org Local<Context> GetCurrentContext(); 409540ce96b9446ccab86d0d80ee90bb86a9cca33aa7mvstanton@chromium.org 4096ca29dd85fa02449d17188f5a6ff9a7cdf2ad9680danno@chromium.org /** 4097ca29dd85fa02449d17188f5a6ff9a7cdf2ad9680danno@chromium.org * Allows the host application to group objects together. If one 4098ca29dd85fa02449d17188f5a6ff9a7cdf2ad9680danno@chromium.org * object in the group is alive, all objects in the group are alive. 4099ca29dd85fa02449d17188f5a6ff9a7cdf2ad9680danno@chromium.org * After each garbage collection, object groups are removed. It is 4100ca29dd85fa02449d17188f5a6ff9a7cdf2ad9680danno@chromium.org * intended to be used in the before-garbage-collection callback 4101ca29dd85fa02449d17188f5a6ff9a7cdf2ad9680danno@chromium.org * function, for instance to simulate DOM tree connections among JS 4102ca29dd85fa02449d17188f5a6ff9a7cdf2ad9680danno@chromium.org * wrapper objects. Object groups for all dependent handles need to 4103ca29dd85fa02449d17188f5a6ff9a7cdf2ad9680danno@chromium.org * be provided for kGCTypeMarkSweepCompact collections, for all other 4104ca29dd85fa02449d17188f5a6ff9a7cdf2ad9680danno@chromium.org * garbage collection types it is sufficient to provide object groups 4105ca29dd85fa02449d17188f5a6ff9a7cdf2ad9680danno@chromium.org * for partially dependent handles only. 4106ca29dd85fa02449d17188f5a6ff9a7cdf2ad9680danno@chromium.org */ 4107ca29dd85fa02449d17188f5a6ff9a7cdf2ad9680danno@chromium.org void SetObjectGroupId(const Persistent<Value>& object, 4108ca29dd85fa02449d17188f5a6ff9a7cdf2ad9680danno@chromium.org UniqueId id); 4109ca29dd85fa02449d17188f5a6ff9a7cdf2ad9680danno@chromium.org 4110ca29dd85fa02449d17188f5a6ff9a7cdf2ad9680danno@chromium.org /** 4111ca29dd85fa02449d17188f5a6ff9a7cdf2ad9680danno@chromium.org * Allows the host application to declare implicit references from an object 4112ca29dd85fa02449d17188f5a6ff9a7cdf2ad9680danno@chromium.org * group to an object. If the objects of the object group are alive, the child 4113ca29dd85fa02449d17188f5a6ff9a7cdf2ad9680danno@chromium.org * object is alive too. After each garbage collection, all implicit references 4114ca29dd85fa02449d17188f5a6ff9a7cdf2ad9680danno@chromium.org * are removed. It is intended to be used in the before-garbage-collection 4115ca29dd85fa02449d17188f5a6ff9a7cdf2ad9680danno@chromium.org * callback function. 4116ca29dd85fa02449d17188f5a6ff9a7cdf2ad9680danno@chromium.org */ 4117ca29dd85fa02449d17188f5a6ff9a7cdf2ad9680danno@chromium.org void SetReferenceFromGroup(UniqueId id, 4118ca29dd85fa02449d17188f5a6ff9a7cdf2ad9680danno@chromium.org const Persistent<Value>& child); 4119ca29dd85fa02449d17188f5a6ff9a7cdf2ad9680danno@chromium.org 4120ca29dd85fa02449d17188f5a6ff9a7cdf2ad9680danno@chromium.org /** 4121ca29dd85fa02449d17188f5a6ff9a7cdf2ad9680danno@chromium.org * Allows the host application to declare implicit references from an object 4122ca29dd85fa02449d17188f5a6ff9a7cdf2ad9680danno@chromium.org * to another object. If the parent object is alive, the child object is alive 4123ca29dd85fa02449d17188f5a6ff9a7cdf2ad9680danno@chromium.org * too. After each garbage collection, all implicit references are removed. It 4124ca29dd85fa02449d17188f5a6ff9a7cdf2ad9680danno@chromium.org * is intended to be used in the before-garbage-collection callback function. 4125ca29dd85fa02449d17188f5a6ff9a7cdf2ad9680danno@chromium.org */ 4126ca29dd85fa02449d17188f5a6ff9a7cdf2ad9680danno@chromium.org void SetReference(const Persistent<Object>& parent, 4127ca29dd85fa02449d17188f5a6ff9a7cdf2ad9680danno@chromium.org const Persistent<Value>& child); 4128ca29dd85fa02449d17188f5a6ff9a7cdf2ad9680danno@chromium.org 4129ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org private: 4130ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org Isolate(); 4131ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org Isolate(const Isolate&); 4132ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org ~Isolate(); 4133ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org Isolate& operator=(const Isolate&); 4134ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org void* operator new(size_t size); 4135ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org void operator delete(void*, size_t); 4136ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org}; 4137ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org 4138ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org 4139594006017e46d82ed7146611dc12c20e3c509c7ddanno@chromium.orgclass V8_EXPORT StartupData { 41408e8294a88dc7d58f579aee0ba08c19fc8a616e2dsgjesse@chromium.org public: 41418e8294a88dc7d58f579aee0ba08c19fc8a616e2dsgjesse@chromium.org enum CompressionAlgorithm { 41428e8294a88dc7d58f579aee0ba08c19fc8a616e2dsgjesse@chromium.org kUncompressed, 41438e8294a88dc7d58f579aee0ba08c19fc8a616e2dsgjesse@chromium.org kBZip2 41448e8294a88dc7d58f579aee0ba08c19fc8a616e2dsgjesse@chromium.org }; 41458e8294a88dc7d58f579aee0ba08c19fc8a616e2dsgjesse@chromium.org 41468e8294a88dc7d58f579aee0ba08c19fc8a616e2dsgjesse@chromium.org const char* data; 41478e8294a88dc7d58f579aee0ba08c19fc8a616e2dsgjesse@chromium.org int compressed_size; 41488e8294a88dc7d58f579aee0ba08c19fc8a616e2dsgjesse@chromium.org int raw_size; 41498e8294a88dc7d58f579aee0ba08c19fc8a616e2dsgjesse@chromium.org}; 41508e8294a88dc7d58f579aee0ba08c19fc8a616e2dsgjesse@chromium.org 4151e297f5973a8a9ff0d9945da3f1e2d8a6230c294djkummerow@chromium.org 4152e297f5973a8a9ff0d9945da3f1e2d8a6230c294djkummerow@chromium.org/** 4153e297f5973a8a9ff0d9945da3f1e2d8a6230c294djkummerow@chromium.org * A helper class for driving V8 startup data decompression. It is based on 4154e297f5973a8a9ff0d9945da3f1e2d8a6230c294djkummerow@chromium.org * "CompressedStartupData" API functions from the V8 class. It isn't mandatory 4155e297f5973a8a9ff0d9945da3f1e2d8a6230c294djkummerow@chromium.org * for an embedder to use this class, instead, API functions can be used 4156e297f5973a8a9ff0d9945da3f1e2d8a6230c294djkummerow@chromium.org * directly. 4157e297f5973a8a9ff0d9945da3f1e2d8a6230c294djkummerow@chromium.org * 4158e297f5973a8a9ff0d9945da3f1e2d8a6230c294djkummerow@chromium.org * For an example of the class usage, see the "shell.cc" sample application. 4159e297f5973a8a9ff0d9945da3f1e2d8a6230c294djkummerow@chromium.org */ 4160594006017e46d82ed7146611dc12c20e3c509c7ddanno@chromium.orgclass V8_EXPORT StartupDataDecompressor { // NOLINT 4161e297f5973a8a9ff0d9945da3f1e2d8a6230c294djkummerow@chromium.org public: 4162e297f5973a8a9ff0d9945da3f1e2d8a6230c294djkummerow@chromium.org StartupDataDecompressor(); 4163e297f5973a8a9ff0d9945da3f1e2d8a6230c294djkummerow@chromium.org virtual ~StartupDataDecompressor(); 4164e297f5973a8a9ff0d9945da3f1e2d8a6230c294djkummerow@chromium.org int Decompress(); 4165e297f5973a8a9ff0d9945da3f1e2d8a6230c294djkummerow@chromium.org 4166e297f5973a8a9ff0d9945da3f1e2d8a6230c294djkummerow@chromium.org protected: 4167e297f5973a8a9ff0d9945da3f1e2d8a6230c294djkummerow@chromium.org virtual int DecompressData(char* raw_data, 4168e297f5973a8a9ff0d9945da3f1e2d8a6230c294djkummerow@chromium.org int* raw_data_size, 4169e297f5973a8a9ff0d9945da3f1e2d8a6230c294djkummerow@chromium.org const char* compressed_data, 4170e297f5973a8a9ff0d9945da3f1e2d8a6230c294djkummerow@chromium.org int compressed_data_size) = 0; 4171e297f5973a8a9ff0d9945da3f1e2d8a6230c294djkummerow@chromium.org 4172e297f5973a8a9ff0d9945da3f1e2d8a6230c294djkummerow@chromium.org private: 4173e297f5973a8a9ff0d9945da3f1e2d8a6230c294djkummerow@chromium.org char** raw_data; 4174e297f5973a8a9ff0d9945da3f1e2d8a6230c294djkummerow@chromium.org}; 4175e297f5973a8a9ff0d9945da3f1e2d8a6230c294djkummerow@chromium.org 417684bcc559ac20fb04f806e97d28a314b20b58fd60svenpanne@chromium.org 417784bcc559ac20fb04f806e97d28a314b20b58fd60svenpanne@chromium.org/** 417884bcc559ac20fb04f806e97d28a314b20b58fd60svenpanne@chromium.org * EntropySource is used as a callback function when v8 needs a source 417984bcc559ac20fb04f806e97d28a314b20b58fd60svenpanne@chromium.org * of entropy. 418084bcc559ac20fb04f806e97d28a314b20b58fd60svenpanne@chromium.org */ 418184bcc559ac20fb04f806e97d28a314b20b58fd60svenpanne@chromium.orgtypedef bool (*EntropySource)(unsigned char* buffer, size_t length); 418284bcc559ac20fb04f806e97d28a314b20b58fd60svenpanne@chromium.org 4183f2038fb01417bcf7698b87a5dfaa4a861539618aerik.corry@gmail.com 4184f2038fb01417bcf7698b87a5dfaa4a861539618aerik.corry@gmail.com/** 4185967e270a034432457500dbf950d2c4951a929e52ulan@chromium.org * ReturnAddressLocationResolver is used as a callback function when v8 is 4186967e270a034432457500dbf950d2c4951a929e52ulan@chromium.org * resolving the location of a return address on the stack. Profilers that 4187967e270a034432457500dbf950d2c4951a929e52ulan@chromium.org * change the return address on the stack can use this to resolve the stack 4188967e270a034432457500dbf950d2c4951a929e52ulan@chromium.org * location to whereever the profiler stashed the original return address. 4189753aee4dcf0868130789b5af7c1eeb6ab2ab24f9verwaest@chromium.org * 4190753aee4dcf0868130789b5af7c1eeb6ab2ab24f9verwaest@chromium.org * \param return_addr_location points to a location on stack where a machine 4191753aee4dcf0868130789b5af7c1eeb6ab2ab24f9verwaest@chromium.org * return address resides. 4192753aee4dcf0868130789b5af7c1eeb6ab2ab24f9verwaest@chromium.org * \returns either return_addr_location, or else a pointer to the profiler's 4193753aee4dcf0868130789b5af7c1eeb6ab2ab24f9verwaest@chromium.org * copy of the original return address. 4194753aee4dcf0868130789b5af7c1eeb6ab2ab24f9verwaest@chromium.org * 4195753aee4dcf0868130789b5af7c1eeb6ab2ab24f9verwaest@chromium.org * \note the resolver function must not cause garbage collection. 4196967e270a034432457500dbf950d2c4951a929e52ulan@chromium.org */ 4197967e270a034432457500dbf950d2c4951a929e52ulan@chromium.orgtypedef uintptr_t (*ReturnAddressLocationResolver)( 4198967e270a034432457500dbf950d2c4951a929e52ulan@chromium.org uintptr_t return_addr_location); 4199967e270a034432457500dbf950d2c4951a929e52ulan@chromium.org 4200967e270a034432457500dbf950d2c4951a929e52ulan@chromium.org 4201967e270a034432457500dbf950d2c4951a929e52ulan@chromium.org/** 4202753aee4dcf0868130789b5af7c1eeb6ab2ab24f9verwaest@chromium.org * FunctionEntryHook is the type of the profile entry hook called at entry to 4203753aee4dcf0868130789b5af7c1eeb6ab2ab24f9verwaest@chromium.org * any generated function when function-level profiling is enabled. 4204753aee4dcf0868130789b5af7c1eeb6ab2ab24f9verwaest@chromium.org * 4205753aee4dcf0868130789b5af7c1eeb6ab2ab24f9verwaest@chromium.org * \param function the address of the function that's being entered. 4206753aee4dcf0868130789b5af7c1eeb6ab2ab24f9verwaest@chromium.org * \param return_addr_location points to a location on stack where the machine 4207753aee4dcf0868130789b5af7c1eeb6ab2ab24f9verwaest@chromium.org * return address resides. This can be used to identify the caller of 4208753aee4dcf0868130789b5af7c1eeb6ab2ab24f9verwaest@chromium.org * \p function, and/or modified to divert execution when \p function exits. 4209753aee4dcf0868130789b5af7c1eeb6ab2ab24f9verwaest@chromium.org * 4210753aee4dcf0868130789b5af7c1eeb6ab2ab24f9verwaest@chromium.org * \note the entry hook must not cause garbage collection. 4211753aee4dcf0868130789b5af7c1eeb6ab2ab24f9verwaest@chromium.org */ 4212753aee4dcf0868130789b5af7c1eeb6ab2ab24f9verwaest@chromium.orgtypedef void (*FunctionEntryHook)(uintptr_t function, 4213753aee4dcf0868130789b5af7c1eeb6ab2ab24f9verwaest@chromium.org uintptr_t return_addr_location); 4214753aee4dcf0868130789b5af7c1eeb6ab2ab24f9verwaest@chromium.org 4215753aee4dcf0868130789b5af7c1eeb6ab2ab24f9verwaest@chromium.org 4216753aee4dcf0868130789b5af7c1eeb6ab2ab24f9verwaest@chromium.org/** 4217355cfd19c23ac613f2738a40e356ea48297f7d5eyangguo@chromium.org * A JIT code event is issued each time code is added, moved or removed. 4218355cfd19c23ac613f2738a40e356ea48297f7d5eyangguo@chromium.org * 4219355cfd19c23ac613f2738a40e356ea48297f7d5eyangguo@chromium.org * \note removal events are not currently issued. 4220355cfd19c23ac613f2738a40e356ea48297f7d5eyangguo@chromium.org */ 4221355cfd19c23ac613f2738a40e356ea48297f7d5eyangguo@chromium.orgstruct JitCodeEvent { 4222355cfd19c23ac613f2738a40e356ea48297f7d5eyangguo@chromium.org enum EventType { 4223355cfd19c23ac613f2738a40e356ea48297f7d5eyangguo@chromium.org CODE_ADDED, 4224355cfd19c23ac613f2738a40e356ea48297f7d5eyangguo@chromium.org CODE_MOVED, 4225c03a1924dcc113678c0ebe58aa7d3c855a657719yangguo@chromium.org CODE_REMOVED, 4226c03a1924dcc113678c0ebe58aa7d3c855a657719yangguo@chromium.org CODE_ADD_LINE_POS_INFO, 4227c03a1924dcc113678c0ebe58aa7d3c855a657719yangguo@chromium.org CODE_START_LINE_INFO_RECORDING, 4228c03a1924dcc113678c0ebe58aa7d3c855a657719yangguo@chromium.org CODE_END_LINE_INFO_RECORDING 4229c03a1924dcc113678c0ebe58aa7d3c855a657719yangguo@chromium.org }; 4230c03a1924dcc113678c0ebe58aa7d3c855a657719yangguo@chromium.org // Definition of the code position type. The "POSITION" type means the place 4231c03a1924dcc113678c0ebe58aa7d3c855a657719yangguo@chromium.org // in the source code which are of interest when making stack traces to 4232c03a1924dcc113678c0ebe58aa7d3c855a657719yangguo@chromium.org // pin-point the source location of a stack frame as close as possible. 4233c03a1924dcc113678c0ebe58aa7d3c855a657719yangguo@chromium.org // The "STATEMENT_POSITION" means the place at the beginning of each 4234c03a1924dcc113678c0ebe58aa7d3c855a657719yangguo@chromium.org // statement, and is used to indicate possible break locations. 4235c03a1924dcc113678c0ebe58aa7d3c855a657719yangguo@chromium.org enum PositionType { 4236c03a1924dcc113678c0ebe58aa7d3c855a657719yangguo@chromium.org POSITION, 4237c03a1924dcc113678c0ebe58aa7d3c855a657719yangguo@chromium.org STATEMENT_POSITION 4238355cfd19c23ac613f2738a40e356ea48297f7d5eyangguo@chromium.org }; 4239355cfd19c23ac613f2738a40e356ea48297f7d5eyangguo@chromium.org 4240355cfd19c23ac613f2738a40e356ea48297f7d5eyangguo@chromium.org // Type of event. 4241355cfd19c23ac613f2738a40e356ea48297f7d5eyangguo@chromium.org EventType type; 4242355cfd19c23ac613f2738a40e356ea48297f7d5eyangguo@chromium.org // Start of the instructions. 4243355cfd19c23ac613f2738a40e356ea48297f7d5eyangguo@chromium.org void* code_start; 4244355cfd19c23ac613f2738a40e356ea48297f7d5eyangguo@chromium.org // Size of the instructions. 4245355cfd19c23ac613f2738a40e356ea48297f7d5eyangguo@chromium.org size_t code_len; 4246c03a1924dcc113678c0ebe58aa7d3c855a657719yangguo@chromium.org // Script info for CODE_ADDED event. 4247c03a1924dcc113678c0ebe58aa7d3c855a657719yangguo@chromium.org Handle<Script> script; 4248c03a1924dcc113678c0ebe58aa7d3c855a657719yangguo@chromium.org // User-defined data for *_LINE_INFO_* event. It's used to hold the source 4249c03a1924dcc113678c0ebe58aa7d3c855a657719yangguo@chromium.org // code line information which is returned from the 4250c03a1924dcc113678c0ebe58aa7d3c855a657719yangguo@chromium.org // CODE_START_LINE_INFO_RECORDING event. And it's passed to subsequent 4251c03a1924dcc113678c0ebe58aa7d3c855a657719yangguo@chromium.org // CODE_ADD_LINE_POS_INFO and CODE_END_LINE_INFO_RECORDING events. 4252c03a1924dcc113678c0ebe58aa7d3c855a657719yangguo@chromium.org void* user_data; 4253355cfd19c23ac613f2738a40e356ea48297f7d5eyangguo@chromium.org 42544e308cf00936c6e7bead43e5141a04e37b49b9b5jkummerow@chromium.org struct name_t { 42554e308cf00936c6e7bead43e5141a04e37b49b9b5jkummerow@chromium.org // Name of the object associated with the code, note that the string is not 42564e308cf00936c6e7bead43e5141a04e37b49b9b5jkummerow@chromium.org // zero-terminated. 42574e308cf00936c6e7bead43e5141a04e37b49b9b5jkummerow@chromium.org const char* str; 42584e308cf00936c6e7bead43e5141a04e37b49b9b5jkummerow@chromium.org // Number of chars in str. 42594e308cf00936c6e7bead43e5141a04e37b49b9b5jkummerow@chromium.org size_t len; 42604e308cf00936c6e7bead43e5141a04e37b49b9b5jkummerow@chromium.org }; 42614e308cf00936c6e7bead43e5141a04e37b49b9b5jkummerow@chromium.org 42624e308cf00936c6e7bead43e5141a04e37b49b9b5jkummerow@chromium.org struct line_info_t { 42634e308cf00936c6e7bead43e5141a04e37b49b9b5jkummerow@chromium.org // PC offset 42644e308cf00936c6e7bead43e5141a04e37b49b9b5jkummerow@chromium.org size_t offset; 42654e308cf00936c6e7bead43e5141a04e37b49b9b5jkummerow@chromium.org // Code postion 42664e308cf00936c6e7bead43e5141a04e37b49b9b5jkummerow@chromium.org size_t pos; 42674e308cf00936c6e7bead43e5141a04e37b49b9b5jkummerow@chromium.org // The position type. 42684e308cf00936c6e7bead43e5141a04e37b49b9b5jkummerow@chromium.org PositionType position_type; 42694e308cf00936c6e7bead43e5141a04e37b49b9b5jkummerow@chromium.org }; 42704e308cf00936c6e7bead43e5141a04e37b49b9b5jkummerow@chromium.org 4271355cfd19c23ac613f2738a40e356ea48297f7d5eyangguo@chromium.org union { 4272355cfd19c23ac613f2738a40e356ea48297f7d5eyangguo@chromium.org // Only valid for CODE_ADDED. 42734e308cf00936c6e7bead43e5141a04e37b49b9b5jkummerow@chromium.org struct name_t name; 4274c03a1924dcc113678c0ebe58aa7d3c855a657719yangguo@chromium.org 4275c03a1924dcc113678c0ebe58aa7d3c855a657719yangguo@chromium.org // Only valid for CODE_ADD_LINE_POS_INFO 42764e308cf00936c6e7bead43e5141a04e37b49b9b5jkummerow@chromium.org struct line_info_t line_info; 4277c03a1924dcc113678c0ebe58aa7d3c855a657719yangguo@chromium.org 4278355cfd19c23ac613f2738a40e356ea48297f7d5eyangguo@chromium.org // New location of instructions. Only valid for CODE_MOVED. 4279355cfd19c23ac613f2738a40e356ea48297f7d5eyangguo@chromium.org void* new_code_start; 4280355cfd19c23ac613f2738a40e356ea48297f7d5eyangguo@chromium.org }; 4281355cfd19c23ac613f2738a40e356ea48297f7d5eyangguo@chromium.org}; 4282355cfd19c23ac613f2738a40e356ea48297f7d5eyangguo@chromium.org 4283355cfd19c23ac613f2738a40e356ea48297f7d5eyangguo@chromium.org/** 4284355cfd19c23ac613f2738a40e356ea48297f7d5eyangguo@chromium.org * Option flags passed to the SetJitCodeEventHandler function. 4285355cfd19c23ac613f2738a40e356ea48297f7d5eyangguo@chromium.org */ 4286355cfd19c23ac613f2738a40e356ea48297f7d5eyangguo@chromium.orgenum JitCodeEventOptions { 4287355cfd19c23ac613f2738a40e356ea48297f7d5eyangguo@chromium.org kJitCodeEventDefault = 0, 4288355cfd19c23ac613f2738a40e356ea48297f7d5eyangguo@chromium.org // Generate callbacks for already existent code. 4289355cfd19c23ac613f2738a40e356ea48297f7d5eyangguo@chromium.org kJitCodeEventEnumExisting = 1 4290355cfd19c23ac613f2738a40e356ea48297f7d5eyangguo@chromium.org}; 4291355cfd19c23ac613f2738a40e356ea48297f7d5eyangguo@chromium.org 4292355cfd19c23ac613f2738a40e356ea48297f7d5eyangguo@chromium.org 4293355cfd19c23ac613f2738a40e356ea48297f7d5eyangguo@chromium.org/** 4294355cfd19c23ac613f2738a40e356ea48297f7d5eyangguo@chromium.org * Callback function passed to SetJitCodeEventHandler. 4295355cfd19c23ac613f2738a40e356ea48297f7d5eyangguo@chromium.org * 4296355cfd19c23ac613f2738a40e356ea48297f7d5eyangguo@chromium.org * \param event code add, move or removal event. 4297355cfd19c23ac613f2738a40e356ea48297f7d5eyangguo@chromium.org */ 4298355cfd19c23ac613f2738a40e356ea48297f7d5eyangguo@chromium.orgtypedef void (*JitCodeEventHandler)(const JitCodeEvent* event); 4299355cfd19c23ac613f2738a40e356ea48297f7d5eyangguo@chromium.org 4300355cfd19c23ac613f2738a40e356ea48297f7d5eyangguo@chromium.org 4301355cfd19c23ac613f2738a40e356ea48297f7d5eyangguo@chromium.org/** 430289e18f5599cb4cd462cb1ed324addd7388fb4d60rossberg@chromium.org * Interface for iterating through all external resources in the heap. 4303f2038fb01417bcf7698b87a5dfaa4a861539618aerik.corry@gmail.com */ 4304594006017e46d82ed7146611dc12c20e3c509c7ddanno@chromium.orgclass V8_EXPORT ExternalResourceVisitor { // NOLINT 4305f2038fb01417bcf7698b87a5dfaa4a861539618aerik.corry@gmail.com public: 4306f2038fb01417bcf7698b87a5dfaa4a861539618aerik.corry@gmail.com virtual ~ExternalResourceVisitor() {} 4307f2038fb01417bcf7698b87a5dfaa4a861539618aerik.corry@gmail.com virtual void VisitExternalString(Handle<String> string) {} 4308f2038fb01417bcf7698b87a5dfaa4a861539618aerik.corry@gmail.com}; 4309f2038fb01417bcf7698b87a5dfaa4a861539618aerik.corry@gmail.com 4310f2038fb01417bcf7698b87a5dfaa4a861539618aerik.corry@gmail.com 4311ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org/** 431289e18f5599cb4cd462cb1ed324addd7388fb4d60rossberg@chromium.org * Interface for iterating through all the persistent handles in the heap. 431389e18f5599cb4cd462cb1ed324addd7388fb4d60rossberg@chromium.org */ 4314594006017e46d82ed7146611dc12c20e3c509c7ddanno@chromium.orgclass V8_EXPORT PersistentHandleVisitor { // NOLINT 431589e18f5599cb4cd462cb1ed324addd7388fb4d60rossberg@chromium.org public: 431689e18f5599cb4cd462cb1ed324addd7388fb4d60rossberg@chromium.org virtual ~PersistentHandleVisitor() {} 4317b99c75496e05b4cd58815ada1e39e6029130d11crossberg@chromium.org virtual void VisitPersistentHandle(Persistent<Value>* value, 4318b99c75496e05b4cd58815ada1e39e6029130d11crossberg@chromium.org uint16_t class_id) {} 431989e18f5599cb4cd462cb1ed324addd7388fb4d60rossberg@chromium.org}; 432089e18f5599cb4cd462cb1ed324addd7388fb4d60rossberg@chromium.org 432189e18f5599cb4cd462cb1ed324addd7388fb4d60rossberg@chromium.org 432289e18f5599cb4cd462cb1ed324addd7388fb4d60rossberg@chromium.org/** 432357ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org * Asserts that no action is performed that could cause a handle's value 432457ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org * to be modified. Useful when otherwise unsafe handle operations need to 432557ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org * be performed. 432657ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org */ 4327594006017e46d82ed7146611dc12c20e3c509c7ddanno@chromium.orgclass V8_EXPORT AssertNoGCScope { 432857ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org#ifndef DEBUG 432979e7902fa5f94747b5383dd40f3002dd8b62303arossberg@chromium.org // TODO(yangguo): remove isolate argument. 433079e7902fa5f94747b5383dd40f3002dd8b62303arossberg@chromium.org V8_INLINE(AssertNoGCScope(Isolate* isolate)) { } 433157ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org#else 433257ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org AssertNoGCScope(Isolate* isolate); 433357ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org ~AssertNoGCScope(); 433457ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org private: 433579e7902fa5f94747b5383dd40f3002dd8b62303arossberg@chromium.org void* disallow_heap_allocation_; 433657ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org#endif 433757ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org}; 433857ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org 433957ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org 434057ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org/** 434143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * Container class for static utility functions. 434243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen */ 4343594006017e46d82ed7146611dc12c20e3c509c7ddanno@chromium.orgclass V8_EXPORT V8 { 434443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen public: 4345727e995b7bba3c57fb1e5c156d386ca11894f781v /** Set the callback to invoke in case of fatal errors. */ 434643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen static void SetFatalErrorHandler(FatalErrorCallback that); 434743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 4348727e995b7bba3c57fb1e5c156d386ca11894f781v /** 4349fb144a0716afe7ab8bf245f2391a9e53b3db3c89fschneider@chromium.org * Set the callback to invoke to check if code generation from 4350fb144a0716afe7ab8bf245f2391a9e53b3db3c89fschneider@chromium.org * strings should be allowed. 4351fb144a0716afe7ab8bf245f2391a9e53b3db3c89fschneider@chromium.org */ 4352fb144a0716afe7ab8bf245f2391a9e53b3db3c89fschneider@chromium.org static void SetAllowCodeGenerationFromStringsCallback( 4353fb144a0716afe7ab8bf245f2391a9e53b3db3c89fschneider@chromium.org AllowCodeGenerationFromStringsCallback that); 4354fb144a0716afe7ab8bf245f2391a9e53b3db3c89fschneider@chromium.org 4355fb144a0716afe7ab8bf245f2391a9e53b3db3c89fschneider@chromium.org /** 4356837a67edd9afdbfe1b59482b41693f59c48846ffulan@chromium.org * Set allocator to use for ArrayBuffer memory. 4357837a67edd9afdbfe1b59482b41693f59c48846ffulan@chromium.org * The allocator should be set only once. The allocator should be set 4358837a67edd9afdbfe1b59482b41693f59c48846ffulan@chromium.org * before any code tha uses ArrayBuffers is executed. 4359837a67edd9afdbfe1b59482b41693f59c48846ffulan@chromium.org * This allocator is used in all isolates. 4360837a67edd9afdbfe1b59482b41693f59c48846ffulan@chromium.org */ 4361837a67edd9afdbfe1b59482b41693f59c48846ffulan@chromium.org static void SetArrayBufferAllocator(ArrayBuffer::Allocator* allocator); 4362837a67edd9afdbfe1b59482b41693f59c48846ffulan@chromium.org 4363837a67edd9afdbfe1b59482b41693f59c48846ffulan@chromium.org /** 4364727e995b7bba3c57fb1e5c156d386ca11894f781v * Ignore out-of-memory exceptions. 4365727e995b7bba3c57fb1e5c156d386ca11894f781v * 4366727e995b7bba3c57fb1e5c156d386ca11894f781v * V8 running out of memory is treated as a fatal error by default. 4367727e995b7bba3c57fb1e5c156d386ca11894f781v * This means that the fatal error handler is called and that V8 is 4368727e995b7bba3c57fb1e5c156d386ca11894f781v * terminated. 4369727e995b7bba3c57fb1e5c156d386ca11894f781v * 43707304bcac06a6a63b9f3dcebac2eeceada87ca146vegorov@chromium.org * IgnoreOutOfMemoryException can be used to not treat an 4371727e995b7bba3c57fb1e5c156d386ca11894f781v * out-of-memory situation as a fatal error. This way, the contexts 4372727e995b7bba3c57fb1e5c156d386ca11894f781v * that did not cause the out of memory problem might be able to 4373727e995b7bba3c57fb1e5c156d386ca11894f781v * continue execution. 4374727e995b7bba3c57fb1e5c156d386ca11894f781v */ 437543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen static void IgnoreOutOfMemoryException(); 437643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 4377727e995b7bba3c57fb1e5c156d386ca11894f781v /** 43789258b6bc66e09368ada54001f619d53b4fc976d5ager@chromium.org * Check if V8 is dead and therefore unusable. This is the case after 4379727e995b7bba3c57fb1e5c156d386ca11894f781v * fatal errors such as out-of-memory situations. 4380727e995b7bba3c57fb1e5c156d386ca11894f781v */ 438143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen static bool IsDead(); 438243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 438343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen /** 43848e8294a88dc7d58f579aee0ba08c19fc8a616e2dsgjesse@chromium.org * The following 4 functions are to be used when V8 is built with 43858e8294a88dc7d58f579aee0ba08c19fc8a616e2dsgjesse@chromium.org * the 'compress_startup_data' flag enabled. In this case, the 43868e8294a88dc7d58f579aee0ba08c19fc8a616e2dsgjesse@chromium.org * embedder must decompress startup data prior to initializing V8. 43878e8294a88dc7d58f579aee0ba08c19fc8a616e2dsgjesse@chromium.org * 43888e8294a88dc7d58f579aee0ba08c19fc8a616e2dsgjesse@chromium.org * This is how interaction with V8 should look like: 43898e8294a88dc7d58f579aee0ba08c19fc8a616e2dsgjesse@chromium.org * int compressed_data_count = v8::V8::GetCompressedStartupDataCount(); 43908e8294a88dc7d58f579aee0ba08c19fc8a616e2dsgjesse@chromium.org * v8::StartupData* compressed_data = 43918e8294a88dc7d58f579aee0ba08c19fc8a616e2dsgjesse@chromium.org * new v8::StartupData[compressed_data_count]; 43928e8294a88dc7d58f579aee0ba08c19fc8a616e2dsgjesse@chromium.org * v8::V8::GetCompressedStartupData(compressed_data); 43938e8294a88dc7d58f579aee0ba08c19fc8a616e2dsgjesse@chromium.org * ... decompress data (compressed_data can be updated in-place) ... 43948e8294a88dc7d58f579aee0ba08c19fc8a616e2dsgjesse@chromium.org * v8::V8::SetDecompressedStartupData(compressed_data); 43958e8294a88dc7d58f579aee0ba08c19fc8a616e2dsgjesse@chromium.org * ... now V8 can be initialized 43968e8294a88dc7d58f579aee0ba08c19fc8a616e2dsgjesse@chromium.org * ... make sure the decompressed data stays valid until V8 shutdown 4397e297f5973a8a9ff0d9945da3f1e2d8a6230c294djkummerow@chromium.org * 4398e297f5973a8a9ff0d9945da3f1e2d8a6230c294djkummerow@chromium.org * A helper class StartupDataDecompressor is provided. It implements 4399e297f5973a8a9ff0d9945da3f1e2d8a6230c294djkummerow@chromium.org * the protocol of the interaction described above, and can be used in 4400e297f5973a8a9ff0d9945da3f1e2d8a6230c294djkummerow@chromium.org * most cases instead of calling these API functions directly. 44018e8294a88dc7d58f579aee0ba08c19fc8a616e2dsgjesse@chromium.org */ 44028e8294a88dc7d58f579aee0ba08c19fc8a616e2dsgjesse@chromium.org static StartupData::CompressionAlgorithm GetCompressedStartupDataAlgorithm(); 44038e8294a88dc7d58f579aee0ba08c19fc8a616e2dsgjesse@chromium.org static int GetCompressedStartupDataCount(); 44048e8294a88dc7d58f579aee0ba08c19fc8a616e2dsgjesse@chromium.org static void GetCompressedStartupData(StartupData* compressed_data); 44058e8294a88dc7d58f579aee0ba08c19fc8a616e2dsgjesse@chromium.org static void SetDecompressedStartupData(StartupData* decompressed_data); 44068e8294a88dc7d58f579aee0ba08c19fc8a616e2dsgjesse@chromium.org 44078e8294a88dc7d58f579aee0ba08c19fc8a616e2dsgjesse@chromium.org /** 4408727e995b7bba3c57fb1e5c156d386ca11894f781v * Adds a message listener. 4409727e995b7bba3c57fb1e5c156d386ca11894f781v * 44107304bcac06a6a63b9f3dcebac2eeceada87ca146vegorov@chromium.org * The same message listener can be added more than once and in that 4411727e995b7bba3c57fb1e5c156d386ca11894f781v * case it will be called more than once for each message. 44128432c9102e4b2125d8eec741d35237cf23167471hpayer@chromium.org * 44138432c9102e4b2125d8eec741d35237cf23167471hpayer@chromium.org * If data is specified, it will be passed to the callback when it is called. 44148432c9102e4b2125d8eec741d35237cf23167471hpayer@chromium.org * Otherwise, the exception object will be passed to the callback instead. 441543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen */ 44168432c9102e4b2125d8eec741d35237cf23167471hpayer@chromium.org static bool AddMessageListener(MessageCallback that, 44178432c9102e4b2125d8eec741d35237cf23167471hpayer@chromium.org Handle<Value> data = Handle<Value>()); 441843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 441943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen /** 442043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * Remove all message listeners from the specified callback function. 442143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen */ 442243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen static void RemoveMessageListeners(MessageCallback that); 442343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 442443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen /** 44256a2b0aa331a1ae1829a9b9637ad18cfc7ec9d840ager@chromium.org * Tells V8 to capture current stack trace when uncaught exception occurs 44266a2b0aa331a1ae1829a9b9637ad18cfc7ec9d840ager@chromium.org * and report it to the message listeners. The option is off by default. 44276a2b0aa331a1ae1829a9b9637ad18cfc7ec9d840ager@chromium.org */ 44286a2b0aa331a1ae1829a9b9637ad18cfc7ec9d840ager@chromium.org static void SetCaptureStackTraceForUncaughtExceptions( 44296a2b0aa331a1ae1829a9b9637ad18cfc7ec9d840ager@chromium.org bool capture, 44306a2b0aa331a1ae1829a9b9637ad18cfc7ec9d840ager@chromium.org int frame_limit = 10, 44316a2b0aa331a1ae1829a9b9637ad18cfc7ec9d840ager@chromium.org StackTrace::StackTraceOptions options = StackTrace::kOverview); 44326a2b0aa331a1ae1829a9b9637ad18cfc7ec9d840ager@chromium.org 44336a2b0aa331a1ae1829a9b9637ad18cfc7ec9d840ager@chromium.org /** 4434727e995b7bba3c57fb1e5c156d386ca11894f781v * Sets V8 flags from a string. 443543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen */ 443643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen static void SetFlagsFromString(const char* str, int length); 443743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 44389a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.com /** 4439727e995b7bba3c57fb1e5c156d386ca11894f781v * Sets V8 flags from the command line. 44409a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.com */ 44419a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.com static void SetFlagsFromCommandLine(int* argc, 44429a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.com char** argv, 44439a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.com bool remove_flags); 44449a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.com 44457276f14ca716596e0a0d17539516370c1f453847kasper.lund /** Get the version string. */ 44467276f14ca716596e0a0d17539516370c1f453847kasper.lund static const char* GetVersion(); 444743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 444843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen /** 444943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * Enables the host application to provide a mechanism for recording 445043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * statistics counters. 445143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen */ 445243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen static void SetCounterFunction(CounterLookupCallback); 445343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 445443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen /** 4455bb29dc9819bb6f495ab6eddd2543965eb97a8e43ager@chromium.org * Enables the host application to provide a mechanism for recording 4456bb29dc9819bb6f495ab6eddd2543965eb97a8e43ager@chromium.org * histograms. The CreateHistogram function returns a 4457bb29dc9819bb6f495ab6eddd2543965eb97a8e43ager@chromium.org * histogram which will later be passed to the AddHistogramSample 4458bb29dc9819bb6f495ab6eddd2543965eb97a8e43ager@chromium.org * function. 4459bb29dc9819bb6f495ab6eddd2543965eb97a8e43ager@chromium.org */ 4460bb29dc9819bb6f495ab6eddd2543965eb97a8e43ager@chromium.org static void SetCreateHistogramFunction(CreateHistogramCallback); 4461bb29dc9819bb6f495ab6eddd2543965eb97a8e43ager@chromium.org static void SetAddHistogramSampleFunction(AddHistogramSampleCallback); 4462bb29dc9819bb6f495ab6eddd2543965eb97a8e43ager@chromium.org 446343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen /** Callback function for reporting failed access checks.*/ 446443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen static void SetFailedAccessCheckCallbackFunction(FailedAccessCheckCallback); 446543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 446643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen /** 4467727e995b7bba3c57fb1e5c156d386ca11894f781v * Enables the host application to receive a notification before a 44685d8f0e6e7b477f422e3064bdf0dd5f2a23f75544kmillikin@chromium.org * garbage collection. Allocations are not allowed in the 44695d8f0e6e7b477f422e3064bdf0dd5f2a23f75544kmillikin@chromium.org * callback function, you therefore cannot manipulate objects (set 44705d8f0e6e7b477f422e3064bdf0dd5f2a23f75544kmillikin@chromium.org * or delete properties for example) since it is possible such 44715d8f0e6e7b477f422e3064bdf0dd5f2a23f75544kmillikin@chromium.org * operations will result in the allocation of objects. It is possible 44725d8f0e6e7b477f422e3064bdf0dd5f2a23f75544kmillikin@chromium.org * to specify the GCType filter for your callback. But it is not possible to 44735d8f0e6e7b477f422e3064bdf0dd5f2a23f75544kmillikin@chromium.org * register the same callback function two times with different 44745d8f0e6e7b477f422e3064bdf0dd5f2a23f75544kmillikin@chromium.org * GCType filters. 44755d8f0e6e7b477f422e3064bdf0dd5f2a23f75544kmillikin@chromium.org */ 44765d8f0e6e7b477f422e3064bdf0dd5f2a23f75544kmillikin@chromium.org static void AddGCPrologueCallback( 44775d8f0e6e7b477f422e3064bdf0dd5f2a23f75544kmillikin@chromium.org GCPrologueCallback callback, GCType gc_type_filter = kGCTypeAll); 44785d8f0e6e7b477f422e3064bdf0dd5f2a23f75544kmillikin@chromium.org 44795d8f0e6e7b477f422e3064bdf0dd5f2a23f75544kmillikin@chromium.org /** 44805d8f0e6e7b477f422e3064bdf0dd5f2a23f75544kmillikin@chromium.org * This function removes callback which was installed by 44815d8f0e6e7b477f422e3064bdf0dd5f2a23f75544kmillikin@chromium.org * AddGCPrologueCallback function. 44825d8f0e6e7b477f422e3064bdf0dd5f2a23f75544kmillikin@chromium.org */ 44835d8f0e6e7b477f422e3064bdf0dd5f2a23f75544kmillikin@chromium.org static void RemoveGCPrologueCallback(GCPrologueCallback callback); 44845d8f0e6e7b477f422e3064bdf0dd5f2a23f75544kmillikin@chromium.org 44855d8f0e6e7b477f422e3064bdf0dd5f2a23f75544kmillikin@chromium.org /** 44865d8f0e6e7b477f422e3064bdf0dd5f2a23f75544kmillikin@chromium.org * The function is deprecated. Please use AddGCPrologueCallback instead. 44875d8f0e6e7b477f422e3064bdf0dd5f2a23f75544kmillikin@chromium.org * Enables the host application to receive a notification before a 44885d8f0e6e7b477f422e3064bdf0dd5f2a23f75544kmillikin@chromium.org * garbage collection. Allocations are not allowed in the 4489727e995b7bba3c57fb1e5c156d386ca11894f781v * callback function, you therefore cannot manipulate objects (set 4490727e995b7bba3c57fb1e5c156d386ca11894f781v * or delete properties for example) since it is possible such 4491727e995b7bba3c57fb1e5c156d386ca11894f781v * operations will result in the allocation of objects. 449243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen */ 4493003650ee766f5e92756d470a37973fd371757485yangguo@chromium.org V8_DEPRECATED(static void SetGlobalGCPrologueCallback(GCCallback)); 449443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 449543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen /** 4496727e995b7bba3c57fb1e5c156d386ca11894f781v * Enables the host application to receive a notification after a 44975d8f0e6e7b477f422e3064bdf0dd5f2a23f75544kmillikin@chromium.org * garbage collection. Allocations are not allowed in the 44985d8f0e6e7b477f422e3064bdf0dd5f2a23f75544kmillikin@chromium.org * callback function, you therefore cannot manipulate objects (set 44995d8f0e6e7b477f422e3064bdf0dd5f2a23f75544kmillikin@chromium.org * or delete properties for example) since it is possible such 45005d8f0e6e7b477f422e3064bdf0dd5f2a23f75544kmillikin@chromium.org * operations will result in the allocation of objects. It is possible 45015d8f0e6e7b477f422e3064bdf0dd5f2a23f75544kmillikin@chromium.org * to specify the GCType filter for your callback. But it is not possible to 45025d8f0e6e7b477f422e3064bdf0dd5f2a23f75544kmillikin@chromium.org * register the same callback function two times with different 45035d8f0e6e7b477f422e3064bdf0dd5f2a23f75544kmillikin@chromium.org * GCType filters. 45045d8f0e6e7b477f422e3064bdf0dd5f2a23f75544kmillikin@chromium.org */ 45055d8f0e6e7b477f422e3064bdf0dd5f2a23f75544kmillikin@chromium.org static void AddGCEpilogueCallback( 45065d8f0e6e7b477f422e3064bdf0dd5f2a23f75544kmillikin@chromium.org GCEpilogueCallback callback, GCType gc_type_filter = kGCTypeAll); 45075d8f0e6e7b477f422e3064bdf0dd5f2a23f75544kmillikin@chromium.org 45085d8f0e6e7b477f422e3064bdf0dd5f2a23f75544kmillikin@chromium.org /** 45095d8f0e6e7b477f422e3064bdf0dd5f2a23f75544kmillikin@chromium.org * This function removes callback which was installed by 45105d8f0e6e7b477f422e3064bdf0dd5f2a23f75544kmillikin@chromium.org * AddGCEpilogueCallback function. 45115d8f0e6e7b477f422e3064bdf0dd5f2a23f75544kmillikin@chromium.org */ 45125d8f0e6e7b477f422e3064bdf0dd5f2a23f75544kmillikin@chromium.org static void RemoveGCEpilogueCallback(GCEpilogueCallback callback); 45135d8f0e6e7b477f422e3064bdf0dd5f2a23f75544kmillikin@chromium.org 45145d8f0e6e7b477f422e3064bdf0dd5f2a23f75544kmillikin@chromium.org /** 45155d8f0e6e7b477f422e3064bdf0dd5f2a23f75544kmillikin@chromium.org * The function is deprecated. Please use AddGCEpilogueCallback instead. 45165d8f0e6e7b477f422e3064bdf0dd5f2a23f75544kmillikin@chromium.org * Enables the host application to receive a notification after a 4517727e995b7bba3c57fb1e5c156d386ca11894f781v * major garbage collection. Allocations are not allowed in the 4518727e995b7bba3c57fb1e5c156d386ca11894f781v * callback function, you therefore cannot manipulate objects (set 4519727e995b7bba3c57fb1e5c156d386ca11894f781v * or delete properties for example) since it is possible such 4520727e995b7bba3c57fb1e5c156d386ca11894f781v * operations will result in the allocation of objects. 452143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen */ 4522003650ee766f5e92756d470a37973fd371757485yangguo@chromium.org V8_DEPRECATED(static void SetGlobalGCEpilogueCallback(GCCallback)); 452343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 452443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen /** 45253cdd9e13bac71e7c5b63da6962f8d30f6622db14kmillikin@chromium.org * Enables the host application to provide a mechanism to be notified 45263cdd9e13bac71e7c5b63da6962f8d30f6622db14kmillikin@chromium.org * and perform custom logging when V8 Allocates Executable Memory. 45273cdd9e13bac71e7c5b63da6962f8d30f6622db14kmillikin@chromium.org */ 45283cdd9e13bac71e7c5b63da6962f8d30f6622db14kmillikin@chromium.org static void AddMemoryAllocationCallback(MemoryAllocationCallback callback, 45293cdd9e13bac71e7c5b63da6962f8d30f6622db14kmillikin@chromium.org ObjectSpace space, 45303cdd9e13bac71e7c5b63da6962f8d30f6622db14kmillikin@chromium.org AllocationAction action); 45313cdd9e13bac71e7c5b63da6962f8d30f6622db14kmillikin@chromium.org 45323cdd9e13bac71e7c5b63da6962f8d30f6622db14kmillikin@chromium.org /** 4533fab1498f2f42726c7de46c3ed560d56dd072a8b3rossberg@chromium.org * Removes callback that was installed by AddMemoryAllocationCallback. 45343cdd9e13bac71e7c5b63da6962f8d30f6622db14kmillikin@chromium.org */ 45353cdd9e13bac71e7c5b63da6962f8d30f6622db14kmillikin@chromium.org static void RemoveMemoryAllocationCallback(MemoryAllocationCallback callback); 45363cdd9e13bac71e7c5b63da6962f8d30f6622db14kmillikin@chromium.org 45373cdd9e13bac71e7c5b63da6962f8d30f6622db14kmillikin@chromium.org /** 4538fab1498f2f42726c7de46c3ed560d56dd072a8b3rossberg@chromium.org * Adds a callback to notify the host application when a script finished 4539fab1498f2f42726c7de46c3ed560d56dd072a8b3rossberg@chromium.org * running. If a script re-enters the runtime during executing, the 4540fab1498f2f42726c7de46c3ed560d56dd072a8b3rossberg@chromium.org * CallCompletedCallback is only invoked when the outer-most script 4541fab1498f2f42726c7de46c3ed560d56dd072a8b3rossberg@chromium.org * execution ends. Executing scripts inside the callback do not trigger 4542fab1498f2f42726c7de46c3ed560d56dd072a8b3rossberg@chromium.org * further callbacks. 4543fab1498f2f42726c7de46c3ed560d56dd072a8b3rossberg@chromium.org */ 4544fab1498f2f42726c7de46c3ed560d56dd072a8b3rossberg@chromium.org static void AddCallCompletedCallback(CallCompletedCallback callback); 4545fab1498f2f42726c7de46c3ed560d56dd072a8b3rossberg@chromium.org 4546fab1498f2f42726c7de46c3ed560d56dd072a8b3rossberg@chromium.org /** 4547fab1498f2f42726c7de46c3ed560d56dd072a8b3rossberg@chromium.org * Removes callback that was installed by AddCallCompletedCallback. 4548fab1498f2f42726c7de46c3ed560d56dd072a8b3rossberg@chromium.org */ 4549fab1498f2f42726c7de46c3ed560d56dd072a8b3rossberg@chromium.org static void RemoveCallCompletedCallback(CallCompletedCallback callback); 4550fab1498f2f42726c7de46c3ed560d56dd072a8b3rossberg@chromium.org 4551fab1498f2f42726c7de46c3ed560d56dd072a8b3rossberg@chromium.org /** 4552727e995b7bba3c57fb1e5c156d386ca11894f781v * Initializes from snapshot if possible. Otherwise, attempts to 4553c514574143c1bf74d4fb6e7dccb175fe9ff2f5d3sgjesse@chromium.org * initialize from scratch. This function is called implicitly if 4554c514574143c1bf74d4fb6e7dccb175fe9ff2f5d3sgjesse@chromium.org * you use the API without calling it first. 455543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen */ 455643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen static bool Initialize(); 455743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 45587276f14ca716596e0a0d17539516370c1f453847kasper.lund /** 455984bcc559ac20fb04f806e97d28a314b20b58fd60svenpanne@chromium.org * Allows the host application to provide a callback which can be used 456084bcc559ac20fb04f806e97d28a314b20b58fd60svenpanne@chromium.org * as a source of entropy for random number generators. 456184bcc559ac20fb04f806e97d28a314b20b58fd60svenpanne@chromium.org */ 456284bcc559ac20fb04f806e97d28a314b20b58fd60svenpanne@chromium.org static void SetEntropySource(EntropySource source); 456384bcc559ac20fb04f806e97d28a314b20b58fd60svenpanne@chromium.org 456484bcc559ac20fb04f806e97d28a314b20b58fd60svenpanne@chromium.org /** 4565967e270a034432457500dbf950d2c4951a929e52ulan@chromium.org * Allows the host application to provide a callback that allows v8 to 4566967e270a034432457500dbf950d2c4951a929e52ulan@chromium.org * cooperate with a profiler that rewrites return addresses on stack. 4567967e270a034432457500dbf950d2c4951a929e52ulan@chromium.org */ 4568967e270a034432457500dbf950d2c4951a929e52ulan@chromium.org static void SetReturnAddressLocationResolver( 4569967e270a034432457500dbf950d2c4951a929e52ulan@chromium.org ReturnAddressLocationResolver return_address_resolver); 4570967e270a034432457500dbf950d2c4951a929e52ulan@chromium.org 4571967e270a034432457500dbf950d2c4951a929e52ulan@chromium.org /** 45721510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org * Deprecated, use the variant with the Isolate parameter below instead. 45731510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org */ 45741510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org V8_DEPRECATED(static bool SetFunctionEntryHook(FunctionEntryHook entry_hook)); 45751510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org 45761510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org /** 4577753aee4dcf0868130789b5af7c1eeb6ab2ab24f9verwaest@chromium.org * Allows the host application to provide the address of a function that's 4578753aee4dcf0868130789b5af7c1eeb6ab2ab24f9verwaest@chromium.org * invoked on entry to every V8-generated function. 4579753aee4dcf0868130789b5af7c1eeb6ab2ab24f9verwaest@chromium.org * Note that \p entry_hook is invoked at the very start of each 4580753aee4dcf0868130789b5af7c1eeb6ab2ab24f9verwaest@chromium.org * generated function. 4581753aee4dcf0868130789b5af7c1eeb6ab2ab24f9verwaest@chromium.org * 45821510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org * \param isolate the isolate to operate on. 4583753aee4dcf0868130789b5af7c1eeb6ab2ab24f9verwaest@chromium.org * \param entry_hook a function that will be invoked on entry to every 4584753aee4dcf0868130789b5af7c1eeb6ab2ab24f9verwaest@chromium.org * V8-generated function. 4585753aee4dcf0868130789b5af7c1eeb6ab2ab24f9verwaest@chromium.org * \returns true on success on supported platforms, false on failure. 45861510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org * \note Setting an entry hook can only be done very early in an isolates 45871510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org * lifetime, and once set, the entry hook cannot be revoked. 4588753aee4dcf0868130789b5af7c1eeb6ab2ab24f9verwaest@chromium.org */ 45891510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org static bool SetFunctionEntryHook(Isolate* isolate, 45901510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org FunctionEntryHook entry_hook); 4591753aee4dcf0868130789b5af7c1eeb6ab2ab24f9verwaest@chromium.org 4592753aee4dcf0868130789b5af7c1eeb6ab2ab24f9verwaest@chromium.org /** 4593355cfd19c23ac613f2738a40e356ea48297f7d5eyangguo@chromium.org * Allows the host application to provide the address of a function that is 4594355cfd19c23ac613f2738a40e356ea48297f7d5eyangguo@chromium.org * notified each time code is added, moved or removed. 4595355cfd19c23ac613f2738a40e356ea48297f7d5eyangguo@chromium.org * 4596355cfd19c23ac613f2738a40e356ea48297f7d5eyangguo@chromium.org * \param options options for the JIT code event handler. 4597355cfd19c23ac613f2738a40e356ea48297f7d5eyangguo@chromium.org * \param event_handler the JIT code event handler, which will be invoked 4598355cfd19c23ac613f2738a40e356ea48297f7d5eyangguo@chromium.org * each time code is added, moved or removed. 4599355cfd19c23ac613f2738a40e356ea48297f7d5eyangguo@chromium.org * \note \p event_handler won't get notified of existent code. 4600355cfd19c23ac613f2738a40e356ea48297f7d5eyangguo@chromium.org * \note since code removal notifications are not currently issued, the 4601355cfd19c23ac613f2738a40e356ea48297f7d5eyangguo@chromium.org * \p event_handler may get notifications of code that overlaps earlier 4602355cfd19c23ac613f2738a40e356ea48297f7d5eyangguo@chromium.org * code notifications. This happens when code areas are reused, and the 4603355cfd19c23ac613f2738a40e356ea48297f7d5eyangguo@chromium.org * earlier overlapping code areas should therefore be discarded. 4604355cfd19c23ac613f2738a40e356ea48297f7d5eyangguo@chromium.org * \note the events passed to \p event_handler and the strings they point to 4605355cfd19c23ac613f2738a40e356ea48297f7d5eyangguo@chromium.org * are not guaranteed to live past each call. The \p event_handler must 4606355cfd19c23ac613f2738a40e356ea48297f7d5eyangguo@chromium.org * copy strings and other parameters it needs to keep around. 4607355cfd19c23ac613f2738a40e356ea48297f7d5eyangguo@chromium.org * \note the set of events declared in JitCodeEvent::EventType is expected to 4608355cfd19c23ac613f2738a40e356ea48297f7d5eyangguo@chromium.org * grow over time, and the JitCodeEvent structure is expected to accrue 4609355cfd19c23ac613f2738a40e356ea48297f7d5eyangguo@chromium.org * new members. The \p event_handler function must ignore event codes 4610355cfd19c23ac613f2738a40e356ea48297f7d5eyangguo@chromium.org * it does not recognize to maintain future compatibility. 4611355cfd19c23ac613f2738a40e356ea48297f7d5eyangguo@chromium.org */ 4612355cfd19c23ac613f2738a40e356ea48297f7d5eyangguo@chromium.org static void SetJitCodeEventHandler(JitCodeEventOptions options, 4613355cfd19c23ac613f2738a40e356ea48297f7d5eyangguo@chromium.org JitCodeEventHandler event_handler); 4614355cfd19c23ac613f2738a40e356ea48297f7d5eyangguo@chromium.org 46152bda543d75374afd8d7e98f56ca99a57ae1b7bd1svenpanne@chromium.org // TODO(svenpanne) Really deprecate me when Chrome is fixed. 46162bda543d75374afd8d7e98f56ca99a57ae1b7bd1svenpanne@chromium.org /** Deprecated. Use Isolate::AdjustAmountOfExternalAllocatedMemory instead. */ 461728faa982749c4aa9c090939453dea14bb118f613jkummerow@chromium.org static intptr_t AdjustAmountOfExternalAllocatedMemory( 461828faa982749c4aa9c090939453dea14bb118f613jkummerow@chromium.org intptr_t change_in_bytes); 46197276f14ca716596e0a0d17539516370c1f453847kasper.lund 4620245aa859d34fd516161c48ef4c69d38d9b889284iposva@chromium.org /** 4621245aa859d34fd516161c48ef4c69d38d9b889284iposva@chromium.org * Suspends recording of tick samples in the profiler. 4622245aa859d34fd516161c48ef4c69d38d9b889284iposva@chromium.org * When the V8 profiling mode is enabled (usually via command line 4623245aa859d34fd516161c48ef4c69d38d9b889284iposva@chromium.org * switches) this function suspends recording of tick samples. 4624245aa859d34fd516161c48ef4c69d38d9b889284iposva@chromium.org * Profiling ticks are discarded until ResumeProfiler() is called. 4625245aa859d34fd516161c48ef4c69d38d9b889284iposva@chromium.org * 4626245aa859d34fd516161c48ef4c69d38d9b889284iposva@chromium.org * See also the --prof and --prof_auto command line switches to 4627245aa859d34fd516161c48ef4c69d38d9b889284iposva@chromium.org * enable V8 profiling. 4628245aa859d34fd516161c48ef4c69d38d9b889284iposva@chromium.org */ 4629c73d55b355913690124f3ee70c344035431cdd3ayangguo@chromium.org V8_DEPRECATED(static void PauseProfiler()); 4630245aa859d34fd516161c48ef4c69d38d9b889284iposva@chromium.org 4631245aa859d34fd516161c48ef4c69d38d9b889284iposva@chromium.org /** 4632245aa859d34fd516161c48ef4c69d38d9b889284iposva@chromium.org * Resumes recording of tick samples in the profiler. 4633245aa859d34fd516161c48ef4c69d38d9b889284iposva@chromium.org * See also PauseProfiler(). 4634245aa859d34fd516161c48ef4c69d38d9b889284iposva@chromium.org */ 4635c73d55b355913690124f3ee70c344035431cdd3ayangguo@chromium.org V8_DEPRECATED(static void ResumeProfiler()); 4636245aa859d34fd516161c48ef4c69d38d9b889284iposva@chromium.org 463741826e77311db718135ef6517b846933dfd275f3ager@chromium.org /** 463871affb54842da76b24f0bb3184e9f0960523f89dkasperl@chromium.org * Return whether profiler is currently paused. 463971affb54842da76b24f0bb3184e9f0960523f89dkasperl@chromium.org */ 4640c73d55b355913690124f3ee70c344035431cdd3ayangguo@chromium.org V8_DEPRECATED(static bool IsProfilerPaused()); 464171affb54842da76b24f0bb3184e9f0960523f89dkasperl@chromium.org 464271affb54842da76b24f0bb3184e9f0960523f89dkasperl@chromium.org /** 4643c81c894dabeceb472d668027ca59e73096f5cfafsgjesse@chromium.org * Retrieve the V8 thread id of the calling thread. 4644c81c894dabeceb472d668027ca59e73096f5cfafsgjesse@chromium.org * 4645c81c894dabeceb472d668027ca59e73096f5cfafsgjesse@chromium.org * The thread id for a thread should only be retrieved after the V8 4646c81c894dabeceb472d668027ca59e73096f5cfafsgjesse@chromium.org * lock has been acquired with a Locker object with that thread. 4647c81c894dabeceb472d668027ca59e73096f5cfafsgjesse@chromium.org */ 4648c81c894dabeceb472d668027ca59e73096f5cfafsgjesse@chromium.org static int GetCurrentThreadId(); 4649c81c894dabeceb472d668027ca59e73096f5cfafsgjesse@chromium.org 4650c81c894dabeceb472d668027ca59e73096f5cfafsgjesse@chromium.org /** 4651c81c894dabeceb472d668027ca59e73096f5cfafsgjesse@chromium.org * Forcefully terminate execution of a JavaScript thread. This can 4652c81c894dabeceb472d668027ca59e73096f5cfafsgjesse@chromium.org * be used to terminate long-running scripts. 4653c81c894dabeceb472d668027ca59e73096f5cfafsgjesse@chromium.org * 4654c81c894dabeceb472d668027ca59e73096f5cfafsgjesse@chromium.org * TerminateExecution should only be called when then V8 lock has 4655c81c894dabeceb472d668027ca59e73096f5cfafsgjesse@chromium.org * been acquired with a Locker object. Therefore, in order to be 4656c81c894dabeceb472d668027ca59e73096f5cfafsgjesse@chromium.org * able to terminate long-running threads, preemption must be 4657c81c894dabeceb472d668027ca59e73096f5cfafsgjesse@chromium.org * enabled to allow the user of TerminateExecution to acquire the 4658c81c894dabeceb472d668027ca59e73096f5cfafsgjesse@chromium.org * lock. 4659c81c894dabeceb472d668027ca59e73096f5cfafsgjesse@chromium.org * 4660c81c894dabeceb472d668027ca59e73096f5cfafsgjesse@chromium.org * The termination is achieved by throwing an exception that is 4661c81c894dabeceb472d668027ca59e73096f5cfafsgjesse@chromium.org * uncatchable by JavaScript exception handlers. Termination 4662c81c894dabeceb472d668027ca59e73096f5cfafsgjesse@chromium.org * exceptions act as if they were caught by a C++ TryCatch exception 46637304bcac06a6a63b9f3dcebac2eeceada87ca146vegorov@chromium.org * handler. If forceful termination is used, any C++ TryCatch 4664c81c894dabeceb472d668027ca59e73096f5cfafsgjesse@chromium.org * exception handler that catches an exception should check if that 4665c81c894dabeceb472d668027ca59e73096f5cfafsgjesse@chromium.org * exception is a termination exception and immediately return if 4666c81c894dabeceb472d668027ca59e73096f5cfafsgjesse@chromium.org * that is the case. Returning immediately in that case will 4667c81c894dabeceb472d668027ca59e73096f5cfafsgjesse@chromium.org * continue the propagation of the termination exception if needed. 4668c81c894dabeceb472d668027ca59e73096f5cfafsgjesse@chromium.org * 4669c81c894dabeceb472d668027ca59e73096f5cfafsgjesse@chromium.org * The thread id passed to TerminateExecution must have been 4670c81c894dabeceb472d668027ca59e73096f5cfafsgjesse@chromium.org * obtained by calling GetCurrentThreadId on the thread in question. 4671c81c894dabeceb472d668027ca59e73096f5cfafsgjesse@chromium.org * 4672c81c894dabeceb472d668027ca59e73096f5cfafsgjesse@chromium.org * \param thread_id The thread id of the thread to terminate. 4673c81c894dabeceb472d668027ca59e73096f5cfafsgjesse@chromium.org */ 4674c81c894dabeceb472d668027ca59e73096f5cfafsgjesse@chromium.org static void TerminateExecution(int thread_id); 4675c81c894dabeceb472d668027ca59e73096f5cfafsgjesse@chromium.org 4676c81c894dabeceb472d668027ca59e73096f5cfafsgjesse@chromium.org /** 4677ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org * Forcefully terminate the current thread of JavaScript execution 4678ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org * in the given isolate. If no isolate is provided, the default 4679ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org * isolate is used. 4680c81c894dabeceb472d668027ca59e73096f5cfafsgjesse@chromium.org * 4681c81c894dabeceb472d668027ca59e73096f5cfafsgjesse@chromium.org * This method can be used by any thread even if that thread has not 4682c81c894dabeceb472d668027ca59e73096f5cfafsgjesse@chromium.org * acquired the V8 lock with a Locker object. 4683ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org * 4684ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org * \param isolate The isolate in which to terminate the current JS execution. 4685c81c894dabeceb472d668027ca59e73096f5cfafsgjesse@chromium.org */ 4686ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org static void TerminateExecution(Isolate* isolate = NULL); 46879085a016223a6b72bf580d5781c93ec7b9e54422ager@chromium.org 46882ab99526496cda7ff426115c76a1c475a1b4f4a5sgjesse@chromium.org /** 46892ab99526496cda7ff426115c76a1c475a1b4f4a5sgjesse@chromium.org * Is V8 terminating JavaScript execution. 46902ab99526496cda7ff426115c76a1c475a1b4f4a5sgjesse@chromium.org * 46912ab99526496cda7ff426115c76a1c475a1b4f4a5sgjesse@chromium.org * Returns true if JavaScript execution is currently terminating 46922ab99526496cda7ff426115c76a1c475a1b4f4a5sgjesse@chromium.org * because of a call to TerminateExecution. In that case there are 46932ab99526496cda7ff426115c76a1c475a1b4f4a5sgjesse@chromium.org * still JavaScript frames on the stack and the termination 46942ab99526496cda7ff426115c76a1c475a1b4f4a5sgjesse@chromium.org * exception is still active. 46956d786c9805481bd13ecb29c3155540f2f32950e1svenpanne@chromium.org * 46966d786c9805481bd13ecb29c3155540f2f32950e1svenpanne@chromium.org * \param isolate The isolate in which to check. 46972ab99526496cda7ff426115c76a1c475a1b4f4a5sgjesse@chromium.org */ 46986d786c9805481bd13ecb29c3155540f2f32950e1svenpanne@chromium.org static bool IsExecutionTerminating(Isolate* isolate = NULL); 46992ab99526496cda7ff426115c76a1c475a1b4f4a5sgjesse@chromium.org 47009085a016223a6b72bf580d5781c93ec7b9e54422ager@chromium.org /** 470132d7dbafe29be06cec1edd36c31fbe2865c799f4ulan@chromium.org * Resume execution capability in the given isolate, whose execution 470232d7dbafe29be06cec1edd36c31fbe2865c799f4ulan@chromium.org * was previously forcefully terminated using TerminateExecution(). 470332d7dbafe29be06cec1edd36c31fbe2865c799f4ulan@chromium.org * 470432d7dbafe29be06cec1edd36c31fbe2865c799f4ulan@chromium.org * When execution is forcefully terminated using TerminateExecution(), 470532d7dbafe29be06cec1edd36c31fbe2865c799f4ulan@chromium.org * the isolate can not resume execution until all JavaScript frames 470632d7dbafe29be06cec1edd36c31fbe2865c799f4ulan@chromium.org * have propagated the uncatchable exception which is generated. This 470732d7dbafe29be06cec1edd36c31fbe2865c799f4ulan@chromium.org * method allows the program embedding the engine to handle the 470832d7dbafe29be06cec1edd36c31fbe2865c799f4ulan@chromium.org * termination event and resume execution capability, even if 470932d7dbafe29be06cec1edd36c31fbe2865c799f4ulan@chromium.org * JavaScript frames remain on the stack. 471032d7dbafe29be06cec1edd36c31fbe2865c799f4ulan@chromium.org * 471132d7dbafe29be06cec1edd36c31fbe2865c799f4ulan@chromium.org * This method can be used by any thread even if that thread has not 471232d7dbafe29be06cec1edd36c31fbe2865c799f4ulan@chromium.org * acquired the V8 lock with a Locker object. 471332d7dbafe29be06cec1edd36c31fbe2865c799f4ulan@chromium.org * 471432d7dbafe29be06cec1edd36c31fbe2865c799f4ulan@chromium.org * \param isolate The isolate in which to resume execution capability. 471532d7dbafe29be06cec1edd36c31fbe2865c799f4ulan@chromium.org */ 471632d7dbafe29be06cec1edd36c31fbe2865c799f4ulan@chromium.org static void CancelTerminateExecution(Isolate* isolate); 471732d7dbafe29be06cec1edd36c31fbe2865c799f4ulan@chromium.org 471832d7dbafe29be06cec1edd36c31fbe2865c799f4ulan@chromium.org /** 471941826e77311db718135ef6517b846933dfd275f3ager@chromium.org * Releases any resources used by v8 and stops any utility threads 472041826e77311db718135ef6517b846933dfd275f3ager@chromium.org * that may be running. Note that disposing v8 is permanent, it 472141826e77311db718135ef6517b846933dfd275f3ager@chromium.org * cannot be reinitialized. 472241826e77311db718135ef6517b846933dfd275f3ager@chromium.org * 472341826e77311db718135ef6517b846933dfd275f3ager@chromium.org * It should generally not be necessary to dispose v8 before exiting 472441826e77311db718135ef6517b846933dfd275f3ager@chromium.org * a process, this should happen automatically. It is only necessary 472541826e77311db718135ef6517b846933dfd275f3ager@chromium.org * to use if the process needs the resources taken up by v8. 472641826e77311db718135ef6517b846933dfd275f3ager@chromium.org */ 472741826e77311db718135ef6517b846933dfd275f3ager@chromium.org static bool Dispose(); 472841826e77311db718135ef6517b846933dfd275f3ager@chromium.org 47297c3372bc426136cb79479c1b59d1770f5528882ahpayer@chromium.org /** Deprecated. Use Isolate::GetHeapStatistics instead. */ 47307c3372bc426136cb79479c1b59d1770f5528882ahpayer@chromium.org V8_DEPRECATED(static void GetHeapStatistics(HeapStatistics* heap_statistics)); 4731add848f7b25aaacf2ebb523696c074d8be15e215ager@chromium.org 4732add848f7b25aaacf2ebb523696c074d8be15e215ager@chromium.org /** 4733f2038fb01417bcf7698b87a5dfaa4a861539618aerik.corry@gmail.com * Iterates through all external resources referenced from current isolate 4734e4ee6de0de64744d55b63da83156827c989c7099verwaest@chromium.org * heap. GC is not invoked prior to iterating, therefore there is no 4735e4ee6de0de64744d55b63da83156827c989c7099verwaest@chromium.org * guarantee that visited objects are still alive. 4736f2038fb01417bcf7698b87a5dfaa4a861539618aerik.corry@gmail.com */ 4737f2038fb01417bcf7698b87a5dfaa4a861539618aerik.corry@gmail.com static void VisitExternalResources(ExternalResourceVisitor* visitor); 4738f2038fb01417bcf7698b87a5dfaa4a861539618aerik.corry@gmail.com 4739f2038fb01417bcf7698b87a5dfaa4a861539618aerik.corry@gmail.com /** 474089e18f5599cb4cd462cb1ed324addd7388fb4d60rossberg@chromium.org * Iterates through all the persistent handles in the current isolate's heap 474189e18f5599cb4cd462cb1ed324addd7388fb4d60rossberg@chromium.org * that have class_ids. 474289e18f5599cb4cd462cb1ed324addd7388fb4d60rossberg@chromium.org */ 474389e18f5599cb4cd462cb1ed324addd7388fb4d60rossberg@chromium.org static void VisitHandlesWithClassIds(PersistentHandleVisitor* visitor); 474489e18f5599cb4cd462cb1ed324addd7388fb4d60rossberg@chromium.org 474589e18f5599cb4cd462cb1ed324addd7388fb4d60rossberg@chromium.org /** 4746003650ee766f5e92756d470a37973fd371757485yangguo@chromium.org * Iterates through all the persistent handles in the current isolate's heap 4747003650ee766f5e92756d470a37973fd371757485yangguo@chromium.org * that have class_ids and are candidates to be marked as partially dependent 4748003650ee766f5e92756d470a37973fd371757485yangguo@chromium.org * handles. This will visit handles to young objects created since the last 4749003650ee766f5e92756d470a37973fd371757485yangguo@chromium.org * garbage collection but is free to visit an arbitrary superset of these 4750003650ee766f5e92756d470a37973fd371757485yangguo@chromium.org * objects. 4751003650ee766f5e92756d470a37973fd371757485yangguo@chromium.org */ 4752003650ee766f5e92756d470a37973fd371757485yangguo@chromium.org static void VisitHandlesForPartialDependence( 4753003650ee766f5e92756d470a37973fd371757485yangguo@chromium.org Isolate* isolate, PersistentHandleVisitor* visitor); 4754003650ee766f5e92756d470a37973fd371757485yangguo@chromium.org 4755003650ee766f5e92756d470a37973fd371757485yangguo@chromium.org /** 4756add848f7b25aaacf2ebb523696c074d8be15e215ager@chromium.org * Optional notification that the embedder is idle. 4757add848f7b25aaacf2ebb523696c074d8be15e215ager@chromium.org * V8 uses the notification to reduce memory footprint. 4758ab99eea3d9d0cc20698ebb39bf0fb80e3e66bffcager@chromium.org * This call can be used repeatedly if the embedder remains idle. 4759ab99eea3d9d0cc20698ebb39bf0fb80e3e66bffcager@chromium.org * Returns true if the embedder should stop calling IdleNotification 4760ab99eea3d9d0cc20698ebb39bf0fb80e3e66bffcager@chromium.org * until real work has been done. This indicates that V8 has done 4761ab99eea3d9d0cc20698ebb39bf0fb80e3e66bffcager@chromium.org * as much cleanup as it will be able to do. 4762ecb9dd69014d1d8aad1a08bd8b593fbf94107324svenpanne@chromium.org * 4763ecb9dd69014d1d8aad1a08bd8b593fbf94107324svenpanne@chromium.org * The hint argument specifies the amount of work to be done in the function 4764ecb9dd69014d1d8aad1a08bd8b593fbf94107324svenpanne@chromium.org * on scale from 1 to 1000. There is no guarantee that the actual work will 4765ecb9dd69014d1d8aad1a08bd8b593fbf94107324svenpanne@chromium.org * match the hint. 4766add848f7b25aaacf2ebb523696c074d8be15e215ager@chromium.org */ 4767ecb9dd69014d1d8aad1a08bd8b593fbf94107324svenpanne@chromium.org static bool IdleNotification(int hint = 1000); 4768add848f7b25aaacf2ebb523696c074d8be15e215ager@chromium.org 4769c81c894dabeceb472d668027ca59e73096f5cfafsgjesse@chromium.org /** 4770c81c894dabeceb472d668027ca59e73096f5cfafsgjesse@chromium.org * Optional notification that the system is running low on memory. 4771c81c894dabeceb472d668027ca59e73096f5cfafsgjesse@chromium.org * V8 uses these notifications to attempt to free memory. 4772c81c894dabeceb472d668027ca59e73096f5cfafsgjesse@chromium.org */ 4773c81c894dabeceb472d668027ca59e73096f5cfafsgjesse@chromium.org static void LowMemoryNotification(); 4774c81c894dabeceb472d668027ca59e73096f5cfafsgjesse@chromium.org 47758b2bb2665b37457fd2bdccbce0356051c83a73fckasperl@chromium.org /** 47768b2bb2665b37457fd2bdccbce0356051c83a73fckasperl@chromium.org * Optional notification that a context has been disposed. V8 uses 4777ce5e87bd905d592a8bd612b3dedf7a994177c13aager@chromium.org * these notifications to guide the GC heuristic. Returns the number 4778ce5e87bd905d592a8bd612b3dedf7a994177c13aager@chromium.org * of context disposals - including this one - since the last time 4779ce5e87bd905d592a8bd612b3dedf7a994177c13aager@chromium.org * V8 had a chance to clean up. 47808b2bb2665b37457fd2bdccbce0356051c83a73fckasperl@chromium.org */ 4781ce5e87bd905d592a8bd612b3dedf7a994177c13aager@chromium.org static int ContextDisposedNotification(); 47828b2bb2665b37457fd2bdccbce0356051c83a73fckasperl@chromium.org 4783169691d93a961c8b511f8ac8fd8ee33d081ca10fdanno@chromium.org /** 4784169691d93a961c8b511f8ac8fd8ee33d081ca10fdanno@chromium.org * Initialize the ICU library bundled with V8. The embedder should only 4785169691d93a961c8b511f8ac8fd8ee33d081ca10fdanno@chromium.org * invoke this method when using the bundled ICU. Returns true on success. 4786169691d93a961c8b511f8ac8fd8ee33d081ca10fdanno@chromium.org */ 4787169691d93a961c8b511f8ac8fd8ee33d081ca10fdanno@chromium.org static bool InitializeICU(); 4788169691d93a961c8b511f8ac8fd8ee33d081ca10fdanno@chromium.org 478943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen private: 479043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen V8(); 479143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 4792d16d8531698e91e9c60a7db9e0ba3c3bb15aff20mvstanton@chromium.org static internal::Object** GlobalizeReference(internal::Isolate* isolate, 4793d16d8531698e91e9c60a7db9e0ba3c3bb15aff20mvstanton@chromium.org internal::Object** handle); 4794a53e8e03bcb23716d1025de362626f90f00da892svenpanne@chromium.org static void DisposeGlobal(internal::Object** global_handle); 479557ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org typedef WeakReferenceCallbacks<Value, void>::Revivable RevivableCallback; 4796b99c75496e05b4cd58815ada1e39e6029130d11crossberg@chromium.org static void MakeWeak(internal::Object** global_handle, 479732280cf2786219b2d9a668f7f00778fb59ac40b3mstarzinger@chromium.org void* data, 479879e7902fa5f94747b5383dd40f3002dd8b62303arossberg@chromium.org RevivableCallback weak_reference_callback); 4799b99c75496e05b4cd58815ada1e39e6029130d11crossberg@chromium.org static void ClearWeak(internal::Object** global_handle); 4800594006017e46d82ed7146611dc12c20e3c509c7ddanno@chromium.org static int Eternalize(internal::Isolate* isolate, 4801594006017e46d82ed7146611dc12c20e3c509c7ddanno@chromium.org internal::Object** handle); 4802594006017e46d82ed7146611dc12c20e3c509c7ddanno@chromium.org static internal::Object** GetEternal(internal::Isolate* isolate, int index); 480343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 480443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen template <class T> friend class Handle; 480543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen template <class T> friend class Local; 480643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen template <class T> friend class Persistent; 480743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen friend class Context; 480843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen}; 480943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 481043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 481143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen/** 481243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * An external exception handler. 481343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen */ 4814594006017e46d82ed7146611dc12c20e3c509c7ddanno@chromium.orgclass V8_EXPORT TryCatch { 481543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen public: 481643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen /** 481749a44674c6935d62c3e776dfbf896b7f6f34228ammassi@chromium.org * Creates a new try/catch block and registers it with v8. Note that 481849a44674c6935d62c3e776dfbf896b7f6f34228ammassi@chromium.org * all TryCatch blocks should be stack allocated because the memory 481949a44674c6935d62c3e776dfbf896b7f6f34228ammassi@chromium.org * location itself is compared against JavaScript try/catch blocks. 482043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen */ 482143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen TryCatch(); 482243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 482343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen /** 482443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * Unregisters and deletes this try/catch block. 482543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen */ 482643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen ~TryCatch(); 482743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 482843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen /** 482943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * Returns true if an exception has been caught by this try/catch block. 483043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen */ 48315a8ca6c70c6fc9716f18f6223c98d1fef5752cf6kasperl@chromium.org bool HasCaught() const; 483243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 483343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen /** 483432d7dbafe29be06cec1edd36c31fbe2865c799f4ulan@chromium.org * For certain types of exceptions, it makes no sense to continue execution. 4835c81c894dabeceb472d668027ca59e73096f5cfafsgjesse@chromium.org * 483632d7dbafe29be06cec1edd36c31fbe2865c799f4ulan@chromium.org * If CanContinue returns false, the correct action is to perform any C++ 483732d7dbafe29be06cec1edd36c31fbe2865c799f4ulan@chromium.org * cleanup needed and then return. If CanContinue returns false and 483832d7dbafe29be06cec1edd36c31fbe2865c799f4ulan@chromium.org * HasTerminated returns true, it is possible to call 483932d7dbafe29be06cec1edd36c31fbe2865c799f4ulan@chromium.org * CancelTerminateExecution in order to continue calling into the engine. 4840c81c894dabeceb472d668027ca59e73096f5cfafsgjesse@chromium.org */ 4841c81c894dabeceb472d668027ca59e73096f5cfafsgjesse@chromium.org bool CanContinue() const; 4842c81c894dabeceb472d668027ca59e73096f5cfafsgjesse@chromium.org 4843c81c894dabeceb472d668027ca59e73096f5cfafsgjesse@chromium.org /** 484432d7dbafe29be06cec1edd36c31fbe2865c799f4ulan@chromium.org * Returns true if an exception has been caught due to script execution 484532d7dbafe29be06cec1edd36c31fbe2865c799f4ulan@chromium.org * being terminated. 484632d7dbafe29be06cec1edd36c31fbe2865c799f4ulan@chromium.org * 484732d7dbafe29be06cec1edd36c31fbe2865c799f4ulan@chromium.org * There is no JavaScript representation of an execution termination 484832d7dbafe29be06cec1edd36c31fbe2865c799f4ulan@chromium.org * exception. Such exceptions are thrown when the TerminateExecution 484932d7dbafe29be06cec1edd36c31fbe2865c799f4ulan@chromium.org * methods are called to terminate a long-running script. 485032d7dbafe29be06cec1edd36c31fbe2865c799f4ulan@chromium.org * 485132d7dbafe29be06cec1edd36c31fbe2865c799f4ulan@chromium.org * If such an exception has been thrown, HasTerminated will return true, 485232d7dbafe29be06cec1edd36c31fbe2865c799f4ulan@chromium.org * indicating that it is possible to call CancelTerminateExecution in order 485332d7dbafe29be06cec1edd36c31fbe2865c799f4ulan@chromium.org * to continue calling into the engine. 485432d7dbafe29be06cec1edd36c31fbe2865c799f4ulan@chromium.org */ 485532d7dbafe29be06cec1edd36c31fbe2865c799f4ulan@chromium.org bool HasTerminated() const; 485632d7dbafe29be06cec1edd36c31fbe2865c799f4ulan@chromium.org 485732d7dbafe29be06cec1edd36c31fbe2865c799f4ulan@chromium.org /** 4858b9ce637a396f3cb3845105ba1f5553d25b25abefchristian.plesner.hansen@gmail.com * Throws the exception caught by this TryCatch in a way that avoids 4859b9ce637a396f3cb3845105ba1f5553d25b25abefchristian.plesner.hansen@gmail.com * it being caught again by this same TryCatch. As with ThrowException 4860b9ce637a396f3cb3845105ba1f5553d25b25abefchristian.plesner.hansen@gmail.com * it is illegal to execute any JavaScript operations after calling 4861b9ce637a396f3cb3845105ba1f5553d25b25abefchristian.plesner.hansen@gmail.com * ReThrow; the caller must return immediately to where the exception 4862b9ce637a396f3cb3845105ba1f5553d25b25abefchristian.plesner.hansen@gmail.com * is caught. 4863b9ce637a396f3cb3845105ba1f5553d25b25abefchristian.plesner.hansen@gmail.com */ 4864b9ce637a396f3cb3845105ba1f5553d25b25abefchristian.plesner.hansen@gmail.com Handle<Value> ReThrow(); 4865b9ce637a396f3cb3845105ba1f5553d25b25abefchristian.plesner.hansen@gmail.com 4866b9ce637a396f3cb3845105ba1f5553d25b25abefchristian.plesner.hansen@gmail.com /** 486743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * Returns the exception caught by this try/catch block. If no exception has 486843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * been caught an empty handle is returned. 486943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * 487043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * The returned handle is valid until this TryCatch block has been destroyed. 487143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen */ 48725a8ca6c70c6fc9716f18f6223c98d1fef5752cf6kasperl@chromium.org Local<Value> Exception() const; 487343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 487443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen /** 4875911335cff40a2630bbe1dfb77b1897be991241bfsgjesse@chromium.org * Returns the .stack property of the thrown object. If no .stack 4876911335cff40a2630bbe1dfb77b1897be991241bfsgjesse@chromium.org * property is present an empty handle is returned. 4877911335cff40a2630bbe1dfb77b1897be991241bfsgjesse@chromium.org */ 4878911335cff40a2630bbe1dfb77b1897be991241bfsgjesse@chromium.org Local<Value> StackTrace() const; 4879911335cff40a2630bbe1dfb77b1897be991241bfsgjesse@chromium.org 4880911335cff40a2630bbe1dfb77b1897be991241bfsgjesse@chromium.org /** 48819258b6bc66e09368ada54001f619d53b4fc976d5ager@chromium.org * Returns the message associated with this exception. If there is 48829258b6bc66e09368ada54001f619d53b4fc976d5ager@chromium.org * no message associated an empty handle is returned. 48839258b6bc66e09368ada54001f619d53b4fc976d5ager@chromium.org * 48849258b6bc66e09368ada54001f619d53b4fc976d5ager@chromium.org * The returned handle is valid until this TryCatch block has been 48859258b6bc66e09368ada54001f619d53b4fc976d5ager@chromium.org * destroyed. 48869258b6bc66e09368ada54001f619d53b4fc976d5ager@chromium.org */ 48875a8ca6c70c6fc9716f18f6223c98d1fef5752cf6kasperl@chromium.org Local<v8::Message> Message() const; 48889258b6bc66e09368ada54001f619d53b4fc976d5ager@chromium.org 48899258b6bc66e09368ada54001f619d53b4fc976d5ager@chromium.org /** 489043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * Clears any exceptions that may have been caught by this try/catch block. 489143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * After this method has been called, HasCaught() will return false. 489243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * 489343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * It is not necessary to clear a try/catch block before using it again; if 489443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * another exception is thrown the previously caught exception will just be 489543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * overwritten. However, it is often a good idea since it makes it easier 489643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * to determine which operation threw a given exception. 489743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen */ 489843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen void Reset(); 489943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 4900727e995b7bba3c57fb1e5c156d386ca11894f781v /** 4901727e995b7bba3c57fb1e5c156d386ca11894f781v * Set verbosity of the external exception handler. 4902727e995b7bba3c57fb1e5c156d386ca11894f781v * 4903727e995b7bba3c57fb1e5c156d386ca11894f781v * By default, exceptions that are caught by an external exception 4904727e995b7bba3c57fb1e5c156d386ca11894f781v * handler are not reported. Call SetVerbose with true on an 4905727e995b7bba3c57fb1e5c156d386ca11894f781v * external exception handler to have exceptions caught by the 4906727e995b7bba3c57fb1e5c156d386ca11894f781v * handler reported as if they were not caught. 4907727e995b7bba3c57fb1e5c156d386ca11894f781v */ 490843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen void SetVerbose(bool value); 490943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 49109258b6bc66e09368ada54001f619d53b4fc976d5ager@chromium.org /** 49119258b6bc66e09368ada54001f619d53b4fc976d5ager@chromium.org * Set whether or not this TryCatch should capture a Message object 49129258b6bc66e09368ada54001f619d53b4fc976d5ager@chromium.org * which holds source information about where the exception 49139258b6bc66e09368ada54001f619d53b4fc976d5ager@chromium.org * occurred. True by default. 49149258b6bc66e09368ada54001f619d53b4fc976d5ager@chromium.org */ 49159258b6bc66e09368ada54001f619d53b4fc976d5ager@chromium.org void SetCaptureMessage(bool value); 49169258b6bc66e09368ada54001f619d53b4fc976d5ager@chromium.org 4917c4c927273ae2b690c4a015b4640a2a469c9a1a69ager@chromium.org private: 491849a44674c6935d62c3e776dfbf896b7f6f34228ammassi@chromium.org // Make it hard to create heap-allocated TryCatch blocks. 491949a44674c6935d62c3e776dfbf896b7f6f34228ammassi@chromium.org TryCatch(const TryCatch&); 492049a44674c6935d62c3e776dfbf896b7f6f34228ammassi@chromium.org void operator=(const TryCatch&); 492149a44674c6935d62c3e776dfbf896b7f6f34228ammassi@chromium.org void* operator new(size_t size); 492249a44674c6935d62c3e776dfbf896b7f6f34228ammassi@chromium.org void operator delete(void*, size_t); 492349a44674c6935d62c3e776dfbf896b7f6f34228ammassi@chromium.org 4924e297f5973a8a9ff0d9945da3f1e2d8a6230c294djkummerow@chromium.org v8::internal::Isolate* isolate_; 4925c4c927273ae2b690c4a015b4640a2a469c9a1a69ager@chromium.org void* next_; 492643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen void* exception_; 492793a47f4837f2137c8d8349250fd8e91da3108126jkummerow@chromium.org void* message_obj_; 492893a47f4837f2137c8d8349250fd8e91da3108126jkummerow@chromium.org void* message_script_; 492993a47f4837f2137c8d8349250fd8e91da3108126jkummerow@chromium.org int message_start_pos_; 493093a47f4837f2137c8d8349250fd8e91da3108126jkummerow@chromium.org int message_end_pos_; 4931b9ce637a396f3cb3845105ba1f5553d25b25abefchristian.plesner.hansen@gmail.com bool is_verbose_ : 1; 4932b9ce637a396f3cb3845105ba1f5553d25b25abefchristian.plesner.hansen@gmail.com bool can_continue_ : 1; 4933b9ce637a396f3cb3845105ba1f5553d25b25abefchristian.plesner.hansen@gmail.com bool capture_message_ : 1; 4934b9ce637a396f3cb3845105ba1f5553d25b25abefchristian.plesner.hansen@gmail.com bool rethrow_ : 1; 493532d7dbafe29be06cec1edd36c31fbe2865c799f4ulan@chromium.org bool has_terminated_ : 1; 4936c4c927273ae2b690c4a015b4640a2a469c9a1a69ager@chromium.org 4937ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org friend class v8::internal::Isolate; 493843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen}; 493943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 494043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 4941fb144a0716afe7ab8bf245f2391a9e53b3db3c89fschneider@chromium.org// --- Context --- 494243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 494343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 494443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen/** 494543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * Ignore 494643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen */ 4947594006017e46d82ed7146611dc12c20e3c509c7ddanno@chromium.orgclass V8_EXPORT ExtensionConfiguration { 494843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen public: 494943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen ExtensionConfiguration(int name_count, const char* names[]) 495043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen : name_count_(name_count), names_(names) { } 495143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen private: 495243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen friend class ImplementationUtilities; 495343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen int name_count_; 495443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen const char** names_; 495543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen}; 495643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 495743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 495843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen/** 495943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * A sandboxed execution context with its own set of built-in objects 496043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * and functions. 496143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen */ 4962594006017e46d82ed7146611dc12c20e3c509c7ddanno@chromium.orgclass V8_EXPORT Context { 496343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen public: 49647a392b3bfb39dbbc1ff22f0b53109aa5763fde57whesse@chromium.org /** 49657a392b3bfb39dbbc1ff22f0b53109aa5763fde57whesse@chromium.org * Returns the global proxy object or global object itself for 49667a392b3bfb39dbbc1ff22f0b53109aa5763fde57whesse@chromium.org * detached contexts. 49677a392b3bfb39dbbc1ff22f0b53109aa5763fde57whesse@chromium.org * 49687a392b3bfb39dbbc1ff22f0b53109aa5763fde57whesse@chromium.org * Global proxy object is a thin wrapper whose prototype points to 49697a392b3bfb39dbbc1ff22f0b53109aa5763fde57whesse@chromium.org * actual context's global object with the properties like Object, etc. 49707a392b3bfb39dbbc1ff22f0b53109aa5763fde57whesse@chromium.org * This is done that way for security reasons (for more details see 49717a392b3bfb39dbbc1ff22f0b53109aa5763fde57whesse@chromium.org * https://wiki.mozilla.org/Gecko:SplitWindow). 49727a392b3bfb39dbbc1ff22f0b53109aa5763fde57whesse@chromium.org * 49737a392b3bfb39dbbc1ff22f0b53109aa5763fde57whesse@chromium.org * Please note that changes to global proxy object prototype most probably 49747a392b3bfb39dbbc1ff22f0b53109aa5763fde57whesse@chromium.org * would break VM---v8 expects only global object as a prototype of 49757a392b3bfb39dbbc1ff22f0b53109aa5763fde57whesse@chromium.org * global proxy object. 49767a392b3bfb39dbbc1ff22f0b53109aa5763fde57whesse@chromium.org * 49777a392b3bfb39dbbc1ff22f0b53109aa5763fde57whesse@chromium.org * If DetachGlobal() has been invoked, Global() would return actual global 49787a392b3bfb39dbbc1ff22f0b53109aa5763fde57whesse@chromium.org * object until global is reattached with ReattachGlobal(). 49797a392b3bfb39dbbc1ff22f0b53109aa5763fde57whesse@chromium.org */ 498043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen Local<Object> Global(); 498143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 49825a8ca6c70c6fc9716f18f6223c98d1fef5752cf6kasperl@chromium.org /** 49835a8ca6c70c6fc9716f18f6223c98d1fef5752cf6kasperl@chromium.org * Detaches the global object from its context before 49845a8ca6c70c6fc9716f18f6223c98d1fef5752cf6kasperl@chromium.org * the global object can be reused to create a new context. 49855a8ca6c70c6fc9716f18f6223c98d1fef5752cf6kasperl@chromium.org */ 49865a8ca6c70c6fc9716f18f6223c98d1fef5752cf6kasperl@chromium.org void DetachGlobal(); 49875a8ca6c70c6fc9716f18f6223c98d1fef5752cf6kasperl@chromium.org 4988df7a284a293865a5fa9390be2e8f82ba3ac8598asgjesse@chromium.org /** 4989df7a284a293865a5fa9390be2e8f82ba3ac8598asgjesse@chromium.org * Reattaches a global object to a context. This can be used to 4990df7a284a293865a5fa9390be2e8f82ba3ac8598asgjesse@chromium.org * restore the connection between a global object and a context 4991df7a284a293865a5fa9390be2e8f82ba3ac8598asgjesse@chromium.org * after DetachGlobal has been called. 4992df7a284a293865a5fa9390be2e8f82ba3ac8598asgjesse@chromium.org * 4993df7a284a293865a5fa9390be2e8f82ba3ac8598asgjesse@chromium.org * \param global_object The global object to reattach to the 4994df7a284a293865a5fa9390be2e8f82ba3ac8598asgjesse@chromium.org * context. For this to work, the global object must be the global 4995df7a284a293865a5fa9390be2e8f82ba3ac8598asgjesse@chromium.org * object that was associated with this context before a call to 4996df7a284a293865a5fa9390be2e8f82ba3ac8598asgjesse@chromium.org * DetachGlobal. 4997df7a284a293865a5fa9390be2e8f82ba3ac8598asgjesse@chromium.org */ 4998df7a284a293865a5fa9390be2e8f82ba3ac8598asgjesse@chromium.org void ReattachGlobal(Handle<Object> global_object); 4999df7a284a293865a5fa9390be2e8f82ba3ac8598asgjesse@chromium.org 5000e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org /** 5001e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org * Creates a new context and returns a handle to the newly allocated 5002e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org * context. 50039155e252524a2bf92aecd27493feafed86702312kmillikin@chromium.org * 5004e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org * \param isolate The isolate in which to create the context. 50055d00b60c201d860c74821f553fdc34f4e057b411lrn@chromium.org * 50065d00b60c201d860c74821f553fdc34f4e057b411lrn@chromium.org * \param extensions An optional extension configuration containing 50075d00b60c201d860c74821f553fdc34f4e057b411lrn@chromium.org * the extensions to be installed in the newly created context. 50085d00b60c201d860c74821f553fdc34f4e057b411lrn@chromium.org * 50095d00b60c201d860c74821f553fdc34f4e057b411lrn@chromium.org * \param global_template An optional object template from which the 50105d00b60c201d860c74821f553fdc34f4e057b411lrn@chromium.org * global object for the newly created context will be created. 50115d00b60c201d860c74821f553fdc34f4e057b411lrn@chromium.org * 50125d00b60c201d860c74821f553fdc34f4e057b411lrn@chromium.org * \param global_object An optional global object to be reused for 50135d00b60c201d860c74821f553fdc34f4e057b411lrn@chromium.org * the newly created context. This global object must have been 50145d00b60c201d860c74821f553fdc34f4e057b411lrn@chromium.org * created by a previous call to Context::New with the same global 50155d00b60c201d860c74821f553fdc34f4e057b411lrn@chromium.org * template. The state of the global object will be completely reset 50165d00b60c201d860c74821f553fdc34f4e057b411lrn@chromium.org * and only object identify will remain. 50179155e252524a2bf92aecd27493feafed86702312kmillikin@chromium.org */ 5018e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org static Local<Context> New( 5019e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org Isolate* isolate, 5020e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org ExtensionConfiguration* extensions = NULL, 5021e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org Handle<ObjectTemplate> global_template = Handle<ObjectTemplate>(), 5022e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org Handle<Value> global_object = Handle<Value>()); 5023e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org 5024e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org /** Deprecated. Use Isolate version instead. */ 5025906e2fb760f52fe6e75b744b1ea42576ea5b2c29ulan@chromium.org V8_DEPRECATED(static Persistent<Context> New( 50265d8f0e6e7b477f422e3064bdf0dd5f2a23f75544kmillikin@chromium.org ExtensionConfiguration* extensions = NULL, 5027727e995b7bba3c57fb1e5c156d386ca11894f781v Handle<ObjectTemplate> global_template = Handle<ObjectTemplate>(), 5028906e2fb760f52fe6e75b744b1ea42576ea5b2c29ulan@chromium.org Handle<Value> global_object = Handle<Value>())); 502943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 503044510671e908d0efc639513d81efcd81e7f14240kasper.lund /** Returns the last entered context. */ 503144510671e908d0efc639513d81efcd81e7f14240kasper.lund static Local<Context> GetEntered(); 503243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 5033e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org // TODO(svenpanne) Actually deprecate this. 5034e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org /** Deprecated. Use Isolate::GetCurrentContext instead. */ 503544510671e908d0efc639513d81efcd81e7f14240kasper.lund static Local<Context> GetCurrent(); 503644510671e908d0efc639513d81efcd81e7f14240kasper.lund 503743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen /** 50381bf0cd04f43405cf4353d7c5360e53149ecb9f2cager@chromium.org * Returns the context of the calling JavaScript code. That is the 50391bf0cd04f43405cf4353d7c5360e53149ecb9f2cager@chromium.org * context of the top-most JavaScript frame. If there are no 50401bf0cd04f43405cf4353d7c5360e53149ecb9f2cager@chromium.org * JavaScript frames an empty handle is returned. 50411bf0cd04f43405cf4353d7c5360e53149ecb9f2cager@chromium.org */ 50421bf0cd04f43405cf4353d7c5360e53149ecb9f2cager@chromium.org static Local<Context> GetCalling(); 50431bf0cd04f43405cf4353d7c5360e53149ecb9f2cager@chromium.org 50441bf0cd04f43405cf4353d7c5360e53149ecb9f2cager@chromium.org /** 504543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * Sets the security token for the context. To access an object in 504643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * another context, the security tokens must match. 504743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen */ 504843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen void SetSecurityToken(Handle<Value> token); 504943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 50505a8ca6c70c6fc9716f18f6223c98d1fef5752cf6kasperl@chromium.org /** Restores the security token to the default value. */ 50515a8ca6c70c6fc9716f18f6223c98d1fef5752cf6kasperl@chromium.org void UseDefaultSecurityToken(); 50525a8ca6c70c6fc9716f18f6223c98d1fef5752cf6kasperl@chromium.org 505343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen /** Returns the security token of this context.*/ 505443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen Handle<Value> GetSecurityToken(); 505543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 5056727e995b7bba3c57fb1e5c156d386ca11894f781v /** 5057727e995b7bba3c57fb1e5c156d386ca11894f781v * Enter this context. After entering a context, all code compiled 5058727e995b7bba3c57fb1e5c156d386ca11894f781v * and run is compiled and run in this context. If another context 5059727e995b7bba3c57fb1e5c156d386ca11894f781v * is already entered, this old context is saved so it can be 5060727e995b7bba3c57fb1e5c156d386ca11894f781v * restored when the new context is exited. 5061727e995b7bba3c57fb1e5c156d386ca11894f781v */ 506243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen void Enter(); 5063727e995b7bba3c57fb1e5c156d386ca11894f781v 5064727e995b7bba3c57fb1e5c156d386ca11894f781v /** 5065727e995b7bba3c57fb1e5c156d386ca11894f781v * Exit this context. Exiting the current context restores the 5066727e995b7bba3c57fb1e5c156d386ca11894f781v * context that was in place when entering the current context. 5067727e995b7bba3c57fb1e5c156d386ca11894f781v */ 506843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen void Exit(); 506943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 5070727e995b7bba3c57fb1e5c156d386ca11894f781v /** Returns true if the context has experienced an out of memory situation. */ 507143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen bool HasOutOfMemoryException(); 507243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 5073727e995b7bba3c57fb1e5c156d386ca11894f781v /** Returns true if V8 has a current context. */ 507443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen static bool InContext(); 507543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 507646a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org /** Returns an isolate associated with a current context. */ 507746a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org v8::Isolate* GetIsolate(); 5078e19986e2807a2b21b2c4840812fed1d45b6fc227yangguo@chromium.org 5079e19986e2807a2b21b2c4840812fed1d45b6fc227yangguo@chromium.org /** 5080eeb44b681a16e45f1415dfacff0ba3dba9de5d8cyangguo@chromium.org * Gets the embedder data with the given index, which must have been set by a 5081eeb44b681a16e45f1415dfacff0ba3dba9de5d8cyangguo@chromium.org * previous call to SetEmbedderData with the same index. Note that index 0 5082eeb44b681a16e45f1415dfacff0ba3dba9de5d8cyangguo@chromium.org * currently has a special meaning for Chrome's debugger. 5083eeb44b681a16e45f1415dfacff0ba3dba9de5d8cyangguo@chromium.org */ 508432280cf2786219b2d9a668f7f00778fb59ac40b3mstarzinger@chromium.org V8_INLINE(Local<Value> GetEmbedderData(int index)); 5085eeb44b681a16e45f1415dfacff0ba3dba9de5d8cyangguo@chromium.org 5086eeb44b681a16e45f1415dfacff0ba3dba9de5d8cyangguo@chromium.org /** 5087eeb44b681a16e45f1415dfacff0ba3dba9de5d8cyangguo@chromium.org * Sets the embedder data with the given index, growing the data as 5088eeb44b681a16e45f1415dfacff0ba3dba9de5d8cyangguo@chromium.org * needed. Note that index 0 currently has a special meaning for Chrome's 5089eeb44b681a16e45f1415dfacff0ba3dba9de5d8cyangguo@chromium.org * debugger. 5090eeb44b681a16e45f1415dfacff0ba3dba9de5d8cyangguo@chromium.org */ 5091eeb44b681a16e45f1415dfacff0ba3dba9de5d8cyangguo@chromium.org void SetEmbedderData(int index, Handle<Value> value); 5092eeb44b681a16e45f1415dfacff0ba3dba9de5d8cyangguo@chromium.org 5093eeb44b681a16e45f1415dfacff0ba3dba9de5d8cyangguo@chromium.org /** 5094eeb44b681a16e45f1415dfacff0ba3dba9de5d8cyangguo@chromium.org * Gets a 2-byte-aligned native pointer from the embedder data with the given 5095eeb44b681a16e45f1415dfacff0ba3dba9de5d8cyangguo@chromium.org * index, which must have bees set by a previous call to 5096eeb44b681a16e45f1415dfacff0ba3dba9de5d8cyangguo@chromium.org * SetAlignedPointerInEmbedderData with the same index. Note that index 0 5097eeb44b681a16e45f1415dfacff0ba3dba9de5d8cyangguo@chromium.org * currently has a special meaning for Chrome's debugger. 5098eeb44b681a16e45f1415dfacff0ba3dba9de5d8cyangguo@chromium.org */ 509932280cf2786219b2d9a668f7f00778fb59ac40b3mstarzinger@chromium.org V8_INLINE(void* GetAlignedPointerFromEmbedderData(int index)); 5100eeb44b681a16e45f1415dfacff0ba3dba9de5d8cyangguo@chromium.org 5101eeb44b681a16e45f1415dfacff0ba3dba9de5d8cyangguo@chromium.org /** 5102eeb44b681a16e45f1415dfacff0ba3dba9de5d8cyangguo@chromium.org * Sets a 2-byte-aligned native pointer in the embedder data with the given 5103eeb44b681a16e45f1415dfacff0ba3dba9de5d8cyangguo@chromium.org * index, growing the data as needed. Note that index 0 currently has a 5104eeb44b681a16e45f1415dfacff0ba3dba9de5d8cyangguo@chromium.org * special meaning for Chrome's debugger. 5105eeb44b681a16e45f1415dfacff0ba3dba9de5d8cyangguo@chromium.org */ 5106eeb44b681a16e45f1415dfacff0ba3dba9de5d8cyangguo@chromium.org void SetAlignedPointerInEmbedderData(int index, void* value); 51079085a016223a6b72bf580d5781c93ec7b9e54422ager@chromium.org 51089085a016223a6b72bf580d5781c93ec7b9e54422ager@chromium.org /** 5109fb144a0716afe7ab8bf245f2391a9e53b3db3c89fschneider@chromium.org * Control whether code generation from strings is allowed. Calling 5110fb144a0716afe7ab8bf245f2391a9e53b3db3c89fschneider@chromium.org * this method with false will disable 'eval' and the 'Function' 5111fb144a0716afe7ab8bf245f2391a9e53b3db3c89fschneider@chromium.org * constructor for code running in this context. If 'eval' or the 5112fb144a0716afe7ab8bf245f2391a9e53b3db3c89fschneider@chromium.org * 'Function' constructor are used an exception will be thrown. 5113fb144a0716afe7ab8bf245f2391a9e53b3db3c89fschneider@chromium.org * 5114fb144a0716afe7ab8bf245f2391a9e53b3db3c89fschneider@chromium.org * If code generation from strings is not allowed the 5115fb144a0716afe7ab8bf245f2391a9e53b3db3c89fschneider@chromium.org * V8::AllowCodeGenerationFromStrings callback will be invoked if 5116fb144a0716afe7ab8bf245f2391a9e53b3db3c89fschneider@chromium.org * set before blocking the call to 'eval' or the 'Function' 5117fb144a0716afe7ab8bf245f2391a9e53b3db3c89fschneider@chromium.org * constructor. If that callback returns true, the call will be 5118fb144a0716afe7ab8bf245f2391a9e53b3db3c89fschneider@chromium.org * allowed, otherwise an exception will be thrown. If no callback is 5119fb144a0716afe7ab8bf245f2391a9e53b3db3c89fschneider@chromium.org * set an exception will be thrown. 5120fb144a0716afe7ab8bf245f2391a9e53b3db3c89fschneider@chromium.org */ 5121fb144a0716afe7ab8bf245f2391a9e53b3db3c89fschneider@chromium.org void AllowCodeGenerationFromStrings(bool allow); 5122fb144a0716afe7ab8bf245f2391a9e53b3db3c89fschneider@chromium.org 5123fb144a0716afe7ab8bf245f2391a9e53b3db3c89fschneider@chromium.org /** 51241145ef852a4e230e1f642eecd8de155f2b26bc53jkummerow@chromium.org * Returns true if code generation from strings is allowed for the context. 51251145ef852a4e230e1f642eecd8de155f2b26bc53jkummerow@chromium.org * For more details see AllowCodeGenerationFromStrings(bool) documentation. 51261145ef852a4e230e1f642eecd8de155f2b26bc53jkummerow@chromium.org */ 51271145ef852a4e230e1f642eecd8de155f2b26bc53jkummerow@chromium.org bool IsCodeGenerationFromStringsAllowed(); 51281145ef852a4e230e1f642eecd8de155f2b26bc53jkummerow@chromium.org 51291145ef852a4e230e1f642eecd8de155f2b26bc53jkummerow@chromium.org /** 513056c14afabc547f0a8ab2e24d789c00030f8df892ulan@chromium.org * Sets the error description for the exception that is thrown when 513156c14afabc547f0a8ab2e24d789c00030f8df892ulan@chromium.org * code generation from strings is not allowed and 'eval' or the 'Function' 513256c14afabc547f0a8ab2e24d789c00030f8df892ulan@chromium.org * constructor are called. 513356c14afabc547f0a8ab2e24d789c00030f8df892ulan@chromium.org */ 513456c14afabc547f0a8ab2e24d789c00030f8df892ulan@chromium.org void SetErrorMessageForCodeGenerationFromStrings(Handle<String> message); 513556c14afabc547f0a8ab2e24d789c00030f8df892ulan@chromium.org 513656c14afabc547f0a8ab2e24d789c00030f8df892ulan@chromium.org /** 513743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * Stack-allocated class which sets the execution context for all 513843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * operations executed within a local scope. 513943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen */ 514069ea3965ef6e0d3f020a402cf7e6b96b9cb651aekmillikin@chromium.org class Scope { 514143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen public: 514232280cf2786219b2d9a668f7f00778fb59ac40b3mstarzinger@chromium.org explicit V8_INLINE(Scope(Handle<Context> context)) : context_(context) { 514343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen context_->Enter(); 514443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } 5145c118402c43ae44cf9255d36608a44886c98537c5jkummerow@chromium.org // TODO(dcarney): deprecate 514657ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org V8_INLINE(Scope(Isolate* isolate, Persistent<Context>& context)) // NOLINT 514757ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org#ifndef V8_USE_UNSAFE_HANDLES 514857ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org : context_(Handle<Context>::New(isolate, context)) { 514957ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org#else 515057ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org : context_(Local<Context>::New(isolate, context)) { 515157ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org#endif 515257ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org context_->Enter(); 515357ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org } 515432280cf2786219b2d9a668f7f00778fb59ac40b3mstarzinger@chromium.org V8_INLINE(~Scope()) { context_->Exit(); } 515557ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org 515643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen private: 515743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen Handle<Context> context_; 515843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen }; 515943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 516043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen private: 516143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen friend class Value; 516243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen friend class Script; 516343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen friend class Object; 516443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen friend class Function; 5165eeb44b681a16e45f1415dfacff0ba3dba9de5d8cyangguo@chromium.org 5166eeb44b681a16e45f1415dfacff0ba3dba9de5d8cyangguo@chromium.org Local<Value> SlowGetEmbedderData(int index); 5167eeb44b681a16e45f1415dfacff0ba3dba9de5d8cyangguo@chromium.org void* SlowGetAlignedPointerFromEmbedderData(int index); 516843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen}; 516943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 517043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 517143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen/** 517246a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org * Multiple threads in V8 are allowed, but only one thread at a time is allowed 517346a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org * to use any given V8 isolate, see the comments in the Isolate class. The 517446a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org * definition of 'using a V8 isolate' includes accessing handles or holding onto 517546a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org * object pointers obtained from V8 handles while in the particular V8 isolate. 517646a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org * It is up to the user of V8 to ensure, perhaps with locking, that this 517746a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org * constraint is not violated. In addition to any other synchronization 517846a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org * mechanism that may be used, the v8::Locker and v8::Unlocker classes must be 517946a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org * used to signal thead switches to V8. 5180ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org * 518146a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org * v8::Locker is a scoped lock object. While it's active, i.e. between its 518246a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org * construction and destruction, the current thread is allowed to use the locked 518346a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org * isolate. V8 guarantees that an isolate can be locked by at most one thread at 518446a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org * any time. In other words, the scope of a v8::Locker is a critical section. 518543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * 51861c09276ce2ac5214e81ca554360b9f101187893blrn@chromium.org * Sample usage: 51871c09276ce2ac5214e81ca554360b9f101187893blrn@chromium.org* \code 518843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * ... 518943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * { 51901c09276ce2ac5214e81ca554360b9f101187893blrn@chromium.org * v8::Locker locker(isolate); 51911c09276ce2ac5214e81ca554360b9f101187893blrn@chromium.org * v8::Isolate::Scope isolate_scope(isolate); 519243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * ... 51931c09276ce2ac5214e81ca554360b9f101187893blrn@chromium.org * // Code using V8 and isolate goes here. 519443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * ... 519543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * } // Destructor called here 5196727e995b7bba3c57fb1e5c156d386ca11894f781v * \endcode 519743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * 519846a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org * If you wish to stop using V8 in a thread A you can do this either by 519946a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org * destroying the v8::Locker object as above or by constructing a v8::Unlocker 520046a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org * object: 520143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * 5202727e995b7bba3c57fb1e5c156d386ca11894f781v * \code 520343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * { 52041c09276ce2ac5214e81ca554360b9f101187893blrn@chromium.org * isolate->Exit(); 52051c09276ce2ac5214e81ca554360b9f101187893blrn@chromium.org * v8::Unlocker unlocker(isolate); 520643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * ... 520743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * // Code not using V8 goes here while V8 can run in another thread. 520843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * ... 520943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * } // Destructor called here. 52101c09276ce2ac5214e81ca554360b9f101187893blrn@chromium.org * isolate->Enter(); 5211727e995b7bba3c57fb1e5c156d386ca11894f781v * \endcode 521243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * 521346a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org * The Unlocker object is intended for use in a long-running callback from V8, 521446a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org * where you want to release the V8 lock for other threads to use. 521543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * 521646a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org * The v8::Locker is a recursive lock, i.e. you can lock more than once in a 521746a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org * given thread. This can be useful if you have code that can be called either 521846a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org * from code that holds the lock or from code that does not. The Unlocker is 521946a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org * not recursive so you can not have several Unlockers on the stack at once, and 522046a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org * you can not use an Unlocker in a thread that is not inside a Locker's scope. 522143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * 522246a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org * An unlocker will unlock several lockers if it has to and reinstate the 522346a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org * correct depth of locking on its destruction, e.g.: 522443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * 5225727e995b7bba3c57fb1e5c156d386ca11894f781v * \code 522643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * // V8 not locked. 522743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * { 52281c09276ce2ac5214e81ca554360b9f101187893blrn@chromium.org * v8::Locker locker(isolate); 52291c09276ce2ac5214e81ca554360b9f101187893blrn@chromium.org * Isolate::Scope isolate_scope(isolate); 523043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * // V8 locked. 523143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * { 52321c09276ce2ac5214e81ca554360b9f101187893blrn@chromium.org * v8::Locker another_locker(isolate); 523343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * // V8 still locked (2 levels). 523443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * { 52351c09276ce2ac5214e81ca554360b9f101187893blrn@chromium.org * isolate->Exit(); 52361c09276ce2ac5214e81ca554360b9f101187893blrn@chromium.org * v8::Unlocker unlocker(isolate); 523743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * // V8 not locked. 523843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * } 52391c09276ce2ac5214e81ca554360b9f101187893blrn@chromium.org * isolate->Enter(); 524043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * // V8 locked again (2 levels). 524143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * } 524243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * // V8 still locked (1 level). 524343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * } 524443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * // V8 Now no longer locked. 5245727e995b7bba3c57fb1e5c156d386ca11894f781v * \endcode 524643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen */ 5247594006017e46d82ed7146611dc12c20e3c509c7ddanno@chromium.orgclass V8_EXPORT Unlocker { 524843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen public: 52491c09276ce2ac5214e81ca554360b9f101187893blrn@chromium.org /** 525046a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org * Initialize Unlocker for a given Isolate. 52511c09276ce2ac5214e81ca554360b9f101187893blrn@chromium.org */ 525246a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org V8_INLINE(explicit Unlocker(Isolate* isolate)) { Initialize(isolate); } 525346a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org 5254d16d8531698e91e9c60a7db9e0ba3c3bb15aff20mvstanton@chromium.org /** Deprecated. Use Isolate version instead. */ 525546a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org V8_DEPRECATED(Unlocker()); 525646a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org 525743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen ~Unlocker(); 52581c09276ce2ac5214e81ca554360b9f101187893blrn@chromium.org private: 525946a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org void Initialize(Isolate* isolate); 526046a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org 52611c09276ce2ac5214e81ca554360b9f101187893blrn@chromium.org internal::Isolate* isolate_; 526243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen}; 526343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 526443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 5265594006017e46d82ed7146611dc12c20e3c509c7ddanno@chromium.orgclass V8_EXPORT Locker { 526643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen public: 52671c09276ce2ac5214e81ca554360b9f101187893blrn@chromium.org /** 526846a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org * Initialize Locker for a given Isolate. 52691c09276ce2ac5214e81ca554360b9f101187893blrn@chromium.org */ 527046a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org V8_INLINE(explicit Locker(Isolate* isolate)) { Initialize(isolate); } 527146a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org 5272d16d8531698e91e9c60a7db9e0ba3c3bb15aff20mvstanton@chromium.org /** Deprecated. Use Isolate version instead. */ 527346a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org V8_DEPRECATED(Locker()); 527446a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org 527543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen ~Locker(); 5276727e995b7bba3c57fb1e5c156d386ca11894f781v 5277727e995b7bba3c57fb1e5c156d386ca11894f781v /** 5278727e995b7bba3c57fb1e5c156d386ca11894f781v * Start preemption. 5279727e995b7bba3c57fb1e5c156d386ca11894f781v * 52807304bcac06a6a63b9f3dcebac2eeceada87ca146vegorov@chromium.org * When preemption is started, a timer is fired every n milliseconds 5281727e995b7bba3c57fb1e5c156d386ca11894f781v * that will switch between multiple threads that are in contention 5282727e995b7bba3c57fb1e5c156d386ca11894f781v * for the V8 lock. 5283727e995b7bba3c57fb1e5c156d386ca11894f781v */ 5284727e995b7bba3c57fb1e5c156d386ca11894f781v static void StartPreemption(int every_n_ms); 5285727e995b7bba3c57fb1e5c156d386ca11894f781v 5286727e995b7bba3c57fb1e5c156d386ca11894f781v /** 5287727e995b7bba3c57fb1e5c156d386ca11894f781v * Stop preemption. 5288727e995b7bba3c57fb1e5c156d386ca11894f781v */ 5289727e995b7bba3c57fb1e5c156d386ca11894f781v static void StopPreemption(); 5290727e995b7bba3c57fb1e5c156d386ca11894f781v 52919258b6bc66e09368ada54001f619d53b4fc976d5ager@chromium.org /** 529246a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org * Returns whether or not the locker for a given isolate, is locked by the 529346a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org * current thread. 52949258b6bc66e09368ada54001f619d53b4fc976d5ager@chromium.org */ 529546a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org static bool IsLocked(Isolate* isolate); 52969258b6bc66e09368ada54001f619d53b4fc976d5ager@chromium.org 5297ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org /** 5298ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org * Returns whether v8::Locker is being used by this V8 instance. 5299ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org */ 53007c2628c3f0353f0558760c3ca442f934263ea766kmillikin@chromium.org static bool IsActive(); 5301ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org 530243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen private: 530346a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org void Initialize(Isolate* isolate); 530446a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org 530543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen bool has_lock_; 530643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen bool top_level_; 53071c09276ce2ac5214e81ca554360b9f101187893blrn@chromium.org internal::Isolate* isolate_; 530841044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org 5309ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org static bool active_; 5310ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org 531141044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org // Disallow copying and assigning. 531241044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org Locker(const Locker&); 531341044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org void operator=(const Locker&); 531443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen}; 531543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 531643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 5317d88afa260e45de10e729b05a20146184a488aff7erik.corry@gmail.com/** 5318fb0463312815affb1f0e9d5e351b7f9a3422e3a2svenpanne@chromium.org * A struct for exporting HeapStats data from V8, using "push" model. 5319fb0463312815affb1f0e9d5e351b7f9a3422e3a2svenpanne@chromium.org */ 5320fb0463312815affb1f0e9d5e351b7f9a3422e3a2svenpanne@chromium.orgstruct HeapStatsUpdate; 5321fb0463312815affb1f0e9d5e351b7f9a3422e3a2svenpanne@chromium.org 5322fb0463312815affb1f0e9d5e351b7f9a3422e3a2svenpanne@chromium.org 5323fb0463312815affb1f0e9d5e351b7f9a3422e3a2svenpanne@chromium.org/** 5324d88afa260e45de10e729b05a20146184a488aff7erik.corry@gmail.com * An interface for exporting data from V8, using "push" model. 5325d88afa260e45de10e729b05a20146184a488aff7erik.corry@gmail.com */ 5326594006017e46d82ed7146611dc12c20e3c509c7ddanno@chromium.orgclass V8_EXPORT OutputStream { // NOLINT 5327f0ac72dfa39ec827de605aafc57d4834237aa7f3whesse@chromium.org public: 5328d88afa260e45de10e729b05a20146184a488aff7erik.corry@gmail.com enum OutputEncoding { 5329fb0463312815affb1f0e9d5e351b7f9a3422e3a2svenpanne@chromium.org kAscii = 0 // 7-bit ASCII. 5330d88afa260e45de10e729b05a20146184a488aff7erik.corry@gmail.com }; 5331d88afa260e45de10e729b05a20146184a488aff7erik.corry@gmail.com enum WriteResult { 5332d88afa260e45de10e729b05a20146184a488aff7erik.corry@gmail.com kContinue = 0, 5333d88afa260e45de10e729b05a20146184a488aff7erik.corry@gmail.com kAbort = 1 5334d88afa260e45de10e729b05a20146184a488aff7erik.corry@gmail.com }; 5335d88afa260e45de10e729b05a20146184a488aff7erik.corry@gmail.com virtual ~OutputStream() {} 5336d88afa260e45de10e729b05a20146184a488aff7erik.corry@gmail.com /** Notify about the end of stream. */ 5337d88afa260e45de10e729b05a20146184a488aff7erik.corry@gmail.com virtual void EndOfStream() = 0; 5338d88afa260e45de10e729b05a20146184a488aff7erik.corry@gmail.com /** Get preferred output chunk size. Called only once. */ 5339d88afa260e45de10e729b05a20146184a488aff7erik.corry@gmail.com virtual int GetChunkSize() { return 1024; } 5340d88afa260e45de10e729b05a20146184a488aff7erik.corry@gmail.com /** Get preferred output encoding. Called only once. */ 5341d88afa260e45de10e729b05a20146184a488aff7erik.corry@gmail.com virtual OutputEncoding GetOutputEncoding() { return kAscii; } 5342d88afa260e45de10e729b05a20146184a488aff7erik.corry@gmail.com /** 5343d88afa260e45de10e729b05a20146184a488aff7erik.corry@gmail.com * Writes the next chunk of snapshot data into the stream. Writing 5344d88afa260e45de10e729b05a20146184a488aff7erik.corry@gmail.com * can be stopped by returning kAbort as function result. EndOfStream 5345d88afa260e45de10e729b05a20146184a488aff7erik.corry@gmail.com * will not be called in case writing was aborted. 5346d88afa260e45de10e729b05a20146184a488aff7erik.corry@gmail.com */ 5347d88afa260e45de10e729b05a20146184a488aff7erik.corry@gmail.com virtual WriteResult WriteAsciiChunk(char* data, int size) = 0; 534828faa982749c4aa9c090939453dea14bb118f613jkummerow@chromium.org /** 534928faa982749c4aa9c090939453dea14bb118f613jkummerow@chromium.org * Writes the next chunk of heap stats data into the stream. Writing 535028faa982749c4aa9c090939453dea14bb118f613jkummerow@chromium.org * can be stopped by returning kAbort as function result. EndOfStream 535128faa982749c4aa9c090939453dea14bb118f613jkummerow@chromium.org * will not be called in case writing was aborted. 535228faa982749c4aa9c090939453dea14bb118f613jkummerow@chromium.org */ 5353fb0463312815affb1f0e9d5e351b7f9a3422e3a2svenpanne@chromium.org virtual WriteResult WriteHeapStatsChunk(HeapStatsUpdate* data, int count) { 53543ee08a60067751ecfad036b933a23002989d7450jkummerow@chromium.org return kAbort; 53553ee08a60067751ecfad036b933a23002989d7450jkummerow@chromium.org }; 5356d88afa260e45de10e729b05a20146184a488aff7erik.corry@gmail.com}; 5357d88afa260e45de10e729b05a20146184a488aff7erik.corry@gmail.com 5358d88afa260e45de10e729b05a20146184a488aff7erik.corry@gmail.com 53595f0c45f2cacb31d36a8f80c31f17bda7751a3644ager@chromium.org/** 53605f0c45f2cacb31d36a8f80c31f17bda7751a3644ager@chromium.org * An interface for reporting progress and controlling long-running 53615f0c45f2cacb31d36a8f80c31f17bda7751a3644ager@chromium.org * activities. 53625f0c45f2cacb31d36a8f80c31f17bda7751a3644ager@chromium.org */ 5363594006017e46d82ed7146611dc12c20e3c509c7ddanno@chromium.orgclass V8_EXPORT ActivityControl { // NOLINT 53645f0c45f2cacb31d36a8f80c31f17bda7751a3644ager@chromium.org public: 53655f0c45f2cacb31d36a8f80c31f17bda7751a3644ager@chromium.org enum ControlOption { 53665f0c45f2cacb31d36a8f80c31f17bda7751a3644ager@chromium.org kContinue = 0, 53675f0c45f2cacb31d36a8f80c31f17bda7751a3644ager@chromium.org kAbort = 1 53685f0c45f2cacb31d36a8f80c31f17bda7751a3644ager@chromium.org }; 53695f0c45f2cacb31d36a8f80c31f17bda7751a3644ager@chromium.org virtual ~ActivityControl() {} 53705f0c45f2cacb31d36a8f80c31f17bda7751a3644ager@chromium.org /** 53715f0c45f2cacb31d36a8f80c31f17bda7751a3644ager@chromium.org * Notify about current progress. The activity can be stopped by 53725f0c45f2cacb31d36a8f80c31f17bda7751a3644ager@chromium.org * returning kAbort as the callback result. 53735f0c45f2cacb31d36a8f80c31f17bda7751a3644ager@chromium.org */ 53745f0c45f2cacb31d36a8f80c31f17bda7751a3644ager@chromium.org virtual ControlOption ReportProgressValue(int done, int total) = 0; 53755f0c45f2cacb31d36a8f80c31f17bda7751a3644ager@chromium.org}; 53765f0c45f2cacb31d36a8f80c31f17bda7751a3644ager@chromium.org 537743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 5378fb144a0716afe7ab8bf245f2391a9e53b3db3c89fschneider@chromium.org// --- Implementation --- 537943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 538018ad94b919217ffbcd2d3159eeb5f8c588761c47ager@chromium.org 538118ad94b919217ffbcd2d3159eeb5f8c588761c47ager@chromium.orgnamespace internal { 538218ad94b919217ffbcd2d3159eeb5f8c588761c47ager@chromium.org 53831b3afd1cab9087ca3c4e585d3da77d374d65c082mstarzinger@chromium.orgconst int kApiPointerSize = sizeof(void*); // NOLINT 53841b3afd1cab9087ca3c4e585d3da77d374d65c082mstarzinger@chromium.orgconst int kApiIntSize = sizeof(int); // NOLINT 538518ad94b919217ffbcd2d3159eeb5f8c588761c47ager@chromium.org 538618ad94b919217ffbcd2d3159eeb5f8c588761c47ager@chromium.org// Tag information for HeapObject. 538718ad94b919217ffbcd2d3159eeb5f8c588761c47ager@chromium.orgconst int kHeapObjectTag = 1; 538818ad94b919217ffbcd2d3159eeb5f8c588761c47ager@chromium.orgconst int kHeapObjectTagSize = 2; 538918ad94b919217ffbcd2d3159eeb5f8c588761c47ager@chromium.orgconst intptr_t kHeapObjectTagMask = (1 << kHeapObjectTagSize) - 1; 539018ad94b919217ffbcd2d3159eeb5f8c588761c47ager@chromium.org 539118ad94b919217ffbcd2d3159eeb5f8c588761c47ager@chromium.org// Tag information for Smi. 539218ad94b919217ffbcd2d3159eeb5f8c588761c47ager@chromium.orgconst int kSmiTag = 0; 539318ad94b919217ffbcd2d3159eeb5f8c588761c47ager@chromium.orgconst int kSmiTagSize = 1; 539418ad94b919217ffbcd2d3159eeb5f8c588761c47ager@chromium.orgconst intptr_t kSmiTagMask = (1 << kSmiTagSize) - 1; 539518ad94b919217ffbcd2d3159eeb5f8c588761c47ager@chromium.org 5396c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.orgtemplate <size_t ptr_size> struct SmiTagging; 53979d58c2b1c27d8b2890b9bd46e57d3842b09e0292christian.plesner.hansen@gmail.com 5398bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.orgtemplate<int kSmiShiftSize> 5399bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.orgV8_INLINE(internal::Object* IntToSmi(int value)) { 5400bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.org int smi_shift_bits = kSmiTagSize + kSmiShiftSize; 5401bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.org intptr_t tagged_value = 5402bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.org (static_cast<intptr_t>(value) << smi_shift_bits) | kSmiTag; 5403bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.org return reinterpret_cast<internal::Object*>(tagged_value); 5404bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.org} 5405bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.org 54069d58c2b1c27d8b2890b9bd46e57d3842b09e0292christian.plesner.hansen@gmail.com// Smi constants for 32-bit systems. 5407c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.orgtemplate <> struct SmiTagging<4> { 54089d58c2b1c27d8b2890b9bd46e57d3842b09e0292christian.plesner.hansen@gmail.com static const int kSmiShiftSize = 0; 54099d58c2b1c27d8b2890b9bd46e57d3842b09e0292christian.plesner.hansen@gmail.com static const int kSmiValueSize = 31; 541032280cf2786219b2d9a668f7f00778fb59ac40b3mstarzinger@chromium.org V8_INLINE(static int SmiToInt(internal::Object* value)) { 54119d58c2b1c27d8b2890b9bd46e57d3842b09e0292christian.plesner.hansen@gmail.com int shift_bits = kSmiTagSize + kSmiShiftSize; 54129d58c2b1c27d8b2890b9bd46e57d3842b09e0292christian.plesner.hansen@gmail.com // Throw away top 32 bits and shift down (requires >> to be sign extending). 54139d58c2b1c27d8b2890b9bd46e57d3842b09e0292christian.plesner.hansen@gmail.com return static_cast<int>(reinterpret_cast<intptr_t>(value)) >> shift_bits; 54149d58c2b1c27d8b2890b9bd46e57d3842b09e0292christian.plesner.hansen@gmail.com } 5415bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.org V8_INLINE(static internal::Object* IntToSmi(int value)) { 5416bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.org return internal::IntToSmi<kSmiShiftSize>(value); 5417bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.org } 5418bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.org V8_INLINE(static bool IsValidSmi(intptr_t value)) { 5419bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.org // To be representable as an tagged small integer, the two 5420bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.org // most-significant bits of 'value' must be either 00 or 11 due to 5421bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.org // sign-extension. To check this we add 01 to the two 5422bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.org // most-significant bits, and check if the most-significant bit is 0 5423bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.org // 5424bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.org // CAUTION: The original code below: 5425bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.org // bool result = ((value + 0x40000000) & 0x80000000) == 0; 5426bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.org // may lead to incorrect results according to the C language spec, and 5427bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.org // in fact doesn't work correctly with gcc4.1.1 in some cases: The 5428bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.org // compiler may produce undefined results in case of signed integer 5429bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.org // overflow. The computation must be done w/ unsigned ints. 5430bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.org return static_cast<uintptr_t>(value + 0x40000000U) < 0x80000000U; 5431bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.org } 54329d58c2b1c27d8b2890b9bd46e57d3842b09e0292christian.plesner.hansen@gmail.com}; 54339d58c2b1c27d8b2890b9bd46e57d3842b09e0292christian.plesner.hansen@gmail.com 54349d58c2b1c27d8b2890b9bd46e57d3842b09e0292christian.plesner.hansen@gmail.com// Smi constants for 64-bit systems. 5435c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.orgtemplate <> struct SmiTagging<8> { 54369d58c2b1c27d8b2890b9bd46e57d3842b09e0292christian.plesner.hansen@gmail.com static const int kSmiShiftSize = 31; 54379d58c2b1c27d8b2890b9bd46e57d3842b09e0292christian.plesner.hansen@gmail.com static const int kSmiValueSize = 32; 543832280cf2786219b2d9a668f7f00778fb59ac40b3mstarzinger@chromium.org V8_INLINE(static int SmiToInt(internal::Object* value)) { 54399d58c2b1c27d8b2890b9bd46e57d3842b09e0292christian.plesner.hansen@gmail.com int shift_bits = kSmiTagSize + kSmiShiftSize; 54409d58c2b1c27d8b2890b9bd46e57d3842b09e0292christian.plesner.hansen@gmail.com // Shift down and throw away top 32 bits. 54419d58c2b1c27d8b2890b9bd46e57d3842b09e0292christian.plesner.hansen@gmail.com return static_cast<int>(reinterpret_cast<intptr_t>(value) >> shift_bits); 54429d58c2b1c27d8b2890b9bd46e57d3842b09e0292christian.plesner.hansen@gmail.com } 5443bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.org V8_INLINE(static internal::Object* IntToSmi(int value)) { 5444bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.org return internal::IntToSmi<kSmiShiftSize>(value); 5445bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.org } 5446bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.org V8_INLINE(static bool IsValidSmi(intptr_t value)) { 5447bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.org // To be representable as a long smi, the value must be a 32-bit integer. 5448bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.org return (value == static_cast<int32_t>(value)); 5449bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.org } 54509d58c2b1c27d8b2890b9bd46e57d3842b09e0292christian.plesner.hansen@gmail.com}; 54519d58c2b1c27d8b2890b9bd46e57d3842b09e0292christian.plesner.hansen@gmail.com 5452c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.orgtypedef SmiTagging<kApiPointerSize> PlatformSmiTagging; 5453c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.orgconst int kSmiShiftSize = PlatformSmiTagging::kSmiShiftSize; 5454c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.orgconst int kSmiValueSize = PlatformSmiTagging::kSmiValueSize; 545518ad94b919217ffbcd2d3159eeb5f8c588761c47ager@chromium.org 545618ad94b919217ffbcd2d3159eeb5f8c588761c47ager@chromium.org/** 545718ad94b919217ffbcd2d3159eeb5f8c588761c47ager@chromium.org * This class exports constants and functionality from within v8 that 545818ad94b919217ffbcd2d3159eeb5f8c588761c47ager@chromium.org * is necessary to implement inline functions in the v8 api. Don't 545918ad94b919217ffbcd2d3159eeb5f8c588761c47ager@chromium.org * depend on functions and constants defined here. 546018ad94b919217ffbcd2d3159eeb5f8c588761c47ager@chromium.org */ 546118ad94b919217ffbcd2d3159eeb5f8c588761c47ager@chromium.orgclass Internals { 546218ad94b919217ffbcd2d3159eeb5f8c588761c47ager@chromium.org public: 546318ad94b919217ffbcd2d3159eeb5f8c588761c47ager@chromium.org // These values match non-compiler-dependent values defined within 546418ad94b919217ffbcd2d3159eeb5f8c588761c47ager@chromium.org // the implementation of v8. 546518ad94b919217ffbcd2d3159eeb5f8c588761c47ager@chromium.org static const int kHeapObjectMapOffset = 0; 5466ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org static const int kMapInstanceTypeOffset = 1 * kApiPointerSize + kApiIntSize; 5467efdb9d70bddd496ceb6a281dadcc065efbce37a1yangguo@chromium.org static const int kStringResourceOffset = 3 * kApiPointerSize; 5468ac6aa175ab59d65cfb7a88dbb621e1d7f1a80b8fsgjesse@chromium.org 5469fb0463312815affb1f0e9d5e351b7f9a3422e3a2svenpanne@chromium.org static const int kOddballKindOffset = 3 * kApiPointerSize; 5470ea91cc579ade536e3a08498a8157921dd4f533d1ager@chromium.org static const int kForeignAddressOffset = kApiPointerSize; 54714a6c3279070e8f133607a74c08d8c08ac394ab98erik.corry@gmail.com static const int kJSObjectHeaderSize = 3 * kApiPointerSize; 5472eeb44b681a16e45f1415dfacff0ba3dba9de5d8cyangguo@chromium.org static const int kFixedArrayHeaderSize = 2 * kApiPointerSize; 5473eeb44b681a16e45f1415dfacff0ba3dba9de5d8cyangguo@chromium.org static const int kContextHeaderSize = 2 * kApiPointerSize; 54741510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org static const int kContextEmbedderDataIndex = 65; 547518ad94b919217ffbcd2d3159eeb5f8c588761c47ager@chromium.org static const int kFullStringRepresentationMask = 0x07; 547656c14afabc547f0a8ab2e24d789c00030f8df892ulan@chromium.org static const int kStringEncodingMask = 0x4; 547782dbbabc05f6729248cef210931fe34556fd7ca0sgjesse@chromium.org static const int kExternalTwoByteRepresentationTag = 0x02; 547856c14afabc547f0a8ab2e24d789c00030f8df892ulan@chromium.org static const int kExternalAsciiRepresentationTag = 0x06; 547918ad94b919217ffbcd2d3159eeb5f8c588761c47ager@chromium.org 5480efdb9d70bddd496ceb6a281dadcc065efbce37a1yangguo@chromium.org static const int kIsolateEmbedderDataOffset = 1 * kApiPointerSize; 5481efdb9d70bddd496ceb6a281dadcc065efbce37a1yangguo@chromium.org static const int kIsolateRootsOffset = 3 * kApiPointerSize; 5482efdb9d70bddd496ceb6a281dadcc065efbce37a1yangguo@chromium.org static const int kUndefinedValueRootIndex = 5; 5483efdb9d70bddd496ceb6a281dadcc065efbce37a1yangguo@chromium.org static const int kNullValueRootIndex = 7; 5484efdb9d70bddd496ceb6a281dadcc065efbce37a1yangguo@chromium.org static const int kTrueValueRootIndex = 8; 5485efdb9d70bddd496ceb6a281dadcc065efbce37a1yangguo@chromium.org static const int kFalseValueRootIndex = 9; 5486594006017e46d82ed7146611dc12c20e3c509c7ddanno@chromium.org static const int kEmptyStringRootIndex = 133; 5487efdb9d70bddd496ceb6a281dadcc065efbce37a1yangguo@chromium.org 5488d16d8531698e91e9c60a7db9e0ba3c3bb15aff20mvstanton@chromium.org static const int kNodeClassIdOffset = 1 * kApiPointerSize; 5489d16d8531698e91e9c60a7db9e0ba3c3bb15aff20mvstanton@chromium.org static const int kNodeFlagsOffset = 1 * kApiPointerSize + 3; 5490d16d8531698e91e9c60a7db9e0ba3c3bb15aff20mvstanton@chromium.org static const int kNodeStateMask = 0xf; 5491d16d8531698e91e9c60a7db9e0ba3c3bb15aff20mvstanton@chromium.org static const int kNodeStateIsWeakValue = 2; 5492c16e8281e6e3e3b57e157b62d5a1ca530e23e4bfdanno@chromium.org static const int kNodeStateIsPendingValue = 3; 5493d16d8531698e91e9c60a7db9e0ba3c3bb15aff20mvstanton@chromium.org static const int kNodeStateIsNearDeathValue = 4; 549446a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org static const int kNodeIsIndependentShift = 4; 549546a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org static const int kNodeIsPartiallyDependentShift = 5; 549646a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org 5497bee51999422c0eeaae85ed99b5c0bd4126510ff1danno@chromium.org static const int kJSObjectType = 0xb1; 54985ad5acef6bd4ebc785f946d8bcc2a88b1e031827ricow@chromium.org static const int kFirstNonstringType = 0x80; 54994a9f6553038df6b893b3d3ccae351723f4cbbae7yangguo@chromium.org static const int kOddballType = 0x83; 5500c73d55b355913690124f3ee70c344035431cdd3ayangguo@chromium.org static const int kForeignType = 0x87; 550118ad94b919217ffbcd2d3159eeb5f8c588761c47ager@chromium.org 5502fb0463312815affb1f0e9d5e351b7f9a3422e3a2svenpanne@chromium.org static const int kUndefinedOddballKind = 5; 5503fb0463312815affb1f0e9d5e351b7f9a3422e3a2svenpanne@chromium.org static const int kNullOddballKind = 3; 5504fb0463312815affb1f0e9d5e351b7f9a3422e3a2svenpanne@chromium.org 550593a47f4837f2137c8d8349250fd8e91da3108126jkummerow@chromium.org static void CheckInitializedImpl(v8::Isolate* isolate); 550693a47f4837f2137c8d8349250fd8e91da3108126jkummerow@chromium.org V8_INLINE(static void CheckInitialized(v8::Isolate* isolate)) { 55071510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org#ifdef V8_ENABLE_CHECKS 550893a47f4837f2137c8d8349250fd8e91da3108126jkummerow@chromium.org CheckInitializedImpl(isolate); 55091510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org#endif 551093a47f4837f2137c8d8349250fd8e91da3108126jkummerow@chromium.org } 55111510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org 551232280cf2786219b2d9a668f7f00778fb59ac40b3mstarzinger@chromium.org V8_INLINE(static bool HasHeapObjectTag(internal::Object* value)) { 551318ad94b919217ffbcd2d3159eeb5f8c588761c47ager@chromium.org return ((reinterpret_cast<intptr_t>(value) & kHeapObjectTagMask) == 551418ad94b919217ffbcd2d3159eeb5f8c588761c47ager@chromium.org kHeapObjectTag); 551518ad94b919217ffbcd2d3159eeb5f8c588761c47ager@chromium.org } 5516c514574143c1bf74d4fb6e7dccb175fe9ff2f5d3sgjesse@chromium.org 551732280cf2786219b2d9a668f7f00778fb59ac40b3mstarzinger@chromium.org V8_INLINE(static int SmiValue(internal::Object* value)) { 5518c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org return PlatformSmiTagging::SmiToInt(value); 55199d58c2b1c27d8b2890b9bd46e57d3842b09e0292christian.plesner.hansen@gmail.com } 55209d58c2b1c27d8b2890b9bd46e57d3842b09e0292christian.plesner.hansen@gmail.com 5521bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.org V8_INLINE(static internal::Object* IntToSmi(int value)) { 5522bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.org return PlatformSmiTagging::IntToSmi(value); 5523bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.org } 5524bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.org 5525bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.org V8_INLINE(static bool IsValidSmi(intptr_t value)) { 5526bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.org return PlatformSmiTagging::IsValidSmi(value); 5527bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.org } 5528bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.org 552932280cf2786219b2d9a668f7f00778fb59ac40b3mstarzinger@chromium.org V8_INLINE(static int GetInstanceType(internal::Object* obj)) { 55309d58c2b1c27d8b2890b9bd46e57d3842b09e0292christian.plesner.hansen@gmail.com typedef internal::Object O; 55319d58c2b1c27d8b2890b9bd46e57d3842b09e0292christian.plesner.hansen@gmail.com O* map = ReadField<O*>(obj, kHeapObjectMapOffset); 55329d58c2b1c27d8b2890b9bd46e57d3842b09e0292christian.plesner.hansen@gmail.com return ReadField<uint8_t>(map, kMapInstanceTypeOffset); 55339d58c2b1c27d8b2890b9bd46e57d3842b09e0292christian.plesner.hansen@gmail.com } 55349d58c2b1c27d8b2890b9bd46e57d3842b09e0292christian.plesner.hansen@gmail.com 553532280cf2786219b2d9a668f7f00778fb59ac40b3mstarzinger@chromium.org V8_INLINE(static int GetOddballKind(internal::Object* obj)) { 5536fb0463312815affb1f0e9d5e351b7f9a3422e3a2svenpanne@chromium.org typedef internal::Object O; 5537fb0463312815affb1f0e9d5e351b7f9a3422e3a2svenpanne@chromium.org return SmiValue(ReadField<O*>(obj, kOddballKindOffset)); 5538fb0463312815affb1f0e9d5e351b7f9a3422e3a2svenpanne@chromium.org } 5539fb0463312815affb1f0e9d5e351b7f9a3422e3a2svenpanne@chromium.org 554032280cf2786219b2d9a668f7f00778fb59ac40b3mstarzinger@chromium.org V8_INLINE(static bool IsExternalTwoByteString(int instance_type)) { 554118ad94b919217ffbcd2d3159eeb5f8c588761c47ager@chromium.org int representation = (instance_type & kFullStringRepresentationMask); 554218ad94b919217ffbcd2d3159eeb5f8c588761c47ager@chromium.org return representation == kExternalTwoByteRepresentationTag; 554318ad94b919217ffbcd2d3159eeb5f8c588761c47ager@chromium.org } 554418ad94b919217ffbcd2d3159eeb5f8c588761c47ager@chromium.org 554546a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org V8_INLINE(static uint8_t GetNodeFlag(internal::Object** obj, int shift)) { 554646a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org uint8_t* addr = reinterpret_cast<uint8_t*>(obj) + kNodeFlagsOffset; 5547594006017e46d82ed7146611dc12c20e3c509c7ddanno@chromium.org return *addr & static_cast<uint8_t>(1U << shift); 554846a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org } 554946a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org 555046a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org V8_INLINE(static void UpdateNodeFlag(internal::Object** obj, 555146a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org bool value, int shift)) { 555246a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org uint8_t* addr = reinterpret_cast<uint8_t*>(obj) + kNodeFlagsOffset; 5553594006017e46d82ed7146611dc12c20e3c509c7ddanno@chromium.org uint8_t mask = static_cast<uint8_t>(1 << shift); 5554594006017e46d82ed7146611dc12c20e3c509c7ddanno@chromium.org *addr = static_cast<uint8_t>((*addr & ~mask) | (value << shift)); 555546a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org } 555646a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org 5557d16d8531698e91e9c60a7db9e0ba3c3bb15aff20mvstanton@chromium.org V8_INLINE(static uint8_t GetNodeState(internal::Object** obj)) { 5558d16d8531698e91e9c60a7db9e0ba3c3bb15aff20mvstanton@chromium.org uint8_t* addr = reinterpret_cast<uint8_t*>(obj) + kNodeFlagsOffset; 5559d16d8531698e91e9c60a7db9e0ba3c3bb15aff20mvstanton@chromium.org return *addr & kNodeStateMask; 5560d16d8531698e91e9c60a7db9e0ba3c3bb15aff20mvstanton@chromium.org } 5561d16d8531698e91e9c60a7db9e0ba3c3bb15aff20mvstanton@chromium.org 5562d16d8531698e91e9c60a7db9e0ba3c3bb15aff20mvstanton@chromium.org V8_INLINE(static void UpdateNodeState(internal::Object** obj, 5563d16d8531698e91e9c60a7db9e0ba3c3bb15aff20mvstanton@chromium.org uint8_t value)) { 5564d16d8531698e91e9c60a7db9e0ba3c3bb15aff20mvstanton@chromium.org uint8_t* addr = reinterpret_cast<uint8_t*>(obj) + kNodeFlagsOffset; 5565594006017e46d82ed7146611dc12c20e3c509c7ddanno@chromium.org *addr = static_cast<uint8_t>((*addr & ~kNodeStateMask) | value); 5566d16d8531698e91e9c60a7db9e0ba3c3bb15aff20mvstanton@chromium.org } 5567d16d8531698e91e9c60a7db9e0ba3c3bb15aff20mvstanton@chromium.org 556832280cf2786219b2d9a668f7f00778fb59ac40b3mstarzinger@chromium.org V8_INLINE(static void SetEmbedderData(v8::Isolate* isolate, void* data)) { 5569efdb9d70bddd496ceb6a281dadcc065efbce37a1yangguo@chromium.org uint8_t* addr = reinterpret_cast<uint8_t*>(isolate) + 5570efdb9d70bddd496ceb6a281dadcc065efbce37a1yangguo@chromium.org kIsolateEmbedderDataOffset; 5571efdb9d70bddd496ceb6a281dadcc065efbce37a1yangguo@chromium.org *reinterpret_cast<void**>(addr) = data; 5572efdb9d70bddd496ceb6a281dadcc065efbce37a1yangguo@chromium.org } 5573efdb9d70bddd496ceb6a281dadcc065efbce37a1yangguo@chromium.org 557432280cf2786219b2d9a668f7f00778fb59ac40b3mstarzinger@chromium.org V8_INLINE(static void* GetEmbedderData(v8::Isolate* isolate)) { 5575efdb9d70bddd496ceb6a281dadcc065efbce37a1yangguo@chromium.org uint8_t* addr = reinterpret_cast<uint8_t*>(isolate) + 5576efdb9d70bddd496ceb6a281dadcc065efbce37a1yangguo@chromium.org kIsolateEmbedderDataOffset; 5577efdb9d70bddd496ceb6a281dadcc065efbce37a1yangguo@chromium.org return *reinterpret_cast<void**>(addr); 5578efdb9d70bddd496ceb6a281dadcc065efbce37a1yangguo@chromium.org } 5579efdb9d70bddd496ceb6a281dadcc065efbce37a1yangguo@chromium.org 558032280cf2786219b2d9a668f7f00778fb59ac40b3mstarzinger@chromium.org V8_INLINE(static internal::Object** GetRoot(v8::Isolate* isolate, 558132280cf2786219b2d9a668f7f00778fb59ac40b3mstarzinger@chromium.org int index)) { 5582efdb9d70bddd496ceb6a281dadcc065efbce37a1yangguo@chromium.org uint8_t* addr = reinterpret_cast<uint8_t*>(isolate) + kIsolateRootsOffset; 5583efdb9d70bddd496ceb6a281dadcc065efbce37a1yangguo@chromium.org return reinterpret_cast<internal::Object**>(addr + index * kApiPointerSize); 5584efdb9d70bddd496ceb6a281dadcc065efbce37a1yangguo@chromium.org } 5585efdb9d70bddd496ceb6a281dadcc065efbce37a1yangguo@chromium.org 558618ad94b919217ffbcd2d3159eeb5f8c588761c47ager@chromium.org template <typename T> 558732280cf2786219b2d9a668f7f00778fb59ac40b3mstarzinger@chromium.org V8_INLINE(static T ReadField(Object* ptr, int offset)) { 558818ad94b919217ffbcd2d3159eeb5f8c588761c47ager@chromium.org uint8_t* addr = reinterpret_cast<uint8_t*>(ptr) + offset - kHeapObjectTag; 558918ad94b919217ffbcd2d3159eeb5f8c588761c47ager@chromium.org return *reinterpret_cast<T*>(addr); 559018ad94b919217ffbcd2d3159eeb5f8c588761c47ager@chromium.org } 5591ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org 5592eeb44b681a16e45f1415dfacff0ba3dba9de5d8cyangguo@chromium.org template <typename T> 559332280cf2786219b2d9a668f7f00778fb59ac40b3mstarzinger@chromium.org V8_INLINE(static T ReadEmbedderData(Context* context, int index)) { 5594eeb44b681a16e45f1415dfacff0ba3dba9de5d8cyangguo@chromium.org typedef internal::Object O; 5595eeb44b681a16e45f1415dfacff0ba3dba9de5d8cyangguo@chromium.org typedef internal::Internals I; 5596eeb44b681a16e45f1415dfacff0ba3dba9de5d8cyangguo@chromium.org O* ctx = *reinterpret_cast<O**>(context); 5597eeb44b681a16e45f1415dfacff0ba3dba9de5d8cyangguo@chromium.org int embedder_data_offset = I::kContextHeaderSize + 5598eeb44b681a16e45f1415dfacff0ba3dba9de5d8cyangguo@chromium.org (internal::kApiPointerSize * I::kContextEmbedderDataIndex); 5599eeb44b681a16e45f1415dfacff0ba3dba9de5d8cyangguo@chromium.org O* embedder_data = I::ReadField<O*>(ctx, embedder_data_offset); 5600eeb44b681a16e45f1415dfacff0ba3dba9de5d8cyangguo@chromium.org int value_offset = 5601eeb44b681a16e45f1415dfacff0ba3dba9de5d8cyangguo@chromium.org I::kFixedArrayHeaderSize + (internal::kApiPointerSize * index); 5602eeb44b681a16e45f1415dfacff0ba3dba9de5d8cyangguo@chromium.org return I::ReadField<T>(embedder_data, value_offset); 5603eeb44b681a16e45f1415dfacff0ba3dba9de5d8cyangguo@chromium.org } 5604eeb44b681a16e45f1415dfacff0ba3dba9de5d8cyangguo@chromium.org 560532280cf2786219b2d9a668f7f00778fb59ac40b3mstarzinger@chromium.org V8_INLINE(static bool CanCastToHeapObject(void* o)) { return false; } 560632280cf2786219b2d9a668f7f00778fb59ac40b3mstarzinger@chromium.org V8_INLINE(static bool CanCastToHeapObject(Context* o)) { return true; } 560732280cf2786219b2d9a668f7f00778fb59ac40b3mstarzinger@chromium.org V8_INLINE(static bool CanCastToHeapObject(String* o)) { return true; } 560832280cf2786219b2d9a668f7f00778fb59ac40b3mstarzinger@chromium.org V8_INLINE(static bool CanCastToHeapObject(Object* o)) { return true; } 560932280cf2786219b2d9a668f7f00778fb59ac40b3mstarzinger@chromium.org V8_INLINE(static bool CanCastToHeapObject(Message* o)) { return true; } 561032280cf2786219b2d9a668f7f00778fb59ac40b3mstarzinger@chromium.org V8_INLINE(static bool CanCastToHeapObject(StackTrace* o)) { return true; } 561132280cf2786219b2d9a668f7f00778fb59ac40b3mstarzinger@chromium.org V8_INLINE(static bool CanCastToHeapObject(StackFrame* o)) { return true; } 561218ad94b919217ffbcd2d3159eeb5f8c588761c47ager@chromium.org}; 561318ad94b919217ffbcd2d3159eeb5f8c588761c47ager@chromium.org 5614f0ac72dfa39ec827de605aafc57d4834237aa7f3whesse@chromium.org} // namespace internal 561518ad94b919217ffbcd2d3159eeb5f8c588761c47ager@chromium.org 561618ad94b919217ffbcd2d3159eeb5f8c588761c47ager@chromium.org 561743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansentemplate <class T> 561843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenLocal<T>::Local() : Handle<T>() { } 561943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 562043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 562143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansentemplate <class T> 562243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenLocal<T> Local<T>::New(Handle<T> that) { 562343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen if (that.IsEmpty()) return Local<T>(); 5624ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org T* that_ptr = *that; 5625ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org internal::Object** p = reinterpret_cast<internal::Object**>(that_ptr); 5626ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org if (internal::Internals::CanCastToHeapObject(that_ptr)) { 5627ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org return Local<T>(reinterpret_cast<T*>(HandleScope::CreateHandle( 5628ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org reinterpret_cast<internal::HeapObject*>(*p)))); 5629ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org } 563043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen return Local<T>(reinterpret_cast<T*>(HandleScope::CreateHandle(*p))); 563143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} 563243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 563343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 563443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansentemplate <class T> 5635d16d8531698e91e9c60a7db9e0ba3c3bb15aff20mvstanton@chromium.orgLocal<T> Local<T>::New(Isolate* isolate, Handle<T> that) { 563657ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org return New(isolate, that.val_); 563757ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org} 563857ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org 563957ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org#ifndef V8_USE_UNSAFE_HANDLES 564057ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.orgtemplate <class T> 564157ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.orgLocal<T> Local<T>::New(Isolate* isolate, const Persistent<T>& that) { 564257ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org return New(isolate, that.val_); 564357ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org} 564457ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org 564557ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.orgtemplate <class T> 564657ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.orgHandle<T> Handle<T>::New(Isolate* isolate, T* that) { 564757ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org if (that == NULL) return Handle<T>(); 564857ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org T* that_ptr = that; 564957ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org internal::Object** p = reinterpret_cast<internal::Object**>(that_ptr); 565057ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org return Handle<T>(reinterpret_cast<T*>(HandleScope::CreateHandle( 565157ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org reinterpret_cast<internal::Isolate*>(isolate), *p))); 565257ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org} 565357ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org#endif 565457ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org 565557ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org 565657ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.orgtemplate <class T> 565757ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.orgLocal<T> Local<T>::New(Isolate* isolate, T* that) { 565857ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org if (that == NULL) return Local<T>(); 565957ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org T* that_ptr = that; 566032280cf2786219b2d9a668f7f00778fb59ac40b3mstarzinger@chromium.org internal::Object** p = reinterpret_cast<internal::Object**>(that_ptr); 566132280cf2786219b2d9a668f7f00778fb59ac40b3mstarzinger@chromium.org return Local<T>(reinterpret_cast<T*>(HandleScope::CreateHandle( 566232280cf2786219b2d9a668f7f00778fb59ac40b3mstarzinger@chromium.org reinterpret_cast<internal::Isolate*>(isolate), *p))); 566332280cf2786219b2d9a668f7f00778fb59ac40b3mstarzinger@chromium.org} 566432280cf2786219b2d9a668f7f00778fb59ac40b3mstarzinger@chromium.org 566532280cf2786219b2d9a668f7f00778fb59ac40b3mstarzinger@chromium.org 5666594006017e46d82ed7146611dc12c20e3c509c7ddanno@chromium.orgtemplate<class T> 5667594006017e46d82ed7146611dc12c20e3c509c7ddanno@chromium.orgint Local<T>::Eternalize(Isolate* isolate) { 5668594006017e46d82ed7146611dc12c20e3c509c7ddanno@chromium.org return V8::Eternalize(reinterpret_cast<internal::Isolate*>(isolate), 5669594006017e46d82ed7146611dc12c20e3c509c7ddanno@chromium.org reinterpret_cast<internal::Object**>(this->val_)); 5670594006017e46d82ed7146611dc12c20e3c509c7ddanno@chromium.org} 5671594006017e46d82ed7146611dc12c20e3c509c7ddanno@chromium.org 5672594006017e46d82ed7146611dc12c20e3c509c7ddanno@chromium.org 5673594006017e46d82ed7146611dc12c20e3c509c7ddanno@chromium.orgtemplate<class T> 5674594006017e46d82ed7146611dc12c20e3c509c7ddanno@chromium.orgLocal<T> Local<T>::GetEternal(Isolate* isolate, int index) { 5675594006017e46d82ed7146611dc12c20e3c509c7ddanno@chromium.org internal::Object** handle = 5676594006017e46d82ed7146611dc12c20e3c509c7ddanno@chromium.org V8::GetEternal(reinterpret_cast<internal::Isolate*>(isolate), index); 5677594006017e46d82ed7146611dc12c20e3c509c7ddanno@chromium.org return Local<T>(T::Cast(reinterpret_cast<Value*>(handle))); 5678594006017e46d82ed7146611dc12c20e3c509c7ddanno@chromium.org} 5679594006017e46d82ed7146611dc12c20e3c509c7ddanno@chromium.org 5680594006017e46d82ed7146611dc12c20e3c509c7ddanno@chromium.org 5681f95d4b920abb640ab0986d138ad559a7d3b91d04danno@chromium.org#ifdef V8_USE_UNSAFE_HANDLES 568232280cf2786219b2d9a668f7f00778fb59ac40b3mstarzinger@chromium.orgtemplate <class T> 568343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenPersistent<T> Persistent<T>::New(Handle<T> that) { 568457ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org return New(Isolate::GetCurrent(), that.val_); 5685d16d8531698e91e9c60a7db9e0ba3c3bb15aff20mvstanton@chromium.org} 5686d16d8531698e91e9c60a7db9e0ba3c3bb15aff20mvstanton@chromium.org 5687d16d8531698e91e9c60a7db9e0ba3c3bb15aff20mvstanton@chromium.org 5688d16d8531698e91e9c60a7db9e0ba3c3bb15aff20mvstanton@chromium.orgtemplate <class T> 5689d16d8531698e91e9c60a7db9e0ba3c3bb15aff20mvstanton@chromium.orgPersistent<T> Persistent<T>::New(Isolate* isolate, Handle<T> that) { 569057ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org return New(Isolate::GetCurrent(), that.val_); 569157ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org} 569257ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org 569357ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.orgtemplate <class T> 569457ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.orgPersistent<T> Persistent<T>::New(Isolate* isolate, Persistent<T> that) { 569557ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org return New(Isolate::GetCurrent(), that.val_); 569657ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org} 569757ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org#endif 569857ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org 5699f95d4b920abb640ab0986d138ad559a7d3b91d04danno@chromium.org 570057ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.orgtemplate <class T> 5701f95d4b920abb640ab0986d138ad559a7d3b91d04danno@chromium.orgT* Persistent<T>::New(Isolate* isolate, T* that) { 5702f95d4b920abb640ab0986d138ad559a7d3b91d04danno@chromium.org if (that == NULL) return NULL; 570357ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org internal::Object** p = reinterpret_cast<internal::Object**>(that); 5704f95d4b920abb640ab0986d138ad559a7d3b91d04danno@chromium.org return reinterpret_cast<T*>( 5705d16d8531698e91e9c60a7db9e0ba3c3bb15aff20mvstanton@chromium.org V8::GlobalizeReference(reinterpret_cast<internal::Isolate*>(isolate), 5706f95d4b920abb640ab0986d138ad559a7d3b91d04danno@chromium.org p)); 570743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} 570843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 570943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 571043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansentemplate <class T> 571189e18f5599cb4cd462cb1ed324addd7388fb4d60rossberg@chromium.orgbool Persistent<T>::IsIndependent() const { 571246a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org typedef internal::Internals I; 5713e4ee6de0de64744d55b63da83156827c989c7099verwaest@chromium.org if (this->IsEmpty()) return false; 571457ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org return I::GetNodeFlag(reinterpret_cast<internal::Object**>(this->val_), 571546a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org I::kNodeIsIndependentShift); 5716e4ee6de0de64744d55b63da83156827c989c7099verwaest@chromium.org} 5717e4ee6de0de64744d55b63da83156827c989c7099verwaest@chromium.org 5718e4ee6de0de64744d55b63da83156827c989c7099verwaest@chromium.org 5719e4ee6de0de64744d55b63da83156827c989c7099verwaest@chromium.orgtemplate <class T> 57203291210ab99f306b74430ebbc4b7d939629e699fager@chromium.orgbool Persistent<T>::IsNearDeath() const { 5721d16d8531698e91e9c60a7db9e0ba3c3bb15aff20mvstanton@chromium.org typedef internal::Internals I; 572243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen if (this->IsEmpty()) return false; 5723c16e8281e6e3e3b57e157b62d5a1ca530e23e4bfdanno@chromium.org uint8_t node_state = 5724c16e8281e6e3e3b57e157b62d5a1ca530e23e4bfdanno@chromium.org I::GetNodeState(reinterpret_cast<internal::Object**>(this->val_)); 5725c16e8281e6e3e3b57e157b62d5a1ca530e23e4bfdanno@chromium.org return node_state == I::kNodeStateIsNearDeathValue || 5726c16e8281e6e3e3b57e157b62d5a1ca530e23e4bfdanno@chromium.org node_state == I::kNodeStateIsPendingValue; 572743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} 572843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 572943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 573043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansentemplate <class T> 57313291210ab99f306b74430ebbc4b7d939629e699fager@chromium.orgbool Persistent<T>::IsWeak() const { 5732d16d8531698e91e9c60a7db9e0ba3c3bb15aff20mvstanton@chromium.org typedef internal::Internals I; 573332280cf2786219b2d9a668f7f00778fb59ac40b3mstarzinger@chromium.org if (this->IsEmpty()) return false; 573457ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org return I::GetNodeState(reinterpret_cast<internal::Object**>(this->val_)) == 5735d16d8531698e91e9c60a7db9e0ba3c3bb15aff20mvstanton@chromium.org I::kNodeStateIsWeakValue; 573632280cf2786219b2d9a668f7f00778fb59ac40b3mstarzinger@chromium.org} 573732280cf2786219b2d9a668f7f00778fb59ac40b3mstarzinger@chromium.org 573832280cf2786219b2d9a668f7f00778fb59ac40b3mstarzinger@chromium.org 573932280cf2786219b2d9a668f7f00778fb59ac40b3mstarzinger@chromium.orgtemplate <class T> 574043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenvoid Persistent<T>::Dispose() { 5741a53e8e03bcb23716d1025de362626f90f00da892svenpanne@chromium.org if (this->IsEmpty()) return; 5742a53e8e03bcb23716d1025de362626f90f00da892svenpanne@chromium.org V8::DisposeGlobal(reinterpret_cast<internal::Object**>(this->val_)); 5743a53e8e03bcb23716d1025de362626f90f00da892svenpanne@chromium.org#ifndef V8_USE_UNSAFE_HANDLES 5744a53e8e03bcb23716d1025de362626f90f00da892svenpanne@chromium.org val_ = 0; 5745a53e8e03bcb23716d1025de362626f90f00da892svenpanne@chromium.org#endif 574643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} 574743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 574843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 574943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansentemplate <class T> 575057ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.orgtemplate <typename S, typename P> 575157ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.orgvoid Persistent<T>::MakeWeak( 575257ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org P* parameters, 575357ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org typename WeakReferenceCallbacks<S, P>::Revivable callback) { 575457ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org TYPE_CHECK(S, T); 575557ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org typedef typename WeakReferenceCallbacks<Value, void>::Revivable Revivable; 5756b99c75496e05b4cd58815ada1e39e6029130d11crossberg@chromium.org V8::MakeWeak(reinterpret_cast<internal::Object**>(this->val_), 575718ad94b919217ffbcd2d3159eeb5f8c588761c47ager@chromium.org parameters, 575879e7902fa5f94747b5383dd40f3002dd8b62303arossberg@chromium.org reinterpret_cast<Revivable>(callback)); 575943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} 576043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 576157ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org 576257ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.orgtemplate <class T> 576357ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.orgtemplate <typename P> 576457ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.orgvoid Persistent<T>::MakeWeak( 576557ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org P* parameters, 576657ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org typename WeakReferenceCallbacks<T, P>::Revivable callback) { 5767b99c75496e05b4cd58815ada1e39e6029130d11crossberg@chromium.org MakeWeak<T, P>(parameters, callback); 576857ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org} 576957ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org 577057ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org 577143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansentemplate <class T> 5772f95d4b920abb640ab0986d138ad559a7d3b91d04danno@chromium.orgtemplate <typename S, typename P> 5773f95d4b920abb640ab0986d138ad559a7d3b91d04danno@chromium.orgvoid Persistent<T>::MakeWeak( 5774f95d4b920abb640ab0986d138ad559a7d3b91d04danno@chromium.org Isolate* isolate, 5775f95d4b920abb640ab0986d138ad559a7d3b91d04danno@chromium.org P* parameters, 5776f95d4b920abb640ab0986d138ad559a7d3b91d04danno@chromium.org typename WeakReferenceCallbacks<S, P>::Revivable callback) { 5777f95d4b920abb640ab0986d138ad559a7d3b91d04danno@chromium.org MakeWeak<S, P>(parameters, callback); 5778f95d4b920abb640ab0986d138ad559a7d3b91d04danno@chromium.org} 5779f95d4b920abb640ab0986d138ad559a7d3b91d04danno@chromium.org 5780f95d4b920abb640ab0986d138ad559a7d3b91d04danno@chromium.org 5781f95d4b920abb640ab0986d138ad559a7d3b91d04danno@chromium.orgtemplate <class T> 5782f95d4b920abb640ab0986d138ad559a7d3b91d04danno@chromium.orgtemplate<typename P> 5783f95d4b920abb640ab0986d138ad559a7d3b91d04danno@chromium.orgvoid Persistent<T>::MakeWeak( 5784f95d4b920abb640ab0986d138ad559a7d3b91d04danno@chromium.org Isolate* isolate, 5785f95d4b920abb640ab0986d138ad559a7d3b91d04danno@chromium.org P* parameters, 5786f95d4b920abb640ab0986d138ad559a7d3b91d04danno@chromium.org typename WeakReferenceCallbacks<T, P>::Revivable callback) { 5787f95d4b920abb640ab0986d138ad559a7d3b91d04danno@chromium.org MakeWeak<P>(parameters, callback); 5788f95d4b920abb640ab0986d138ad559a7d3b91d04danno@chromium.org} 5789f95d4b920abb640ab0986d138ad559a7d3b91d04danno@chromium.org 5790f95d4b920abb640ab0986d138ad559a7d3b91d04danno@chromium.org 5791f95d4b920abb640ab0986d138ad559a7d3b91d04danno@chromium.orgtemplate <class T> 579243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenvoid Persistent<T>::ClearWeak() { 5793b99c75496e05b4cd58815ada1e39e6029130d11crossberg@chromium.org V8::ClearWeak(reinterpret_cast<internal::Object**>(this->val_)); 5794d16d8531698e91e9c60a7db9e0ba3c3bb15aff20mvstanton@chromium.org} 5795d16d8531698e91e9c60a7db9e0ba3c3bb15aff20mvstanton@chromium.org 579643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 5797b08986cb66c3f6687247cb6da186c1e73057e399whesse@chromium.orgtemplate <class T> 5798c53e10d01c5495df3896b9d318910b58688c6929kmillikin@chromium.orgvoid Persistent<T>::MarkIndependent() { 579946a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org typedef internal::Internals I; 580046a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org if (this->IsEmpty()) return; 580157ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org I::UpdateNodeFlag(reinterpret_cast<internal::Object**>(this->val_), 5802d16d8531698e91e9c60a7db9e0ba3c3bb15aff20mvstanton@chromium.org true, 5803d16d8531698e91e9c60a7db9e0ba3c3bb15aff20mvstanton@chromium.org I::kNodeIsIndependentShift); 5804e4ac3ef2f6fa9300bc78c5a4cb7d4cb66ac6e83dmvstanton@chromium.org} 5805e4ac3ef2f6fa9300bc78c5a4cb7d4cb66ac6e83dmvstanton@chromium.org 5806e4ac3ef2f6fa9300bc78c5a4cb7d4cb66ac6e83dmvstanton@chromium.org 5807e4ac3ef2f6fa9300bc78c5a4cb7d4cb66ac6e83dmvstanton@chromium.orgtemplate <class T> 5808b99c75496e05b4cd58815ada1e39e6029130d11crossberg@chromium.orgvoid Persistent<T>::MarkPartiallyDependent() { 580946a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org typedef internal::Internals I; 581046a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org if (this->IsEmpty()) return; 581157ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org I::UpdateNodeFlag(reinterpret_cast<internal::Object**>(this->val_), 5812d16d8531698e91e9c60a7db9e0ba3c3bb15aff20mvstanton@chromium.org true, 5813d16d8531698e91e9c60a7db9e0ba3c3bb15aff20mvstanton@chromium.org I::kNodeIsPartiallyDependentShift); 5814e4ac3ef2f6fa9300bc78c5a4cb7d4cb66ac6e83dmvstanton@chromium.org} 5815e4ac3ef2f6fa9300bc78c5a4cb7d4cb66ac6e83dmvstanton@chromium.org 5816906e2fb760f52fe6e75b744b1ea42576ea5b2c29ulan@chromium.org 5817d16d8531698e91e9c60a7db9e0ba3c3bb15aff20mvstanton@chromium.orgtemplate <class T> 581857ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.orgvoid Persistent<T>::Reset(Isolate* isolate, const Handle<T>& other) { 581957ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org Dispose(isolate); 582057ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org#ifdef V8_USE_UNSAFE_HANDLES 582157ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org *this = *New(isolate, other); 582257ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org#else 582357ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org if (other.IsEmpty()) { 582457ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org this->val_ = NULL; 582557ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org return; 582657ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org } 582757ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org internal::Object** p = reinterpret_cast<internal::Object**>(other.val_); 582857ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org this->val_ = reinterpret_cast<T*>( 582957ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org V8::GlobalizeReference(reinterpret_cast<internal::Isolate*>(isolate), p)); 583057ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org#endif 583157ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org} 583257ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org 5833906e2fb760f52fe6e75b744b1ea42576ea5b2c29ulan@chromium.org 5834b99c75496e05b4cd58815ada1e39e6029130d11crossberg@chromium.org#ifndef V8_USE_UNSAFE_HANDLES 5835b99c75496e05b4cd58815ada1e39e6029130d11crossberg@chromium.orgtemplate <class T> 5836b99c75496e05b4cd58815ada1e39e6029130d11crossberg@chromium.orgvoid Persistent<T>::Reset(Isolate* isolate, const Persistent<T>& other) { 5837b99c75496e05b4cd58815ada1e39e6029130d11crossberg@chromium.org Dispose(isolate); 5838b99c75496e05b4cd58815ada1e39e6029130d11crossberg@chromium.org if (other.IsEmpty()) { 5839b99c75496e05b4cd58815ada1e39e6029130d11crossberg@chromium.org this->val_ = NULL; 5840b99c75496e05b4cd58815ada1e39e6029130d11crossberg@chromium.org return; 5841b99c75496e05b4cd58815ada1e39e6029130d11crossberg@chromium.org } 5842b99c75496e05b4cd58815ada1e39e6029130d11crossberg@chromium.org internal::Object** p = reinterpret_cast<internal::Object**>(other.val_); 5843b99c75496e05b4cd58815ada1e39e6029130d11crossberg@chromium.org this->val_ = reinterpret_cast<T*>( 5844b99c75496e05b4cd58815ada1e39e6029130d11crossberg@chromium.org V8::GlobalizeReference(reinterpret_cast<internal::Isolate*>(isolate), p)); 5845b99c75496e05b4cd58815ada1e39e6029130d11crossberg@chromium.org} 5846b99c75496e05b4cd58815ada1e39e6029130d11crossberg@chromium.org#endif 5847b99c75496e05b4cd58815ada1e39e6029130d11crossberg@chromium.org 5848b99c75496e05b4cd58815ada1e39e6029130d11crossberg@chromium.org 5849906e2fb760f52fe6e75b744b1ea42576ea5b2c29ulan@chromium.orgtemplate <class T> 5850906e2fb760f52fe6e75b744b1ea42576ea5b2c29ulan@chromium.orgT* Persistent<T>::ClearAndLeak() { 5851906e2fb760f52fe6e75b744b1ea42576ea5b2c29ulan@chromium.org T* old; 5852906e2fb760f52fe6e75b744b1ea42576ea5b2c29ulan@chromium.org#ifdef V8_USE_UNSAFE_HANDLES 5853906e2fb760f52fe6e75b744b1ea42576ea5b2c29ulan@chromium.org old = **this; 5854906e2fb760f52fe6e75b744b1ea42576ea5b2c29ulan@chromium.org *this = Persistent<T>(); 5855906e2fb760f52fe6e75b744b1ea42576ea5b2c29ulan@chromium.org#else 5856906e2fb760f52fe6e75b744b1ea42576ea5b2c29ulan@chromium.org old = val_; 5857906e2fb760f52fe6e75b744b1ea42576ea5b2c29ulan@chromium.org val_ = NULL; 5858906e2fb760f52fe6e75b744b1ea42576ea5b2c29ulan@chromium.org#endif 5859906e2fb760f52fe6e75b744b1ea42576ea5b2c29ulan@chromium.org return old; 5860906e2fb760f52fe6e75b744b1ea42576ea5b2c29ulan@chromium.org} 5861906e2fb760f52fe6e75b744b1ea42576ea5b2c29ulan@chromium.org 5862906e2fb760f52fe6e75b744b1ea42576ea5b2c29ulan@chromium.org 586357ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.orgtemplate <class T> 5864b99c75496e05b4cd58815ada1e39e6029130d11crossberg@chromium.orgvoid Persistent<T>::SetWrapperClassId(uint16_t class_id) { 586546a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org typedef internal::Internals I; 5866d16d8531698e91e9c60a7db9e0ba3c3bb15aff20mvstanton@chromium.org if (this->IsEmpty()) return; 586757ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org internal::Object** obj = reinterpret_cast<internal::Object**>(this->val_); 586846a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org uint8_t* addr = reinterpret_cast<uint8_t*>(obj) + I::kNodeClassIdOffset; 586946a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org *reinterpret_cast<uint16_t*>(addr) = class_id; 5870b08986cb66c3f6687247cb6da186c1e73057e399whesse@chromium.org} 587169ea3965ef6e0d3f020a402cf7e6b96b9cb651aekmillikin@chromium.org 5872d16d8531698e91e9c60a7db9e0ba3c3bb15aff20mvstanton@chromium.org 5873d16d8531698e91e9c60a7db9e0ba3c3bb15aff20mvstanton@chromium.orgtemplate <class T> 5874b99c75496e05b4cd58815ada1e39e6029130d11crossberg@chromium.orguint16_t Persistent<T>::WrapperClassId() const { 587546a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org typedef internal::Internals I; 5876d16d8531698e91e9c60a7db9e0ba3c3bb15aff20mvstanton@chromium.org if (this->IsEmpty()) return 0; 587757ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org internal::Object** obj = reinterpret_cast<internal::Object**>(this->val_); 587846a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org uint8_t* addr = reinterpret_cast<uint8_t*>(obj) + I::kNodeClassIdOffset; 587946a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org return *reinterpret_cast<uint16_t*>(addr); 588089e18f5599cb4cd462cb1ed324addd7388fb4d60rossberg@chromium.org} 588189e18f5599cb4cd462cb1ed324addd7388fb4d60rossberg@chromium.org 5882bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.org 5883bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.orgtemplate<typename T> 5884bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.orgReturnValue<T>::ReturnValue(internal::Object** slot) : value_(slot) {} 5885bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.org 5886bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.orgtemplate<typename T> 5887c118402c43ae44cf9255d36608a44886c98537c5jkummerow@chromium.orgtemplate<typename S> 5888c118402c43ae44cf9255d36608a44886c98537c5jkummerow@chromium.orgvoid ReturnValue<T>::Set(const Persistent<S>& handle) { 5889c118402c43ae44cf9255d36608a44886c98537c5jkummerow@chromium.org TYPE_CHECK(T, S); 5890b99c75496e05b4cd58815ada1e39e6029130d11crossberg@chromium.org if (V8_UNLIKELY(handle.IsEmpty())) { 58918a00e82ec5c3dbedfd3dcb56996c7df2452da4a5verwaest@chromium.org *value_ = GetDefaultValue(); 5892b99c75496e05b4cd58815ada1e39e6029130d11crossberg@chromium.org } else { 5893b99c75496e05b4cd58815ada1e39e6029130d11crossberg@chromium.org *value_ = *reinterpret_cast<internal::Object**>(*handle); 5894b99c75496e05b4cd58815ada1e39e6029130d11crossberg@chromium.org } 5895bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.org} 5896bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.org 5897bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.orgtemplate<typename T> 5898c118402c43ae44cf9255d36608a44886c98537c5jkummerow@chromium.orgtemplate<typename S> 5899c118402c43ae44cf9255d36608a44886c98537c5jkummerow@chromium.orgvoid ReturnValue<T>::Set(const Handle<S> handle) { 5900c118402c43ae44cf9255d36608a44886c98537c5jkummerow@chromium.org TYPE_CHECK(T, S); 5901b99c75496e05b4cd58815ada1e39e6029130d11crossberg@chromium.org if (V8_UNLIKELY(handle.IsEmpty())) { 59028a00e82ec5c3dbedfd3dcb56996c7df2452da4a5verwaest@chromium.org *value_ = GetDefaultValue(); 5903b99c75496e05b4cd58815ada1e39e6029130d11crossberg@chromium.org } else { 5904b99c75496e05b4cd58815ada1e39e6029130d11crossberg@chromium.org *value_ = *reinterpret_cast<internal::Object**>(*handle); 5905b99c75496e05b4cd58815ada1e39e6029130d11crossberg@chromium.org } 5906bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.org} 5907bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.org 5908bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.orgtemplate<typename T> 590953ad17558c81e6099cef4442237d7da643a5becfsvenpanne@chromium.orgvoid ReturnValue<T>::Set(double i) { 5910b752d4061aaeb7d6a6ec368607871789d54b0207dslomov@chromium.org TYPE_CHECK(T, Number); 591153ad17558c81e6099cef4442237d7da643a5becfsvenpanne@chromium.org Set(Number::New(GetIsolate(), i)); 5912bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.org} 5913bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.org 5914bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.orgtemplate<typename T> 591553ad17558c81e6099cef4442237d7da643a5becfsvenpanne@chromium.orgvoid ReturnValue<T>::Set(int32_t i) { 5916b752d4061aaeb7d6a6ec368607871789d54b0207dslomov@chromium.org TYPE_CHECK(T, Integer); 5917bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.org typedef internal::Internals I; 5918bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.org if (V8_LIKELY(I::IsValidSmi(i))) { 5919bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.org *value_ = I::IntToSmi(i); 5920bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.org return; 5921bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.org } 592253ad17558c81e6099cef4442237d7da643a5becfsvenpanne@chromium.org Set(Integer::New(i, GetIsolate())); 5923bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.org} 5924bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.org 5925bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.orgtemplate<typename T> 592653ad17558c81e6099cef4442237d7da643a5becfsvenpanne@chromium.orgvoid ReturnValue<T>::Set(uint32_t i) { 5927b752d4061aaeb7d6a6ec368607871789d54b0207dslomov@chromium.org TYPE_CHECK(T, Integer); 5928bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.org typedef internal::Internals I; 59291fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org // Can't simply use INT32_MAX here for whatever reason. 5930594006017e46d82ed7146611dc12c20e3c509c7ddanno@chromium.org bool fits_into_int32_t = (i & (1U << 31)) == 0; 59311fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org if (V8_LIKELY(fits_into_int32_t)) { 59321fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org Set(static_cast<int32_t>(i)); 5933bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.org return; 5934bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.org } 593553ad17558c81e6099cef4442237d7da643a5becfsvenpanne@chromium.org Set(Integer::NewFromUnsigned(i, GetIsolate())); 5936bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.org} 5937bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.org 5938bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.orgtemplate<typename T> 593953ad17558c81e6099cef4442237d7da643a5becfsvenpanne@chromium.orgvoid ReturnValue<T>::Set(bool value) { 5940b752d4061aaeb7d6a6ec368607871789d54b0207dslomov@chromium.org TYPE_CHECK(T, Boolean); 594153ad17558c81e6099cef4442237d7da643a5becfsvenpanne@chromium.org typedef internal::Internals I; 594253ad17558c81e6099cef4442237d7da643a5becfsvenpanne@chromium.org int root_index; 5943bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.org if (value) { 594453ad17558c81e6099cef4442237d7da643a5becfsvenpanne@chromium.org root_index = I::kTrueValueRootIndex; 5945bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.org } else { 594653ad17558c81e6099cef4442237d7da643a5becfsvenpanne@chromium.org root_index = I::kFalseValueRootIndex; 5947bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.org } 594853ad17558c81e6099cef4442237d7da643a5becfsvenpanne@chromium.org *value_ = *I::GetRoot(GetIsolate(), root_index); 5949bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.org} 5950bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.org 5951bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.orgtemplate<typename T> 595253ad17558c81e6099cef4442237d7da643a5becfsvenpanne@chromium.orgvoid ReturnValue<T>::SetNull() { 5953b752d4061aaeb7d6a6ec368607871789d54b0207dslomov@chromium.org TYPE_CHECK(T, Primitive); 5954bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.org typedef internal::Internals I; 595553ad17558c81e6099cef4442237d7da643a5becfsvenpanne@chromium.org *value_ = *I::GetRoot(GetIsolate(), I::kNullValueRootIndex); 5956bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.org} 5957bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.org 5958bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.orgtemplate<typename T> 595953ad17558c81e6099cef4442237d7da643a5becfsvenpanne@chromium.orgvoid ReturnValue<T>::SetUndefined() { 5960b752d4061aaeb7d6a6ec368607871789d54b0207dslomov@chromium.org TYPE_CHECK(T, Primitive); 5961bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.org typedef internal::Internals I; 596253ad17558c81e6099cef4442237d7da643a5becfsvenpanne@chromium.org *value_ = *I::GetRoot(GetIsolate(), I::kUndefinedValueRootIndex); 5963bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.org} 5964bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.org 5965bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.orgtemplate<typename T> 5966837a67edd9afdbfe1b59482b41693f59c48846ffulan@chromium.orgvoid ReturnValue<T>::SetEmptyString() { 5967b752d4061aaeb7d6a6ec368607871789d54b0207dslomov@chromium.org TYPE_CHECK(T, String); 5968837a67edd9afdbfe1b59482b41693f59c48846ffulan@chromium.org typedef internal::Internals I; 5969837a67edd9afdbfe1b59482b41693f59c48846ffulan@chromium.org *value_ = *I::GetRoot(GetIsolate(), I::kEmptyStringRootIndex); 5970837a67edd9afdbfe1b59482b41693f59c48846ffulan@chromium.org} 5971837a67edd9afdbfe1b59482b41693f59c48846ffulan@chromium.org 5972837a67edd9afdbfe1b59482b41693f59c48846ffulan@chromium.orgtemplate<typename T> 597353ad17558c81e6099cef4442237d7da643a5becfsvenpanne@chromium.orgIsolate* ReturnValue<T>::GetIsolate() { 59748a00e82ec5c3dbedfd3dcb56996c7df2452da4a5verwaest@chromium.org // Isolate is always the pointer below the default value on the stack. 59758a00e82ec5c3dbedfd3dcb56996c7df2452da4a5verwaest@chromium.org return *reinterpret_cast<Isolate**>(&value_[-2]); 59768a00e82ec5c3dbedfd3dcb56996c7df2452da4a5verwaest@chromium.org} 59778a00e82ec5c3dbedfd3dcb56996c7df2452da4a5verwaest@chromium.org 59788a00e82ec5c3dbedfd3dcb56996c7df2452da4a5verwaest@chromium.orgtemplate<typename T> 59798a00e82ec5c3dbedfd3dcb56996c7df2452da4a5verwaest@chromium.orginternal::Object* ReturnValue<T>::GetDefaultValue() { 59808a00e82ec5c3dbedfd3dcb56996c7df2452da4a5verwaest@chromium.org // Default value is always the pointer below value_ on the stack. 59818a00e82ec5c3dbedfd3dcb56996c7df2452da4a5verwaest@chromium.org return value_[-1]; 5982bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.org} 5983bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.org 5984bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.org 5985bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.orgtemplate<typename T> 5986bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.orgFunctionCallbackInfo<T>::FunctionCallbackInfo(internal::Object** implicit_args, 5987bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.org internal::Object** values, 5988bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.org int length, 5989bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.org bool is_construct_call) 5990e03fb64ef23331755b7986d2560bc4c00ba3e67bfschneider@chromium.org : implicit_args_(implicit_args), 5991e03fb64ef23331755b7986d2560bc4c00ba3e67bfschneider@chromium.org values_(values), 5992e03fb64ef23331755b7986d2560bc4c00ba3e67bfschneider@chromium.org length_(length), 5993e03fb64ef23331755b7986d2560bc4c00ba3e67bfschneider@chromium.org is_construct_call_(is_construct_call) { } 599469ea3965ef6e0d3f020a402cf7e6b96b9cb651aekmillikin@chromium.org 599569ea3965ef6e0d3f020a402cf7e6b96b9cb651aekmillikin@chromium.org 5996bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.orgArguments::Arguments(internal::Object** args, 5997bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.org internal::Object** values, 5998bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.org int length, 5999bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.org bool is_construct_call) 6000bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.org : FunctionCallbackInfo<Value>(args, values, length, is_construct_call) { } 6001bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.org 6002bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.org 6003bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.orgtemplate<typename T> 6004bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.orgLocal<Value> FunctionCallbackInfo<T>::operator[](int i) const { 600543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen if (i < 0 || length_ <= i) return Local<Value>(*Undefined()); 600643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen return Local<Value>(reinterpret_cast<Value*>(values_ - i)); 600743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} 600843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 600943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 6010bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.orgtemplate<typename T> 6011bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.orgLocal<Function> FunctionCallbackInfo<T>::Callee() const { 6012e03fb64ef23331755b7986d2560bc4c00ba3e67bfschneider@chromium.org return Local<Function>(reinterpret_cast<Function*>( 6013e03fb64ef23331755b7986d2560bc4c00ba3e67bfschneider@chromium.org &implicit_args_[kCalleeIndex])); 601443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} 601543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 601643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 6017bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.orgtemplate<typename T> 6018bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.orgLocal<Object> FunctionCallbackInfo<T>::This() const { 601943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen return Local<Object>(reinterpret_cast<Object*>(values_ + 1)); 602043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} 602143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 602243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 6023bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.orgtemplate<typename T> 6024bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.orgLocal<Object> FunctionCallbackInfo<T>::Holder() const { 6025e03fb64ef23331755b7986d2560bc4c00ba3e67bfschneider@chromium.org return Local<Object>(reinterpret_cast<Object*>( 6026e03fb64ef23331755b7986d2560bc4c00ba3e67bfschneider@chromium.org &implicit_args_[kHolderIndex])); 602743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} 602843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 602943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 6030bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.orgtemplate<typename T> 6031bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.orgLocal<Value> FunctionCallbackInfo<T>::Data() const { 6032e03fb64ef23331755b7986d2560bc4c00ba3e67bfschneider@chromium.org return Local<Value>(reinterpret_cast<Value*>(&implicit_args_[kDataIndex])); 603343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} 603443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 603543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 6036bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.orgtemplate<typename T> 6037bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.orgIsolate* FunctionCallbackInfo<T>::GetIsolate() const { 603828faa982749c4aa9c090939453dea14bb118f613jkummerow@chromium.org return *reinterpret_cast<Isolate**>(&implicit_args_[kIsolateIndex]); 603928faa982749c4aa9c090939453dea14bb118f613jkummerow@chromium.org} 604028faa982749c4aa9c090939453dea14bb118f613jkummerow@chromium.org 604128faa982749c4aa9c090939453dea14bb118f613jkummerow@chromium.org 6042bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.orgtemplate<typename T> 6043bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.orgReturnValue<T> FunctionCallbackInfo<T>::GetReturnValue() const { 6044bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.org return ReturnValue<T>(&implicit_args_[kReturnValueIndex]); 6045bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.org} 6046bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.org 6047bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.org 6048bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.orgtemplate<typename T> 6049bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.orgbool FunctionCallbackInfo<T>::IsConstructCall() const { 605043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen return is_construct_call_; 605143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} 605243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 605343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 6054bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.orgtemplate<typename T> 6055bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.orgint FunctionCallbackInfo<T>::Length() const { 605643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen return length_; 605743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} 605843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 605943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 606043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansentemplate <class T> 606143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenLocal<T> HandleScope::Close(Handle<T> value) { 606218ad94b919217ffbcd2d3159eeb5f8c588761c47ager@chromium.org internal::Object** before = reinterpret_cast<internal::Object**>(*value); 606318ad94b919217ffbcd2d3159eeb5f8c588761c47ager@chromium.org internal::Object** after = RawClose(before); 606443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen return Local<T>(reinterpret_cast<T*>(after)); 606543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} 606643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 60675a8ca6c70c6fc9716f18f6223c98d1fef5752cf6kasperl@chromium.orgHandle<Value> ScriptOrigin::ResourceName() const { 606843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen return resource_name_; 606943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} 607043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 607143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 60725a8ca6c70c6fc9716f18f6223c98d1fef5752cf6kasperl@chromium.orgHandle<Integer> ScriptOrigin::ResourceLineOffset() const { 607343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen return resource_line_offset_; 607443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} 607543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 607643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 60775a8ca6c70c6fc9716f18f6223c98d1fef5752cf6kasperl@chromium.orgHandle<Integer> ScriptOrigin::ResourceColumnOffset() const { 607843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen return resource_column_offset_; 607943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} 608043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 6081d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.orgHandle<Boolean> ScriptOrigin::ResourceIsSharedCrossOrigin() const { 6082d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.org return resource_is_shared_cross_origin_; 6083d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.org} 6084d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.org 608543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 608643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenHandle<Boolean> Boolean::New(bool value) { 608743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen return value ? True() : False(); 608843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} 608943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 609043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 609143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenvoid Template::Set(const char* name, v8::Handle<Data> value) { 609243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen Set(v8::String::New(name), value); 609343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} 609443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 609543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 609618ad94b919217ffbcd2d3159eeb5f8c588761c47ager@chromium.orgLocal<Value> Object::GetInternalField(int index) { 609718ad94b919217ffbcd2d3159eeb5f8c588761c47ager@chromium.org#ifndef V8_ENABLE_CHECKS 609818ad94b919217ffbcd2d3159eeb5f8c588761c47ager@chromium.org typedef internal::Object O; 609918ad94b919217ffbcd2d3159eeb5f8c588761c47ager@chromium.org typedef internal::Internals I; 610018ad94b919217ffbcd2d3159eeb5f8c588761c47ager@chromium.org O* obj = *reinterpret_cast<O**>(this); 6101eeb44b681a16e45f1415dfacff0ba3dba9de5d8cyangguo@chromium.org // Fast path: If the object is a plain JSObject, which is the common case, we 6102eeb44b681a16e45f1415dfacff0ba3dba9de5d8cyangguo@chromium.org // know where to find the internal fields and can return the value directly. 61039d58c2b1c27d8b2890b9bd46e57d3842b09e0292christian.plesner.hansen@gmail.com if (I::GetInstanceType(obj) == I::kJSObjectType) { 61044a6c3279070e8f133607a74c08d8c08ac394ab98erik.corry@gmail.com int offset = I::kJSObjectHeaderSize + (internal::kApiPointerSize * index); 610518ad94b919217ffbcd2d3159eeb5f8c588761c47ager@chromium.org O* value = I::ReadField<O*>(obj, offset); 610618ad94b919217ffbcd2d3159eeb5f8c588761c47ager@chromium.org O** result = HandleScope::CreateHandle(value); 610718ad94b919217ffbcd2d3159eeb5f8c588761c47ager@chromium.org return Local<Value>(reinterpret_cast<Value*>(result)); 610818ad94b919217ffbcd2d3159eeb5f8c588761c47ager@chromium.org } 610918ad94b919217ffbcd2d3159eeb5f8c588761c47ager@chromium.org#endif 6110eeb44b681a16e45f1415dfacff0ba3dba9de5d8cyangguo@chromium.org return SlowGetInternalField(index); 611118ad94b919217ffbcd2d3159eeb5f8c588761c47ager@chromium.org} 611218ad94b919217ffbcd2d3159eeb5f8c588761c47ager@chromium.org 611318ad94b919217ffbcd2d3159eeb5f8c588761c47ager@chromium.org 6114eeb44b681a16e45f1415dfacff0ba3dba9de5d8cyangguo@chromium.orgvoid* Object::GetAlignedPointerFromInternalField(int index) { 6115eeb44b681a16e45f1415dfacff0ba3dba9de5d8cyangguo@chromium.org#ifndef V8_ENABLE_CHECKS 61169d58c2b1c27d8b2890b9bd46e57d3842b09e0292christian.plesner.hansen@gmail.com typedef internal::Object O; 61179d58c2b1c27d8b2890b9bd46e57d3842b09e0292christian.plesner.hansen@gmail.com typedef internal::Internals I; 61189d58c2b1c27d8b2890b9bd46e57d3842b09e0292christian.plesner.hansen@gmail.com O* obj = *reinterpret_cast<O**>(this); 6119eeb44b681a16e45f1415dfacff0ba3dba9de5d8cyangguo@chromium.org // Fast path: If the object is a plain JSObject, which is the common case, we 6120eeb44b681a16e45f1415dfacff0ba3dba9de5d8cyangguo@chromium.org // know where to find the internal fields and can return the value directly. 6121ca29dd85fa02449d17188f5a6ff9a7cdf2ad9680danno@chromium.org if (V8_LIKELY(I::GetInstanceType(obj) == I::kJSObjectType)) { 61224a6c3279070e8f133607a74c08d8c08ac394ab98erik.corry@gmail.com int offset = I::kJSObjectHeaderSize + (internal::kApiPointerSize * index); 6123eeb44b681a16e45f1415dfacff0ba3dba9de5d8cyangguo@chromium.org return I::ReadField<void*>(obj, offset); 61249d58c2b1c27d8b2890b9bd46e57d3842b09e0292christian.plesner.hansen@gmail.com } 6125eeb44b681a16e45f1415dfacff0ba3dba9de5d8cyangguo@chromium.org#endif 6126eeb44b681a16e45f1415dfacff0ba3dba9de5d8cyangguo@chromium.org return SlowGetAlignedPointerFromInternalField(index); 612718ad94b919217ffbcd2d3159eeb5f8c588761c47ager@chromium.org} 612818ad94b919217ffbcd2d3159eeb5f8c588761c47ager@chromium.org 612918ad94b919217ffbcd2d3159eeb5f8c588761c47ager@chromium.org 613018ad94b919217ffbcd2d3159eeb5f8c588761c47ager@chromium.orgString* String::Cast(v8::Value* value) { 613118ad94b919217ffbcd2d3159eeb5f8c588761c47ager@chromium.org#ifdef V8_ENABLE_CHECKS 613218ad94b919217ffbcd2d3159eeb5f8c588761c47ager@chromium.org CheckCast(value); 613318ad94b919217ffbcd2d3159eeb5f8c588761c47ager@chromium.org#endif 613418ad94b919217ffbcd2d3159eeb5f8c588761c47ager@chromium.org return static_cast<String*>(value); 613518ad94b919217ffbcd2d3159eeb5f8c588761c47ager@chromium.org} 613618ad94b919217ffbcd2d3159eeb5f8c588761c47ager@chromium.org 613718ad94b919217ffbcd2d3159eeb5f8c588761c47ager@chromium.org 6138efdb9d70bddd496ceb6a281dadcc065efbce37a1yangguo@chromium.orgLocal<String> String::Empty(Isolate* isolate) { 6139efdb9d70bddd496ceb6a281dadcc065efbce37a1yangguo@chromium.org typedef internal::Object* S; 6140efdb9d70bddd496ceb6a281dadcc065efbce37a1yangguo@chromium.org typedef internal::Internals I; 61411510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org I::CheckInitialized(isolate); 61424a9f6553038df6b893b3d3ccae351723f4cbbae7yangguo@chromium.org S* slot = I::GetRoot(isolate, I::kEmptyStringRootIndex); 6143efdb9d70bddd496ceb6a281dadcc065efbce37a1yangguo@chromium.org return Local<String>(reinterpret_cast<String*>(slot)); 6144efdb9d70bddd496ceb6a281dadcc065efbce37a1yangguo@chromium.org} 6145efdb9d70bddd496ceb6a281dadcc065efbce37a1yangguo@chromium.org 6146efdb9d70bddd496ceb6a281dadcc065efbce37a1yangguo@chromium.org 614732d7dbafe29be06cec1edd36c31fbe2865c799f4ulan@chromium.orgLocal<String> String::New(const char* data, int length) { 614832d7dbafe29be06cec1edd36c31fbe2865c799f4ulan@chromium.org return NewFromUtf8(Isolate::GetCurrent(), data, kNormalString, length); 614932d7dbafe29be06cec1edd36c31fbe2865c799f4ulan@chromium.org} 615032d7dbafe29be06cec1edd36c31fbe2865c799f4ulan@chromium.org 615132d7dbafe29be06cec1edd36c31fbe2865c799f4ulan@chromium.org 615232d7dbafe29be06cec1edd36c31fbe2865c799f4ulan@chromium.orgLocal<String> String::New(const uint16_t* data, int length) { 615332d7dbafe29be06cec1edd36c31fbe2865c799f4ulan@chromium.org return NewFromTwoByte(Isolate::GetCurrent(), data, kNormalString, length); 615432d7dbafe29be06cec1edd36c31fbe2865c799f4ulan@chromium.org} 615532d7dbafe29be06cec1edd36c31fbe2865c799f4ulan@chromium.org 615632d7dbafe29be06cec1edd36c31fbe2865c799f4ulan@chromium.org 615732d7dbafe29be06cec1edd36c31fbe2865c799f4ulan@chromium.orgLocal<String> String::NewSymbol(const char* data, int length) { 615832d7dbafe29be06cec1edd36c31fbe2865c799f4ulan@chromium.org return NewFromUtf8(Isolate::GetCurrent(), data, kInternalizedString, length); 615932d7dbafe29be06cec1edd36c31fbe2865c799f4ulan@chromium.org} 616032d7dbafe29be06cec1edd36c31fbe2865c799f4ulan@chromium.org 616132d7dbafe29be06cec1edd36c31fbe2865c799f4ulan@chromium.org 616232d7dbafe29be06cec1edd36c31fbe2865c799f4ulan@chromium.orgLocal<String> String::NewUndetectable(const char* data, int length) { 616332d7dbafe29be06cec1edd36c31fbe2865c799f4ulan@chromium.org return NewFromUtf8(Isolate::GetCurrent(), data, kUndetectableString, length); 616432d7dbafe29be06cec1edd36c31fbe2865c799f4ulan@chromium.org} 616532d7dbafe29be06cec1edd36c31fbe2865c799f4ulan@chromium.org 616632d7dbafe29be06cec1edd36c31fbe2865c799f4ulan@chromium.org 616732d7dbafe29be06cec1edd36c31fbe2865c799f4ulan@chromium.orgLocal<String> String::NewUndetectable(const uint16_t* data, int length) { 616832d7dbafe29be06cec1edd36c31fbe2865c799f4ulan@chromium.org return NewFromTwoByte( 616932d7dbafe29be06cec1edd36c31fbe2865c799f4ulan@chromium.org Isolate::GetCurrent(), data, kUndetectableString, length); 617032d7dbafe29be06cec1edd36c31fbe2865c799f4ulan@chromium.org} 617132d7dbafe29be06cec1edd36c31fbe2865c799f4ulan@chromium.org 617232d7dbafe29be06cec1edd36c31fbe2865c799f4ulan@chromium.org 617318ad94b919217ffbcd2d3159eeb5f8c588761c47ager@chromium.orgString::ExternalStringResource* String::GetExternalStringResource() const { 617418ad94b919217ffbcd2d3159eeb5f8c588761c47ager@chromium.org typedef internal::Object O; 617518ad94b919217ffbcd2d3159eeb5f8c588761c47ager@chromium.org typedef internal::Internals I; 617618ad94b919217ffbcd2d3159eeb5f8c588761c47ager@chromium.org O* obj = *reinterpret_cast<O**>(const_cast<String*>(this)); 617718ad94b919217ffbcd2d3159eeb5f8c588761c47ager@chromium.org String::ExternalStringResource* result; 61789d58c2b1c27d8b2890b9bd46e57d3842b09e0292christian.plesner.hansen@gmail.com if (I::IsExternalTwoByteString(I::GetInstanceType(obj))) { 617918ad94b919217ffbcd2d3159eeb5f8c588761c47ager@chromium.org void* value = I::ReadField<void*>(obj, I::kStringResourceOffset); 618018ad94b919217ffbcd2d3159eeb5f8c588761c47ager@chromium.org result = reinterpret_cast<String::ExternalStringResource*>(value); 618118ad94b919217ffbcd2d3159eeb5f8c588761c47ager@chromium.org } else { 618218ad94b919217ffbcd2d3159eeb5f8c588761c47ager@chromium.org result = NULL; 618318ad94b919217ffbcd2d3159eeb5f8c588761c47ager@chromium.org } 618418ad94b919217ffbcd2d3159eeb5f8c588761c47ager@chromium.org#ifdef V8_ENABLE_CHECKS 618518ad94b919217ffbcd2d3159eeb5f8c588761c47ager@chromium.org VerifyExternalStringResource(result); 618618ad94b919217ffbcd2d3159eeb5f8c588761c47ager@chromium.org#endif 618718ad94b919217ffbcd2d3159eeb5f8c588761c47ager@chromium.org return result; 618818ad94b919217ffbcd2d3159eeb5f8c588761c47ager@chromium.org} 618918ad94b919217ffbcd2d3159eeb5f8c588761c47ager@chromium.org 619018ad94b919217ffbcd2d3159eeb5f8c588761c47ager@chromium.org 619156c14afabc547f0a8ab2e24d789c00030f8df892ulan@chromium.orgString::ExternalStringResourceBase* String::GetExternalStringResourceBase( 619256c14afabc547f0a8ab2e24d789c00030f8df892ulan@chromium.org String::Encoding* encoding_out) const { 619356c14afabc547f0a8ab2e24d789c00030f8df892ulan@chromium.org typedef internal::Object O; 619456c14afabc547f0a8ab2e24d789c00030f8df892ulan@chromium.org typedef internal::Internals I; 619556c14afabc547f0a8ab2e24d789c00030f8df892ulan@chromium.org O* obj = *reinterpret_cast<O**>(const_cast<String*>(this)); 619656c14afabc547f0a8ab2e24d789c00030f8df892ulan@chromium.org int type = I::GetInstanceType(obj) & I::kFullStringRepresentationMask; 619756c14afabc547f0a8ab2e24d789c00030f8df892ulan@chromium.org *encoding_out = static_cast<Encoding>(type & I::kStringEncodingMask); 619856c14afabc547f0a8ab2e24d789c00030f8df892ulan@chromium.org ExternalStringResourceBase* resource = NULL; 619956c14afabc547f0a8ab2e24d789c00030f8df892ulan@chromium.org if (type == I::kExternalAsciiRepresentationTag || 620056c14afabc547f0a8ab2e24d789c00030f8df892ulan@chromium.org type == I::kExternalTwoByteRepresentationTag) { 620156c14afabc547f0a8ab2e24d789c00030f8df892ulan@chromium.org void* value = I::ReadField<void*>(obj, I::kStringResourceOffset); 620256c14afabc547f0a8ab2e24d789c00030f8df892ulan@chromium.org resource = static_cast<ExternalStringResourceBase*>(value); 620356c14afabc547f0a8ab2e24d789c00030f8df892ulan@chromium.org } 620456c14afabc547f0a8ab2e24d789c00030f8df892ulan@chromium.org#ifdef V8_ENABLE_CHECKS 620556c14afabc547f0a8ab2e24d789c00030f8df892ulan@chromium.org VerifyExternalStringResourceBase(resource, *encoding_out); 620656c14afabc547f0a8ab2e24d789c00030f8df892ulan@chromium.org#endif 620756c14afabc547f0a8ab2e24d789c00030f8df892ulan@chromium.org return resource; 620856c14afabc547f0a8ab2e24d789c00030f8df892ulan@chromium.org} 620956c14afabc547f0a8ab2e24d789c00030f8df892ulan@chromium.org 621056c14afabc547f0a8ab2e24d789c00030f8df892ulan@chromium.org 6211fb0463312815affb1f0e9d5e351b7f9a3422e3a2svenpanne@chromium.orgbool Value::IsUndefined() const { 6212fb0463312815affb1f0e9d5e351b7f9a3422e3a2svenpanne@chromium.org#ifdef V8_ENABLE_CHECKS 6213fb0463312815affb1f0e9d5e351b7f9a3422e3a2svenpanne@chromium.org return FullIsUndefined(); 6214fb0463312815affb1f0e9d5e351b7f9a3422e3a2svenpanne@chromium.org#else 6215fb0463312815affb1f0e9d5e351b7f9a3422e3a2svenpanne@chromium.org return QuickIsUndefined(); 6216fb0463312815affb1f0e9d5e351b7f9a3422e3a2svenpanne@chromium.org#endif 6217fb0463312815affb1f0e9d5e351b7f9a3422e3a2svenpanne@chromium.org} 6218fb0463312815affb1f0e9d5e351b7f9a3422e3a2svenpanne@chromium.org 6219fb0463312815affb1f0e9d5e351b7f9a3422e3a2svenpanne@chromium.orgbool Value::QuickIsUndefined() const { 6220fb0463312815affb1f0e9d5e351b7f9a3422e3a2svenpanne@chromium.org typedef internal::Object O; 6221fb0463312815affb1f0e9d5e351b7f9a3422e3a2svenpanne@chromium.org typedef internal::Internals I; 6222fb0463312815affb1f0e9d5e351b7f9a3422e3a2svenpanne@chromium.org O* obj = *reinterpret_cast<O**>(const_cast<Value*>(this)); 6223fb0463312815affb1f0e9d5e351b7f9a3422e3a2svenpanne@chromium.org if (!I::HasHeapObjectTag(obj)) return false; 6224fb0463312815affb1f0e9d5e351b7f9a3422e3a2svenpanne@chromium.org if (I::GetInstanceType(obj) != I::kOddballType) return false; 6225fb0463312815affb1f0e9d5e351b7f9a3422e3a2svenpanne@chromium.org return (I::GetOddballKind(obj) == I::kUndefinedOddballKind); 6226fb0463312815affb1f0e9d5e351b7f9a3422e3a2svenpanne@chromium.org} 6227fb0463312815affb1f0e9d5e351b7f9a3422e3a2svenpanne@chromium.org 6228fb0463312815affb1f0e9d5e351b7f9a3422e3a2svenpanne@chromium.org 6229fb0463312815affb1f0e9d5e351b7f9a3422e3a2svenpanne@chromium.orgbool Value::IsNull() const { 6230fb0463312815affb1f0e9d5e351b7f9a3422e3a2svenpanne@chromium.org#ifdef V8_ENABLE_CHECKS 6231fb0463312815affb1f0e9d5e351b7f9a3422e3a2svenpanne@chromium.org return FullIsNull(); 6232fb0463312815affb1f0e9d5e351b7f9a3422e3a2svenpanne@chromium.org#else 6233fb0463312815affb1f0e9d5e351b7f9a3422e3a2svenpanne@chromium.org return QuickIsNull(); 6234fb0463312815affb1f0e9d5e351b7f9a3422e3a2svenpanne@chromium.org#endif 6235fb0463312815affb1f0e9d5e351b7f9a3422e3a2svenpanne@chromium.org} 6236fb0463312815affb1f0e9d5e351b7f9a3422e3a2svenpanne@chromium.org 6237fb0463312815affb1f0e9d5e351b7f9a3422e3a2svenpanne@chromium.orgbool Value::QuickIsNull() const { 6238fb0463312815affb1f0e9d5e351b7f9a3422e3a2svenpanne@chromium.org typedef internal::Object O; 6239fb0463312815affb1f0e9d5e351b7f9a3422e3a2svenpanne@chromium.org typedef internal::Internals I; 6240fb0463312815affb1f0e9d5e351b7f9a3422e3a2svenpanne@chromium.org O* obj = *reinterpret_cast<O**>(const_cast<Value*>(this)); 6241fb0463312815affb1f0e9d5e351b7f9a3422e3a2svenpanne@chromium.org if (!I::HasHeapObjectTag(obj)) return false; 6242fb0463312815affb1f0e9d5e351b7f9a3422e3a2svenpanne@chromium.org if (I::GetInstanceType(obj) != I::kOddballType) return false; 6243fb0463312815affb1f0e9d5e351b7f9a3422e3a2svenpanne@chromium.org return (I::GetOddballKind(obj) == I::kNullOddballKind); 6244fb0463312815affb1f0e9d5e351b7f9a3422e3a2svenpanne@chromium.org} 6245fb0463312815affb1f0e9d5e351b7f9a3422e3a2svenpanne@chromium.org 6246fb0463312815affb1f0e9d5e351b7f9a3422e3a2svenpanne@chromium.org 624718ad94b919217ffbcd2d3159eeb5f8c588761c47ager@chromium.orgbool Value::IsString() const { 624818ad94b919217ffbcd2d3159eeb5f8c588761c47ager@chromium.org#ifdef V8_ENABLE_CHECKS 624918ad94b919217ffbcd2d3159eeb5f8c588761c47ager@chromium.org return FullIsString(); 625018ad94b919217ffbcd2d3159eeb5f8c588761c47ager@chromium.org#else 625118ad94b919217ffbcd2d3159eeb5f8c588761c47ager@chromium.org return QuickIsString(); 625218ad94b919217ffbcd2d3159eeb5f8c588761c47ager@chromium.org#endif 625318ad94b919217ffbcd2d3159eeb5f8c588761c47ager@chromium.org} 625418ad94b919217ffbcd2d3159eeb5f8c588761c47ager@chromium.org 625518ad94b919217ffbcd2d3159eeb5f8c588761c47ager@chromium.orgbool Value::QuickIsString() const { 625618ad94b919217ffbcd2d3159eeb5f8c588761c47ager@chromium.org typedef internal::Object O; 625718ad94b919217ffbcd2d3159eeb5f8c588761c47ager@chromium.org typedef internal::Internals I; 625818ad94b919217ffbcd2d3159eeb5f8c588761c47ager@chromium.org O* obj = *reinterpret_cast<O**>(const_cast<Value*>(this)); 625918ad94b919217ffbcd2d3159eeb5f8c588761c47ager@chromium.org if (!I::HasHeapObjectTag(obj)) return false; 62609d58c2b1c27d8b2890b9bd46e57d3842b09e0292christian.plesner.hansen@gmail.com return (I::GetInstanceType(obj) < I::kFirstNonstringType); 626118ad94b919217ffbcd2d3159eeb5f8c588761c47ager@chromium.org} 626218ad94b919217ffbcd2d3159eeb5f8c588761c47ager@chromium.org 626318ad94b919217ffbcd2d3159eeb5f8c588761c47ager@chromium.org 62641fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.orgtemplate <class T> Value* Value::Cast(T* value) { 62651fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org return static_cast<Value*>(value); 62661fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org} 62671fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org 62681fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org 6269e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.orgSymbol* Symbol::Cast(v8::Value* value) { 6270e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org#ifdef V8_ENABLE_CHECKS 6271e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org CheckCast(value); 6272e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org#endif 6273e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org return static_cast<Symbol*>(value); 6274e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org} 6275e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org 6276e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org 627718ad94b919217ffbcd2d3159eeb5f8c588761c47ager@chromium.orgNumber* Number::Cast(v8::Value* value) { 627818ad94b919217ffbcd2d3159eeb5f8c588761c47ager@chromium.org#ifdef V8_ENABLE_CHECKS 627918ad94b919217ffbcd2d3159eeb5f8c588761c47ager@chromium.org CheckCast(value); 628018ad94b919217ffbcd2d3159eeb5f8c588761c47ager@chromium.org#endif 628118ad94b919217ffbcd2d3159eeb5f8c588761c47ager@chromium.org return static_cast<Number*>(value); 628218ad94b919217ffbcd2d3159eeb5f8c588761c47ager@chromium.org} 628318ad94b919217ffbcd2d3159eeb5f8c588761c47ager@chromium.org 628418ad94b919217ffbcd2d3159eeb5f8c588761c47ager@chromium.org 628518ad94b919217ffbcd2d3159eeb5f8c588761c47ager@chromium.orgInteger* Integer::Cast(v8::Value* value) { 628618ad94b919217ffbcd2d3159eeb5f8c588761c47ager@chromium.org#ifdef V8_ENABLE_CHECKS 628718ad94b919217ffbcd2d3159eeb5f8c588761c47ager@chromium.org CheckCast(value); 628818ad94b919217ffbcd2d3159eeb5f8c588761c47ager@chromium.org#endif 628918ad94b919217ffbcd2d3159eeb5f8c588761c47ager@chromium.org return static_cast<Integer*>(value); 629018ad94b919217ffbcd2d3159eeb5f8c588761c47ager@chromium.org} 629118ad94b919217ffbcd2d3159eeb5f8c588761c47ager@chromium.org 629218ad94b919217ffbcd2d3159eeb5f8c588761c47ager@chromium.org 629318ad94b919217ffbcd2d3159eeb5f8c588761c47ager@chromium.orgDate* Date::Cast(v8::Value* value) { 629418ad94b919217ffbcd2d3159eeb5f8c588761c47ager@chromium.org#ifdef V8_ENABLE_CHECKS 629518ad94b919217ffbcd2d3159eeb5f8c588761c47ager@chromium.org CheckCast(value); 629618ad94b919217ffbcd2d3159eeb5f8c588761c47ager@chromium.org#endif 629718ad94b919217ffbcd2d3159eeb5f8c588761c47ager@chromium.org return static_cast<Date*>(value); 629818ad94b919217ffbcd2d3159eeb5f8c588761c47ager@chromium.org} 629918ad94b919217ffbcd2d3159eeb5f8c588761c47ager@chromium.org 630018ad94b919217ffbcd2d3159eeb5f8c588761c47ager@chromium.org 630184bcc559ac20fb04f806e97d28a314b20b58fd60svenpanne@chromium.orgStringObject* StringObject::Cast(v8::Value* value) { 630284bcc559ac20fb04f806e97d28a314b20b58fd60svenpanne@chromium.org#ifdef V8_ENABLE_CHECKS 630384bcc559ac20fb04f806e97d28a314b20b58fd60svenpanne@chromium.org CheckCast(value); 630484bcc559ac20fb04f806e97d28a314b20b58fd60svenpanne@chromium.org#endif 630584bcc559ac20fb04f806e97d28a314b20b58fd60svenpanne@chromium.org return static_cast<StringObject*>(value); 630684bcc559ac20fb04f806e97d28a314b20b58fd60svenpanne@chromium.org} 630784bcc559ac20fb04f806e97d28a314b20b58fd60svenpanne@chromium.org 630884bcc559ac20fb04f806e97d28a314b20b58fd60svenpanne@chromium.org 6309e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.orgSymbolObject* SymbolObject::Cast(v8::Value* value) { 6310e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org#ifdef V8_ENABLE_CHECKS 6311e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org CheckCast(value); 6312e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org#endif 6313e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org return static_cast<SymbolObject*>(value); 6314e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org} 6315e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org 6316e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org 631784bcc559ac20fb04f806e97d28a314b20b58fd60svenpanne@chromium.orgNumberObject* NumberObject::Cast(v8::Value* value) { 631884bcc559ac20fb04f806e97d28a314b20b58fd60svenpanne@chromium.org#ifdef V8_ENABLE_CHECKS 631984bcc559ac20fb04f806e97d28a314b20b58fd60svenpanne@chromium.org CheckCast(value); 632084bcc559ac20fb04f806e97d28a314b20b58fd60svenpanne@chromium.org#endif 632184bcc559ac20fb04f806e97d28a314b20b58fd60svenpanne@chromium.org return static_cast<NumberObject*>(value); 632284bcc559ac20fb04f806e97d28a314b20b58fd60svenpanne@chromium.org} 632384bcc559ac20fb04f806e97d28a314b20b58fd60svenpanne@chromium.org 632484bcc559ac20fb04f806e97d28a314b20b58fd60svenpanne@chromium.org 632584bcc559ac20fb04f806e97d28a314b20b58fd60svenpanne@chromium.orgBooleanObject* BooleanObject::Cast(v8::Value* value) { 632684bcc559ac20fb04f806e97d28a314b20b58fd60svenpanne@chromium.org#ifdef V8_ENABLE_CHECKS 632784bcc559ac20fb04f806e97d28a314b20b58fd60svenpanne@chromium.org CheckCast(value); 632884bcc559ac20fb04f806e97d28a314b20b58fd60svenpanne@chromium.org#endif 632984bcc559ac20fb04f806e97d28a314b20b58fd60svenpanne@chromium.org return static_cast<BooleanObject*>(value); 633084bcc559ac20fb04f806e97d28a314b20b58fd60svenpanne@chromium.org} 633184bcc559ac20fb04f806e97d28a314b20b58fd60svenpanne@chromium.org 633284bcc559ac20fb04f806e97d28a314b20b58fd60svenpanne@chromium.org 6333b61a0d13e9690ef4c2de424bbe82a38884d981a6ager@chromium.orgRegExp* RegExp::Cast(v8::Value* value) { 6334b61a0d13e9690ef4c2de424bbe82a38884d981a6ager@chromium.org#ifdef V8_ENABLE_CHECKS 6335b61a0d13e9690ef4c2de424bbe82a38884d981a6ager@chromium.org CheckCast(value); 6336b61a0d13e9690ef4c2de424bbe82a38884d981a6ager@chromium.org#endif 6337b61a0d13e9690ef4c2de424bbe82a38884d981a6ager@chromium.org return static_cast<RegExp*>(value); 6338b61a0d13e9690ef4c2de424bbe82a38884d981a6ager@chromium.org} 6339b61a0d13e9690ef4c2de424bbe82a38884d981a6ager@chromium.org 6340b61a0d13e9690ef4c2de424bbe82a38884d981a6ager@chromium.org 634118ad94b919217ffbcd2d3159eeb5f8c588761c47ager@chromium.orgObject* Object::Cast(v8::Value* value) { 634218ad94b919217ffbcd2d3159eeb5f8c588761c47ager@chromium.org#ifdef V8_ENABLE_CHECKS 634318ad94b919217ffbcd2d3159eeb5f8c588761c47ager@chromium.org CheckCast(value); 634418ad94b919217ffbcd2d3159eeb5f8c588761c47ager@chromium.org#endif 634518ad94b919217ffbcd2d3159eeb5f8c588761c47ager@chromium.org return static_cast<Object*>(value); 634618ad94b919217ffbcd2d3159eeb5f8c588761c47ager@chromium.org} 634718ad94b919217ffbcd2d3159eeb5f8c588761c47ager@chromium.org 634818ad94b919217ffbcd2d3159eeb5f8c588761c47ager@chromium.org 634918ad94b919217ffbcd2d3159eeb5f8c588761c47ager@chromium.orgArray* Array::Cast(v8::Value* value) { 635018ad94b919217ffbcd2d3159eeb5f8c588761c47ager@chromium.org#ifdef V8_ENABLE_CHECKS 635118ad94b919217ffbcd2d3159eeb5f8c588761c47ager@chromium.org CheckCast(value); 635218ad94b919217ffbcd2d3159eeb5f8c588761c47ager@chromium.org#endif 635318ad94b919217ffbcd2d3159eeb5f8c588761c47ager@chromium.org return static_cast<Array*>(value); 635418ad94b919217ffbcd2d3159eeb5f8c588761c47ager@chromium.org} 635518ad94b919217ffbcd2d3159eeb5f8c588761c47ager@chromium.org 635618ad94b919217ffbcd2d3159eeb5f8c588761c47ager@chromium.org 6357ca29dd85fa02449d17188f5a6ff9a7cdf2ad9680danno@chromium.orgArrayBuffer* ArrayBuffer::Cast(v8::Value* value) { 6358ca29dd85fa02449d17188f5a6ff9a7cdf2ad9680danno@chromium.org#ifdef V8_ENABLE_CHECKS 6359ca29dd85fa02449d17188f5a6ff9a7cdf2ad9680danno@chromium.org CheckCast(value); 6360ca29dd85fa02449d17188f5a6ff9a7cdf2ad9680danno@chromium.org#endif 6361ca29dd85fa02449d17188f5a6ff9a7cdf2ad9680danno@chromium.org return static_cast<ArrayBuffer*>(value); 6362ca29dd85fa02449d17188f5a6ff9a7cdf2ad9680danno@chromium.org} 6363ca29dd85fa02449d17188f5a6ff9a7cdf2ad9680danno@chromium.org 6364ca29dd85fa02449d17188f5a6ff9a7cdf2ad9680danno@chromium.org 63651510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.orgArrayBufferView* ArrayBufferView::Cast(v8::Value* value) { 63661510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org#ifdef V8_ENABLE_CHECKS 63671510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org CheckCast(value); 63681510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org#endif 63691510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org return static_cast<ArrayBufferView*>(value); 63701510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org} 63711510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org 63721510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org 6373f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.orgTypedArray* TypedArray::Cast(v8::Value* value) { 6374f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org#ifdef V8_ENABLE_CHECKS 6375f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org CheckCast(value); 6376f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org#endif 6377f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org return static_cast<TypedArray*>(value); 6378f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org} 6379f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org 6380f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org 6381f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.orgUint8Array* Uint8Array::Cast(v8::Value* value) { 6382f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org#ifdef V8_ENABLE_CHECKS 6383f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org CheckCast(value); 6384f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org#endif 6385f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org return static_cast<Uint8Array*>(value); 6386f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org} 6387f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org 6388f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org 6389f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.orgInt8Array* Int8Array::Cast(v8::Value* value) { 6390f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org#ifdef V8_ENABLE_CHECKS 6391f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org CheckCast(value); 6392f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org#endif 6393f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org return static_cast<Int8Array*>(value); 6394f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org} 6395f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org 6396f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org 6397f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.orgUint16Array* Uint16Array::Cast(v8::Value* value) { 6398f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org#ifdef V8_ENABLE_CHECKS 6399f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org CheckCast(value); 6400f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org#endif 6401f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org return static_cast<Uint16Array*>(value); 6402f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org} 6403f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org 6404f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org 6405f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.orgInt16Array* Int16Array::Cast(v8::Value* value) { 6406f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org#ifdef V8_ENABLE_CHECKS 6407f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org CheckCast(value); 6408f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org#endif 6409f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org return static_cast<Int16Array*>(value); 6410f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org} 6411f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org 6412f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org 6413f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.orgUint32Array* Uint32Array::Cast(v8::Value* value) { 6414f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org#ifdef V8_ENABLE_CHECKS 6415f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org CheckCast(value); 6416f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org#endif 6417f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org return static_cast<Uint32Array*>(value); 6418f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org} 6419f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org 6420f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org 6421f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.orgInt32Array* Int32Array::Cast(v8::Value* value) { 6422f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org#ifdef V8_ENABLE_CHECKS 6423f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org CheckCast(value); 6424f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org#endif 6425f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org return static_cast<Int32Array*>(value); 6426f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org} 6427f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org 6428f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org 6429f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.orgFloat32Array* Float32Array::Cast(v8::Value* value) { 6430f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org#ifdef V8_ENABLE_CHECKS 6431f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org CheckCast(value); 6432f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org#endif 6433f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org return static_cast<Float32Array*>(value); 6434f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org} 6435f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org 6436f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org 6437f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.orgFloat64Array* Float64Array::Cast(v8::Value* value) { 6438f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org#ifdef V8_ENABLE_CHECKS 6439f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org CheckCast(value); 6440f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org#endif 6441f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org return static_cast<Float64Array*>(value); 6442f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org} 6443f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org 6444f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org 64451fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.orgUint8ClampedArray* Uint8ClampedArray::Cast(v8::Value* value) { 64461fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org#ifdef V8_ENABLE_CHECKS 64471fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org CheckCast(value); 64481fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org#endif 64491fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org return static_cast<Uint8ClampedArray*>(value); 64501fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org} 64511fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org 64521fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org 64531510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.orgDataView* DataView::Cast(v8::Value* value) { 64541510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org#ifdef V8_ENABLE_CHECKS 64551510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org CheckCast(value); 64561510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org#endif 64571510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org return static_cast<DataView*>(value); 64581510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org} 64591510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org 64601510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org 646118ad94b919217ffbcd2d3159eeb5f8c588761c47ager@chromium.orgFunction* Function::Cast(v8::Value* value) { 646218ad94b919217ffbcd2d3159eeb5f8c588761c47ager@chromium.org#ifdef V8_ENABLE_CHECKS 646318ad94b919217ffbcd2d3159eeb5f8c588761c47ager@chromium.org CheckCast(value); 646418ad94b919217ffbcd2d3159eeb5f8c588761c47ager@chromium.org#endif 646518ad94b919217ffbcd2d3159eeb5f8c588761c47ager@chromium.org return static_cast<Function*>(value); 646618ad94b919217ffbcd2d3159eeb5f8c588761c47ager@chromium.org} 646718ad94b919217ffbcd2d3159eeb5f8c588761c47ager@chromium.org 646818ad94b919217ffbcd2d3159eeb5f8c588761c47ager@chromium.org 646918ad94b919217ffbcd2d3159eeb5f8c588761c47ager@chromium.orgExternal* External::Cast(v8::Value* value) { 647018ad94b919217ffbcd2d3159eeb5f8c588761c47ager@chromium.org#ifdef V8_ENABLE_CHECKS 647118ad94b919217ffbcd2d3159eeb5f8c588761c47ager@chromium.org CheckCast(value); 647218ad94b919217ffbcd2d3159eeb5f8c588761c47ager@chromium.org#endif 647318ad94b919217ffbcd2d3159eeb5f8c588761c47ager@chromium.org return static_cast<External*>(value); 647418ad94b919217ffbcd2d3159eeb5f8c588761c47ager@chromium.org} 647518ad94b919217ffbcd2d3159eeb5f8c588761c47ager@chromium.org 647618ad94b919217ffbcd2d3159eeb5f8c588761c47ager@chromium.org 6477bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.orgtemplate<typename T> 6478bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.orgIsolate* PropertyCallbackInfo<T>::GetIsolate() const { 6479bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.org return *reinterpret_cast<Isolate**>(&args_[kIsolateIndex]); 6480bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.org} 6481bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.org 6482bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.org 6483bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.orgtemplate<typename T> 6484bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.orgLocal<Value> PropertyCallbackInfo<T>::Data() const { 6485bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.org return Local<Value>(reinterpret_cast<Value*>(&args_[kDataIndex])); 648628faa982749c4aa9c090939453dea14bb118f613jkummerow@chromium.org} 648728faa982749c4aa9c090939453dea14bb118f613jkummerow@chromium.org 648828faa982749c4aa9c090939453dea14bb118f613jkummerow@chromium.org 6489bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.orgtemplate<typename T> 6490bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.orgLocal<Object> PropertyCallbackInfo<T>::This() const { 6491bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.org return Local<Object>(reinterpret_cast<Object*>(&args_[kThisIndex])); 6492c514574143c1bf74d4fb6e7dccb175fe9ff2f5d3sgjesse@chromium.org} 6493c514574143c1bf74d4fb6e7dccb175fe9ff2f5d3sgjesse@chromium.org 6494c514574143c1bf74d4fb6e7dccb175fe9ff2f5d3sgjesse@chromium.org 6495bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.orgtemplate<typename T> 6496bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.orgLocal<Object> PropertyCallbackInfo<T>::Holder() const { 6497bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.org return Local<Object>(reinterpret_cast<Object*>(&args_[kHolderIndex])); 6498c514574143c1bf74d4fb6e7dccb175fe9ff2f5d3sgjesse@chromium.org} 6499c514574143c1bf74d4fb6e7dccb175fe9ff2f5d3sgjesse@chromium.org 6500c514574143c1bf74d4fb6e7dccb175fe9ff2f5d3sgjesse@chromium.org 6501bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.orgtemplate<typename T> 6502bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.orgReturnValue<T> PropertyCallbackInfo<T>::GetReturnValue() const { 6503bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.org return ReturnValue<T>(&args_[kReturnValueIndex]); 6504c514574143c1bf74d4fb6e7dccb175fe9ff2f5d3sgjesse@chromium.org} 6505c514574143c1bf74d4fb6e7dccb175fe9ff2f5d3sgjesse@chromium.org 6506c514574143c1bf74d4fb6e7dccb175fe9ff2f5d3sgjesse@chromium.org 6507efdb9d70bddd496ceb6a281dadcc065efbce37a1yangguo@chromium.orgHandle<Primitive> Undefined(Isolate* isolate) { 6508efdb9d70bddd496ceb6a281dadcc065efbce37a1yangguo@chromium.org typedef internal::Object* S; 6509efdb9d70bddd496ceb6a281dadcc065efbce37a1yangguo@chromium.org typedef internal::Internals I; 65101510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org I::CheckInitialized(isolate); 6511efdb9d70bddd496ceb6a281dadcc065efbce37a1yangguo@chromium.org S* slot = I::GetRoot(isolate, I::kUndefinedValueRootIndex); 6512efdb9d70bddd496ceb6a281dadcc065efbce37a1yangguo@chromium.org return Handle<Primitive>(reinterpret_cast<Primitive*>(slot)); 6513efdb9d70bddd496ceb6a281dadcc065efbce37a1yangguo@chromium.org} 6514efdb9d70bddd496ceb6a281dadcc065efbce37a1yangguo@chromium.org 6515efdb9d70bddd496ceb6a281dadcc065efbce37a1yangguo@chromium.org 6516efdb9d70bddd496ceb6a281dadcc065efbce37a1yangguo@chromium.orgHandle<Primitive> Null(Isolate* isolate) { 6517efdb9d70bddd496ceb6a281dadcc065efbce37a1yangguo@chromium.org typedef internal::Object* S; 6518efdb9d70bddd496ceb6a281dadcc065efbce37a1yangguo@chromium.org typedef internal::Internals I; 65191510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org I::CheckInitialized(isolate); 6520efdb9d70bddd496ceb6a281dadcc065efbce37a1yangguo@chromium.org S* slot = I::GetRoot(isolate, I::kNullValueRootIndex); 6521efdb9d70bddd496ceb6a281dadcc065efbce37a1yangguo@chromium.org return Handle<Primitive>(reinterpret_cast<Primitive*>(slot)); 6522efdb9d70bddd496ceb6a281dadcc065efbce37a1yangguo@chromium.org} 6523efdb9d70bddd496ceb6a281dadcc065efbce37a1yangguo@chromium.org 6524efdb9d70bddd496ceb6a281dadcc065efbce37a1yangguo@chromium.org 6525efdb9d70bddd496ceb6a281dadcc065efbce37a1yangguo@chromium.orgHandle<Boolean> True(Isolate* isolate) { 6526efdb9d70bddd496ceb6a281dadcc065efbce37a1yangguo@chromium.org typedef internal::Object* S; 6527efdb9d70bddd496ceb6a281dadcc065efbce37a1yangguo@chromium.org typedef internal::Internals I; 65281510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org I::CheckInitialized(isolate); 6529efdb9d70bddd496ceb6a281dadcc065efbce37a1yangguo@chromium.org S* slot = I::GetRoot(isolate, I::kTrueValueRootIndex); 6530efdb9d70bddd496ceb6a281dadcc065efbce37a1yangguo@chromium.org return Handle<Boolean>(reinterpret_cast<Boolean*>(slot)); 6531efdb9d70bddd496ceb6a281dadcc065efbce37a1yangguo@chromium.org} 6532efdb9d70bddd496ceb6a281dadcc065efbce37a1yangguo@chromium.org 6533efdb9d70bddd496ceb6a281dadcc065efbce37a1yangguo@chromium.org 6534efdb9d70bddd496ceb6a281dadcc065efbce37a1yangguo@chromium.orgHandle<Boolean> False(Isolate* isolate) { 6535efdb9d70bddd496ceb6a281dadcc065efbce37a1yangguo@chromium.org typedef internal::Object* S; 6536efdb9d70bddd496ceb6a281dadcc065efbce37a1yangguo@chromium.org typedef internal::Internals I; 65371510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org I::CheckInitialized(isolate); 6538efdb9d70bddd496ceb6a281dadcc065efbce37a1yangguo@chromium.org S* slot = I::GetRoot(isolate, I::kFalseValueRootIndex); 6539efdb9d70bddd496ceb6a281dadcc065efbce37a1yangguo@chromium.org return Handle<Boolean>(reinterpret_cast<Boolean*>(slot)); 6540efdb9d70bddd496ceb6a281dadcc065efbce37a1yangguo@chromium.org} 6541efdb9d70bddd496ceb6a281dadcc065efbce37a1yangguo@chromium.org 6542efdb9d70bddd496ceb6a281dadcc065efbce37a1yangguo@chromium.org 6543efdb9d70bddd496ceb6a281dadcc065efbce37a1yangguo@chromium.orgvoid Isolate::SetData(void* data) { 6544efdb9d70bddd496ceb6a281dadcc065efbce37a1yangguo@chromium.org typedef internal::Internals I; 6545efdb9d70bddd496ceb6a281dadcc065efbce37a1yangguo@chromium.org I::SetEmbedderData(this, data); 6546efdb9d70bddd496ceb6a281dadcc065efbce37a1yangguo@chromium.org} 6547efdb9d70bddd496ceb6a281dadcc065efbce37a1yangguo@chromium.org 6548efdb9d70bddd496ceb6a281dadcc065efbce37a1yangguo@chromium.org 6549efdb9d70bddd496ceb6a281dadcc065efbce37a1yangguo@chromium.orgvoid* Isolate::GetData() { 6550efdb9d70bddd496ceb6a281dadcc065efbce37a1yangguo@chromium.org typedef internal::Internals I; 6551efdb9d70bddd496ceb6a281dadcc065efbce37a1yangguo@chromium.org return I::GetEmbedderData(this); 6552efdb9d70bddd496ceb6a281dadcc065efbce37a1yangguo@chromium.org} 6553efdb9d70bddd496ceb6a281dadcc065efbce37a1yangguo@chromium.org 6554efdb9d70bddd496ceb6a281dadcc065efbce37a1yangguo@chromium.org 6555eeb44b681a16e45f1415dfacff0ba3dba9de5d8cyangguo@chromium.orgLocal<Value> Context::GetEmbedderData(int index) { 6556eeb44b681a16e45f1415dfacff0ba3dba9de5d8cyangguo@chromium.org#ifndef V8_ENABLE_CHECKS 6557eeb44b681a16e45f1415dfacff0ba3dba9de5d8cyangguo@chromium.org typedef internal::Object O; 6558eeb44b681a16e45f1415dfacff0ba3dba9de5d8cyangguo@chromium.org typedef internal::Internals I; 6559eeb44b681a16e45f1415dfacff0ba3dba9de5d8cyangguo@chromium.org O** result = HandleScope::CreateHandle(I::ReadEmbedderData<O*>(this, index)); 6560eeb44b681a16e45f1415dfacff0ba3dba9de5d8cyangguo@chromium.org return Local<Value>(reinterpret_cast<Value*>(result)); 6561eeb44b681a16e45f1415dfacff0ba3dba9de5d8cyangguo@chromium.org#else 6562eeb44b681a16e45f1415dfacff0ba3dba9de5d8cyangguo@chromium.org return SlowGetEmbedderData(index); 6563eeb44b681a16e45f1415dfacff0ba3dba9de5d8cyangguo@chromium.org#endif 6564eeb44b681a16e45f1415dfacff0ba3dba9de5d8cyangguo@chromium.org} 6565eeb44b681a16e45f1415dfacff0ba3dba9de5d8cyangguo@chromium.org 6566eeb44b681a16e45f1415dfacff0ba3dba9de5d8cyangguo@chromium.org 6567eeb44b681a16e45f1415dfacff0ba3dba9de5d8cyangguo@chromium.orgvoid* Context::GetAlignedPointerFromEmbedderData(int index) { 6568eeb44b681a16e45f1415dfacff0ba3dba9de5d8cyangguo@chromium.org#ifndef V8_ENABLE_CHECKS 6569eeb44b681a16e45f1415dfacff0ba3dba9de5d8cyangguo@chromium.org typedef internal::Internals I; 6570eeb44b681a16e45f1415dfacff0ba3dba9de5d8cyangguo@chromium.org return I::ReadEmbedderData<void*>(this, index); 6571eeb44b681a16e45f1415dfacff0ba3dba9de5d8cyangguo@chromium.org#else 6572eeb44b681a16e45f1415dfacff0ba3dba9de5d8cyangguo@chromium.org return SlowGetAlignedPointerFromEmbedderData(index); 6573eeb44b681a16e45f1415dfacff0ba3dba9de5d8cyangguo@chromium.org#endif 6574eeb44b681a16e45f1415dfacff0ba3dba9de5d8cyangguo@chromium.org} 6575eeb44b681a16e45f1415dfacff0ba3dba9de5d8cyangguo@chromium.org 6576eeb44b681a16e45f1415dfacff0ba3dba9de5d8cyangguo@chromium.org 657743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen/** 6578727e995b7bba3c57fb1e5c156d386ca11894f781v * \example shell.cc 6579727e995b7bba3c57fb1e5c156d386ca11894f781v * A simple shell that takes a list of expressions on the 658043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * command-line and executes them. 658143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen */ 658243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 658343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 658443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen/** 658543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * \example process.cc 658643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen */ 658743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 658843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 658943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} // namespace v8 659043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 659143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 659243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen#undef TYPE_CHECK 659343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 659443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 65959258b6bc66e09368ada54001f619d53b4fc976d5ager@chromium.org#endif // V8_H_ 6596