| Index: test/cctest/test-debug.cc
|
| diff --git a/test/cctest/test-debug.cc b/test/cctest/test-debug.cc
|
| index 5f8b8260508adc5f2c9f6aef4d66383e52dcb786..0455790e04408e784928a014c92744b37ba514d8 100644
|
| --- a/test/cctest/test-debug.cc
|
| +++ b/test/cctest/test-debug.cc
|
| @@ -1244,7 +1244,9 @@ TEST(GCDuringBreakPointProcessing) {
|
|
|
| // Call the function three times with different garbage collections in between
|
| // and make sure that the break point survives.
|
| -static void CallAndGC(v8::Local<v8::Object> recv, v8::Local<v8::Function> f) {
|
| +static void CallAndGC(v8::Local<v8::Object> recv,
|
| + v8::Local<v8::Function> f,
|
| + bool force_compaction) {
|
| break_point_hit_count = 0;
|
|
|
| for (int i = 0; i < 3; i++) {
|
| @@ -1258,15 +1260,14 @@ static void CallAndGC(v8::Local<v8::Object> recv, v8::Local<v8::Function> f) {
|
| CHECK_EQ(2 + i * 3, break_point_hit_count);
|
|
|
| // Mark sweep (and perhaps compact) and call function.
|
| - Heap::CollectAllGarbage(false);
|
| + Heap::CollectAllGarbage(force_compaction);
|
| f->Call(recv, 0, NULL);
|
| CHECK_EQ(3 + i * 3, break_point_hit_count);
|
| }
|
| }
|
|
|
|
|
| -// Test that a break point can be set at a return store location.
|
| -TEST(BreakPointSurviveGC) {
|
| +static void TestBreakPointSurviveGC(bool force_compaction) {
|
| break_point_hit_count = 0;
|
| v8::HandleScope scope;
|
| DebugLocalContext env;
|
| @@ -1276,30 +1277,65 @@ TEST(BreakPointSurviveGC) {
|
| v8::Local<v8::Function> foo;
|
|
|
| // Test IC store break point with garbage collection.
|
| - foo = CompileFunction(&env, "function foo(){bar=0;}", "foo");
|
| - SetBreakPoint(foo, 0);
|
| - CallAndGC(env->Global(), foo);
|
| + {
|
| + v8::Local<v8::Function> bar =
|
| + CompileFunction(&env, "function foo(){}", "foo");
|
| + foo = CompileFunction(&env, "function foo(){bar=0;}", "foo");
|
| + SetBreakPoint(foo, 0);
|
| + }
|
| + CallAndGC(env->Global(), foo, force_compaction);
|
|
|
| // Test IC load break point with garbage collection.
|
| - foo = CompileFunction(&env, "bar=1;function foo(){var x=bar;}", "foo");
|
| - SetBreakPoint(foo, 0);
|
| - CallAndGC(env->Global(), foo);
|
| + {
|
| + v8::Local<v8::Function> bar =
|
| + CompileFunction(&env, "function foo(){}", "foo");
|
| + foo = CompileFunction(&env, "bar=1;function foo(){var x=bar;}", "foo");
|
| + SetBreakPoint(foo, 0);
|
| + }
|
| + CallAndGC(env->Global(), foo, force_compaction);
|
|
|
| // Test IC call break point with garbage collection.
|
| - foo = CompileFunction(&env, "function bar(){};function foo(){bar();}", "foo");
|
| - SetBreakPoint(foo, 0);
|
| - CallAndGC(env->Global(), foo);
|
| + {
|
| + v8::Local<v8::Function> bar =
|
| + CompileFunction(&env, "function foo(){}", "foo");
|
| + foo = CompileFunction(&env,
|
| + "function bar(){};function foo(){bar();}",
|
| + "foo");
|
| + SetBreakPoint(foo, 0);
|
| + }
|
| + CallAndGC(env->Global(), foo, force_compaction);
|
|
|
| // Test return break point with garbage collection.
|
| - foo = CompileFunction(&env, "function foo(){}", "foo");
|
| - SetBreakPoint(foo, 0);
|
| - CallAndGC(env->Global(), foo);
|
| + {
|
| + v8::Local<v8::Function> bar =
|
| + CompileFunction(&env, "function foo(){}", "foo");
|
| + foo = CompileFunction(&env, "function foo(){}", "foo");
|
| + SetBreakPoint(foo, 0);
|
| + }
|
| + CallAndGC(env->Global(), foo, force_compaction);
|
| +
|
| + // Test non IC break point with garbage collection.
|
| + {
|
| + v8::Local<v8::Function> bar =
|
| + CompileFunction(&env, "function foo(){}", "foo");
|
| + foo = CompileFunction(&env, "function foo(){var bar=0;}", "foo");
|
| + SetBreakPoint(foo, 0);
|
| + }
|
| + CallAndGC(env->Global(), foo, force_compaction);
|
| +
|
|
|
| v8::Debug::SetDebugEventListener(NULL);
|
| CheckDebuggerUnloaded();
|
| }
|
|
|
|
|
| +// Test that a break point can be set at a return store location.
|
| +TEST(BreakPointSurviveGC) {
|
| + TestBreakPointSurviveGC(false);
|
| + TestBreakPointSurviveGC(true);
|
| +}
|
| +
|
| +
|
| // Test that break points can be set using the global Debug object.
|
| TEST(BreakPointThroughJavaScript) {
|
| break_point_hit_count = 0;
|
|
|