1 /** 2 * \file 3 * Copyright 2016 Microsoft 4 * Licensed under the MIT license. See LICENSE file in the project root for full license information. 5 */ 6 #ifndef __MONO_METADATA_SRE_INTERNALS_H__ 7 #define __MONO_METADATA_SRE_INTERNALS_H__ 8 9 #include <mono/metadata/object-internals.h> 10 11 /* Keep in sync with System.Reflection.Emit.AssemblyBuilderAccess */ 12 enum MonoAssemblyBuilderAccess { 13 MonoAssemblyBuilderAccess_Run = 1, /* 0b0001 */ 14 MonoAssemblyBuilderAccess_Save = 2, /* 0b0010 */ 15 MonoAssemblyBuilderAccess_RunAndSave = 3, /* Run | Save */ 16 MonoAssemblyBuilderAccess_ReflectionOnly = 6, /* Refonly | Save */ 17 MonoAssemblyBuilderAccess_RunAndCollect = 9, /* Collect | Run */ 18 }; 19 20 typedef struct _ArrayMethod ArrayMethod; 21 22 typedef struct { 23 guint32 owner; 24 MonoReflectionGenericParam *gparam; 25 } GenericParamTableEntry; 26 27 typedef struct { 28 MonoReflectionILGen *ilgen; 29 MonoReflectionType *rtype; 30 MonoArray *parameters; 31 MonoArray *generic_params; 32 MonoGenericContainer *generic_container; 33 MonoArray *pinfo; 34 MonoArray *opt_types; 35 guint32 attrs; 36 guint32 iattrs; 37 guint32 call_conv; 38 guint32 *table_idx; /* note: it's a pointer */ 39 MonoArray *code; 40 MonoObject *type; 41 MonoString *name; 42 MonoBoolean init_locals; 43 MonoBoolean skip_visibility; 44 MonoArray *return_modreq; 45 MonoArray *return_modopt; 46 MonoArray *param_modreq; 47 MonoArray *param_modopt; 48 MonoArray *permissions; 49 MonoMethod *mhandle; 50 guint32 nrefs; 51 gpointer *refs; 52 /* for PInvoke */ 53 int charset, extra_flags, native_cc; 54 MonoString *dll, *dllentry; 55 } ReflectionMethodBuilder; /* FIXME raw pointers to managed objects */ 56 57 void 58 mono_reflection_emit_init (void); 59 60 void 61 mono_reflection_dynimage_basic_init (MonoReflectionAssemblyBuilder *assemblyb); 62 63 gpointer 64 mono_image_g_malloc0 (MonoImage *image, guint size); 65 66 gboolean 67 mono_is_sre_type_builder (MonoClass *klass); 68 69 gboolean 70 mono_is_sre_generic_instance (MonoClass *klass); 71 72 gboolean 73 mono_is_sre_method_on_tb_inst (MonoClass *klass); 74 75 gboolean 76 mono_is_sre_ctor_builder (MonoClass *klass); 77 78 gboolean 79 mono_is_sre_ctor_on_tb_inst (MonoClass *klass); 80 81 gboolean 82 mono_is_sr_mono_cmethod (MonoClass *klass); 83 84 gboolean 85 mono_is_sr_mono_property (MonoClass *klass); 86 87 MonoType* 88 mono_reflection_type_get_handle (MonoReflectionType *ref, MonoError *error); 89 90 gpointer 91 mono_reflection_resolve_object (MonoImage *image, MonoObject *obj, MonoClass **handle_class, MonoGenericContext *context, MonoError *error); 92 93 MonoType* mono_type_array_get_and_resolve (MonoArrayHandle array, int idx, MonoError* error); 94 95 void 96 mono_sre_array_method_free (ArrayMethod *am); 97 98 void 99 mono_sre_generic_param_table_entry_free (GenericParamTableEntry *entry); 100 101 gboolean 102 mono_reflection_methodbuilder_from_method_builder (ReflectionMethodBuilder *rmb, MonoReflectionMethodBuilder *mb, 103 MonoError *error); 104 gboolean 105 mono_reflection_methodbuilder_from_ctor_builder (ReflectionMethodBuilder *rmb, MonoReflectionCtorBuilder *mb, 106 MonoError *error); 107 108 guint32 109 mono_reflection_resolution_scope_from_image (MonoDynamicImage *assembly, MonoImage *image); 110 111 guint32 mono_reflection_method_count_clauses (MonoReflectionILGen *ilgen); 112 113 114 /* sre-encode */ 115 116 guint32 117 mono_dynimage_encode_field_signature (MonoDynamicImage *assembly, MonoReflectionFieldBuilder *fb, MonoError *error); 118 119 guint32 120 mono_dynimage_encode_constant (MonoDynamicImage *assembly, MonoObject *val, MonoTypeEnum *ret_type); 121 122 guint32 123 mono_dynimage_encode_locals (MonoDynamicImage *assembly, MonoReflectionILGen *ilgen, MonoError *error); 124 125 guint32 126 mono_dynimage_encode_fieldref_signature (MonoDynamicImage *assembly, MonoImage *field_image, MonoType *type); 127 128 guint32 129 mono_dynimage_encode_method_signature (MonoDynamicImage *assembly, MonoMethodSignature *sig); 130 131 guint32 132 mono_dynimage_encode_method_builder_signature (MonoDynamicImage *assembly, ReflectionMethodBuilder *mb, 133 MonoError *error); 134 135 guint32 136 mono_dynimage_encode_generic_method_sig (MonoDynamicImage *assembly, MonoGenericContext *context); 137 138 guint32 139 mono_dynimage_encode_typedef_or_ref_full (MonoDynamicImage *assembly, MonoType *type, gboolean try_typespec); 140 141 guint32 142 mono_dynimage_encode_reflection_sighelper (MonoDynamicImage *assembly, MonoReflectionSigHelperHandle helper, 143 MonoError *error); 144 145 /* sre-encode, without DISABLE_REFLECTION_EMIT_SAVE (o.w. g_assert_not_reached ()) */ 146 147 guint32 148 mono_dynimage_save_encode_marshal_blob (MonoDynamicImage *assembly, MonoReflectionMarshal *minfo, MonoError *error); 149 150 guint32 151 mono_dynimage_save_encode_property_signature (MonoDynamicImage *assembly, MonoReflectionPropertyBuilder *fb, MonoError *error); 152 153 guint32 154 mono_image_get_methodref_token (MonoDynamicImage *assembly, MonoMethod *method, gboolean create_typespec); 155 156 #endif /* __MONO_METADATA_SRE_INTERNALS_H__ */ 157 158