Skip to content
Snippets Groups Projects
  1. Jul 13, 2005
  2. Jul 12, 2005
  3. Jul 07, 2005
    • rtoy's avatar
      Fix for update-dependent on gfs, from Gerd Moellman, 2005-06-26: · dff333a3
      rtoy authored
      This is for one of Bruno's bug reports.  For example,
      
      (defclass upd-history ()
        ((history :initform ())))
      
      (defmethod update-dependent ((gf generic-function) (history upd-history)
      			     &rest args)
        (push args (slot-value history 'history)))
      
      (defun history-event-list (history)
        (mapcar (lambda (event)
      	    (mapcar (lambda (x)
      		      (if (typep x 'method)
      			  (list 'method (mapcar #'class-name
      						(method-specializers x)))
      			  x))
      		    event))
      	  (reverse (slot-value history 'history))))
      
      (let ((hist (make-instance 'upd-history)))
         (defgeneric upd0 (x))
         (add-dependent #'upd0 hist)
         (defmethod upd0 ((x integer)))
         (history-event-list hist))
      =>  ((add-method (method (integer)))))
      
      But, instead of the above expected result, it produces
      
      =>  (nil (add-method (method (integer)))))
      
      The nil is from a reinitialize-instance of the gf, which is triggered
      by load-defmethod calling ensure-generic-function, which in turn calls
      ensure-generic-function-using-class on the existing gf, which finally
      calls reinitialize-instance.
      
      I'm not 100% sure if this is correct or not.  My reading of CLHS/MOP
      is that this is at least not forbidden.  Opinions?
      
      	* src/pcl/methods.lisp (real-add-method, update-gf-dependents):
      	New function.
      	(real-add-method, real-remove-method): Call it.
      	(reinitialize-instance) <:around standard-generic-function>:
      	Update dependent objects.
      
      	* src/pcl/std-class.lisp (update-dependent): New default method.
      dff333a3
    • rtoy's avatar
      Revert previous change so we don't call truename on the given file. · 6fb3b96a
      rtoy authored
      However, for logical pathnames, call translate-logical-pathname to get
      a usable pathname that dlopen can understand.
      6fb3b96a
    • rtoy's avatar
      8ef50d30
  4. Jul 05, 2005
  5. Jul 01, 2005
  6. Jun 30, 2005
  7. Jun 26, 2005
  8. Jun 23, 2005
  9. Jun 22, 2005
  10. Jun 20, 2005
    • rtoy's avatar
      * code/foreign.lisp (load-object-file): Take the truename of FILE · e76442e9
      rtoy authored
      	in case we're given a logical pathname.
      e76442e9
    • rtoy's avatar
      From Gerd, cmucl-imp, 2005-06-18: · e5d1aeaf
      rtoy authored
      (progn
        (defclass foo92b (foo92a) ((s :initarg :s)))
        (defclass foo92a () ())
        (let ((x (make-instance 'foo92b :s 5)) (update-counter 0))
          (defclass foo92b (foo92a) ((s) (s1) (s2))) ; still subclass of foo92a
          (slot-value x 's)
          (defmethod update-instance-for-redefined-class ((object foo92b) added-slots discarded-slots property-list &rest initargs)
            (incf update-counter))
          (make-instances-obsolete 'foo92a)
          (slot-value x 's)
          update-counter))
      Expected: 1
      Got:      0
      
      [Taken from clisp's clos.tst]
      
      
      	* src/pcl/std-class.lisp (force-cache-flushes): Use new state
      	:obsolete if some superclass has been obsoleted.
      
      	* src/pcl/cache.lisp (check-wrapper-validity): If state is
      	:invalid, recurse because force-cache-flushes can change the
      	state.
      e5d1aeaf
  11. Jun 19, 2005
  12. Jun 17, 2005
  13. Jun 15, 2005
  14. Jun 14, 2005
    • rtoy's avatar
      Some fixes for floating-point printing bugs reported by Bruno Haible, · 1031c478
      rtoy authored
      cmucl-imp, on or around 2005/06/13.
      
      Some useful tests:
      
      (format nil "~9,3,2,0,'%G" 0.0314159)
      Expected: "0.314e-01"
      
      
      (format nil "~9,3,2,-2,'%@e" 3.14159)
      Expected: "+.003E+03"
      
      
      (format nil "~6,2,1,'*F" 3.14159)
      Expected: " 31.42"
      
      (format nil "~9,0,6f" 3.14159)
      Expected: " 3141590."
      
      (let (x)
       (dotimes (k 13 x)
        (setq x (cons (format nil "~%Scale factor ~2D: |~13,6,2,VE|"
                (- k 5) (- k 5) 3.14159) x))))
      
      ("
      Scale factor  7: | 3141590.e-06|"
       "
      Scale factor  6: | 314159.0e-05|"
       "
      Scale factor  5: | 31415.90e-04|"
       "
      Scale factor  4: | 3141.590e-03|"
       "
      Scale factor  3: | 314.1590e-02|"
       "
      Scale factor  2: | 31.41590e-01|"
       "
      Scale factor  1: | 3.141590e+00|"
       "
      Scale factor  0: | 0.314159e+01|"
       "
      Scale factor -1: | 0.031416e+02|"
       "
      Scale factor -2: | 0.003142e+03|"
       "
      Scale factor -3: | 0.000314e+04|"
       "
      Scale factor -4: | 0.000031e+05|"
       "
      Scale factor -5: | 0.000003e+06|")
      
      
      code/format.lisp:
      o If the scale factor (k) is negative, the min number of digits to
        print is 1, not (- 1 k) because that prints too many if the field is
        too short.  Setting fmin to fdig is ok if k >= 0.  (See scale factor
        test above.)
      o If flonum-to-string returns with a trailing decimal point, we don't
        need to decrement spaceleft because that deletes a white-space
        character.  (See first scale factor 7 test above.)
      
      code/print.lisp:
      o We need to adjust the number of digits to be printed to include the
        scale factor.  See tests above.
      1031c478
    • rtoy's avatar
      From Gerd, cmucl-imp, 2005/06/11: · c231fb42
      rtoy authored
          This week's fix is for something Lynn Quam reported 2004-10-18.
      
          (defclass a (b) ())
      
          (compile nil
      	     (lambda ()
      	       (defclass b ()
      		 ((x :reader b-x)))
      	       (defmethod f ((obj b))
      		 (b-x obj))))
            => error during macro expansion
      
          The fix is:
      
      	    * src/pcl/method-slot-access-optimization.lisp (check-inline-accessor-call-p):
      	    Return nil for forward-referenced classes.
      
      	    * src/pcl/info.lisp (decide-slot-type): Return nil for
      	    forward-referenced classes.
      c231fb42
  15. Jun 13, 2005
    • rtoy's avatar
      o Definition of DEF-CALLBACK didn't include &body. (Noted by Luis · 1cefe89a
      rtoy authored
        Oliveira, cmucl-help.)
      
      o Use CALLBACK-FUNCALL in the example.
      1cefe89a
    • rtoy's avatar
      Save xref information to fasls. · 624c3dc2
      rtoy authored
      This is done by faking it.  The file being compiled is compiled as
      usual, but we append fake forms to the file as if they came from the
      file.  These fake forms insert the necessary information into the xref
      databases when the fasl is loaded.
      
      To support this feature, we also updated COMPILE-FILE to recognize the
      :xref keyword arg.  Set this to non-NIL to enable computing and saving
      xref information.
      
      code/exports.lisp:
      o Update XREF exports
      
      compiler/fndb.lisp:
      o Update with new definition of COMPILE-FILE.
      
      compiler/main.lisp:
      o Append fake forms to the file being compiled to save xref
        information to the fasl.  This clears out any xref info we might
        have for the file, and inserts the necessary xref information into
        the database.
      o Add :XREF keyword arg to COMPILE-FILE.  Default value of :XREF is
        C::*RECORD-XREF-INFO*.
      
      compiler/xref.lisp:
      o Add function to invalidate xref info for a given namestring, so we
        can reset the info when a fasl with xref info is loaded.
      o Add a function to find all xref information for a given pathname.
        Used for saving xref info to a fasl.
      624c3dc2
  16. Jun 09, 2005
  17. Jun 07, 2005
Loading