public void DoExp(DoExp e)
{
Label l1 = il.DefineLabel();
Label l2 = il.DefineLabel();
Label EndLabel = il.DefineLabel();
for (ExpList el = e.Vars; el != null; el = el.Tail){
el.Head.Visit(this);
}
il.Emit(OpCodes.Br, l1);
il.MarkLabel(l2);
for (ExpList el = e.Vars; el != null; el = el.Tail){
DoVarIter((DoVarDef)el.Head);
}
il.MarkLabel(l1);
for (ExpList el = e.Conds; el != null; el = el.Tail){
((DoCondExp)el.Head).EndLabel = EndLabel;
el.Head.Visit(this);
}
il.Emit(OpCodes.Br, l2);
il.MarkLabel(EndLabel);
}