code: private void unrollBinaryOperator(
        Node n, Token op, String opStr, Context context,
        Context rhsContext, int leftPrecedence, int rightPrecedence) {
      Node firstNonOperator = n.getFirstChild();
      while (firstNonOperator.getToken() == op) {
        firstNonOperator = firstNonOperator.getFirstChild();
      }
  
      addExpr(firstNonOperator, leftPrecedence, context);
  
      Node current = firstNonOperator;
      do {
        current = current.getParent();
        cc.addOp(opStr, true);
        addExpr(current.getSecondChild(), rightPrecedence, rhsContext);
      } while (current != n);
    }
docs: We could use addList recursively here, but sometimes we produce
  very deeply nested operators and run out of stack space, so we
  just unroll the recursion when possible.
  
  We assume nodes are left-recursive.