#include <mono/metadata/object.h>
#include <mono/metadata/reflection.h>
+#include <mono/io-layer/io-layer.h>
#if 1
#ifdef __GNUC__
}; }G_STMT_END
-#define mono_stringbuilder_capacity(sb) ((sb)->str->length)
+/* 16 == default capacity */
+#define mono_stringbuilder_capacity(sb) ((sb)->str ? ((sb)->str->length) : 16)
typedef struct {
MonoObject obj;
MonoObject object;
gint32 length;
MonoString *str;
+ MonoString *cached_str;
+ gint32 max_capacity;
} MonoStringBuilder;
typedef struct {
MonoBoolean completed;
MonoBoolean endinvoke_called;
MonoObject *async_callback;
+ MonoObject *execution_context;
+ MonoObject *original_context;
} MonoAsyncResult;
typedef struct {
MonoReflectionType *class_to_proxy;
MonoObject *context;
MonoObject *unwrapped_server;
+ gint32 target_domain_id;
+ MonoString *target_uri;
} MonoRealProxy;
typedef struct {
MonoString *filename;
gint32 line;
gint32 column;
+ MonoString *internal_method_name;
} MonoStackFrame;
struct _MonoThread {
MonoObject obj;
+ int lock_thread_id; /* to be used as the pre-shifted thread id in thin locks */
HANDLE handle;
- MonoObject *culture_info;
- MonoObject *ui_culture_info;
+ MonoObject **culture_info;
+ MonoObject **ui_culture_info;
MonoBoolean threadpool_thread;
gunichar2 *name;
guint32 name_len;
gpointer *static_data;
gpointer jit_data;
gpointer lock_data;
+ MonoAppContext *current_appcontext;
+ int stack_size;
+ MonoObject *start_obj;
GSList *appdomain_refs;
MonoBoolean interruption_requested;
gpointer suspend_event;
+ gpointer suspended_event;
gpointer resume_event;
MonoObject *synch_lock;
+ guint8* serialized_culture_info;
+ guint32 serialized_culture_info_len;
+ guint8* serialized_ui_culture_info;
+ guint32 serialized_ui_culture_info_len;
+ MonoObject *execution_context;
+ /*
+ * These fields are used to avoid having to increment corlib versions
+ * when a new field is added to the unmanaged MonoThread structure.
+ */
+ gpointer unused1;
+ gpointer unused2;
+ gpointer unused3;
+ gpointer unused4;
+ gpointer unused5;
+ gpointer unused6;
+ gpointer unused7;
};
typedef struct {
MonoString *win3lang;
MonoCompareInfo *compareinfo;
const gint32 *calendar_data;
+ const void* text_info_data;
} MonoCultureInfo;
typedef struct {
gint32 lcid;
} MonoSortKey;
+/* used to free a dynamic method */
+typedef void (*MonoFreeMethodFunc) (MonoDomain *domain, MonoMethod *method);
+
+/* Used to initialize the method pointers inside vtables */
+typedef gboolean (*MonoInitVTableFunc) (MonoVTable *vtable);
+
/* remoting and async support */
MonoAsyncResult *
void
mono_delegate_ctor (MonoObject *this_obj, MonoObject *target, gpointer addr);
+void*
+mono_class_get_allocation_ftn (MonoVTable *vtable, gboolean for_box, gboolean *pass_size_in_words);
+
+void
+mono_runtime_free_method (MonoDomain *domain, MonoMethod *method);
+
/* runtime initialization functions */
typedef void (*MonoExceptionFunc) (MonoException *ex);
void
mono_install_compile_method (MonoCompileFunc func);
+void
+mono_install_free_method (MonoFreeMethodFunc func);
+
+void
+mono_install_init_vtable (MonoInitVTableFunc func);
+
void
mono_type_initialization_init (void);
+guint32
+mono_thread_get_tls_key (void);
+
+gint32
+mono_thread_get_tls_offset (void);
+
+guint32
+mono_domain_get_tls_key (void);
+
+gint32
+mono_domain_get_tls_offset (void);
+
/* Reflection and Reflection.Emit support */
/*
- * The followinbg structure must match the C# implementation in our corlib.
+ * The following structure must match the C# implementation in our corlib.
*/
struct _MonoReflectionMethod {
MonoReflectionType *reftype;
};
+typedef struct _MonoReflectionGenericMethod MonoReflectionGenericMethod;
+struct _MonoReflectionGenericMethod {
+ MonoReflectionMethod method;
+};
+
struct _MonoDelegate {
MonoObject object;
MonoObject *target_type;
MonoString *NameImpl;
gint32 PositionImpl;
guint32 AttrsImpl;
+ MonoObject *MarshalAsImpl;
} MonoReflectionParameter;
+struct _MonoReflectionMethodBody {
+ MonoObject object;
+ MonoArray *clauses;
+ MonoArray *locals;
+ MonoArray *il;
+ MonoBoolean init_locals;
+ guint32 local_var_sig_token;
+ guint32 max_stack;
+};
+
struct _MonoReflectionAssembly {
MonoObject object;
MonoAssembly *assembly;
MonoObject *resolve_event_holder;
+ /* CAS related */
+ MonoObject *evidence; /* Evidence */
+ MonoObject *minimum; /* PermissionSet - for SecurityAction.RequestMinimum */
+ MonoObject *optional; /* PermissionSet - for SecurityAction.RequestOptional */
+ MonoObject *refuse; /* PermissionSet - for SecurityAction.RequestRefuse */
+ MonoObject *granted; /* PermissionSet - for the resolved assembly granted permissions */
+ MonoObject *denied; /* PermissionSet - for the resolved assembly denied permissions */
+ /* */
+ MonoBoolean from_byte_array;
};
typedef struct {
MonoReflectionMethod *remove_method;
MonoReflectionMethod *raise_method;
guint32 attrs;
+ MonoArray *other_methods;
} MonoEventInfo;
typedef struct {
typedef struct {
MonoObject object;
+ MonoReflectionType *catch_type;
+ gint32 filter_offset;
+ gint32 flags;
+ gint32 try_offset;
+ gint32 try_length;
+ gint32 handler_offset;
+ gint32 handler_length;
+} MonoReflectionExceptionHandlingClause;
+
+typedef struct {
+ MonoObject object;
+ MonoReflectionType *local_type;
+ MonoBoolean is_pinned;
+ guint16 local_index;
+} MonoReflectionLocalVariableInfo;
+
+typedef struct {
+ /*
+ * Must have the same layout as MonoReflectionLocalVariableInfo, since
+ * LocalBuilder inherits from it under net 2.0.
+ */
+ MonoObject object;
MonoReflectionType *type;
- MonoString *name;
MonoBoolean is_pinned;
+ guint16 local_index;
+ MonoString *name;
} MonoReflectionLocalBuilder;
typedef struct {
MonoString *mcookie;
MonoString *marshaltype;
MonoReflectionType *marshaltyperef;
+ gint32 param_num;
+ MonoBoolean has_size;
} MonoReflectionMarshal;
typedef struct {
guint32 attrs;
int position;
guint32 table_idx;
+ MonoObject *def_value;
} MonoReflectionParamBuilder;
typedef struct {
MonoString *dll;
MonoString *dllentry;
guint32 charset;
+ guint32 extra_flags;
guint32 native_cc;
guint32 call_conv;
MonoBoolean init_locals;
+ MonoGenericContainer *generic_container;
MonoArray *generic_params;
MonoArray *return_modreq;
MonoArray *return_modopt;
guint32 access;
MonoArray *loaded_modules;
MonoArray *win32_resources;
+ /* CAS related */
+ MonoArray *permissions_minimum;
+ MonoArray *permissions_optional;
+ MonoArray *permissions_refused;
+ gint32 pe_kind;
+ gint32 machine;
+ MonoBoolean corlib_internal;
} MonoReflectionAssemblyBuilder;
typedef struct {
MonoString *name;
MonoString *scopename;
MonoBoolean is_resource;
+ guint32 token;
};
typedef struct {
MonoReflectionModuleBuilder *module;
gint32 class_size;
gint32 packing_size;
+ MonoGenericContainer *generic_container;
MonoArray *generic_params;
MonoArray *permissions;
+ MonoReflectionType *created;
} MonoReflectionTypeBuilder;
typedef struct {
guint32 index;
MonoReflectionType *base_type;
MonoArray *iface_constraints;
- MonoBoolean has_ctor_constraint;
- MonoBoolean has_reference_type;
- MonoBoolean has_value_type;
+ guint32 attrs;
} MonoReflectionGenericParam;
-typedef struct _MonoReflectionGenericInst MonoReflectionGenericInst;
-struct _MonoReflectionGenericInst {
+typedef struct _MonoReflectionGenericClass MonoReflectionGenericClass;
+struct _MonoReflectionGenericClass {
MonoReflectionType type;
MonoReflectionType *generic_type;
guint32 initialized;
MonoString *name;
MonoString *codebase;
gint32 major, minor, build, revision;
- /* FIXME: add missing stuff */
-/* CultureInfo cultureinfo;
- AssemblyNameFlags flags;
- AssemblyHashAlgorithm hashalg;
- StrongNameKeyPair keypair;
- AssemblyVersionCompatibility versioncompat;*/
MonoObject *cultureInfo;
guint32 flags;
guint32 hashalg;
MonoObject *keypair;
MonoArray *publicKey;
MonoArray *keyToken;
- MonoObject *versioncompat;
+ guint32 versioncompat;
+ MonoObject *version;
} MonoReflectionAssemblyName;
typedef struct {
MonoArray *data;
} MonoReflectionCustomAttr;
+typedef struct {
+ MonoObject object;
+ gint32 call_conv;
+ gint32 charset;
+ MonoString *dll;
+ MonoString *entry_point;
+ MonoBoolean exact_spelling;
+ MonoBoolean preserve_sig;
+ MonoBoolean set_last_error;
+ MonoBoolean best_fit_mapping;
+ MonoBoolean throw_on_unmappable;
+} MonoReflectionDllImportAttribute;
+
+typedef struct {
+ MonoObject object;
+ gint32 call_conv;
+ gint32 charset;
+ MonoBoolean set_last_error;
+ MonoBoolean best_fit_mapping;
+ MonoBoolean throw_on_unmappable;
+} MonoReflectionUnmanagedFunctionPointerAttribute;
+
typedef struct {
MonoObject object;
MonoMethod *mhandle;
guint32 location;
} MonoManifestResourceInfo;
-void mono_image_create_pefile (MonoReflectionModuleBuilder *module);
+/* Keep in sync with System.GenericParameterAttributes */
+typedef enum {
+ GENERIC_PARAMETER_ATTRIBUTE_NON_VARIANT = 0,
+ GENERIC_PARAMETER_ATTRIBUTE_COVARIANT = 1,
+ GENERIC_PARAMETER_ATTRIBUTE_CONTRAVARIANT = 2,
+ GENERIC_PARAMETER_ATTRIBUTE_VARIANCE_MASK = 3,
+
+ GENERIC_PARAMETER_ATTRIBUTE_NO_SPECIAL_CONSTRAINT = 0,
+ GENERIC_PARAMETER_ATTRIBUTE_REFERENCE_TYPE_CONSTRAINT = 4,
+ GENERIC_PARAMETER_ATTRIBUTE_VALUE_TYPE_CONSTRAINT = 8,
+ GENERIC_PARAMETER_ATTRIBUTE_CONSTRUCTOR_CONSTRAINT = 16,
+ GENERIC_PARAMETER_ATTRIBUTE_SPECIAL_CONSTRAINTS_MASK = 28
+} GenericParameterAttributes;
+
+void mono_image_create_pefile (MonoReflectionModuleBuilder *module, HANDLE file);
void mono_image_basic_init (MonoReflectionAssemblyBuilder *assembly);
MonoReflectionModule * mono_image_load_module (MonoReflectionAssemblyBuilder *assembly, MonoString *file_name);
guint32 mono_image_insert_string (MonoReflectionModuleBuilder *module, MonoString *str);
-guint32 mono_image_create_token (MonoDynamicImage *assembly, MonoObject *obj);
+guint32 mono_image_create_token (MonoDynamicImage *assembly, MonoObject *obj, gboolean create_methodspec);
guint32 mono_image_create_method_token (MonoDynamicImage *assembly, MonoObject *obj, MonoArray *opt_param_types);
void mono_image_module_basic_init (MonoReflectionModuleBuilder *module);
void mono_reflection_setup_generic_class (MonoReflectionTypeBuilder *tb);
+void mono_reflection_create_generic_class (MonoReflectionTypeBuilder *tb);
+
MonoReflectionType* mono_reflection_create_runtime_class (MonoReflectionTypeBuilder *tb);
void mono_reflection_create_dynamic_method (MonoReflectionDynamicMethod *m);
void mono_reflection_initialize_generic_parameter (MonoReflectionGenericParam *gparam);
+MonoType*
+mono_class_bind_generic_parameters (MonoType *type, int type_argc, MonoType **types);
MonoType*
mono_reflection_bind_generic_parameters (MonoReflectionType *type, int type_argc, MonoType **types);
MonoReflectionMethod*
mono_reflection_bind_generic_method_parameters (MonoReflectionMethod *method, MonoArray *types);
void
-mono_reflection_generic_inst_initialize (MonoReflectionGenericInst *type, MonoArray *methods, MonoArray *ctors, MonoArray *fields, MonoArray *properties, MonoArray *events);
+mono_reflection_generic_class_initialize (MonoReflectionGenericClass *type, MonoArray *methods, MonoArray *ctors, MonoArray *fields, MonoArray *properties, MonoArray *events);
MonoReflectionEvent *
mono_reflection_event_builder_get_event_info (MonoReflectionTypeBuilder *tb, MonoReflectionEventBuilder *eb);
MonoArray *mono_reflection_sighelper_get_signature_field (MonoReflectionSigHelper *sig);
+MonoReflectionMarshal* mono_reflection_marshal_from_marshal_spec (MonoDomain *domain, MonoClass *klass, MonoMarshalSpec *spec);
+
gpointer
-mono_reflection_lookup_dynamic_token (MonoImage *image, guint32 token);
+mono_reflection_lookup_dynamic_token (MonoImage *image, guint32 token, MonoClass **handle_class);
+
+gboolean
+mono_reflection_call_is_assignable_to (MonoClass *klass, MonoClass *oklass);
void
mono_image_build_metadata (MonoReflectionModuleBuilder *module);
+int
+mono_get_constant_value_from_blob (MonoDomain* domain, MonoTypeEnum type, const char *blob, void *value);
+
+void
+mono_release_type_locks (MonoThread *thread);
+
+MonoArray*
+mono_array_clone_in_domain (MonoDomain *domain, MonoArray *array);
+
+void
+mono_array_full_copy (MonoArray *src, MonoArray *dest);
+
+gpointer
+mono_remote_class_vtable (MonoDomain *domain, MonoRemoteClass *remote_class, MonoRealProxy *real_proxy);
+
+MonoMethodSignature*
+mono_method_get_signature_full (MonoMethod *method, MonoImage *image, guint32 token, MonoGenericContext *context);
+
+void
+mono_upgrade_remote_class (MonoDomain *domain, MonoObject *tproxy, MonoClass *klass);
+
#endif /* __MONO_OBJECT_INTERNALS_H__ */