Tests that evaluation with top-level await may be perfomed in console.
await Promise.resolve(1)
1
{a:await Promise.resolve(1)}
{a: 1}
$_
{a: 1}
let {a,b} = await Promise.resolve({a: 1, b:2}), f = 5;
undefined
a
1
b
2
let c = await Promise.resolve(2)
undefined
c
2
let d;
undefined
d
undefined
let [i,{abc:{k}}] = [0,{abc:{k:1}}];
undefined
i
0
k
1
var l = await Promise.resolve(2);
undefined
l
2
foo(await koo());
4
$_
4
const m = foo(await koo());
undefined
m
4
const n = foo(await
koo());
undefined
n
4
`status: ${(await Promise.resolve({status:200})).status}`
"status: 200"
for (let i = 0; i < 2; ++i) await i
undefined
for (let i = 0; i < 2; ++i) { await i }
undefined
await 0
0
await 0;function foo(){}
undefined
foo
ƒ foo(){}
class Foo{}; await 1;
1
Foo
class Foo{}
await 0;function* gen(){}
undefined
for (var i = 0; i < 10; ++i) { await i; }
undefined
i
10
for (let j = 0; j < 5; ++j) { await j; }
undefined
j
VM:1 Uncaught ReferenceError: j is not defined
    at <anonymous>:1:1
(anonymous) @ VM:1
gen
ƒ* gen(){}
await 5; return 42;
VM:1 Uncaught SyntaxError: await is only valid in async function
let o = await 1, p
undefined
p
undefined
let q = 1, s = await 2
undefined
s
2

