chicken-users
[Top][All Lists]
Advanced

[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"))



reply via email to

[Prev in Thread] Current Thread [Next in Thread]