Index: test/cctest/test-api.cc |
diff --git a/test/cctest/test-api.cc b/test/cctest/test-api.cc |
index af4eef2adb80c9d7ebfb5f65a6a7da688bc2dc37..9ea8b0d8a38e7bca01e87e359a9bc73cec62b56e 100644 |
--- a/test/cctest/test-api.cc |
+++ b/test/cctest/test-api.cc |
@@ -20736,9 +20736,6 @@ THREADED_TEST(SemaphoreInterruption) { |
} |
-#endif // V8_OS_POSIX |
- |
- |
static bool NamedAccessAlwaysBlocked(Local<v8::Object> global, |
Local<Value> name, |
v8::AccessType type, |
@@ -21025,255 +21022,7 @@ THREADED_TEST(CrankshaftInterceptorFieldWrite) { |
} |
-class RequestInterruptTestBase { |
- public: |
- RequestInterruptTestBase() |
- : env_(), |
- isolate_(env_->GetIsolate()), |
- sem_(0), |
- warmup_(20000), |
- should_continue_(true) { |
- } |
- |
- virtual ~RequestInterruptTestBase() { } |
- |
- virtual void TestBody() = 0; |
- |
- void RunTest() { |
- InterruptThread i_thread(this); |
- i_thread.Start(); |
- |
- v8::HandleScope handle_scope(isolate_); |
- |
- TestBody(); |
- |
- isolate_->ClearInterrupt(); |
- } |
- |
- void WakeUpInterruptor() { |
- sem_.Signal(); |
- } |
- |
- bool should_continue() const { return should_continue_; } |
- |
- bool ShouldContinue() { |
- if (warmup_ > 0) { |
- if (--warmup_ == 0) { |
- WakeUpInterruptor(); |
- } |
- } |
- |
- return should_continue_; |
- } |
- |
- protected: |
- static void ShouldContinueCallback( |
- const v8::FunctionCallbackInfo<Value>& info) { |
- RequestInterruptTestBase* test = |
- reinterpret_cast<RequestInterruptTestBase*>( |
- info.Data().As<v8::External>()->Value()); |
- info.GetReturnValue().Set(test->ShouldContinue()); |
- } |
- |
- class InterruptThread : public i::Thread { |
- public: |
- explicit InterruptThread(RequestInterruptTestBase* test) |
- : Thread("RequestInterruptTest"), test_(test) {} |
- |
- virtual void Run() { |
- test_->sem_.Wait(); |
- test_->isolate_->RequestInterrupt(&OnInterrupt, test_); |
- } |
- |
- static void OnInterrupt(v8::Isolate* isolate, void* data) { |
- reinterpret_cast<RequestInterruptTestBase*>(data)-> |
- should_continue_ = false; |
- } |
- |
- private: |
- RequestInterruptTestBase* test_; |
- }; |
- |
- LocalContext env_; |
- v8::Isolate* isolate_; |
- i::Semaphore sem_; |
- int warmup_; |
- bool should_continue_; |
-}; |
- |
- |
-class RequestInterruptTestWithFunctionCall : public RequestInterruptTestBase { |
- public: |
- virtual void TestBody() { |
- Local<Function> func = Function::New( |
- isolate_, ShouldContinueCallback, v8::External::New(isolate_, this)); |
- env_->Global()->Set(v8_str("ShouldContinue"), func); |
- |
- CompileRun("while (ShouldContinue()) { }"); |
- } |
-}; |
- |
- |
-class RequestInterruptTestWithMethodCall : public RequestInterruptTestBase { |
- public: |
- virtual void TestBody() { |
- v8::Local<v8::FunctionTemplate> t = v8::FunctionTemplate::New(isolate_); |
- v8::Local<v8::Template> proto = t->PrototypeTemplate(); |
- proto->Set(v8_str("shouldContinue"), Function::New( |
- isolate_, ShouldContinueCallback, v8::External::New(isolate_, this))); |
- env_->Global()->Set(v8_str("Klass"), t->GetFunction()); |
- |
- CompileRun("var obj = new Klass; while (obj.shouldContinue()) { }"); |
- } |
-}; |
- |
- |
-class RequestInterruptTestWithAccessor : public RequestInterruptTestBase { |
- public: |
- virtual void TestBody() { |
- v8::Local<v8::FunctionTemplate> t = v8::FunctionTemplate::New(isolate_); |
- v8::Local<v8::Template> proto = t->PrototypeTemplate(); |
- proto->SetAccessorProperty(v8_str("shouldContinue"), FunctionTemplate::New( |
- isolate_, ShouldContinueCallback, v8::External::New(isolate_, this))); |
- env_->Global()->Set(v8_str("Klass"), t->GetFunction()); |
- |
- CompileRun("var obj = new Klass; while (obj.shouldContinue) { }"); |
- } |
-}; |
- |
- |
-class RequestInterruptTestWithNativeAccessor : public RequestInterruptTestBase { |
- public: |
- virtual void TestBody() { |
- v8::Local<v8::FunctionTemplate> t = v8::FunctionTemplate::New(isolate_); |
- v8::Local<v8::Template> proto = t->PrototypeTemplate(); |
- proto->SetNativeDataProperty(v8_str("shouldContinue"), |
- &ShouldContinueNativeGetter, |
- NULL, |
- v8::External::New(isolate_, this)); |
- env_->Global()->Set(v8_str("Klass"), t->GetFunction()); |
- |
- CompileRun("var obj = new Klass; while (obj.shouldContinue) { }"); |
- } |
- |
- private: |
- static void ShouldContinueNativeGetter( |
- Local<String> property, |
- const v8::PropertyCallbackInfo<v8::Value>& info) { |
- RequestInterruptTestBase* test = |
- reinterpret_cast<RequestInterruptTestBase*>( |
- info.Data().As<v8::External>()->Value()); |
- info.GetReturnValue().Set(test->ShouldContinue()); |
- } |
-}; |
- |
- |
-class RequestInterruptTestWithMethodCallAndInterceptor |
- : public RequestInterruptTestBase { |
- public: |
- virtual void TestBody() { |
- v8::Local<v8::FunctionTemplate> t = v8::FunctionTemplate::New(isolate_); |
- v8::Local<v8::Template> proto = t->PrototypeTemplate(); |
- proto->Set(v8_str("shouldContinue"), Function::New( |
- isolate_, ShouldContinueCallback, v8::External::New(isolate_, this))); |
- v8::Local<v8::ObjectTemplate> instance_template = t->InstanceTemplate(); |
- instance_template->SetNamedPropertyHandler(EmptyInterceptor); |
- |
- env_->Global()->Set(v8_str("Klass"), t->GetFunction()); |
- |
- CompileRun("var obj = new Klass; while (obj.shouldContinue()) { }"); |
- } |
- |
- private: |
- static void EmptyInterceptor( |
- Local<String> property, |
- const v8::PropertyCallbackInfo<v8::Value>& info) { |
- } |
-}; |
- |
- |
-class RequestInterruptTestWithMathAbs : public RequestInterruptTestBase { |
- public: |
- virtual void TestBody() { |
- env_->Global()->Set(v8_str("WakeUpInterruptor"), Function::New( |
- isolate_, |
- WakeUpInterruptorCallback, |
- v8::External::New(isolate_, this))); |
- |
- env_->Global()->Set(v8_str("ShouldContinue"), Function::New( |
- isolate_, |
- ShouldContinueCallback, |
- v8::External::New(isolate_, this))); |
- |
- i::FLAG_allow_natives_syntax = true; |
- CompileRun("function loopish(o) {" |
- " var pre = 10;" |
- " while (o.abs(1) > 0) {" |
- " if (o.abs(1) >= 0 && !ShouldContinue()) break;" |
- " if (pre > 0) {" |
- " if (--pre === 0) WakeUpInterruptor(o === Math);" |
- " }" |
- " }" |
- "}" |
- "var i = 50;" |
- "var obj = {abs: function () { return i-- }, x: null};" |
- "delete obj.x;" |
- "loopish(obj);" |
- "%OptimizeFunctionOnNextCall(loopish);" |
- "loopish(Math);"); |
- |
- i::FLAG_allow_natives_syntax = false; |
- } |
- |
- private: |
- static void WakeUpInterruptorCallback( |
- const v8::FunctionCallbackInfo<Value>& info) { |
- if (!info[0]->BooleanValue()) return; |
- |
- RequestInterruptTestBase* test = |
- reinterpret_cast<RequestInterruptTestBase*>( |
- info.Data().As<v8::External>()->Value()); |
- test->WakeUpInterruptor(); |
- } |
- |
- static void ShouldContinueCallback( |
- const v8::FunctionCallbackInfo<Value>& info) { |
- RequestInterruptTestBase* test = |
- reinterpret_cast<RequestInterruptTestBase*>( |
- info.Data().As<v8::External>()->Value()); |
- info.GetReturnValue().Set(test->should_continue()); |
- } |
-}; |
- |
- |
-THREADED_TEST(RequestInterruptTestWithFunctionCall) { |
- RequestInterruptTestWithFunctionCall().RunTest(); |
-} |
- |
- |
-THREADED_TEST(RequestInterruptTestWithMethodCall) { |
- RequestInterruptTestWithMethodCall().RunTest(); |
-} |
- |
- |
-THREADED_TEST(RequestInterruptTestWithAccessor) { |
- RequestInterruptTestWithAccessor().RunTest(); |
-} |
- |
- |
-THREADED_TEST(RequestInterruptTestWithNativeAccessor) { |
- RequestInterruptTestWithNativeAccessor().RunTest(); |
-} |
- |
- |
-THREADED_TEST(RequestInterruptTestWithMethodCallAndInterceptor) { |
- RequestInterruptTestWithMethodCallAndInterceptor().RunTest(); |
-} |
- |
- |
-THREADED_TEST(RequestInterruptTestWithMathAbs) { |
- RequestInterruptTestWithMathAbs().RunTest(); |
-} |
+#endif // V8_OS_POSIX |
static Local<Value> function_new_expected_env; |