Lines Matching refs:V8
1 // Copyright 2009 the V8 project authors. All rights reserved.
28 #include "v8.h"
33 v8::internal::Semaphore* semaphore = NULL;
36 v8::Handle<v8::Value> Signal(const v8::Arguments& args) {
38 return v8::Undefined();
42 v8::Handle<v8::Value> TerminateCurrentThread(const v8::Arguments& args) {
43 CHECK(!v8::V8::IsExecutionTerminating());
44 v8::V8::TerminateExecution();
45 return v8::Undefined();
49 v8::Handle<v8::Value> Fail(const v8::Arguments& args) {
51 return v8::Undefined();
55 v8::Handle<v8::Value> Loop(const v8::Arguments& args) {
56 CHECK(!v8::V8::IsExecutionTerminating());
57 v8::Handle<v8::String> source =
58 v8::String::New("try { doloop(); fail(); } catch(e) { fail(); }");
59 v8::Handle<v8::Value> result = v8::Script::Compile(source)->Run();
61 CHECK(v8::V8::IsExecutionTerminating());
62 return v8::Undefined();
66 v8::Handle<v8::Value> DoLoop(const v8::Arguments& args) {
67 v8::TryCatch try_catch;
68 CHECK(!v8::V8::IsExecutionTerminating());
69 v8::Script::Compile(v8::String::New("function f() {"
86 CHECK(v8::V8::IsExecutionTerminating());
87 return v8::Undefined();
91 v8::Handle<v8::Value> DoLoopNoCall(const v8::Arguments& args) {
92 v8::TryCatch try_catch;
93 CHECK(!v8::V8::IsExecutionTerminating());
94 v8::Script::Compile(v8::String::New("var term = true;"
103 CHECK(v8::V8::IsExecutionTerminating());
104 return v8::Undefined();
108 v8::Handle<v8::ObjectTemplate> CreateGlobalTemplate(
109 v8::InvocationCallback terminate,
110 v8::InvocationCallback doloop) {
111 v8::Handle<v8::ObjectTemplate> global = v8::ObjectTemplate::New();
112 global->Set(v8::String::New("terminate"),
113 v8::FunctionTemplate::New(terminate));
114 global->Set(v8::String::New("fail"), v8::FunctionTemplate::New(Fail));
115 global->Set(v8::String::New("loop"), v8::FunctionTemplate::New(Loop));
116 global->Set(v8::String::New("doloop"), v8::FunctionTemplate::New(doloop));
124 v8::HandleScope scope;
125 v8::Handle<v8::ObjectTemplate> global =
127 v8::Persistent<v8::Context> context = v8::Context::New(NULL, global);
128 v8::Context::Scope context_scope(context);
129 CHECK(!v8::V8::IsExecutionTerminating());
131 v8::Handle<v8::String> source =
132 v8::String::New("try { loop(); fail(); } catch(e) { fail(); }");
133 v8::Script::Compile(source)->Run();
135 CHECK(!v8::V8::IsExecutionTerminating());
136 v8::Script::Compile(source)->Run();
144 v8::HandleScope scope;
145 v8::Handle<v8::ObjectTemplate> global =
147 v8::Persistent<v8::Context> context = v8::Context::New(NULL, global);
148 v8::Context::Scope context_scope(context);
149 CHECK(!v8::V8::IsExecutionTerminating());
151 v8::Handle<v8::String> source =
152 v8::String::New("try { loop(); fail(); } catch(e) { fail(); }");
153 v8::Script::Compile(source)->Run();
154 CHECK(!v8::V8::IsExecutionTerminating());
156 v8::Script::Compile(source)->Run();
161 class TerminatorThread : public v8::internal::Thread {
165 isolate_(reinterpret_cast<v8::Isolate*>(isolate)) { }
168 CHECK(!v8::V8::IsExecutionTerminating(isolate_));
169 v8::V8::TerminateExecution(isolate_);
173 v8::Isolate* isolate_;
180 semaphore = v8::internal::OS::CreateSemaphore(0);
184 v8::HandleScope scope;
185 v8::Handle<v8::ObjectTemplate> global = CreateGlobalTemplate(Signal, DoLoop);
186 v8::Persistent<v8::Context> context = v8::Context::New(NULL, global);
187 v8::Context::Scope context_scope(context);
188 CHECK(!v8::V8::IsExecutionTerminating());
190 v8::Handle<v8::String> source =
191 v8::String::New("try { loop(); fail(); } catch(e) { fail(); }");
192 v8::Script::Compile(source)->Run();
201 class LoopingThread : public v8::internal::Thread {
205 v8::Locker locker;
206 v8::HandleScope scope;
207 v8_thread_id_ = v8::V8::GetCurrentThreadId();
208 v8::Handle<v8::ObjectTemplate> global =
210 v8::Persistent<v8::Context> context = v8::Context::New(NULL, global);
211 v8::Context::Scope context_scope(context);
212 CHECK(!v8::V8::IsExecutionTerminating());
214 v8::Handle<v8::String> source =
215 v8::String::New("try { loop(); fail(); } catch(e) { fail(); }");
216 v8::Script::Compile(source)->Run();
231 v8::Locker locker;
232 v8::V8::Initialize();
233 v8::Locker::StartPreemption(1);
234 semaphore = v8::internal::OS::CreateSemaphore(0);
249 v8::Locker locker;
251 v8::V8::TerminateExecution(threads[i]->GetV8ThreadId());
267 v8::Handle<v8::Value> TerminateOrReturnObject(const v8::Arguments& args) {
269 CHECK(!v8::V8::IsExecutionTerminating());
270 v8::V8::TerminateExecution();
271 return v8::Undefined();
273 v8::Local<v8::Object> result = v8::Object::New();
274 result->Set(v8::String::New("x"), v8::Integer::New(42));
279 v8::Handle<v8::Value> LoopGetProperty(const v8::Arguments& args) {
280 v8::TryCatch try_catch;
281 CHECK(!v8::V8::IsExecutionTerminating());
282 v8::Script::Compile(v8::String::New("function f() {"
297 CHECK(v8::V8::IsExecutionTerminating());
298 return v8::Undefined();
305 v8::HandleScope scope;
306 v8::Handle<v8::ObjectTemplate> global = v8::ObjectTemplate::New();
307 global->Set(v8::String::New("terminate_or_return_object"),
308 v8::FunctionTemplate::New(TerminateOrReturnObject));
309 global->Set(v8::String::New("fail"), v8::FunctionTemplate::New(Fail));
310 global->Set(v8::String::New("loop"),
311 v8::FunctionTemplate::New(LoopGetProperty));
313 v8::Persistent<v8::Context> context = v8::Context::New(NULL, global);
314 v8::Context::Scope context_scope(context);
315 CHECK(!v8::V8::IsExecutionTerminating());
317 v8::Handle<v8::String> source =
318 v8::String::New("try { loop(); fail(); } catch(e) { fail(); }");
320 v8::Script::Compile(source)->Run();
322 CHECK(!v8::V8::IsExecutionTerminating());
324 v8::Script::Compile(source)->Run();
328 v8::Handle<v8::Value> ReenterAfterTermination(const v8::Arguments& args) {
329 v8::TryCatch try_catch;
330 CHECK(!v8::V8::IsExecutionTerminating());
331 v8::Script::Compile(v8::String::New("function f() {"
348 CHECK(v8::V8::IsExecutionTerminating());
349 v8::Script::Compile(v8::String::New("function f() { fail(); } f()"))->Run();
350 return v8::Undefined();
353 // Test that reentry into V8 while the termination exception is still pending
356 v8::HandleScope scope;
357 v8::Handle<v8::ObjectTemplate> global =
359 v8::Persistent<v8::Context> context = v8::Context::New(NULL, global);
360 v8::Context::Scope context_scope(context);
361 CHECK(!v8::V8::IsExecutionTerminating());
362 v8::Handle<v8::String> source =
363 v8::String::New("try { loop(); fail(); } catch(e) { fail(); }");
364 v8::Script::Compile(source)->Run();
365 CHECK(!v8::V8::IsExecutionTerminating());
367 CHECK(v8::Script::Compile(v8::String::New("function f() { return true; }"