--- a/js/src/frontend/BinSource.cpp
+++ b/js/src/frontend/BinSource.cpp
@@ -1933,19 +1933,48 @@ ASTReader::parseExpression(SimpleTokenRe
Unused << test.release();
Unused << alternate.release();
Unused << consequent.release();
out = Move(result);
break;
}
- case BinKind::call_expression:
- // FIXME: Implement
+ case BinKind::call_expression: {
+ UniquePtr<ParseNode> callee;
+ UniquePtr<ParseNode> arguments;
+
+ for (auto field: fields) {
+ switch (field) {
+ case BinField::callee:
+ if (!this->parseExpression(&sub, callee)) {
+ return false;
+ }
+ break;
+ case BinField::arguments:
+ if (!this->parseExpressionList(&sub, arguments)) {
+ return false;
+ }
+ break;
+ default:
+ return this->raiseError();
+ }
+ }
+
+ if (!callee || !arguments) {
+ return this->raiseError();
+ }
+
+ UniquePtr<ParseNode> result(new_<ListNode>(PNK_CALL, 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) {