public override bool Resolve (BlockContext ec)
{
bool ok = true;
ec.StartFlowBranching (FlowBranching.BranchingType.Loop, loc);
bool was_unreachable = ec.CurrentBranching.CurrentUsageVector.IsUnreachable;
ec.StartFlowBranching (FlowBranching.BranchingType.Embedded, loc);
if (!EmbeddedStatement.Resolve (ec))
ok = false;
ec.EndFlowBranching ();
if (ec.CurrentBranching.CurrentUsageVector.IsUnreachable && !was_unreachable)
ec.Report.Warning (162, 2, expr.Location, "Unreachable code detected");
expr = expr.Resolve (ec);
if (expr == null)
ok = false;
else if (expr is Constant){
bool infinite = !((Constant) expr).IsDefaultValue;
if (infinite)
ec.CurrentBranching.CurrentUsageVector.Goto ();
}
ec.EndFlowBranching ();
return ok;
}