summaryrefslogtreecommitdiff
path: root/deps/v8/src/parsing/parser.cc
diff options
context:
space:
mode:
authorMichaël Zasso <targos@protonmail.com>2018-07-25 19:30:07 +0200
committerMichaël Zasso <targos@protonmail.com>2018-07-26 08:31:50 +0200
commit6a31d05340b22fc413ee83eaacd0a5565bbbe799 (patch)
tree78f9e1c2f417244842f6422f17e1816e70317100 /deps/v8/src/parsing/parser.cc
parent4d94bb2b1f72b6b612983a517a39c5545724a3ad (diff)
downloadandroid-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.cc61
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,