blob: 411dfdda3e12488a775a35a29b3548a93a838efd [file] [log] [blame]
erik.corry@gmail.comf2038fb2012-01-16 11:42:08 +00001// Copyright 2012 the V8 project authors. All rights reserved.
kasperl@chromium.org5a8ca6c2008-10-23 13:57:19 +00002// Redistribution and use in source and binary forms, with or without
3// modification, are permitted provided that the following conditions are
4// met:
5//
6// * Redistributions of source code must retain the above copyright
7// notice, this list of conditions and the following disclaimer.
8// * Redistributions in binary form must reproduce the above
9// copyright notice, this list of conditions and the following
10// disclaimer in the documentation and/or other materials provided
11// with the distribution.
12// * Neither the name of Google Inc. nor the names of its
13// contributors may be used to endorse or promote products derived
14// from this software without specific prior written permission.
15//
16// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
17// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
18// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
19// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
20// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
21// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
22// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
23// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
24// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
25// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
26// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27
28#ifndef V8_D8_H_
29#define V8_D8_H_
30
kmillikin@chromium.org7c2628c2011-08-10 11:27:35 +000031#ifndef V8_SHARED
svenpanne@chromium.org84bcc552011-07-18 09:50:57 +000032#include "allocation.h"
kasperl@chromium.orgf5aa8372009-03-24 14:47:14 +000033#include "hashmap.h"
yangguo@chromium.org304cc332012-07-24 07:59:48 +000034#include "smart-pointers.h"
ricow@chromium.org55ee8072011-09-08 16:33:10 +000035#include "v8.h"
svenpanne@chromium.org84bcc552011-07-18 09:50:57 +000036#else
37#include "../include/v8.h"
kmillikin@chromium.org7c2628c2011-08-10 11:27:35 +000038#endif // V8_SHARED
kasperl@chromium.org5a8ca6c2008-10-23 13:57:19 +000039
kasperl@chromium.org5a8ca6c2008-10-23 13:57:19 +000040namespace v8 {
41
kasperl@chromium.org5a8ca6c2008-10-23 13:57:19 +000042
kmillikin@chromium.org7c2628c2011-08-10 11:27:35 +000043#ifndef V8_SHARED
ager@chromium.orga74f0da2008-12-03 16:05:52 +000044// A single counter in a counter collection.
kasperl@chromium.org5a8ca6c2008-10-23 13:57:19 +000045class Counter {
46 public:
ager@chromium.orga74f0da2008-12-03 16:05:52 +000047 static const int kMaxNameSize = 64;
kasperl@chromium.orgd1e3e722009-04-14 13:38:25 +000048 int32_t* Bind(const char* name, bool histogram);
49 int32_t* ptr() { return &count_; }
50 int32_t count() { return count_; }
51 int32_t sample_total() { return sample_total_; }
52 bool is_histogram() { return is_histogram_; }
53 void AddSample(int32_t sample);
kasperl@chromium.org5a8ca6c2008-10-23 13:57:19 +000054 private:
kasperl@chromium.orgd1e3e722009-04-14 13:38:25 +000055 int32_t count_;
56 int32_t sample_total_;
57 bool is_histogram_;
ager@chromium.orga74f0da2008-12-03 16:05:52 +000058 uint8_t name_[kMaxNameSize];
59};
60
61
62// A set of counters and associated information. An instance of this
63// class is stored directly in the memory-mapped counters file if
64// the --map-counters options is used
65class CounterCollection {
66 public:
67 CounterCollection();
68 Counter* GetNextCounter();
69 private:
jkummerow@chromium.org28583c92012-07-16 11:31:55 +000070 static const unsigned kMaxCounters = 512;
ager@chromium.orga74f0da2008-12-03 16:05:52 +000071 uint32_t magic_number_;
72 uint32_t max_counters_;
73 uint32_t max_name_size_;
74 uint32_t counters_in_use_;
75 Counter counters_[kMaxCounters];
kasperl@chromium.org5a8ca6c2008-10-23 13:57:19 +000076};
77
78
kasperl@chromium.orgf5aa8372009-03-24 14:47:14 +000079class CounterMap {
80 public:
81 CounterMap(): hash_map_(Match) { }
82 Counter* Lookup(const char* name) {
83 i::HashMap::Entry* answer = hash_map_.Lookup(
84 const_cast<char*>(name),
85 Hash(name),
86 false);
87 if (!answer) return NULL;
88 return reinterpret_cast<Counter*>(answer->value);
89 }
90 void Set(const char* name, Counter* value) {
91 i::HashMap::Entry* answer = hash_map_.Lookup(
92 const_cast<char*>(name),
93 Hash(name),
94 true);
95 ASSERT(answer != NULL);
96 answer->value = value;
97 }
98 class Iterator {
99 public:
100 explicit Iterator(CounterMap* map)
101 : map_(&map->hash_map_), entry_(map_->Start()) { }
102 void Next() { entry_ = map_->Next(entry_); }
103 bool More() { return entry_ != NULL; }
104 const char* CurrentKey() { return static_cast<const char*>(entry_->key); }
105 Counter* CurrentValue() { return static_cast<Counter*>(entry_->value); }
106 private:
107 i::HashMap* map_;
108 i::HashMap::Entry* entry_;
109 };
jkummerow@chromium.orge297f592011-06-08 10:05:15 +0000110
kasperl@chromium.orgf5aa8372009-03-24 14:47:14 +0000111 private:
112 static int Hash(const char* name);
113 static bool Match(void* key1, void* key2);
114 i::HashMap hash_map_;
115};
kmillikin@chromium.org7c2628c2011-08-10 11:27:35 +0000116#endif // V8_SHARED
kasperl@chromium.orgf5aa8372009-03-24 14:47:14 +0000117
118
lrn@chromium.org34e60782011-09-15 07:25:40 +0000119class LineEditor {
120 public:
121 enum Type { DUMB = 0, READLINE = 1 };
122 LineEditor(Type type, const char* name);
123 virtual ~LineEditor() { }
124
ulan@chromium.org2efb9002012-01-19 15:36:35 +0000125 virtual Handle<String> Prompt(const char* prompt) = 0;
ulan@chromium.org6e196bf2013-03-13 09:38:22 +0000126 virtual bool Open(Isolate* isolate) { return true; }
lrn@chromium.org34e60782011-09-15 07:25:40 +0000127 virtual bool Close() { return true; }
128 virtual void AddHistory(const char* str) { }
129
130 const char* name() { return name_; }
yangguo@chromium.org4a9f6552013-03-04 14:46:33 +0000131 static LineEditor* Get() { return current_; }
lrn@chromium.org34e60782011-09-15 07:25:40 +0000132 private:
133 Type type_;
134 const char* name_;
yangguo@chromium.org4a9f6552013-03-04 14:46:33 +0000135 static LineEditor* current_;
lrn@chromium.org34e60782011-09-15 07:25:40 +0000136};
lrn@chromium.org34e60782011-09-15 07:25:40 +0000137
138
sgjesse@chromium.org6db88712011-07-11 11:41:22 +0000139class SourceGroup {
140 public:
svenpanne@chromium.org84bcc552011-07-18 09:50:57 +0000141 SourceGroup() :
kmillikin@chromium.org7c2628c2011-08-10 11:27:35 +0000142#ifndef V8_SHARED
mstarzinger@chromium.orge9000182013-09-03 11:25:39 +0000143 next_semaphore_(0),
144 done_semaphore_(0),
kmillikin@chromium.org83e16822011-09-13 08:21:47 +0000145 thread_(NULL),
kmillikin@chromium.org7c2628c2011-08-10 11:27:35 +0000146#endif // V8_SHARED
svenpanne@chromium.org84bcc552011-07-18 09:50:57 +0000147 argv_(NULL),
148 begin_offset_(0),
ricow@chromium.org55ee8072011-09-08 16:33:10 +0000149 end_offset_(0) {}
sgjesse@chromium.org6db88712011-07-11 11:41:22 +0000150
kmillikin@chromium.org83e16822011-09-13 08:21:47 +0000151 ~SourceGroup();
152
sgjesse@chromium.org6db88712011-07-11 11:41:22 +0000153 void Begin(char** argv, int offset) {
154 argv_ = const_cast<const char**>(argv);
155 begin_offset_ = offset;
156 }
157
158 void End(int offset) { end_offset_ = offset; }
159
ulan@chromium.org8e8d8822012-11-23 14:36:46 +0000160 void Execute(Isolate* isolate);
sgjesse@chromium.org6db88712011-07-11 11:41:22 +0000161
kmillikin@chromium.org7c2628c2011-08-10 11:27:35 +0000162#ifndef V8_SHARED
sgjesse@chromium.org6db88712011-07-11 11:41:22 +0000163 void StartExecuteInThread();
164 void WaitForThread();
165
166 private:
167 class IsolateThread : public i::Thread {
168 public:
169 explicit IsolateThread(SourceGroup* group)
170 : i::Thread(GetThreadOptions()), group_(group) {}
171
172 virtual void Run() {
173 group_->ExecuteInThread();
174 }
175
176 private:
177 SourceGroup* group_;
178 };
179
180 static i::Thread::Options GetThreadOptions();
181 void ExecuteInThread();
182
mstarzinger@chromium.orge9000182013-09-03 11:25:39 +0000183 i::Semaphore next_semaphore_;
184 i::Semaphore done_semaphore_;
kmillikin@chromium.org83e16822011-09-13 08:21:47 +0000185 i::Thread* thread_;
kmillikin@chromium.org7c2628c2011-08-10 11:27:35 +0000186#endif // V8_SHARED
sgjesse@chromium.org6db88712011-07-11 11:41:22 +0000187
188 void ExitShell(int exit_code);
ulan@chromium.org8e8d8822012-11-23 14:36:46 +0000189 Handle<String> ReadFile(Isolate* isolate, const char* name);
sgjesse@chromium.org6db88712011-07-11 11:41:22 +0000190
191 const char** argv_;
192 int begin_offset_;
193 int end_offset_;
194};
195
196
yangguo@chromium.org659ceec2012-01-26 07:37:54 +0000197class BinaryResource : public v8::String::ExternalAsciiStringResource {
198 public:
199 BinaryResource(const char* string, int length)
200 : data_(string),
201 length_(length) { }
202
203 ~BinaryResource() {
204 delete[] data_;
205 data_ = NULL;
206 length_ = 0;
207 }
208
209 virtual const char* data() const { return data_; }
210 virtual size_t length() const { return length_; }
211
212 private:
213 const char* data_;
214 size_t length_;
215};
216
217
sgjesse@chromium.org6db88712011-07-11 11:41:22 +0000218class ShellOptions {
219 public:
svenpanne@chromium.org84bcc552011-07-18 09:50:57 +0000220 ShellOptions() :
kmillikin@chromium.org7c2628c2011-08-10 11:27:35 +0000221#ifndef V8_SHARED
svenpanne@chromium.org84bcc552011-07-18 09:50:57 +0000222 use_preemption(true),
223 preemption_interval(10),
lrn@chromium.org34e60782011-09-15 07:25:40 +0000224 num_parallel_files(0),
svenpanne@chromium.org84bcc552011-07-18 09:50:57 +0000225 parallel_files(NULL),
kmillikin@chromium.org7c2628c2011-08-10 11:27:35 +0000226#endif // V8_SHARED
svenpanne@chromium.org84bcc552011-07-18 09:50:57 +0000227 script_executed(false),
228 last_run(true),
yangguo@chromium.org46839fb2012-08-28 09:06:19 +0000229 send_idle_notification(false),
svenpanne@chromium.org84bcc552011-07-18 09:50:57 +0000230 stress_opt(false),
231 stress_deopt(false),
232 interactive_shell(false),
233 test_shell(false),
danno@chromium.org59400602013-08-13 17:09:37 +0000234 dump_heap_constants(false),
mvstanton@chromium.org63ea3d22013-10-10 09:24:12 +0000235 expected_to_throw(false),
svenpanne@chromium.org84bcc552011-07-18 09:50:57 +0000236 num_isolates(1),
237 isolate_sources(NULL) { }
sgjesse@chromium.org6db88712011-07-11 11:41:22 +0000238
lrn@chromium.org34e60782011-09-15 07:25:40 +0000239 ~ShellOptions() {
240#ifndef V8_SHARED
241 delete[] parallel_files;
242#endif // V8_SHARED
243 delete[] isolate_sources;
244 }
245
kmillikin@chromium.org7c2628c2011-08-10 11:27:35 +0000246#ifndef V8_SHARED
svenpanne@chromium.org84bcc552011-07-18 09:50:57 +0000247 bool use_preemption;
248 int preemption_interval;
lrn@chromium.org34e60782011-09-15 07:25:40 +0000249 int num_parallel_files;
250 char** parallel_files;
kmillikin@chromium.org7c2628c2011-08-10 11:27:35 +0000251#endif // V8_SHARED
sgjesse@chromium.org6db88712011-07-11 11:41:22 +0000252 bool script_executed;
253 bool last_run;
yangguo@chromium.org46839fb2012-08-28 09:06:19 +0000254 bool send_idle_notification;
sgjesse@chromium.org6db88712011-07-11 11:41:22 +0000255 bool stress_opt;
256 bool stress_deopt;
257 bool interactive_shell;
258 bool test_shell;
danno@chromium.org59400602013-08-13 17:09:37 +0000259 bool dump_heap_constants;
mvstanton@chromium.org63ea3d22013-10-10 09:24:12 +0000260 bool expected_to_throw;
sgjesse@chromium.org6db88712011-07-11 11:41:22 +0000261 int num_isolates;
262 SourceGroup* isolate_sources;
sgjesse@chromium.org6db88712011-07-11 11:41:22 +0000263};
264
kmillikin@chromium.org7c2628c2011-08-10 11:27:35 +0000265#ifdef V8_SHARED
svenpanne@chromium.org84bcc552011-07-18 09:50:57 +0000266class Shell {
267#else
268class Shell : public i::AllStatic {
kmillikin@chromium.org7c2628c2011-08-10 11:27:35 +0000269#endif // V8_SHARED
kmillikin@chromium.org83e16822011-09-13 08:21:47 +0000270
kasperl@chromium.org5a8ca6c2008-10-23 13:57:19 +0000271 public:
svenpanne@chromium.org2bda5432013-03-15 12:39:50 +0000272 static bool ExecuteString(Isolate* isolate,
273 Handle<String> source,
kasperl@chromium.org5a8ca6c2008-10-23 13:57:19 +0000274 Handle<Value> name,
275 bool print_result,
276 bool report_exceptions);
ricow@chromium.orgc9c80822010-04-21 08:22:37 +0000277 static const char* ToCString(const v8::String::Utf8Value& value);
svenpanne@chromium.org2bda5432013-03-15 12:39:50 +0000278 static void ReportException(Isolate* isolate, TryCatch* try_catch);
ulan@chromium.org8e8d8822012-11-23 14:36:46 +0000279 static Handle<String> ReadFile(Isolate* isolate, const char* name);
ulan@chromium.org57ff8812013-05-10 08:16:55 +0000280 static Local<Context> CreateEvaluationContext(Isolate* isolate);
ulan@chromium.org8e8d8822012-11-23 14:36:46 +0000281 static int RunMain(Isolate* isolate, int argc, char* argv[]);
svenpanne@chromium.org84bcc552011-07-18 09:50:57 +0000282 static int Main(int argc, char* argv[]);
lrn@chromium.org34e60782011-09-15 07:25:40 +0000283 static void Exit(int exit_code);
jkummerow@chromium.org59297c72013-01-09 16:32:23 +0000284 static void OnExit();
svenpanne@chromium.org84bcc552011-07-18 09:50:57 +0000285
kmillikin@chromium.org7c2628c2011-08-10 11:27:35 +0000286#ifndef V8_SHARED
svenpanne@chromium.org2bda5432013-03-15 12:39:50 +0000287 static Handle<Array> GetCompletions(Isolate* isolate,
288 Handle<String> text,
svenpanne@chromium.org84bcc552011-07-18 09:50:57 +0000289 Handle<String> full);
ager@chromium.orga74f0da2008-12-03 16:05:52 +0000290 static int* LookupCounter(const char* name);
kasperl@chromium.orgd1e3e722009-04-14 13:38:25 +0000291 static void* CreateHistogram(const char* name,
292 int min,
293 int max,
294 size_t buckets);
295 static void AddHistogramSample(void* histogram, int sample);
ager@chromium.orga74f0da2008-12-03 16:05:52 +0000296 static void MapCounters(const char* name);
svenpanne@chromium.org84bcc552011-07-18 09:50:57 +0000297
ager@chromium.org65dad4b2009-04-23 08:48:43 +0000298#ifdef ENABLE_DEBUGGER_SUPPORT
ulan@chromium.org57ff8812013-05-10 08:16:55 +0000299 static Handle<Object> DebugMessageDetails(Isolate* isolate,
300 Handle<String> message);
301 static Handle<Value> DebugCommandToJSONRequest(Isolate* isolate,
302 Handle<String> command);
jkummerow@chromium.org05ed9dd2012-01-23 14:42:48 +0000303 static void DispatchDebugMessages();
304#endif // ENABLE_DEBUGGER_SUPPORT
bmeurer@chromium.orge94b5ff2013-10-25 09:22:31 +0000305
306 static void PerformanceNow(const v8::FunctionCallbackInfo<v8::Value>& args);
jkummerow@chromium.org05ed9dd2012-01-23 14:42:48 +0000307#endif // V8_SHARED
kasperl@chromium.org5a8ca6c2008-10-23 13:57:19 +0000308
verwaest@chromium.orgd4be0f02013-06-05 13:39:03 +0000309 static void RealmCurrent(const v8::FunctionCallbackInfo<v8::Value>& args);
310 static void RealmOwner(const v8::FunctionCallbackInfo<v8::Value>& args);
311 static void RealmGlobal(const v8::FunctionCallbackInfo<v8::Value>& args);
312 static void RealmCreate(const v8::FunctionCallbackInfo<v8::Value>& args);
313 static void RealmDispose(const v8::FunctionCallbackInfo<v8::Value>& args);
314 static void RealmSwitch(const v8::FunctionCallbackInfo<v8::Value>& args);
315 static void RealmEval(const v8::FunctionCallbackInfo<v8::Value>& args);
316 static void RealmSharedGet(Local<String> property,
317 const PropertyCallbackInfo<Value>& info);
ulan@chromium.org32d7dba2013-04-24 10:59:06 +0000318 static void RealmSharedSet(Local<String> property,
319 Local<Value> value,
verwaest@chromium.orgd4be0f02013-06-05 13:39:03 +0000320 const PropertyCallbackInfo<void>& info);
ulan@chromium.org32d7dba2013-04-24 10:59:06 +0000321
verwaest@chromium.orgd4be0f02013-06-05 13:39:03 +0000322 static void Print(const v8::FunctionCallbackInfo<v8::Value>& args);
323 static void Write(const v8::FunctionCallbackInfo<v8::Value>& args);
324 static void Quit(const v8::FunctionCallbackInfo<v8::Value>& args);
325 static void Version(const v8::FunctionCallbackInfo<v8::Value>& args);
verwaest@chromium.orgd4be0f02013-06-05 13:39:03 +0000326 static void Read(const v8::FunctionCallbackInfo<v8::Value>& args);
327 static void ReadBuffer(const v8::FunctionCallbackInfo<v8::Value>& args);
ulan@chromium.org8e8d8822012-11-23 14:36:46 +0000328 static Handle<String> ReadFromStdin(Isolate* isolate);
verwaest@chromium.orgd4be0f02013-06-05 13:39:03 +0000329 static void ReadLine(const v8::FunctionCallbackInfo<v8::Value>& args) {
330 args.GetReturnValue().Set(ReadFromStdin(args.GetIsolate()));
ulan@chromium.org2efb9002012-01-19 15:36:35 +0000331 }
verwaest@chromium.orgd4be0f02013-06-05 13:39:03 +0000332 static void Load(const v8::FunctionCallbackInfo<v8::Value>& args);
333 static void ArrayBuffer(const v8::FunctionCallbackInfo<v8::Value>& args);
334 static void Int8Array(const v8::FunctionCallbackInfo<v8::Value>& args);
335 static void Uint8Array(const v8::FunctionCallbackInfo<v8::Value>& args);
336 static void Int16Array(const v8::FunctionCallbackInfo<v8::Value>& args);
337 static void Uint16Array(const v8::FunctionCallbackInfo<v8::Value>& args);
338 static void Int32Array(const v8::FunctionCallbackInfo<v8::Value>& args);
339 static void Uint32Array(const v8::FunctionCallbackInfo<v8::Value>& args);
340 static void Float32Array(const v8::FunctionCallbackInfo<v8::Value>& args);
341 static void Float64Array(const v8::FunctionCallbackInfo<v8::Value>& args);
342 static void Uint8ClampedArray(
343 const v8::FunctionCallbackInfo<v8::Value>& args);
344 static void ArrayBufferSlice(const v8::FunctionCallbackInfo<v8::Value>& args);
345 static void ArraySubArray(const v8::FunctionCallbackInfo<v8::Value>& args);
346 static void ArraySet(const v8::FunctionCallbackInfo<v8::Value>& args);
ager@chromium.org71daaf62009-04-01 07:22:49 +0000347 // The OS object on the global object contains methods for performing
348 // operating system calls:
349 //
350 // os.system("program_name", ["arg1", "arg2", ...], timeout1, timeout2) will
351 // run the command, passing the arguments to the program. The standard output
352 // of the program will be picked up and returned as a multiline string. If
ager@chromium.org41826e72009-03-30 13:30:57 +0000353 // timeout1 is present then it should be a number. -1 indicates no timeout
354 // and a positive number is used as a timeout in milliseconds that limits the
355 // time spent waiting between receiving output characters from the program.
356 // timeout2, if present, should be a number indicating the limit in
357 // milliseconds on the total running time of the program. Exceptions are
358 // thrown on timeouts or other errors or if the exit status of the program
359 // indicates an error.
ager@chromium.org71daaf62009-04-01 07:22:49 +0000360 //
361 // os.chdir(dir) changes directory to the given directory. Throws an
362 // exception/ on error.
363 //
364 // os.setenv(variable, value) sets an environment variable. Repeated calls to
365 // this method leak memory due to the API of setenv in the standard C library.
366 //
367 // os.umask(alue) calls the umask system call and returns the old umask.
368 //
369 // os.mkdirp(name, mask) creates a directory. The mask (if present) is anded
370 // with the current umask. Intermediate directories are created if necessary.
371 // An exception is not thrown if the directory already exists. Analogous to
372 // the "mkdir -p" command.
verwaest@chromium.orgd4be0f02013-06-05 13:39:03 +0000373 static void OSObject(const v8::FunctionCallbackInfo<v8::Value>& args);
374 static void System(const v8::FunctionCallbackInfo<v8::Value>& args);
375 static void ChangeDirectory(const v8::FunctionCallbackInfo<v8::Value>& args);
376 static void SetEnvironment(const v8::FunctionCallbackInfo<v8::Value>& args);
377 static void UnsetEnvironment(const v8::FunctionCallbackInfo<v8::Value>& args);
378 static void SetUMask(const v8::FunctionCallbackInfo<v8::Value>& args);
379 static void MakeDirectory(const v8::FunctionCallbackInfo<v8::Value>& args);
380 static void RemoveDirectory(const v8::FunctionCallbackInfo<v8::Value>& args);
ager@chromium.org71daaf62009-04-01 07:22:49 +0000381
382 static void AddOSMethods(Handle<ObjectTemplate> os_template);
ulan@chromium.org2efb9002012-01-19 15:36:35 +0000383
kasperl@chromium.org5a8ca6c2008-10-23 13:57:19 +0000384 static const char* kPrompt;
sgjesse@chromium.org6db88712011-07-11 11:41:22 +0000385 static ShellOptions options;
386
kasperl@chromium.org5a8ca6c2008-10-23 13:57:19 +0000387 private:
kasperl@chromium.org5a8ca6c2008-10-23 13:57:19 +0000388 static Persistent<Context> evaluation_context_;
kmillikin@chromium.org7c2628c2011-08-10 11:27:35 +0000389#ifndef V8_SHARED
svenpanne@chromium.org84bcc552011-07-18 09:50:57 +0000390 static Persistent<Context> utility_context_;
kasperl@chromium.orgf5aa8372009-03-24 14:47:14 +0000391 static CounterMap* counter_map_;
ager@chromium.orga74f0da2008-12-03 16:05:52 +0000392 // We statically allocate a set of local counters to be used if we
393 // don't want to store the stats in a memory-mapped file
394 static CounterCollection local_counters_;
395 static CounterCollection* counters_;
396 static i::OS::MemoryMappedFile* counters_file_;
jkummerow@chromium.orgdc94e192013-08-30 11:35:42 +0000397 static i::Mutex context_mutex_;
bmeurer@chromium.orge94b5ff2013-10-25 09:22:31 +0000398 static const i::TimeTicks kInitialTicks;
svenpanne@chromium.org84bcc552011-07-18 09:50:57 +0000399
kasperl@chromium.orgd1e3e722009-04-14 13:38:25 +0000400 static Counter* GetCounter(const char* name, bool is_histogram);
yangguo@chromium.org46a2a512013-01-18 16:29:40 +0000401 static void InstallUtilityScript(Isolate* isolate);
kmillikin@chromium.org7c2628c2011-08-10 11:27:35 +0000402#endif // V8_SHARED
ulan@chromium.org8e8d8822012-11-23 14:36:46 +0000403 static void Initialize(Isolate* isolate);
404 static void InitializeDebugger(Isolate* isolate);
405 static void RunShell(Isolate* isolate);
svenpanne@chromium.org84bcc552011-07-18 09:50:57 +0000406 static bool SetOptions(int argc, char* argv[]);
ulan@chromium.org8e8d8822012-11-23 14:36:46 +0000407 static Handle<ObjectTemplate> CreateGlobalTemplate(Isolate* isolate);
verwaest@chromium.org662436e2013-08-28 08:41:27 +0000408 static Handle<FunctionTemplate> CreateArrayBufferTemplate(FunctionCallback);
409 static Handle<FunctionTemplate> CreateArrayTemplate(FunctionCallback);
ulan@chromium.org8e8d8822012-11-23 14:36:46 +0000410 static Handle<Value> CreateExternalArrayBuffer(Isolate* isolate,
411 Handle<Object> buffer,
yangguo@chromium.orgc74d6742012-06-29 15:15:45 +0000412 int32_t size);
ulan@chromium.org8e8d8822012-11-23 14:36:46 +0000413 static Handle<Object> CreateExternalArray(Isolate* isolate,
414 Handle<Object> array,
yangguo@chromium.orgc74d6742012-06-29 15:15:45 +0000415 Handle<Object> buffer,
416 ExternalArrayType type,
417 int32_t length,
418 int32_t byteLength,
419 int32_t byteOffset,
420 int32_t element_size);
verwaest@chromium.orgd4be0f02013-06-05 13:39:03 +0000421 static void CreateExternalArray(
422 const v8::FunctionCallbackInfo<v8::Value>& args,
423 ExternalArrayType type,
424 int32_t element_size);
mvstanton@chromium.orgd16d8532013-01-25 13:29:10 +0000425 static void ExternalArrayWeakCallback(Isolate* isolate,
ulan@chromium.org57ff8812013-05-10 08:16:55 +0000426 Persistent<Object>* object,
427 uint8_t* data);
kasperl@chromium.org5a8ca6c2008-10-23 13:57:19 +0000428};
429
430
kasperl@chromium.org5a8ca6c2008-10-23 13:57:19 +0000431} // namespace v8
432
433
434#endif // V8_D8_H_