Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(514)

Unified Diff: test/cctest/test-api.cc

Issue 1247743002: Debugger: fix crash when debugger is enabled between parsing and compiling. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: added assertion Created 5 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « src/debug.h ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: test/cctest/test-api.cc
diff --git a/test/cctest/test-api.cc b/test/cctest/test-api.cc
index 5de04907085bca722611dfc21a244e2a0b864c23..d3a7309008f400109e50ebb1239210234e90fdd3 100644
--- a/test/cctest/test-api.cc
+++ b/test/cctest/test-api.cc
@@ -20987,43 +20987,50 @@ TEST(StreamingProducesParserCache) {
}
-TEST(StreamingWithDebuggingDoesNotProduceParserCache) {
- // If the debugger is active, we should just not produce parser cache at
- // all. This is a regeression test: We used to produce a parser cache without
- // any data in it (just headers).
+TEST(StreamingWithDebuggingEnabledLate) {
+ // The streaming parser can only parse lazily, i.e. inner functions are not
+ // fully parsed. However, we may compile inner functions eagerly when
+ // debugging. Make sure that we can deal with this when turning on debugging
+ // after streaming parser has already finished parsing.
i::FLAG_min_preparse_length = 0;
- const char* chunks[] = {"function foo() { ret", "urn 13; } f", "oo(); ",
+ const char* chunks[] = {"with({x:1}) {",
+ " var foo = function foo(y) {",
+ " return x + y;",
+ " };",
+ " foo(2);",
+ "}",
NULL};
LocalContext env;
v8::Isolate* isolate = env->GetIsolate();
v8::HandleScope scope(isolate);
-
- // Make the debugger active by setting a breakpoint.
- CompileRun("function break_here() { }");
- i::Handle<i::JSFunction> func = i::Handle<i::JSFunction>::cast(
- v8::Utils::OpenHandle(*env->Global()->Get(v8_str("break_here"))));
- EnableDebugger();
- v8::internal::Debug* debug = CcTest::i_isolate()->debug();
- int position = 0;
- debug->SetBreakPoint(func, i::Handle<i::Object>(v8::internal::Smi::FromInt(1),
- CcTest::i_isolate()),
- &position);
+ v8::TryCatch try_catch(isolate);
v8::ScriptCompiler::StreamedSource source(
new TestSourceStream(chunks),
v8::ScriptCompiler::StreamedSource::ONE_BYTE);
v8::ScriptCompiler::ScriptStreamingTask* task =
- v8::ScriptCompiler::StartStreamingScript(
- isolate, &source, v8::ScriptCompiler::kProduceParserCache);
+ v8::ScriptCompiler::StartStreamingScript(isolate, &source);
- // TestSourceStream::GetMoreData won't block, so it's OK to just run the
- // task here in the main thread.
task->Run();
delete task;
- // Check that we got no cached data.
- CHECK(source.GetCachedData() == NULL);
+ CHECK(!try_catch.HasCaught());
+
+ v8::ScriptOrigin origin(v8_str("http://foo.com"));
+ char* full_source = TestSourceStream::FullSourceString(chunks);
+
+ EnableDebugger();
+
+ v8::Handle<Script> script = v8::ScriptCompiler::Compile(
+ isolate, &source, v8_str(full_source), origin);
+
+ Maybe<uint32_t> result =
+ script->Run(env.local()).ToLocalChecked()->Uint32Value(env.local());
+ CHECK_EQ(3, result.FromMaybe(0));
+
+ delete[] full_source;
+
DisableDebugger();
}
« no previous file with comments | « src/debug.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698