| Index: test/cctest/test-parsing.cc
|
| diff --git a/test/cctest/test-parsing.cc b/test/cctest/test-parsing.cc
|
| index 1b0ced08edc3d895d20c7570a3d466de3e3ae048..57535897ca28fd8763b49e729684d4c4318fdc92 100644
|
| --- a/test/cctest/test-parsing.cc
|
| +++ b/test/cctest/test-parsing.cc
|
| @@ -1508,7 +1508,8 @@ enum ParserFlag {
|
| kAllowHarmonyNewTarget,
|
| kAllowHarmonyFunctionSent,
|
| kAllowHarmonyRestrictiveDeclarations,
|
| - kAllowHarmonyExponentiationOperator
|
| + kAllowHarmonyExponentiationOperator,
|
| + kAllowHarmonyAsyncAwait
|
| };
|
|
|
| enum ParserSyncTestResult {
|
| @@ -1528,6 +1529,8 @@ void SetParserFlags(i::ParserBase<Traits>* parser,
|
| flags.Contains(kAllowHarmonyRestrictiveDeclarations));
|
| parser->set_allow_harmony_exponentiation_operator(
|
| flags.Contains(kAllowHarmonyExponentiationOperator));
|
| + parser->set_allow_harmony_async_await(
|
| + flags.Contains(kAllowHarmonyAsyncAwait));
|
| }
|
|
|
|
|
| @@ -7230,3 +7233,94 @@ TEST(ExponentiationOperatorErrors) {
|
| RunParserSyncTest(context_data, error_data, kError, NULL, 0, always_flags,
|
| arraysize(always_flags));
|
| }
|
| +
|
| +
|
| +TEST(AsyncAwait) {
|
| + // clang-format off
|
| + const char* context_data[][2] = {
|
| + { "'use strict';", "" },
|
| + { "", "" },
|
| + { NULL, NULL }
|
| + };
|
| +
|
| + const char* data[] = {
|
| + "var asyncFn = async function() {};",
|
| + "var asyncFn = async function withName() {};",
|
| + "var asyncFn = async () => 'test';",
|
| + "var asyncFn = async x => x + 'test';",
|
| + "async function asyncFn() {}",
|
| + "var O = { async method() {} }",
|
| + "var O = { async ['meth' + 'od']() {} }",
|
| + "var O = { async 'method'() {} }",
|
| + "var O = { async 0() {} }",
|
| + "var async\nfunction await() {}",
|
| + NULL
|
| + };
|
| + // clang-format on
|
| +
|
| + static const ParserFlag always_flags[] = { kAllowHarmonyAsyncAwait };
|
| + RunParserSyncTest(context_data, data, kSuccess, NULL, 0, always_flags,
|
| + arraysize(always_flags));
|
| +}
|
| +
|
| +
|
| +TEST(AsyncAwaitErrors) {
|
| + // clang-format off
|
| + const char* context_data[][2] = {
|
| + { "'use strict';", "" },
|
| + { "", "" },
|
| + { NULL, NULL }
|
| + };
|
| +
|
| + const char* strict_context_data[][2] = {
|
| + { "'use strict';", "" },
|
| + { NULL, NULL }
|
| + };
|
| +
|
| + const char* error_data[] = {
|
| + "var asyncFn = async function() { var await = 1; };",
|
| + "var asyncFn = async function() { var { await } = 1; };",
|
| + "var asyncFn = async function() { var [ await ] = 1; };",
|
| + "var asyncFn = async function await() {};",
|
| + "var asyncFn = async () => var await = 'test';",
|
| + "var asyncFn = async await => await + 'test';",
|
| + "var asyncFn = async function(await) {};",
|
| + "var asyncFn = async function() { return async (await) => {}; }",
|
| + "var asyncFn = async (await) => 'test';",
|
| + "var asyncFn = async x => { var await = 1; }",
|
| + "var asyncFn = async x => { var { await } = 1; }",
|
| + "var asyncFn = async x => { var [ await ] = 1; }",
|
| + "async function f(await) {}",
|
| + "async function f() { var await = 1; }",
|
| + "async function f() { var { await } = 1; }",
|
| + "async function f() { var [ await ] = 1; }",
|
| +
|
| + "var O = { async method(a, a) {} }",
|
| + "var O = { async ['meth' + 'od'](a, a) {} }",
|
| + "var O = { async 'method'(a, a) {} }",
|
| + "var O = { async 0(a, a) {} }",
|
| +
|
| + "async function f() { var O = { async [await](a, a) {} } }",
|
| + NULL
|
| + };
|
| +
|
| + const char* strict_error_data[] = {
|
| + "var O = { async method(eval) {} }",
|
| + "var O = { async ['meth' + 'od'](eval) {} }",
|
| + "var O = { async 'method'(eval) {} }",
|
| + "var O = { async 0(eval) {} }",
|
| +
|
| + "var O = { async method(arguments) {} }",
|
| + "var O = { async ['meth' + 'od'](arguments) {} }",
|
| + "var O = { async 'method'(arguments) {} }",
|
| + "var O = { async 0(arguments) {} }",
|
| + NULL
|
| + };
|
| + // clang-format on
|
| +
|
| + static const ParserFlag always_flags[] = { kAllowHarmonyAsyncAwait };
|
| + RunParserSyncTest(context_data, error_data, kError, NULL, 0, always_flags,
|
| + arraysize(always_flags));
|
| + RunParserSyncTest(strict_context_data, strict_error_data, kError, NULL, 0,
|
| + always_flags, arraysize(always_flags));
|
| +}
|
|
|