@@ -2568,7 +2568,7 @@ private static bool TryEmitCoalesceOperator(BinaryExpression expr, ILGenerator i
25682568 il.DmarkLabel(labelFalse);
25692569 else
25702570 {
2571- il.Demit(OpCodes.Br , labelDone);
2571+ il.Demit(OpCodes.Br_S , labelDone); // safe: jumps over Castclass (5 bytes) = 5 bytes
25722572 il.DmarkLabel(labelFalse); // todo: @bug? should we insert the boxing for the Nullable value type before the Castclass
25732573 il.Demit(OpCodes.Castclass, exprType);
25742574 il.DmarkLabel(labelDone);
@@ -2947,9 +2947,9 @@ private static bool TryEmitSimpleUnaryExpression(UnaryExpression expr, Expressio
29472947 {
29482948 var falseLabel = il.DefineLabel();
29492949 var continueLabel = il.DefineLabel();
2950- il.Demit(OpCodes.Brfalse , falseLabel);
2950+ il.Demit(OpCodes.Brfalse_S , falseLabel); // safe: jumps over Ldc_I4_0 (1 byte) + Br_S (2 bytes) = 3 bytes
29512951 il.Demit(OpCodes.Ldc_I4_0);
2952- il.Demit(OpCodes.Br , continueLabel);
2952+ il.Demit(OpCodes.Br_S , continueLabel); // safe: jumps over Ldc_I4_1 (1 byte) = 1 byte
29532953 il.DmarkLabel(falseLabel);
29542954 il.Demit(OpCodes.Ldc_I4_1);
29552955 il.DmarkLabel(continueLabel);
@@ -5770,9 +5770,9 @@ var methodName
57705770 var resultLabel = il.DefineLabel();
57715771 var isNullLabel = il.DefineLabel();
57725772 EmitLoadLocalVariable(il, leftHasValueVar);
5773- il.Demit(OpCodes.Brfalse , isNullLabel);
5773+ il.Demit(OpCodes.Brfalse_S , isNullLabel); // safe: jumps over EmitLoadLocalVariable (1-4 bytes) + Brtrue_S (2 bytes) = 3-6 bytes
57745774 EmitLoadLocalVariable(il, rightHasValueVar);
5775- il.Demit(OpCodes.Brtrue , resultLabel);
5775+ il.Demit(OpCodes.Brtrue_S , resultLabel); // safe: jumps over Pop (1 byte) + Ldnull (1 byte) = 2 bytes
57765776 il.DmarkLabel(isNullLabel);
57775777 il.Demit(OpCodes.Pop);
57785778 il.Demit(OpCodes.Ldnull);
@@ -5977,7 +5977,7 @@ private static bool TryEmitLogicalOperator(BinaryExpression expr, ExpressionType
59775977 return false;
59785978
59795979 var labelDone = il.DefineLabel();
5980- il.Demit(OpCodes.Br , labelDone);
5980+ il.Demit(OpCodes.Br_S , labelDone); // safe: jumps over Ldc_I4_0 or Ldc_I4_1 (1 byte) = 1 byte
59815981
59825982 il.DmarkLabel(labelSkipRight); // label the second branch
59835983 il.Demit(nodeType == ExpressionType.AndAlso ? OpCodes.Ldc_I4_0 : OpCodes.Ldc_I4_1);
0 commit comments