Index: test/cctest/test-debug.cc |
diff --git a/test/cctest/test-debug.cc b/test/cctest/test-debug.cc |
index 67ef88516a11fa10ce9d2d0dd2b6f368baf42a67..807797983d3c09af60fb5f9dc674bdbae9bdd2f4 100644 |
--- a/test/cctest/test-debug.cc |
+++ b/test/cctest/test-debug.cc |
@@ -7700,4 +7700,39 @@ TEST(LiveEditDisabled) { |
} |
+TEST(PrecompiledFunction) { |
+ // Regression test for crbug.com/346207. If we have preparse data, parsing the |
+ // function in the presence of the debugger (and breakpoints) should still |
+ // succeed. The bug was that preparsing was done lazily and parsing was done |
+ // eagerly, so, the symbol streams didn't match. |
+ DebugLocalContext env; |
+ v8::HandleScope scope(env->GetIsolate()); |
+ env.ExposeDebug(); |
+ v8::Debug::SetDebugEventListener2(DebugBreakInlineListener); |
+ |
+ v8::Local<v8::Function> break_here = |
+ CompileFunction(&env, "function break_here(){}", "break_here"); |
+ SetBreakPoint(break_here, 0); |
+ |
+ const char* source = |
+ "var a = b = c = 1; \n" |
+ "function this_is_lazy() { \n" |
+ // This symbol won't appear in the preparse data. |
+ " var a; \n" |
+ "} \n" |
+ "function bar() { \n" |
+ " return \"bar\"; \n" |
+ "}; \n" |
+ "a = b = c = 2; \n" |
+ "bar(); \n"; |
+ v8::Local<v8::Value> result = PreCompileCompileRun(source); |
+ CHECK(result->IsString()); |
+ v8::String::Utf8Value utf8(result); |
+ CHECK_EQ("bar", *utf8); |
+ |
+ v8::Debug::SetDebugEventListener2(NULL); |
+ CheckDebuggerUnloaded(); |
+} |
+ |
+ |
#endif // ENABLE_DEBUGGER_SUPPORT |