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
[email protected]
http://mail.gnome.org/mailman/listinfo/vala-list