Parent Directory | Revision Log
|Links to HEAD:||(view) (annotate)|
|Links to label-2009-03-25:||(view) (annotate)|
Fix typo in error message.
Fix CALL-METHOD used outside of emf from. Fix from Gerd, cmucl-imp, 2005-06-04 for the following test: (define-method-combination mc () ((primary () :required t)) `(restart-case (call-method ,(first primary)) ())) (defgeneric foo () (:method-combination mc) (:method () nil)) (foo) It turns out this is caused by RESTART-CASE macroexpanding its case expression, which it does to see if it starts with ERROR or similar. An ANSI thing, if I remember correctly.
Fix typo. Need a quote on .call-method.
Fix PCL call-method-list problem reported by Ole Rohne on cmucl-imp. Patch from Ole, very slightly modified.
(defclass data () ((name :accessor name))) (defmethod name :before ((data data))) (name (make-instance 'data)) => too few args in a call to a method function This is caused by standard-reader/writer methods having a fast-function, but that's not the one that we should funcall if pcl::*inline-methods-in-emfs* is true. Use the fast-method-call mechanism for such methods instead. * src/pcl/combin.lisp (inlinable-method-p): New function. (make-direct-calls): Removed. (memf-test-converter): Add a local function method-key for determining the function generator key. (memf-code-converter): Add local functions make-call and make-calls. Generate direct calls if inlinable-method-p returns true.
* src/pcl/methods.lisp (reinitialize-instance): Remove unmatched parenthesis. * src/pcl/combin.lisp (standard-compute-effective-method): Remove an ignore declaration, add a special declaration.
Lazy signaling of errors because of invalid method qualifiers, for ANSI compliance. * src/pcl/defcombin.lisp (compute-effective-method): If *in-precompute-effective-methods-p*, generate an emf consisting of a call to %invalid-qualifiers if there are such methods. * src/pcl/combin.lisp (standard-compute-effective-method): Likewise. (make-effective-method-lambda): Handle %invalid-qualifiers like %no-primary-method. * src/pcl/braid.lisp (%invalid-qualifiers): New function. (invalid-qualifiers): New method. * src/pcl/generic-functions.lisp (invalid-qualifiers): New gf. * src/pcl/dfun.lisp (*max-emf-precomputation-methods*): Set to 100. * src/docs/cmu-user/extensions.tex (Effective Method Precomputation): Change description of *max-emf-precomputation-methods*.
A generic function can have more than one name, via (SETF FDEFINITION), and it's possible to define methods with both names. Method functions are named with the name specified in DEFMETHODS. Methods metaobjects are unnamed. Taking this all together means that we must always use METHOD-FUNCTION-GET :NAME to find out the name of a method function if we want to use it. This showed up in gray-streams.lisp. Found by Paul Werkowski. * src/pcl/boot.lisp (method-function-name): Moved here from combin.lisp; use method-function-get :name. * src/pcl/combin.lisp (method-function-name): Move to boot.lisp.
Support for inlineing of methods in effective methods. * src-emf/docs/cmu-user/extensions.tex (Inlineing Methods in Effective Methods): New subsection. * src-emf/pcl/combin.lisp: (method-function-name, make-direct-call, make-direct-calls) (call-method-list-methods): New functions. (memf-test-converter, memf-code-converter): Arrange for generating funcalls instead of invoke- macros. * src-emf/pcl/boot.lisp (*inline-methods-in-emfs*): New variable. (expand-defmethod): If set, arrange for inlineing fast method functions. * src-emf/pcl/pkg.lisp ("PCL"): Export flush-emf-cache. * src-emf/pcl/fngen.lisp (flush-emf-cache): New function.
CLHS 7.6.5 keyword argument checking for calls to generic functions. Found by Paul Dietz, of course. This also includes some minor code cleanup and a fix for a bug caused by a typo. * src-gf/pcl/std-class.lisp (compute-effective-slot-definition-initargs): Reformatted to make it readable on a tty. * src-gf/pcl/methods.lisp (set-condition-svuc-method): Fix a typo. * src-gf/pcl/low.lisp (parse-lambda-list): Add an ignore declaration. * src-gf/pcl/init.lisp (valid-initargs): Use method-lambda-list*. * src-gf/pcl/dfun.lisp (use-caching-dfun-p): Use generic-function-methods*. (use-constant-value-dfun-p): Ditto. (use-dispatch-dfun-p): Don't use dispatching dfuns when we must check keyword arguments according to CLHS 7.6.5, because this computes emfs for sets methods that aren't applicable together in the usual sense; this screws up emf keyword argument checking, of course. (make-initial-dfun): Use gf-arg-info*. (update-dfun): Use generic-function-name*. (final-accessor-dfun-type, make-accessor-table) (compute-applicable-methods-using-types) (compute-applicable-methods-using-types): Likewise. * src-gf/pcl/combin.lisp (standard-compute-effective-method): Don't use the single-call-method optimization if we must check keyword arguments according to CLHS 7.6.5. (callable-generator-for-emf): Rewritten to add a keyword argument check to the emf. (emfs-must-check-applicable-keywords-p) (compute-applicable-keywords, check-applicable-keywords): New functions. (odd-number-of-keyword-arguments, invalid-keyword-argument): Moved here from boot.lisp. (make-effective-method-lambda): Add a check-applicable-keywords form to the emf, if appropriate. (memf-test-converter, memf-code-converter) (memf-constant-converter): Deal with check-applicable-keywords. (*applicable-methods*): New variable. (make-callable): Bind it. (make-emf-name): Use generic-function-name*. * src/pcl/braid.lisp (ensure-non-standard-class): Remove an used branch. * src/pcl/boot.lisp (*make-method-lambda-gf-name*): Removed. (expand-defmethod): Don't bind it. (make-method-lambda-internal): Don't add &key to the method function's lambda-list if the gf has &key. (bind-args): Rewritten. Don't do keyword checking as this is done in emfs now. (get-key-arg, get-key-arg1): Simplified; do less checking. (generic-function-name*, generic-function-methods*) (gf-arg-info*, method-lambda-list*): New functions. (check-method-arg-info): Use them. (gf-lambda-list-from-method): New function. (gf-lambda-list): Use it. Don't add &allow-other-keys to a gf's lambda-list if a method has &key. (get-generic-function-info): Use gf-arg-info*. (parse-specialized-lambda-list): Add an ignore declaration. (odd-number-of-keyword-arguments, invalid-keyword-argument): Moved to combin.lisp. (check-generic-function-lambda-list): Remove &more stuff because that's checked elsewhere now (and Python can even tell it is). * src-gf/pcl/ctor.lisp (install-optimized-constructor): Remove an unmatched ).
Code cleanup. Use EXTENSIONS package to reduce clutter. * src/pcl/defsys.lisp ("PCL", "WALKER"): Use ext. * src/pcl/pkg.lisp ("PCL", "WALKER"): Use ext. * src/pcl/*.lisp: Remove ext: prefixes. * src/pcl/low.lisp (symbolicate*): Renamed from symbolicate. * src/pcl/std-class.lisp (shared-initialize): * src/pcl/defs.lisp (get-built-in-class-symbol) (get-built-in-wrapper-symbol): * src/pcl/braid.lisp (initial-classes-and-wrappers) (bootstrap-meta-braid): Use symbolicate*. * src/pcl/macros.lisp (dolist-carefully): Removed. (true, false, zero): Moved to defclass.lisp. (printing-random-thing-internal): Removed. (printing-random-thing): Removed. (rassq): Removed. (*keyword-package*): Removed. (make-keyword): Removed; import from cl. (memq, delq, assq): Macros removed, import from ext. (get-declaration): Moved to boot.lisp, where it's used. * src/pcl/boot.lisp (get-declaration): Moved here from macros.lisp. * src/pcl/methods.lisp (named-object-print-function, print-object): * src/pcl/low.lisp (print-std-instance): * src/pcl/dfun.lisp (print-dfun-info): * src/pcl/cache.lisp (print-cache, print-wrapper): * src/pcl/boot.lisp (make-early-gf): Use print-unreadable-object instead of printing-random-thing. * src/pcl/defclass.lisp (true, false, zero): Moved here from macros.lisp. * src/pcl/methods.lisp (legal-qualifiers-p) (legal-specializers-p): Use dolist.
* bootfiles/18e/boot.lisp: Bootstrap files for the lisp:class = pcl:class part. To get it booted from 18e, cross-compile using boot1.lisp as bootstrap.lisp in pmai's build scripts, then do a normal compile with boot2.lisp as bootstrap.lisp with the resulting Lisp. * code/byte-interp.lisp, code/defstruct.lisp, code/describe.lisp: * code/error.lisp, code/exports.lisp, code/hash-new.lisp: * code/hash.lisp, code/macros.lisp, code/misc.lisp: * code/package.lisp, code/pred.lisp, code/sharpm.lisp, code/type.lisp: * compiler/dump.lisp, compiler/fndb.lisp, compiler/globaldb.lisp: * compiler/proclaim.lisp, compiler/typetran.lisp, compiler/xref.lisp: * compiler/generic/primtype.lisp, compiler/generic/vm-type.lisp: Changes for to use kernel::class etc. * code/class.lisp (toplevel): Shadow class, built-in-class etc. (class): Give it conc-name %class-. (toplevel) [#+bootstrap-lisp-class=pcl-class]: Define old accessors. (everywhere): Use new class accessors. * compiler/generic/vm-fndb.lisp (%make-instance): Change from unsafe to flushable and movable. * code/ntrace.lisp (expand-trace, untrace): Changes for method tracing. * code/profile.lisp (profile, profile-all, unprofile): Method profiling. * pcl/*.text, pcl/bench.lisp, pcl/extensions.lisp: * pcl/fast-init.lisp, pcl/precom1.lisp, pcl/precom4.lisp: * pcl/structure-class.lisp, pcl/user-instances.lisp: Removed. * tools/pclcom.lisp: Changes for my PCL and lisp:class = pcl::class.
Entomotomy Bug: define-method-combination-arguments-broken Updated the fix for the broken handling of the :arguments option to define-method-combination to Gerd Moellmann's latest patch. Also includes various indentation fixes and a smallish documentation/comment fix.
Entomotomy Bug: pcl-error-reporting-unhelpful-on-missing-primary-method Merged patches and ideas by Gerd Moellmann and Christophe Rhodes to improve error reporting on missing applicable primary methods for standard method- combination to report the arguments that were passed to the GF in question.
Huge patch by Gerd Moellmann that removes PCL::ITERATE and PCL::GATHER* in favor of normal CL constructs. In a similar vein to SBCL, this patch also replaces all uses of #'(lambda ...) by just (lambda ...), and removes now-dated looking quotes in front of self-evaluating objects, like keywords and t/nil. The patch has been slightly frobbed by me, to correct a couple of slight oversights, and make more effective use of the loop facility in a number of places.
o Fixed the implementation of INVALID-METHOD-ERROR and METHOD-COMBINATION-ERROR by fixing bootstrapping problems with the disabled around method of COMPUTE-EFFECTIVE-METHOD, and reinstating it. o Added stricter error checking for standard method combination.
Remove all #+ and #- conditionals from the source code. What is left is essentially Common Lisp except for explicit references to things in CMUCL specific packages.
Add CMUCL style file-comments; from Peter Van Eynde.
While loading an :around method when no primary method exists, a compiler warning like ".ARG0. is defined but not used" was being emitted. Turns out that in such a case PCL generates an effective-method consisting of (error "No primary method for ...") or some such, thus ignoring the user method and not passing the supplied arguments to error. This change checks for the above case and inserts an ignorable declaration for the method arguments.
September-16-92-PCL-e has been incorporated into the CMUCL sources thanks to Rick Harris.
This is September 92 PCL.
This is July 92 PCL
This is March-92-PCL-2a.
Merged with latest PCL version.
This form allows you to request diffs between any two revisions of this file. For each of the two "sides" of the diff, select a symbolic revision name using the selection box, or choose 'Use Text Field' and enter a numeric revision.
|Powered by ViewVC 1.1.5|