Merge pull request #3426 from ntherning/fix-handle-leak-in-DirectoryInfo.EnumerateFil...
[mono.git] / mono / metadata / sre-internals.h
1 /* 
2  * Copyright 2016 Microsoft
3  * Licensed under the MIT license. See LICENSE file in the project root for full license information.
4  */
5 #ifndef __MONO_METADATA_SRE_INTERNALS_H__
6 #define __MONO_METADATA_SRE_INTERNALS_H__
7
8 #include <mono/metadata/object-internals.h>
9
10 typedef struct _ArrayMethod ArrayMethod;
11
12 typedef struct {
13         guint32 owner;
14         MonoReflectionGenericParam *gparam;
15 } GenericParamTableEntry;
16
17 typedef struct {
18         MonoReflectionILGen *ilgen;
19         MonoReflectionType *rtype;
20         MonoArray *parameters;
21         MonoArray *generic_params;
22         MonoGenericContainer *generic_container;
23         MonoArray *pinfo;
24         MonoArray *opt_types;
25         guint32 attrs;
26         guint32 iattrs;
27         guint32 call_conv;
28         guint32 *table_idx; /* note: it's a pointer */
29         MonoArray *code;
30         MonoObject *type;
31         MonoString *name;
32         MonoBoolean init_locals;
33         MonoBoolean skip_visibility;
34         MonoArray *return_modreq;
35         MonoArray *return_modopt;
36         MonoArray *param_modreq;
37         MonoArray *param_modopt;
38         MonoArray *permissions;
39         MonoMethod *mhandle;
40         guint32 nrefs;
41         gpointer *refs;
42         /* for PInvoke */
43         int charset, extra_flags, native_cc;
44         MonoString *dll, *dllentry;
45 } ReflectionMethodBuilder;
46
47 void
48 mono_reflection_emit_init (void);
49
50 void
51 mono_reflection_dynimage_basic_init (MonoReflectionAssemblyBuilder *assemblyb);
52
53 gpointer
54 mono_image_g_malloc0 (MonoImage *image, guint size);
55
56 gboolean
57 mono_is_sre_type_builder (MonoClass *klass);
58
59 gboolean
60 mono_is_sre_generic_instance (MonoClass *klass);
61
62 gboolean
63 mono_is_sre_method_on_tb_inst (MonoClass *klass);
64
65 gboolean
66 mono_is_sre_ctor_builder (MonoClass *klass);
67
68 gboolean
69 mono_is_sre_ctor_on_tb_inst (MonoClass *klass);
70
71 gboolean
72 mono_is_sr_field_on_inst (MonoClassField *field);
73
74 gboolean
75 mono_is_sr_mono_cmethod (MonoClass *klass);
76
77 gboolean
78 mono_is_sr_mono_property (MonoClass *klass);
79
80 gboolean
81 mono_reflection_create_generic_class (MonoReflectionTypeBuilder *tb, MonoError *error);
82
83 MonoMethod*
84 mono_reflection_method_builder_to_mono_method (MonoReflectionMethodBuilder *mb, MonoError *error);
85
86 MonoType*
87 mono_reflection_get_field_on_inst_generic_type (MonoClassField *field);
88
89 MonoMethod*
90 mono_reflection_method_on_tb_inst_get_handle (MonoReflectionMethodOnTypeBuilderInst *m, MonoError *error);
91
92 gpointer
93 mono_reflection_resolve_object (MonoImage *image, MonoObject *obj, MonoClass **handle_class, MonoGenericContext *context, 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 void
109 mono_reflection_init_type_builder_generics (MonoObject *type, MonoError *error);
110                                                             
111 guint32
112 mono_reflection_resolution_scope_from_image (MonoDynamicImage *assembly, MonoImage *image);
113
114 void mono_reflection_check_array_for_usertypes (MonoArray *arr, MonoError *error);
115
116 guint32 mono_reflection_method_count_clauses (MonoReflectionILGen *ilgen);
117
118
119 /* sre-encode */
120
121 guint32
122 mono_dynimage_encode_field_signature (MonoDynamicImage *assembly, MonoReflectionFieldBuilder *fb, MonoError *error);
123
124 guint32
125 mono_dynimage_encode_constant (MonoDynamicImage *assembly, MonoObject *val, MonoTypeEnum *ret_type);
126
127 guint32
128 mono_dynimage_encode_locals (MonoDynamicImage *assembly, MonoReflectionILGen *ilgen, MonoError *error);
129
130 guint32
131 mono_dynimage_encode_fieldref_signature (MonoDynamicImage *assembly, MonoImage *field_image, MonoType *type);
132
133 guint32
134 mono_dynimage_encode_method_signature (MonoDynamicImage *assembly, MonoMethodSignature *sig);
135
136 guint32
137 mono_dynimage_encode_method_builder_signature (MonoDynamicImage *assembly, ReflectionMethodBuilder *mb,
138                                                MonoError *error);
139
140 guint32
141 mono_dynimage_encode_generic_method_definition_sig (MonoDynamicImage *assembly, MonoReflectionMethodBuilder *mb);
142
143 guint32
144 mono_dynimage_encode_generic_method_sig (MonoDynamicImage *assembly, MonoGenericContext *context);
145
146 guint32
147 mono_dynimage_encode_generic_typespec (MonoDynamicImage *assembly, MonoReflectionTypeBuilder *tb, MonoError *error);
148
149 guint32
150 mono_dynimage_encode_typedef_or_ref_full (MonoDynamicImage *assembly, MonoType *type, gboolean try_typespec);
151
152 guint32
153 mono_dynimage_encode_reflection_sighelper (MonoDynamicImage *assembly, MonoReflectionSigHelper *helper,
154                                            MonoError *error);
155
156 /* sre-encode, without DISABLE_REFLECTION_EMIT_SAVE (o.w. g_assert_not_reached ()) */
157
158 guint32
159 mono_dynimage_save_encode_marshal_blob (MonoDynamicImage *assembly, MonoReflectionMarshal *minfo, MonoError *error);
160
161 guint32
162 mono_dynimage_save_encode_property_signature (MonoDynamicImage *assembly, MonoReflectionPropertyBuilder *fb, MonoError *error);
163
164 #endif  /* __MONO_METADATA_SRE_INTERNALS_H__ */
165