void IILCode.Generate(ILExpressed il) { var value = il.DeclareLocal("index", _initialValue.ParameterType); il.Snippets.SetVariable(value, _initialValue); var labelCondition = il.DefineLabel(); il.TransferLong(labelCondition); var labelBody = il.DefineAndMarkLabel(); _bodyHandler.Invoke(il, value); il.Snippets.Increment(value, _increment); il.MarkLabel(labelCondition); _conditionHandler.Invoke(il, value); il.TransferLongIfTrue(labelBody); }