Index: test/cctest/cctest.h |
diff --git a/test/cctest/cctest.h b/test/cctest/cctest.h |
index dac3a5b94f91dac4b20c5215b3f602ec631d8dbc..333078a144efd476b3386a7d2cd28b3801bdd269 100644 |
--- a/test/cctest/cctest.h |
+++ b/test/cctest/cctest.h |
@@ -28,11 +28,30 @@ |
#ifndef CCTEST_H_ |
#define CCTEST_H_ |
+#include <memory> |
+ |
#include "include/libplatform/libplatform.h" |
-#include "src/isolate-inl.h" // TODO(everyone): Make cctest IWYU. |
-#include "src/objects-inl.h" // TODO(everyone): Make cctest IWYU. |
+#include "include/v8-debug.h" |
+#include "src/base/accounting-allocator.h" |
+#include "src/utils.h" |
#include "src/v8.h" |
+namespace v8 { |
+namespace base { |
+ |
+class RandomNumberGenerator; |
+ |
+} // namespace base |
+ |
+namespace internal { |
+ |
+class HandleScope; |
+class Zone; |
+ |
+} // namespace internal |
+ |
+} // namespace v8 |
+ |
#ifndef TEST |
#define TEST(Name) \ |
static void Test##Name(); \ |
@@ -104,17 +123,11 @@ class CcTest { |
return reinterpret_cast<i::Isolate*>(isolate()); |
} |
- static i::Heap* heap() { |
- return i_isolate()->heap(); |
- } |
+ static i::Heap* heap(); |
- static v8::base::RandomNumberGenerator* random_number_generator() { |
- return InitIsolateOnce()->random_number_generator(); |
- } |
+ static v8::base::RandomNumberGenerator* random_number_generator(); |
- static v8::Local<v8::Object> global() { |
- return isolate()->GetCurrentContext()->Global(); |
- } |
+ static v8::Local<v8::Object> global(); |
static v8::ArrayBuffer::Allocator* array_buffer_allocator() { |
return allocator_; |
@@ -127,13 +140,7 @@ class CcTest { |
// TODO(dcarney): Remove. |
// This must be called first in a test. |
- static void InitializeVM() { |
- CHECK(!v8::base::NoBarrier_Load(&isolate_used_)); |
- CHECK(!initialize_called_); |
- initialize_called_ = true; |
- v8::HandleScope handle_scope(CcTest::isolate()); |
- v8::Context::New(CcTest::isolate())->Enter(); |
- } |
+ static void InitializeVM(); |
// Only for UNINITIALIZED_TESTs |
static void DisableAutomaticDispose(); |
@@ -144,9 +151,7 @@ class CcTest { |
CcTestExtensionFlags extensions, |
v8::Isolate* isolate = CcTest::isolate()); |
- static void TearDown() { |
- if (isolate_ != NULL) isolate_->Dispose(); |
- } |
+ static void TearDown(); |
private: |
friend int main(int argc, char** argv); |
@@ -269,11 +274,7 @@ class LocalContext { |
Initialize(CcTest::isolate(), extensions, global_template, global_object); |
} |
- virtual ~LocalContext() { |
- v8::HandleScope scope(isolate_); |
- v8::Local<v8::Context>::New(isolate_, context_)->Exit(); |
- context_.Reset(); |
- } |
+ virtual ~LocalContext(); |
v8::Context* operator->() { |
return *reinterpret_cast<v8::Context**>(&context_); |
@@ -288,17 +289,7 @@ class LocalContext { |
private: |
void Initialize(v8::Isolate* isolate, v8::ExtensionConfiguration* extensions, |
v8::Local<v8::ObjectTemplate> global_template, |
- v8::Local<v8::Value> global_object) { |
- v8::HandleScope scope(isolate); |
- v8::Local<v8::Context> context = v8::Context::New(isolate, |
- extensions, |
- global_template, |
- global_object); |
- context_.Reset(isolate, context); |
- context->Enter(); |
- // We can't do this later perhaps because of a fatal error. |
- isolate_ = isolate; |
- } |
+ v8::Local<v8::Value> global_object); |
v8::Persistent<v8::Context> context_; |
v8::Isolate* isolate_; |
@@ -567,32 +558,33 @@ static inline void EmptyMessageQueues(v8::Isolate* isolate) { |
} |
} |
+class InitializedHandleScopeImpl; |
class InitializedHandleScope { |
public: |
- InitializedHandleScope() |
- : main_isolate_(CcTest::InitIsolateOnce()), |
- handle_scope_(main_isolate_) {} |
+ InitializedHandleScope(); |
+ ~InitializedHandleScope(); |
// Prefixing the below with main_ reduces a lot of naming clashes. |
i::Isolate* main_isolate() { return main_isolate_; } |
private: |
i::Isolate* main_isolate_; |
- i::HandleScope handle_scope_; |
+ std::unique_ptr<InitializedHandleScopeImpl> initialized_handle_scope_impl_; |
}; |
class HandleAndZoneScope : public InitializedHandleScope { |
public: |
- HandleAndZoneScope() : main_zone_(&allocator_) {} |
+ HandleAndZoneScope(); |
+ ~HandleAndZoneScope(); |
// Prefixing the below with main_ reduces a lot of naming clashes. |
- i::Zone* main_zone() { return &main_zone_; } |
+ i::Zone* main_zone() { return main_zone_.get(); } |
private: |
v8::base::AccountingAllocator allocator_; |
- i::Zone main_zone_; |
+ std::unique_ptr<i::Zone> main_zone_; |
}; |
#endif // ifndef CCTEST_H_ |