From: Michael K. <mic...@gm...> - 2011-01-25 23:15:28
|
Hi, I'm trying to load a file, ignoring any erroneous forms. However, the debugger is always invoked when an error occurs inside a ext:compiler-let: CLISP 2.49+ > (ignore-errors (ext:compiler-let ((x (error "foo"))))) *** - foo The following restarts are available: ABORT :R1 Abort main loop Same with handler-case. I think this should not happen? Thanks&Regards Michael |
From: Sam S. <sd...@gn...> - 2011-01-26 21:52:50
|
> * Michael Kappert <zvp...@tz...g> [2011-01-26 00:15:20 +0100]: > > I'm trying to load a file, ignoring any erroneous forms. > > However, the debugger is always invoked when an error occurs inside a > ext:compiler-let: > > CLISP 2.49+ >> (ignore-errors (ext:compiler-let ((x (error "foo"))))) > *** - foo > The following restarts are available: > ABORT :R1 Abort main loop > > Same with handler-case. > I think this should not happen? I think you are right. please feel free to file a bug report. however, given that - this is an old bug (present at least in 2.32) - compiler-let has been removed from ansi cl - I do not have much time ATM even for more pressing issues your only recourse is DIY. my take is, as always, http://www.cygwin.com/acronyms/#PTC -- Sam Steingold (http://sds.podval.org/) on CentOS release 5.3 (Final) http://jihadwatch.org http://thereligionofpeace.com http://pmw.org.il http://www.PetitionOnline.com/tap12009/ http://openvotingconsortium.org Lisp suffers from being twenty or thirty years ahead of time. |
From: Bruno H. <br...@cl...> - 2011-01-26 23:26:00
|
Michael Kappert wrote: > > I'm trying to load a file, ignoring any erroneous forms. > > > > However, the debugger is always invoked when an error occurs inside a > > ext:compiler-let: > > > > CLISP 2.49+ > >> (ignore-errors (ext:compiler-let ((x (error "foo"))))) > > *** - foo > > The following restarts are available: > > ABORT :R1 Abort main loop This is perfectly fine. CLISP behaves just like CMUCL here. When you enter a form, the Lisp system is permitted to compile the form before starting to execute it. So arranges to compile the form (ignore-errors (ext:compiler-let ((x (error "foo"))))) without any specific setup in the compilation environment. The EXT:COMPILER-LET form leads to the compile-time evaluation of (error "foo"). No handler is installed at this time; the compiler is still preparing the code that will install the handler later. What you intended, is that the IGNORE-ERRORS becomes active before the compiler sees the EXT:COMPILER-LET form. There are two ways to achieve this: (ignore-errors (eval '(ext:compiler-let ((x (error "foo")))))) (let ((func (ignore-errors (compile nil '(lambda () (ext:compiler-let ((x (error "foo"))))))))) (and func (funcall func))) Sam writes: > - compiler-let has been removed from ansi cl Yup. If you want your code to work also with SBCL or other CL implementations, try to get away without COMPILER-LET. [1] Bruno [1] http://www.ai.mit.edu/projects/iiip/doc/CommonLISP/HyperSpec/Issues/iss066-writeup.html |
From: Michael K. <mic...@gm...> - 2011-01-27 21:07:28
|
On Thu, 2011-01-27 at 00:25 +0100, Bruno Haible wrote: > When you enter a form, the Lisp system is permitted to compile the > form before starting to execute it. So arranges to compile the form > (ignore-errors (ext:compiler-let ((x (error "foo"))))) > without any specific setup in the compilation environment. > What you intended, is that the IGNORE-ERRORS becomes active before > the compiler sees the EXT:COMPILER-LET form. There are two ways to > achieve this: > > (ignore-errors (eval '(ext:compiler-let ((x (error "foo")))))) This works perfectly fine - thanks! > (let ((func > (ignore-errors > (compile nil '(lambda () (ext:compiler-let ((x (error "foo"))))))))) > (and func (funcall func))) This doesn't work for me because the ext:compiler-let is in the expansion of a FFI:DEF-CALL-OUT... sorry I failed to mention that. |
From: Sam S. <sd...@gn...> - 2011-04-04 15:53:44
|
> * Michael Kappert <zvp...@tz...g> [2011-01-26 00:15:20 +0100]: > > I'm trying to load a file, ignoring any erroneous forms. > > However, the debugger is always invoked when an error occurs inside a > ext:compiler-let: > > CLISP 2.49+ >> (ignore-errors (ext:compiler-let ((x (error "foo"))))) > *** - foo > The following restarts are available: > ABORT :R1 Abort main loop > > Same with handler-case. > I think this should not happen? 1. compiler-let is not in ANSI. 2. the error happens at macroexpand time when the ignore-errors is not set up yet. e.g., you would not be surprised if (ignore-errors #.(error "foo")) signaled the error, right? -- Sam Steingold (http://sds.podval.org/) on CentOS release 5.5 (Final) X http://jihadwatch.org http://www.memritv.org http://pmw.org.il http://truepeace.org http://camera.org http://ffii.org There are no answers, only cross references. |