[Ecls-list] Using Femlisp with ECL / Bug reports

Juan Jose Garcia Ripoll lisp at arrakis.es
Mon Oct 24 06:40:16 UTC 2005


On Wed, 2005-09-21 at 14:44 +0200, Nicolas Neuss wrote: 
> [...] This part of Femlisp does work now
> with ECL (even the tests of this part are passing), and I think the hardest
> part is done.  Nevertheless, there is still a problems: ECL yields a core
> dump when compiling the file "femlisp/src/algebra/sparse.lisp". 

I have tried (not very hard because of time constraints) to compile
femlisp for the last weeks, but I always end up with a core dump, but
due to the fact that ECL ate all available memory. I suspect there must
be either some problem in the compiler, or ECL cannot handle so many
FASL files (are they loaded during compilation?)

Alternatively I change start.lisp to work with the new ASDF automatized
joint FASL building (i.e. combining all compiled files into a single
shared library that ECL can easily handle). Basically

Index: start.lisp
===================================================================
RCS file: /cvsroot/femlisp/femlisp/start.lisp,v
retrieving revision 1.15
diff -u -r1.15 start.lisp
--- start.lisp	13 Oct 2005 16:11:09 -0000	1.15
+++ start.lisp	24 Oct 2005 13:35:06 -0000
@@ -151,7 +151,10 @@
 ;;; we want to work generally with double float numbers
 (setq *READ-DEFAULT-FLOAT-FORMAT* 'double-float)
 
+#-ecl
 (asdf:operate 'asdf::load-op :femlisp-src)
+#+ecl
+(asdf::make-build :femlisp-src :type :fasl)
 
 (pushnew :femlisp *features*)

But here I found problems with LOOP. Constructs like the ones showed
below are wrong because you cannot intermingle WHILE and FOR statements
in a loop. It is not ANSI, even though some lisps seem to swallow it.

For me it is difficult to correct the statements because I do not know
what evaluation order you expect in that code. Could you please add the
previous tweak, maybe rewrite the LOOP statements and give ECL a try?

Regards

Juanjo

(defun adapt-fill-pointer (table)
  (loop while (plusp (fill-pointer table))
	for dll = (aref table (1- (fill-pointer table)))
	while (or (null dll) (dll-empty-p dll))
	do (decf (fill-pointer table))))

(defmethod extend-triangulation (mesh (dim (eql 0)) &rest args)
  (let* ((domain (domain mesh))
	 (patches (cells-of-dim domain 0)))
    (loop
     while patches for patch = (first patches) do
     ^^^^^         ^^^






More information about the ecl-devel mailing list