3 writes to _ilg
System.Core (3)
Microsoft\Scripting\Compiler\LambdaCompiler.cs (3)
107
_ilg
= method.GetILGenerator();
146
_ilg
= method.GetILGenerator();
163
_ilg
= parent._ilg;
709 references to _ilg
System.Core (709)
Microsoft\Scripting\Compiler\LambdaCompiler.Address.cs (27)
87
_ilg
.Emit(OpCodes.Stloc, loc);
88
_ilg
.Emit(OpCodes.Ldloca, loc);
89
_ilg
.EmitGetValue(rightType);
94
_ilg
.EmitConvertToType(indexType, typeof(int), true);
96
_ilg
.Emit(OpCodes.Ldelema, node.Type);
151
_ilg
.EmitFieldAddress(field);
158
_ilg
.Emit(OpCodes.Stloc, temp);
159
_ilg
.Emit(OpCodes.Ldloca, temp);
190
_ilg
.Emit(OpCodes.Ldelema, node.Type);
203
_ilg
.Emit(OpCodes.Unbox, type);
211
_ilg
.Emit(OpCodes.Stloc, tmp);
212
_ilg
.Emit(OpCodes.Ldloca, tmp);
254
_ilg
.Emit(OpCodes.Dup);
255
_ilg
.Emit(OpCodes.Stloc, instanceLocal = GetLocal(instanceType));
265
_ilg
.Emit(OpCodes.Stloc, valueLocal);
266
_ilg
.Emit(OpCodes.Ldloca, valueLocal);
272
_ilg
.Emit(OpCodes.Ldloc, instanceLocal);
275
_ilg
.Emit(OpCodes.Ldloc, valueLocal);
292
_ilg
.Emit(OpCodes.Dup);
293
_ilg
.Emit(OpCodes.Stloc, instanceLocal = GetLocal(instanceType));
303
_ilg
.Emit(OpCodes.Dup);
304
_ilg
.Emit(OpCodes.Stloc, argLocal);
313
_ilg
.Emit(OpCodes.Stloc, valueLocal);
314
_ilg
.Emit(OpCodes.Ldloca, valueLocal);
320
_ilg
.Emit(OpCodes.Ldloc, instanceLocal);
324
_ilg
.Emit(OpCodes.Ldloc, arg);
327
_ilg
.Emit(OpCodes.Ldloc, valueLocal);
Microsoft\Scripting\Compiler\LambdaCompiler.Binary.cs (226)
88
_ilg
.EmitDefault(typeof(bool?));
91
_ilg
.EmitHasValue(e.Type);
93
_ilg
.Emit(OpCodes.Ldc_I4_0);
94
_ilg
.Emit(OpCodes.Ceq);
145
_ilg
.EmitLoadElement(leftType.GetElementType());
174
_ilg
.Emit(OpCodes.Add);
178
_ilg
.Emit(OpCodes.Add);
180
_ilg
.Emit(OpCodes.Add_Ovf_Un);
182
_ilg
.Emit(OpCodes.Add_Ovf);
186
_ilg
.Emit(OpCodes.Sub);
190
_ilg
.Emit(OpCodes.Sub);
192
_ilg
.Emit(OpCodes.Sub_Ovf_Un);
194
_ilg
.Emit(OpCodes.Sub_Ovf);
198
_ilg
.Emit(OpCodes.Mul);
202
_ilg
.Emit(OpCodes.Mul);
204
_ilg
.Emit(OpCodes.Mul_Ovf_Un);
206
_ilg
.Emit(OpCodes.Mul_Ovf);
211
_ilg
.Emit(OpCodes.Div_Un);
213
_ilg
.Emit(OpCodes.Div);
218
_ilg
.Emit(OpCodes.Rem_Un);
220
_ilg
.Emit(OpCodes.Rem);
225
_ilg
.Emit(OpCodes.And);
229
_ilg
.Emit(OpCodes.Or);
233
_ilg
.Emit(OpCodes.Clt_Un);
235
_ilg
.Emit(OpCodes.Clt);
239
Label labFalse =
_ilg
.DefineLabel();
240
Label labEnd =
_ilg
.DefineLabel();
242
_ilg
.Emit(OpCodes.Ble_Un_S, labFalse);
244
_ilg
.Emit(OpCodes.Ble_S, labFalse);
246
_ilg
.Emit(OpCodes.Ldc_I4_0);
247
_ilg
.Emit(OpCodes.Br_S, labEnd);
248
_ilg
.MarkLabel(labFalse);
249
_ilg
.Emit(OpCodes.Ldc_I4_1);
250
_ilg
.MarkLabel(labEnd);
255
_ilg
.Emit(OpCodes.Cgt_Un);
257
_ilg
.Emit(OpCodes.Cgt);
261
Label labFalse =
_ilg
.DefineLabel();
262
Label labEnd =
_ilg
.DefineLabel();
264
_ilg
.Emit(OpCodes.Bge_Un_S, labFalse);
266
_ilg
.Emit(OpCodes.Bge_S, labFalse);
268
_ilg
.Emit(OpCodes.Ldc_I4_0);
269
_ilg
.Emit(OpCodes.Br_S, labEnd);
270
_ilg
.MarkLabel(labFalse);
271
_ilg
.Emit(OpCodes.Ldc_I4_1);
272
_ilg
.MarkLabel(labEnd);
276
_ilg
.Emit(OpCodes.Xor);
282
_ilg
.Emit(OpCodes.Shl);
289
_ilg
.Emit(OpCodes.Shr_Un);
291
_ilg
.Emit(OpCodes.Shr);
308
_ilg
.Emit(IsChecked(op) ? OpCodes.Conv_Ovf_U1 : OpCodes.Conv_U1);
311
_ilg
.Emit(IsChecked(op) ? OpCodes.Conv_Ovf_I1 : OpCodes.Conv_I1);
314
_ilg
.Emit(IsChecked(op) ? OpCodes.Conv_Ovf_U2 : OpCodes.Conv_U2);
317
_ilg
.Emit(IsChecked(op) ? OpCodes.Conv_Ovf_I2 : OpCodes.Conv_I2);
327
_ilg
.Emit(OpCodes.Ceq);
329
_ilg
.Emit(OpCodes.Ldc_I4_0);
330
_ilg
.Emit(OpCodes.Ceq);
385
Label shortCircuit =
_ilg
.DefineLabel();
390
_ilg
.Emit(OpCodes.Stloc, locRight);
391
_ilg
.Emit(OpCodes.Stloc, locLeft);
395
_ilg
.Emit(OpCodes.Ldloca, locLeft);
396
_ilg
.EmitHasValue(leftType);
397
_ilg
.Emit(OpCodes.Ldc_I4_0);
398
_ilg
.Emit(OpCodes.Ceq);
399
_ilg
.Emit(OpCodes.Ldloca, locRight);
400
_ilg
.EmitHasValue(rightType);
401
_ilg
.Emit(OpCodes.Ldc_I4_0);
402
_ilg
.Emit(OpCodes.Ceq);
403
_ilg
.Emit(OpCodes.And);
404
_ilg
.Emit(OpCodes.Dup);
405
_ilg
.Emit(OpCodes.Brtrue_S, shortCircuit);
406
_ilg
.Emit(OpCodes.Pop);
409
_ilg
.Emit(OpCodes.Ldloca, locLeft);
410
_ilg
.EmitHasValue(leftType);
411
_ilg
.Emit(OpCodes.Ldloca, locRight);
412
_ilg
.EmitHasValue(rightType);
413
_ilg
.Emit(OpCodes.And);
415
_ilg
.Emit(OpCodes.Dup);
416
_ilg
.Emit(OpCodes.Brfalse_S, shortCircuit);
417
_ilg
.Emit(OpCodes.Pop);
420
_ilg
.Emit(OpCodes.Ldloca, locLeft);
421
_ilg
.EmitHasValue(leftType);
422
_ilg
.Emit(OpCodes.Ldloca, locRight);
423
_ilg
.EmitHasValue(rightType);
424
_ilg
.Emit(OpCodes.Or);
425
_ilg
.Emit(OpCodes.Dup);
426
_ilg
.Emit(OpCodes.Brfalse_S, shortCircuit);
427
_ilg
.Emit(OpCodes.Pop);
430
_ilg
.Emit(OpCodes.Ldloca, locLeft);
431
_ilg
.EmitHasValue(leftType);
432
_ilg
.Emit(OpCodes.Ldc_I4_0);
433
_ilg
.Emit(OpCodes.Ceq);
434
_ilg
.Emit(OpCodes.Ldloca, locRight);
435
_ilg
.EmitHasValue(rightType);
436
_ilg
.Emit(OpCodes.Ldc_I4_0);
437
_ilg
.Emit(OpCodes.Ceq);
438
_ilg
.Emit(OpCodes.Or);
439
_ilg
.Emit(OpCodes.Dup);
440
_ilg
.Emit(OpCodes.Brtrue_S, shortCircuit);
441
_ilg
.Emit(OpCodes.Pop);
444
_ilg
.Emit(OpCodes.Ldloca, locLeft);
445
_ilg
.EmitHasValue(leftType);
446
_ilg
.Emit(OpCodes.Ldloca, locRight);
447
_ilg
.EmitHasValue(rightType);
448
_ilg
.Emit(OpCodes.And);
449
_ilg
.Emit(OpCodes.Dup);
450
_ilg
.Emit(OpCodes.Brfalse_S, shortCircuit);
451
_ilg
.Emit(OpCodes.Pop);
455
_ilg
.Emit(OpCodes.Ldloca, locLeft);
456
_ilg
.EmitGetValueOrDefault(leftType);
457
_ilg
.Emit(OpCodes.Ldloca, locRight);
458
_ilg
.EmitGetValueOrDefault(rightType);
473
_ilg
.MarkLabel(shortCircuit);
477
_ilg
.EmitConvertToType(TypeUtils.GetNonNullableType(resultType), resultType, true);
481
Label labEnd =
_ilg
.DefineLabel();
482
_ilg
.Emit(OpCodes.Br, labEnd);
483
_ilg
.MarkLabel(shortCircuit);
484
_ilg
.Emit(OpCodes.Pop);
485
_ilg
.Emit(OpCodes.Ldnull);
486
_ilg
.Emit(OpCodes.Unbox_Any, resultType);
487
_ilg
.MarkLabel(labEnd);
498
Label labIfNull =
_ilg
.DefineLabel();
499
Label labEnd =
_ilg
.DefineLabel();
505
_ilg
.Emit(OpCodes.Stloc, locRight);
506
_ilg
.Emit(OpCodes.Stloc, locLeft);
511
_ilg
.Emit(OpCodes.Ldloca, locLeft);
512
_ilg
.EmitHasValue(leftType);
513
_ilg
.Emit(OpCodes.Brfalse_S, labIfNull);
516
_ilg
.Emit(OpCodes.Ldloca, locRight);
517
_ilg
.EmitHasValue(rightType);
518
_ilg
.Emit(OpCodes.Brfalse_S, labIfNull);
523
_ilg
.Emit(OpCodes.Ldloca, locLeft);
524
_ilg
.EmitGetValueOrDefault(leftType);
526
_ilg
.Emit(OpCodes.Ldloc, locLeft);
530
_ilg
.Emit(OpCodes.Ldloca, locRight);
531
_ilg
.EmitGetValueOrDefault(rightType);
533
_ilg
.Emit(OpCodes.Ldloc, locRight);
544
_ilg
.Emit(OpCodes.Newobj, ci);
545
_ilg
.Emit(OpCodes.Stloc, locResult);
546
_ilg
.Emit(OpCodes.Br_S, labEnd);
549
_ilg
.MarkLabel(labIfNull);
550
_ilg
.Emit(OpCodes.Ldloca, locResult);
551
_ilg
.Emit(OpCodes.Initobj, resultType);
553
_ilg
.MarkLabel(labEnd);
555
_ilg
.Emit(OpCodes.Ldloc, locResult);
564
Label labComputeRight =
_ilg
.DefineLabel();
565
Label labReturnFalse =
_ilg
.DefineLabel();
566
Label labReturnNull =
_ilg
.DefineLabel();
567
Label labReturnValue =
_ilg
.DefineLabel();
568
Label labExit =
_ilg
.DefineLabel();
573
_ilg
.Emit(OpCodes.Stloc, locRight);
574
_ilg
.Emit(OpCodes.Stloc, locLeft);
577
_ilg
.Emit(OpCodes.Ldloca, locLeft);
578
_ilg
.EmitHasValue(type);
579
_ilg
.Emit(OpCodes.Brfalse, labComputeRight);
580
_ilg
.Emit(OpCodes.Ldloca, locLeft);
581
_ilg
.EmitGetValueOrDefault(type);
582
_ilg
.Emit(OpCodes.Ldc_I4_0);
583
_ilg
.Emit(OpCodes.Ceq);
584
_ilg
.Emit(OpCodes.Brtrue, labReturnFalse);
587
_ilg
.MarkLabel(labComputeRight);
588
_ilg
.Emit(OpCodes.Ldloca, locRight);
589
_ilg
.EmitHasValue(type);
590
_ilg
.Emit(OpCodes.Brfalse_S, labReturnNull);
591
_ilg
.Emit(OpCodes.Ldloca, locRight);
596
_ilg
.EmitGetValueOrDefault(type);
597
_ilg
.Emit(OpCodes.Ldc_I4_0);
598
_ilg
.Emit(OpCodes.Ceq);
599
_ilg
.Emit(OpCodes.Brtrue_S, labReturnFalse);
602
_ilg
.Emit(OpCodes.Ldloca, locLeft);
603
_ilg
.EmitHasValue(type);
604
_ilg
.Emit(OpCodes.Brfalse, labReturnNull);
607
_ilg
.Emit(OpCodes.Ldc_I4_1);
608
_ilg
.Emit(OpCodes.Br_S, labReturnValue);
611
_ilg
.MarkLabel(labReturnFalse);
612
_ilg
.Emit(OpCodes.Ldc_I4_0);
613
_ilg
.Emit(OpCodes.Br_S, labReturnValue);
615
_ilg
.MarkLabel(labReturnValue);
617
_ilg
.Emit(OpCodes.Newobj, ci);
618
_ilg
.Emit(OpCodes.Stloc, locLeft);
619
_ilg
.Emit(OpCodes.Br, labExit);
622
_ilg
.MarkLabel(labReturnNull);
623
_ilg
.Emit(OpCodes.Ldloca, locLeft);
624
_ilg
.Emit(OpCodes.Initobj, type);
626
_ilg
.MarkLabel(labExit);
627
_ilg
.Emit(OpCodes.Ldloc, locLeft);
636
Label labComputeRight =
_ilg
.DefineLabel();
637
Label labReturnTrue =
_ilg
.DefineLabel();
638
Label labReturnNull =
_ilg
.DefineLabel();
639
Label labReturnValue =
_ilg
.DefineLabel();
640
Label labExit =
_ilg
.DefineLabel();
645
_ilg
.Emit(OpCodes.Stloc, locRight);
646
_ilg
.Emit(OpCodes.Stloc, locLeft);
649
_ilg
.Emit(OpCodes.Ldloca, locLeft);
650
_ilg
.EmitHasValue(type);
651
_ilg
.Emit(OpCodes.Brfalse, labComputeRight);
652
_ilg
.Emit(OpCodes.Ldloca, locLeft);
653
_ilg
.EmitGetValueOrDefault(type);
654
_ilg
.Emit(OpCodes.Ldc_I4_0);
655
_ilg
.Emit(OpCodes.Ceq);
656
_ilg
.Emit(OpCodes.Brfalse, labReturnTrue);
659
_ilg
.MarkLabel(labComputeRight);
660
_ilg
.Emit(OpCodes.Ldloca, locRight);
661
_ilg
.EmitHasValue(type);
662
_ilg
.Emit(OpCodes.Brfalse_S, labReturnNull);
663
_ilg
.Emit(OpCodes.Ldloca, locRight);
668
_ilg
.EmitGetValueOrDefault(type);
669
_ilg
.Emit(OpCodes.Ldc_I4_0);
670
_ilg
.Emit(OpCodes.Ceq);
671
_ilg
.Emit(OpCodes.Brfalse_S, labReturnTrue);
674
_ilg
.Emit(OpCodes.Ldloca, locLeft);
675
_ilg
.EmitHasValue(type);
676
_ilg
.Emit(OpCodes.Brfalse, labReturnNull);
679
_ilg
.Emit(OpCodes.Ldc_I4_0);
680
_ilg
.Emit(OpCodes.Br_S, labReturnValue);
683
_ilg
.MarkLabel(labReturnTrue);
684
_ilg
.Emit(OpCodes.Ldc_I4_1);
685
_ilg
.Emit(OpCodes.Br_S, labReturnValue);
687
_ilg
.MarkLabel(labReturnValue);
689
_ilg
.Emit(OpCodes.Newobj, ci);
690
_ilg
.Emit(OpCodes.Stloc, locLeft);
691
_ilg
.Emit(OpCodes.Br, labExit);
694
_ilg
.MarkLabel(labReturnNull);
695
_ilg
.Emit(OpCodes.Ldloca, locLeft);
696
_ilg
.Emit(OpCodes.Initobj, type);
698
_ilg
.MarkLabel(labExit);
699
_ilg
.Emit(OpCodes.Ldloc, locLeft);
Microsoft\Scripting\Compiler\LambdaCompiler.ControlFlow.cs (4)
32
_labelInfo.Add(node, result = new LabelInfo(
_ilg
, node, false));
45
return new LabelInfo(
_ilg
, null, false);
133
_ilg
.EmitDefault(node.Type);
239
_labelInfo.Add(label, new LabelInfo(
_ilg
, label, TypeUtils.AreReferenceAssignable(lambda.ReturnType, label.Type)));
Microsoft\Scripting\Compiler\LambdaCompiler.cs (6)
163
_ilg = parent.
_ilg
;
181
get { return
_ilg
; }
255
return
_ilg
.DeclareLocal(type);
267
LocalBuilder lb =
_ilg
.DeclareLocal(type);
288
_ilg
.EmitLoadArg(GetLambdaArgument(index));
294
_ilg
.EmitLoadArg(0);
Microsoft\Scripting\Compiler\LambdaCompiler.Expressions.cs (133)
122
_ilg
.Emit(OpCodes.Pop);
139
_ilg
.Emit(OpCodes.Castclass, type);
259
_ilg
.Emit(OpCodes.Dup);
260
_ilg
.Emit(OpCodes.Stloc, temp = GetLocal(node.Type));
267
_ilg
.Emit(OpCodes.Ldloc, temp);
279
_ilg
.Emit(OpCodes.Call, node.Object.Type.GetMethod("Get", BindingFlags.Public | BindingFlags.Instance));
282
_ilg
.EmitLoadElement(node.Type);
293
_ilg
.Emit(OpCodes.Call, node.Object.Type.GetMethod("Set", BindingFlags.Public | BindingFlags.Instance));
296
_ilg
.EmitStoreElement(node.Type);
348
_ilg
.Emit(OpCodes.Constrained, objectType);
356
_ilg
.Emit(OpCodes.Tailcall);
359
_ilg
.EmitCall(callOp, mi, args.Map(a => a.Type));
361
_ilg
.Emit(callOp, mi);
384
_ilg
.Emit(OpCodes.Constrained, objectType);
386
_ilg
.Emit(callOp, method);
473
_ilg
.EmitConstant(value, type);
496
_ilg
.Emit(OpCodes.Dup);
504
_ilg
.Emit(OpCodes.Stloc, siteTemp);
505
_ilg
.Emit(OpCodes.Ldfld, siteType.GetField("Target"));
506
_ilg
.Emit(OpCodes.Ldloc, siteTemp);
510
_ilg
.Emit(OpCodes.Callvirt, invoke);
519
_ilg
.Emit(OpCodes.Newobj, node.Constructor);
525
_ilg
.Emit(OpCodes.Ldloca, temp);
526
_ilg
.Emit(OpCodes.Initobj, node.Type);
527
_ilg
.Emit(OpCodes.Ldloc, temp);
550
_ilg
.EmitBoolean(result == AnalyzeTypeIsResult.KnownTrue);
559
_ilg
.EmitHasValue(type);
565
_ilg
.Emit(OpCodes.Ldnull);
566
_ilg
.Emit(OpCodes.Ceq);
567
_ilg
.Emit(OpCodes.Ldc_I4_0);
568
_ilg
.Emit(OpCodes.Ceq);
577
_ilg
.Emit(OpCodes.Box, type);
579
_ilg
.Emit(OpCodes.Isinst, node.TypeOperand);
580
_ilg
.Emit(OpCodes.Ldnull);
581
_ilg
.Emit(OpCodes.Cgt_Un);
590
_ilg
.Emit(OpCodes.Dup);
600
_ilg
.Emit(OpCodes.Stloc, value);
602
_ilg
.Emit(OpCodes.Ldloc, value);
604
_ilg
.EmitStoreValueIndirect(variable.Type);
634
_ilg
.EmitLoadValueIndirect(node.Type);
665
_ilg
.Emit(OpCodes.Dup);
666
_ilg
.Emit(OpCodes.Stloc, temp = GetLocal(node.Type));
671
_ilg
.EmitFieldSet((FieldInfo)member);
681
_ilg
.Emit(OpCodes.Ldloc, temp);
706
_ilg
.EmitFieldGet(fi);
731
_ilg
.EmitArray(
743
_ilg
.EmitConvertToType(x.Type, typeof(int), true);
745
_ilg
.EmitArray(node.Type);
761
_tree.DebugInfoGenerator.MarkSequencePoint(_lambda, _method,
_ilg
, node);
762
_ilg
.Emit(OpCodes.Nop);
801
_ilg
.Emit(OpCodes.Stfld, fi);
842
loc =
_ilg
.DeclareLocal(init.NewExpression.Type);
843
_ilg
.Emit(OpCodes.Stloc, loc);
844
_ilg
.Emit(OpCodes.Ldloca, loc);
848
_ilg
.Emit(OpCodes.Ldloc, loc);
859
_ilg
.Emit(OpCodes.Pop);
864
_ilg
.Emit(OpCodes.Dup);
875
loc =
_ilg
.DeclareLocal(init.NewExpression.Type);
876
_ilg
.Emit(OpCodes.Stloc, loc);
877
_ilg
.Emit(OpCodes.Ldloca, loc);
881
_ilg
.Emit(OpCodes.Ldloc, loc);
893
_ilg
.Emit(OpCodes.Pop);
898
_ilg
.Emit(OpCodes.Dup);
904
_ilg
.Emit(OpCodes.Pop);
946
Label exit =
_ilg
.DefineLabel();
947
Label exitNull =
_ilg
.DefineLabel();
948
LocalBuilder anyNull =
_ilg
.DeclareLocal(typeof(bool));
955
_ilg
.Emit(OpCodes.Dup);
956
_ilg
.EmitHasValue(arg.Type);
957
_ilg
.Emit(OpCodes.Ldc_I4_0);
958
_ilg
.Emit(OpCodes.Ceq);
959
_ilg
.Emit(OpCodes.Stloc, anyNull);
960
_ilg
.EmitGetValueOrDefault(arg.Type);
966
_ilg
.Emit(OpCodes.Dup);
967
_ilg
.Emit(OpCodes.Ldnull);
968
_ilg
.Emit(OpCodes.Ceq);
969
_ilg
.Emit(OpCodes.Stloc, anyNull);
973
_ilg
.Emit(OpCodes.Ldloc, anyNull);
974
_ilg
.Emit(OpCodes.Brtrue, exitNull);
979
_ilg
.Emit(OpCodes.Newobj, ci);
981
_ilg
.Emit(OpCodes.Br_S, exit);
982
_ilg
.MarkLabel(exitNull);
986
_ilg
.Emit(OpCodes.Ldloca, result);
987
_ilg
.Emit(OpCodes.Initobj, resultType);
988
_ilg
.Emit(OpCodes.Ldloc, result);
991
_ilg
.Emit(OpCodes.Ldnull);
999
_ilg
.Emit(OpCodes.Ldc_I4_0);
1005
_ilg
.MarkLabel(exit);
1013
Label exit =
_ilg
.DefineLabel();
1014
Label exitAllNull =
_ilg
.DefineLabel();
1015
Label exitAnyNull =
_ilg
.DefineLabel();
1017
LocalBuilder anyNull =
_ilg
.DeclareLocal(typeof(bool));
1018
LocalBuilder allNull =
_ilg
.DeclareLocal(typeof(bool));
1019
_ilg
.Emit(OpCodes.Ldc_I4_0);
1020
_ilg
.Emit(OpCodes.Stloc, anyNull);
1021
_ilg
.Emit(OpCodes.Ldc_I4_1);
1022
_ilg
.Emit(OpCodes.Stloc, allNull);
1030
_ilg
.Emit(OpCodes.Dup);
1031
_ilg
.EmitHasValue(arg.Type);
1032
_ilg
.Emit(OpCodes.Ldc_I4_0);
1033
_ilg
.Emit(OpCodes.Ceq);
1034
_ilg
.Emit(OpCodes.Dup);
1035
_ilg
.Emit(OpCodes.Ldloc, anyNull);
1036
_ilg
.Emit(OpCodes.Or);
1037
_ilg
.Emit(OpCodes.Stloc, anyNull);
1038
_ilg
.Emit(OpCodes.Ldloc, allNull);
1039
_ilg
.Emit(OpCodes.And);
1040
_ilg
.Emit(OpCodes.Stloc, allNull);
1041
_ilg
.EmitGetValueOrDefault(arg.Type);
1045
_ilg
.Emit(OpCodes.Dup);
1046
_ilg
.Emit(OpCodes.Ldnull);
1047
_ilg
.Emit(OpCodes.Ceq);
1048
_ilg
.Emit(OpCodes.Dup);
1049
_ilg
.Emit(OpCodes.Ldloc, anyNull);
1050
_ilg
.Emit(OpCodes.Or);
1051
_ilg
.Emit(OpCodes.Stloc, anyNull);
1052
_ilg
.Emit(OpCodes.Ldloc, allNull);
1053
_ilg
.Emit(OpCodes.And);
1054
_ilg
.Emit(OpCodes.Stloc, allNull);
1056
_ilg
.Emit(OpCodes.Ldc_I4_0);
1057
_ilg
.Emit(OpCodes.Stloc, allNull);
1062
_ilg
.Emit(OpCodes.Ldloc, allNull);
1063
_ilg
.Emit(OpCodes.Brtrue, exitAllNull);
1064
_ilg
.Emit(OpCodes.Ldloc, anyNull);
1065
_ilg
.Emit(OpCodes.Brtrue, exitAnyNull);
1070
_ilg
.Emit(OpCodes.Newobj, ci);
1072
_ilg
.Emit(OpCodes.Br_S, exit);
1074
_ilg
.MarkLabel(exitAllNull);
1075
_ilg
.EmitBoolean(nodeType == ExpressionType.Equal);
1076
_ilg
.Emit(OpCodes.Br_S, exit);
1078
_ilg
.MarkLabel(exitAnyNull);
1079
_ilg
.EmitBoolean(nodeType == ExpressionType.NotEqual);
1081
_ilg
.MarkLabel(exit);
Microsoft\Scripting\Compiler\LambdaCompiler.Lambda.cs (19)
46
Label l =
_ilg
.DefineLabel();
47
_ilg
.Emit(OpCodes.Ldsfld, fb);
48
_ilg
.Emit(OpCodes.Ldnull);
49
_ilg
.Emit(OpCodes.Bne_Un, l);
50
_ilg
.EmitArray(array);
51
_ilg
.Emit(OpCodes.Stsfld, fb);
52
_ilg
.MarkLabel(l);
53
_ilg
.Emit(OpCodes.Ldsfld, fb);
55
_ilg
.EmitArray(array);
64
_ilg
.EmitNull();
72
_ilg
.EmitNull();
77
_ilg
.EmitNull();
79
_ilg
.EmitNew(typeof(Closure).GetConstructor(new Type[] { typeof(object[]), typeof(object[]) }));
99
_ilg
.EmitType(delegateType);
104
_ilg
.Emit(OpCodes.Callvirt, typeof(MethodInfo).GetMethod("CreateDelegate", new Type[] { typeof(Type), typeof(object) }));
106
_ilg
.Emit(OpCodes.Castclass, delegateType);
110
_ilg
.Emit(OpCodes.Ldftn, (MethodInfo)inner._method);
111
_ilg
.Emit(OpCodes.Newobj, (ConstructorInfo)(delegateType.GetMember(".ctor")[0]));
190
_ilg
.Emit(OpCodes.Ret);
Microsoft\Scripting\Compiler\LambdaCompiler.Logical.cs (175)
39
Label labFalse =
_ilg
.DefineLabel();
44
Label labEnd =
_ilg
.DefineLabel();
48
_ilg
.Emit(OpCodes.Ret);
50
_ilg
.Emit(OpCodes.Br, labEnd);
52
_ilg
.MarkLabel(labFalse);
54
_ilg
.MarkLabel(labEnd);
56
_ilg
.MarkLabel(labFalse);
114
Label labIfNull =
_ilg
.DefineLabel();
115
Label labEnd =
_ilg
.DefineLabel();
117
_ilg
.Emit(OpCodes.Stloc, loc);
118
_ilg
.Emit(OpCodes.Ldloca, loc);
119
_ilg
.EmitHasValue(b.Left.Type);
120
_ilg
.Emit(OpCodes.Brfalse, labIfNull);
134
_ilg
.Emit(OpCodes.Ldloca, loc);
135
_ilg
.EmitGetValueOrDefault(b.Left.Type);
137
_ilg
.Emit(OpCodes.Ldloc, loc);
141
_ilg
.Emit(OpCodes.Callvirt, b.Conversion.Type.GetMethod("Invoke"));
143
_ilg
.Emit(OpCodes.Ldloca, loc);
144
_ilg
.EmitGetValueOrDefault(b.Left.Type);
145
_ilg
.EmitConvertToType(nnLeftType, b.Type, true);
147
_ilg
.Emit(OpCodes.Ldloca, loc);
148
_ilg
.EmitGetValueOrDefault(b.Left.Type);
152
_ilg
.Emit(OpCodes.Br, labEnd);
153
_ilg
.MarkLabel(labIfNull);
156
_ilg
.EmitConvertToType(b.Right.Type, b.Type, true);
158
_ilg
.MarkLabel(labEnd);
164
Label labEnd =
_ilg
.DefineLabel();
165
Label labNotNull =
_ilg
.DefineLabel();
167
_ilg
.Emit(OpCodes.Dup);
168
_ilg
.Emit(OpCodes.Stloc, loc);
169
_ilg
.Emit(OpCodes.Ldnull);
170
_ilg
.Emit(OpCodes.Ceq);
171
_ilg
.Emit(OpCodes.Brfalse, labNotNull);
173
_ilg
.Emit(OpCodes.Br, labEnd);
176
_ilg
.MarkLabel(labNotNull);
183
_ilg
.Emit(OpCodes.Ldloc, loc);
187
_ilg
.Emit(OpCodes.Callvirt, b.Conversion.Type.GetMethod("Invoke"));
189
_ilg
.MarkLabel(labEnd);
194
Label labEnd =
_ilg
.DefineLabel();
195
Label labCast =
_ilg
.DefineLabel();
197
_ilg
.Emit(OpCodes.Dup);
198
_ilg
.Emit(OpCodes.Ldnull);
199
_ilg
.Emit(OpCodes.Ceq);
200
_ilg
.Emit(OpCodes.Brfalse, labCast);
201
_ilg
.Emit(OpCodes.Pop);
205
_ilg
.Emit(OpCodes.Box, b.Right.Type);
207
_ilg
.Emit(OpCodes.Castclass, b.Type);
209
_ilg
.Emit(OpCodes.Br_S, labEnd);
210
_ilg
.MarkLabel(labCast);
213
_ilg
.Emit(OpCodes.Castclass, b.Type);
215
_ilg
.MarkLabel(labEnd);
224
Label labComputeRight =
_ilg
.DefineLabel();
225
Label labReturnFalse =
_ilg
.DefineLabel();
226
Label labReturnNull =
_ilg
.DefineLabel();
227
Label labReturnValue =
_ilg
.DefineLabel();
228
Label labExit =
_ilg
.DefineLabel();
232
_ilg
.Emit(OpCodes.Stloc, locLeft);
233
_ilg
.Emit(OpCodes.Ldloca, locLeft);
234
_ilg
.EmitHasValue(type);
235
_ilg
.Emit(OpCodes.Brfalse, labComputeRight);
236
_ilg
.Emit(OpCodes.Ldloca, locLeft);
237
_ilg
.EmitGetValueOrDefault(type);
238
_ilg
.Emit(OpCodes.Ldc_I4_0);
239
_ilg
.Emit(OpCodes.Ceq);
240
_ilg
.Emit(OpCodes.Brtrue, labReturnFalse);
242
_ilg
.MarkLabel(labComputeRight);
244
_ilg
.Emit(OpCodes.Stloc, locRight);
245
_ilg
.Emit(OpCodes.Ldloca, locRight);
246
_ilg
.EmitHasValue(type);
247
_ilg
.Emit(OpCodes.Brfalse_S, labReturnNull);
248
_ilg
.Emit(OpCodes.Ldloca, locRight);
249
_ilg
.EmitGetValueOrDefault(type);
250
_ilg
.Emit(OpCodes.Ldc_I4_0);
251
_ilg
.Emit(OpCodes.Ceq);
252
_ilg
.Emit(OpCodes.Brtrue_S, labReturnFalse);
254
_ilg
.Emit(OpCodes.Ldloca, locLeft);
255
_ilg
.EmitHasValue(type);
256
_ilg
.Emit(OpCodes.Brfalse, labReturnNull);
258
_ilg
.Emit(OpCodes.Ldc_I4_1);
259
_ilg
.Emit(OpCodes.Br_S, labReturnValue);
261
_ilg
.MarkLabel(labReturnFalse);
262
_ilg
.Emit(OpCodes.Ldc_I4_0);
263
_ilg
.Emit(OpCodes.Br_S, labReturnValue);
264
_ilg
.MarkLabel(labReturnValue);
266
_ilg
.Emit(OpCodes.Newobj, ci);
267
_ilg
.Emit(OpCodes.Stloc, locLeft);
268
_ilg
.Emit(OpCodes.Br, labExit);
270
_ilg
.MarkLabel(labReturnNull);
271
_ilg
.Emit(OpCodes.Ldloca, locLeft);
272
_ilg
.Emit(OpCodes.Initobj, type);
273
_ilg
.MarkLabel(labExit);
274
_ilg
.Emit(OpCodes.Ldloc, locLeft);
280
Label labEnd =
_ilg
.DefineLabel();
282
_ilg
.Emit(OpCodes.Dup);
285
_ilg
.Emit(OpCodes.Call, opFalse);
286
_ilg
.Emit(OpCodes.Brtrue, labEnd);
290
_ilg
.Emit(OpCodes.Stloc, locLeft);
295
_ilg
.Emit(OpCodes.Stloc, locRight);
298
_ilg
.Emit(OpCodes.Ldloc, locLeft);
299
_ilg
.Emit(OpCodes.Ldloc, locRight);
301
_ilg
.Emit(OpCodes.Tailcall);
303
_ilg
.Emit(OpCodes.Call, b.Method);
306
_ilg
.MarkLabel(labEnd);
310
Label @else =
_ilg
.DefineLabel();
311
Label end =
_ilg
.DefineLabel();
314
_ilg
.Emit(OpCodes.Br, end);
315
_ilg
.MarkLabel(@else);
316
_ilg
.Emit(OpCodes.Ldc_I4_0);
317
_ilg
.MarkLabel(end);
340
Label labComputeRight =
_ilg
.DefineLabel();
341
Label labReturnTrue =
_ilg
.DefineLabel();
342
Label labReturnNull =
_ilg
.DefineLabel();
343
Label labReturnValue =
_ilg
.DefineLabel();
344
Label labExit =
_ilg
.DefineLabel();
348
_ilg
.Emit(OpCodes.Stloc, locLeft);
349
_ilg
.Emit(OpCodes.Ldloca, locLeft);
350
_ilg
.EmitHasValue(type);
351
_ilg
.Emit(OpCodes.Brfalse, labComputeRight);
352
_ilg
.Emit(OpCodes.Ldloca, locLeft);
353
_ilg
.EmitGetValueOrDefault(type);
354
_ilg
.Emit(OpCodes.Ldc_I4_0);
355
_ilg
.Emit(OpCodes.Ceq);
356
_ilg
.Emit(OpCodes.Brfalse, labReturnTrue);
358
_ilg
.MarkLabel(labComputeRight);
360
_ilg
.Emit(OpCodes.Stloc, locRight);
361
_ilg
.Emit(OpCodes.Ldloca, locRight);
362
_ilg
.EmitHasValue(type);
363
_ilg
.Emit(OpCodes.Brfalse_S, labReturnNull);
364
_ilg
.Emit(OpCodes.Ldloca, locRight);
365
_ilg
.EmitGetValueOrDefault(type);
366
_ilg
.Emit(OpCodes.Ldc_I4_0);
367
_ilg
.Emit(OpCodes.Ceq);
368
_ilg
.Emit(OpCodes.Brfalse_S, labReturnTrue);
370
_ilg
.Emit(OpCodes.Ldloca, locLeft);
371
_ilg
.EmitHasValue(type);
372
_ilg
.Emit(OpCodes.Brfalse, labReturnNull);
374
_ilg
.Emit(OpCodes.Ldc_I4_0);
375
_ilg
.Emit(OpCodes.Br_S, labReturnValue);
377
_ilg
.MarkLabel(labReturnTrue);
378
_ilg
.Emit(OpCodes.Ldc_I4_1);
379
_ilg
.Emit(OpCodes.Br_S, labReturnValue);
380
_ilg
.MarkLabel(labReturnValue);
382
_ilg
.Emit(OpCodes.Newobj, ci);
383
_ilg
.Emit(OpCodes.Stloc, locLeft);
384
_ilg
.Emit(OpCodes.Br, labExit);
386
_ilg
.MarkLabel(labReturnNull);
387
_ilg
.Emit(OpCodes.Ldloca, locLeft);
388
_ilg
.Emit(OpCodes.Initobj, type);
389
_ilg
.MarkLabel(labExit);
390
_ilg
.Emit(OpCodes.Ldloc, locLeft);
396
Label @else =
_ilg
.DefineLabel();
397
Label end =
_ilg
.DefineLabel();
399
_ilg
.Emit(OpCodes.Ldc_I4_1);
400
_ilg
.Emit(OpCodes.Br, end);
401
_ilg
.MarkLabel(@else);
403
_ilg
.MarkLabel(end);
407
Label labEnd =
_ilg
.DefineLabel();
409
_ilg
.Emit(OpCodes.Dup);
412
_ilg
.Emit(OpCodes.Call, opTrue);
413
_ilg
.Emit(OpCodes.Brtrue, labEnd);
417
_ilg
.Emit(OpCodes.Stloc, locLeft);
422
_ilg
.Emit(OpCodes.Stloc, locRight);
425
_ilg
.Emit(OpCodes.Ldloc, locLeft);
426
_ilg
.Emit(OpCodes.Ldloc, locRight);
428
_ilg
.Emit(OpCodes.Tailcall);
430
_ilg
.Emit(OpCodes.Call, b.Method);
433
_ilg
.MarkLabel(labEnd);
507
_ilg
.Emit(branch ? OpCodes.Brtrue : OpCodes.Brfalse, label);
534
_ilg
.EmitHasValue(node.Right.Type);
543
_ilg
.EmitHasValue(node.Left.Type);
558
_ilg
.Emit(OpCodes.Beq, label);
560
_ilg
.Emit(OpCodes.Ceq);
561
_ilg
.Emit(OpCodes.Brfalse, label);
620
Label endif =
_ilg
.DefineLabel();
623
_ilg
.MarkLabel(endif);
Microsoft\Scripting\Compiler\LambdaCompiler.Statements.cs (58)
135
_ilg
.EmitDefault(node.Type);
150
_ilg
.Emit(OpCodes.Br, continueTarget.Label);
201
Label end =
_ilg
.DefineLabel();
202
Label @default = (node.DefaultBody == null) ? end :
_ilg
.DefineLabel();
379
_ilg
.Emit(OpCodes.Stloc, value);
382
Label end =
_ilg
.DefineLabel();
383
Label @default = (node.DefaultBody == null) ? end :
_ilg
.DefineLabel();
426
label =
_ilg
.DefineLabel();
432
_ilg
.Emit(OpCodes.Br, @default);
442
_ilg
.MarkLabel(labels[i]);
450
_ilg
.Emit(OpCodes.Ret);
452
_ilg
.Emit(OpCodes.Br, end);
459
_ilg
.MarkLabel(@default);
463
_ilg
.MarkLabel(end);
482
Label secondHalf =
_ilg
.DefineLabel();
483
_ilg
.Emit(OpCodes.Ldloc, info.Value);
484
_ilg
.EmitConstant(buckets[mid - 1].Last().Constant);
485
_ilg
.Emit(info.IsUnsigned ? OpCodes.Bgt_Un : OpCodes.Bgt, secondHalf);
487
_ilg
.MarkLabel(secondHalf);
496
_ilg
.Emit(OpCodes.Ldloc, info.Value);
497
_ilg
.EmitConstant(bucket[0].Constant);
498
_ilg
.Emit(OpCodes.Beq, bucket[0].Label);
509
after =
_ilg
.DefineLabel();
510
_ilg
.Emit(OpCodes.Ldloc, info.Value);
511
_ilg
.EmitConstant(bucket.Last().Constant);
512
_ilg
.Emit(info.IsUnsigned ? OpCodes.Bgt_Un : OpCodes.Bgt, after.Value);
513
_ilg
.Emit(OpCodes.Ldloc, info.Value);
514
_ilg
.EmitConstant(bucket[0].Constant);
515
_ilg
.Emit(info.IsUnsigned ? OpCodes.Blt_Un : OpCodes.Blt, after.Value);
518
_ilg
.Emit(OpCodes.Ldloc, info.Value);
523
_ilg
.EmitConstant(bucket[0].Constant);
524
_ilg
.Emit(OpCodes.Sub);
528
_ilg
.Emit(OpCodes.Conv_I4);
549
_ilg
.Emit(OpCodes.Switch, jmpLabels);
552
_ilg
.MarkLabel(after.Value);
693
_ilg
.Emit(OpCodes.Pop);
707
_ilg
.BeginExceptionBlock();
720
_ilg
.Emit(OpCodes.Stloc, value);
731
_ilg
.BeginCatchBlock(cb.Test);
733
_ilg
.BeginExceptFilterBlock();
746
_ilg
.Emit(OpCodes.Stloc, value);
762
_ilg
.BeginFinallyBlock();
764
_ilg
.BeginFaultBlock();
770
_ilg
.EndExceptionBlock();
773
_ilg
.EndExceptionBlock();
777
_ilg
.Emit(OpCodes.Ldloc, value);
796
Label endFilter =
_ilg
.DefineLabel();
797
Label rightType =
_ilg
.DefineLabel();
802
_ilg
.Emit(OpCodes.Isinst, cb.Test);
803
_ilg
.Emit(OpCodes.Dup);
804
_ilg
.Emit(OpCodes.Brtrue, rightType);
805
_ilg
.Emit(OpCodes.Pop);
806
_ilg
.Emit(OpCodes.Ldc_I4_0);
807
_ilg
.Emit(OpCodes.Br, endFilter);
810
_ilg
.MarkLabel(rightType);
818
_ilg
.MarkLabel(endFilter);
819
_ilg
.BeginCatchBlock(null);
820
_ilg
.Emit(OpCodes.Pop);
Microsoft\Scripting\Compiler\LambdaCompiler.Unary.cs (61)
49
_ilg
.Emit(OpCodes.Call, typeof(RuntimeOps).GetMethod("Quote"));
52
_ilg
.Emit(OpCodes.Castclass, quote.Type);
65
_ilg
.Emit(OpCodes.Rethrow);
68
_ilg
.Emit(OpCodes.Throw);
84
_ilg
.Emit(OpCodes.Stloc, loc);
85
_ilg
.EmitInt(0);
86
_ilg
.EmitConvertToType(typeof(int), node.Operand.Type, false);
87
_ilg
.Emit(OpCodes.Ldloc, loc);
101
_ilg
.Emit(OpCodes.Ldlen);
111
Label labEnd =
_ilg
.DefineLabel();
115
_ilg
.Emit(OpCodes.Stloc, loc);
118
_ilg
.Emit(OpCodes.Ldloca, loc);
119
_ilg
.EmitHasValue(operandType);
120
_ilg
.Emit(OpCodes.Brfalse_S, labEnd);
123
_ilg
.Emit(OpCodes.Ldloca, loc);
124
_ilg
.EmitGetValueOrDefault(operandType);
130
_ilg
.Emit(OpCodes.Newobj, ci);
131
_ilg
.Emit(OpCodes.Stloc, loc);
133
_ilg
.MarkLabel(labEnd);
134
_ilg
.Emit(OpCodes.Ldloc, loc);
147
Label labIfNull =
_ilg
.DefineLabel();
148
Label labEnd =
_ilg
.DefineLabel();
152
_ilg
.Emit(OpCodes.Stloc, loc);
153
_ilg
.Emit(OpCodes.Ldloca, loc);
154
_ilg
.EmitHasValue(operandType);
155
_ilg
.Emit(OpCodes.Brfalse_S, labIfNull);
158
_ilg
.Emit(OpCodes.Ldloca, loc);
159
_ilg
.EmitGetValueOrDefault(operandType);
165
_ilg
.Emit(OpCodes.Newobj, ci);
166
_ilg
.Emit(OpCodes.Stloc, loc);
167
_ilg
.Emit(OpCodes.Br_S, labEnd);
170
_ilg
.MarkLabel(labIfNull);
171
_ilg
.Emit(OpCodes.Ldloca, loc);
172
_ilg
.Emit(OpCodes.Initobj, resultType);
174
_ilg
.MarkLabel(labEnd);
175
_ilg
.Emit(OpCodes.Ldloc, loc);
180
_ilg
.Emit(OpCodes.Box, operandType);
181
_ilg
.Emit(OpCodes.Isinst, resultType);
183
_ilg
.Emit(OpCodes.Unbox_Any, resultType);
193
_ilg
.Emit(OpCodes.Ldc_I4_0);
194
_ilg
.Emit(OpCodes.Ceq);
196
_ilg
.Emit(OpCodes.Not);
200
_ilg
.Emit(OpCodes.Not);
203
_ilg
.Emit(OpCodes.Ldc_I4_0);
204
_ilg
.Emit(OpCodes.Ceq);
208
_ilg
.Emit(OpCodes.Ldc_I4_1);
209
_ilg
.Emit(OpCodes.Ceq);
213
_ilg
.Emit(OpCodes.Nop);
217
_ilg
.Emit(OpCodes.Neg);
221
_ilg
.Emit(OpCodes.Box, operandType);
223
_ilg
.Emit(OpCodes.Isinst, resultType);
225
_ilg
.Emit(OpCodes.Unbox_Any, resultType);
231
_ilg
.Emit(OpCodes.Add);
235
_ilg
.Emit(OpCodes.Sub);
251
_ilg
.Emit(OpCodes.Ldc_I4_1);
255
_ilg
.Emit(OpCodes.Ldc_I8, (long)1);
258
_ilg
.Emit(OpCodes.Ldc_R4, 1.0f);
261
_ilg
.Emit(OpCodes.Ldc_R8, 1.0d);
276
_ilg
.Emit(OpCodes.Unbox_Any, node.Type);
329
_ilg
.EmitConvertToType(node.Operand.Type, node.Type, node.NodeType == ExpressionType.ConvertChecked);
342
_ilg
.EmitConvertToType(resultType, node.Type, false);