function parseSubscripts(base, noCalls) {
    var node;
    if (eat(_dot)) {
      node = startNodeFrom(base);
      node.object = base;
      node.property = parseIdent(true);
      node.computed = false;
      return parseSubscripts(finishNode(node, "MemberExpression"), noCalls);
    }
    if (eat(_bracketL)) {
      node = startNodeFrom(base);
      node.object = base;
      node.property = parseExpression();
      node.computed = true;
      expect(_bracketR);
      return parseSubscripts(finishNode(node, "MemberExpression"), noCalls);
    }
    if (!noCalls && eat(_parenL)) {
      node = startNodeFrom(base);
      node.callee = base;
      node.arguments = parseExprList(_parenR, false);
      return parseSubscripts(finishNode(node, "CallExpression"), noCalls);
    }
    return base;
  }
@param {!node_t} base
@param {boolean=} noCalls
@returns {!node_t}