guess I should check bugzilla first:
http://bugzilla.gnome.org/show_bug.cgi?id=546043

On Sat, Sep 6, 2008 at 5:21 PM, Cliff Brake <[EMAIL PROTECTED]> wrote:
> I have the following Vala code:
>
> using GLib;
>
> public errordomain TestError {
>    FAILED
> }
>
> static bool test_func() throws TestError
> {
>    debug ("test function");
>    throw new TestError.FAILED ("test error");
>    return  true;
> }
>
> void main(string[] args)
> {
>    try {
>        bool ret = test_func();
>        assert(ret);
>    } catch (TestError e) {
>        debug ("this message is printed %s", e.message);
>    }
>
>    try {
>        assert(test_func());
>    } catch (TestError e) {
>        debug ("this message never gets printed, even though the
> exception is handled %s", e.message);
>    }
> }
>
> Which produces the following output:
> [EMAIL PROTECTED]:/build/tmp/vala_stat$ ./test_Error
> ** (process:14891): DEBUG: test_Error.vala:10: test function
> ** (process:14891): DEBUG: test_Error.vala:21: this message is printed
> test error
> ** (process:14891): DEBUG: test_Error.vala:10: test function
> **
> ** ERROR:(test_Error.c:61):_main: assertion failed: (test_func (&inner_error))
> Aborted
>
>
> So, it seems that if I wrap a function that can throw an exception in
> assert(), the exception code does not get generated properly:
>
> below is the C code:
>
> static void _main (char** args, int args_length1) {
>        GError * inner_error;
>        inner_error = NULL;
>        {
>                gboolean ret;
>                ret = test_func (&inner_error);
>                if (inner_error != NULL) {
>                        if (inner_error->domain == TEST_ERROR) {
>                                goto __catch0_test_error;
>                        }
>                        g_critical ("file %s: line %d: uncaught error: %s", 
> __FILE__,
> __LINE__, inner_error->message);
>                        g_clear_error (&inner_error);
>                }
>                g_assert (ret);
>        }
>        goto __finally0;
>        __catch0_test_error:
>        {
>                GError * e;
>                e = inner_error;
>                inner_error = NULL;
>                {
>                        g_debug ("test_Error.vala:21: this message is printed 
> %s", e->message);
>                        (e == NULL ? NULL : (e = (g_error_free (e), NULL)));
>                }
>        }
>        __finally0:
>        ;
>        {
>                g_assert (test_func (&inner_error));
>        }
>        goto __finally1;
>        __catch1_test_error:
>        {
>                GError * e;
>                e = inner_error;
>                inner_error = NULL;
>                {
>                        g_debug ("test_Error.vala:27: this message never gets 
> printed, even
> though the exception is handled %s", e->message);
>                        (e == NULL ? NULL : (e = (g_error_free (e), NULL)));
>                }
>        }
>        __finally1:
>        ;
> }
>
> Is this a bug -- if so I'd be glad to log it.
>
> Thanks,
> Cliff
>
> --
> =======================
> Cliff Brake
> http://bec-systems.com
>



-- 
=======================
Cliff Brake
http://bec-systems.com
_______________________________________________
Vala-list mailing list
[email protected]
http://mail.gnome.org/mailman/listinfo/vala-list

Reply via email to