Merge pull request #2708 from lambdageek/dev/monoerror-assorted-get_type
[mono.git] / mono / metadata / object-internals.h
index f694e4c7d0283fe32cc1d4ab2a7d888e2df5b905..dc5f426748328604628b377e46b3992fdd5251bd 100644 (file)
                return retval;                                                                            \
        };                              }G_STMT_END
 
+/* Use this as MONO_ARG_NULL (arg,) in functions returning void */
+#define MONO_CHECK_NULL(arg, retval)       G_STMT_START{                 \
+               if (G_UNLIKELY (arg == NULL))                                             \
+       {                                                                 \
+               MonoException *ex;                                        \
+               if (arg) {} /* check if the name exists */                \
+               ex = mono_get_exception_null_reference ();                \
+               mono_set_pending_exception (ex);                                          \
+               return retval;                                                                            \
+       };                              }G_STMT_END
+
 #define mono_string_builder_capacity(sb) sb->chunkOffset + sb->chunkChars->max_length
 #define mono_string_builder_string_length(sb) sb->chunkOffset + sb->chunkLength
 
 
 #ifdef __GNUC__
 
-/* namespace and name should be a constant */
-/* image must be mscorlib since other assemblies can be unloaded */
-#define mono_class_from_name_cached(image,namespace,name) ({ \
-                       static MonoClass *tmp_klass; \
-                       if (!tmp_klass) { \
-                               g_assert (image == mono_defaults.corlib); \
-                               tmp_klass = mono_class_from_name ((image), (namespace), (name)); \
-                               g_assert (tmp_klass); \
-                       }; \
-                       tmp_klass; })
 /* name should be a compile-time constant */
 #define mono_class_get_field_from_name_cached(klass,name) ({ \
                        static MonoClassField *tmp_field; \
 
 #else
 
-#define mono_class_from_name_cached(image,namespace,name) mono_class_from_name ((image), (namespace), (name))
 #define mono_class_get_field_from_name_cached(klass,name) mono_class_get_field_from_name ((klass), (name))
 #define mono_array_class_get_cached(eclass,rank) mono_array_class_get ((eclass), (rank))
 #define mono_array_new_cached(domain, eclass, size) mono_array_new_specific (mono_class_vtable ((domain), mono_array_class_get_cached ((eclass), 1)), (size))
