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