if (isEligibleFunCall(exp, params, "abs")) return fcAbs(exp, (ExprComplex)params.get(0)); if (isEligibleFunCall(exp, params, "arg")) return fcArg(exp, (ExprComplex)params.get(0));
    public Object visitExprFunCall(ExprFunCall exp)    {        // Start by resolving all of the parameters.        List params = new ArrayList();        Iterator iter = exp.getParams().iterator();        while (iter.hasNext())        {            Expression expr = (Expression)iter.next();            params.add(expr.accept(this));        }                // Lots of special cases here.  We care about a function if        // it matches the conditions in isEligibleFunCall().        if (isEligibleFunCall(exp, params, "exp"))            return fcExp(exp, (ExprComplex)params.get(0));                return new ExprFunCall(exp.getName(), params);    }