2 * exception.c: Exception handling
5 * Paolo Molaro (lupus@ximian.com)
6 * Dietmar Maurer (dietmar@ximian.com)
7 * Dick Porter (dick@ximian.com)
9 * (C) 2001 Ximian, Inc.
12 #include <mono/metadata/exception.h>
13 #include <mono/metadata/class.h>
14 #include <mono/metadata/appdomain.h>
17 mono_exception_from_name (MonoImage *image, const char *name_space,
20 MonoDomain *domain = mono_domain_get ();
24 klass = mono_class_from_name (image, name_space, name);
26 o = mono_object_new (domain, klass);
29 mono_runtime_object_init (o);
31 return (MonoException *)o;
35 mono_get_exception_divide_by_zero ()
37 return mono_exception_from_name (mono_defaults.corlib, "System",
38 "DivideByZeroException");
42 mono_get_exception_security ()
44 return mono_exception_from_name (mono_defaults.corlib, "System",
49 mono_get_exception_arithmetic ()
51 return mono_exception_from_name (mono_defaults.corlib, "System",
52 "ArithmeticException");
56 mono_get_exception_overflow ()
58 return mono_exception_from_name (mono_defaults.corlib, "System",
63 mono_get_exception_null_reference ()
65 return mono_exception_from_name (mono_defaults.corlib, "System",
66 "NullReferenceException");
70 mono_get_exception_execution_engine (const guchar *msg)
75 ex = mono_exception_from_name (mono_defaults.corlib, "System",
76 "ExecutionEngineException");
78 domain = ((MonoObject *)ex)->vtable->domain;
81 ex->message = mono_string_new (domain, msg);
87 mono_get_exception_invalid_cast ()
89 return mono_exception_from_name (mono_defaults.corlib, "System",
90 "InvalidCastException");
94 mono_get_exception_index_out_of_range ()
96 return mono_exception_from_name (mono_defaults.corlib, "System",
97 "IndexOutOfRangeException");
101 mono_get_exception_array_type_mismatch ()
103 return mono_exception_from_name (mono_defaults.corlib, "System",
104 "ArrayTypeMismatchException");
108 mono_get_exception_type_load ()
110 return mono_exception_from_name (mono_defaults.corlib, "System",
111 "TypeLoadException");
115 mono_get_exception_not_implemented ()
117 return mono_exception_from_name (mono_defaults.corlib, "System",
118 "NotImplementedException");
122 mono_get_exception_missing_method ()
124 return mono_exception_from_name (mono_defaults.corlib, "System",
125 "MissingMethodException");
129 mono_get_exception_argument_null (const guchar *arg)
134 ex = (MonoException *)mono_exception_from_name (
135 mono_defaults.corlib, "System", "ArgumentNullException");
137 domain = ((MonoObject *)ex)->vtable->domain;
140 ((MonoArgumentException *)ex)->param_name =
141 mono_string_new (domain, arg);
147 mono_get_exception_argument (const guchar *arg, const guchar *msg)
152 ex = (MonoException *)mono_exception_from_name (
153 mono_defaults.corlib, "System", "ArgumentException");
155 domain = ((MonoObject *)ex)->vtable->domain;
158 ex->message = mono_string_new (domain, msg);
161 ((MonoArgumentException *)ex)->param_name =
162 mono_string_new (domain, arg);
168 mono_get_exception_argument_out_of_range (const guchar *arg)
173 ex = (MonoException *)mono_exception_from_name (
174 mono_defaults.corlib, "System", "ArgumentOutOfRangeException");
176 domain = ((MonoObject *)ex)->vtable->domain;
179 ((MonoArgumentException *)ex)->param_name =
180 mono_string_new (domain, arg);
186 mono_get_exception_io (const guchar *msg)
191 ex=(MonoException *)mono_exception_from_name (
192 mono_defaults.corlib, "System.IO", "IOException");
194 domain = ((MonoObject *)ex)->vtable->domain;
196 ex->message=mono_string_new (domain, msg);