#include <mono/metadata/threads-types.h>
#if 1
+#ifdef __GNUC__
#define mono_assert(expr) G_STMT_START{ \
if (!(expr)) \
{ \
g_free (msg); \
mono_raise_exception (ex); \
}G_STMT_END
+#else /* not GNUC */
+#define mono_assert(expr) G_STMT_START{ \
+ if (!(expr)) \
+ { \
+ MonoException *ex; \
+ char *msg = g_strdup_printf ("file %s: line %d: " \
+ "assertion failed: (%s)", __FILE__, __LINE__, \
+ #expr); \
+ ex = mono_get_exception_execution_engine (msg); \
+ g_free (msg); \
+ mono_raise_exception (ex); \
+ }; }G_STMT_END
+
+#define mono_assert_not_reached() G_STMT_START{ \
+ MonoException *ex; \
+ char *msg = g_strdup_printf ("file %s: line %d): " \
+ "should not be reached", __FILE__, __LINE__); \
+ ex = mono_get_exception_execution_engine (msg); \
+ g_free (msg); \
+ mono_raise_exception (ex); \
+}G_STMT_END
+#endif
#else
#define mono_assert(expr) g_assert(expr)
#define mono_assert_not_reached() g_assert_not_reached()
typedef struct {
MonoObject object;
- gint32 capacity;
gint32 length;
- MonoArray *chars;
+ MonoString *str;
} MonoStringBuilder;
typedef struct {
MonoType *type;
} MonoReflectionType;
+typedef struct {
+ MonoType *type;
+ gpointer value;
+ MonoClass *klass;
+} MonoTypedRef;
+
+typedef struct {
+ gpointer args;
+} MonoArgumentHandle;
+
+typedef struct {
+ MonoMethodSignature *sig;
+ gpointer args;
+ gint32 next_arg;
+ gint32 num_args;
+} MonoArgIterator;
+
typedef struct {
MonoObject object;
MonoArray *trace_ips;
MonoString *class_name;
MonoString *stack_trace;
MonoString *remote_stack_trace;
- gint32 *remote_stack_index;
+ gint32 remote_stack_index;
gint32 hresult;
MonoString *source;
} MonoException;
MonoString *param_name;
} MonoArgumentException;
+typedef struct {
+ MonoSystemException base;
+ MonoString *msg;
+ MonoString *type_name;
+} MonoTypeLoadException;
+
typedef struct {
MonoObject object;
MonoObject *async_state;
MonoObject object;
MonoRealProxy *rp;
MonoClass *klass;
+ MonoBoolean custom_type_info;
} MonoTransparentProxy;
+/* This is a copy of System.Runtime.Remoting.Messaging.CallType */
+typedef enum {
+ CallType_Sync = 0,
+ CallType_BeginInvoke = 1,
+ CallType_EndInvoke = 2,
+ CallType_OneWay = 3
+} MonoCallType;
+
typedef struct {
MonoObject obj;
MonoReflectionMethod *method;
MonoObject *ctx;
MonoObject *rval;
MonoObject *exc;
+ MonoAsyncResult *async_result;
+ guint32 call_type;
} MonoMethodMessage;
typedef struct {
MonoObject obj;
HANDLE handle;
MonoObject *culture_info;
+ MonoObject *ui_culture_info;
MonoBoolean threadpool_thread;
guint32 state;
MonoException *abort_exc;
HANDLE start_notify;
gpointer stack_ptr;
gpointer *static_data;
+ gpointer jit_data;
+ gpointer lock_data;
+ GSList *appdomain_refs;
} MonoThread;
typedef struct {
MonoObject *additional;
} MonoStreamingContext;
+typedef struct {
+ MonoObject obj;
+ MonoBoolean readOnly;
+ MonoString *AMDesignator;
+ MonoString *PMDesignator;
+ MonoString *DateSeparator;
+ MonoString *TimeSeparator;
+ MonoString *ShortDatePattern;
+ MonoString *LongDatePattern;
+ MonoString *ShortTimePattern;
+ MonoString *LongTimePattern;
+ MonoString *MonthDayPattern;
+ MonoString *YearMonthPattern;
+ MonoString *FullDateTimePattern;
+ MonoString *RFC1123Pattern;
+ MonoString *SortableDateTimePattern;
+ MonoString *UniversalSortableDateTimePattern;
+ guint32 FirstDayOfWeek;
+ MonoObject *Calendar;
+ guint32 CalendarWeekRule;
+ MonoArray *AbbreviatedDayNames;
+ MonoArray *DayNames;
+ MonoArray *MonthNames;
+ MonoArray *AbbreviatedMonthNames;
+} MonoDateTimeFormatInfo;
+
+typedef struct
+{
+ MonoObject obj;
+ MonoBoolean readOnly;
+ MonoString *decimalFormats;
+ MonoString *currencyFormats;
+ MonoString *percentFormats;
+ MonoString *digitPattern;
+ MonoString *zeroPattern;
+ gint32 currencyDecimalDigits;
+ MonoString *currencyDecimalSeparator;
+ MonoString *currencyGroupSeparator;
+ MonoArray *currencyGroupSizes;
+ gint32 currencyNegativePattern;
+ gint32 currencyPositivePattern;
+ MonoString *currencySymbol;
+ MonoString *naNSymbol;
+ MonoString *negativeInfinitySymbol;
+ MonoString *negativeSign;
+ guint32 numberDecimalDigits;
+ MonoString *numberDecimalSeparator;
+ MonoString *numberGroupSeparator;
+ MonoArray *numberGroupSizes;
+ gint32 numberNegativePattern;
+ gint32 percentDecimalDigits;
+ MonoString *percentDecimalSeparator;
+ MonoString *percentGroupSeparator;
+ MonoArray *percentGroupSizes;
+ gint32 percentNegativePattern;
+ gint32 percentPositivePattern;
+ MonoString *percentSymbol;
+ MonoString *perMilleSymbol;
+ MonoString *positiveInfinitySymbol;
+ MonoString *positiveSign;
+} MonoNumberFormatInfo;
+
+typedef struct {
+ MonoObject obj;
+ gint32 lcid;
+ gpointer ICU_collator;
+} MonoCompareInfo;
+
+typedef struct {
+ MonoObject obj;
+ MonoBoolean is_read_only;
+ gint32 lcid;
+ MonoBoolean use_user_override;
+ MonoNumberFormatInfo *number_format;
+ MonoDateTimeFormatInfo *datetime_format;
+ MonoObject *textinfo;
+ MonoString *name;
+ MonoString *displayname;
+ MonoString *englishname;
+ MonoString *nativename;
+ MonoString *iso3lang;
+ MonoString *iso2lang;
+ MonoString *icu_name;
+ MonoString *win3lang;
+ MonoCompareInfo *compareinfo;
+} MonoCultureInfo;
+
+typedef struct {
+ MonoObject obj;
+ MonoString *str;
+ gint32 options;
+ MonoArray *key;
+ gint32 lcid;
+} MonoSortKey;
+
typedef MonoObject* (*MonoInvokeFunc) (MonoMethod *method, void *obj, void **params, MonoObject **exc);
typedef gpointer (*MonoCompileFunc) (MonoMethod *method);
typedef void (*MonoMainThreadFunc) (gpointer user_data);
#define mono_string_chars(s) ((gunichar2*)(s)->chars)
#define mono_string_length(s) ((s)->length)
-
-void *
-mono_object_allocate (size_t size);
+#define mono_stringbuilder_capacity(sb) ((sb)->str->length)
MonoObject *
mono_object_new (MonoDomain *domain, MonoClass *klass);
MonoObject *
mono_object_new_specific (MonoVTable *vtable);
+/* can be used for classes without finalizer in non-profiling mode */
+MonoObject *
+mono_object_new_fast (MonoVTable *vtable);
+
MonoObject *
mono_object_new_alloc_specific (MonoVTable *vtable);
MonoObject *
mono_value_box (MonoDomain *domain, MonoClass *klass, gpointer val);
-
+
+gpointer
+mono_object_unbox (MonoObject *obj);
+
MonoObject *
mono_object_clone (MonoObject *obj);
MonoObject *
mono_object_isinst (MonoObject *obj, MonoClass *klass);
+MonoObject *
+mono_object_isinst_mbyref (MonoObject *obj, MonoClass *klass);
+
+MonoObject *
+mono_object_castclass_mbyref (MonoObject *obj, MonoClass *klass);
+
typedef void (*MonoExceptionFunc) (MonoException *ex);
void
mono_runtime_object_init (MonoObject *this_obj);
void
-mono_runtime_class_init (MonoClass *klass);
+mono_runtime_class_init (MonoVTable *vtable);
void
mono_install_runtime_invoke (MonoInvokeFunc func);
void
mono_field_static_get_value (MonoVTable *vt, MonoClassField *field, void *value);
+MonoObject *
+mono_field_get_value_object (MonoDomain *domain, MonoClassField *field, MonoObject *obj);
+
void
mono_property_set_value (MonoProperty *prop, void *obj, void **params, MonoObject **exc);