1. 19 Oct, 2020 6 commits
  2. 13 Oct, 2020 7 commits
  3. 10 Oct, 2020 16 commits
    • Mark's avatar
      Able to OPEN, PROBE-FILE, and LOAD contents of nested jar · ac72742b
      Mark authored
      Pathname.mergePathname() returns a Pathname, while Pathname.truename()
      returns a LispObject as it needs to be able to return NIL.
      
      PathnameURL.truename() coerces its result to a PathnameURL if necessary.
      ac72742b
    • Mark's avatar
      INCOMPLETE Implement Zip from InputStream access · 1b20b067
      Mark authored
      ZipCache.Archive.getEntry() now works on pathnames relative to the
      root of the Archive.
      
      Able to retrieve the reference to the InputStream for a nested pathname.
      
      Now need to implement accessing entries within this reference.
      
      TODO Rework decision to always use fully qualified pathname in the cache.
      * * *
      Fix Pathname.copyFrom() not to change order of DEVICE cons
      
      Reproduce via:
      
         #p"jar:jar:file:/var/tmp/cl-ppcre-all-2.1.1.jar!/cl-ppcre/packages.abcl!/**/*"
         (namestring *)
      * * *
      PROBE-FILE fails for archive stream
      
      Somewhere in the code we can construct root jar as a Pathname rather
      than PathnameURL which means that the two values are not
      java.lang.Object.equals(), so not matched.
      
      TODO figure out how we are getting such a value
      * * *
      Start being more explicit about the truename method
      * * *
      Delegate cloning of device to the JAR-PATHNAME Java object
      
      TODO PathnameXXX.createXXX() routines uniformly return object over
      LispObject.  Is this really necessary?  It seems to work now in a kind
      of "mixed" state.
      1b20b067
    • Mark's avatar
      Remove unused methods, extraneous comments · 6d43896d
      Mark authored
      6d43896d
    • Mark's avatar
      Our namestrings should always contain forward-slash delimited directories · 7eb391a0
      Mark authored
      We want to convert all Windows backslashes to this format on reading
      namestrings, but always emit directories delimited with forward slashes.
      
      TODO move away from using File.pathSeparator???
      7eb391a0
    • Mark's avatar
      Modernize Cons references · e6e1a214
      Mark authored
      e6e1a214
    • Mark's avatar
      Use PathnameURL namespace for URL things · 776f1a10
      Mark authored
      Remove Pathname.jarSeparator in favor of PathnameURL.JAR_URI_SUFFIX.
      776f1a10
    • Mark's avatar
      pathname: carefully refactor finishing(?) touches · e225e1d6
      Mark authored
      Return NIL as opposed to signalling error with PATHNAME-JAR-P and
      PATHNAME-URL-P.
      * * *
      FILE-WRITE-DATE for remote jar
      
      DELETE-FILE for local jar
      * * *
      Define static Pathname.ncoerce in terms of copyFrom()
      e225e1d6
    • Mark's avatar
      Fixes for working under Windows 10 · 5ae328f4
      Mark authored
      Remove intermediate compiler artifacts from the ZipCache.
      
      Fix URI for previous release.
      5ae328f4
    • Mark's avatar
      Expand abstraction of Archive · aa74a3a6
      Mark authored
      Fix ZipTest
      
      Start working on creating a test for a nested jar.
      
      pathname: overhaul semantics for zips using PATHNAME-DEVICE
      
      Implement CL:PATHNAME-DEVICE references to files which are cons cells
      to the level of abcl-1.7.0, which is that nested pathnames do not
      fully work for all variants of CL:TRUENAME.
      
      Attempt to start coding "worst case, cache everything we find
      strategy".
      
      TODO memoize storage via a weak reference so that the VM can possibly
      reclaim space if it needs to.
      
      TODO re-implement references to URIs. (???)
      * * *
      OPEN of remote Zip archives works
      
      TODO no last modified times are being returned
      aa74a3a6
    • Mark's avatar
      Ensure that we behave like previous implementation · 427d6a3a
      Mark authored
      Seemingly working for simple loads
      
      TODO: No relative pathnames for jars or urls
      
      Everything but PATHNAME-URL loads seem to be working
      * * *
      Properly signal PARSE-ERROR when choking on namestrings
      * * *
      Validate JAR-PATHNAME components better
      
      Enables ABCL/TEST/LISP to at least complete locally.
      
      TODO: incomplete checking for all possible code paths to object
      constructions, notably missing is PathnameURL construction/validation.
      * * *
      IN-PROGRESS restore MERGE-PATHNAMES relative-jar
      
      Need to reinstate relative local PATHNAME-JAR
      427d6a3a
    • Mark's avatar
      Make Pathname.init() static method · 71b6c1bc
      Mark authored
      Running under Netbeans, but failing to enumerate jar pathnames in the
      Java tests.
      
      Moved (most) Pathname.truename() invocations to using symbols
      
      Changed a lot of use of PROBE-FILE over TRUENAME.
      
      Running under Netbeans, but can't probe-file on jar locations:
      
        (probe-file "jar:file:/opt/local/share/java/abcl/abcl.jar!/org/armedbear/lisp/")
        (probe-file "jar:file:/opt/local/share/java/abcl/abcl.jar!/org/armedbear/lisp/boot.lisp")
      
      
      Loading from boot jar not working.
      
      Reading all the jar entries into the entry cache at once is not a good
      idea.  For abcl.jar this is ~10k entries which takes a noticable
      amount of time.
      
      And PathnameJar does not implement the right equals() contract, so
      looking up the entry in the cache doesn't work either.
      
      Running from abcl.jar!
      
      Not loading in contribs…
      Good progress: able to load from abcl.jar.
      
      Failing to bootstrap contrib due to the following errors.
      
      DIRECTORY partly working for jar archives
      
      Use java.net.URI to encode namestrings.
      
      INCOMPLETE Overhaul ZipCache to give linear access to PathnameURL keys
      
      TODO Failing to distinguish that org/armedbear/lisp/java *doesn't* name a directory
      
      TODO: comprehensive multi-level cache design that will plausibly work
      71b6c1bc
    • Mark's avatar
      Starting to hook jar/uri mechanisms up · 6b884d84
      Mark authored
      Failing to roundtrip
      
           (pathname "jar:jar:file:foo.jar!/baz.abcl!/")
      6b884d84
    • Mark's avatar
      INCOMPLETE Hook up implementation of PathnameJar and PathnameURL · 631e423d
      Mark authored
      Current problem:
      
      working through getting TRUENAME working, Lisp.coerceToPathname()
      always returns a Pathname even if it creates a JarPathname?
      631e423d
    • Mark's avatar
      Debugging Pathname transition with logical pathnames · b469fbb6
      Mark authored
      Added LogicalPathname.create() and LogicalPathname()
      
      Solved problems with getting Pathname._makePathname() to return objects of
      type LogicalPathname.
      
          (ignore-errors (asdf:load-system :abcl/test/lisp))
          (abcl-test:run-matching "logical")
      
      TODO: refactor the creation of logical pathnames in
      Pathname._makePathname() into a new LogicalPathname._makePathname().
      * * *
      Used UNREACHED constant to mark non-local exits
      
      TODO do this consistently
      b469fbb6
    • Mark's avatar
      pathname: normalize Pathname to new Java conventions · bc929cf8
      Mark authored
      1. use setter/getter methods for accessing internal components
      
      2. use create() to construct new Pathname objects
      
      Also known as using a Factory pattern which allows one to do stuff
      like:
      
             Pathname p = new Pathname("/foo/").setName("build").setType("me");
      
      TODO: remove invalidateNamestring()
      
      Disallow use of Pathname constructor where possible to encourage use
      of create() routines.
      bc929cf8
    • Mark's avatar
      Introduce a synonym for the null reference · 0e87e951
      Mark authored
      0e87e951
  4. 08 Oct, 2020 1 commit
    • Mark's avatar
      Ensure that SYS:CHECK-REDEFINITION does not signal error conditions · 727011c4
      Mark authored
      Unfortunately, SLIME v2.26 code can throw errors when compiling Emacs
      buffers, namely the pathname may have a device containing the string
      "emacs-buffer" whose PATHNAME name denotes the buffer which often
      contain wild-pathname characters (e.g. "*slime-scratch*") causing a
      naieve PROBE-FILE to throw errors.
      
      TODO redo ABCL SLIME's use of PATHNAME-DEVICE components to mark a
      source location.
      
      Use IGNORE-ERRORS to be extra careful.
      727011c4
  5. 01 Oct, 2020 1 commit
  6. 30 Sep, 2020 1 commit
  7. 25 Sep, 2020 2 commits
  8. 20 Sep, 2020 1 commit
  9. 17 Sep, 2020 1 commit
    • Mark's avatar
      Patches and CI changes for running on openjdk15 · 0ba7dea2
      Mark authored
      Use openjdk15 as latest version instead of openjdk14 under Travis CI.
      
      Allow for java.version that reports an integer without a patchlevel
      which is needed for running openjdk15.
      0ba7dea2
  10. 12 Sep, 2020 1 commit
    • Mark's avatar
      Fix loop destructuring problems · 05108993
      Mark authored
      (Daniel Kochmański)
      
      Cribbed from
      <https://gitlab.com/embeddable-common-lisp/ecl/-/merge_requests/226/diffs>:
      
      Simple MAPCAR must be replaced by a slightly more complicated DO, because the
      list may not be a proper list. I want to dedicate this ballad to myself.
      
          This is a tale of a sorry quest
          To master pure code at the T guru's behest
          I enrolled in a class that appealing did seem
          For it promised to teach fine things like T3 and Scheme
      
          The first day went fine; we learned of cells
          And symbols and lists and functions as well
          Lisp I had mastered and excited was I
          For to master T3 my hackstincts did cry
      
          I sailed through the first week with no problems at all
          And I even said "closure" instead of "function call"
          Then said the master that ready were we
          To start real hacking instead of simple theory
      
          Will you, said he, write me a function please
          That in lists would associate values with keys
          I went home and turned on my trusty Apollo
          And wrote a function whose definition follows:
      
              (cdr (assq key a-list))
      
          A one-liner I thought, fool that I was
          Just two simple calls without a COND clause
          But when I tried this function to run
          CDR didn't think that NIL was much fun
      
          So I tried again like the good King of yore
          And of code I easily generated some more:
      
              (cond ((assq key a-list) => cdr))
      
          It got longer but purer, and it wasn't too bad
          But then COND ran out and that was quite sad
      
          Well, that isn't hard to fix, I was told
          Just write some more code, my son, be bold
          Being young, not even a moment did I pause
          I stifled my instincts and added a clause
      
              (cond ((assq key a-list) => cdr)
                    (else nil))
      
          Sometimes this worked and sometimes it broke
          I debugged and prayed and even had a stroke
          Many a guru tried valiantly to help
          But undefined datums their efforts did squelch.
      
          I returneth once more to the great sage of T
          For no way out of the dilemma I could see
          He said it was easy -- more lines must I fill
          with code, for FALSE was no longer NIL.
      
              (let ((val (assq key a-list)))
                 (cond (val (cdr val))
                       (else nil)))
      
          You'd think by now I might be nearing the end
          Of my ballad which seems bad things to portend
          You'd think that we could all go home scot-free
          But COND eschewed VAL; it wanted #T
      
          So I went back to the master and appealed once again
          I said, pardon me, but now I'm really insane
          He said, no you're not really going out of your head
          Instead of just VAL, you must use NOT NULL instead
      
              (let ((val (assq key a-list)))
                 (cond ((not (null? val)) (cdr val))
                       (else nil)))
      
          My song is over and I'm going home to bed
          With this ineffable feeling that I've been misled
          And just in case my point you have missed
          Somehow I preferred (CDR (ASSQ KEY A-LIST))
      
                      -- Ashwin Ram,
                         "A Short Ballad Dedicated to Program Growth"
      
      Fixes <https://github.com/armedbear/abcl/issues/274> <https://abcl.org/trac/ticket/471>.
      05108993
  11. 09 Sep, 2020 2 commits
  12. 29 Aug, 2020 1 commit