2 writes to _ilg
System.Linq.Expressions (2)
System\Linq\Expressions\Compiler\LambdaCompiler.cs (2)
87
_ilg
= method.GetILGenerator();
146
_ilg
= parent._ilg;
527 references to _ilg
System.Linq.Expressions (527)
System\Linq\Expressions\Compiler\LambdaCompiler.Address.cs (23)
75
_ilg
.Emit(OpCodes.Ldelema, node.Type);
154
_ilg
.EmitFieldAddress(field);
161
_ilg
.Emit(OpCodes.Stloc, temp);
162
_ilg
.Emit(OpCodes.Ldloca, temp);
198
_ilg
.Emit(OpCodes.Ldelema, node.Type);
214
_ilg
.Emit(OpCodes.Unbox, type);
223
_ilg
.Emit(OpCodes.Stloc, tmp);
224
_ilg
.Emit(OpCodes.Ldloca, tmp);
280
_ilg
.Emit(OpCodes.Dup);
281
_ilg
.Emit(OpCodes.Stloc, instanceLocal = GetInstanceLocal(instanceType));
291
_ilg
.Emit(OpCodes.Stloc, valueLocal);
292
_ilg
.Emit(OpCodes.Ldloca, valueLocal);
300
@this.
_ilg
.Emit(OpCodes.Ldloc, instanceLocal);
303
@this.
_ilg
.Emit(OpCodes.Ldloc, valueLocal);
329
_ilg
.Emit(OpCodes.Dup);
330
_ilg
.Emit(OpCodes.Stloc, instanceLocal = GetInstanceLocal(instanceType));
343
_ilg
.Emit(OpCodes.Dup);
344
_ilg
.Emit(OpCodes.Stloc, argLocal);
353
_ilg
.Emit(OpCodes.Stloc, valueLocal);
354
_ilg
.Emit(OpCodes.Ldloca, valueLocal);
362
@this.
_ilg
.Emit(OpCodes.Ldloc, instanceLocal);
367
@this.
_ilg
.Emit(OpCodes.Ldloc, arg);
370
@this.
_ilg
.Emit(OpCodes.Ldloc, valueLocal);
System\Linq\Expressions\Compiler\LambdaCompiler.Binary.cs (128)
78
_ilg
.EmitDefault(typeof(bool?), this);
83
_ilg
.EmitHasValue(e.Type);
86
_ilg
.Emit(OpCodes.Ldc_I4_0);
87
_ilg
.Emit(OpCodes.Ceq);
162
_ilg
.Emit(OpCodes.Ceq);
163
_ilg
.Emit(OpCodes.Ldc_I4_0);
166
_ilg
.Emit(OpCodes.Ceq);
169
_ilg
.Emit(OpCodes.Add);
172
_ilg
.Emit(leftType.IsFloatingPoint() ? OpCodes.Add : (leftType.IsUnsigned() ? OpCodes.Add_Ovf_Un : OpCodes.Add_Ovf));
175
_ilg
.Emit(OpCodes.Sub);
180
_ilg
.Emit(OpCodes.Sub_Ovf_Un);
186
_ilg
.Emit(leftType.IsFloatingPoint() ? OpCodes.Sub : OpCodes.Sub_Ovf);
190
_ilg
.Emit(OpCodes.Mul);
193
_ilg
.Emit(leftType.IsFloatingPoint() ? OpCodes.Mul : (leftType.IsUnsigned() ? OpCodes.Mul_Ovf_Un : OpCodes.Mul_Ovf));
196
_ilg
.Emit(leftType.IsUnsigned() ? OpCodes.Div_Un : OpCodes.Div);
199
_ilg
.Emit(leftType.IsUnsigned() ? OpCodes.Rem_Un : OpCodes.Rem);
204
_ilg
.Emit(OpCodes.And);
209
_ilg
.Emit(OpCodes.Or);
213
_ilg
.Emit(leftType.IsUnsigned() ? OpCodes.Clt_Un : OpCodes.Clt);
217
_ilg
.Emit(leftType.IsUnsigned() || leftType.IsFloatingPoint() ? OpCodes.Cgt_Un : OpCodes.Cgt);
218
_ilg
.Emit(OpCodes.Ldc_I4_0);
219
_ilg
.Emit(OpCodes.Ceq);
223
_ilg
.Emit(leftType.IsUnsigned() ? OpCodes.Cgt_Un : OpCodes.Cgt);
227
_ilg
.Emit(leftType.IsUnsigned() || leftType.IsFloatingPoint() ? OpCodes.Clt_Un : OpCodes.Clt);
228
_ilg
.Emit(OpCodes.Ldc_I4_0);
229
_ilg
.Emit(OpCodes.Ceq);
233
_ilg
.Emit(OpCodes.Xor);
239
_ilg
.Emit(OpCodes.Shl);
244
_ilg
.Emit(leftType.IsUnsigned() ? OpCodes.Shr_Un : OpCodes.Shr);
258
_ilg
.EmitPrimitive(mask);
259
_ilg
.Emit(OpCodes.And);
273
_ilg
.Emit(IsChecked(op) ? OpCodes.Conv_Ovf_U1 : OpCodes.Conv_U1);
276
_ilg
.Emit(IsChecked(op) ? OpCodes.Conv_Ovf_I1 : OpCodes.Conv_I1);
279
_ilg
.Emit(IsChecked(op) ? OpCodes.Conv_Ovf_U2 : OpCodes.Conv_U2);
282
_ilg
.Emit(IsChecked(op) ? OpCodes.Conv_Ovf_I2 : OpCodes.Conv_I2);
361
_ilg
.Emit(OpCodes.Stloc, locRight);
362
_ilg
.Emit(OpCodes.Stloc, locLeft);
363
_ilg
.Emit(OpCodes.Ldloca, locLeft);
364
_ilg
.EmitGetValueOrDefault(type);
365
_ilg
.Emit(OpCodes.Ldloca, locRight);
366
_ilg
.EmitGetValueOrDefault(type);
369
_ilg
.Emit(OpCodes.Ldloca, locLeft);
370
_ilg
.EmitHasValue(type);
371
_ilg
.Emit(OpCodes.Ldloca, locRight);
372
_ilg
.EmitHasValue(type);
375
_ilg
.Emit(op == ExpressionType.Equal ? OpCodes.Ceq : OpCodes.And);
376
_ilg
.Emit(OpCodes.And);
379
_ilg
.Emit(OpCodes.Ldc_I4_0);
380
_ilg
.Emit(OpCodes.Ceq);
387
Label notNull =
_ilg
.DefineLabel();
388
Label end =
_ilg
.DefineLabel();
393
_ilg
.Emit(OpCodes.Stloc, locRight);
394
_ilg
.Emit(OpCodes.Stloc, locLeft);
395
_ilg
.Emit(OpCodes.Ldloca, locLeft);
396
_ilg
.EmitHasValue(type);
397
_ilg
.Emit(OpCodes.Ldloca, locRight);
398
_ilg
.EmitHasValue(type);
399
_ilg
.Emit(OpCodes.And);
400
_ilg
.Emit(OpCodes.Brtrue_S, notNull);
401
_ilg
.EmitDefault(typeof(bool?), this);
402
_ilg
.Emit(OpCodes.Br_S, end);
403
_ilg
.MarkLabel(notNull);
404
_ilg
.Emit(OpCodes.Ldloca, locLeft);
405
_ilg
.EmitGetValueOrDefault(type);
406
_ilg
.Emit(OpCodes.Ldloca, locRight);
407
_ilg
.EmitGetValueOrDefault(type);
412
_ilg
.Emit(OpCodes.Newobj, Nullable_Boolean_Ctor);
413
_ilg
.MarkLabel(end);
424
Label labIfNull =
_ilg
.DefineLabel();
425
Label labEnd =
_ilg
.DefineLabel();
431
_ilg
.Emit(OpCodes.Stloc, locRight);
432
_ilg
.Emit(OpCodes.Stloc, locLeft);
438
_ilg
.Emit(OpCodes.Ldloca, locLeft);
439
_ilg
.EmitHasValue(leftType);
444
_ilg
.Emit(OpCodes.Ldloca, locRight);
445
_ilg
.EmitHasValue(rightType);
448
_ilg
.Emit(OpCodes.And);
452
_ilg
.Emit(OpCodes.Brfalse_S, labIfNull);
457
_ilg
.Emit(OpCodes.Ldloca, locLeft);
458
_ilg
.EmitGetValueOrDefault(leftType);
462
_ilg
.Emit(OpCodes.Ldloc, locLeft);
467
_ilg
.Emit(OpCodes.Ldloca, locRight);
468
_ilg
.EmitGetValueOrDefault(rightType);
472
_ilg
.Emit(OpCodes.Ldloc, locRight);
485
_ilg
.Emit(OpCodes.Newobj, ci);
486
_ilg
.Emit(OpCodes.Stloc, locResult);
487
_ilg
.Emit(OpCodes.Br_S, labEnd);
490
_ilg
.MarkLabel(labIfNull);
491
_ilg
.Emit(OpCodes.Ldloca, locResult);
492
_ilg
.Emit(OpCodes.Initobj, resultType);
494
_ilg
.MarkLabel(labEnd);
496
_ilg
.Emit(OpCodes.Ldloc, locResult);
506
Label returnRight =
_ilg
.DefineLabel();
507
Label exit =
_ilg
.DefineLabel();
511
_ilg
.Emit(OpCodes.Stloc, locRight);
512
_ilg
.Emit(OpCodes.Stloc, locLeft);
513
_ilg
.Emit(OpCodes.Ldloca, locLeft);
514
_ilg
.EmitGetValueOrDefault(type);
516
_ilg
.Emit(OpCodes.Brtrue_S, returnRight);
517
_ilg
.Emit(OpCodes.Ldloca, locLeft);
518
_ilg
.EmitHasValue(type);
519
_ilg
.Emit(OpCodes.Ldloca, locRight);
520
_ilg
.EmitGetValueOrDefault(type);
521
_ilg
.Emit(OpCodes.Or);
523
_ilg
.Emit(OpCodes.Brfalse_S, returnRight);
524
_ilg
.Emit(OpCodes.Ldloc, locLeft);
526
_ilg
.Emit(OpCodes.Br_S, exit);
527
_ilg
.MarkLabel(returnRight);
528
_ilg
.Emit(OpCodes.Ldloc, locRight);
530
_ilg
.MarkLabel(exit);
537
Label returnLeft =
_ilg
.DefineLabel();
538
Label exit =
_ilg
.DefineLabel();
542
_ilg
.Emit(OpCodes.Stloc, locRight);
543
_ilg
.Emit(OpCodes.Stloc, locLeft);
544
_ilg
.Emit(OpCodes.Ldloca, locLeft);
545
_ilg
.EmitGetValueOrDefault(type);
547
_ilg
.Emit(OpCodes.Brtrue_S, returnLeft);
548
_ilg
.Emit(OpCodes.Ldloca, locRight);
549
_ilg
.EmitGetValueOrDefault(type);
550
_ilg
.Emit(OpCodes.Ldloca, locLeft);
551
_ilg
.EmitHasValue(type);
552
_ilg
.Emit(OpCodes.Or);
554
_ilg
.Emit(OpCodes.Brfalse_S, returnLeft);
555
_ilg
.Emit(OpCodes.Ldloc, locRight);
557
_ilg
.Emit(OpCodes.Br_S, exit);
558
_ilg
.MarkLabel(returnLeft);
559
_ilg
.Emit(OpCodes.Ldloc, locLeft);
561
_ilg
.MarkLabel(exit);
System\Linq\Expressions\Compiler\LambdaCompiler.ControlFlow.cs (4)
17
_labelInfo.Add(node, result = new LabelInfo(
_ilg
, node, false));
33
return new LabelInfo(
_ilg
, null, false);
135
_ilg
.EmitDefault(node.Type, this);
258
_labelInfo.Add(label, new LabelInfo(
_ilg
, label, TypeUtils.AreReferenceAssignable(lambda.ReturnType, label.Type)));
System\Linq\Expressions\Compiler\LambdaCompiler.cs (5)
146
_ilg = parent.
_ilg
;
163
internal ILGenerator IL =>
_ilg
;
227
public LocalBuilder GetLocal(Type type) => _freeLocals.TryPop(type) ??
_ilg
.DeclareLocal(type);
251
_ilg
.EmitLoadArg(GetLambdaArgument(index));
258
_ilg
.EmitLoadArg(0);
System\Linq\Expressions\Compiler\LambdaCompiler.Expressions.cs (129)
116
_ilg
.Emit(OpCodes.Pop);
137
_ilg
.Emit(OpCodes.Castclass, type);
279
_ilg
.Emit(OpCodes.Dup);
280
_ilg
.Emit(OpCodes.Stloc, temp = GetLocal(node.Type));
288
_ilg
.Emit(OpCodes.Ldloc, temp!);
312
_ilg
.EmitLoadElement(arrayType.GetElementType()!);
317
_ilg
.Emit(OpCodes.Call, TypeUtils.GetArrayGetMethod(arrayType));
340
_ilg
.EmitStoreElement(arrayType.GetElementType()!);
345
_ilg
.Emit(OpCodes.Call, TypeUtils.GetArraySetMethod(arrayType));
408
_ilg
.Emit(OpCodes.Constrained, objectType);
417
_ilg
.Emit(OpCodes.Tailcall);
428
_ilg
.EmitCall(callOp, mi, types);
432
_ilg
.Emit(callOp, mi);
461
_ilg
.Emit(OpCodes.Constrained, objectType);
463
_ilg
.Emit(callOp, method);
574
if (!
_ilg
.TryEmitConstant(value, type, this))
602
_ilg
.Emit(OpCodes.Dup);
604
_ilg
.Emit(OpCodes.Stloc, siteTemp);
605
_ilg
.Emit(OpCodes.Ldfld, GetCallSiteTargetField(siteType));
606
_ilg
.Emit(OpCodes.Ldloc, siteTemp);
610
_ilg
.Emit(OpCodes.Callvirt, invoke);
630
_ilg
.Emit(OpCodes.Newobj, node.Constructor);
638
_ilg
.Emit(OpCodes.Ldloca, temp);
639
_ilg
.Emit(OpCodes.Initobj, node.Type);
640
_ilg
.Emit(OpCodes.Ldloc, temp);
666
_ilg
.EmitPrimitive(result == AnalyzeTypeIsResult.KnownTrue);
677
_ilg
.EmitHasValue(type);
683
_ilg
.Emit(OpCodes.Ldnull);
684
_ilg
.Emit(OpCodes.Cgt_Un);
694
_ilg
.Emit(OpCodes.Box, type);
696
_ilg
.Emit(OpCodes.Isinst, node.TypeOperand);
697
_ilg
.Emit(OpCodes.Ldnull);
698
_ilg
.Emit(OpCodes.Cgt_Un);
717
_ilg
.Emit(OpCodes.Dup);
728
_ilg
.Emit(OpCodes.Stloc, value);
730
_ilg
.Emit(OpCodes.Ldloc, value);
732
_ilg
.EmitStoreValueIndirect(variable.Type);
769
_ilg
.EmitLoadValueIndirect(node.Type);
807
_ilg
.Emit(OpCodes.Dup);
808
_ilg
.Emit(OpCodes.Stloc, temp = GetLocal(node.Type));
814
_ilg
.EmitFieldSet((FieldInfo)member);
826
_ilg
.Emit(OpCodes.Ldloc, temp!);
857
_ilg
.EmitFieldGet(fi);
907
_ilg
.EmitArray(elementType, n);
911
_ilg
.Emit(OpCodes.Dup);
912
_ilg
.EmitPrimitive(i);
914
_ilg
.EmitStoreElement(elementType);
923
_ilg
.EmitConvertToType(x.Type, typeof(int), isChecked: true, locals: this);
925
_ilg
.EmitArray(node.Type);
962
_ilg
.Emit(OpCodes.Stfld, fi);
1014
_ilg
.Emit(OpCodes.Stloc, loc);
1015
_ilg
.Emit(OpCodes.Ldloca, loc);
1020
_ilg
.Emit(OpCodes.Ldloc, loc);
1035
_ilg
.Emit(OpCodes.Pop);
1044
_ilg
.Emit(OpCodes.Dup);
1058
_ilg
.Emit(OpCodes.Stloc, loc);
1059
_ilg
.Emit(OpCodes.Ldloca, loc);
1064
_ilg
.Emit(OpCodes.Ldloc, loc);
1080
_ilg
.Emit(OpCodes.Pop);
1089
_ilg
.Emit(OpCodes.Dup);
1096
_ilg
.Emit(OpCodes.Pop);
1124
Label exit =
_ilg
.DefineLabel();
1125
Label exitNull =
_ilg
.DefineLabel();
1127
_ilg
.Emit(OpCodes.Ldc_I4_0);
1128
_ilg
.Emit(OpCodes.Stloc, anyNull);
1137
_ilg
.Emit(OpCodes.Dup);
1138
_ilg
.EmitHasValue(arg.Type);
1139
_ilg
.Emit(OpCodes.Ldc_I4_0);
1140
_ilg
.Emit(OpCodes.Ceq);
1141
_ilg
.Emit(OpCodes.Stloc, anyNull);
1142
_ilg
.EmitGetValueOrDefault(arg.Type);
1151
_ilg
.Emit(OpCodes.Dup);
1152
_ilg
.Emit(OpCodes.Ldnull);
1153
_ilg
.Emit(OpCodes.Ceq);
1154
_ilg
.Emit(OpCodes.Stloc, anyNull);
1158
_ilg
.Emit(OpCodes.Ldloc, anyNull);
1159
_ilg
.Emit(OpCodes.Brtrue, exitNull);
1165
_ilg
.Emit(OpCodes.Newobj, ci);
1167
_ilg
.Emit(OpCodes.Br_S, exit);
1168
_ilg
.MarkLabel(exitNull);
1174
_ilg
.Emit(OpCodes.Ldloca, result);
1175
_ilg
.Emit(OpCodes.Initobj, resultType);
1176
_ilg
.Emit(OpCodes.Ldloc, result);
1181
_ilg
.Emit(OpCodes.Ldnull);
1191
_ilg
.Emit(OpCodes.Ldc_I4_0);
1193
_ilg
.MarkLabel(exit);
1204
Label exit =
_ilg
.DefineLabel();
1205
Label exitAllNull =
_ilg
.DefineLabel();
1206
Label exitAnyNull =
_ilg
.DefineLabel();
1210
_ilg
.Emit(OpCodes.Ldc_I4_0);
1211
_ilg
.Emit(OpCodes.Stloc, anyNull);
1212
_ilg
.Emit(OpCodes.Ldc_I4_1);
1213
_ilg
.Emit(OpCodes.Stloc, allNull);
1223
_ilg
.Emit(OpCodes.Dup);
1224
_ilg
.EmitHasValue(arg.Type);
1225
_ilg
.Emit(OpCodes.Ldc_I4_0);
1226
_ilg
.Emit(OpCodes.Ceq);
1227
_ilg
.Emit(OpCodes.Dup);
1228
_ilg
.Emit(OpCodes.Ldloc, anyNull);
1229
_ilg
.Emit(OpCodes.Or);
1230
_ilg
.Emit(OpCodes.Stloc, anyNull);
1231
_ilg
.Emit(OpCodes.Ldloc, allNull);
1232
_ilg
.Emit(OpCodes.And);
1233
_ilg
.Emit(OpCodes.Stloc, allNull);
1234
_ilg
.EmitGetValueOrDefault(arg.Type);
1241
_ilg
.Emit(OpCodes.Dup);
1242
_ilg
.Emit(OpCodes.Ldnull);
1243
_ilg
.Emit(OpCodes.Ceq);
1244
_ilg
.Emit(OpCodes.Dup);
1245
_ilg
.Emit(OpCodes.Ldloc, anyNull);
1246
_ilg
.Emit(OpCodes.Or);
1247
_ilg
.Emit(OpCodes.Stloc, anyNull);
1248
_ilg
.Emit(OpCodes.Ldloc, allNull);
1249
_ilg
.Emit(OpCodes.And);
1250
_ilg
.Emit(OpCodes.Stloc, allNull);
1254
_ilg
.Emit(OpCodes.Ldc_I4_0);
1255
_ilg
.Emit(OpCodes.Stloc, allNull);
1260
_ilg
.Emit(OpCodes.Ldloc, allNull);
1261
_ilg
.Emit(OpCodes.Brtrue, exitAllNull);
1262
_ilg
.Emit(OpCodes.Ldloc, anyNull);
1263
_ilg
.Emit(OpCodes.Brtrue, exitAnyNull);
1269
_ilg
.Emit(OpCodes.Newobj, ci);
1271
_ilg
.Emit(OpCodes.Br_S, exit);
1273
_ilg
.MarkLabel(exitAllNull);
1274
_ilg
.EmitPrimitive(nodeType == ExpressionType.Equal);
1275
_ilg
.Emit(OpCodes.Br_S, exit);
1277
_ilg
.MarkLabel(exitAnyNull);
1278
_ilg
.EmitPrimitive(nodeType == ExpressionType.NotEqual);
1280
_ilg
.MarkLabel(exit);
System\Linq\Expressions\Compiler\LambdaCompiler.Lambda.cs (8)
62
_ilg
.EmitNull();
73
_ilg
.EmitNull();
81
_ilg
.EmitNull();
83
_ilg
.EmitNew(Closure_ObjectArray_ObjectArray);
104
_ilg
.EmitType(delegateType);
106
_ilg
.Emit(OpCodes.Callvirt, MethodInfo_CreateDelegate_Type_Object);
107
_ilg
.Emit(OpCodes.Castclass, delegateType);
240
_ilg
.Emit(OpCodes.Ret);
System\Linq\Expressions\Compiler\LambdaCompiler.Logical.cs (120)
19
Label labFalse =
_ilg
.DefineLabel();
25
Label labEnd =
_ilg
.DefineLabel();
30
_ilg
.Emit(OpCodes.Ret);
34
_ilg
.Emit(OpCodes.Br, labEnd);
36
_ilg
.MarkLabel(labFalse);
38
_ilg
.MarkLabel(labEnd);
42
_ilg
.MarkLabel(labFalse);
115
Label labIfNull =
_ilg
.DefineLabel();
116
Label labEnd =
_ilg
.DefineLabel();
118
_ilg
.Emit(OpCodes.Stloc, loc);
119
_ilg
.Emit(OpCodes.Ldloca, loc);
120
_ilg
.EmitHasValue(b.Left.Type);
121
_ilg
.Emit(OpCodes.Brfalse, labIfNull);
137
_ilg
.Emit(OpCodes.Ldloca, loc);
138
_ilg
.EmitGetValueOrDefault(b.Left.Type);
142
_ilg
.Emit(OpCodes.Ldloc, loc);
146
_ilg
.Emit(OpCodes.Callvirt, b.Conversion.Type.GetInvokeMethod());
150
_ilg
.Emit(OpCodes.Ldloc, loc);
154
_ilg
.Emit(OpCodes.Ldloca, loc);
155
_ilg
.EmitGetValueOrDefault(b.Left.Type);
158
_ilg
.EmitConvertToType(nnLeftType, b.Type, isChecked: true, locals: this);
164
_ilg
.Emit(OpCodes.Br, labEnd);
165
_ilg
.MarkLabel(labIfNull);
169
_ilg
.EmitConvertToType(b.Right.Type, b.Type, isChecked: true, locals: this);
171
_ilg
.MarkLabel(labEnd);
178
Label labEnd =
_ilg
.DefineLabel();
179
Label labNotNull =
_ilg
.DefineLabel();
181
_ilg
.Emit(OpCodes.Dup);
182
_ilg
.Emit(OpCodes.Stloc, loc);
183
_ilg
.Emit(OpCodes.Brtrue, labNotNull);
185
_ilg
.Emit(OpCodes.Br, labEnd);
188
_ilg
.MarkLabel(labNotNull);
195
_ilg
.Emit(OpCodes.Ldloc, loc);
199
_ilg
.Emit(OpCodes.Callvirt, b.Conversion.Type.GetInvokeMethod());
201
_ilg
.MarkLabel(labEnd);
207
Label labEnd =
_ilg
.DefineLabel();
208
Label labCast =
_ilg
.DefineLabel();
210
_ilg
.Emit(OpCodes.Dup);
211
_ilg
.Emit(OpCodes.Brtrue, labCast);
212
_ilg
.Emit(OpCodes.Pop);
218
_ilg
.Emit(OpCodes.Box, b.Right.Type);
220
_ilg
.Emit(OpCodes.Castclass, b.Type);
222
_ilg
.Emit(OpCodes.Br_S, labEnd);
223
_ilg
.MarkLabel(labCast);
227
_ilg
.Emit(OpCodes.Castclass, b.Type);
229
_ilg
.MarkLabel(labEnd);
239
Label returnLeft =
_ilg
.DefineLabel();
240
Label returnRight =
_ilg
.DefineLabel();
241
Label exit =
_ilg
.DefineLabel();
245
_ilg
.Emit(OpCodes.Stloc, locLeft);
246
_ilg
.Emit(OpCodes.Ldloca, locLeft);
247
_ilg
.EmitHasValue(type);
248
_ilg
.Emit(OpCodes.Ldloca, locLeft);
249
_ilg
.EmitGetValueOrDefault(type);
250
_ilg
.Emit(OpCodes.Not);
251
_ilg
.Emit(OpCodes.And);
253
_ilg
.Emit(OpCodes.Brtrue, returnLeft);
257
_ilg
.Emit(OpCodes.Stloc, locRight);
258
_ilg
.Emit(OpCodes.Ldloca, locLeft);
259
_ilg
.EmitGetValueOrDefault(type);
261
_ilg
.Emit(OpCodes.Brtrue_S, returnRight);
262
_ilg
.Emit(OpCodes.Ldloca, locRight);
263
_ilg
.EmitGetValueOrDefault(type);
265
_ilg
.Emit(OpCodes.Brtrue_S, returnLeft);
266
_ilg
.MarkLabel(returnRight);
267
_ilg
.Emit(OpCodes.Ldloc, locRight);
269
_ilg
.Emit(OpCodes.Br_S, exit);
270
_ilg
.MarkLabel(returnLeft);
271
_ilg
.Emit(OpCodes.Ldloc, locLeft);
273
_ilg
.MarkLabel(exit);
280
Label labEnd =
_ilg
.DefineLabel();
282
_ilg
.Emit(OpCodes.Dup);
285
_ilg
.Emit(OpCodes.Call, opFalse);
286
_ilg
.Emit(OpCodes.Brtrue, labEnd);
291
_ilg
.Emit(OpCodes.Tailcall);
294
_ilg
.Emit(OpCodes.Call, b.Method);
295
_ilg
.MarkLabel(labEnd);
300
Label @else =
_ilg
.DefineLabel();
301
Label end =
_ilg
.DefineLabel();
304
_ilg
.Emit(OpCodes.Br, end);
305
_ilg
.MarkLabel(@else);
306
_ilg
.Emit(OpCodes.Ldc_I4_0);
307
_ilg
.MarkLabel(end);
342
Label returnLeft =
_ilg
.DefineLabel();
343
Label exit =
_ilg
.DefineLabel();
346
_ilg
.Emit(OpCodes.Stloc, locLeft);
347
_ilg
.Emit(OpCodes.Ldloca, locLeft);
348
_ilg
.EmitGetValueOrDefault(type);
350
_ilg
.Emit(OpCodes.Brtrue, returnLeft);
353
_ilg
.Emit(OpCodes.Stloc, locRight);
354
_ilg
.Emit(OpCodes.Ldloca, locRight);
355
_ilg
.EmitGetValueOrDefault(type);
356
_ilg
.Emit(OpCodes.Ldloca, locLeft);
357
_ilg
.EmitHasValue(type);
358
_ilg
.Emit(OpCodes.Or);
360
_ilg
.Emit(OpCodes.Brfalse_S, returnLeft);
361
_ilg
.Emit(OpCodes.Ldloc, locRight);
363
_ilg
.Emit(OpCodes.Br_S, exit);
364
_ilg
.MarkLabel(returnLeft);
365
_ilg
.Emit(OpCodes.Ldloc, locLeft);
367
_ilg
.MarkLabel(exit);
372
Label @else =
_ilg
.DefineLabel();
373
Label end =
_ilg
.DefineLabel();
375
_ilg
.Emit(OpCodes.Ldc_I4_1);
376
_ilg
.Emit(OpCodes.Br, end);
377
_ilg
.MarkLabel(@else);
379
_ilg
.MarkLabel(end);
386
Label labEnd =
_ilg
.DefineLabel();
388
_ilg
.Emit(OpCodes.Dup);
392
_ilg
.Emit(OpCodes.Call, opTrue);
393
_ilg
.Emit(OpCodes.Brtrue, labEnd);
397
_ilg
.Emit(OpCodes.Tailcall);
400
_ilg
.Emit(OpCodes.Call, b.Method);
401
_ilg
.MarkLabel(labEnd);
491
_ilg
.Emit(branch ? OpCodes.Brtrue : OpCodes.Brfalse, label);
526
_ilg
.EmitHasValue(node.Right.Type);
540
_ilg
.EmitHasValue(node.Left.Type);
560
_ilg
.Emit(branchWhenEqual ? OpCodes.Beq : OpCodes.Bne_Un, label);
627
Label endif =
_ilg
.DefineLabel();
630
_ilg
.MarkLabel(endif);
System\Linq\Expressions\Compiler\LambdaCompiler.Statements.cs (53)
135
_ilg
.EmitDefault(node.Type, this);
151
_ilg
.Emit(OpCodes.Br, continueTarget.Label);
228
Label end =
_ilg
.DefineLabel();
229
Label @default = (node.DefaultBody == null) ? end :
_ilg
.DefineLabel();
429
_ilg
.Emit(OpCodes.Stloc, value);
432
Label end =
_ilg
.DefineLabel();
433
Label @default = (node.DefaultBody == null) ? end :
_ilg
.DefineLabel();
481
label =
_ilg
.DefineLabel();
488
_ilg
.Emit(OpCodes.Br, @default);
500
_ilg
.MarkLabel(labels[i]);
510
_ilg
.Emit(OpCodes.Ret);
514
_ilg
.Emit(OpCodes.Br, end);
522
_ilg
.MarkLabel(@default);
526
_ilg
.MarkLabel(end);
552
Label secondHalf =
_ilg
.DefineLabel();
553
_ilg
.Emit(OpCodes.Ldloc, info.Value);
555
_ilg
.Emit(info.IsUnsigned ? OpCodes.Bgt_Un : OpCodes.Bgt, secondHalf);
557
_ilg
.MarkLabel(secondHalf);
569
_ilg
.Emit(OpCodes.Ldloc, info.Value);
571
_ilg
.Emit(OpCodes.Beq, bucket[0].Label);
583
after =
_ilg
.DefineLabel();
584
_ilg
.Emit(OpCodes.Ldloc, info.Value);
586
_ilg
.Emit(info.IsUnsigned ? OpCodes.Bgt_Un : OpCodes.Bgt, after.Value);
587
_ilg
.Emit(OpCodes.Ldloc, info.Value);
589
_ilg
.Emit(info.IsUnsigned ? OpCodes.Blt_Un : OpCodes.Blt, after.Value);
592
_ilg
.Emit(OpCodes.Ldloc, info.Value);
599
_ilg
.Emit(OpCodes.Sub);
604
_ilg
.Emit(OpCodes.Conv_I4);
627
_ilg
.Emit(OpCodes.Switch, jmpLabels);
631
_ilg
.MarkLabel(after!.Value);
805
_ilg
.Emit(OpCodes.Pop);
820
_ilg
.BeginExceptionBlock();
834
_ilg
.Emit(OpCodes.Stloc, value);
847
_ilg
.BeginCatchBlock(cb.Test);
851
_ilg
.BeginExceptFilterBlock();
865
_ilg
.Emit(OpCodes.Stloc, value!);
883
_ilg
.BeginFinallyBlock();
887
_ilg
.BeginFaultBlock();
893
_ilg
.EndExceptionBlock();
898
_ilg
.EndExceptionBlock();
903
_ilg
.Emit(OpCodes.Ldloc, value!);
924
Label endFilter =
_ilg
.DefineLabel();
925
Label rightType =
_ilg
.DefineLabel();
930
_ilg
.Emit(OpCodes.Isinst, cb.Test);
931
_ilg
.Emit(OpCodes.Dup);
932
_ilg
.Emit(OpCodes.Brtrue, rightType);
933
_ilg
.Emit(OpCodes.Pop);
934
_ilg
.Emit(OpCodes.Ldc_I4_0);
935
_ilg
.Emit(OpCodes.Br, endFilter);
938
_ilg
.MarkLabel(rightType);
946
_ilg
.MarkLabel(endFilter);
947
_ilg
.BeginCatchBlock(exceptionType: null);
948
_ilg
.Emit(OpCodes.Pop);
System\Linq\Expressions\Compiler\LambdaCompiler.Unary.cs (57)
32
_ilg
.Emit(OpCodes.Call, RuntimeOps_Quote);
35
_ilg
.Emit(OpCodes.Castclass, quote.Type);
50
_ilg
.Emit(OpCodes.Rethrow);
55
_ilg
.Emit(OpCodes.Throw);
78
Label nullOrZero =
_ilg
.DefineLabel();
79
Label end =
_ilg
.DefineLabel();
84
_ilg
.Emit(OpCodes.Stloc, loc);
85
_ilg
.Emit(OpCodes.Ldloca, loc);
86
_ilg
.EmitGetValueOrDefault(type);
87
_ilg
.Emit(OpCodes.Brfalse_S, nullOrZero);
91
_ilg
.EmitDefault(nnType, locals: null); // locals won't be used.
92
_ilg
.Emit(OpCodes.Ldloca, loc);
93
_ilg
.EmitGetValueOrDefault(type);
97
_ilg
.Emit(OpCodes.Newobj, TypeUtils.GetNullableConstructor(type));
98
_ilg
.Emit(OpCodes.Br_S, end);
101
_ilg
.MarkLabel(nullOrZero);
102
_ilg
.Emit(OpCodes.Ldloc, loc);
104
_ilg
.MarkLabel(end);
108
_ilg
.EmitDefault(type, locals: null); // locals won't be used.
126
_ilg
.Emit(OpCodes.Ldlen);
139
_ilg
.Emit(OpCodes.Box, operandType);
140
_ilg
.Emit(OpCodes.Isinst, resultType);
143
_ilg
.Emit(OpCodes.Unbox_Any, resultType);
150
Label labIfNull =
_ilg
.DefineLabel();
151
Label labEnd =
_ilg
.DefineLabel();
155
_ilg
.Emit(OpCodes.Stloc, loc);
156
_ilg
.Emit(OpCodes.Ldloca, loc);
157
_ilg
.EmitHasValue(operandType);
158
_ilg
.Emit(OpCodes.Brfalse_S, labIfNull);
161
_ilg
.Emit(OpCodes.Ldloca, loc);
162
_ilg
.EmitGetValueOrDefault(operandType);
168
_ilg
.Emit(OpCodes.Newobj, ci);
169
_ilg
.Emit(OpCodes.Br_S, labEnd);
172
_ilg
.MarkLabel(labIfNull);
173
_ilg
.Emit(OpCodes.Ldloc, loc);
175
_ilg
.MarkLabel(labEnd);
186
_ilg
.Emit(OpCodes.Ldc_I4_0);
187
_ilg
.Emit(OpCodes.Ceq);
193
_ilg
.Emit(OpCodes.Not);
201
_ilg
.Emit(OpCodes.Ldc_I4_0);
202
_ilg
.Emit(OpCodes.Ceq);
206
_ilg
.Emit(OpCodes.Ldc_I4_1);
207
_ilg
.Emit(OpCodes.Ceq);
215
_ilg
.Emit(OpCodes.Neg);
224
_ilg
.Emit(OpCodes.Box, operandType);
227
_ilg
.Emit(OpCodes.Isinst, resultType);
230
_ilg
.Emit(OpCodes.Unbox_Any, resultType);
238
_ilg
.Emit(OpCodes.Add);
242
_ilg
.Emit(OpCodes.Sub);
256
_ilg
.Emit(OpCodes.Ldc_I4_1);
257
_ilg
.Emit(OpCodes.Conv_I8);
260
_ilg
.Emit(OpCodes.Ldc_R4, 1.0f);
263
_ilg
.Emit(OpCodes.Ldc_R8, 1.0d);
266
_ilg
.Emit(OpCodes.Ldc_I4_1);
278
_ilg
.Emit(OpCodes.Unbox_Any, node.Type);
344
_ilg
.EmitConvertToType(node.Operand.Type, node.Type, node.NodeType == ExpressionType.ConvertChecked, this);
359
_ilg
.EmitConvertToType(resultType, node.Type, isChecked: false, locals: this);