| Index: src/parser.cc
|
| diff --git a/src/parser.cc b/src/parser.cc
|
| index b1d427e2529f4ec23a4ac702094ba4f874657443..11ecec270a67a122c836e5d429470b1efd344fed 100644
|
| --- a/src/parser.cc
|
| +++ b/src/parser.cc
|
| @@ -511,9 +511,24 @@ bool ParserTraits::ShortcutNumericLiteralBinaryExpression(
|
| *x = factory->NewNumberLiteral(value, pos);
|
| return true;
|
| }
|
| + case Token::EXP: {
|
| + double value = power_helper(x_val, y_val);
|
| + *x = factory->NewNumberLiteral(value, pos);
|
| + return true;
|
| + }
|
| default:
|
| break;
|
| }
|
| + } else if (op == Token::EXP) {
|
| + Zone* zone = parser_->zone();
|
| +
|
| + // Desugar exponentiation to runtime call
|
| + ZoneList<Expression*>* args = new (zone) ZoneList<Expression*>(2, zone);
|
| + args->Add(*x, zone);
|
| + args->Add(y, zone);
|
| + *x = factory->NewCallRuntime(
|
| + parser_->ast_value_factory()->math_pow_string(), NULL, args, pos);
|
| + return true;
|
| }
|
| return false;
|
| }
|
| @@ -815,6 +830,7 @@ Parser::Parser(CompilationInfo* info, uintptr_t stack_limit, uint32_t hash_seed,
|
| set_allow_harmony_computed_property_names(
|
| FLAG_harmony_computed_property_names);
|
| set_allow_harmony_rest_params(FLAG_harmony_rest_parameters);
|
| + set_allow_harmony_exponentiation(FLAG_harmony_exponentiation);
|
| set_allow_strong_mode(FLAG_strong_mode);
|
| for (int feature = 0; feature < v8::Isolate::kUseCounterFeatureCount;
|
| ++feature) {
|
| @@ -4059,6 +4075,8 @@ PreParser::PreParseResult Parser::ParseLazyFunctionBodyWithPreParser(
|
| allow_harmony_computed_property_names());
|
| reusable_preparser_->set_allow_harmony_rest_params(
|
| allow_harmony_rest_params());
|
| + reusable_preparser_->set_allow_harmony_exponentiation(
|
| + allow_harmony_exponentiation());
|
| reusable_preparser_->set_allow_strong_mode(allow_strong_mode());
|
| }
|
| PreParser::PreParseResult result = reusable_preparser_->PreParseLazyFunction(
|
|
|