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))
typedef struct {
MonoMarshalByRefObject object;
gpointer handle;
- MonoBoolean disposed;
} MonoWaitHandle;
/* This is a copy of System.Runtime.Remoting.Messaging.CallType */
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;
MonoObject obj;
struct _MonoInternalThread *internal_thread;
MonoObject *start_obj;
+ MonoException *pending_exception;
};
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);
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);
MonoArray *mono_reflection_sighelper_get_signature_field (MonoReflectionSigHelper *sig);
-MonoReflectionMarshalAsAttribute* mono_reflection_marshal_as_attribute_from_marshal_spec (MonoDomain *domain, MonoClass *klass, MonoMarshalSpec *spec);
+MonoReflectionMarshalAsAttribute* mono_reflection_marshal_as_attribute_from_marshal_spec (MonoDomain *domain, MonoClass *klass, MonoMarshalSpec *spec, MonoError *error);
gpointer
mono_reflection_lookup_dynamic_token (MonoImage *image, guint32 token, gboolean valid_token, MonoClass **handle_class, MonoGenericContext *context);
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);
#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);
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);
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);
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);
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);