2004-04-18 Cesar Lopez Nataren <cesar@ciencias.unam.mx>
+ * expression.cs: added code generation for 'x1 ? x2 :x3' op.
* Statement.cs: Added code generation for while and do-while.
2004-04-17 Cesar Lopez Nataren <cesar@ciencias.unam.mx>
internal override bool Resolve (IdentificationTable context, bool no_effect)
{
this.no_effect = no_effect;
- return true;
+ return Resolve (context);
}
internal override void Emit (EmitContext ec)
{
- throw new NotImplementedException ();
+ ILGenerator ig = ec.ig;
+ Label false_label = ig.DefineLabel ();
+ Label merge_label = ig.DefineLabel ();
+ CodeGenerator.fall_true (ec, cond_exp, false_label);
+ if (true_exp != null)
+ true_exp.Emit (ec);
+ ig.Emit (OpCodes.Br, merge_label);
+ ig.MarkLabel (false_label);
+ if (false_exp != null)
+ false_exp.Emit (ec);
+ ig.MarkLabel (merge_label);
+ if (no_effect)
+ ig.Emit (OpCodes.Pop);
}
}