[Bese-devel] new interpter and iterate

Marco Baringer mb at bese.it
Thu Aug 4 12:07:29 UTC 2005


the new cps interepreter (which i'll rename soon since it doesn't
actually cps transform anything) has one major drawback: it doesn't
really work within iterate. the reason for this is simple, let's
pretend you have this code (which does in fact appear in ucw's source
code):

(iterate
  (for object in some-list)
  (let ((object object))
    (<ucw:a :action (do-something object) "Do something.")))

the problem is that with-call/cc will, when macroexpanded, attempt to
walk the (do-something object) form. unfortunetly iterate will do the
macroexpansion instead of the complier so when the compiler
environment passed to with-call/cc doesn't contain a reference to
OBJECT and the walker thinks OBJECT is a free variable, when in fact
it's a local. bad things follow.

we've basically got two options:

1) fix iterate.

2) warn everyone that, as of now, <ucw:input or <ucw:form or <ucw:a
   tags inside iterate forms are a VERY BADY idea. (though they may
   still accidentally work).

for now i'll take option #2:

As of now <ucw:input or <ucw:form or <ucw:a tags inside iterate forms
are a VERY BADY idea. (though they may still accidentally work).

-- 
-Marco
Ring the bells that still can ring.
Forget the perfect offering.
There is a crack in everything.
That's how the light gets in.
	-Leonard Cohen



More information about the bese-devel mailing list