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

Unified Diff: test/mjsunit/harmony/debug-async-liveedit.js

Issue 2058733002: [liveedit]: fail to patch if target is outside of async function on stack (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Fix the CHECK failure, too Created 4 years, 6 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
« src/builtins.cc ('K') | « src/debug/liveedit.cc ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: test/mjsunit/harmony/debug-async-liveedit.js
diff --git a/test/mjsunit/es6/generators-debug-liveedit.js b/test/mjsunit/harmony/debug-async-liveedit.js
similarity index 51%
copy from test/mjsunit/es6/generators-debug-liveedit.js
copy to test/mjsunit/harmony/debug-async-liveedit.js
index 2bbbfc2d851948ce19fea3f85679100d14793cd8..c651ddba1633b371ce98071c161e8c759fc4e0c7 100644
--- a/test/mjsunit/es6/generators-debug-liveedit.js
+++ b/test/mjsunit/harmony/debug-async-liveedit.js
@@ -1,7 +1,8 @@
-// Copyright 2014 the V8 project authors. All rights reserved.
+// Copyright 2016 the V8 project authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
+// Flags: --harmony-async-await
// Flags: --expose-debug-as debug --allow-natives-syntax --ignition-generators
var Debug = debug.Debug;
@@ -9,18 +10,27 @@ var LiveEdit = Debug.LiveEdit;
unique_id = 0;
-var Generator = (function*(){}).constructor;
+var AsyncFunction = (async function(){}).constructor;
-function assertIteratorResult(value, done, result) {
- assertEquals({value: value, done: done}, result);
+function assertPromiseValue(value, promise) {
+ promise.then(resolve => {
+ went = true;
+ if (resolve !== value) {
+ print(`expected ${value} found ${resolve}`);
+ quit(1);
+ }
+ }, reject => {
+ print(`rejected ${reject}`);
+ quit(1);
+ });
}
-function MakeGenerator() {
+function MakeAsyncFunction() {
// Prevents eval script caching.
unique_id++;
- return Generator('callback',
+ return AsyncFunction('callback',
"/* " + unique_id + "*/\n" +
- "yield callback();\n" +
+ "await callback();\n" +
"return 'Cat';\n");
}
@@ -35,11 +45,10 @@ function MakeFunction() {
// First, try MakeGenerator with no perturbations.
(function(){
- var generator = MakeGenerator();
+ var asyncfn = MakeAsyncFunction();
function callback() {};
- var iter = generator(callback);
- assertIteratorResult(undefined, false, iter.next());
- assertIteratorResult("Cat", true, iter.next());
+ var promise = asyncfn(callback);
+ assertPromiseValue('Cat', promise);
})();
function patch(fun, from, to) {
@@ -47,6 +56,7 @@ function patch(fun, from, to) {
var log = new Array();
var script = Debug.findScript(fun);
var pos = script.source.indexOf(from);
+ print(`pos ${pos}`);
try {
LiveEdit.TestApi.ApplySingleChunkPatch(script, pos, from.length, to,
log);
@@ -57,40 +67,41 @@ function patch(fun, from, to) {
%ExecuteInDebugContext(debug);
}
-// Try to edit a MakeGenerator while it's running, then again while it's
+// Try to edit a MakeAsyncFunction while it's running, then again while it's
// stopped.
(function(){
- var generator = MakeGenerator();
+ var asyncfn = MakeAsyncFunction();
- var gen_patch_attempted = false;
- function attempt_gen_patch() {
- assertFalse(gen_patch_attempted);
- gen_patch_attempted = true;
- assertThrows(function() { patch(generator, "'Cat'", "'Capybara'") },
+ var patch_attempted = false;
+ function attempt_patch() {
+ assertFalse(patch_attempted);
+ patch_attempted = true;
+ assertThrows(function() { patch(asyncfn, "'Cat'", "'Capybara'") },
LiveEdit.Failure);
};
- var iter = generator(attempt_gen_patch);
- assertIteratorResult(undefined, false, iter.next());
- // Patch should not succeed because there is a live generator activation on
- // the stack.
- assertIteratorResult("Cat", true, iter.next());
- assertTrue(gen_patch_attempted);
+ var promise = asyncfn(attempt_patch);
+ // Patch should not succeed because there is a live async function activation
+ // on the stack.
+ assertPromiseValue("Cat", promise);
+ assertTrue(patch_attempted);
+
+ %RunMicrotasks();
// At this point one iterator is live, but closed, so the patch will succeed.
- patch(generator, "'Cat'", "'Capybara'");
- iter = generator(function(){});
- assertIteratorResult(undefined, false, iter.next());
+ patch(asyncfn, "'Cat'", "'Capybara'");
+ promise = asyncfn(function(){});
// Patch successful.
- assertIteratorResult("Capybara", true, iter.next());
+ assertPromiseValue("Capybara", promise);
- // Patching will fail however when a live iterator is suspended.
- iter = generator(function(){});
- assertIteratorResult(undefined, false, iter.next());
- assertThrows(function() { patch(generator, "'Capybara'", "'Tapir'") },
+ // Patching will fail however when an async function is suspended.
+ var resolve;
+ promise = asyncfn(function(){return new Promise(function(r){resolve = r})});
+ assertThrows(function() { patch(asyncfn, "'Capybara'", "'Tapir'") },
LiveEdit.Failure);
- assertIteratorResult("Capybara", true, iter.next());
+ resolve();
+ assertPromiseValue("Capybara", promise);
- // Try to patch functions with activations inside and outside generator
+ // Try to patch functions with activations inside and outside async
// function activations. We should succeed in the former case, but not in the
// latter.
var fun_outside = MakeFunction();
@@ -104,16 +115,19 @@ function patch(fun, from, to) {
return;
}
fun_patch_attempted = true;
- // Patching outside a generator activation must fail.
+ // Patching outside an async function activation must fail.
assertThrows(function() { patch(fun_outside, "'Cat'", "'Cobra'") },
LiveEdit.Failure);
- // Patching inside a generator activation may succeed.
+ // Patching inside an async function activation may succeed.
patch(fun_inside, "'Cat'", "'Koala'");
}
- iter = generator(function() { return fun_inside(attempt_fun_patches) });
+ promise = asyncfn(function() { return fun_inside(attempt_fun_patches) });
assertEquals('Cat',
fun_outside(function () {
- assertIteratorResult('Koala', false, iter.next());
+ assertPromiseValue('Capybara', promise);
assertTrue(fun_patch_restarted);
+ assertTrue(fun_inside.toString().includes("'Koala'"));
}));
})();
+
+%RunMicrotasks();
« src/builtins.cc ('K') | « src/debug/liveedit.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698