internal static void EmitConstrainedCoercion(ILEmitter/*!*/ il, Type/*!*/ narrow, Type/*!*/ wide, object threshold) { Label else_label = il.DefineLabel(); Label endif_label = il.DefineLabel(); il.Emit(OpCodes.Dup); // IF (STACK <= threshold) THEN il.LoadLiteral(threshold); il.Emit(OpCodes.Bgt_S, else_label); // LOAD (narrow)STACK il.Conv(narrow, false); il.Emit(OpCodes.Box, narrow); il.Emit(OpCodes.Br_S, endif_label); // ELSE il.MarkLabel(else_label); // LOAD (wide)STACK il.Conv(wide, false); il.Emit(OpCodes.Box, wide); // ENDIF il.MarkLabel(endif_label); }
public void EmitLoad(ILEmitter il) { il.LoadLiteral(literal); }