| Index: test/cctest/test-parsing.cc
|
| diff --git a/test/cctest/test-parsing.cc b/test/cctest/test-parsing.cc
|
| index ff0026d2bda1f85964df73db61aa642232e2b4c0..738a53fb6885c4d0019b995dd05a583cef7258fe 100644
|
| --- a/test/cctest/test-parsing.cc
|
| +++ b/test/cctest/test-parsing.cc
|
| @@ -1509,6 +1509,7 @@ enum ParserFlag {
|
| kNoLegacyConst,
|
| kAllowHarmonyFunctionSent,
|
| kAllowHarmonyRestrictiveDeclarations,
|
| + kAllowHarmonyExponentiationOperator
|
| };
|
|
|
| enum ParserSyncTestResult {
|
| @@ -1529,6 +1530,8 @@ void SetParserFlags(i::ParserBase<Traits>* parser,
|
| flags.Contains(kAllowHarmonyFunctionSent));
|
| parser->set_allow_harmony_restrictive_declarations(
|
| flags.Contains(kAllowHarmonyRestrictiveDeclarations));
|
| + parser->set_allow_harmony_exponentiation_operator(
|
| + flags.Contains(kAllowHarmonyExponentiationOperator));
|
| }
|
|
|
|
|
| @@ -7301,3 +7304,95 @@ TEST(FunctionDeclarationError) {
|
| RunParserSyncTest(sloppy_context, sloppy_data, kSuccess, restrictive_flags,
|
| arraysize(restrictive_flags));
|
| }
|
| +
|
| +TEST(ExponentiationOperator) {
|
| + // clang-format off
|
| + const char* context_data[][2] = {
|
| + { "var O = { p: 1 }, x = 10; ; if (", ") { foo(); }" },
|
| + { "var O = { p: 1 }, x = 10; ; (", ")" },
|
| + { "var O = { p: 1 }, x = 10; foo(", ")" },
|
| + { NULL, NULL }
|
| + };
|
| + const char* data[] = {
|
| + "(delete O.p) ** 10",
|
| + "(delete x) ** 10",
|
| + "(~O.p) ** 10",
|
| + "(~x) ** 10",
|
| + "(!O.p) ** 10",
|
| + "(!x) ** 10",
|
| + "(+O.p) ** 10",
|
| + "(+x) ** 10",
|
| + "(-O.p) ** 10",
|
| + "(-x) ** 10",
|
| + "(typeof O.p) ** 10",
|
| + "(typeof x) ** 10",
|
| + "(void 0) ** 10",
|
| + "(void O.p) ** 10",
|
| + "(void x) ** 10",
|
| + "++O.p ** 10",
|
| + "++x ** 10",
|
| + "--O.p ** 10",
|
| + "--x ** 10",
|
| + "O.p++ ** 10",
|
| + "x++ ** 10",
|
| + "O.p-- ** 10",
|
| + "x-- ** 10",
|
| + NULL
|
| + };
|
| + // clang-format on
|
| +
|
| + static const ParserFlag always_flags[] = {
|
| + kAllowHarmonyExponentiationOperator};
|
| + RunParserSyncTest(context_data, data, kSuccess, NULL, 0, always_flags,
|
| + arraysize(always_flags));
|
| +}
|
| +
|
| +TEST(ExponentiationOperatorErrors) {
|
| + // clang-format off
|
| + const char* context_data[][2] = {
|
| + { "var O = { p: 1 }, x = 10; ; if (", ") { foo(); }" },
|
| + { "var O = { p: 1 }, x = 10; ; (", ")" },
|
| + { "var O = { p: 1 }, x = 10; foo(", ")" },
|
| + { NULL, NULL }
|
| + };
|
| + const char* error_data[] = {
|
| + "delete O.p ** 10",
|
| + "delete x ** 10",
|
| + "~O.p ** 10",
|
| + "~x ** 10",
|
| + "!O.p ** 10",
|
| + "!x ** 10",
|
| + "+O.p ** 10",
|
| + "+x ** 10",
|
| + "-O.p ** 10",
|
| + "-x ** 10",
|
| + "typeof O.p ** 10",
|
| + "typeof x ** 10",
|
| + "void ** 10",
|
| + "void O.p ** 10",
|
| + "void x ** 10",
|
| + "++delete O.p ** 10",
|
| + "--delete O.p ** 10",
|
| + "++~O.p ** 10",
|
| + "++~x ** 10",
|
| + "--!O.p ** 10",
|
| + "--!x ** 10",
|
| + "++-O.p ** 10",
|
| + "++-x ** 10",
|
| + "--+O.p ** 10",
|
| + "--+x ** 10",
|
| + "[ x ] **= [ 2 ]",
|
| + "[ x **= 2 ] = [ 2 ]",
|
| + "{ x } **= { x: 2 }",
|
| + "{ x: x **= 2 ] = { x: 2 }",
|
| + // TODO(caitp): a Call expression as LHS should be an early ReferenceError!
|
| + // "Array() **= 10",
|
| + NULL
|
| + };
|
| + // clang-format on
|
| +
|
| + static const ParserFlag always_flags[] = {
|
| + kAllowHarmonyExponentiationOperator};
|
| + RunParserSyncTest(context_data, error_data, kError, NULL, 0, always_flags,
|
| + arraysize(always_flags));
|
| +}
|
|
|