@@ -297,7 +297,6 @@ typedef struct {
 typedef struct {
        MonoMarshalByRefObject object;
        gpointer     handle;
-       MonoBoolean  disposed;
 } MonoWaitHandle;
 
 /* This is a copy of System.Runtime.Remoting.Messaging.CallType */
@@ -409,7 +408,6 @@ struct _MonoInternalThread {
        gpointer *static_data;
        void *thread_info; /*This is MonoThreadInfo*, but to simplify dependencies, let's make it a void* here. */
        MonoAppContext *current_appcontext;
-       MonoException *pending_exception;
        MonoThread *root_domain_thread;
        MonoObject *_serialized_principal;
        int _serialized_principal_version;
@@ -442,6 +440,7 @@ struct _MonoThread {
        MonoObject obj;
        struct _MonoInternalThread *internal_thread;
        MonoObject *start_obj;
+       MonoException *pending_exception;
 };
 
 typedef struct {
@@ -620,6 +619,8 @@ typedef struct {
        void     (*init_delegate) (MonoDelegate *del);
        MonoObject* (*runtime_invoke) (MonoMethod *method, void *obj, void **params, MonoObject **exc, MonoError *error);
        void*    (*compile_method) (MonoMethod *method, MonoError *error);
+       gpointer (*create_jump_trampoline) (MonoDomain *domain, MonoMethod *method, gboolean add_sync_wrapper, MonoError *error);
+       gpointer (*create_jit_trampoline) (MonoDomain *domain, MonoMethod *method, MonoError *error);
 } MonoRuntimeCallbacks;
 
 typedef gboolean (*MonoInternalStackWalk) (MonoStackFrameInfo *frame, MonoContext *ctx, gpointer data);
@@ -1422,7 +1423,7 @@ void        mono_reflection_register_with_runtime (MonoReflectionType *type);
 void        mono_reflection_create_custom_attr_data_args (MonoImage *image, MonoMethod *method, const guchar *data, guint32 len, MonoArray **typed_args, MonoArray **named_args, CattrNamedArg **named_arg_info, MonoError *error);
 MonoMethodSignature * mono_reflection_lookup_signature (MonoImage *image, MonoMethod *method, guint32 token, MonoError *error);
 
-MonoArray* mono_param_get_objects_internal  (MonoDomain *domain, MonoMethod *method, MonoClass *refclass);
+MonoArray* mono_param_get_objects_internal  (MonoDomain *domain, MonoMethod *method, MonoClass *refclass, MonoError *error);
 
 MonoClass*
 mono_class_bind_generic_parameters (MonoClass *klass, int type_argc, MonoType **types, gboolean is_dynamic);
@@ -1454,7 +1455,7 @@ void
 mono_reflection_resolve_custom_attribute_data (MonoReflectionMethod *method, MonoReflectionAssembly *assembly, gpointer data, guint32 data_length, MonoArray **ctor_args, MonoArray ** named_args);
 
 MonoType*
-mono_reflection_type_get_handle (MonoReflectionType *ref);
+mono_reflection_type_get_handle (MonoReflectionType *ref, MonoError *error);
 
 void
 mono_reflection_free_dynamic_generic_class (MonoGenericClass *gclass);
@@ -1495,8 +1496,7 @@ ves_icall_array_new_specific (MonoVTable *vtable, uintptr_t n);
 
 #ifndef DISABLE_REMOTING
 MonoObject *
-mono_remoting_invoke       (MonoObject *real_proxy, MonoMethodMessage *msg, 
-                            MonoObject **exc, MonoArray **out_args);
+mono_remoting_invoke (MonoObject *real_proxy, MonoMethodMessage *msg, MonoObject **exc, MonoArray **out_args, MonoError *error);
 
 gpointer
 mono_remote_class_vtable (MonoDomain *domain, MonoRemoteClass *remote_class, MonoRealProxy *real_proxy);
@@ -1587,8 +1587,8 @@ mono_runtime_unhandled_exception_policy_set (MonoRuntimeUnhandledExceptionPolicy
 MonoVTable *
 mono_class_try_get_vtable (MonoDomain *domain, MonoClass *klass);
 
-MonoException *
-mono_runtime_class_init_full (MonoVTable *vtable, gboolean raise_exception);
+gboolean
+mono_runtime_class_init_full (MonoVTable *vtable, MonoError *error);
 
 void
 mono_method_clear_object (MonoDomain *domain, MonoMethod *method);
@@ -1606,7 +1606,7 @@ gboolean
 mono_class_is_reflection_method_or_constructor (MonoClass *klass);
 
 MonoObject *
-mono_get_object_from_blob (MonoDomain *domain, MonoType *type, const char *blob);
+mono_get_object_from_blob (MonoDomain *domain, MonoType *type, const char *blob, MonoError *error);
 
 gpointer
 mono_class_get_ref_info (MonoClass *klass);
@@ -1651,6 +1651,9 @@ mono_string_to_utf8_mp_ignore (MonoMemPool *mp, MonoString *s);
 gboolean
 mono_monitor_is_il_fastpath_wrapper (MonoMethod *method);
 
+MonoString*
+mono_string_intern_checked (MonoString *str, MonoError *error);
+
 char *
 mono_exception_get_native_backtrace (MonoException *exc);
 
@@ -1696,6 +1699,9 @@ mono_string_new_checked (MonoDomain *domain, const char *text, MonoError *merror
 MonoString *
 mono_string_new_utf16_checked (MonoDomain *domain, const guint16 *text, gint32 len, MonoError *error);
 
+gboolean
+mono_runtime_object_init_checked (MonoObject *this_obj, MonoError *error);
+
 MonoObject*
 mono_runtime_try_invoke (MonoMethod *method, void *obj, void **params, MonoObject **exc, MonoError *error);