diff options
author | Michaël Zasso <targos@protonmail.com> | 2018-07-25 19:30:07 +0200 |
---|---|---|
committer | Michaël Zasso <targos@protonmail.com> | 2018-07-26 08:31:50 +0200 |
commit | 6a31d05340b22fc413ee83eaacd0a5565bbbe799 (patch) | |
tree | 78f9e1c2f417244842f6422f17e1816e70317100 /deps/v8/src/parsing/parser.cc | |
parent | 4d94bb2b1f72b6b612983a517a39c5545724a3ad (diff) | |
download | android-node-v8-6a31d05340b22fc413ee83eaacd0a5565bbbe799.tar.gz android-node-v8-6a31d05340b22fc413ee83eaacd0a5565bbbe799.tar.bz2 android-node-v8-6a31d05340b22fc413ee83eaacd0a5565bbbe799.zip |
deps: update V8 to 6.8.275.24
PR-URL: https://github.com/nodejs/node/pull/21079
Reviewed-By: James M Snell <jasnell@gmail.com>
Reviewed-By: Matteo Collina <matteo.collina@gmail.com>
Reviewed-By: Colin Ihrig <cjihrig@gmail.com>
Reviewed-By: Yang Guo <yangguo@chromium.org>
Diffstat (limited to 'deps/v8/src/parsing/parser.cc')
-rw-r--r-- | deps/v8/src/parsing/parser.cc | 61 |
1 files changed, 22 insertions, 39 deletions
diff --git a/deps/v8/src/parsing/parser.cc b/deps/v8/src/parsing/parser.cc index 8b4d346f5a..009e76cb26 100644 --- a/deps/v8/src/parsing/parser.cc +++ b/deps/v8/src/parsing/parser.cc @@ -3543,52 +3543,35 @@ Expression* Parser::SpreadCall(Expression* function, ZoneList<Expression*>* args_list, int pos, Call::PossiblyEval is_possibly_eval) { // Handle this case in BytecodeGenerator. - if (OnlyLastArgIsSpread(args_list)) { + if (OnlyLastArgIsSpread(args_list) || function->IsSuperCallReference()) { return factory()->NewCall(function, args_list, pos); } - if (function->IsSuperCallReference()) { - // Super calls - // $super_constructor = %_GetSuperConstructor(<this-function>) - // %reflect_construct($super_constructor, args, new.target) - ZoneList<Expression*>* args = new (zone()) ZoneList<Expression*>(3, zone()); - ZoneList<Expression*>* tmp = new (zone()) ZoneList<Expression*>(1, zone()); - tmp->Add(function->AsSuperCallReference()->this_function_var(), zone()); - args->Add(factory()->NewCallRuntime(Runtime::kInlineGetSuperConstructor, - tmp, pos), - zone()); - args->Add(ArrayLiteralFromListWithSpread(args_list), zone()); - args->Add(function->AsSuperCallReference()->new_target_var(), zone()); - return factory()->NewCallRuntime(Context::REFLECT_CONSTRUCT_INDEX, args, - pos); - } else { - ZoneList<Expression*>* args = new (zone()) ZoneList<Expression*>(3, zone()); - if (function->IsProperty()) { - // Method calls - if (function->AsProperty()->IsSuperAccess()) { - Expression* home = ThisExpression(kNoSourcePosition); - args->Add(function, zone()); - args->Add(home, zone()); - } else { - Variable* temp = NewTemporary(ast_value_factory()->empty_string()); - VariableProxy* obj = factory()->NewVariableProxy(temp); - Assignment* assign_obj = factory()->NewAssignment( - Token::ASSIGN, obj, function->AsProperty()->obj(), - kNoSourcePosition); - function = factory()->NewProperty( - assign_obj, function->AsProperty()->key(), kNoSourcePosition); - args->Add(function, zone()); - obj = factory()->NewVariableProxy(temp); - args->Add(obj, zone()); - } + ZoneList<Expression*>* args = new (zone()) ZoneList<Expression*>(3, zone()); + if (function->IsProperty()) { + // Method calls + if (function->AsProperty()->IsSuperAccess()) { + Expression* home = ThisExpression(kNoSourcePosition); + args->Add(function, zone()); + args->Add(home, zone()); } else { - // Non-method calls + Variable* temp = NewTemporary(ast_value_factory()->empty_string()); + VariableProxy* obj = factory()->NewVariableProxy(temp); + Assignment* assign_obj = factory()->NewAssignment( + Token::ASSIGN, obj, function->AsProperty()->obj(), kNoSourcePosition); + function = factory()->NewProperty( + assign_obj, function->AsProperty()->key(), kNoSourcePosition); args->Add(function, zone()); - args->Add(factory()->NewUndefinedLiteral(kNoSourcePosition), zone()); + obj = factory()->NewVariableProxy(temp); + args->Add(obj, zone()); } - args->Add(ArrayLiteralFromListWithSpread(args_list), zone()); - return factory()->NewCallRuntime(Context::REFLECT_APPLY_INDEX, args, pos); + } else { + // Non-method calls + args->Add(function, zone()); + args->Add(factory()->NewUndefinedLiteral(kNoSourcePosition), zone()); } + args->Add(ArrayLiteralFromListWithSpread(args_list), zone()); + return factory()->NewCallRuntime(Context::REFLECT_APPLY_INDEX, args, pos); } Expression* Parser::SpreadCallNew(Expression* function, |