Parent Directory | Revision Log
|Links to HEAD:||(view) (annotate)|
|Links to RELEASE_18b:||(view) (annotate)|
Fix from Rob for trouble noted by Peter: > o.k. interpreted-function-lambda-expression just didn't work for anonymous > lambdas with non-fixed argcounts. > > Rob
From: Douglas Thomas Crosher <email@example.com> Message-Id: <199702041630.DAA06602@scrooge.ee.swin.oz.au> Subject: Re: making eval-functions FINs To: firstname.lastname@example.org Date: Wed, 5 Feb 1997 03:30:55 +1100 (EST) In-Reply-To: <199702040300.EAA16744@knight.cons.org> from "Rob MacLachlan" at Feb 3, 97 09:59:02 pm X-Mailer: ELM [version 2.4 PL24] Content-Type: text > I seem to have lost the most recent message about fixing compiler/eval to > use FINs instead of closures. But yes, I would think that the current > EVAL-FUNCTION slots should become slots in the interpreted function FIN. > GET-EVAL-FUN when would then become IDENTITY, so it should probably be > flushed entirely. Done; moved eval-function data into the interpreted-function FIN, also added a closure slot so describe can access it easily. Revised patches below. Douglas
initial post 1.3.7 merge
Fix headed boilerplate.
Changed lookup-varinfo-value to lookup-variable-value.
Fix another unqualified inhibit-warnings.
Fix compiler warnings.
inhibit-warnings -> ext:inhibit-warnings
Added support for dylan-var leafs. Changed typecases to etypecases so that we get a sensible error if any more leafs get added.
debug-info -> debug
Moved *eval-stack* to code/byte-interp, since that is loaded first.
Fixed MAKE-INTERPRETED-FUNCTION to pass the arglist in so that it isn't lost. Changed to handle :ERROR combination kind. .
Fix to make unreferenced arguments in local call work. We were correctly only popping (into the INTERNAL-APPLY arglist) the number of referenced args, but INTERNAL-APPLY was assuming that all arguments were present in the list. Added a flag to INTERNAL-APPLY to control this behavior. This was breaking full call to interpreted functions as well, since the XEP did a local call to the main entry.
Added a (OPTIMIZE (SAFETY 1)) in LEAF-VALUE so that we get unbound errors in interpreted code, even when the interpreter is compiled unsafe.
Added FLUSH-INTERPRETED-FUNCTION-CACHE so that we can prevent interpreted stuff from being unnecessarily retained in saved cores.
New file header with RCS stuff.
Let-bind a special in interpreted-function-type so that we can tell when we are recursivly called with the same function object. If we are, we just return a generic function type.
Added the INTERPRETED-FUNCTION-TYPE interface so that the compiler could stop thinking all interpreted functions are (&rest t).
Merged MIPS branch with the trunk.
lexenv changes and associated NLX changes, and also changes to support interpreted code debugging.
In CONVERT-EVAL-FUN, fixed inverted sense in the computation of the Quietly arg to COMPILE-FOR-EVAL. Also, changed eval function cache replacement to be less eager to flush functions from the cache: the threshold is now GCs/call rather than calls/GC.
Added some missing commas in COMBINATION-NODE.
Changed COMBINATION-NODE to recognize the funny function case by the :UNUSED annotation of the FUN continuation. MAYBE-DO-FUNNY-FUNCTION is now DO-FUNNY-FUNCTION and is only called when we've got a live one. This speeds up the most common case of call (a known, non-funny function), since we don't have to fall all the way down to the bottom of a CASE.
Changed INTERPRETED-FUNCTION-LAMBDA-EXPRESSION to not return the lambda as the name when there is no name. Callers can do this when that's what they want.
Changed the interpreted function caching policy so that any function used more than *INTERPRETED-FUNCTION-CACHE-THRESHOLD* times since the last GC is retained.
Fixed the unwind case of %UNWIND-PROTECT to push a bogus values list on the stack to keep the MV-BIND in the UNWIND-PROTECT translation happy. Unlike in compiled code, we don't use these values to keep track of the exit being done, but we still execute the MV-BIND. Also, fixed SET-LEAF-VALUE to check for the var being indirect even when the reference is in the home env. Reordered the TYPECASE in INTERNAL-APPLY-LOOP according to my intuition of the relatively frequency of node types.
Fixed a comment.
Oops... In LEAF-VALUE, I was looking at the wrong closure to see if the environment was null.
Changed LEAF-VALUE to make a cached EVAL-FUNCTION when the lexical environment is null. Although we don't get lazy conversion, at least we can prevent excessive memory usage. Also, this result is cached in the new LAMBDA-EVAL-INFO-FUNCTION slot so that all references to a non-closure interpreted function will get the same EQ result (mainly to avoid having N copies of the IR1 if the conversion is decached and then reconverted.)
When handling %UNWIND-PROTECT, don't pop and discard the cleanup function, since it is no longer pushed.
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|