public override bool AddBreakOrigin (UsageVector vector, Location loc) { if (finally_vector != null) { int errors = Report.Errors; Parent.AddBreakOrigin (vector, loc); if (errors == Report.Errors) Report.Error (157, loc, "Control cannot leave the body of a finally clause"); } else { saved_origins = new BreakOrigin (saved_origins, vector, loc); } // either the loop test or a back jump will follow code stmt.SomeCodeFollows (); return true; }
public ReturnOrigin (SavedOrigin next, UsageVector vector, ExitStatement stmt) : base (next, vector) { Stmt = stmt; }
public GotoOrigin (SavedOrigin next, UsageVector vector, Goto stmt) : base (next, vector) { Stmt = stmt; }
public ContinueOrigin (SavedOrigin next, UsageVector vector, Location loc) : base (next, vector) { Loc = loc; }
public BreakOrigin (SavedOrigin next, UsageVector vector, Location loc) : base (next, vector) { Loc = loc; }
protected SavedOrigin (SavedOrigin next, UsageVector vector) { Next = next; Vector = vector.Clone (); }
public override bool AddGotoOrigin (UsageVector vector, Goto goto_stmt) { LabeledStatement s = current_vector.Block == null ? null : current_vector.Block.LookupLabel (goto_stmt.Target); if (s != null) throw new InternalErrorException ("Shouldn't get here"); if (finally_vector != null) { int errors = Report.Errors; Parent.AddGotoOrigin (vector, goto_stmt); if (errors == Report.Errors) Report.Error (157, goto_stmt.loc, "Control cannot leave the body of a finally clause"); } else { saved_origins = new GotoOrigin (saved_origins, vector, goto_stmt); } return true; }
public override bool AddReturnOrigin (UsageVector vector, ExitStatement exit_stmt) { if (finally_vector != null) { int errors = Report.Errors; Parent.AddReturnOrigin (vector, exit_stmt); if (errors == Report.Errors) exit_stmt.Error_FinallyClause (Report); } else { saved_origins = new ReturnOrigin (saved_origins, vector, exit_stmt); } // sets ec.NeedReturnLabel() stmt.SomeCodeFollows (); return true; }