Je garderais goto-label-if
. mpiler transforme tout en tout cas. La forme la plus basique du contrôle de flux est la dérivation conditionnelle et cela se fait avec les opcodes branch
/jump
.
J'ai des exemples de conversions de boucle sur la réponse à another question.
... ce code C# ...
static void @ifgoto(bool input)
{
label:
if (input)
goto label;
}
static void @while(bool input)
{
while (input) ;
}
static void @for(bool input)
{
for (; input;) ;
}
... Compile ce ...
.method private hidebysig static void ifgoto(bool input) cil managed
{
.maxstack 8
L_0000: ldarg.0
L_0001: brtrue.s L_0000
L_0003: ret
}
.method private hidebysig static void while(bool input) cil managed
{
.maxstack 8
L_0000: ldarg.0
L_0001: brtrue.s L_0000
L_0003: ret
}
.method private hidebysig static void for(bool input) cil managed
{
.maxstack 8
L_0000: ldarg.0
L_0001: brtrue.s L_0000
L_0003: ret
}
.. Pour expliquer cela plus ...
// load input
L_0000: ldarg.0
// if input is true branch to L_000
L_0001: brtrue.s L_0000
// else return
L_0003: ret
Je garderais totalement le goto-label-if. –
pourquoi ce wiki n'est-il pas communautaire? –
Qui a besoin de boucles plus? Nous avons LINQ! –