From: Christophe R. <cr...@us...> - 2006-08-17 15:13:22
|
Update of /cvsroot/sbcl/sbcl In directory sc8-pr-cvs8.sourceforge.net:/tmp/cvs-serv15358 Modified Files: BUGS NEWS version.lisp-expr Log Message: 0.9.15.17: Implement the :FUNCTION initarg for method initialization ... half of the battle here was altering the propagation of information about methods around the system. Prior to this checkin, information was kept in a (non-weak) hash table holding plists for method functions and method fast functions. Instead, we associate the plist with the method itself. ... implement method-qualifiers as a proper slot reader, rather than through the plist; ... method-function-get-DIE-DIE-DIE ... constant-method-call and constant-fast-method-call structures for the special case of constant-value (e.g. predicate) generic functions ... remove :METHOD-SPEC initarg, since it's useless ... rely more on interning instead of METHOD-FUNCTION-PV-TABLE ... remove dead code (e.g. METHOD-FUNCTION-CLOSURE-GENERATOR, MAKE-INTERNAL-READER-METHOD-FUNCTION) ... define a %METHOD-FUNCTION funcallable structure, to bind function and fast-function closely together. ... remove the :FAST-FUNCTION initarg. Now, if the system wants a fast-function, it creates a %method-function structure with the fast-function in the fast-function slot (and an ordinary method-function as the funcallable-instance-function) ... some test cases. (This fixes bug #361 among others, and we have no current failures against the Closer mop-feature-tests) Index: BUGS =================================================================== RCS file: /cvsroot/sbcl/sbcl/BUGS,v retrieving revision 1.500 retrieving revision 1.501 diff -u -d -r1.500 -r1.501 --- BUGS 8 Aug 2006 14:24:24 -0000 1.500 +++ BUGS 17 Aug 2006 15:12:46 -0000 1.501 @@ -1407,54 +1407,6 @@ Expected: #<SB-MOP:FUNCALLABLE-STANDARD-CLASS STANDARD-GENERIC-FUNCTION> Got: #<SB-MOP:FUNCALLABLE-STANDARD-CLASS MY-GENERIC-FUNCTION> -361: initialize-instance of standard-reader-method ignores :function argument - (reported by Bruno Haible) - Pass a custom :function argument to initialize-instance of a - standard-reader-method instance, but it has no effect. - ;; Check that it's possible to define reader methods that do typechecking. - (progn - (defclass typechecking-reader-method (sb-pcl:standard-reader-method) - ()) - (defmethod initialize-instance ((method typechecking-reader-method) &rest initargs - &key slot-definition) - (let ((name (sb-pcl:slot-definition-name slot-definition)) - (type (sb-pcl:slot-definition-type slot-definition))) - (apply #'call-next-method method - :function #'(lambda (args next-methods) - (declare (ignore next-methods)) - (apply #'(lambda (instance) - (let ((value (slot-value instance name))) - (unless (typep value type) - (error "Slot ~S of ~S is not of type ~S: ~S" - name instance type value)) - value)) - args)) - initargs))) - (defclass typechecking-reader-class (standard-class) - ()) - (defmethod sb-pcl:validate-superclass ((c1 typechecking-reader-class) (c2 standard-class)) - t) - (defmethod reader-method-class ((class typechecking-reader-class) direct-slot &rest args) - (find-class 'typechecking-reader-method)) - (defclass testclass25 () - ((pair :type (cons symbol (cons symbol null)) :initarg :pair :accessor testclass25-pair)) - (:metaclass typechecking-reader-class)) - (macrolet ((succeeds (form) - `(not (nth-value 1 (ignore-errors ,form))))) - (let ((p (list 'abc 'def)) - (x (make-instance 'testclass25))) - (list (succeeds (make-instance 'testclass25 :pair '(seventeen 17))) - (succeeds (setf (testclass25-pair x) p)) - (succeeds (setf (second p) 456)) - (succeeds (testclass25-pair x)) - (succeeds (slot-value x 'pair)))))) - Expected: (t t t nil t) - Got: (t t t t t) - - (inspect (first (sb-pcl:generic-function-methods #'testclass25-pair))) - shows that the method was created with a FAST-FUNCTION slot but with a - FUNCTION slot of NIL. - 362: missing error when a slot-definition is created without a name (reported by Bruno Haible) The MOP says about slot-definition initialization: Index: NEWS =================================================================== RCS file: /cvsroot/sbcl/sbcl/NEWS,v retrieving revision 1.1046 retrieving revision 1.1047 diff -u -d -r1.1046 -r1.1047 --- NEWS 16 Aug 2006 19:05:45 -0000 1.1046 +++ NEWS 17 Aug 2006 15:12:46 -0000 1.1047 @@ -1,7 +1,5 @@ ;;;; -*- coding: utf-8; -*- changes in sbcl-0.9.16 relative to sbcl-0.9.15: - * bug fix: fixed input, output and error redirection in RUN-PROGRAM - for win32. (thanks to Mike Thomas and Yaroslav Kavenchuk) * feature: implemented the READER-METHOD-CLASS and WRITER-METHOD-CLASS portion of the Class Initialization Protocol as specified by AMOP. @@ -22,6 +20,10 @@ * fixed bug #339(c): if there are applicable methods not part of any long-form method-combination group, call INVALID-METHOD-ERROR. (reported by Bruno Haible) + * fixed bug #361: the :FUNCTION initarg in the protocol for + initialization of methods can now be used to override + internally-produced optimized functions. (reported by Bruno + Haible) * bug fix: extensions of MAKE-METHOD-LAMBDA which wrap the system-provided lambda expression no longer cause warnings about unbound #:|pv-table| symbols. @@ -50,6 +52,8 @@ with type-inference. * bug fix: compiler failed to differentiate between different CONS types in some cases. + * bug fix: fixed input, output and error redirection in RUN-PROGRAM + for win32. (thanks to Mike Thomas and Yaroslav Kavenchuk) changes in sbcl-0.9.15 relative to sbcl-0.9.14: * added support for the ucs-2 external format. (contributed by Ivan Index: version.lisp-expr =================================================================== RCS file: /cvsroot/sbcl/sbcl/version.lisp-expr,v retrieving revision 1.2951 retrieving revision 1.2952 diff -u -d -r1.2951 -r1.2952 --- version.lisp-expr 16 Aug 2006 19:05:46 -0000 1.2951 +++ version.lisp-expr 17 Aug 2006 15:12:46 -0000 1.2952 @@ -17,4 +17,4 @@ ;;; checkins which aren't released. (And occasionally for internal ;;; versions, especially for internal versions off the main CVS ;;; branch, it gets hairier, e.g. "0.pre7.14.flaky4.13".) -"0.9.15.36" +"0.9.15.37" |