-
-
Notifications
You must be signed in to change notification settings - Fork 11
Closed
Labels
🐛 bugSomething isn't workingSomething isn't working
Description
struct S
{
public int Value { get; set; }
}
class Foo
{
S TernaryOperators(int i) => i == 2 ? new S(): new S();
}generates the snippet:
//Parameters of 'S TernaryOperators(int i) => i == 2 ? new S(): new S();'
var p_i_10 = new ParameterDefinition("i", ParameterAttributes.None, assembly.MainModule.TypeSystem.Int32);
md_TernaryOperators_8.Parameters.Add(p_i_10);
var lbl_conditionEnd_11 = il_TernaryOperators_9.Create(OpCodes.Nop);
var lbl_whenFalse_12 = il_TernaryOperators_9.Create(OpCodes.Nop);
il_TernaryOperators_9.Emit(OpCodes.Ldarg_1);
il_TernaryOperators_9.Emit(OpCodes.Ldc_I4, 2);
il_TernaryOperators_9.Emit(OpCodes.Ceq);
il_TernaryOperators_9.Emit(OpCodes.Brfalse_S, lbl_whenFalse_12); // after this instruction we should have the code to add a local var and init it. (true part of the ternary operator)
il_TernaryOperators_9.Emit(OpCodes.Br_S, lbl_conditionEnd_11);
il_TernaryOperators_9.Append(lbl_whenFalse_12); // after this instruction we should have similar code as comment above but for the false part of the ternary operator.
il_TernaryOperators_9.Append(lbl_conditionEnd_11);
il_TernaryOperators_9.Emit(OpCodes.Ret);Metadata
Metadata
Assignees
Labels
🐛 bugSomething isn't workingSomething isn't working