I think I'm seeing a gambit bug.
I have a situation where this returns #f:
(with-exception-handler (lambda (e) #t) (lambda () (trampoline-gp-set! (make-trampoline) 6 99) #f))
And this returns #t:
(with-exception-catcher (lambda (e) #t) (lambda () (trampoline-gp-set! (make-trampoline) 6 99) #f))
And running this from the repl raises:
(trampoline-gp-set! (make-trampoline) 6 99)
The definition of trampoline-gp-set! is currently:
(define trampoline-gp-set!/internal (c-lambda (trampoline int unsigned-int64) void "___arg1->gp[___arg2] = ___arg3;"))
(define (trampoline-gp-set! trampoline index value) (if (>= index 6) (raise "invalid index for trampoline-gp-set!")) (trampoline-gp-set!/internal trampoline index value))
But all this happens with this definition as well:
(define trampoline-gp-set! (c-lambda (trampoline int unsigned-int64) void #<<END_OF_C_LAMBDA if (___arg2 >= 6) ___err = ___FIX(___UNKNOWN_ERR); else ___arg1->gp[___arg2] = ___arg3; END_OF_C_LAMBDA ))
Am I missing something?
I'm using WITH-EXCEPTION-HANDLER elsewhere to do the same thing and it appears to be working there.
Afficher les réponses par date
On 2013-02-03, at 6:40 AM, Jason Felice jason.m.felice@gmail.com wrote:
I think I'm seeing a gambit bug.
I have a situation where this returns #f:
(with-exception-handler (lambda (e) #t) (lambda () (trampoline-gp-set! (make-trampoline) 6 99) #f))
And this returns #t:
(with-exception-catcher (lambda (e) #t) (lambda () (trampoline-gp-set! (make-trampoline) 6 99) #f))
And running this from the repl raises:
(trampoline-gp-set! (make-trampoline) 6 99)
The definition of trampoline-gp-set! is currently:
(define trampoline-gp-set!/internal (c-lambda (trampoline int unsigned-int64) void "___arg1->gp[___arg2] = ___arg3;"))
(define (trampoline-gp-set! trampoline index value) (if (>= index 6) (raise "invalid index for trampoline-gp-set!")) (trampoline-gp-set!/internal trampoline index value))
But all this happens with this definition as well:
(define trampoline-gp-set! (c-lambda (trampoline int unsigned-int64) void #<<END_OF_C_LAMBDA if (___arg2 >= 6) ___err = ___FIX(___UNKNOWN_ERR); else ___arg1->gp[___arg2] = ___arg3; END_OF_C_LAMBDA ))
Am I missing something?
I'm using WITH-EXCEPTION-HANDLER elsewhere to do the same thing and it appears to be working there.
Are you aware that with-exception-catcher unwinds the stack (similarly to a try/catch in other languages), but with-exception-handler does not (the result of the exception handler will be returned by the call to raise).
Does that help explain the behavior you are seeing?
Marc Feeley
Yes, I'd missed that distinction.
On Sun, Feb 3, 2013 at 12:55 PM, Marc Feeley feeley@iro.umontreal.cawrote:
On 2013-02-03, at 6:40 AM, Jason Felice jason.m.felice@gmail.com wrote:
I think I'm seeing a gambit bug.
I have a situation where this returns #f:
(with-exception-handler (lambda (e) #t) (lambda () (trampoline-gp-set! (make-trampoline) 6 99) #f))
And this returns #t:
(with-exception-catcher (lambda (e) #t) (lambda () (trampoline-gp-set! (make-trampoline) 6 99) #f))
And running this from the repl raises:
(trampoline-gp-set! (make-trampoline) 6 99)
The definition of trampoline-gp-set! is currently:
(define trampoline-gp-set!/internal (c-lambda (trampoline int unsigned-int64) void "___arg1->gp[___arg2] = ___arg3;"))
(define (trampoline-gp-set! trampoline index value) (if (>= index 6) (raise "invalid index for trampoline-gp-set!")) (trampoline-gp-set!/internal trampoline index value))
But all this happens with this definition as well:
(define trampoline-gp-set! (c-lambda (trampoline int unsigned-int64) void #<<END_OF_C_LAMBDA if (___arg2 >= 6) ___err = ___FIX(___UNKNOWN_ERR); else ___arg1->gp[___arg2] = ___arg3; END_OF_C_LAMBDA ))
Am I missing something?
I'm using WITH-EXCEPTION-HANDLER elsewhere to do the same thing and it
appears to be working there.
Are you aware that with-exception-catcher unwinds the stack (similarly to a try/catch in other languages), but with-exception-handler does not (the result of the exception handler will be returned by the call to raise).
Does that help explain the behavior you are seeing?
Marc Feeley