throws Exception
  public Expr []bindArguments(Env env, Expr fun, Expr []args)    throws Exception  {    Expr []expandedArgs;    if (_args.length == args.length)      expandedArgs = args;    else if (_args.length < args.length)      expandedArgs = args;    else {      if (_args[args.length].getDefault() == null) {        int required;        for (required = _args.length - 1; required >= 0; required--) {          if (_args[required].getDefault() == null)            break;        }        env.warning(L.l("function '{0}' has {1} required arguments, but {2} were provided",                        _name, required + 1, args.length));      }      expandedArgs = new Expr[_args.length];      System.arraycopy(args, 0, expandedArgs, 0, args.length);      for (int i = args.length; i < expandedArgs.length; i++) {        Expr defaultExpr = _args[i].getDefault();        if (defaultExpr != null)          expandedArgs[i] = defaultExpr;        else          expandedArgs[i] = NullLiteralExpr.NULL;      }    }    return expandedArgs;  }