if (defaultExpr == null) { return env.error("expected exception"); }
if (defaultExpr == null) return env.error("expected default expression");
  private Value evalImpl(Env env, Expr []args, boolean isRef)    throws Throwable  {    HashMap<String,Var> map = new HashMap<String,Var>();    Value []values = new Value[args.length];    for (int i = 0; i < args.length; i++) {      Arg arg = null;      boolean isReference = false;      if (i < _args.length) {	arg = _args[i];      }      if (arg == null) {	values[i] = args[i].eval(env).copy();      }      else if (arg.isReference()) {	values[i] = args[i].evalRef(env);      	map.put(arg.getName(), values[i].toRefVar());      }      else {	// quercus/0d04	values[i] = args[i].eval(env).copy();      	map.put(arg.getName(), values[i].toVar());      }    }    for (int i = args.length; i < _args.length; i++) {      Arg arg = _args[i];      boolean isReference = false;      Expr defaultExpr = arg.getDefault();      if (defaultExpr == null) {	return env.error("expected exception");      }      else if (arg.isReference())	map.put(arg.getName(), defaultExpr.evalRef(env).toVar());      else {	map.put(arg.getName(), defaultExpr.eval(env).copy().toVar());      }    }          HashMap<String,Var> oldMap = env.pushEnv(map);    Value []oldArgs = env.setFunctionArgs(values);    try {      Value value = _statement.execute(env);      if (value == null)	return NullValue.NULL;      else if (_isReturnsReference && isRef)	return value;      else	return value.copyReturn();    } finally {      env.restoreFunctionArgs(oldArgs);      env.popEnv(oldMap);    }  }