1. 16 May, 2020 4 commits
    • Daniel Kochmański's avatar
      Merge branch 'precompiled-headers' into 'develop' · d7f4637e
      Daniel Kochmański authored
      cmp: add support for precompiled header files
      
      See merge request embeddable-common-lisp/ecl!203
      d7f4637e
    • Marius Gerbershagen's avatar
      Merge branch 'fix-586' into 'develop' · 0d65a6ff
      Marius Gerbershagen authored
      slot-definitions-compatible-p: check for the slot class too
      
      Closes #586
      
      See merge request embeddable-common-lisp/ecl!207
      0d65a6ff
    • Daniel Kochmański's avatar
      slot-definitions-compatible-p: check for the slot class too · 4da8ca54
      Daniel Kochmański authored
      The spec says:
      
          The generic function make-instances-obsolete is invoked
          automatically by the system when defclass has been used to
          redefine an existing standard class and the set of local slots
          accessible in an instance is changed or the order of slots in
          storage is changed. It can also be explicitly invoked by the user.
      
      If the local slot's class is changed then indeed the set has
      changed. We also check whether the slot class is S-D-S-D or S-E-S-D
      and in both cases we also decide that layouts are not compatible.
      
      Fixes #586.
      4da8ca54
    • Marius Gerbershagen's avatar
      cmp: add support for precompiled header files · 636cb4cf
      Marius Gerbershagen authored
      Improves compilation speed for single functions by about 40-50
      percent. Precompiled headers are specific to the compiler version and
      options in use. Due to this, we regenerate the header whenever the
      compiler configuration changes.
      636cb4cf
  2. 12 May, 2020 1 commit
  3. 10 May, 2020 2 commits
  4. 08 May, 2020 8 commits
  5. 07 May, 2020 1 commit
  6. 06 May, 2020 5 commits
  7. 05 May, 2020 1 commit
  8. 01 May, 2020 2 commits
  9. 29 Apr, 2020 1 commit
  10. 25 Apr, 2020 1 commit
  11. 24 Apr, 2020 3 commits
    • Daniel Kochmański's avatar
      Merge branch 'fix-576' into develop · f152a300
      Daniel Kochmański authored
      f152a300
    • Moritz Petersen's avatar
      Add a regression test for the bug described in #576 · d5eafde0
      Moritz Petersen authored
      Merge a test for with-output-to-string with the one for
      with-input-input-from-string to ensure both close their streams.
      
      Remove check for stream-var being a stream outside of w-i-f-s &
      w-o-t-s. According to the specification, the streams' extent ends with the
      respective providing form. If the stream was indeed not acccessible anymore, the
      test would not pass. In that case open-stream-p should signal a type-error,
      causing the test to crash. However in ECL we can assume that the stream is still
      intact.
      d5eafde0
    • Moritz Petersen's avatar
      Always close stream in with-output-to-string & cosmetic changes · 660b1bec
      Moritz Petersen authored
      Fix #576, Related to !197, 72560efa
      
      with-output-to-string is required to close the output stream that it provides
      for the extent of the body forms [1]. The current definition does not do that.
      
      This change wraps the body forms in unwind-protect clauses to ensure the stream
      is always closed on exit. Because declarations cannot appear at the beginning of
      progn forms, any potential declarations are extracted from the body forms and
      moved to the beginning of the surrounding let form's body.
      
      element-type is no longer bound to a gensym, but evaluated inside the let body.
      
      The uppercased names are downcased for a more coherent appearance.
      
      [1]: http://www.lispworks.com/documentation/HyperSpec/Body/m_w_out_.htm
      660b1bec
  12. 23 Apr, 2020 1 commit
  13. 21 Apr, 2020 1 commit
    • Daniel Kochmański's avatar
      20.4.24 release · eea597de
      Daniel Kochmański authored
      Announcement proposal. When this is merged to the develop branch, then
      we should make a PR against master and merge. Then we shall publish
      tarballs and the announcement on the website.
      eea597de
  14. 19 Apr, 2020 9 commits
    • Marius Gerbershagen's avatar
      Merge branch 'fix-573' into 'develop' · 29c415b1
      Marius Gerbershagen authored
      Fix 573
      
      See merge request embeddable-common-lisp/ecl!198
      29c415b1
    • Daniel Kochmański's avatar
      internals: rename instance.sig to instance.slotds · b9d54d6b
      Daniel Kochmański authored
      Slot definitions are no longer a signature, but they are still needed
      to update obsolete instances. Reader function name is also changed to
      SI:INSTANCE-SLOTDS. SI:INSTANCE-SIG-SET name does not change, because
      it sets both SLOTDS and the STAMP.
      b9d54d6b
    • Daniel Kochmański's avatar
      clos: introduce class stamps for marking instances obsolete · f1bc883e
      Daniel Kochmański authored
      We should call make-instances-obsolete from finalize-inheritance if we
      want to be conforming, because user may have added their own auxiliary
      methods.
      
      This change while being last in a serie of commits was locally the
      first change which solved problems. It will enable us to implement the
      fast generic dispatch after the release.
      f1bc883e
    • Daniel Kochmański's avatar
      clos: introduce a new system function si:instance-obsolete-p · 81a85f37
      Daniel Kochmański authored
      It helps to determine whether the instance needs to be updated for a
      class after redefinition. Currently it is done by comparing the
      signature with the instance's class slots.
      81a85f37
    • Daniel Kochmański's avatar
      clos: specializer class: avoid a metastability issue · 97f174c0
      Daniel Kochmański authored
      1. We've implemented SPECIALIZER-DIRECT-METHODS and
      SPECIALIZER-DIRECT-GENERIC-FUNCTIONS as accessors to slots in the
      specializer DIRECT-METHODS and DIRECT-GENERIC-FUNCTIONS.
      
      2. As specified in MOP these collections are maintained by
      ADD-DIRECT-METHOD and REMOVE-DIRECT-METHOD functions.
      
      3. When we finalize standard-method, we remove old methods and among
      them is a method for a function METHOD-GENERIC-FUNCTION, and that
      function must be called from REMOVE-DIRECT-METHOD when we want to
      update SPECIALIZER-DIRECT-GENERIC-FUNCTIONS, so we end up in a
      debugger that there is no specialization for this function.
      
      We adapt approach similar to one taken in SBCL (did they encounter a
      similar issue?): specializer class has a SPECIALIZER-METHOD-HOLDER
      accessor which stores a CONS cell. We add/remove methods to CAR and
      take generic functions from CDR. The trick is that CDR is lazily
      computed when SPECIALIZER-DIRECT-GENERIC-FUNCTIONS is called and
      invalidated when we add and remove method.
      97f174c0
    • Daniel Kochmański's avatar
    • Daniel Kochmański's avatar
      clos: finalize-inheritance: don't always change the class-slots identity · 5c02111b
      Daniel Kochmański authored
      Specification of M-I-O explicitly says that instances are not made
      when "local slots" are compatible. This change is necessary to prevent
      infinite recursion as reported in #568 without breaking the
      finalization protocol, because currently class-slots are used as a
      signature for its instances (and that's how being obsolete is
      determined).
      5c02111b
    • Daniel Kochmański's avatar
      clos: finalize-inheritance: revert a non-conforming change · bee9e8db
      Daniel Kochmański authored
      finalize-inheritance is expected to run regardless of the fact that
      class has been already finalized. I suppose that it is in case when
      compute-slot-* methods are specialized to return something else.
      bee9e8db
    • Daniel Kochmański's avatar
      clos: reinitialize-instance: don't remove generic functions · 5feb42df
      Daniel Kochmański authored
      Local function REMOVE-OPTIONAL-SLOT-ACCESSORS removed generic
      functions after removing methods while redefining the class if said
      generic functions have no other methods. There is nothing in the spec
      what would justify it, so we don't fmakunbound these functions
      anymore.
      5feb42df