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