Implement parsing await. (#3738)

Several bugs fixed for parsing yield as well.

JerryScript-DCO-1.0-Signed-off-by: Zoltan Herczeg zherczeg.u-szeged@partner.samsung.com
This commit is contained in:
Zoltan Herczeg
2020-05-15 22:26:05 +02:00
committed by GitHub
parent a6f6bce6f0
commit 1f00d750b7
21 changed files with 569 additions and 135 deletions
+138
View File
@@ -0,0 +1,138 @@
// Copyright JS Foundation and other contributors, http://js.foundation
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
/* This test checks await expressions (nothing else). */
function check_syntax_error (code)
{
try {
eval (code)
assert (false)
} catch (e) {
assert (e instanceof SyntaxError)
}
}
check_syntax_error("(async function await() {})")
check_syntax_error("(async function *await() {})")
check_syntax_error("async function f(await) {}")
check_syntax_error("(async function f(await) {})")
check_syntax_error("async function f(a = await new Promise) {}")
check_syntax_error("async function f() { function await() {} }")
check_syntax_error("async await => 0");
check_syntax_error("async (await) => 0");
check_syntax_error("async function f() { await () => 0 }");
check_syntax_error("async (a) => a\\u0077ait a");
check_syntax_error("async (a) => { () => 0\na\\u0077ait a }");
// Valid uses of await
async a => await a
async a => { await a }
async (a) => await a
async(a) => { await a }
// Nested async and non-async functions
async (a) => {
() => await
await a
}
(a) => {
await
async (a) => await a
await
async (a) => await a
a\u0077ait
}
async function f1(a) {
await a
(function () { await ? async function(a) { await a } : await })
await a
}
async (a) => {
await a;
() => await ? async (a) => await a : await
await a
}
async (a) => {
(a = () => await, [b] = (c))
await a
(a, b = () => await)
await a
}
// Object initializers
var o = {
async await(a) {
await a;
() => await
await a
},
f(a) {
await
async (a) => await a
await
async (a) => await a
a\u0077ait
},
async ["g"] () {
await a;
() => await
await a
}
}
async function f2(a) {
var o = {
[await a]() { await % await }
}
await a;
}
class C {
async await(a) {
await a;
() => await
await a
}
f(a) {
await
async (a) => await a
await
async (a) => await a
a\u0077ait
}
async ["g"] () {
await a;
() => await
await a
}
}
async function f3(a) {
class C {
[await a]() { await % await }
}
await a;
}
+1 -1
View File
@@ -43,7 +43,7 @@
// Test %GeneratorPrototype% prototype chain
(function () {
function* g(){}
var iterator = new g.constructor("a","b","c","yield a; yield b; yield c;")(1,2,3);
var iterator = new g.constructor("a","b","c","() => yield\n yield a; yield b; yield c;")(1,2,3);
var item = iterator.next();
assert(item.value === 1);
+13
View File
@@ -58,6 +58,7 @@ check_syntax_error("function *gen(){ (yield\n1) }");
check_syntax_error("function *gen(){ function yield() {} }");
check_syntax_error("function *gen(){ (yield)=>1 }");
check_syntax_error("function *gen(){ yield => 1 }");
check_syntax_error("function *gen(){ yi\\u0065ld 1 }");
function *gen4() {
var f = function yield(i) {
@@ -71,3 +72,15 @@ function *gen4() {
}
assert(gen4().next().value === 39);
(function *() {
() => yield
yield 1;
})
function *gen5() {
var o = {
["f"]() { yield % yield }
}
yield 1;
}
+1 -1
View File
@@ -223,7 +223,7 @@ main (void)
/* Check the snapshot data. Unused bytes should be filled with zeroes */
const uint8_t expected_data[] =
{
0x4A, 0x52, 0x52, 0x59, 0x2B, 0x00, 0x00, 0x00,
0x4A, 0x52, 0x52, 0x59, 0x2C, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x48, 0x00, 0x00, 0x00,
0x01, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00,
0x03, 0x00, 0x01, 0x00, 0x41, 0x00, 0x01, 0x00,