} catch (InvocationTargetException e) { if (e.getCause() != null) throw e.getCause(); else throw e;
} catch (Exception e) { throw new QuercusException(e);
  public Value eval(Env env, Expr []exprs)    throws Throwable  {    int len = _defaultExprs.length + (_hasEnv ? 1 : 0) + (_hasRestArgs ? 1 : 0);    Object []values = new Object[len];    int k = 0;    if (_hasEnv)      values[k++] = env;    for (int i = 0; i < _marshallArgs.length; i++) {      if (exprs[i] != null) {        values[k] = _marshallArgs[i].marshall(env, exprs[i], _paramTypes[k]);      }      k++;    }    if (_hasRestArgs) {      Value []rest = new Value[exprs.length - _marshallArgs.length];      for (int i = _marshallArgs.length; i < exprs.length; i++) {        if (_isRestReference)          rest[i - _marshallArgs.length] = exprs[i].evalRef(env);        else          rest[i - _marshallArgs.length] = exprs[i].eval(env).toValue();      }      values[values.length - 1] = rest;    }    try {      Object result = _method.invoke(_quercusModule, values);      return _unmarshallReturn.unmarshall(env, result);    } catch (InvocationTargetException e) {      if (e.getCause() != null)        throw e.getCause();      else        throw e;    }  }