internal override void Generate(CodeGenerator cg)
{
/* Template:
* for (;MoveNext(enumerator);)
* $value = CurrentValue(enumerator);
* $key = CurrentKey(enumerator);
* {body}
* }
*/
var lblMoveNext = new object();
var lblBody = new object();
//
cg.Builder.EmitBranch(ILOpCode.Br, lblMoveNext);
cg.Builder.MarkLabel(lblBody);
// $value, $key
this.EnumereeEdge.EmitGetCurrent(cg, this.ValueVariable, this.KeyVariable);
// {
cg.GenerateScope(this.BodyBlock, NextBlock.Ordinal);
// }
// if (enumerator.MoveNext())
//cg.EmitSequencePoint(this.Condition.PhpSyntax);
cg.Builder.MarkLabel(lblMoveNext);
this.EnumereeEdge.EmitMoveNext(cg); // bool
cg.Builder.EmitBranch(ILOpCode.Brtrue, lblBody);
//
cg.Scope.ContinueWith(NextBlock);
}
}