1f2038fb01417bcf7698b87a5dfaa4a861539618aerik.corry@gmail.com// Copyright 2012 the V8 project authors. All rights reserved. 25a8ca6c70c6fc9716f18f6223c98d1fef5752cf6kasperl@chromium.org// Redistribution and use in source and binary forms, with or without 35a8ca6c70c6fc9716f18f6223c98d1fef5752cf6kasperl@chromium.org// modification, are permitted provided that the following conditions are 45a8ca6c70c6fc9716f18f6223c98d1fef5752cf6kasperl@chromium.org// met: 55a8ca6c70c6fc9716f18f6223c98d1fef5752cf6kasperl@chromium.org// 65a8ca6c70c6fc9716f18f6223c98d1fef5752cf6kasperl@chromium.org// * Redistributions of source code must retain the above copyright 75a8ca6c70c6fc9716f18f6223c98d1fef5752cf6kasperl@chromium.org// notice, this list of conditions and the following disclaimer. 85a8ca6c70c6fc9716f18f6223c98d1fef5752cf6kasperl@chromium.org// * Redistributions in binary form must reproduce the above 95a8ca6c70c6fc9716f18f6223c98d1fef5752cf6kasperl@chromium.org// copyright notice, this list of conditions and the following 105a8ca6c70c6fc9716f18f6223c98d1fef5752cf6kasperl@chromium.org// disclaimer in the documentation and/or other materials provided 115a8ca6c70c6fc9716f18f6223c98d1fef5752cf6kasperl@chromium.org// with the distribution. 125a8ca6c70c6fc9716f18f6223c98d1fef5752cf6kasperl@chromium.org// * Neither the name of Google Inc. nor the names of its 135a8ca6c70c6fc9716f18f6223c98d1fef5752cf6kasperl@chromium.org// contributors may be used to endorse or promote products derived 145a8ca6c70c6fc9716f18f6223c98d1fef5752cf6kasperl@chromium.org// from this software without specific prior written permission. 155a8ca6c70c6fc9716f18f6223c98d1fef5752cf6kasperl@chromium.org// 165a8ca6c70c6fc9716f18f6223c98d1fef5752cf6kasperl@chromium.org// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 175a8ca6c70c6fc9716f18f6223c98d1fef5752cf6kasperl@chromium.org// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 185a8ca6c70c6fc9716f18f6223c98d1fef5752cf6kasperl@chromium.org// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 195a8ca6c70c6fc9716f18f6223c98d1fef5752cf6kasperl@chromium.org// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 205a8ca6c70c6fc9716f18f6223c98d1fef5752cf6kasperl@chromium.org// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 215a8ca6c70c6fc9716f18f6223c98d1fef5752cf6kasperl@chromium.org// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 225a8ca6c70c6fc9716f18f6223c98d1fef5752cf6kasperl@chromium.org// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 235a8ca6c70c6fc9716f18f6223c98d1fef5752cf6kasperl@chromium.org// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 245a8ca6c70c6fc9716f18f6223c98d1fef5752cf6kasperl@chromium.org// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 255a8ca6c70c6fc9716f18f6223c98d1fef5752cf6kasperl@chromium.org// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 265a8ca6c70c6fc9716f18f6223c98d1fef5752cf6kasperl@chromium.org// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 275a8ca6c70c6fc9716f18f6223c98d1fef5752cf6kasperl@chromium.org 285a8ca6c70c6fc9716f18f6223c98d1fef5752cf6kasperl@chromium.org#ifndef V8_D8_H_ 295a8ca6c70c6fc9716f18f6223c98d1fef5752cf6kasperl@chromium.org#define V8_D8_H_ 305a8ca6c70c6fc9716f18f6223c98d1fef5752cf6kasperl@chromium.org 317c2628c3f0353f0558760c3ca442f934263ea766kmillikin@chromium.org#ifndef V8_SHARED 3284bcc559ac20fb04f806e97d28a314b20b58fd60svenpanne@chromium.org#include "allocation.h" 33f5aa83707f1db5aecb22f6c3bfd5042f629d5fcfkasperl@chromium.org#include "hashmap.h" 34304cc33f8259ef467e8e3c79f448d0bae0e8cd85yangguo@chromium.org#include "smart-pointers.h" 3555ee80713569ab0324fc8dcedcb5518501daa6a6ricow@chromium.org#include "v8.h" 3684bcc559ac20fb04f806e97d28a314b20b58fd60svenpanne@chromium.org#else 3784bcc559ac20fb04f806e97d28a314b20b58fd60svenpanne@chromium.org#include "../include/v8.h" 387c2628c3f0353f0558760c3ca442f934263ea766kmillikin@chromium.org#endif // V8_SHARED 395a8ca6c70c6fc9716f18f6223c98d1fef5752cf6kasperl@chromium.org 405a8ca6c70c6fc9716f18f6223c98d1fef5752cf6kasperl@chromium.orgnamespace v8 { 415a8ca6c70c6fc9716f18f6223c98d1fef5752cf6kasperl@chromium.org 425a8ca6c70c6fc9716f18f6223c98d1fef5752cf6kasperl@chromium.org 437c2628c3f0353f0558760c3ca442f934263ea766kmillikin@chromium.org#ifndef V8_SHARED 44a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org// A single counter in a counter collection. 455a8ca6c70c6fc9716f18f6223c98d1fef5752cf6kasperl@chromium.orgclass Counter { 465a8ca6c70c6fc9716f18f6223c98d1fef5752cf6kasperl@chromium.org public: 47a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org static const int kMaxNameSize = 64; 48d1e3e722d649dfcccf8699a801743c9a5426b0bckasperl@chromium.org int32_t* Bind(const char* name, bool histogram); 49d1e3e722d649dfcccf8699a801743c9a5426b0bckasperl@chromium.org int32_t* ptr() { return &count_; } 50d1e3e722d649dfcccf8699a801743c9a5426b0bckasperl@chromium.org int32_t count() { return count_; } 51d1e3e722d649dfcccf8699a801743c9a5426b0bckasperl@chromium.org int32_t sample_total() { return sample_total_; } 52d1e3e722d649dfcccf8699a801743c9a5426b0bckasperl@chromium.org bool is_histogram() { return is_histogram_; } 53d1e3e722d649dfcccf8699a801743c9a5426b0bckasperl@chromium.org void AddSample(int32_t sample); 545a8ca6c70c6fc9716f18f6223c98d1fef5752cf6kasperl@chromium.org private: 55d1e3e722d649dfcccf8699a801743c9a5426b0bckasperl@chromium.org int32_t count_; 56d1e3e722d649dfcccf8699a801743c9a5426b0bckasperl@chromium.org int32_t sample_total_; 57d1e3e722d649dfcccf8699a801743c9a5426b0bckasperl@chromium.org bool is_histogram_; 58a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org uint8_t name_[kMaxNameSize]; 59a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org}; 60a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org 61a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org 62a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org// A set of counters and associated information. An instance of this 63a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org// class is stored directly in the memory-mapped counters file if 64a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org// the --map-counters options is used 65a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.orgclass CounterCollection { 66a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org public: 67a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org CounterCollection(); 68a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org Counter* GetNextCounter(); 69a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org private: 7028583c92ca8f528df625800519088ac88996d504jkummerow@chromium.org static const unsigned kMaxCounters = 512; 71a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org uint32_t magic_number_; 72a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org uint32_t max_counters_; 73a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org uint32_t max_name_size_; 74a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org uint32_t counters_in_use_; 75a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org Counter counters_[kMaxCounters]; 765a8ca6c70c6fc9716f18f6223c98d1fef5752cf6kasperl@chromium.org}; 775a8ca6c70c6fc9716f18f6223c98d1fef5752cf6kasperl@chromium.org 785a8ca6c70c6fc9716f18f6223c98d1fef5752cf6kasperl@chromium.org 79f5aa83707f1db5aecb22f6c3bfd5042f629d5fcfkasperl@chromium.orgclass CounterMap { 80f5aa83707f1db5aecb22f6c3bfd5042f629d5fcfkasperl@chromium.org public: 81f5aa83707f1db5aecb22f6c3bfd5042f629d5fcfkasperl@chromium.org CounterMap(): hash_map_(Match) { } 82f5aa83707f1db5aecb22f6c3bfd5042f629d5fcfkasperl@chromium.org Counter* Lookup(const char* name) { 83f5aa83707f1db5aecb22f6c3bfd5042f629d5fcfkasperl@chromium.org i::HashMap::Entry* answer = hash_map_.Lookup( 84f5aa83707f1db5aecb22f6c3bfd5042f629d5fcfkasperl@chromium.org const_cast<char*>(name), 85f5aa83707f1db5aecb22f6c3bfd5042f629d5fcfkasperl@chromium.org Hash(name), 86f5aa83707f1db5aecb22f6c3bfd5042f629d5fcfkasperl@chromium.org false); 87f5aa83707f1db5aecb22f6c3bfd5042f629d5fcfkasperl@chromium.org if (!answer) return NULL; 88f5aa83707f1db5aecb22f6c3bfd5042f629d5fcfkasperl@chromium.org return reinterpret_cast<Counter*>(answer->value); 89f5aa83707f1db5aecb22f6c3bfd5042f629d5fcfkasperl@chromium.org } 90f5aa83707f1db5aecb22f6c3bfd5042f629d5fcfkasperl@chromium.org void Set(const char* name, Counter* value) { 91f5aa83707f1db5aecb22f6c3bfd5042f629d5fcfkasperl@chromium.org i::HashMap::Entry* answer = hash_map_.Lookup( 92f5aa83707f1db5aecb22f6c3bfd5042f629d5fcfkasperl@chromium.org const_cast<char*>(name), 93f5aa83707f1db5aecb22f6c3bfd5042f629d5fcfkasperl@chromium.org Hash(name), 94f5aa83707f1db5aecb22f6c3bfd5042f629d5fcfkasperl@chromium.org true); 95f5aa83707f1db5aecb22f6c3bfd5042f629d5fcfkasperl@chromium.org ASSERT(answer != NULL); 96f5aa83707f1db5aecb22f6c3bfd5042f629d5fcfkasperl@chromium.org answer->value = value; 97f5aa83707f1db5aecb22f6c3bfd5042f629d5fcfkasperl@chromium.org } 98f5aa83707f1db5aecb22f6c3bfd5042f629d5fcfkasperl@chromium.org class Iterator { 99f5aa83707f1db5aecb22f6c3bfd5042f629d5fcfkasperl@chromium.org public: 100f5aa83707f1db5aecb22f6c3bfd5042f629d5fcfkasperl@chromium.org explicit Iterator(CounterMap* map) 101f5aa83707f1db5aecb22f6c3bfd5042f629d5fcfkasperl@chromium.org : map_(&map->hash_map_), entry_(map_->Start()) { } 102f5aa83707f1db5aecb22f6c3bfd5042f629d5fcfkasperl@chromium.org void Next() { entry_ = map_->Next(entry_); } 103f5aa83707f1db5aecb22f6c3bfd5042f629d5fcfkasperl@chromium.org bool More() { return entry_ != NULL; } 104f5aa83707f1db5aecb22f6c3bfd5042f629d5fcfkasperl@chromium.org const char* CurrentKey() { return static_cast<const char*>(entry_->key); } 105f5aa83707f1db5aecb22f6c3bfd5042f629d5fcfkasperl@chromium.org Counter* CurrentValue() { return static_cast<Counter*>(entry_->value); } 106f5aa83707f1db5aecb22f6c3bfd5042f629d5fcfkasperl@chromium.org private: 107f5aa83707f1db5aecb22f6c3bfd5042f629d5fcfkasperl@chromium.org i::HashMap* map_; 108f5aa83707f1db5aecb22f6c3bfd5042f629d5fcfkasperl@chromium.org i::HashMap::Entry* entry_; 109f5aa83707f1db5aecb22f6c3bfd5042f629d5fcfkasperl@chromium.org }; 110e297f5973a8a9ff0d9945da3f1e2d8a6230c294djkummerow@chromium.org 111f5aa83707f1db5aecb22f6c3bfd5042f629d5fcfkasperl@chromium.org private: 112f5aa83707f1db5aecb22f6c3bfd5042f629d5fcfkasperl@chromium.org static int Hash(const char* name); 113f5aa83707f1db5aecb22f6c3bfd5042f629d5fcfkasperl@chromium.org static bool Match(void* key1, void* key2); 114f5aa83707f1db5aecb22f6c3bfd5042f629d5fcfkasperl@chromium.org i::HashMap hash_map_; 115f5aa83707f1db5aecb22f6c3bfd5042f629d5fcfkasperl@chromium.org}; 1167c2628c3f0353f0558760c3ca442f934263ea766kmillikin@chromium.org#endif // V8_SHARED 117f5aa83707f1db5aecb22f6c3bfd5042f629d5fcfkasperl@chromium.org 118f5aa83707f1db5aecb22f6c3bfd5042f629d5fcfkasperl@chromium.org 11934e60787ea1e76f3ee49e859f71f036170c21f0elrn@chromium.orgclass LineEditor { 12034e60787ea1e76f3ee49e859f71f036170c21f0elrn@chromium.org public: 12134e60787ea1e76f3ee49e859f71f036170c21f0elrn@chromium.org enum Type { DUMB = 0, READLINE = 1 }; 12234e60787ea1e76f3ee49e859f71f036170c21f0elrn@chromium.org LineEditor(Type type, const char* name); 12334e60787ea1e76f3ee49e859f71f036170c21f0elrn@chromium.org virtual ~LineEditor() { } 12434e60787ea1e76f3ee49e859f71f036170c21f0elrn@chromium.org 1252efb900e7350b14be905abdeab077f3a64c583cfulan@chromium.org virtual Handle<String> Prompt(const char* prompt) = 0; 1266e196bfaf0e555d0c835390bb6ebc0a74484491dulan@chromium.org virtual bool Open(Isolate* isolate) { return true; } 12734e60787ea1e76f3ee49e859f71f036170c21f0elrn@chromium.org virtual bool Close() { return true; } 12834e60787ea1e76f3ee49e859f71f036170c21f0elrn@chromium.org virtual void AddHistory(const char* str) { } 12934e60787ea1e76f3ee49e859f71f036170c21f0elrn@chromium.org 13034e60787ea1e76f3ee49e859f71f036170c21f0elrn@chromium.org const char* name() { return name_; } 1314a9f6553038df6b893b3d3ccae351723f4cbbae7yangguo@chromium.org static LineEditor* Get() { return current_; } 13234e60787ea1e76f3ee49e859f71f036170c21f0elrn@chromium.org private: 13334e60787ea1e76f3ee49e859f71f036170c21f0elrn@chromium.org Type type_; 13434e60787ea1e76f3ee49e859f71f036170c21f0elrn@chromium.org const char* name_; 1354a9f6553038df6b893b3d3ccae351723f4cbbae7yangguo@chromium.org static LineEditor* current_; 13634e60787ea1e76f3ee49e859f71f036170c21f0elrn@chromium.org}; 13734e60787ea1e76f3ee49e859f71f036170c21f0elrn@chromium.org 13834e60787ea1e76f3ee49e859f71f036170c21f0elrn@chromium.org 1396db8871df97e7137d11f956af3c772f4f8370761sgjesse@chromium.orgclass SourceGroup { 1406db8871df97e7137d11f956af3c772f4f8370761sgjesse@chromium.org public: 14184bcc559ac20fb04f806e97d28a314b20b58fd60svenpanne@chromium.org SourceGroup() : 1427c2628c3f0353f0558760c3ca442f934263ea766kmillikin@chromium.org#ifndef V8_SHARED 143e900018c7a2a695fde788911564da37535c7e736mstarzinger@chromium.org next_semaphore_(0), 144e900018c7a2a695fde788911564da37535c7e736mstarzinger@chromium.org done_semaphore_(0), 14583e168294456ca2f02db421a635f7d5f5d023966kmillikin@chromium.org thread_(NULL), 1467c2628c3f0353f0558760c3ca442f934263ea766kmillikin@chromium.org#endif // V8_SHARED 14784bcc559ac20fb04f806e97d28a314b20b58fd60svenpanne@chromium.org argv_(NULL), 14884bcc559ac20fb04f806e97d28a314b20b58fd60svenpanne@chromium.org begin_offset_(0), 14955ee80713569ab0324fc8dcedcb5518501daa6a6ricow@chromium.org end_offset_(0) {} 1506db8871df97e7137d11f956af3c772f4f8370761sgjesse@chromium.org 15183e168294456ca2f02db421a635f7d5f5d023966kmillikin@chromium.org ~SourceGroup(); 15283e168294456ca2f02db421a635f7d5f5d023966kmillikin@chromium.org 1536db8871df97e7137d11f956af3c772f4f8370761sgjesse@chromium.org void Begin(char** argv, int offset) { 1546db8871df97e7137d11f956af3c772f4f8370761sgjesse@chromium.org argv_ = const_cast<const char**>(argv); 1556db8871df97e7137d11f956af3c772f4f8370761sgjesse@chromium.org begin_offset_ = offset; 1566db8871df97e7137d11f956af3c772f4f8370761sgjesse@chromium.org } 1576db8871df97e7137d11f956af3c772f4f8370761sgjesse@chromium.org 1586db8871df97e7137d11f956af3c772f4f8370761sgjesse@chromium.org void End(int offset) { end_offset_ = offset; } 1596db8871df97e7137d11f956af3c772f4f8370761sgjesse@chromium.org 1608e8d8825f97138de12985f8e0d3163074dff5258ulan@chromium.org void Execute(Isolate* isolate); 1616db8871df97e7137d11f956af3c772f4f8370761sgjesse@chromium.org 1627c2628c3f0353f0558760c3ca442f934263ea766kmillikin@chromium.org#ifndef V8_SHARED 1636db8871df97e7137d11f956af3c772f4f8370761sgjesse@chromium.org void StartExecuteInThread(); 1646db8871df97e7137d11f956af3c772f4f8370761sgjesse@chromium.org void WaitForThread(); 1656db8871df97e7137d11f956af3c772f4f8370761sgjesse@chromium.org 1666db8871df97e7137d11f956af3c772f4f8370761sgjesse@chromium.org private: 1676db8871df97e7137d11f956af3c772f4f8370761sgjesse@chromium.org class IsolateThread : public i::Thread { 1686db8871df97e7137d11f956af3c772f4f8370761sgjesse@chromium.org public: 1696db8871df97e7137d11f956af3c772f4f8370761sgjesse@chromium.org explicit IsolateThread(SourceGroup* group) 1706db8871df97e7137d11f956af3c772f4f8370761sgjesse@chromium.org : i::Thread(GetThreadOptions()), group_(group) {} 1716db8871df97e7137d11f956af3c772f4f8370761sgjesse@chromium.org 1726db8871df97e7137d11f956af3c772f4f8370761sgjesse@chromium.org virtual void Run() { 1736db8871df97e7137d11f956af3c772f4f8370761sgjesse@chromium.org group_->ExecuteInThread(); 1746db8871df97e7137d11f956af3c772f4f8370761sgjesse@chromium.org } 1756db8871df97e7137d11f956af3c772f4f8370761sgjesse@chromium.org 1766db8871df97e7137d11f956af3c772f4f8370761sgjesse@chromium.org private: 1776db8871df97e7137d11f956af3c772f4f8370761sgjesse@chromium.org SourceGroup* group_; 1786db8871df97e7137d11f956af3c772f4f8370761sgjesse@chromium.org }; 1796db8871df97e7137d11f956af3c772f4f8370761sgjesse@chromium.org 1806db8871df97e7137d11f956af3c772f4f8370761sgjesse@chromium.org static i::Thread::Options GetThreadOptions(); 1816db8871df97e7137d11f956af3c772f4f8370761sgjesse@chromium.org void ExecuteInThread(); 1826db8871df97e7137d11f956af3c772f4f8370761sgjesse@chromium.org 183e900018c7a2a695fde788911564da37535c7e736mstarzinger@chromium.org i::Semaphore next_semaphore_; 184e900018c7a2a695fde788911564da37535c7e736mstarzinger@chromium.org i::Semaphore done_semaphore_; 18583e168294456ca2f02db421a635f7d5f5d023966kmillikin@chromium.org i::Thread* thread_; 1867c2628c3f0353f0558760c3ca442f934263ea766kmillikin@chromium.org#endif // V8_SHARED 1876db8871df97e7137d11f956af3c772f4f8370761sgjesse@chromium.org 1886db8871df97e7137d11f956af3c772f4f8370761sgjesse@chromium.org void ExitShell(int exit_code); 1898e8d8825f97138de12985f8e0d3163074dff5258ulan@chromium.org Handle<String> ReadFile(Isolate* isolate, const char* name); 1906db8871df97e7137d11f956af3c772f4f8370761sgjesse@chromium.org 1916db8871df97e7137d11f956af3c772f4f8370761sgjesse@chromium.org const char** argv_; 1926db8871df97e7137d11f956af3c772f4f8370761sgjesse@chromium.org int begin_offset_; 1936db8871df97e7137d11f956af3c772f4f8370761sgjesse@chromium.org int end_offset_; 1946db8871df97e7137d11f956af3c772f4f8370761sgjesse@chromium.org}; 1956db8871df97e7137d11f956af3c772f4f8370761sgjesse@chromium.org 1966db8871df97e7137d11f956af3c772f4f8370761sgjesse@chromium.org 197659ceec4628056d3c6e7076c850fba1c412cbb8ayangguo@chromium.orgclass BinaryResource : public v8::String::ExternalAsciiStringResource { 198659ceec4628056d3c6e7076c850fba1c412cbb8ayangguo@chromium.org public: 199659ceec4628056d3c6e7076c850fba1c412cbb8ayangguo@chromium.org BinaryResource(const char* string, int length) 200659ceec4628056d3c6e7076c850fba1c412cbb8ayangguo@chromium.org : data_(string), 201659ceec4628056d3c6e7076c850fba1c412cbb8ayangguo@chromium.org length_(length) { } 202659ceec4628056d3c6e7076c850fba1c412cbb8ayangguo@chromium.org 203659ceec4628056d3c6e7076c850fba1c412cbb8ayangguo@chromium.org ~BinaryResource() { 204659ceec4628056d3c6e7076c850fba1c412cbb8ayangguo@chromium.org delete[] data_; 205659ceec4628056d3c6e7076c850fba1c412cbb8ayangguo@chromium.org data_ = NULL; 206659ceec4628056d3c6e7076c850fba1c412cbb8ayangguo@chromium.org length_ = 0; 207659ceec4628056d3c6e7076c850fba1c412cbb8ayangguo@chromium.org } 208659ceec4628056d3c6e7076c850fba1c412cbb8ayangguo@chromium.org 209659ceec4628056d3c6e7076c850fba1c412cbb8ayangguo@chromium.org virtual const char* data() const { return data_; } 210659ceec4628056d3c6e7076c850fba1c412cbb8ayangguo@chromium.org virtual size_t length() const { return length_; } 211659ceec4628056d3c6e7076c850fba1c412cbb8ayangguo@chromium.org 212659ceec4628056d3c6e7076c850fba1c412cbb8ayangguo@chromium.org private: 213659ceec4628056d3c6e7076c850fba1c412cbb8ayangguo@chromium.org const char* data_; 214659ceec4628056d3c6e7076c850fba1c412cbb8ayangguo@chromium.org size_t length_; 215659ceec4628056d3c6e7076c850fba1c412cbb8ayangguo@chromium.org}; 216659ceec4628056d3c6e7076c850fba1c412cbb8ayangguo@chromium.org 217659ceec4628056d3c6e7076c850fba1c412cbb8ayangguo@chromium.org 2186db8871df97e7137d11f956af3c772f4f8370761sgjesse@chromium.orgclass ShellOptions { 2196db8871df97e7137d11f956af3c772f4f8370761sgjesse@chromium.org public: 22084bcc559ac20fb04f806e97d28a314b20b58fd60svenpanne@chromium.org ShellOptions() : 2217c2628c3f0353f0558760c3ca442f934263ea766kmillikin@chromium.org#ifndef V8_SHARED 22234e60787ea1e76f3ee49e859f71f036170c21f0elrn@chromium.org num_parallel_files(0), 22384bcc559ac20fb04f806e97d28a314b20b58fd60svenpanne@chromium.org parallel_files(NULL), 2247c2628c3f0353f0558760c3ca442f934263ea766kmillikin@chromium.org#endif // V8_SHARED 22584bcc559ac20fb04f806e97d28a314b20b58fd60svenpanne@chromium.org script_executed(false), 22684bcc559ac20fb04f806e97d28a314b20b58fd60svenpanne@chromium.org last_run(true), 22746839fbbdee40a3d2d924e8b5b13c4139b0b24f2yangguo@chromium.org send_idle_notification(false), 22884bcc559ac20fb04f806e97d28a314b20b58fd60svenpanne@chromium.org stress_opt(false), 22984bcc559ac20fb04f806e97d28a314b20b58fd60svenpanne@chromium.org stress_deopt(false), 23084bcc559ac20fb04f806e97d28a314b20b58fd60svenpanne@chromium.org interactive_shell(false), 23184bcc559ac20fb04f806e97d28a314b20b58fd60svenpanne@chromium.org test_shell(false), 232594006017e46d82ed7146611dc12c20e3c509c7ddanno@chromium.org dump_heap_constants(false), 23363ea3d20e0c5531a4bb0853218d5f746117edea1mvstanton@chromium.org expected_to_throw(false), 234af9cfcbed5daf6e636e189bce451c6fafdbb127dmachenbach@chromium.org mock_arraybuffer_allocator(false), 23584bcc559ac20fb04f806e97d28a314b20b58fd60svenpanne@chromium.org num_isolates(1), 23684bcc559ac20fb04f806e97d28a314b20b58fd60svenpanne@chromium.org isolate_sources(NULL) { } 23784bcc559ac20fb04f806e97d28a314b20b58fd60svenpanne@chromium.org 23834e60787ea1e76f3ee49e859f71f036170c21f0elrn@chromium.org ~ShellOptions() { 23934e60787ea1e76f3ee49e859f71f036170c21f0elrn@chromium.org#ifndef V8_SHARED 24034e60787ea1e76f3ee49e859f71f036170c21f0elrn@chromium.org delete[] parallel_files; 24134e60787ea1e76f3ee49e859f71f036170c21f0elrn@chromium.org#endif // V8_SHARED 24234e60787ea1e76f3ee49e859f71f036170c21f0elrn@chromium.org delete[] isolate_sources; 24334e60787ea1e76f3ee49e859f71f036170c21f0elrn@chromium.org } 24434e60787ea1e76f3ee49e859f71f036170c21f0elrn@chromium.org 2457c2628c3f0353f0558760c3ca442f934263ea766kmillikin@chromium.org#ifndef V8_SHARED 24634e60787ea1e76f3ee49e859f71f036170c21f0elrn@chromium.org int num_parallel_files; 24734e60787ea1e76f3ee49e859f71f036170c21f0elrn@chromium.org char** parallel_files; 2487c2628c3f0353f0558760c3ca442f934263ea766kmillikin@chromium.org#endif // V8_SHARED 2496db8871df97e7137d11f956af3c772f4f8370761sgjesse@chromium.org bool script_executed; 2506db8871df97e7137d11f956af3c772f4f8370761sgjesse@chromium.org bool last_run; 25146839fbbdee40a3d2d924e8b5b13c4139b0b24f2yangguo@chromium.org bool send_idle_notification; 2526db8871df97e7137d11f956af3c772f4f8370761sgjesse@chromium.org bool stress_opt; 2536db8871df97e7137d11f956af3c772f4f8370761sgjesse@chromium.org bool stress_deopt; 2546db8871df97e7137d11f956af3c772f4f8370761sgjesse@chromium.org bool interactive_shell; 2556db8871df97e7137d11f956af3c772f4f8370761sgjesse@chromium.org bool test_shell; 256594006017e46d82ed7146611dc12c20e3c509c7ddanno@chromium.org bool dump_heap_constants; 25763ea3d20e0c5531a4bb0853218d5f746117edea1mvstanton@chromium.org bool expected_to_throw; 258af9cfcbed5daf6e636e189bce451c6fafdbb127dmachenbach@chromium.org bool mock_arraybuffer_allocator; 2596db8871df97e7137d11f956af3c772f4f8370761sgjesse@chromium.org int num_isolates; 2606db8871df97e7137d11f956af3c772f4f8370761sgjesse@chromium.org SourceGroup* isolate_sources; 2616db8871df97e7137d11f956af3c772f4f8370761sgjesse@chromium.org}; 2626db8871df97e7137d11f956af3c772f4f8370761sgjesse@chromium.org 2637c2628c3f0353f0558760c3ca442f934263ea766kmillikin@chromium.org#ifdef V8_SHARED 26484bcc559ac20fb04f806e97d28a314b20b58fd60svenpanne@chromium.orgclass Shell { 26584bcc559ac20fb04f806e97d28a314b20b58fd60svenpanne@chromium.org#else 26684bcc559ac20fb04f806e97d28a314b20b58fd60svenpanne@chromium.orgclass Shell : public i::AllStatic { 2677c2628c3f0353f0558760c3ca442f934263ea766kmillikin@chromium.org#endif // V8_SHARED 26883e168294456ca2f02db421a635f7d5f5d023966kmillikin@chromium.org 2695a8ca6c70c6fc9716f18f6223c98d1fef5752cf6kasperl@chromium.org public: 2702bda543d75374afd8d7e98f56ca99a57ae1b7bd1svenpanne@chromium.org static bool ExecuteString(Isolate* isolate, 2712bda543d75374afd8d7e98f56ca99a57ae1b7bd1svenpanne@chromium.org Handle<String> source, 2725a8ca6c70c6fc9716f18f6223c98d1fef5752cf6kasperl@chromium.org Handle<Value> name, 2735a8ca6c70c6fc9716f18f6223c98d1fef5752cf6kasperl@chromium.org bool print_result, 2745a8ca6c70c6fc9716f18f6223c98d1fef5752cf6kasperl@chromium.org bool report_exceptions); 275c9c80823e038328f2e1060d7feef0762a50adf06ricow@chromium.org static const char* ToCString(const v8::String::Utf8Value& value); 2762bda543d75374afd8d7e98f56ca99a57ae1b7bd1svenpanne@chromium.org static void ReportException(Isolate* isolate, TryCatch* try_catch); 2778e8d8825f97138de12985f8e0d3163074dff5258ulan@chromium.org static Handle<String> ReadFile(Isolate* isolate, const char* name); 27857ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org static Local<Context> CreateEvaluationContext(Isolate* isolate); 2798e8d8825f97138de12985f8e0d3163074dff5258ulan@chromium.org static int RunMain(Isolate* isolate, int argc, char* argv[]); 28084bcc559ac20fb04f806e97d28a314b20b58fd60svenpanne@chromium.org static int Main(int argc, char* argv[]); 28134e60787ea1e76f3ee49e859f71f036170c21f0elrn@chromium.org static void Exit(int exit_code); 28259297c735ad2a41156ae9c723a39ff259ad061e0jkummerow@chromium.org static void OnExit(); 28384bcc559ac20fb04f806e97d28a314b20b58fd60svenpanne@chromium.org 2847c2628c3f0353f0558760c3ca442f934263ea766kmillikin@chromium.org#ifndef V8_SHARED 2852bda543d75374afd8d7e98f56ca99a57ae1b7bd1svenpanne@chromium.org static Handle<Array> GetCompletions(Isolate* isolate, 2862bda543d75374afd8d7e98f56ca99a57ae1b7bd1svenpanne@chromium.org Handle<String> text, 28784bcc559ac20fb04f806e97d28a314b20b58fd60svenpanne@chromium.org Handle<String> full); 288a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org static int* LookupCounter(const char* name); 289d1e3e722d649dfcccf8699a801743c9a5426b0bckasperl@chromium.org static void* CreateHistogram(const char* name, 290d1e3e722d649dfcccf8699a801743c9a5426b0bckasperl@chromium.org int min, 291d1e3e722d649dfcccf8699a801743c9a5426b0bckasperl@chromium.org int max, 292d1e3e722d649dfcccf8699a801743c9a5426b0bckasperl@chromium.org size_t buckets); 293d1e3e722d649dfcccf8699a801743c9a5426b0bckasperl@chromium.org static void AddHistogramSample(void* histogram, int sample); 294a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org static void MapCounters(const char* name); 29584bcc559ac20fb04f806e97d28a314b20b58fd60svenpanne@chromium.org 29665dad4b091d2925543c6326db635d0f7cf9e1edcager@chromium.org#ifdef ENABLE_DEBUGGER_SUPPORT 29757ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org static Handle<Object> DebugMessageDetails(Isolate* isolate, 29857ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org Handle<String> message); 29957ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org static Handle<Value> DebugCommandToJSONRequest(Isolate* isolate, 30057ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org Handle<String> command); 30105ed9ddc6ff3a1ab3983c50d378cddfa257869b6jkummerow@chromium.org static void DispatchDebugMessages(); 30205ed9ddc6ff3a1ab3983c50d378cddfa257869b6jkummerow@chromium.org#endif // ENABLE_DEBUGGER_SUPPORT 303e94b5ff1e1e95fb2c8ef6bce66ce8533786d9792bmeurer@chromium.org 304e94b5ff1e1e95fb2c8ef6bce66ce8533786d9792bmeurer@chromium.org static void PerformanceNow(const v8::FunctionCallbackInfo<v8::Value>& args); 30505ed9ddc6ff3a1ab3983c50d378cddfa257869b6jkummerow@chromium.org#endif // V8_SHARED 3065a8ca6c70c6fc9716f18f6223c98d1fef5752cf6kasperl@chromium.org 307d4be0f0c0edfc0a0b46e745055c3dc497c0ffcb5verwaest@chromium.org static void RealmCurrent(const v8::FunctionCallbackInfo<v8::Value>& args); 308d4be0f0c0edfc0a0b46e745055c3dc497c0ffcb5verwaest@chromium.org static void RealmOwner(const v8::FunctionCallbackInfo<v8::Value>& args); 309d4be0f0c0edfc0a0b46e745055c3dc497c0ffcb5verwaest@chromium.org static void RealmGlobal(const v8::FunctionCallbackInfo<v8::Value>& args); 310d4be0f0c0edfc0a0b46e745055c3dc497c0ffcb5verwaest@chromium.org static void RealmCreate(const v8::FunctionCallbackInfo<v8::Value>& args); 311d4be0f0c0edfc0a0b46e745055c3dc497c0ffcb5verwaest@chromium.org static void RealmDispose(const v8::FunctionCallbackInfo<v8::Value>& args); 312d4be0f0c0edfc0a0b46e745055c3dc497c0ffcb5verwaest@chromium.org static void RealmSwitch(const v8::FunctionCallbackInfo<v8::Value>& args); 313d4be0f0c0edfc0a0b46e745055c3dc497c0ffcb5verwaest@chromium.org static void RealmEval(const v8::FunctionCallbackInfo<v8::Value>& args); 314d4be0f0c0edfc0a0b46e745055c3dc497c0ffcb5verwaest@chromium.org static void RealmSharedGet(Local<String> property, 315d4be0f0c0edfc0a0b46e745055c3dc497c0ffcb5verwaest@chromium.org const PropertyCallbackInfo<Value>& info); 31632d7dbafe29be06cec1edd36c31fbe2865c799f4ulan@chromium.org static void RealmSharedSet(Local<String> property, 31732d7dbafe29be06cec1edd36c31fbe2865c799f4ulan@chromium.org Local<Value> value, 318d4be0f0c0edfc0a0b46e745055c3dc497c0ffcb5verwaest@chromium.org const PropertyCallbackInfo<void>& info); 319d4be0f0c0edfc0a0b46e745055c3dc497c0ffcb5verwaest@chromium.org 320d4be0f0c0edfc0a0b46e745055c3dc497c0ffcb5verwaest@chromium.org static void Print(const v8::FunctionCallbackInfo<v8::Value>& args); 321d4be0f0c0edfc0a0b46e745055c3dc497c0ffcb5verwaest@chromium.org static void Write(const v8::FunctionCallbackInfo<v8::Value>& args); 322d4be0f0c0edfc0a0b46e745055c3dc497c0ffcb5verwaest@chromium.org static void Quit(const v8::FunctionCallbackInfo<v8::Value>& args); 323d4be0f0c0edfc0a0b46e745055c3dc497c0ffcb5verwaest@chromium.org static void Version(const v8::FunctionCallbackInfo<v8::Value>& args); 324d4be0f0c0edfc0a0b46e745055c3dc497c0ffcb5verwaest@chromium.org static void Read(const v8::FunctionCallbackInfo<v8::Value>& args); 325d4be0f0c0edfc0a0b46e745055c3dc497c0ffcb5verwaest@chromium.org static void ReadBuffer(const v8::FunctionCallbackInfo<v8::Value>& args); 3268e8d8825f97138de12985f8e0d3163074dff5258ulan@chromium.org static Handle<String> ReadFromStdin(Isolate* isolate); 327d4be0f0c0edfc0a0b46e745055c3dc497c0ffcb5verwaest@chromium.org static void ReadLine(const v8::FunctionCallbackInfo<v8::Value>& args) { 328d4be0f0c0edfc0a0b46e745055c3dc497c0ffcb5verwaest@chromium.org args.GetReturnValue().Set(ReadFromStdin(args.GetIsolate())); 3292efb900e7350b14be905abdeab077f3a64c583cfulan@chromium.org } 330d4be0f0c0edfc0a0b46e745055c3dc497c0ffcb5verwaest@chromium.org static void Load(const v8::FunctionCallbackInfo<v8::Value>& args); 331d4be0f0c0edfc0a0b46e745055c3dc497c0ffcb5verwaest@chromium.org static void ArrayBuffer(const v8::FunctionCallbackInfo<v8::Value>& args); 332d4be0f0c0edfc0a0b46e745055c3dc497c0ffcb5verwaest@chromium.org static void Int8Array(const v8::FunctionCallbackInfo<v8::Value>& args); 333d4be0f0c0edfc0a0b46e745055c3dc497c0ffcb5verwaest@chromium.org static void Uint8Array(const v8::FunctionCallbackInfo<v8::Value>& args); 334d4be0f0c0edfc0a0b46e745055c3dc497c0ffcb5verwaest@chromium.org static void Int16Array(const v8::FunctionCallbackInfo<v8::Value>& args); 335d4be0f0c0edfc0a0b46e745055c3dc497c0ffcb5verwaest@chromium.org static void Uint16Array(const v8::FunctionCallbackInfo<v8::Value>& args); 336d4be0f0c0edfc0a0b46e745055c3dc497c0ffcb5verwaest@chromium.org static void Int32Array(const v8::FunctionCallbackInfo<v8::Value>& args); 337d4be0f0c0edfc0a0b46e745055c3dc497c0ffcb5verwaest@chromium.org static void Uint32Array(const v8::FunctionCallbackInfo<v8::Value>& args); 338d4be0f0c0edfc0a0b46e745055c3dc497c0ffcb5verwaest@chromium.org static void Float32Array(const v8::FunctionCallbackInfo<v8::Value>& args); 339d4be0f0c0edfc0a0b46e745055c3dc497c0ffcb5verwaest@chromium.org static void Float64Array(const v8::FunctionCallbackInfo<v8::Value>& args); 340d4be0f0c0edfc0a0b46e745055c3dc497c0ffcb5verwaest@chromium.org static void Uint8ClampedArray( 341d4be0f0c0edfc0a0b46e745055c3dc497c0ffcb5verwaest@chromium.org const v8::FunctionCallbackInfo<v8::Value>& args); 342d4be0f0c0edfc0a0b46e745055c3dc497c0ffcb5verwaest@chromium.org static void ArrayBufferSlice(const v8::FunctionCallbackInfo<v8::Value>& args); 343d4be0f0c0edfc0a0b46e745055c3dc497c0ffcb5verwaest@chromium.org static void ArraySubArray(const v8::FunctionCallbackInfo<v8::Value>& args); 344d4be0f0c0edfc0a0b46e745055c3dc497c0ffcb5verwaest@chromium.org static void ArraySet(const v8::FunctionCallbackInfo<v8::Value>& args); 34571daaf639544be2a6638e3566f78e0b14f05cd7bager@chromium.org // The OS object on the global object contains methods for performing 34671daaf639544be2a6638e3566f78e0b14f05cd7bager@chromium.org // operating system calls: 34771daaf639544be2a6638e3566f78e0b14f05cd7bager@chromium.org // 34871daaf639544be2a6638e3566f78e0b14f05cd7bager@chromium.org // os.system("program_name", ["arg1", "arg2", ...], timeout1, timeout2) will 34971daaf639544be2a6638e3566f78e0b14f05cd7bager@chromium.org // run the command, passing the arguments to the program. The standard output 35071daaf639544be2a6638e3566f78e0b14f05cd7bager@chromium.org // of the program will be picked up and returned as a multiline string. If 35141826e77311db718135ef6517b846933dfd275f3ager@chromium.org // timeout1 is present then it should be a number. -1 indicates no timeout 35241826e77311db718135ef6517b846933dfd275f3ager@chromium.org // and a positive number is used as a timeout in milliseconds that limits the 35341826e77311db718135ef6517b846933dfd275f3ager@chromium.org // time spent waiting between receiving output characters from the program. 35441826e77311db718135ef6517b846933dfd275f3ager@chromium.org // timeout2, if present, should be a number indicating the limit in 35541826e77311db718135ef6517b846933dfd275f3ager@chromium.org // milliseconds on the total running time of the program. Exceptions are 35641826e77311db718135ef6517b846933dfd275f3ager@chromium.org // thrown on timeouts or other errors or if the exit status of the program 35741826e77311db718135ef6517b846933dfd275f3ager@chromium.org // indicates an error. 35871daaf639544be2a6638e3566f78e0b14f05cd7bager@chromium.org // 35971daaf639544be2a6638e3566f78e0b14f05cd7bager@chromium.org // os.chdir(dir) changes directory to the given directory. Throws an 36071daaf639544be2a6638e3566f78e0b14f05cd7bager@chromium.org // exception/ on error. 36171daaf639544be2a6638e3566f78e0b14f05cd7bager@chromium.org // 36271daaf639544be2a6638e3566f78e0b14f05cd7bager@chromium.org // os.setenv(variable, value) sets an environment variable. Repeated calls to 36371daaf639544be2a6638e3566f78e0b14f05cd7bager@chromium.org // this method leak memory due to the API of setenv in the standard C library. 36471daaf639544be2a6638e3566f78e0b14f05cd7bager@chromium.org // 36571daaf639544be2a6638e3566f78e0b14f05cd7bager@chromium.org // os.umask(alue) calls the umask system call and returns the old umask. 36671daaf639544be2a6638e3566f78e0b14f05cd7bager@chromium.org // 36771daaf639544be2a6638e3566f78e0b14f05cd7bager@chromium.org // os.mkdirp(name, mask) creates a directory. The mask (if present) is anded 36871daaf639544be2a6638e3566f78e0b14f05cd7bager@chromium.org // with the current umask. Intermediate directories are created if necessary. 36971daaf639544be2a6638e3566f78e0b14f05cd7bager@chromium.org // An exception is not thrown if the directory already exists. Analogous to 37071daaf639544be2a6638e3566f78e0b14f05cd7bager@chromium.org // the "mkdir -p" command. 371d4be0f0c0edfc0a0b46e745055c3dc497c0ffcb5verwaest@chromium.org static void OSObject(const v8::FunctionCallbackInfo<v8::Value>& args); 372d4be0f0c0edfc0a0b46e745055c3dc497c0ffcb5verwaest@chromium.org static void System(const v8::FunctionCallbackInfo<v8::Value>& args); 373d4be0f0c0edfc0a0b46e745055c3dc497c0ffcb5verwaest@chromium.org static void ChangeDirectory(const v8::FunctionCallbackInfo<v8::Value>& args); 374d4be0f0c0edfc0a0b46e745055c3dc497c0ffcb5verwaest@chromium.org static void SetEnvironment(const v8::FunctionCallbackInfo<v8::Value>& args); 375d4be0f0c0edfc0a0b46e745055c3dc497c0ffcb5verwaest@chromium.org static void UnsetEnvironment(const v8::FunctionCallbackInfo<v8::Value>& args); 376d4be0f0c0edfc0a0b46e745055c3dc497c0ffcb5verwaest@chromium.org static void SetUMask(const v8::FunctionCallbackInfo<v8::Value>& args); 377d4be0f0c0edfc0a0b46e745055c3dc497c0ffcb5verwaest@chromium.org static void MakeDirectory(const v8::FunctionCallbackInfo<v8::Value>& args); 378d4be0f0c0edfc0a0b46e745055c3dc497c0ffcb5verwaest@chromium.org static void RemoveDirectory(const v8::FunctionCallbackInfo<v8::Value>& args); 37971daaf639544be2a6638e3566f78e0b14f05cd7bager@chromium.org 380f9841897146bc10dbb3c45f0632bb79254602c75machenbach@chromium.org static void AddOSMethods(v8::Isolate* isolate, 381f9841897146bc10dbb3c45f0632bb79254602c75machenbach@chromium.org Handle<ObjectTemplate> os_template); 3822efb900e7350b14be905abdeab077f3a64c583cfulan@chromium.org 3835a8ca6c70c6fc9716f18f6223c98d1fef5752cf6kasperl@chromium.org static const char* kPrompt; 3846db8871df97e7137d11f956af3c772f4f8370761sgjesse@chromium.org static ShellOptions options; 3856db8871df97e7137d11f956af3c772f4f8370761sgjesse@chromium.org 3865a8ca6c70c6fc9716f18f6223c98d1fef5752cf6kasperl@chromium.org private: 3875a8ca6c70c6fc9716f18f6223c98d1fef5752cf6kasperl@chromium.org static Persistent<Context> evaluation_context_; 3887c2628c3f0353f0558760c3ca442f934263ea766kmillikin@chromium.org#ifndef V8_SHARED 38984bcc559ac20fb04f806e97d28a314b20b58fd60svenpanne@chromium.org static Persistent<Context> utility_context_; 390f5aa83707f1db5aecb22f6c3bfd5042f629d5fcfkasperl@chromium.org static CounterMap* counter_map_; 391a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org // We statically allocate a set of local counters to be used if we 392a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org // don't want to store the stats in a memory-mapped file 393a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org static CounterCollection local_counters_; 394a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org static CounterCollection* counters_; 395a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org static i::OS::MemoryMappedFile* counters_file_; 396dc94e19484d1700cb0ec22365444223e49a3ac1ejkummerow@chromium.org static i::Mutex context_mutex_; 397e94b5ff1e1e95fb2c8ef6bce66ce8533786d9792bmeurer@chromium.org static const i::TimeTicks kInitialTicks; 39884bcc559ac20fb04f806e97d28a314b20b58fd60svenpanne@chromium.org 399d1e3e722d649dfcccf8699a801743c9a5426b0bckasperl@chromium.org static Counter* GetCounter(const char* name, bool is_histogram); 40046a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org static void InstallUtilityScript(Isolate* isolate); 4017c2628c3f0353f0558760c3ca442f934263ea766kmillikin@chromium.org#endif // V8_SHARED 4028e8d8825f97138de12985f8e0d3163074dff5258ulan@chromium.org static void Initialize(Isolate* isolate); 4038e8d8825f97138de12985f8e0d3163074dff5258ulan@chromium.org static void InitializeDebugger(Isolate* isolate); 4048e8d8825f97138de12985f8e0d3163074dff5258ulan@chromium.org static void RunShell(Isolate* isolate); 40584bcc559ac20fb04f806e97d28a314b20b58fd60svenpanne@chromium.org static bool SetOptions(int argc, char* argv[]); 4068e8d8825f97138de12985f8e0d3163074dff5258ulan@chromium.org static Handle<ObjectTemplate> CreateGlobalTemplate(Isolate* isolate); 407662436e7b124b3535773535c671c53db322070b5verwaest@chromium.org static Handle<FunctionTemplate> CreateArrayBufferTemplate(FunctionCallback); 408662436e7b124b3535773535c671c53db322070b5verwaest@chromium.org static Handle<FunctionTemplate> CreateArrayTemplate(FunctionCallback); 4098e8d8825f97138de12985f8e0d3163074dff5258ulan@chromium.org static Handle<Value> CreateExternalArrayBuffer(Isolate* isolate, 4108e8d8825f97138de12985f8e0d3163074dff5258ulan@chromium.org Handle<Object> buffer, 411c74d674717b2e229addbb9349986cd157947f7edyangguo@chromium.org int32_t size); 4128e8d8825f97138de12985f8e0d3163074dff5258ulan@chromium.org static Handle<Object> CreateExternalArray(Isolate* isolate, 4138e8d8825f97138de12985f8e0d3163074dff5258ulan@chromium.org Handle<Object> array, 414c74d674717b2e229addbb9349986cd157947f7edyangguo@chromium.org Handle<Object> buffer, 415c74d674717b2e229addbb9349986cd157947f7edyangguo@chromium.org ExternalArrayType type, 416c74d674717b2e229addbb9349986cd157947f7edyangguo@chromium.org int32_t length, 417c74d674717b2e229addbb9349986cd157947f7edyangguo@chromium.org int32_t byteLength, 418c74d674717b2e229addbb9349986cd157947f7edyangguo@chromium.org int32_t byteOffset, 419c74d674717b2e229addbb9349986cd157947f7edyangguo@chromium.org int32_t element_size); 420d4be0f0c0edfc0a0b46e745055c3dc497c0ffcb5verwaest@chromium.org static void CreateExternalArray( 421d4be0f0c0edfc0a0b46e745055c3dc497c0ffcb5verwaest@chromium.org const v8::FunctionCallbackInfo<v8::Value>& args, 422d4be0f0c0edfc0a0b46e745055c3dc497c0ffcb5verwaest@chromium.org ExternalArrayType type, 423d4be0f0c0edfc0a0b46e745055c3dc497c0ffcb5verwaest@chromium.org int32_t element_size); 424d16d8531698e91e9c60a7db9e0ba3c3bb15aff20mvstanton@chromium.org static void ExternalArrayWeakCallback(Isolate* isolate, 42557ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org Persistent<Object>* object, 42657ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org uint8_t* data); 4275a8ca6c70c6fc9716f18f6223c98d1fef5752cf6kasperl@chromium.org}; 4285a8ca6c70c6fc9716f18f6223c98d1fef5752cf6kasperl@chromium.org 4295a8ca6c70c6fc9716f18f6223c98d1fef5752cf6kasperl@chromium.org 4305a8ca6c70c6fc9716f18f6223c98d1fef5752cf6kasperl@chromium.org} // namespace v8 4315a8ca6c70c6fc9716f18f6223c98d1fef5752cf6kasperl@chromium.org 4325a8ca6c70c6fc9716f18f6223c98d1fef5752cf6kasperl@chromium.org 4335a8ca6c70c6fc9716f18f6223c98d1fef5752cf6kasperl@chromium.org#endif // V8_D8_H_ 434