Hi Gabriele, Romano, myself and others,

when I said:

<<L>>

IS-REALLY-ERROR? function works for simple code like above, but, AFAIK, we
cannot handle all possible cases, like e.g.:

     is-really-error? [1 first block2] ; == true

(until errors will be "first class")"

<</L>>

, I was wrong. Here is a (complicated, but working) version of the DEFAULT
function, that can handle it:

do http://www.rebolforces.com/~ladislav/highfun.r

    default2: transp-func [
        code [block!]
        fault [block!]
        /good pass [block!]
        /local result error code2
    ] [
        transp-while [not tail? code] [
            code: if error? set/any 'error try [
                set/any 'code2 second do/next compose [
                    error? set/any 'result (code)
                ]
                skip code (index? code2) - 3
            ] [tail code]
        ]
        either error? get/any 'error [
            fault: func [[throw] error [error!]] fault
            local-return fault error
        ] [
            do any [pass [local-return get/any 'result]]
        ]
    ]

block2: head insert copy [] try [first []]
default2/good [first block2 1] ["error"] ["pass"] ; == "pass"
default2/good [first block2] ["error"] ["pass"] ; == "pass"
default2/good [first []] ["error"] ["pass"] ; == "error"

Ciao
    Ladislav


-- 
To unsubscribe from this list, please send an email to
[EMAIL PROTECTED] with "unsubscribe" in the 
subject, without the quotes.

Reply via email to