X-Git-Url: http://wien.tomnetworks.com/gitweb/?a=blobdiff_plain;f=mono%2Futils%2Fmono-error-internals.h;h=d181c3b88b1f8f39d1992eb4cfdf3cb47b7e0372;hb=56b3c007f428d93b7f230d58744393ad69e4ca63;hp=31a2a4f5362a0bb5857a1c254a784f2946dcc0b4;hpb=69f207ee9e4f440e66e98bf5f685807f6527c39d;p=mono.git diff --git a/mono/utils/mono-error-internals.h b/mono/utils/mono-error-internals.h index 31a2a4f5362..d181c3b88b1 100644 --- a/mono/utils/mono-error-internals.h +++ b/mono/utils/mono-error-internals.h @@ -1,3 +1,7 @@ +/** + * \file + */ + #ifndef __MONO_ERROR_INTERNALS_H__ #define __MONO_ERROR_INTERNALS_H__ @@ -32,9 +36,15 @@ typedef struct { void *padding [3]; } MonoErrorInternal; +/* Invariant: the error strings are allocated in the mempool of the given image */ +struct _MonoErrorBoxed { + MonoError error; + MonoImage *image; +}; + #define error_init(error) do { \ - (error)->error_code = MONO_ERROR_NONE; \ - (error)->flags = 0; \ + ((MonoErrorInternal*)(error))->error_code = MONO_ERROR_NONE; \ + ((MonoErrorInternal*)(error))->flags = 0; \ } while (0); #define is_ok(error) ((error)->error_code == MONO_ERROR_NONE) @@ -42,6 +52,11 @@ typedef struct { #define return_if_nok(error) do { if (!is_ok ((error))) return; } while (0) #define return_val_if_nok(error,val) do { if (!is_ok ((error))) return (val); } while (0) +/* Only use this in icalls */ +#define return_val_and_set_pending_if_nok(error,value) \ + if (mono_error_set_pending_exception ((error))) \ + return (value); + void mono_error_assert_ok_pos (MonoError *error, const char* filename, int lineno) MONO_LLVM_INTERNAL; @@ -52,59 +67,74 @@ mono_error_dup_strings (MonoError *error, gboolean dup_strings); /* This function is not very useful as you can't provide any details beyond the message.*/ void -mono_error_set_error (MonoError *error, int error_code, const char *msg_format, ...); +mono_error_set_error (MonoError *error, int error_code, const char *msg_format, ...) MONO_ATTR_FORMAT_PRINTF(3,4); void -mono_error_set_assembly_load (MonoError *error, const char *assembly_name, const char *msg_format, ...); +mono_error_set_assembly_load (MonoError *error, const char *assembly_name, const char *msg_format, ...) MONO_ATTR_FORMAT_PRINTF(3,4); void mono_error_set_assembly_load_simple (MonoError *error, const char *assembly_name, gboolean refection_only); void -mono_error_set_type_load_class (MonoError *error, MonoClass *klass, const char *msg_format, ...); +mono_error_set_type_load_class (MonoError *error, MonoClass *klass, const char *msg_format, ...) MONO_ATTR_FORMAT_PRINTF(3,4); + +void +mono_error_vset_type_load_class (MonoError *error, MonoClass *klass, const char *msg_format, va_list args); + +void +mono_error_set_type_load_name (MonoError *error, const char *type_name, const char *assembly_name, const char *msg_format, ...) MONO_ATTR_FORMAT_PRINTF(4,5); + +void +mono_error_set_method_load (MonoError *error, MonoClass *klass, const char *method_name, const char *msg_format, ...) MONO_ATTR_FORMAT_PRINTF(4,5); void -mono_error_set_type_load_name (MonoError *error, const char *type_name, const char *assembly_name, const char *msg_format, ...); +mono_error_set_field_load (MonoError *error, MonoClass *klass, const char *field_name, const char *msg_format, ...) MONO_ATTR_FORMAT_PRINTF(4,5); void -mono_error_set_method_load (MonoError *error, MonoClass *klass, const char *method_name, const char *msg_format, ...); +mono_error_set_bad_image (MonoError *error, MonoImage *image, const char *msg_format, ...) MONO_ATTR_FORMAT_PRINTF(3,4); void -mono_error_set_field_load (MonoError *error, MonoClass *klass, const char *field_name, const char *msg_format, ...); +mono_error_set_bad_image_name (MonoError *error, const char *file_name, const char *msg_format, ...) MONO_ATTR_FORMAT_PRINTF(3,4); void -mono_error_set_bad_image (MonoError *error, MonoImage *image, const char *msg_format, ...); +mono_error_set_out_of_memory (MonoError *error, const char *msg_format, ...) MONO_ATTR_FORMAT_PRINTF(2,3); void -mono_error_set_bad_image_name (MonoError *error, const char *file_name, const char *msg_format, ...); +mono_error_set_argument (MonoError *error, const char *argument, const char *msg_format, ...) MONO_ATTR_FORMAT_PRINTF(3,4); void -mono_error_set_out_of_memory (MonoError *error, const char *msg_format, ...); +mono_error_set_argument_null (MonoError *oerror, const char *argument, const char *msg_format, ...) MONO_ATTR_FORMAT_PRINTF(3,4); void -mono_error_set_argument (MonoError *error, const char *argument, const char *msg_format, ...); +mono_error_set_not_verifiable (MonoError *oerror, MonoMethod *method, const char *msg_format, ...) MONO_ATTR_FORMAT_PRINTF(3,4); void -mono_error_set_argument_null (MonoError *oerror, const char *argument, const char *msg_format, ...); +mono_error_set_generic_error (MonoError *error, const char * name_space, const char *name, const char *msg_format, ...) MONO_ATTR_FORMAT_PRINTF(4,5); void -mono_error_set_not_verifiable (MonoError *oerror, MonoMethod *method, const char *msg_format, ...); +mono_error_set_execution_engine (MonoError *error, const char *msg_format, ...) MONO_ATTR_FORMAT_PRINTF(2,3); void -mono_error_set_generic_error (MonoError *error, const char * name_space, const char *name, const char *msg_format, ...); +mono_error_set_not_implemented (MonoError *error, const char *msg_format, ...) MONO_ATTR_FORMAT_PRINTF(2,3); void -mono_error_set_execution_engine (MonoError *error, const char *msg_format, ...); +mono_error_set_not_supported (MonoError *error, const char *msg_format, ...) MONO_ATTR_FORMAT_PRINTF(2,3); void -mono_error_set_not_implemented (MonoError *error, const char *msg_format, ...); +mono_error_set_invalid_operation (MonoError *error, const char *msg_format, ...) MONO_ATTR_FORMAT_PRINTF(2,3); void -mono_error_set_not_supported (MonoError *error, const char *msg_format, ...); +mono_error_set_file_not_found (MonoError *error, const char *msg_format, ...) MONO_ATTR_FORMAT_PRINTF(2,3); void mono_error_set_exception_instance (MonoError *error, MonoException *exc); +void +mono_error_set_invalid_program (MonoError *oerror, const char *msg_format, ...) MONO_ATTR_FORMAT_PRINTF(2,3); + +void +mono_error_set_invalid_cast (MonoError *oerror); + MonoException* mono_error_prepare_exception (MonoError *error, MonoError *error_out); @@ -117,4 +147,13 @@ mono_error_raise_exception (MonoError *error); void mono_error_move (MonoError *dest, MonoError *src); +MonoErrorBoxed* +mono_error_box (const MonoError *error, MonoImage *image); + +gboolean +mono_error_set_from_boxed (MonoError *error, const MonoErrorBoxed *from); + +const char* +mono_error_get_exception_name (MonoError *oerror); + #endif