Skip to content

Commit

Permalink
repl: fix top level await with surrogate characters
Browse files Browse the repository at this point in the history
Fixes: #39929

PR-URL: #39931
Reviewed-By: Ruben Bridgewater <ruben@bridgewater.de>
Reviewed-By: James M Snell <jasnell@gmail.com>
Reviewed-By: Shingo Inoue <leko.noor@gmail.com>
  • Loading branch information
Mesteery authored and targos committed Sep 8, 2021
1 parent 7d51c6a commit addb30f
Show file tree
Hide file tree
Showing 2 changed files with 19 additions and 2 deletions.
3 changes: 1 addition & 2 deletions lib/internal/repl/await.js
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
'use strict';

const {
ArrayFrom,
ArrayPrototypeForEach,
ArrayPrototypeIncludes,
ArrayPrototypeJoin,
Expand Down Expand Up @@ -155,7 +154,7 @@ for (const nodeType of ObjectKeys(walk.base)) {
function processTopLevelAwait(src) {
const wrapPrefix = '(async () => { ';
const wrapped = `${wrapPrefix}${src} })()`;
const wrappedArray = ArrayFrom(wrapped);
const wrappedArray = StringPrototypeSplit(wrapped, '');
let root;
try {
root = parser.parse(wrapped, { ecmaVersion: 'latest' });
Expand Down
18 changes: 18 additions & 0 deletions test/parallel/test-repl-preprocess-top-level-await.js
Original file line number Diff line number Diff line change
Expand Up @@ -9,17 +9,31 @@ const { processTopLevelAwait } = require('internal/repl/await');
// This test was created based on
// https://cs.chromium.org/chromium/src/third_party/WebKit/LayoutTests/http/tests/inspector-unit/preprocess-top-level-awaits.js?rcl=358caaba5e763e71c4abb9ada2d9cd8b1188cac9

const surrogate = (
'"\u{1F601}\u{1f468}\u200d\u{1f469}\u200d\u{1f467}\u200d\u{1f466}"'
);

const testCases = [
[ '0',
null ],
[ 'await 0',
'(async () => { return (await 0) })()' ],
[ `await ${surrogate}`,
`(async () => { return (await ${surrogate}) })()` ],
[ 'await 0;',
'(async () => { return (await 0); })()' ],
[ `await ${surrogate};`,
`(async () => { return (await ${surrogate}); })()` ],
[ `await ${surrogate};`,
`(async () => { return (await ${surrogate}); })()` ],
[ '(await 0)',
'(async () => { return ((await 0)) })()' ],
[ `(await ${surrogate})`,
`(async () => { return ((await ${surrogate})) })()` ],
[ '(await 0);',
'(async () => { return ((await 0)); })()' ],
[ `(await ${surrogate});`,
`(async () => { return ((await ${surrogate})); })()` ],
[ 'async function foo() { await 0; }',
null ],
[ 'async () => await 0',
Expand All @@ -28,8 +42,12 @@ const testCases = [
null ],
[ 'await 0; return 0;',
null ],
[ `await ${surrogate}; await ${surrogate};`,
`(async () => { await ${surrogate}; return (await ${surrogate}); })()` ],
[ 'var a = await 1',
'var a; (async () => { void (a = await 1) })()' ],
[ `var a = await ${surrogate}`,
`var a; (async () => { void (a = await ${surrogate}) })()` ],
[ 'let a = await 1',
'let a; (async () => { void (a = await 1) })()' ],
[ 'const a = await 1',
Expand Down

0 comments on commit addb30f

Please sign in to comment.