[Gsll-devel] bug in grid/iterate?

Mirko Vukovic mirko.vukovic at gmail.com
Mon Feb 8 14:26:17 UTC 2010


I will cross-post to the iterate mailing list.  Stay tuned ...

On Sun, Feb 7, 2010 at 6:21 PM, Liam Healy <lhealy at common-lisp.net> wrote:

> Mirko,
>
> This appears to be a bug in iterate, or maybe an iterate misuse in grid.
> I am told that the "#" means print level exceeded.  The real error is that
> the iterate macroexpansion is inserting a function directly in the output.
> SBCL will accept that "live" but won't write a FASL that way.  It isn't
> interpreted vs. compiled, because SBCL always compiles unless you
> go out of your way to get it to interpret.  The error is:
> "Objects of type FUNCTION can't be dumped into fasl files."
>
> In CCL, I get the expansion
>
> (macroexpand '(iter:iter (iter:for e :matrix-row *array-3-4-double-float*)
>         (princ e) (princ " ")))
> (LET* ((#:SEQUENCE8 NIL) (#:LIMIT9 NIL) (E NIL) (#:INDEX7 NIL))
>  (BLOCK NIL
>    (TAGBODY (SETQ #:SEQUENCE8 *ARRAY-3-4-DOUBLE-FLOAT*)
>             (SETQ #:LIMIT9
>                   (FUNCALL #<Compiled-function (:INTERNAL
>
> ITERATE::CLAUSE-FOR-MATRIX-ROW-1) (Non-Global)  #x30004154224F>
>                            #:SEQUENCE8))
>             (SETQ #:INDEX7 -1)
>     LOOP-TOP-NIL (SETQ #:INDEX7 (+ #:INDEX7 1))
>             (IF (>= #:INDEX7 #:LIMIT9) (GO LOOP-END-NIL))
>             (SETQ E
>                   (FUNCALL #<Compiled-function (:INTERNAL
>
> ITERATE::CLAUSE-FOR-MATRIX-ROW-1) (Non-Global)  #x30004154283F>
>                            #:SEQUENCE8
>                            #:INDEX7))
>             (PRINC E)
>             (PRINC " ")
>             (GO LOOP-TOP-NIL)
>     LOOP-END-NIL)
>    NIL))
> This pretty clearly shows that it is producing a function, not an
> S-expression as you see,
> but this is all in the iterate code.
>
> Did you cross-post to the iterate list?  I don't belong to that list so
> maybe
> you can pass the information on to them and see if the have a suggestion.
>
> Liam
>
>
> On Fri, Jan 29, 2010 at 3:38 PM, Mirko Vukovic <mirko.vukovic at gmail.com>
> wrote:
> > Apologies for cross posting, but I am not sure where this problem belongs
> > (iterage or gsll).  I use slime (updated a few days ago) on sbcl 1.031 on
> > linux.   I have problems compiling the following file:
> >
> >>>>
> > (in-package :grid)
> >
> > (defun foo ()
> >   (iter:iter (iter:for e :Matrix-row grid::*array-3-4-double-float*)
> >          (princ e) (princ " ")))
> > <<<
> > (the code is from the iterate.lisp file of the distribution)
> >
> > Now in slime, I have problems.  Evaluation works:
> >
> > I can do C-x C-e to compile `foo'
> > I can also do C-M-x
> >
> > But compilation does not.  Both C-c C-c and C-c C-k will flag a compiler
> > error:
> >   note:
> >     The first argument never returns a value.
> >     --> LET* BLOCK TAGBODY PROGN SETQ THE FUNCALL SB-C::%FUNCALL THE
> >     ==>
> >       (SB-KERNEL:%COERCE-CALLABLE-TO-FUN #<FUNCTION # {10030285A9}>)
> >
> > Same story in raw sbcl.
> >
> > I looked at the iterate.lisp source code and see nothing obvious.  But, I
> am
> > not sure what to make of the following:  If I macro-expand the above code
> > (iter:iter ... (iter:for ... :matrix-row ...(...)))  I get the following
> > expansion.  The puzzling thing is thta the first argument to `funcall' is
> a
> > single hash character `#':
> >
> > (let* ((#:sequence208 nil) (#:limit209 nil) (e nil) (#:index207 nil))
> >   (block nil
> >     (tagbody
> >        (progn
> >      (setq #:sequence208 *array-3-4-double-float*)
> >      (setq #:limit209 (funcall # #:sequence208))  ;;  <-----
> >      (setq #:index207 -1))
> >      loop-top-nil
> >        (progn
> >      (setq #:index207 (+ #:index207 1))
> >      (if (>= #:index207 #:limit209)
> >          (go loop-end-nil))
> >      (setq e (funcall # #:sequence208 #:index207)) ;; <-----
> >      (princ e)
> >      (princ " "))
> >        (progn)
> >        (go loop-top-nil)
> >      loop-end-nil
> >        (progn))
> >     nil))
> >
> > Instead of the single hash mark, I would have expected the :access-fn and
> > :size-fn `lambda's from the (defclause-sequence matrix-row
> matrix-row-index
> > ...) in iterate.lisp.
> >
> > So, lots of puzzles.  Not sure where this bug belongs: iterate or grid?
> >
> > Thanks,
> >
> > Mirko
> >
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://mailman.common-lisp.net/pipermail/gsll-devel/attachments/20100208/3a19795b/attachment.html>


More information about the gsll-devel mailing list