@@ -115,129 +115,5 @@ public static void EmitLdarg(this ILGenerator ilBuilder, ParameterInfo argument)
115
115
break ;
116
116
}
117
117
}
118
-
119
- public static void EmitLdindStind ( this ILGenerator ilBuilder , Type resultType )
120
- {
121
- if ( ! resultType . IsByRef )
122
- throw new NotSupportedException ( $ "Cannot emit indirect op for non-reference { resultType } .") ;
123
-
124
- // The primitive types are Boolean, Byte, SByte, Int16, UInt16, Int32, UInt32, Int64, UInt64, IntPtr, UIntPtr, Char, Double, and Single
125
- var valueType = resultType . GetElementType ( ) ;
126
- if ( valueType ? . IsEnum ?? false )
127
- valueType = valueType . GetEnumUnderlyingType ( ) ;
128
-
129
- switch ( valueType )
130
- {
131
- case Type t when t == typeof ( bool ) :
132
- /*
133
- IL_0018: ldind.u1
134
- IL_0019: stind.i1
135
- */
136
- ilBuilder . Emit ( OpCodes . Ldind_U1 ) ;
137
- ilBuilder . Emit ( OpCodes . Stind_I1 ) ;
138
- break ;
139
- case Type t when t == typeof ( byte ) :
140
- /*
141
- IL_0018: ldind.u1
142
- IL_0019: stind.i1
143
- */
144
- ilBuilder . Emit ( OpCodes . Ldind_U1 ) ;
145
- ilBuilder . Emit ( OpCodes . Stind_I1 ) ;
146
- break ;
147
- case Type t when t == typeof ( sbyte ) :
148
- /*
149
- IL_0018: ldind.i1
150
- IL_0019: stind.i1
151
- */
152
- ilBuilder . Emit ( OpCodes . Ldind_I1 ) ;
153
- ilBuilder . Emit ( OpCodes . Stind_I1 ) ;
154
- break ;
155
- case Type t when t == typeof ( short ) :
156
- /*
157
- IL_0018: ldind.i2
158
- IL_0019: stind.i2
159
- */
160
- ilBuilder . Emit ( OpCodes . Ldind_I2 ) ;
161
- ilBuilder . Emit ( OpCodes . Stind_I2 ) ;
162
- break ;
163
- case Type t1 when t1 == typeof ( ushort ) :
164
- case Type t2 when t2 == typeof ( char ) :
165
- /*
166
- IL_0018: ldind.u2
167
- IL_0019: stind.i2
168
- */
169
- ilBuilder . Emit ( OpCodes . Ldind_U2 ) ;
170
- ilBuilder . Emit ( OpCodes . Stind_I2 ) ;
171
- break ;
172
- case Type t when t == typeof ( int ) :
173
- /*
174
- IL_0018: ldind.i4
175
- IL_0019: stind.i4
176
- */
177
- ilBuilder . Emit ( OpCodes . Ldind_I4 ) ;
178
- ilBuilder . Emit ( OpCodes . Stind_I4 ) ;
179
- break ;
180
- case Type t when t == typeof ( uint ) :
181
- /*
182
- IL_0018: ldind.i4
183
- IL_0019: stind.i4
184
- */
185
- ilBuilder . Emit ( OpCodes . Ldind_U4 ) ;
186
- ilBuilder . Emit ( OpCodes . Stind_I4 ) ;
187
- break ;
188
- case Type t1 when t1 == typeof ( ulong ) :
189
- case Type t2 when t2 == typeof ( long ) :
190
- /*
191
- IL_0018: ldind.i8
192
- IL_0019: stind.i8
193
- */
194
- ilBuilder . Emit ( OpCodes . Ldind_I8 ) ;
195
- ilBuilder . Emit ( OpCodes . Stind_I8 ) ;
196
- break ;
197
- case Type t1 when t1 == typeof ( IntPtr ) :
198
- case Type t2 when t2 == typeof ( UIntPtr ) :
199
- /*
200
- IL_0018: ldind.i
201
- IL_0019: stind.i
202
- */
203
- ilBuilder . Emit ( OpCodes . Ldind_I ) ;
204
- ilBuilder . Emit ( OpCodes . Stind_I ) ;
205
- break ;
206
- case Type t when t == typeof ( double ) :
207
- /*
208
- IL_0018: ldind.r8
209
- IL_0019: stind.i8
210
- */
211
- ilBuilder . Emit ( OpCodes . Ldind_R8 ) ;
212
- ilBuilder . Emit ( OpCodes . Stind_R8 ) ;
213
- break ;
214
- case Type t when t == typeof ( float ) :
215
- /*
216
- IL_0018: ldind.r4
217
- IL_0019: stind.i4
218
- */
219
- ilBuilder . Emit ( OpCodes . Ldind_R4 ) ;
220
- ilBuilder . Emit ( OpCodes . Stind_R4 ) ;
221
- break ;
222
- case Type t when t . IsClass || t . IsInterface :
223
- /*
224
- IL_0018: ldind.ref
225
- IL_0019: stind.ref
226
- */
227
- ilBuilder . Emit ( OpCodes . Ldind_Ref ) ;
228
- ilBuilder . Emit ( OpCodes . Stind_Ref ) ;
229
- break ;
230
- case Type t when t . IsEnum || t . IsValueType :
231
- /*
232
- IL_0018: ldobj valuetype [mscorlib]System.Nullable`1<valuetype [mscorlib]System.TimeSpan>
233
- IL_0019: stobj valuetype [mscorlib]System.Nullable`1<valuetype [mscorlib]System.TimeSpan>
234
- */
235
- ilBuilder . Emit ( OpCodes . Ldobj , valueType ) ;
236
- ilBuilder . Emit ( OpCodes . Stobj , valueType ) ;
237
- break ;
238
- default :
239
- throw new NotSupportedException ( $ "Cannot emit indirect store for { resultType } .") ;
240
- }
241
- }
242
118
}
243
119
}
0 commit comments