[Ecls-list] ANN: ECL 9.6.0

Gabriel Barta gbarta at gmail.com
Mon Jun 15 13:30:08 UTC 2009


On Sat, Jun 13, 2009 at 2:54 AM, Juan Jose
Garcia-Ripoll<juanjose.garciaripoll at googlemail.com> wrote:
> The major problem with CLOS, as you say, still persists. I have to
> find out a way to debug it. Seems pretty weird that it only happens in
> this platform.
I think I have found this.  The problem is that for call-next-method
and some other closures, the generated code was passing the stack
variable env0 as the second var in va_start, but this should always be
the last named parameter, never a stack variable.  This didn't cause a
problem on GCC builds because GCC ignores this parameter and uses its
own magic instead.  I guess that at the point that line was written,
env0 was passed as a parameter.

The diff is below.  As far as I could tell, the default case of
passing narg was always the right thing to do.

Regards,
Gabriel

diff --git a/src/cmp/cmplam.lsp b/src/cmp/cmplam.lsp
index a82669b..2722629 100644
--- a/src/cmp/cmplam.lsp
+++ b/src/cmp/cmplam.lsp
@@ -400,7 +400,6 @@ The function thus belongs to the type of functions
that ecl_make_cfun accepts."

     (when varargs
       (let ((first-arg (cond ((plusp nreq) (format nil "V~d" (+ req0 nreq)))
-			     ((eq closure-type 'CLOSURE) "env0")
 			     ((eq closure-type 'LEXICAL) (format nil "lex~D" (1- *level*)))
 			     (t "narg"))))
 	(wt-nl




More information about the ecl-devel mailing list