| OLD | NEW |
| 1 // Copyright 2012 the V8 project authors. All rights reserved. | 1 // Copyright 2012 the V8 project authors. All rights reserved. |
| 2 // Redistribution and use in source and binary forms, with or without | 2 // Redistribution and use in source and binary forms, with or without |
| 3 // modification, are permitted provided that the following conditions are | 3 // modification, are permitted provided that the following conditions are |
| 4 // met: | 4 // met: |
| 5 // | 5 // |
| 6 // * Redistributions of source code must retain the above copyright | 6 // * Redistributions of source code must retain the above copyright |
| 7 // notice, this list of conditions and the following disclaimer. | 7 // notice, this list of conditions and the following disclaimer. |
| 8 // * Redistributions in binary form must reproduce the above | 8 // * Redistributions in binary form must reproduce the above |
| 9 // copyright notice, this list of conditions and the following | 9 // copyright notice, this list of conditions and the following |
| 10 // disclaimer in the documentation and/or other materials provided | 10 // disclaimer in the documentation and/or other materials provided |
| (...skipping 4332 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 4343 CHECK(v8_num(1)->StrictEquals(v8_num(1))); | 4343 CHECK(v8_num(1)->StrictEquals(v8_num(1))); |
| 4344 CHECK(!v8_num(1)->StrictEquals(v8_num(2))); | 4344 CHECK(!v8_num(1)->StrictEquals(v8_num(2))); |
| 4345 CHECK(v8_num(0)->StrictEquals(v8_num(-0))); | 4345 CHECK(v8_num(0)->StrictEquals(v8_num(-0))); |
| 4346 Local<Value> not_a_number = v8_num(i::OS::nan_value()); | 4346 Local<Value> not_a_number = v8_num(i::OS::nan_value()); |
| 4347 CHECK(!not_a_number->StrictEquals(not_a_number)); | 4347 CHECK(!not_a_number->StrictEquals(not_a_number)); |
| 4348 CHECK(v8::False()->StrictEquals(v8::False())); | 4348 CHECK(v8::False()->StrictEquals(v8::False())); |
| 4349 CHECK(!v8::False()->StrictEquals(v8::Undefined())); | 4349 CHECK(!v8::False()->StrictEquals(v8::Undefined())); |
| 4350 | 4350 |
| 4351 v8::Handle<v8::Object> obj = v8::Object::New(); | 4351 v8::Handle<v8::Object> obj = v8::Object::New(); |
| 4352 v8::Persistent<v8::Object> alias(isolate, obj); | 4352 v8::Persistent<v8::Object> alias(isolate, obj); |
| 4353 CHECK(alias->StrictEquals(obj)); | 4353 CHECK(v8::Local<v8::Object>::New(isolate, alias)->StrictEquals(obj)); |
| 4354 alias.Dispose(isolate); | 4354 alias.Dispose(isolate); |
| 4355 } | 4355 } |
| 4356 | 4356 |
| 4357 | 4357 |
| 4358 THREADED_TEST(MultiRun) { | 4358 THREADED_TEST(MultiRun) { |
| 4359 LocalContext context; | 4359 LocalContext context; |
| 4360 v8::HandleScope scope(context->GetIsolate()); | 4360 v8::HandleScope scope(context->GetIsolate()); |
| 4361 Local<Script> script = Script::Compile(v8_str("x")); | 4361 Local<Script> script = Script::Compile(v8_str("x")); |
| 4362 for (int i = 0; i < 10; i++) | 4362 for (int i = 0; i < 10; i++) |
| 4363 script->Run(); | 4363 script->Run(); |
| (...skipping 1713 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 6077 | 6077 |
| 6078 v8::Handle<Value> WhammyPropertyGetter(Local<String> name, | 6078 v8::Handle<Value> WhammyPropertyGetter(Local<String> name, |
| 6079 const AccessorInfo& info) { | 6079 const AccessorInfo& info) { |
| 6080 Whammy* whammy = | 6080 Whammy* whammy = |
| 6081 static_cast<Whammy*>(v8::Handle<v8::External>::Cast(info.Data())->Value()); | 6081 static_cast<Whammy*>(v8::Handle<v8::External>::Cast(info.Data())->Value()); |
| 6082 | 6082 |
| 6083 v8::Persistent<v8::Object>& prev = whammy->objects_[whammy->cursor_]; | 6083 v8::Persistent<v8::Object>& prev = whammy->objects_[whammy->cursor_]; |
| 6084 | 6084 |
| 6085 v8::Handle<v8::Object> obj = v8::Object::New(); | 6085 v8::Handle<v8::Object> obj = v8::Object::New(); |
| 6086 if (!prev.IsEmpty()) { | 6086 if (!prev.IsEmpty()) { |
| 6087 prev->Set(v8_str("next"), obj); | 6087 v8::Local<v8::Object>::New(info.GetIsolate(), prev) |
| 6088 ->Set(v8_str("next"), obj); |
| 6088 prev.MakeWeak<Value, Snorkel>(info.GetIsolate(), | 6089 prev.MakeWeak<Value, Snorkel>(info.GetIsolate(), |
| 6089 new Snorkel(), | 6090 new Snorkel(), |
| 6090 &HandleWeakReference); | 6091 &HandleWeakReference); |
| 6091 whammy->objects_[whammy->cursor_].Clear(); | 6092 whammy->objects_[whammy->cursor_].Clear(); |
| 6092 } | 6093 } |
| 6093 whammy->objects_[whammy->cursor_].Reset(info.GetIsolate(), obj); | 6094 whammy->objects_[whammy->cursor_].Reset(info.GetIsolate(), obj); |
| 6094 whammy->cursor_ = (whammy->cursor_ + 1) % Whammy::kObjectCount; | 6095 whammy->cursor_ = (whammy->cursor_ + 1) % Whammy::kObjectCount; |
| 6095 return whammy->getScript()->Run(); | 6096 return whammy->getScript()->Run(); |
| 6096 } | 6097 } |
| 6097 | 6098 |
| (...skipping 132 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 6230 | 6231 |
| 6231 THREADED_TEST(IndependentHandleRevival) { | 6232 THREADED_TEST(IndependentHandleRevival) { |
| 6232 v8::Isolate* isolate = v8::Isolate::GetCurrent(); | 6233 v8::Isolate* isolate = v8::Isolate::GetCurrent(); |
| 6233 v8::HandleScope scope(isolate); | 6234 v8::HandleScope scope(isolate); |
| 6234 v8::Handle<Context> context = Context::New(isolate); | 6235 v8::Handle<Context> context = Context::New(isolate); |
| 6235 Context::Scope context_scope(context); | 6236 Context::Scope context_scope(context); |
| 6236 | 6237 |
| 6237 v8::Persistent<v8::Object> object; | 6238 v8::Persistent<v8::Object> object; |
| 6238 { | 6239 { |
| 6239 v8::HandleScope handle_scope(isolate); | 6240 v8::HandleScope handle_scope(isolate); |
| 6240 object.Reset(isolate, v8::Object::New()); | 6241 v8::Local<v8::Object> o = v8::Object::New(); |
| 6241 object->Set(v8_str("x"), v8::Integer::New(1)); | 6242 object.Reset(isolate, o); |
| 6243 o->Set(v8_str("x"), v8::Integer::New(1)); |
| 6242 v8::Local<String> y_str = v8_str("y"); | 6244 v8::Local<String> y_str = v8_str("y"); |
| 6243 object->Set(y_str, y_str); | 6245 o->Set(y_str, y_str); |
| 6244 } | 6246 } |
| 6245 bool revived = false; | 6247 bool revived = false; |
| 6246 object.MakeWeak(isolate, &revived, &RevivingCallback); | 6248 object.MakeWeak(isolate, &revived, &RevivingCallback); |
| 6247 object.MarkIndependent(isolate); | 6249 object.MarkIndependent(isolate); |
| 6248 HEAP->PerformScavenge(); | 6250 HEAP->PerformScavenge(); |
| 6249 CHECK(revived); | 6251 CHECK(revived); |
| 6250 HEAP->CollectAllGarbage(i::Heap::kAbortIncrementalMarkingMask); | 6252 HEAP->CollectAllGarbage(i::Heap::kAbortIncrementalMarkingMask); |
| 6251 { | 6253 { |
| 6252 v8::HandleScope handle_scope(isolate); | 6254 v8::HandleScope handle_scope(isolate); |
| 6255 v8::Local<v8::Object> o = v8::Local<v8::Object>::New(isolate, object); |
| 6253 v8::Local<String> y_str = v8_str("y"); | 6256 v8::Local<String> y_str = v8_str("y"); |
| 6254 CHECK_EQ(v8::Integer::New(1), object->Get(v8_str("x"))); | 6257 CHECK_EQ(v8::Integer::New(1), o->Get(v8_str("x"))); |
| 6255 CHECK(object->Get(y_str)->Equals(y_str)); | 6258 CHECK(o->Get(y_str)->Equals(y_str)); |
| 6256 } | 6259 } |
| 6257 } | 6260 } |
| 6258 | 6261 |
| 6259 | 6262 |
| 6260 v8::Handle<Function> args_fun; | 6263 v8::Handle<Function> args_fun; |
| 6261 | 6264 |
| 6262 | 6265 |
| 6263 static v8::Handle<Value> ArgumentsTestCallback(const v8::Arguments& args) { | 6266 static v8::Handle<Value> ArgumentsTestCallback(const v8::Arguments& args) { |
| 6264 ApiTestFuzzer::Fuzz(); | 6267 ApiTestFuzzer::Fuzz(); |
| 6265 CHECK_EQ(args_fun, args.Callee()); | 6268 CHECK_EQ(args_fun, args.Callee()); |
| (...skipping 6192 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 12458 THREADED_TEST(DisposeEnteredContext) { | 12461 THREADED_TEST(DisposeEnteredContext) { |
| 12459 LocalContext outer; | 12462 LocalContext outer; |
| 12460 v8::Isolate* isolate = outer->GetIsolate(); | 12463 v8::Isolate* isolate = outer->GetIsolate(); |
| 12461 v8::Persistent<v8::Context> inner; | 12464 v8::Persistent<v8::Context> inner; |
| 12462 { | 12465 { |
| 12463 v8::HandleScope scope(isolate); | 12466 v8::HandleScope scope(isolate); |
| 12464 inner.Reset(isolate, v8::Context::New(isolate)); | 12467 inner.Reset(isolate, v8::Context::New(isolate)); |
| 12465 } | 12468 } |
| 12466 v8::HandleScope scope(isolate); | 12469 v8::HandleScope scope(isolate); |
| 12467 { | 12470 { |
| 12468 inner->Enter(); | 12471 // Don't want a handle here, so do this unsafely |
| 12469 inner.Dispose(inner->GetIsolate()); | 12472 v8::Handle<v8::Context> inner_local = |
| 12473 *reinterpret_cast<v8::Handle<v8::Context>*>(&inner); |
| 12474 inner_local->Enter(); |
| 12475 inner.Dispose(); |
| 12470 inner.Clear(); | 12476 inner.Clear(); |
| 12471 inner->Exit(); | 12477 inner_local->Exit(); |
| 12472 } | 12478 } |
| 12473 } | 12479 } |
| 12474 | 12480 |
| 12475 | 12481 |
| 12476 // Regression test for issue 54, object templates with internal fields | 12482 // Regression test for issue 54, object templates with internal fields |
| 12477 // but no accessors or interceptors did not get their internal field | 12483 // but no accessors or interceptors did not get their internal field |
| 12478 // count set on instances. | 12484 // count set on instances. |
| 12479 THREADED_TEST(Regress54) { | 12485 THREADED_TEST(Regress54) { |
| 12480 LocalContext context; | 12486 LocalContext context; |
| 12481 v8::Isolate* isolate = context->GetIsolate(); | 12487 v8::Isolate* isolate = context->GetIsolate(); |
| 12482 v8::HandleScope outer(isolate); | 12488 v8::HandleScope outer(isolate); |
| 12483 static v8::Persistent<v8::ObjectTemplate> templ; | 12489 static v8::Persistent<v8::ObjectTemplate> templ; |
| 12484 if (templ.IsEmpty()) { | 12490 if (templ.IsEmpty()) { |
| 12485 v8::HandleScope inner(isolate); | 12491 v8::HandleScope inner(isolate); |
| 12486 v8::Handle<v8::ObjectTemplate> local = v8::ObjectTemplate::New(); | 12492 v8::Handle<v8::ObjectTemplate> local = v8::ObjectTemplate::New(); |
| 12487 local->SetInternalFieldCount(1); | 12493 local->SetInternalFieldCount(1); |
| 12488 templ.Reset(isolate, inner.Close(local)); | 12494 templ.Reset(isolate, inner.Close(local)); |
| 12489 } | 12495 } |
| 12490 v8::Handle<v8::Object> result = templ->NewInstance(); | 12496 v8::Handle<v8::Object> result = |
| 12497 v8::Local<v8::ObjectTemplate>::New(isolate, templ)->NewInstance(); |
| 12491 CHECK_EQ(1, result->InternalFieldCount()); | 12498 CHECK_EQ(1, result->InternalFieldCount()); |
| 12492 } | 12499 } |
| 12493 | 12500 |
| 12494 | 12501 |
| 12495 // If part of the threaded tests, this test makes ThreadingTest fail | 12502 // If part of the threaded tests, this test makes ThreadingTest fail |
| 12496 // on mac. | 12503 // on mac. |
| 12497 TEST(CatchStackOverflow) { | 12504 TEST(CatchStackOverflow) { |
| 12498 LocalContext context; | 12505 LocalContext context; |
| 12499 v8::HandleScope scope(context->GetIsolate()); | 12506 v8::HandleScope scope(context->GetIsolate()); |
| 12500 v8::TryCatch try_catch; | 12507 v8::TryCatch try_catch; |
| (...skipping 4640 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 17141 { | 17148 { |
| 17142 v8::HandleScope scope(v8::Isolate::GetCurrent()); | 17149 v8::HandleScope scope(v8::Isolate::GetCurrent()); |
| 17143 v8::Local<v8::Context> context = | 17150 v8::Local<v8::Context> context = |
| 17144 v8::Local<v8::Context>::New(v8::Isolate::GetCurrent(), context1); | 17151 v8::Local<v8::Context>::New(v8::Isolate::GetCurrent(), context1); |
| 17145 v8::Context::Scope context_scope(context); | 17152 v8::Context::Scope context_scope(context); |
| 17146 ExpectString("function f() { return foo; }; f()", "isolate 1"); | 17153 ExpectString("function f() { return foo; }; f()", "isolate 1"); |
| 17147 } | 17154 } |
| 17148 | 17155 |
| 17149 { | 17156 { |
| 17150 v8::Isolate::Scope iscope(isolate2); | 17157 v8::Isolate::Scope iscope(isolate2); |
| 17151 context2.Dispose(context2->GetIsolate()); | 17158 context2.Dispose(); |
| 17152 } | 17159 } |
| 17153 | 17160 |
| 17154 context1.Dispose(context1->GetIsolate()); | 17161 context1.Dispose(); |
| 17155 isolate1->Exit(); | 17162 isolate1->Exit(); |
| 17156 | 17163 |
| 17157 v8::V8::SetFatalErrorHandler(StoringErrorCallback); | 17164 v8::V8::SetFatalErrorHandler(StoringErrorCallback); |
| 17158 last_location = last_message = NULL; | 17165 last_location = last_message = NULL; |
| 17159 | 17166 |
| 17160 isolate1->Dispose(); | 17167 isolate1->Dispose(); |
| 17161 CHECK_EQ(last_location, NULL); | 17168 CHECK_EQ(last_location, NULL); |
| 17162 CHECK_EQ(last_message, NULL); | 17169 CHECK_EQ(last_message, NULL); |
| 17163 | 17170 |
| 17164 isolate2->Dispose(); | 17171 isolate2->Dispose(); |
| (...skipping 1918 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 19083 i::Semaphore* sem_; | 19090 i::Semaphore* sem_; |
| 19084 volatile int sem_value_; | 19091 volatile int sem_value_; |
| 19085 }; | 19092 }; |
| 19086 | 19093 |
| 19087 | 19094 |
| 19088 THREADED_TEST(SemaphoreInterruption) { | 19095 THREADED_TEST(SemaphoreInterruption) { |
| 19089 ThreadInterruptTest().RunTest(); | 19096 ThreadInterruptTest().RunTest(); |
| 19090 } | 19097 } |
| 19091 | 19098 |
| 19092 #endif // WIN32 | 19099 #endif // WIN32 |
| OLD | NEW |