[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Chicken-users] how the second argument to ERROR is handled
From: |
megane |
Subject: |
Re: [Chicken-users] how the second argument to ERROR is handled |
Date: |
Sun, 21 Jul 2019 14:51:11 +0300 |
User-agent: |
mu4e 1.0; emacs 25.1.1 |
Peter Bex <address@hidden> writes:
> On Sun, Jul 21, 2019 at 09:03:33AM +0200, Marco Maggi wrote:
>> Ciao,
>>
>> with CHICKEN 5.1.0, is the following correct:
>>
>> (import (scheme) (chicken base) (chicken condition))
>>
>> (call/cc
>> (lambda (escape)
>> (with-exception-handler
>> (lambda (E)
>> (escape (list (get-condition-property E 'exn 'location)
>> (get-condition-property E 'exn 'message)
>> (get-condition-property E 'exn 'arguments))))
>> (lambda ()
>> (error 1 2 3)))))
>> => '(#f 1 (2 3))
>>
>> or should the "message" property be #f?
>
> Hi Marco,
>
> This looks fine to me. The first argument to "error" should always
> be the message. You could argue that it should check for it to be
> a string, but I'm not sure that's required.
>
> The docs seem to suggest that the reason string is optional. I think
> this is wrong.
>
The first argument is handled differently if it's a symbol:
(condition-case (error 'foo "bar" "baz")
[exn () (pp (alist-update 'call-chain 'xxx (cdar (condition->list
exn))))])
;; ((location foo) (call-chain . xxx) (arguments ("baz")) (message "bar"))
(condition-case (error "foo" "bar" "baz")
[exn () (pp (alist-update 'call-chain 'xxx (cdar (condition->list
exn))))])
;; ((location #f) (call-chain . xxx) (arguments ("bar" "baz")) (message "foo"))