On Sat, 2009-08-22 at 21:03 +0200, Jan Hudec wrote:
> On Sat, Aug 22, 2009 at 11:52:01 -0400, Yu Feng wrote:
> > On Sat, 2009-08-22 at 09:24 +0200, Jan Hudec wrote:
> > [...]
> > > Well, so the code further up the call stack is not going to look at the
> > > inner exception anyway except to print it to the operator, right? But for
> > > that, it's enough to embed the wrapped error's message into the wrapping
> > > error message. The error code is not relevant.
> > > 
> > I buy your point. 
> > 
> > In an language like Java, the error(Exception) carries more than a
> > message and a code. It also includes a source code reference therefore
> > it make sense to save the cause as an data member.
> > 
> > Nevertheless in the GObject case, because the error only carries an
> > code, and a message, there is no need to wrap the low level errors.
> > g_prefix_error would be sufficient as an substitute of 'wrapping'. How
> > can we invoke this function in vala though?
> 
> If you are wrapping an error, you don't need that function. Instead you
> create a new error and use the inner error's message as one of the arguments
> for the message format string.
> 
> The purpose of g_prefix_error is somewhat different. It's used to add context
> to the error without wrapping it. For example if you are accessing file and
> the function that detects the error only has a stream, the calling function
> might prefix it with the filename to indicate where the error happened.
> 
> I think it would make sense to add it to the GError class in glib-2.0.vapi --
> if you find you have good use for it, just add it there and post a patch.
> 
> > > By the way, you should be suggesting things like this on the Gtk list, not
> > > here.
> > 
> > I thought it was a GObject feature which was highly relevant to Vala.
> 
> Important goal of vala is to interoperate well with non-vala gobject code. So
> features like this would need to be added to glib.
> 

Thank you! g_prefix_error is not what I want. This is what I want:

-----
errordomain Exception {
        HOMEWORK_NOT_FOUND
}
errordomain Execuse {
        I_WAS_SICK
}

public static void main() {
        try {
                grade();
        } catch(Exception e) {
                stdout.printf("Could not grade: %s\n", e.message);
        }
}

private void obtain_homework_from_student() throws Execuse {
        throw new Execuse.I_WAS_SICK("I was sick");
}

private void grade() throws Exception {
        try {
                obtain_homework_from_student();
        } catch (Execuse execuse) {
                throw new Exception.HOMEWORK_NOT_FOUND("Homework not found: %s",
                        execuse.message);
        }
}
--------------------

Yu

_______________________________________________
Vala-list mailing list
Vala-list@gnome.org
http://mail.gnome.org/mailman/listinfo/vala-list

Reply via email to