WIP: Implemented call_expression, new_expression
MozReview-Commit-ID: FYY7wAq5bU1
--- 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;