@Override
  public InputStream getResourceAsStream(String resourceName) {
    final LispThread thread = LispThread.currentThread();

    Pathname name = new Pathname(resourceName.substring("org/armedbear/lisp/".length()));
    LispObject truenameFasl = Symbol.LOAD_TRUENAME_FASL.symbolValue(thread);
    LispObject truename = Symbol.LOAD_TRUENAME.symbolValue(thread);

    if (truenameFasl instanceof Pathname) {
      return Pathname.mergePathnames(name, (Pathname) truenameFasl, Keyword.NEWEST)
          .getInputStream();
    } else if (truename instanceof Pathname) {
      return Pathname.mergePathnames(name, (Pathname) truename, Keyword.NEWEST).getInputStream();
    } else if (!Pathname.truename(name).equals(NIL)) {
      return name.getInputStream();
    }

    return null;
  }
 public LispObject loadFunction(int fnNumber) {
   // Function name is fnIndex + 1
   String name = baseName + "_" + (fnNumber + 1);
   try {
     Class clz = loadClass(name);
     Function f = (Function) clz.newInstance();
     if (clz.getClassLoader() instanceof JavaClassLoader) {
       // Don't do this for system classes (though probably dont need this for other classes)
       f.setClassBytes(getFunctionClassBytes(name));
     }
     return f;
   } catch (Throwable e) {
     if (e instanceof ControlTransfer) {
       throw (ControlTransfer) e;
     }
     Debug.trace(e);
     return error(
         new LispError(
             "Compiled function can't be loaded: "
                 + name
                 + " from "
                 + Symbol.LOAD_TRUENAME.symbolValue()));
   }
 }