1 #ifndef _MONO_CLI_OBJECT_H_
2 #define _MONO_CLI_OBJECT_H_
4 #include <mono/metadata/class.h>
6 typedef guchar MonoBoolean;
8 typedef struct _MonoReflectionMethod MonoReflectionMethod;
9 typedef struct _MonoReflectionAssembly MonoReflectionAssembly;
10 typedef struct _MonoReflectionModule MonoReflectionModule;
11 typedef struct _MonoReflectionField MonoReflectionField;
12 typedef struct _MonoReflectionProperty MonoReflectionProperty;
13 typedef struct _MonoReflectionEvent MonoReflectionEvent;
14 typedef struct _MonoReflectionType MonoReflectionType;
15 typedef struct _MonoDelegate MonoDelegate;
16 typedef struct _MonoException MonoException;
17 typedef struct _MonoThreadsSync MonoThreadsSync;
18 typedef struct _MonoThread MonoThread;
19 typedef struct _MonoDynamicAssembly MonoDynamicAssembly;
20 typedef struct _MonoDynamicImage MonoDynamicImage;
24 MonoThreadsSync *synchronisation;
34 /* bounds is NULL for szarrays */
35 MonoArrayBounds *bounds;
36 /* total number of elements of the array */
38 /* we use double to ensure proper alignment on platforms that need it */
39 double vector [MONO_ZERO_LEN_ARRAY];
45 gunichar2 chars [MONO_ZERO_LEN_ARRAY];
48 typedef MonoObject* (*MonoInvokeFunc) (MonoMethod *method, void *obj, void **params, MonoObject **exc);
49 typedef gpointer (*MonoCompileFunc) (MonoMethod *method);
50 typedef void (*MonoMainThreadFunc) (gpointer user_data);
52 #define mono_object_class(obj) (((MonoObject*)(obj))->vtable->klass)
53 #define mono_object_domain(obj) (((MonoObject*)(obj))->vtable->domain)
55 #define mono_array_length(array) ((array)->max_length)
56 #define mono_array_addr(array,type,index) ( ((char*)(array)->vector) + sizeof (type) * (index) )
57 #define mono_array_addr_with_size(array,size,index) ( ((char*)(array)->vector) + (size) * (index) )
58 #define mono_array_get(array,type,index) ( *(type*)mono_array_addr ((array), type, (index)) )
59 #define mono_array_set(array,type,index,value) \
61 type *__p = (type *) mono_array_addr ((array), type, (index)); \
65 #define mono_string_chars(s) ((gunichar2*)(s)->chars)
66 #define mono_string_length(s) ((s)->length)
69 mono_object_new (MonoDomain *domain, MonoClass *klass);
72 mono_object_new_specific (MonoVTable *vtable);
74 /* can be used for classes without finalizer in non-profiling mode */
76 mono_object_new_fast (MonoVTable *vtable);
79 mono_object_new_alloc_specific (MonoVTable *vtable);
82 mono_object_new_from_token (MonoDomain *domain, MonoImage *image, guint32 token);
85 mono_array_new (MonoDomain *domain, MonoClass *eclass, guint32 n);
88 mono_array_new_full (MonoDomain *domain, MonoClass *array_class,
89 guint32 *lengths, guint32 *lower_bounds);
92 mono_array_new_specific (MonoVTable *vtable, guint32 n);
95 mono_array_clone (MonoArray *array);
98 mono_string_new_utf16 (MonoDomain *domain, const guint16 *text, gint32 len);
101 mono_string_new_size (MonoDomain *domain, gint32 len);
104 mono_ldstr (MonoDomain *domain, MonoImage *image, guint32 str_index);
107 mono_string_is_interned (MonoString *str);
110 mono_string_intern (MonoString *str);
113 mono_string_new (MonoDomain *domain, const char *text);
116 mono_string_new_wrapper (const char *text);
119 mono_string_new_len (MonoDomain *domain, const char *text, guint length);
122 mono_string_to_utf8 (MonoString *string_obj);
125 mono_string_to_utf16 (MonoString *string_obj);
128 mono_string_from_utf16 (gunichar2 *data);
131 mono_value_box (MonoDomain *domain, MonoClass *klass, gpointer val);
134 mono_object_get_domain (MonoObject *obj);
137 mono_object_get_class (MonoObject *obj);
140 mono_object_unbox (MonoObject *obj);
143 mono_object_clone (MonoObject *obj);
146 mono_object_isinst (MonoObject *obj, MonoClass *klass);
149 mono_object_isinst_mbyref (MonoObject *obj, MonoClass *klass);
152 mono_object_castclass_mbyref (MonoObject *obj, MonoClass *klass);
155 mono_monitor_try_enter (MonoObject *obj, guint32 ms);
158 mono_monitor_enter (MonoObject *obj);
161 mono_monitor_exit (MonoObject *obj);
164 mono_raise_exception (MonoException *ex);
167 mono_runtime_object_init (MonoObject *this_obj);
170 mono_runtime_class_init (MonoVTable *vtable);
173 mono_object_get_virtual_method (MonoObject *obj, MonoMethod *method);
176 mono_runtime_invoke (MonoMethod *method, void *obj, void **params,
180 mono_get_delegate_invoke (MonoClass *klass);
183 mono_runtime_delegate_invoke (MonoObject *delegate, void **params,
187 mono_runtime_invoke_array (MonoMethod *method, void *obj, MonoArray *params,
191 mono_runtime_get_main_args (void);
194 mono_runtime_exec_managed_code (MonoDomain *domain,
195 MonoMainThreadFunc main_func,
199 mono_runtime_run_main (MonoMethod *method, int argc, char* argv[],
203 mono_runtime_exec_main (MonoMethod *method, MonoArray *args,
207 mono_load_remote_field (MonoObject *this_obj, MonoClass *klass, MonoClassField *field, gpointer *res);
210 mono_load_remote_field_new (MonoObject *this_obj, MonoClass *klass, MonoClassField *field);
213 mono_store_remote_field (MonoObject *this_obj, MonoClass *klass, MonoClassField *field, gpointer val);
216 mono_store_remote_field_new (MonoObject *this_obj, MonoClass *klass, MonoClassField *field, MonoObject *arg);
219 mono_unhandled_exception (MonoObject *exc);
222 mono_print_unhandled_exception (MonoObject *exc);
225 mono_compile_method (MonoMethod *method);
228 mono_remote_class (MonoDomain *domain, MonoString *class_name, MonoClass *proxy_class);
231 mono_upgrade_remote_class (MonoDomain *domain, MonoRemoteClass *remote_class, MonoClass *klass);
233 /* accessors for fields and properties */
235 mono_field_set_value (MonoObject *obj, MonoClassField *field, void *value);
238 mono_field_static_set_value (MonoVTable *vt, MonoClassField *field, void *value);
241 mono_field_get_value (MonoObject *obj, MonoClassField *field, void *value);
244 mono_field_static_get_value (MonoVTable *vt, MonoClassField *field, void *value);
247 mono_field_get_value_object (MonoDomain *domain, MonoClassField *field, MonoObject *obj);
250 mono_property_set_value (MonoProperty *prop, void *obj, void **params, MonoObject **exc);
253 mono_property_get_value (MonoProperty *prop, void *obj, void **params, MonoObject **exc);
255 /* GC handles support */
256 guint32 mono_gchandle_new (MonoObject *obj, gboolean pinned);
257 guint32 mono_gchandle_new_weakref (MonoObject *obj, gboolean track_resurrection);
258 MonoObject* mono_gchandle_get_target (guint32 gchandle);
259 void mono_gchandle_free (guint32 gchandle);