WIP: Implemented call_expression, new_expression draft
authorDavid Teller <dteller@mozilla.com>
Fri, 04 Aug 2017 18:43:30 +0200
changeset 641376 455c1dc1d17a173be5309ac8309aaadb800a45bb
parent 641375 946d93dcb6d3b2a7813d5ed766b0af6ad33bd393
child 641377 58e4f08d52ab891dae7069192aa4bd2ec883e433
push id72504
push userdteller@mozilla.com
push dateSun, 06 Aug 2017 22:28:40 +0000
milestone57.0a1
WIP: Implemented call_expression, new_expression MozReview-Commit-ID: FYY7wAq5bU1
js/src/frontend/BinSource.cpp
--- a/js/src/frontend/BinSource.cpp
+++ b/js/src/frontend/BinSource.cpp
@@ -1933,17 +1933,18 @@ ASTReader::parseExpression(SimpleTokenRe
 
             Unused << test.release();
             Unused << alternate.release();
             Unused << consequent.release();
 
             out = Move(result);
             break;
         }
-        case BinKind::call_expression: {
+        case BinKind::call_expression: MOZ_FALLTHROUGH;
+        case BinKind::new_expression: {
             UniquePtr<ParseNode> callee;
             UniquePtr<ParseNode> arguments;
 
             for (auto field: fields) {
                 switch (field) {
                     case BinField::callee:
                         if (!this->parseExpression(&sub, callee)) {
                             return false;
@@ -1958,26 +1959,27 @@ ASTReader::parseExpression(SimpleTokenRe
                         return this->raiseError();
                 }
             }
 
             if (!callee || !arguments) {
                 return this->raiseError();
             }
 
-            UniquePtr<ParseNode> result(new_<ListNode>(PNK_CALL, TokenPos()));
+            ParseNodeKind pnk =
+                kind == BinKind::call_expression
+                ? PNK_CALL
+                : PNK_NEW;
+            UniquePtr<ParseNode> result(new_<ListNode>(pnk, TokenPos()));
             result->initList(arguments.release());
             result->prepend(callee.release());
 
             out = Move(result);
             break;
         }
-        case BinKind::new_expression:
-            // FIXME: Implement
-            break;
         case BinKind::sequence_expression: {
             UniquePtr<ParseNode> sequence;
 
             for (auto field: fields) {
                 switch (field) {
                     case BinField::expressions:
                         if (!this->parseExpressionList(&sub, sequence)) {
                             return false;