1
+ #include "mono/component/marshal-ilgen.h"
2
+ #include "mono/component/marshal-ilgen-noilgen.h"
3
+
4
+ #ifndef ENABLE_ILGEN
5
+ static int
6
+ emit_marshal_array_noilgen (EmitMarshalContext * m , int argnum , MonoType * t ,
7
+ MonoMarshalSpec * spec ,
8
+ int conv_arg , MonoType * * conv_arg_type ,
9
+ MarshalAction action )
10
+ {
11
+ MonoType * int_type = mono_get_int_type ();
12
+ MonoType * object_type = mono_get_object_type ();
13
+ switch (action ) {
14
+ case MARSHAL_ACTION_CONV_IN :
15
+ * conv_arg_type = object_type ;
16
+ break ;
17
+ case MARSHAL_ACTION_MANAGED_CONV_IN :
18
+ * conv_arg_type = int_type ;
19
+ break ;
20
+ }
21
+ return conv_arg ;
22
+ }
23
+
24
+ static int
25
+ emit_marshal_ptr_noilgen (EmitMarshalContext * m , int argnum , MonoType * t ,
26
+ MonoMarshalSpec * spec , int conv_arg ,
27
+ MonoType * * conv_arg_type , MarshalAction action )
28
+ {
29
+ return conv_arg ;
30
+ }
31
+ #endif
32
+
33
+ #if !defined(ENABLE_ILGEN ) || defined(DISABLE_NONBLITTABLE )
34
+ static int
35
+ emit_marshal_vtype_noilgen (EmitMarshalContext * m , int argnum , MonoType * t ,
36
+ MonoMarshalSpec * spec ,
37
+ int conv_arg , MonoType * * conv_arg_type ,
38
+ MarshalAction action )
39
+ {
40
+ return conv_arg ;
41
+ }
42
+
43
+ static int
44
+ emit_marshal_string_noilgen (EmitMarshalContext * m , int argnum , MonoType * t ,
45
+ MonoMarshalSpec * spec ,
46
+ int conv_arg , MonoType * * conv_arg_type ,
47
+ MarshalAction action )
48
+ {
49
+ MonoType * int_type = mono_get_int_type ();
50
+ switch (action ) {
51
+ case MARSHAL_ACTION_CONV_IN :
52
+ * conv_arg_type = int_type ;
53
+ break ;
54
+ case MARSHAL_ACTION_MANAGED_CONV_IN :
55
+ * conv_arg_type = int_type ;
56
+ break ;
57
+ }
58
+ return conv_arg ;
59
+ }
60
+
61
+ static int
62
+ emit_marshal_safehandle_noilgen (EmitMarshalContext * m , int argnum , MonoType * t ,
63
+ MonoMarshalSpec * spec , int conv_arg ,
64
+ MonoType * * conv_arg_type , MarshalAction action )
65
+ {
66
+ MonoType * int_type = mono_get_int_type ();
67
+ if (action == MARSHAL_ACTION_CONV_IN )
68
+ * conv_arg_type = int_type ;
69
+ return conv_arg ;
70
+ }
71
+
72
+ static int
73
+ emit_marshal_handleref_noilgen (EmitMarshalContext * m , int argnum , MonoType * t ,
74
+ MonoMarshalSpec * spec , int conv_arg ,
75
+ MonoType * * conv_arg_type , MarshalAction action )
76
+ {
77
+ MonoType * int_type = mono_get_int_type ();
78
+ if (action == MARSHAL_ACTION_CONV_IN )
79
+ * conv_arg_type = int_type ;
80
+ return conv_arg ;
81
+ }
82
+
83
+ static int
84
+ emit_marshal_object_noilgen (EmitMarshalContext * m , int argnum , MonoType * t ,
85
+ MonoMarshalSpec * spec ,
86
+ int conv_arg , MonoType * * conv_arg_type ,
87
+ MarshalAction action )
88
+ {
89
+ MonoType * int_type = mono_get_int_type ();
90
+ if (action == MARSHAL_ACTION_CONV_IN )
91
+ * conv_arg_type = int_type ;
92
+ return conv_arg ;
93
+ }
94
+
95
+ static int
96
+ emit_marshal_variant_noilgen (EmitMarshalContext * m , int argnum , MonoType * t ,
97
+ MonoMarshalSpec * spec ,
98
+ int conv_arg , MonoType * * conv_arg_type ,
99
+ MarshalAction action )
100
+ {
101
+ g_assert_not_reached ();
102
+ }
103
+
104
+ static int
105
+ emit_marshal_asany_noilgen (EmitMarshalContext * m , int argnum , MonoType * t ,
106
+ MonoMarshalSpec * spec ,
107
+ int conv_arg , MonoType * * conv_arg_type ,
108
+ MarshalAction action )
109
+ {
110
+ return conv_arg ;
111
+ }
112
+
113
+ static int
114
+ emit_marshal_boolean_noilgen (EmitMarshalContext * m , int argnum , MonoType * t ,
115
+ MonoMarshalSpec * spec ,
116
+ int conv_arg , MonoType * * conv_arg_type ,
117
+ MarshalAction action )
118
+ {
119
+ MonoType * int_type = mono_get_int_type ();
120
+ switch (action ) {
121
+ case MARSHAL_ACTION_CONV_IN :
122
+ if (m_type_is_byref (t ))
123
+ * conv_arg_type = int_type ;
124
+ else
125
+ * conv_arg_type = mono_marshal_boolean_conv_in_get_local_type (spec , NULL );
126
+ break ;
127
+
128
+ case MARSHAL_ACTION_MANAGED_CONV_IN : {
129
+ MonoClass * conv_arg_class = mono_marshal_boolean_managed_conv_in_get_conv_arg_class (spec , NULL );
130
+ if (m_type_is_byref (t ))
131
+ * conv_arg_type = m_class_get_this_arg (conv_arg_class );
132
+ else
133
+ * conv_arg_type = m_class_get_byval_arg (conv_arg_class );
134
+ break ;
135
+ }
136
+
137
+ }
138
+ return conv_arg ;
139
+ }
140
+
141
+ static int
142
+ emit_marshal_char_noilgen (EmitMarshalContext * m , int argnum , MonoType * t ,
143
+ MonoMarshalSpec * spec , int conv_arg ,
144
+ MonoType * * conv_arg_type , MarshalAction action )
145
+ {
146
+ return conv_arg ;
147
+ }
148
+
149
+ static int
150
+ emit_marshal_custom_noilgen (EmitMarshalContext * m , int argnum , MonoType * t ,
151
+ MonoMarshalSpec * spec ,
152
+ int conv_arg , MonoType * * conv_arg_type ,
153
+ MarshalAction action )
154
+ {
155
+ MonoType * int_type = mono_get_int_type ();
156
+ if (action == MARSHAL_ACTION_CONV_IN && t -> type == MONO_TYPE_VALUETYPE )
157
+ * conv_arg_type = int_type ;
158
+ return conv_arg ;
159
+ }
160
+ #endif
161
+
162
+ #ifndef ENABLE_ILGEN
163
+
164
+ void
165
+ mono_marshal_noilgen_init_heavyweight (void )
166
+ {
167
+ MonoMarshalILgenCallbacks ilgen_cb ;
168
+
169
+ ilgen_cb .version = MONO_MARSHAL_CALLBACKS_VERSION ;
170
+ ilgen_cb .emit_marshal_array = emit_marshal_array_noilgen ;
171
+ ilgen_cb .emit_marshal_vtype = emit_marshal_vtype_noilgen ;
172
+ ilgen_cb .emit_marshal_string = emit_marshal_string_noilgen ;
173
+ ilgen_cb .emit_marshal_safehandle = emit_marshal_safehandle_noilgen ;
174
+ ilgen_cb .emit_marshal_handleref = emit_marshal_handleref_noilgen ;
175
+ ilgen_cb .emit_marshal_object = emit_marshal_object_noilgen ;
176
+ ilgen_cb .emit_marshal_variant = emit_marshal_variant_noilgen ;
177
+ ilgen_cb .emit_marshal_asany = emit_marshal_asany_noilgen ;
178
+ ilgen_cb .emit_marshal_boolean = emit_marshal_boolean_noilgen ;
179
+ ilgen_cb .emit_marshal_custom = emit_marshal_custom_noilgen ;
180
+ ilgen_cb .emit_marshal_ptr = emit_marshal_ptr_noilgen ;
181
+
182
+ ilgen_cb .emit_marshal_char = emit_marshal_char_noilgen ;
183
+ mono_install_marshal_callbacks_ilgen (& ilgen_cb );
184
+ }
185
+
186
+ #endif
0 commit comments