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