e766126d255bb096b20daf60fdec2a23d3ebbf7e
[mono.git] / mono / metadata / object-internals.h
1 #ifndef __MONO_OBJECT_INTERNALS_H__
2 #define __MONO_OBJECT_INTERNALS_H__
3
4 #include <mono/metadata/object.h>
5 #include <mono/metadata/threads.h>
6 #include <mono/metadata/reflection.h>
7 #include <mono/metadata/mempool.h>
8 #include <mono/metadata/class-internals.h>
9 #include <mono/metadata/threads-types.h>
10 #include <mono/metadata/handle.h>
11 #include "mono/utils/mono-compiler.h"
12 #include "mono/utils/mono-error.h"
13 #include "mono/utils/mono-error-internals.h"
14 #include "mono/utils/mono-stack-unwinding.h"
15 #include "mono/utils/mono-tls.h"
16 #include "mono/utils/mono-coop-mutex.h"
17
18 /* Use this as MONO_CHECK_ARG_NULL (arg,expr,) in functions returning void */
19 #define MONO_CHECK_ARG(arg, expr, retval)               G_STMT_START{             \
20                 if (G_UNLIKELY (!(expr)))                                                         \
21        {                                                                  \
22                 MonoException *ex;                                        \
23                 char *msg = g_strdup_printf ("assertion `%s' failed",     \
24                 #expr);                                                   \
25                 if (arg) {} /* check if the name exists */                \
26                 ex = mono_get_exception_argument (#arg, msg);             \
27                 g_free (msg);                                             \
28                 mono_set_pending_exception (ex);                                          \
29                 return retval;                                                                            \
30        };                               }G_STMT_END
31
32 /* Use this as MONO_CHECK_ARG_NULL (arg,) in functions returning void */
33 #define MONO_CHECK_ARG_NULL(arg, retval)            G_STMT_START{                 \
34                 if (G_UNLIKELY (arg == NULL))                                             \
35        {                                                                  \
36                 MonoException *ex;                                        \
37                 if (arg) {} /* check if the name exists */                \
38                 ex = mono_get_exception_argument_null (#arg);             \
39                 mono_set_pending_exception (ex);                                          \
40                 return retval;                                                                            \
41        };                               }G_STMT_END
42
43 /* Use this as MONO_ARG_NULL (arg,) in functions returning void */
44 #define MONO_CHECK_NULL(arg, retval)        G_STMT_START{                 \
45                 if (G_UNLIKELY (arg == NULL))                                             \
46        {                                                                  \
47                 MonoException *ex;                                        \
48                 if (arg) {} /* check if the name exists */                \
49                 ex = mono_get_exception_null_reference ();                \
50                 mono_set_pending_exception (ex);                                          \
51                 return retval;                                                                            \
52        };                               }G_STMT_END
53
54 #define mono_string_builder_capacity(sb) sb->chunkOffset + sb->chunkChars->max_length
55 #define mono_string_builder_string_length(sb) sb->chunkOffset + sb->chunkLength
56
57 /* 
58  * Macros which cache the results of lookups locally.
59  * These should be used instead of the original versions, if the __GNUC__
60  * restriction is acceptable.
61  */
62
63 #ifdef __GNUC__
64
65 /* name should be a compile-time constant */
66 #define mono_class_get_field_from_name_cached(klass,name) ({ \
67                         static MonoClassField *tmp_field; \
68                         if (!tmp_field) { \
69                                 tmp_field = mono_class_get_field_from_name ((klass), (name)); \
70                                 g_assert (tmp_field); \
71                         }; \
72                         tmp_field; })
73 /* eclass should be a run-time constant */
74 #define mono_array_class_get_cached(eclass,rank) ({     \
75                         static MonoClass *tmp_klass; \
76                         if (!tmp_klass) { \
77                                 tmp_klass = mono_array_class_get ((eclass), (rank));    \
78                                 g_assert (tmp_klass); \
79                         }; \
80                         tmp_klass; })
81 /* eclass should be a run-time constant */
82 #define mono_array_new_cached(domain, eclass, size, error) ({   \
83                         MonoVTable *__vtable = mono_class_vtable ((domain), mono_array_class_get_cached ((eclass), 1)); \
84                         MonoArray *__arr = mono_array_new_specific_checked (__vtable, (size), (error)); \
85                         __arr; })
86
87 #else
88
89 #define mono_class_get_field_from_name_cached(klass,name) mono_class_get_field_from_name ((klass), (name))
90 #define mono_array_class_get_cached(eclass,rank) mono_array_class_get ((eclass), (rank))
91 #define mono_array_new_cached(domain, eclass, size, error) mono_array_new_specific_checked (mono_class_vtable ((domain), mono_array_class_get_cached ((eclass), 1)), (size), (error))
92
93 #endif
94
95 #ifdef MONO_BIG_ARRAYS
96 typedef uint64_t mono_array_size_t;
97 typedef int64_t mono_array_lower_bound_t;
98 #define MONO_ARRAY_MAX_INDEX G_MAXINT64
99 #define MONO_ARRAY_MAX_SIZE  G_MAXUINT64
100 #else
101 typedef uint32_t mono_array_size_t;
102 typedef int32_t mono_array_lower_bound_t;
103 #define MONO_ARRAY_MAX_INDEX ((int32_t) 0x7fffffff)
104 #define MONO_ARRAY_MAX_SIZE  ((uint32_t) 0xffffffff)
105 #endif
106
107 typedef struct {
108         mono_array_size_t length;
109         mono_array_lower_bound_t lower_bound;
110 } MonoArrayBounds;
111
112 struct _MonoArray {
113         MonoObject obj;
114         /* bounds is NULL for szarrays */
115         MonoArrayBounds *bounds;
116         /* total number of elements of the array */
117         mono_array_size_t max_length; 
118         /* we use double to ensure proper alignment on platforms that need it */
119         double vector [MONO_ZERO_LEN_ARRAY];
120 };
121
122 #define MONO_SIZEOF_MONO_ARRAY (sizeof (MonoArray) - MONO_ZERO_LEN_ARRAY * sizeof (double))
123
124 struct _MonoString {
125         MonoObject object;
126         int32_t length;
127         mono_unichar2 chars [MONO_ZERO_LEN_ARRAY];
128 };
129
130 #define mono_object_class(obj) (((MonoObject*)(obj))->vtable->klass)
131 #define mono_object_domain(obj) (((MonoObject*)(obj))->vtable->domain)
132
133 #define mono_string_chars_fast(s) ((mono_unichar2*)(s)->chars)
134 #define mono_string_length_fast(s) ((s)->length)
135
136 #define mono_array_length_fast(array) ((array)->max_length)
137 #define mono_array_addr_with_size_fast(array,size,index) ( ((char*)(array)->vector) + (size) * (index) )
138
139 #define mono_array_addr_fast(array,type,index) ((type*)(void*) mono_array_addr_with_size_fast (array, sizeof (type), index))
140 #define mono_array_get_fast(array,type,index) ( *(type*)mono_array_addr_fast ((array), type, (index)) ) 
141 #define mono_array_set_fast(array,type,index,value)     \
142         do {    \
143                 type *__p = (type *) mono_array_addr_fast ((array), type, (index));     \
144                 *__p = (value); \
145         } while (0)
146 #define mono_array_setref_fast(array,index,value)       \
147         do {    \
148                 void **__p = (void **) mono_array_addr_fast ((array), void*, (index));  \
149                 mono_gc_wbarrier_set_arrayref ((array), __p, (MonoObject*)(value));     \
150                 /* *__p = (value);*/    \
151         } while (0)
152 #define mono_array_memcpy_refs_fast(dest,destidx,src,srcidx,count)      \
153         do {    \
154                 void **__p = (void **) mono_array_addr_fast ((dest), void*, (destidx)); \
155                 void **__s = mono_array_addr_fast ((src), void*, (srcidx));     \
156                 mono_gc_wbarrier_arrayref_copy (__p, __s, (count));     \
157         } while (0)
158
159
160 typedef struct {
161         MonoObject obj;
162         MonoObject *identity;
163 } MonoMarshalByRefObject;
164
165 /* This is a copy of System.AppDomain */
166 struct _MonoAppDomain {
167         MonoMarshalByRefObject mbr;
168         MonoDomain *data;
169 };
170
171 /* Safely access System.AppDomain from native code */
172 TYPED_HANDLE_DECL (MonoAppDomain);
173
174 /* Safely access System.AppDomainSetup from native code.  (struct is in domain-internals.h) */
175 TYPED_HANDLE_DECL (MonoAppDomainSetup);
176
177 typedef struct _MonoStringBuilder MonoStringBuilder;
178
179 struct _MonoStringBuilder {
180         MonoObject object;
181         MonoArray  *chunkChars;
182         MonoStringBuilder* chunkPrevious;      // Link to the block logically before this block
183         int chunkLength;                  // The index in ChunkChars that represent the end of the block
184         int chunkOffset;                  // The logial offset (sum of all characters in previous blocks)
185         int maxCapacity;
186 };
187
188 typedef struct {
189         MonoType *type;
190         gpointer  value;
191         MonoClass *klass;
192 } MonoTypedRef;
193
194 typedef struct {
195         gpointer args;
196 } MonoArgumentHandle;
197
198 typedef struct {
199         MonoMethodSignature *sig;
200         gpointer args;
201         gint32 next_arg;
202         gint32 num_args;
203 } MonoArgIterator;
204
205 struct _MonoException {
206         MonoObject object;
207         MonoString *class_name;
208         MonoString *message;
209         MonoObject *_data;
210         MonoObject *inner_ex;
211         MonoString *help_link;
212         /* Stores the IPs and the generic sharing infos
213            (vtable/MRGCTX) of the frames. */
214         MonoArray  *trace_ips;
215         MonoString *stack_trace;
216         MonoString *remote_stack_trace;
217         gint32      remote_stack_index;
218         /* Dynamic methods referenced by the stack trace */
219         MonoObject *dynamic_methods;
220         gint32      hresult;
221         MonoString *source;
222         MonoObject *serialization_manager;
223         MonoObject *captured_traces;
224         MonoArray  *native_trace_ips;
225 };
226
227 typedef struct {
228         MonoException base;
229 } MonoSystemException;
230
231 typedef struct {
232         MonoSystemException base;
233         MonoString *param_name;
234 } MonoArgumentException;
235
236 typedef struct {
237         MonoObject   object;
238         MonoObject  *async_state;
239         MonoObject  *handle;
240         MonoObject  *async_delegate;
241         gpointer    *data;
242         MonoObject  *object_data;
243         MonoBoolean  sync_completed;
244         MonoBoolean  completed;
245         MonoBoolean  endinvoke_called;
246         MonoObject  *async_callback;
247         MonoObject  *execution_context;
248         MonoObject  *original_context;
249         gint64       add_time;
250 } MonoAsyncResult;
251
252 typedef struct {
253         MonoMarshalByRefObject object;
254         gpointer     handle;
255 } MonoWaitHandle;
256
257 /* This is a copy of System.Runtime.Remoting.Messaging.CallType */
258 typedef enum {
259         CallType_Sync = 0,
260         CallType_BeginInvoke = 1,
261         CallType_EndInvoke = 2,
262         CallType_OneWay = 3
263 } MonoCallType;
264
265 /* This corresponds to System.Type */
266 struct _MonoReflectionType {
267         MonoObject object;
268         MonoType  *type;
269 };
270
271 /* Safely access System.Type from native code */
272 TYPED_HANDLE_DECL (MonoReflectionType);
273
274 /* This corresponds to System.RuntimeType */
275 typedef struct {
276         MonoReflectionType type;
277         MonoObject *type_info;
278 } MonoReflectionMonoType;
279
280 typedef struct {
281         MonoObject  object;
282         MonoReflectionType *class_to_proxy;     
283         MonoObject *context;
284         MonoObject *unwrapped_server;
285         gint32      target_domain_id;
286         MonoString *target_uri;
287         MonoObject *object_identity;
288         MonoObject *obj_TP;
289         MonoObject *stub_data;
290 } MonoRealProxy;
291
292 /* Safely access System.Runtime.Remoting.Proxies.RealProxy from native code */
293 TYPED_HANDLE_DECL (MonoRealProxy);
294
295 typedef struct {
296         MonoMarshalByRefObject object;
297         gpointer iunknown;
298         GHashTable* itf_hash;
299         MonoObject *synchronization_context;
300 } MonoComObject;
301
302 typedef struct {
303         MonoRealProxy real_proxy;
304         MonoComObject *com_object;
305         gint32 ref_count;
306 } MonoComInteropProxy;
307
308 typedef struct {
309         MonoObject       object;
310         MonoRealProxy   *rp;    
311         MonoRemoteClass *remote_class;
312         MonoBoolean      custom_type_info;
313 } MonoTransparentProxy;
314
315 /* Safely access System.Runtime.Remoting.Proxies.TransparentProxy from native code */
316 TYPED_HANDLE_DECL (MonoTransparentProxy);
317
318 typedef struct {
319         MonoObject obj;
320         MonoReflectionMethod *method;
321         MonoArray  *args;               
322         MonoArray  *names;              
323         MonoArray  *arg_types;  
324         MonoObject *ctx;
325         MonoObject *rval;
326         MonoObject *exc;
327         MonoAsyncResult *async_result;
328         guint32     call_type;
329 } MonoMethodMessage;
330
331 /* Keep in sync with the System.MonoAsyncCall */
332 typedef struct {
333         MonoObject object;
334         MonoMethodMessage *msg;
335         MonoMethod *cb_method;
336         MonoDelegate *cb_target;
337         MonoObject *state;
338         MonoObject *res;
339         MonoArray *out_args;
340 } MonoAsyncCall;
341
342 typedef struct {
343         MonoObject obj;
344         gint32 il_offset;
345         gint32 native_offset;
346         gint64 method_address;
347         gint32 method_index;
348         MonoReflectionMethod *method;
349         MonoString *filename;
350         gint32 line;
351         gint32 column;
352         MonoString *internal_method_name;
353 } MonoStackFrame;
354
355 typedef enum {
356         MONO_THREAD_FLAG_DONT_MANAGE = 1, // Don't wait for or abort this thread
357         MONO_THREAD_FLAG_NAME_SET = 2, // Thread name set from managed code
358 } MonoThreadFlags;
359
360 struct _MonoInternalThread {
361         MonoObject  obj;
362         volatile int lock_thread_id; /* to be used as the pre-shifted thread id in thin locks. Used for appdomain_ref push/pop */
363         MonoThreadHandle *handle;
364         gpointer native_handle;
365         MonoArray  *cached_culture_info;
366         gunichar2  *name;
367         guint32     name_len;
368         guint32     state;
369         MonoException *abort_exc;
370         int abort_state_handle;
371         guint64 tid;    /* This is accessed as a gsize in the code (so it can hold a 64bit pointer on systems that need it), but needs to reserve 64 bits of space on all machines as it corresponds to a field in managed code */
372         gpointer stack_ptr;
373         gpointer *static_data;
374         void *thread_info; /*This is MonoThreadInfo*, but to simplify dependencies, let's make it a void* here. */
375         MonoAppContext *current_appcontext;
376         MonoThread *root_domain_thread;
377         MonoObject *_serialized_principal;
378         int _serialized_principal_version;
379         gpointer appdomain_refs;
380         /* This is modified using atomic ops, so keep it a gint32 */
381         gint32 __interruption_requested;
382         MonoCoopMutex *synch_cs;
383         MonoBoolean threadpool_thread;
384         MonoBoolean thread_interrupt_requested;
385         int stack_size;
386         guint8  apartment_state;
387         gint32 critical_region_level;
388         gint32 managed_id;
389         guint32 small_id;
390         MonoThreadManageCallback manage_callback;
391         gpointer interrupt_on_stop;
392         gsize    flags;
393         gpointer thread_pinning_ref;
394         gsize __abort_protected_block_count;
395         gint32 priority;
396         GPtrArray *owned_mutexes;
397         MonoOSEvent *suspended;
398         gint32 self_suspended; // TRUE | FALSE
399
400         gsize thread_state;
401         /* 
402          * These fields are used to avoid having to increment corlib versions
403          * when a new field is added to this structure.
404          * Please synchronize any changes with InternalThread in Thread.cs, i.e. add the
405          * same field there.
406          */
407         gsize unused2;
408
409         /* This is used only to check that we are in sync between the representation
410          * of MonoInternalThread in native and InternalThread in managed
411          *
412          * DO NOT RENAME! DO NOT ADD FIELDS AFTER! */
413         gpointer last;
414 };
415
416 struct _MonoThread {
417         MonoObject obj;
418         struct _MonoInternalThread *internal_thread;
419         MonoObject *start_obj;
420         MonoException *pending_exception;
421 };
422
423 typedef struct {
424         guint32 state;
425         MonoObject *additional;
426 } MonoStreamingContext;
427
428 typedef struct {
429         MonoObject obj;
430         MonoBoolean readOnly;
431         MonoString *AMDesignator;
432         MonoString *PMDesignator;
433         MonoString *DateSeparator;
434         MonoString *TimeSeparator;
435         MonoString *ShortDatePattern;
436         MonoString *LongDatePattern;
437         MonoString *ShortTimePattern;
438         MonoString *LongTimePattern;
439         MonoString *MonthDayPattern;
440         MonoString *YearMonthPattern;
441         guint32 FirstDayOfWeek;
442         guint32 CalendarWeekRule;
443         MonoArray *AbbreviatedDayNames;
444         MonoArray *DayNames;
445         MonoArray *MonthNames;
446         MonoArray *GenitiveMonthNames;
447         MonoArray *AbbreviatedMonthNames;
448         MonoArray *GenitiveAbbreviatedMonthNames;
449         MonoArray *ShortDatePatterns;
450         MonoArray *LongDatePatterns;
451         MonoArray *ShortTimePatterns;
452         MonoArray *LongTimePatterns;
453         MonoArray *MonthDayPatterns;
454         MonoArray *YearMonthPatterns;
455         MonoArray *ShortestDayNames;
456 } MonoDateTimeFormatInfo;
457
458 typedef struct 
459 {
460         MonoObject obj;
461         MonoArray *numberGroupSizes;
462         MonoArray *currencyGroupSizes;
463         MonoArray *percentGroupSizes;
464         MonoString *positiveSign;
465         MonoString *negativeSign;
466         MonoString *numberDecimalSeparator;
467         MonoString *numberGroupSeparator;
468         MonoString *currencyGroupSeparator;
469         MonoString *currencyDecimalSeparator;
470         MonoString *currencySymbol;
471         MonoString *ansiCurrencySymbol; /* unused */
472         MonoString *naNSymbol;
473         MonoString *positiveInfinitySymbol;
474         MonoString *negativeInfinitySymbol;
475         MonoString *percentDecimalSeparator;
476         MonoString *percentGroupSeparator;
477         MonoString *percentSymbol;
478         MonoString *perMilleSymbol;
479         MonoString *nativeDigits; /* unused */
480         gint32 dataItem; /* unused */
481         guint32 numberDecimalDigits;
482         gint32 currencyDecimalDigits;
483         gint32 currencyPositivePattern;
484         gint32 currencyNegativePattern;
485         gint32 numberNegativePattern;
486         gint32 percentPositivePattern;
487         gint32 percentNegativePattern;
488         gint32 percentDecimalDigits;
489 } MonoNumberFormatInfo;
490
491 typedef struct {
492         MonoObject obj;
493         gint32 lcid;
494         MonoString *icu_name;
495         gpointer ICU_collator;
496 } MonoCompareInfo;
497
498 typedef struct {
499         MonoObject obj;
500         MonoString *NativeName;
501         MonoArray *ShortDatePatterns;
502         MonoArray *YearMonthPatterns;
503         MonoArray *LongDatePatterns;
504         MonoString *MonthDayPattern;
505
506         MonoArray *EraNames;
507         MonoArray *AbbreviatedEraNames;
508         MonoArray *AbbreviatedEnglishEraNames;
509         MonoArray *DayNames;
510         MonoArray *AbbreviatedDayNames;
511         MonoArray *SuperShortDayNames;
512         MonoArray *MonthNames;
513         MonoArray *AbbreviatedMonthNames;
514         MonoArray *GenitiveMonthNames;
515         MonoArray *GenitiveAbbreviatedMonthNames;
516 } MonoCalendarData;
517
518 typedef struct {
519         MonoObject obj;
520         MonoString *AMDesignator;
521         MonoString *PMDesignator;
522         MonoString *TimeSeparator;
523         MonoArray *LongTimePatterns;
524         MonoArray *ShortTimePatterns;
525         guint32 FirstDayOfWeek;
526         guint32 CalendarWeekRule;
527 } MonoCultureData;
528
529 typedef struct {
530         MonoObject obj;
531         MonoBoolean is_read_only;
532         gint32 lcid;
533         gint32 parent_lcid;
534         gint32 datetime_index;
535         gint32 number_index;
536         gint32 calendar_type;
537         MonoBoolean use_user_override;
538         MonoNumberFormatInfo *number_format;
539         MonoDateTimeFormatInfo *datetime_format;
540         MonoObject *textinfo;
541         MonoString *name;
542         MonoString *englishname;
543         MonoString *nativename;
544         MonoString *iso3lang;
545         MonoString *iso2lang;
546         MonoString *win3lang;
547         MonoString *territory;
548         MonoArray *native_calendar_names;
549         MonoCompareInfo *compareinfo;
550         const void* text_info_data;
551 } MonoCultureInfo;
552
553 typedef struct {
554         MonoObject obj;
555         gint32 geo_id;
556         MonoString *iso2name;
557         MonoString *iso3name;
558         MonoString *win3name;
559         MonoString *english_name;
560         MonoString *native_name;
561         MonoString *currency_symbol;
562         MonoString *iso_currency_symbol;
563         MonoString *currency_english_name;
564         MonoString *currency_native_name;
565 } MonoRegionInfo;
566
567 typedef struct {
568         MonoObject obj;
569         MonoString *str;
570         gint32 options;
571         MonoArray *key;
572         gint32 lcid;
573 } MonoSortKey;
574
575 typedef struct {
576         MonoObject object;
577         guint32 intType;
578 } MonoInterfaceTypeAttribute;
579
580 /* 
581  * Callbacks supplied by the runtime and called by the modules in metadata/
582  * This interface is easier to extend than adding a new function type +
583  * a new 'install' function for every callback.
584  */
585 typedef struct {
586         gpointer (*create_ftnptr) (MonoDomain *domain, gpointer addr);
587         gpointer (*get_addr_from_ftnptr) (gpointer descr);
588         char*    (*get_runtime_build_info) (void);
589         gpointer (*get_vtable_trampoline) (MonoVTable *vtable, int slot_index);
590         gpointer (*get_imt_trampoline) (MonoVTable *vtable, int imt_slot_index);
591         gboolean (*imt_entry_inited) (MonoVTable *vtable, int imt_slot_index);
592         void     (*set_cast_details) (MonoClass *from, MonoClass *to);
593         void     (*debug_log) (int level, MonoString *category, MonoString *message);
594         gboolean (*debug_log_is_enabled) (void);
595         void     (*init_delegate) (MonoDelegate *del);
596         MonoObject* (*runtime_invoke) (MonoMethod *method, void *obj, void **params, MonoObject **exc, MonoError *error);
597         void*    (*compile_method) (MonoMethod *method, MonoError *error);
598         gpointer (*create_jump_trampoline) (MonoDomain *domain, MonoMethod *method, gboolean add_sync_wrapper, MonoError *error);
599         gpointer (*create_jit_trampoline) (MonoDomain *domain, MonoMethod *method, MonoError *error);
600         /* used to free a dynamic method */
601         void     (*free_method) (MonoDomain *domain, MonoMethod *method);
602         gpointer (*create_remoting_trampoline) (MonoDomain *domain, MonoMethod *method, MonoRemotingTarget target, MonoError *error);
603         gpointer (*create_delegate_trampoline) (MonoDomain *domain, MonoClass *klass);
604 } MonoRuntimeCallbacks;
605
606 typedef gboolean (*MonoInternalStackWalk) (MonoStackFrameInfo *frame, MonoContext *ctx, gpointer data);
607 typedef gboolean (*MonoInternalExceptionFrameWalk) (MonoMethod *method, gpointer ip, size_t native_offset, gboolean managed, gpointer user_data);
608
609 typedef struct {
610         void (*mono_walk_stack_with_ctx) (MonoInternalStackWalk func, MonoContext *ctx, MonoUnwindOptions options, void *user_data);
611         void (*mono_walk_stack_with_state) (MonoInternalStackWalk func, MonoThreadUnwindState *state, MonoUnwindOptions options, void *user_data);
612         void (*mono_raise_exception) (MonoException *ex);
613         void (*mono_raise_exception_with_ctx) (MonoException *ex, MonoContext *ctx);
614         gboolean (*mono_exception_walk_trace) (MonoException *ex, MonoInternalExceptionFrameWalk func, gpointer user_data);
615         gboolean (*mono_install_handler_block_guard) (MonoThreadUnwindState *unwind_state);
616         gboolean (*mono_current_thread_has_handle_block_guard) (void);
617         gboolean (*mono_above_abort_threshold) (void);
618         void (*mono_clear_abort_threshold) (void);
619 } MonoRuntimeExceptionHandlingCallbacks;
620
621 MONO_COLD void mono_set_pending_exception (MonoException *exc);
622
623 /* remoting and async support */
624
625 MonoAsyncResult *
626 mono_async_result_new       (MonoDomain *domain, gpointer handle, 
627                              MonoObject *state, gpointer data, MonoObject *object_data, MonoError *error);
628
629 MonoObject *
630 ves_icall_System_Runtime_Remoting_Messaging_AsyncResult_Invoke (MonoAsyncResult *ares);
631
632 MonoWaitHandle *
633 mono_wait_handle_new        (MonoDomain *domain, gpointer handle, MonoError *error);
634
635 gpointer
636 mono_wait_handle_get_handle (MonoWaitHandle *handle);
637
638 gboolean
639 mono_message_init           (MonoDomain *domain, MonoMethodMessage *this_obj, 
640                              MonoReflectionMethod *method, MonoArray *out_args, MonoError *error);
641
642 MonoObject *
643 mono_message_invoke         (MonoObject *target, MonoMethodMessage *msg, 
644                              MonoObject **exc, MonoArray **out_args, MonoError *error);
645
646 MonoMethodMessage *
647 mono_method_call_message_new (MonoMethod *method, gpointer *params, MonoMethod *invoke, 
648                               MonoDelegate **cb, MonoObject **state, MonoError *error);
649
650 void
651 mono_method_return_message_restore (MonoMethod *method, gpointer *params, MonoArray *out_args, MonoError *error);
652
653 gboolean
654 mono_delegate_ctor_with_method (MonoObject *this_obj, MonoObject *target, gpointer addr, MonoMethod *method, MonoError *error);
655
656 gboolean
657 mono_delegate_ctor          (MonoObject *this_obj, MonoObject *target, gpointer addr, MonoError *error);
658
659 void*
660 mono_class_get_allocation_ftn (MonoVTable *vtable, gboolean for_box, gboolean *pass_size_in_words);
661
662 void
663 mono_runtime_free_method    (MonoDomain *domain, MonoMethod *method);
664
665 void
666 mono_install_callbacks      (MonoRuntimeCallbacks *cbs);
667
668 MonoRuntimeCallbacks*
669 mono_get_runtime_callbacks (void);
670
671 void
672 mono_install_eh_callbacks (MonoRuntimeExceptionHandlingCallbacks *cbs);
673
674 MonoRuntimeExceptionHandlingCallbacks *
675 mono_get_eh_callbacks (void);
676
677 void
678 mono_raise_exception_with_context (MonoException *ex, MonoContext *ctx);
679
680 void
681 mono_type_initialization_init (void);
682
683 void
684 mono_type_initialization_cleanup (void);
685
686 int
687 mono_thread_kill           (MonoInternalThread *thread, int signal);
688
689 MonoNativeTlsKey
690 mono_thread_get_tls_key    (void);
691
692 gint32
693 mono_thread_get_tls_offset (void);
694
695 MonoNativeTlsKey
696 mono_domain_get_tls_key    (void);
697
698 gint32
699 mono_domain_get_tls_offset (void);
700
701 /* Reflection and Reflection.Emit support */
702
703 /*
704  * Handling System.Type objects:
705  *
706  *   Fields defined as System.Type in managed code should be defined as MonoObject* 
707  * in unmanaged structures, and the monotype_cast () function should be used for 
708  * casting them to MonoReflectionType* to avoid crashes/security issues when 
709  * encountering instances of user defined subclasses of System.Type.
710  */
711
712 #define IS_MONOTYPE(obj) (!(obj) || (((MonoObject*)(obj))->vtable->klass->image == mono_defaults.corlib && ((MonoReflectionType*)(obj))->type != NULL))
713
714 #define IS_MONOTYPE_HANDLE(obj) IS_MONOTYPE (MONO_HANDLE_RAW (obj))
715
716 /* This should be used for accessing members of Type[] arrays */
717 #define mono_type_array_get(arr,index) monotype_cast (mono_array_get ((arr), gpointer, (index)))
718
719 /*
720  * Cast an object to MonoReflectionType, making sure it is a System.MonoType or
721  * a subclass of it.
722  */
723 static inline MonoReflectionType*
724 monotype_cast (MonoObject *obj)
725 {
726         g_assert (IS_MONOTYPE (obj));
727
728         return (MonoReflectionType*)obj;
729 }
730
731 /*
732  * The following structure must match the C# implementation in our corlib.
733  */
734
735 struct _MonoReflectionMethod {
736         MonoObject object;
737         MonoMethod *method;
738         MonoString *name;
739         MonoReflectionType *reftype;
740 };
741
742 /* Safely access System.Reflection.MonoMethod from native code */
743 TYPED_HANDLE_DECL (MonoReflectionMethod);
744
745 struct _MonoDelegate {
746         MonoObject object;
747         /* The compiled code of the target method */
748         gpointer method_ptr;
749         /* The invoke code */
750         gpointer invoke_impl;
751         MonoObject *target;
752         MonoMethod *method;
753         gpointer delegate_trampoline;
754         /* Extra argument passed to the target method in llvmonly mode */
755         gpointer extra_arg;
756         /* 
757          * If non-NULL, this points to a memory location which stores the address of 
758          * the compiled code of the method, or NULL if it is not yet compiled.
759          */
760         guint8 **method_code;
761         MonoReflectionMethod *method_info;
762         MonoReflectionMethod *original_method_info;
763         MonoObject *data;
764         MonoBoolean method_is_virtual;
765 };
766
767 typedef struct _MonoMulticastDelegate MonoMulticastDelegate;
768 struct _MonoMulticastDelegate {
769         MonoDelegate delegate;
770         MonoArray *delegates;
771 };
772
773 struct _MonoReflectionField {
774         MonoObject object;
775         MonoClass *klass;
776         MonoClassField *field;
777         MonoString *name;
778         MonoReflectionType *type;
779         guint32 attrs;
780 };
781
782 /* Safely access System.Reflection.MonoField from native code */
783 TYPED_HANDLE_DECL (MonoReflectionField);
784
785 struct _MonoReflectionProperty {
786         MonoObject object;
787         MonoClass *klass;
788         MonoProperty *property;
789 };
790
791 /* Safely access System.Reflection.MonoProperty from native code */
792 TYPED_HANDLE_DECL (MonoReflectionProperty);
793
794 /*This is System.EventInfo*/
795 struct _MonoReflectionEvent {
796         MonoObject object;
797         MonoObject *cached_add_event;
798 };
799
800 /* Safely access System.Reflection.EventInfo from native code */
801 TYPED_HANDLE_DECL (MonoReflectionEvent);
802
803 typedef struct {
804         MonoReflectionEvent object;
805         MonoClass *klass;
806         MonoEvent *event;
807 } MonoReflectionMonoEvent;
808
809 /* Safely access Systme.Reflection.MonoEvent from native code */
810 TYPED_HANDLE_DECL (MonoReflectionMonoEvent);
811
812 typedef struct {
813         MonoObject object;
814         MonoReflectionType *ClassImpl;
815         MonoObject *DefaultValueImpl;
816         MonoObject *MemberImpl;
817         MonoString *NameImpl;
818         gint32 PositionImpl;
819         guint32 AttrsImpl;
820         MonoObject *MarshalAsImpl;
821 } MonoReflectionParameter;
822
823 /* Safely access System.Reflection.ParameterInfo from native code */
824 TYPED_HANDLE_DECL (MonoReflectionParameter);
825
826 struct _MonoReflectionMethodBody {
827         MonoObject object;
828         MonoArray *clauses;
829         MonoArray *locals;
830         MonoArray *il;
831         MonoBoolean init_locals;
832         guint32 local_var_sig_token;
833         guint32 max_stack;
834 };
835
836 /* Safely access System.Reflection.MethodBody from native code */
837 TYPED_HANDLE_DECL (MonoReflectionMethodBody);
838
839 struct _MonoReflectionAssembly {
840         MonoObject object;
841         MonoAssembly *assembly;
842         MonoObject *resolve_event_holder;
843         /* CAS related */
844         MonoObject *evidence;   /* Evidence */
845         MonoObject *minimum;    /* PermissionSet - for SecurityAction.RequestMinimum */
846         MonoObject *optional;   /* PermissionSet - for SecurityAction.RequestOptional */
847         MonoObject *refuse;     /* PermissionSet - for SecurityAction.RequestRefuse */
848         MonoObject *granted;    /* PermissionSet - for the resolved assembly granted permissions */
849         MonoObject *denied;     /* PermissionSet - for the resolved assembly denied permissions */
850         /* */
851         MonoBoolean from_byte_array;
852         MonoString *name;
853 };
854
855 /* Safely access System.Reflection.Assembly from native code */
856 TYPED_HANDLE_DECL (MonoReflectionAssembly);
857
858 typedef struct {
859         MonoReflectionType *utype;
860         MonoArray *values;
861         MonoArray *names;
862 } MonoEnumInfo;
863
864 typedef struct {
865         MonoReflectionType *parent;
866         MonoReflectionType *ret;
867         guint32 attrs;
868         guint32 implattrs;
869         guint32 callconv;
870 } MonoMethodInfo;
871
872 typedef struct {
873         MonoReflectionType *parent;
874         MonoReflectionType *declaring_type;
875         MonoString *name;
876         MonoReflectionMethod *get;
877         MonoReflectionMethod *set;
878         guint32 attrs;
879 } MonoPropertyInfo;
880
881 typedef struct {
882         MonoReflectionType *declaring_type;
883         MonoReflectionType *reflected_type;
884         MonoString *name;
885         MonoReflectionMethod *add_method;
886         MonoReflectionMethod *remove_method;
887         MonoReflectionMethod *raise_method;
888         guint32 attrs;
889         MonoArray *other_methods;
890 } MonoEventInfo;
891
892 typedef struct {
893         MonoString *name;
894         MonoString *name_space;
895         MonoReflectionType *etype;
896         MonoReflectionType *nested_in;
897         MonoReflectionAssembly *assembly;
898         guint32 rank;
899         MonoBoolean isprimitive;
900 } MonoTypeInfo;
901
902 typedef struct {
903         MonoObject *member;
904         gint32 code_pos;
905 } MonoReflectionILTokenInfo;
906
907 typedef struct {
908         MonoObject object;
909         MonoArray *code;
910         gint32 code_len;
911         gint32 max_stack;
912         gint32 cur_stack;
913         MonoArray *locals;
914         MonoArray *ex_handlers;
915         gint32 num_token_fixups;
916         MonoArray *token_fixups;
917 } MonoReflectionILGen;
918
919 typedef struct {
920         MonoArray *handlers;
921         gint32 start;
922         gint32 len;
923         gint32 label;
924 } MonoILExceptionInfo;
925
926 typedef struct {
927         MonoObject *extype;
928         gint32 type;
929         gint32 start;
930         gint32 len;
931         gint32 filter_offset;
932 } MonoILExceptionBlock;
933
934 typedef struct {
935         MonoObject object;
936         MonoObject *catch_type;
937         gint32 filter_offset;
938         gint32 flags;
939         gint32 try_offset;
940         gint32 try_length;
941         gint32 handler_offset;
942         gint32 handler_length;
943 } MonoReflectionExceptionHandlingClause;
944
945
946 /* Safely access System.Reflection.ExceptionHandlingClause from native code */
947 TYPED_HANDLE_DECL (MonoReflectionExceptionHandlingClause);
948
949 typedef struct {
950         MonoObject object;
951         MonoReflectionType *local_type;
952         MonoBoolean is_pinned;
953         guint16 local_index;
954 } MonoReflectionLocalVariableInfo;
955
956 /* Safely access System.Reflection.LocalVariableInfo from native code */
957 TYPED_HANDLE_DECL (MonoReflectionLocalVariableInfo);
958
959 typedef struct {
960         /*
961          * Must have the same layout as MonoReflectionLocalVariableInfo, since
962          * LocalBuilder inherits from it under net 2.0.
963          */
964         MonoObject object;
965         MonoObject *type;
966         MonoBoolean is_pinned;
967         guint16 local_index;
968         MonoString *name;
969 } MonoReflectionLocalBuilder;
970
971 typedef struct {
972         MonoObject object;
973         gint32 count;
974         gint32 type;
975         gint32 eltype;
976         MonoString *guid;
977         MonoString *mcookie;
978         MonoString *marshaltype;
979         MonoObject *marshaltyperef;
980         gint32 param_num;
981         MonoBoolean has_size;
982 } MonoReflectionMarshal;
983
984 typedef struct {
985         MonoObject object;
986         MonoObject* methodb;
987         MonoString *name;
988         MonoArray *cattrs;
989         MonoReflectionMarshal *marshal_info;
990         guint32 attrs;
991         int position;
992         guint32 table_idx;
993         MonoObject *def_value;
994 } MonoReflectionParamBuilder;
995
996 typedef struct {
997         MonoObject object;
998         MonoMethod *mhandle;
999         MonoReflectionILGen *ilgen;
1000         MonoArray *parameters;
1001         guint32 attrs;
1002         guint32 iattrs;
1003         guint32 table_idx;
1004         guint32 call_conv;
1005         MonoObject *type;
1006         MonoArray *pinfo;
1007         MonoArray *cattrs;
1008         MonoBoolean init_locals;
1009         MonoArray *param_modreq;
1010         MonoArray *param_modopt;
1011         MonoArray *permissions;
1012 } MonoReflectionCtorBuilder;
1013
1014 /* Safely access System.Reflection.Emit.ConstructorBuilder from native code */
1015 TYPED_HANDLE_DECL (MonoReflectionCtorBuilder);
1016
1017 typedef struct {
1018         MonoObject object;
1019         MonoMethod *mhandle;
1020         MonoObject *rtype;
1021         MonoArray *parameters;
1022         guint32 attrs;
1023         guint32 iattrs;
1024         MonoString *name;
1025         guint32 table_idx;
1026         MonoArray *code;
1027         MonoReflectionILGen *ilgen;
1028         MonoObject *type;
1029         MonoArray *pinfo;
1030         MonoArray *cattrs;
1031         MonoArray *override_methods;
1032         MonoString *dll;
1033         MonoString *dllentry;
1034         guint32 charset;
1035         guint32 extra_flags;
1036         guint32 native_cc;
1037         guint32 call_conv;
1038         MonoBoolean init_locals;
1039         MonoGenericContainer *generic_container;
1040         MonoArray *generic_params;
1041         MonoArray *return_modreq;
1042         MonoArray *return_modopt;
1043         MonoArray *param_modreq;
1044         MonoArray *param_modopt;
1045         MonoArray *permissions;
1046 } MonoReflectionMethodBuilder;
1047
1048 /* Safely access System.Reflection.Emit.MethodBuilder from native code */
1049 TYPED_HANDLE_DECL (MonoReflectionMethodBuilder);
1050
1051 typedef struct {
1052         MonoObject object;
1053         MonoMethod *mhandle;
1054         MonoReflectionType *parent;
1055         MonoReflectionType *ret;
1056         MonoArray *parameters;
1057         MonoString *name;
1058         guint32 table_idx;
1059         guint32 call_conv;
1060 } MonoReflectionArrayMethod;
1061
1062 /* Safely access System.Reflection.Emit.MonoArrayMethod from native code */
1063 TYPED_HANDLE_DECL (MonoReflectionArrayMethod);
1064
1065 typedef struct {
1066         MonoArray *data;
1067         MonoString *name;
1068         MonoString *filename;
1069         guint32 attrs;
1070         guint32 offset;
1071         MonoObject *stream;
1072 } MonoReflectionResource;
1073
1074 typedef struct {
1075         guint32 res_type;
1076         guint32 res_id;
1077         guint32 lang_id;
1078         MonoArray *res_data;
1079 } MonoReflectionWin32Resource;
1080
1081 typedef struct {
1082         guint32 action;
1083         MonoString *pset;
1084 } MonoReflectionPermissionSet;
1085
1086 typedef struct {
1087         MonoReflectionAssembly assembly;
1088         MonoDynamicAssembly *dynamic_assembly;
1089         MonoReflectionMethod *entry_point;
1090         MonoArray *modules;
1091         MonoString *name;
1092         MonoString *dir;
1093         MonoArray *cattrs;
1094         MonoArray *resources;
1095         MonoArray *public_key;
1096         MonoString *version;
1097         MonoString *culture;
1098         guint32 algid;
1099         guint32 flags;
1100         guint32 pekind;
1101         MonoBoolean delay_sign;
1102         guint32 access;
1103         MonoArray *loaded_modules;
1104         MonoArray *win32_resources;
1105         /* CAS related */
1106         MonoArray *permissions_minimum;
1107         MonoArray *permissions_optional;
1108         MonoArray *permissions_refused;
1109         gint32 pe_kind;
1110         gint32 machine;
1111         MonoBoolean corlib_internal;
1112         MonoArray *type_forwarders;
1113         MonoArray *pktoken; /* as hexadecimal byte[] */
1114 } MonoReflectionAssemblyBuilder;
1115
1116 /* Safely access System.Reflection.Emit.AssemblyBuilder from native code */
1117 TYPED_HANDLE_DECL (MonoReflectionAssemblyBuilder);
1118
1119 typedef struct {
1120         MonoObject object;
1121         guint32 attrs;
1122         MonoObject *type;
1123         MonoString *name;
1124         MonoObject *def_value;
1125         gint32 offset;
1126         gint32 table_idx;
1127         MonoReflectionType *typeb;
1128         MonoArray *rva_data;
1129         MonoArray *cattrs;
1130         MonoReflectionMarshal *marshal_info;
1131         MonoClassField *handle;
1132         MonoArray *modreq;
1133         MonoArray *modopt;
1134 } MonoReflectionFieldBuilder;
1135
1136 /* Safely access System.Reflection.Emit.FieldBuilder from native code */ 
1137 TYPED_HANDLE_DECL (MonoReflectionFieldBuilder);
1138
1139 typedef struct {
1140         MonoObject object;
1141         guint32 attrs;
1142         MonoString *name;
1143         MonoObject *type;
1144         MonoArray *parameters;
1145         MonoArray *cattrs;
1146         MonoObject *def_value;
1147         MonoReflectionMethodBuilder *set_method;
1148         MonoReflectionMethodBuilder *get_method;
1149         gint32 table_idx;
1150         MonoObject *type_builder;
1151         MonoArray *returnModReq;
1152         MonoArray *returnModOpt;
1153         MonoArray *paramModReq;
1154         MonoArray *paramModOpt;
1155         guint32 call_conv;
1156 } MonoReflectionPropertyBuilder;
1157
1158 struct _MonoReflectionModule {
1159         MonoObject      obj;
1160         MonoImage  *image;
1161         MonoReflectionAssembly *assembly;
1162         MonoString *fqname;
1163         MonoString *name;
1164         MonoString *scopename;
1165         MonoBoolean is_resource;
1166         guint32 token;
1167 };
1168
1169 /* Safely access System.Reflection.Module from native code */
1170 TYPED_HANDLE_DECL (MonoReflectionModule);
1171
1172 typedef struct {
1173         MonoReflectionModule module;
1174         MonoDynamicImage *dynamic_image;
1175         gint32     num_types;
1176         MonoArray *types;
1177         MonoArray *cattrs;
1178         MonoArray *guid;
1179         guint32    table_idx;
1180         MonoReflectionAssemblyBuilder *assemblyb;
1181         MonoArray *global_methods;
1182         MonoArray *global_fields;
1183         gboolean is_main;
1184         MonoArray *resources;
1185 } MonoReflectionModuleBuilder;
1186
1187 /* Safely acess System.Reflection.Emit.ModuleBuidler from native code */
1188 TYPED_HANDLE_DECL (MonoReflectionModuleBuilder);
1189
1190 typedef struct {
1191         MonoReflectionType type;
1192         MonoString *name;
1193         MonoString *nspace;
1194         MonoObject *parent;
1195         MonoReflectionType *nesting_type;
1196         MonoArray *interfaces;
1197         gint32     num_methods;
1198         MonoArray *methods;
1199         MonoArray *ctors;
1200         MonoArray *properties;
1201         gint32     num_fields;
1202         MonoArray *fields;
1203         MonoArray *events;
1204         MonoArray *cattrs;
1205         MonoArray *subtypes;
1206         guint32 attrs;
1207         guint32 table_idx;
1208         MonoReflectionModuleBuilder *module;
1209         gint32 class_size;
1210         gint32 packing_size;
1211         MonoGenericContainer *generic_container;
1212         MonoArray *generic_params;
1213         MonoArray *permissions;
1214         MonoReflectionType *created;
1215 } MonoReflectionTypeBuilder;
1216
1217 /* Safely access System.Reflection.Emit.TypeBuilder from native code */
1218 TYPED_HANDLE_DECL (MonoReflectionTypeBuilder);
1219
1220 typedef struct {
1221         MonoReflectionType type;
1222         MonoReflectionType *element_type;
1223         gint32 rank;
1224 } MonoReflectionArrayType;
1225
1226 /* Safely access System.Reflection.Emit.ArrayType (in DerivedTypes.cs) from native code */
1227 TYPED_HANDLE_DECL (MonoReflectionArrayType);
1228
1229 typedef struct {
1230         MonoReflectionType type;
1231         MonoReflectionType *element_type;
1232 } MonoReflectionDerivedType;
1233
1234 /* Safely access System.Reflection.Emit.SymbolType and subclasses (in DerivedTypes.cs) from native code */
1235 TYPED_HANDLE_DECL (MonoReflectionDerivedType);
1236
1237 typedef struct {
1238         MonoReflectionType type;
1239         MonoReflectionTypeBuilder *tbuilder;
1240         MonoReflectionMethodBuilder *mbuilder;
1241         MonoString *name;
1242         guint32 index;
1243         MonoReflectionType *base_type;
1244         MonoArray *iface_constraints;
1245         MonoArray *cattrs;
1246         guint32 attrs;
1247 } MonoReflectionGenericParam;
1248
1249 /* Safely access System.Reflection.Emit.GenericTypeParameterBuilder from native code */
1250 TYPED_HANDLE_DECL (MonoReflectionGenericParam);
1251
1252 typedef struct {
1253         MonoReflectionType type;
1254         MonoReflectionTypeBuilder *tb;
1255 } MonoReflectionEnumBuilder;
1256
1257 /* Safely access System.Reflection.Emit.EnumBuilder from native code */
1258 TYPED_HANDLE_DECL (MonoReflectionEnumBuilder);
1259
1260 typedef struct _MonoReflectionGenericClass MonoReflectionGenericClass;
1261 struct _MonoReflectionGenericClass {
1262         MonoReflectionType type;
1263         MonoReflectionType *generic_type; /*Can be either a MonoType or a TypeBuilder*/
1264         MonoArray *type_arguments;
1265 };
1266
1267 /* Safely access System.Reflection.Emit.TypeBuilderInstantiation from native code */
1268 TYPED_HANDLE_DECL (MonoReflectionGenericClass);
1269
1270 typedef struct {
1271         MonoObject  obj;
1272         MonoString *name;
1273         MonoString *codebase;
1274         gint32 major, minor, build, revision;
1275         MonoObject  *cultureInfo;
1276         guint32     flags;
1277         guint32     hashalg;
1278         MonoObject  *keypair;
1279         MonoArray   *publicKey;
1280         MonoArray   *keyToken;
1281         guint32     versioncompat;
1282         MonoObject *version;
1283         guint32     processor_architecture;
1284 } MonoReflectionAssemblyName;
1285
1286 /* Safely access System.Reflection.AssemblyName from native code */
1287 TYPED_HANDLE_DECL (MonoReflectionAssemblyName);
1288
1289 typedef struct {
1290         MonoObject  obj;
1291         MonoString *name;
1292         MonoReflectionType *type;
1293         MonoReflectionTypeBuilder *typeb;
1294         MonoArray *cattrs;
1295         MonoReflectionMethodBuilder *add_method;
1296         MonoReflectionMethodBuilder *remove_method;
1297         MonoReflectionMethodBuilder *raise_method;
1298         MonoArray *other_methods;
1299         guint32 attrs;
1300         guint32 table_idx;
1301 } MonoReflectionEventBuilder;
1302
1303 typedef struct {
1304         MonoObject  obj;
1305         MonoReflectionMethod *ctor;
1306         MonoArray *data;
1307 } MonoReflectionCustomAttr;
1308
1309 typedef struct {
1310         MonoObject object;
1311         MonoString *marshal_cookie;
1312         MonoString *marshal_type;
1313         MonoReflectionType *marshal_type_ref;
1314         MonoReflectionType *marshal_safe_array_user_defined_subtype;
1315         guint32 utype;
1316         guint32 array_subtype;
1317         gint32 safe_array_subtype;
1318         gint32 size_const;
1319         gint32 IidParameterIndex;
1320         gint16 size_param_index;
1321 } MonoReflectionMarshalAsAttribute;
1322
1323 /* Safely access System.Runtime.InteropServices.MarshalAsAttribute */
1324 TYPED_HANDLE_DECL (MonoReflectionMarshalAsAttribute);
1325
1326 typedef struct {
1327         MonoObject object;
1328         gint32 call_conv;
1329         gint32 charset;
1330         MonoBoolean best_fit_mapping;
1331         MonoBoolean throw_on_unmappable;
1332         MonoBoolean set_last_error;
1333 } MonoReflectionUnmanagedFunctionPointerAttribute;
1334
1335 typedef struct {
1336         MonoObject object;
1337         MonoString *guid;
1338 } MonoReflectionGuidAttribute;
1339
1340 typedef struct {
1341         MonoObject object;
1342         MonoMethod *mhandle;
1343         MonoString *name;
1344         MonoReflectionType *rtype;
1345         MonoArray *parameters;
1346         guint32 attrs;
1347         guint32 call_conv;
1348         MonoReflectionModule *module;
1349         MonoBoolean skip_visibility;
1350         MonoBoolean init_locals;
1351         MonoReflectionILGen *ilgen;
1352         gint32 nrefs;
1353         MonoArray *refs;
1354         GSList *referenced_by;
1355         MonoReflectionType *owner;
1356 } MonoReflectionDynamicMethod;  
1357
1358 /* Safely access System.Reflection.Emit.DynamicMethod from native code */
1359 TYPED_HANDLE_DECL (MonoReflectionDynamicMethod);
1360
1361 typedef struct {
1362         MonoObject object;
1363         MonoReflectionModuleBuilder *module;
1364         MonoArray *arguments;
1365         guint32 type;
1366         MonoReflectionType *return_type;
1367         guint32 call_conv;
1368         guint32 unmanaged_call_conv;
1369         MonoArray *modreqs;
1370         MonoArray *modopts;
1371 } MonoReflectionSigHelper;
1372
1373 /* Safely access System.Reflection.Emit.SignatureHelper from native code */
1374 TYPED_HANDLE_DECL (MonoReflectionSigHelper);
1375
1376 typedef struct {
1377         MonoObject object;
1378         MonoBoolean visible;
1379 } MonoReflectionComVisibleAttribute;
1380
1381 enum {
1382         RESOURCE_LOCATION_EMBEDDED = 1,
1383         RESOURCE_LOCATION_ANOTHER_ASSEMBLY = 2,
1384         RESOURCE_LOCATION_IN_MANIFEST = 4
1385 };
1386
1387 typedef struct {
1388         MonoObject object;
1389         MonoReflectionAssembly *assembly;
1390         MonoString *filename;
1391         guint32 location;
1392 } MonoManifestResourceInfo;
1393
1394 /* Safely access System.Reflection.ManifestResourceInfo from native code */
1395 TYPED_HANDLE_DECL (MonoManifestResourceInfo);
1396
1397 /* A boxed IntPtr */
1398 typedef struct {
1399         MonoObject object;
1400         gpointer m_value;
1401 } MonoIntPtr;
1402
1403 /* Keep in sync with System.GenericParameterAttributes */
1404 typedef enum {
1405         GENERIC_PARAMETER_ATTRIBUTE_NON_VARIANT         = 0,
1406         GENERIC_PARAMETER_ATTRIBUTE_COVARIANT           = 1,
1407         GENERIC_PARAMETER_ATTRIBUTE_CONTRAVARIANT       = 2,
1408         GENERIC_PARAMETER_ATTRIBUTE_VARIANCE_MASK       = 3,
1409
1410         GENERIC_PARAMETER_ATTRIBUTE_NO_SPECIAL_CONSTRAINT       = 0,
1411         GENERIC_PARAMETER_ATTRIBUTE_REFERENCE_TYPE_CONSTRAINT   = 4,
1412         GENERIC_PARAMETER_ATTRIBUTE_VALUE_TYPE_CONSTRAINT       = 8,
1413         GENERIC_PARAMETER_ATTRIBUTE_CONSTRUCTOR_CONSTRAINT      = 16,
1414         GENERIC_PARAMETER_ATTRIBUTE_SPECIAL_CONSTRAINTS_MASK    = 28
1415 } GenericParameterAttributes;
1416
1417 typedef struct {
1418         MonoType *type;
1419         MonoClassField *field;
1420         MonoProperty *prop;
1421 } CattrNamedArg;
1422
1423 gboolean          mono_image_create_pefile (MonoReflectionModuleBuilder *module, gpointer file, MonoError *error);
1424 guint32       mono_image_insert_string (MonoReflectionModuleBuilderHandle module, MonoStringHandle str, MonoError *error);
1425 guint32       mono_image_create_token  (MonoDynamicImage *assembly, MonoObjectHandle obj, gboolean create_methodspec, gboolean register_token, MonoError *error);
1426 void          mono_dynamic_image_free (MonoDynamicImage *image);
1427 void          mono_dynamic_image_free_image (MonoDynamicImage *image);
1428 void          mono_dynamic_image_release_gc_roots (MonoDynamicImage *image);
1429
1430 void        mono_reflection_setup_internal_class  (MonoReflectionTypeBuilder *tb);
1431
1432 void        mono_reflection_get_dynamic_overrides (MonoClass *klass, MonoMethod ***overrides, int *num_overrides, MonoError *error);
1433
1434 void mono_reflection_destroy_dynamic_method (MonoReflectionDynamicMethod *mb);
1435
1436 void
1437 ves_icall_SymbolType_create_unmanaged_type (MonoReflectionType *type);
1438
1439 void        mono_reflection_register_with_runtime (MonoReflectionType *type);
1440
1441 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);
1442 MonoMethodSignature * mono_reflection_lookup_signature (MonoImage *image, MonoMethod *method, guint32 token, MonoError *error);
1443
1444 MonoArrayHandle mono_param_get_objects_internal  (MonoDomain *domain, MonoMethod *method, MonoClass *refclass, MonoError *error);
1445
1446 MonoClass*
1447 mono_class_bind_generic_parameters (MonoClass *klass, int type_argc, MonoType **types, gboolean is_dynamic);
1448 MonoType*
1449 mono_reflection_bind_generic_parameters (MonoReflectionTypeHandle type, int type_argc, MonoType **types, MonoError *error);
1450 void
1451 mono_reflection_generic_class_initialize (MonoReflectionGenericClass *type, MonoArray *fields);
1452
1453 MonoReflectionEvent *
1454 ves_icall_TypeBuilder_get_event_info (MonoReflectionTypeBuilder *tb, MonoReflectionEventBuilder *eb);
1455
1456 MonoArray *
1457 ves_icall_SignatureHelper_get_signature_local (MonoReflectionSigHelper *sig);
1458
1459 MonoArray *
1460 ves_icall_SignatureHelper_get_signature_field (MonoReflectionSigHelper *sig);
1461
1462 MonoReflectionMarshalAsAttributeHandle
1463 mono_reflection_marshal_as_attribute_from_marshal_spec (MonoDomain *domain, MonoClass *klass, MonoMarshalSpec *spec, MonoError *error);
1464
1465 gpointer
1466 mono_reflection_lookup_dynamic_token (MonoImage *image, guint32 token, gboolean valid_token, MonoClass **handle_class, MonoGenericContext *context, MonoError *error);
1467
1468 gboolean
1469 mono_reflection_call_is_assignable_to (MonoClass *klass, MonoClass *oklass, MonoError *error);
1470
1471 void
1472 ves_icall_System_Reflection_CustomAttributeData_ResolveArgumentsInternal (MonoReflectionMethod *method, MonoReflectionAssembly *assembly, gpointer data, guint32 data_length, MonoArray **ctor_args, MonoArray ** named_args);
1473
1474 MonoType*
1475 mono_reflection_type_get_handle (MonoReflectionType *ref, MonoError *error);
1476
1477 gboolean
1478 mono_image_build_metadata (MonoReflectionModuleBuilder *module, MonoError *error);
1479
1480 int
1481 mono_get_constant_value_from_blob (MonoDomain* domain, MonoTypeEnum type, const char *blob, void *value, MonoError *error);
1482
1483 void
1484 mono_release_type_locks (MonoInternalThread *thread);
1485
1486 int
1487 mono_string_handle_length (MonoStringHandle s);
1488
1489 char *
1490 mono_string_handle_to_utf8 (MonoStringHandle s, MonoError *error);
1491
1492 char *
1493 mono_string_to_utf8_mp  (MonoMemPool *mp, MonoString *s, MonoError *error);
1494
1495 char *
1496 mono_string_to_utf8_image (MonoImage *image, MonoStringHandle s, MonoError *error);
1497
1498
1499 MonoArrayHandle
1500 mono_array_clone_in_domain (MonoDomain *domain, MonoArrayHandle array, MonoError *error);
1501
1502 MonoArray*
1503 mono_array_clone_checked (MonoArray *array, MonoError *error);
1504
1505 void
1506 mono_array_full_copy (MonoArray *src, MonoArray *dest);
1507
1508 gboolean
1509 mono_array_calc_byte_len (MonoClass *klass, uintptr_t len, uintptr_t *res);
1510
1511 MonoArray*
1512 mono_array_new_checked (MonoDomain *domain, MonoClass *eclass, uintptr_t n, MonoError *error);
1513
1514 MonoArray*
1515 mono_array_new_full_checked (MonoDomain *domain, MonoClass *array_class, uintptr_t *lengths, intptr_t *lower_bounds, MonoError *error);
1516
1517 MonoArray*
1518 mono_array_new_specific_checked (MonoVTable *vtable, uintptr_t n, MonoError *error);
1519
1520 MonoArray*
1521 ves_icall_array_new (MonoDomain *domain, MonoClass *eclass, uintptr_t n);
1522
1523 MonoArray*
1524 ves_icall_array_new_specific (MonoVTable *vtable, uintptr_t n);
1525
1526 #ifndef DISABLE_REMOTING
1527 MonoRemoteClass*
1528 mono_remote_class (MonoDomain *domain, MonoStringHandle class_name, MonoClass *proxy_class, MonoError *error);
1529
1530 MonoObject *
1531 mono_remoting_invoke (MonoObject *real_proxy, MonoMethodMessage *msg, MonoObject **exc, MonoArray **out_args, MonoError *error);
1532
1533 gpointer
1534 mono_remote_class_vtable (MonoDomain *domain, MonoRemoteClass *remote_class, MonoRealProxyHandle real_proxy, MonoError *error);
1535
1536 gboolean
1537 mono_upgrade_remote_class (MonoDomain *domain, MonoObjectHandle tproxy, MonoClass *klass, MonoError *error);
1538
1539 void*
1540 mono_load_remote_field_checked (MonoObject *this_obj, MonoClass *klass, MonoClassField *field, void **res, MonoError *error);
1541
1542 MonoObject *
1543 mono_load_remote_field_new_checked (MonoObject *this_obj, MonoClass *klass, MonoClassField *field, MonoError *error);
1544
1545 gboolean
1546 mono_store_remote_field_checked (MonoObject *this_obj, MonoClass *klass, MonoClassField *field, void* val, MonoError *error);
1547
1548 gboolean
1549 mono_store_remote_field_new_checked (MonoObject *this_obj, MonoClass *klass, MonoClassField *field, MonoObject *arg, MonoError *error);
1550
1551
1552 #endif
1553
1554 gpointer
1555 mono_create_ftnptr (MonoDomain *domain, gpointer addr);
1556
1557 gpointer
1558 mono_get_addr_from_ftnptr (gpointer descr);
1559
1560 void
1561 mono_nullable_init (guint8 *buf, MonoObject *value, MonoClass *klass);
1562
1563 MonoObject *
1564 mono_value_box_checked (MonoDomain *domain, MonoClass *klass, void* val, MonoError *error);
1565
1566 MonoObject*
1567 mono_nullable_box (guint8 *buf, MonoClass *klass, MonoError *error);
1568
1569 #ifdef MONO_SMALL_CONFIG
1570 #define MONO_IMT_SIZE 9
1571 #else
1572 #define MONO_IMT_SIZE 19
1573 #endif
1574
1575 typedef union {
1576         int vtable_slot;
1577         gpointer target_code;
1578 } MonoImtItemValue;
1579
1580 typedef struct _MonoImtBuilderEntry {
1581         gpointer key;
1582         struct _MonoImtBuilderEntry *next;
1583         MonoImtItemValue value;
1584         int children;
1585         guint8 has_target_code : 1;
1586 } MonoImtBuilderEntry;
1587
1588 typedef struct _MonoIMTCheckItem MonoIMTCheckItem;
1589
1590 struct _MonoIMTCheckItem {
1591         gpointer          key;
1592         int               check_target_idx;
1593         MonoImtItemValue  value;
1594         guint8           *jmp_code;
1595         guint8           *code_target;
1596         guint8            is_equals;
1597         guint8            compare_done;
1598         guint8            chunk_size;
1599         guint8            short_branch;
1600         guint8            has_target_code;
1601 };
1602
1603 typedef gpointer (*MonoImtTrampolineBuilder) (MonoVTable *vtable, MonoDomain *domain,
1604                 MonoIMTCheckItem **imt_entries, int count, gpointer fail_trunk);
1605
1606 void
1607 mono_install_imt_trampoline_builder (MonoImtTrampolineBuilder func);
1608
1609 void
1610 mono_set_always_build_imt_trampolines (gboolean value);
1611
1612 void
1613 mono_vtable_build_imt_slot (MonoVTable* vtable, int imt_slot);
1614
1615 guint32
1616 mono_method_get_imt_slot (MonoMethod *method);
1617
1618 void
1619 mono_method_add_generic_virtual_invocation (MonoDomain *domain, MonoVTable *vtable,
1620                                                                                         gpointer *vtable_slot,
1621                                                                                         MonoMethod *method, gpointer code);
1622
1623 gpointer
1624 mono_method_alloc_generic_virtual_trampoline (MonoDomain *domain, int size);
1625
1626 typedef enum {
1627         MONO_UNHANDLED_POLICY_LEGACY,
1628         MONO_UNHANDLED_POLICY_CURRENT
1629 } MonoRuntimeUnhandledExceptionPolicy;
1630
1631 MonoRuntimeUnhandledExceptionPolicy
1632 mono_runtime_unhandled_exception_policy_get (void);
1633 void
1634 mono_runtime_unhandled_exception_policy_set (MonoRuntimeUnhandledExceptionPolicy policy);
1635
1636 MonoVTable *
1637 mono_class_try_get_vtable (MonoDomain *domain, MonoClass *klass);
1638
1639 gboolean
1640 mono_runtime_class_init_full (MonoVTable *vtable, MonoError *error);
1641
1642 void
1643 mono_method_clear_object (MonoDomain *domain, MonoMethod *method);
1644
1645 void
1646 mono_class_compute_gc_descriptor (MonoClass *klass);
1647
1648 gsize*
1649 mono_class_compute_bitmap (MonoClass *klass, gsize *bitmap, int size, int offset, int *max_set, gboolean static_fields);
1650
1651 MonoObject*
1652 mono_object_xdomain_representation (MonoObject *obj, MonoDomain *target_domain, MonoError *error);
1653
1654 gboolean
1655 mono_class_is_reflection_method_or_constructor (MonoClass *klass);
1656
1657 MonoObject *
1658 mono_get_object_from_blob (MonoDomain *domain, MonoType *type, const char *blob, MonoError *error);
1659
1660 MonoObjectHandle
1661 mono_class_get_ref_info (MonoClass *klass);
1662
1663 gboolean
1664 mono_class_has_ref_info (MonoClass *klass);
1665
1666 MonoObject*
1667 mono_class_get_ref_info_raw (MonoClass *klass);
1668
1669 void
1670 mono_class_set_ref_info (MonoClass *klass, MonoObjectHandle obj);
1671
1672 void
1673 mono_class_free_ref_info (MonoClass *klass);
1674
1675 MonoObject *
1676 mono_object_new_pinned (MonoDomain *domain, MonoClass *klass, MonoError *error);
1677
1678 MonoObject *
1679 mono_object_new_specific_checked (MonoVTable *vtable, MonoError *error);
1680
1681 MonoObject *
1682 ves_icall_object_new (MonoDomain *domain, MonoClass *klass);
1683         
1684 MonoObject *
1685 ves_icall_object_new_specific (MonoVTable *vtable);
1686
1687 MonoObject *
1688 mono_object_new_alloc_specific_checked (MonoVTable *vtable, MonoError *error);
1689
1690 void
1691 mono_field_static_get_value_checked (MonoVTable *vt, MonoClassField *field, void *value, MonoError *error);
1692
1693 void
1694 mono_field_static_get_value_for_thread (MonoInternalThread *thread, MonoVTable *vt, MonoClassField *field, void *value, MonoError *error);
1695
1696 MonoMethod*
1697 mono_object_handle_get_virtual_method (MonoObjectHandle obj, MonoMethod *method, MonoError *error);
1698
1699 /* exported, used by the debugger */
1700 MONO_API void *
1701 mono_vtable_get_static_field_data (MonoVTable *vt);
1702
1703 MonoObject *
1704 mono_field_get_value_object_checked (MonoDomain *domain, MonoClassField *field, MonoObject *obj, MonoError *error);
1705
1706 gboolean
1707 mono_property_set_value_checked (MonoProperty *prop, void *obj, void **params, MonoError *error);
1708
1709 MonoObject*
1710 mono_property_get_value_checked (MonoProperty *prop, void *obj, void **params, MonoError *error);
1711
1712 MonoString*
1713 mono_object_to_string_checked (MonoObject *obj, MonoError *error);
1714
1715 MonoString*
1716 mono_object_try_to_string (MonoObject *obj, MonoObject **exc, MonoError *error);
1717
1718 char *
1719 mono_string_to_utf8_ignore (MonoString *s);
1720
1721 char *
1722 mono_string_to_utf8_image_ignore (MonoImage *image, MonoString *s);
1723
1724 char *
1725 mono_string_to_utf8_mp_ignore (MonoMemPool *mp, MonoString *s);
1726
1727 gboolean
1728 mono_monitor_is_il_fastpath_wrapper (MonoMethod *method);
1729
1730 MonoString*
1731 mono_string_intern_checked (MonoString *str, MonoError *error);
1732
1733 char *
1734 mono_exception_handle_get_native_backtrace (MonoExceptionHandle exc);
1735
1736 MonoStringHandle
1737 ves_icall_Mono_Runtime_GetNativeStackTrace (MonoExceptionHandle exc, MonoError *erro);
1738
1739 char *
1740 mono_exception_get_managed_backtrace (MonoException *exc);
1741
1742 void
1743 mono_copy_value (MonoType *type, void *dest, void *value, int deref_pointer);
1744
1745 void
1746 mono_error_raise_exception (MonoError *target_error);
1747
1748 gboolean
1749 mono_error_set_pending_exception (MonoError *error);
1750
1751 MonoArray *
1752 mono_glist_to_array (GList *list, MonoClass *eclass, MonoError *error);
1753
1754 MonoObject *
1755 mono_object_new_checked (MonoDomain *domain, MonoClass *klass, MonoError *error);
1756
1757 MonoObject*
1758 mono_object_new_mature (MonoVTable *vtable, MonoError *error);
1759
1760 MonoObject*
1761 mono_object_new_fast_checked (MonoVTable *vtable, MonoError *error);
1762
1763 MonoObject *
1764 ves_icall_object_new_fast (MonoVTable *vtable);
1765
1766 MonoObject *
1767 mono_object_clone_checked (MonoObject *obj, MonoError *error);
1768
1769 MonoObject *
1770 mono_object_isinst_checked (MonoObject *obj, MonoClass *klass, MonoError *error);
1771
1772 MonoObjectHandle
1773 mono_object_handle_isinst (MonoObjectHandle obj, MonoClass *klass, MonoError *error);
1774
1775 MonoObjectHandle
1776 mono_object_handle_isinst_mbyref (MonoObjectHandle obj, MonoClass *klass, MonoError *error);
1777
1778 MonoString *
1779 mono_string_new_size_checked (MonoDomain *domain, gint32 len, MonoError *error);
1780
1781 MonoString*
1782 mono_ldstr_checked (MonoDomain *domain, MonoImage *image, uint32_t str_index, MonoError *error);
1783
1784 MonoString*
1785 mono_string_new_len_checked (MonoDomain *domain, const char *text, guint length, MonoError *error);
1786
1787 MonoString*
1788 mono_string_new_checked (MonoDomain *domain, const char *text, MonoError *merror);
1789
1790 MonoString *
1791 mono_string_new_utf16_checked (MonoDomain *domain, const guint16 *text, gint32 len, MonoError *error);
1792
1793 MonoStringHandle
1794 mono_string_new_utf16_handle (MonoDomain *domain, const guint16 *text, gint32 len, MonoError *error);
1795
1796 MonoString *
1797 mono_string_from_utf16_checked (mono_unichar2 *data, MonoError *error);
1798
1799 MonoString *
1800 mono_string_from_utf32_checked (mono_unichar4 *data, MonoError *error);
1801
1802 char*
1803 mono_ldstr_utf8 (MonoImage *image, guint32 idx, MonoError *error);
1804
1805 gboolean
1806 mono_runtime_object_init_checked (MonoObject *this_obj, MonoError *error);
1807
1808 MonoObject*
1809 mono_runtime_try_invoke (MonoMethod *method, void *obj, void **params, MonoObject **exc, MonoError *error);
1810
1811 MonoObject*
1812 mono_runtime_invoke_checked (MonoMethod *method, void *obj, void **params, MonoError *error);
1813
1814 MonoObject*
1815 mono_runtime_try_invoke_array (MonoMethod *method, void *obj, MonoArray *params,
1816                                MonoObject **exc, MonoError *error);
1817
1818 MonoObject*
1819 mono_runtime_invoke_array_checked (MonoMethod *method, void *obj, MonoArray *params,
1820                                    MonoError *error);
1821
1822 void* 
1823 mono_compile_method_checked (MonoMethod *method, MonoError *error);
1824
1825 MonoObject*
1826 mono_runtime_delegate_try_invoke (MonoObject *delegate, void **params,
1827                                   MonoObject **exc, MonoError *error);
1828
1829 MonoObject*
1830 mono_runtime_delegate_invoke_checked (MonoObject *delegate, void **params,
1831                                       MonoError *error);
1832
1833 MonoArray*
1834 mono_runtime_get_main_args_checked (MonoError *error);
1835
1836 int
1837 mono_runtime_run_main_checked (MonoMethod *method, int argc, char* argv[],
1838                                MonoError *error);
1839
1840 int
1841 mono_runtime_try_run_main (MonoMethod *method, int argc, char* argv[],
1842                            MonoObject **exc);
1843
1844 int
1845 mono_runtime_exec_main_checked (MonoMethod *method, MonoArray *args, MonoError *error);
1846
1847 int
1848 mono_runtime_try_exec_main (MonoMethod *method, MonoArray *args, MonoObject **exc);
1849
1850 MonoReflectionMethodHandle
1851 ves_icall_MonoMethod_MakeGenericMethod_impl (MonoReflectionMethodHandle rmethod, MonoArrayHandle types, MonoError *error);
1852
1853 gint32
1854 ves_icall_ModuleBuilder_getToken (MonoReflectionModuleBuilderHandle mb, MonoObjectHandle obj, gboolean create_open_instance, MonoError *error);
1855
1856 gint32
1857 ves_icall_ModuleBuilder_getMethodToken (MonoReflectionModuleBuilderHandle mb,
1858                                         MonoReflectionMethodHandle method,
1859                                         MonoArrayHandle opt_param_types,
1860                                         MonoError *error);
1861
1862 void
1863 ves_icall_ModuleBuilder_WriteToFile (MonoReflectionModuleBuilder *mb, gpointer file);
1864
1865 void
1866 ves_icall_ModuleBuilder_build_metadata (MonoReflectionModuleBuilder *mb);
1867
1868 void
1869 ves_icall_ModuleBuilder_RegisterToken (MonoReflectionModuleBuilderHandle mb, MonoObjectHandle obj, guint32 token, MonoError *error);
1870
1871 MonoObject*
1872 ves_icall_ModuleBuilder_GetRegisteredToken (MonoReflectionModuleBuilder *mb, guint32 token);
1873
1874 void
1875 ves_icall_AssemblyBuilder_basic_init (MonoReflectionAssemblyBuilder *assemblyb);
1876
1877 MonoReflectionModule*
1878 ves_icall_AssemblyBuilder_InternalAddModule (MonoReflectionAssemblyBuilder *ab, MonoString *fileName);
1879
1880 MonoArray*
1881 ves_icall_CustomAttributeBuilder_GetBlob (MonoReflectionAssembly *assembly, MonoObject *ctor, MonoArray *ctorArgs, MonoArray *properties, MonoArray *propValues, MonoArray *fields, MonoArray* fieldValues);
1882
1883 void
1884 ves_icall_DynamicMethod_create_dynamic_method (MonoReflectionDynamicMethodHandle mb, MonoError *error);
1885
1886 MonoReflectionTypeHandle
1887 ves_icall_TypeBuilder_create_runtime_class (MonoReflectionTypeBuilderHandle tb, MonoError *error);
1888
1889 void
1890 ves_icall_EnumBuilder_setup_enum_type (MonoReflectionType *enumtype,
1891                                                                            MonoReflectionType *t);
1892
1893 void
1894 ves_icall_ModuleBuilder_basic_init (MonoReflectionModuleBuilderHandle moduleb, MonoError *error);
1895
1896 guint32
1897 ves_icall_ModuleBuilder_getUSIndex (MonoReflectionModuleBuilderHandle module, MonoStringHandle str, MonoError *error);
1898
1899 void
1900 ves_icall_ModuleBuilder_set_wrappers_type (MonoReflectionModuleBuilder *moduleb, MonoReflectionType *type);
1901
1902 MonoAssembly*
1903 mono_try_assembly_resolve_handle (MonoDomain *domain, MonoStringHandle fname, MonoAssembly *requesting, gboolean refonly, MonoError *error);
1904
1905 #endif /* __MONO_OBJECT_INTERNALS_H__ */