123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108 |
- { %RESULT=217 }
- {****************************************************************}
- { CODE GENERATOR TEST PROGRAM }
- { By Carl Eric Codere }
- {****************************************************************}
- { NODE TESTED : secondtryfinally() }
- { secondraise() }
- {****************************************************************}
- { PRE-REQUISITES: secondload() }
- { secondassign() }
- { secondtypeconv() }
- { secondtryexcept() }
- { secondcalln() }
- { secondadd() }
- {****************************************************************}
- { DEFINES: }
- { FPC = Target is FreePascal compiler }
- {****************************************************************}
- {****************************************************************}
- program ttryfin2;
- {$ifdef fpc}
- {$mode objfpc}
- {$endif}
- Type
- TAObject = class(TObject)
- a : longint;
- end;
- TBObject = Class(TObject)
- b : longint;
- end;
- { The test cases were taken from the SAL internal architecture manual }
- procedure fail;
- begin
- WriteLn('Failure.');
- halt(1);
- end;
- var
- global_counter : integer;
- Procedure raiseanexception;
- Var A : TAObject;
- begin
- { Writeln ('Creating exception object');}
- A:=TAObject.Create;
- { Writeln ('Raising with this object');}
- raise A;
- { this should never happen, if it does there is a problem! }
- RunError(255);
- end;
- procedure IncrementCounter(x: integer);
- begin
- Inc(global_counter);
- end;
- procedure DecrementCounter(x: integer);
- begin
- Dec(global_counter);
- end;
- { Will the finally clause of a try block be called if the try block raises an exception? }
- Procedure DoTryFinallyOne;
- var
- failed : boolean;
- begin
- Write('Try..Finally with exception rise...');
- global_counter:=0;
- failed:=true;
- Try
- IncrementCounter(global_counter);
- RaiseAnException;
- DecrementCounter(global_counter);
- finally
- if global_counter = 1 then
- failed :=false;
- if failed then
- fail
- else
- WriteLn('Success!');
- end;
- end;
- Begin
- DoTryFinallyOne;
- end.
- {
- $Log$
- Revision 1.2 2002-09-07 15:40:56 peter
- * old logs removed and tabs fixed
- Revision 1.1 2002/08/03 11:05:14 carl
- + exception handling testing
- (still missing raise / on node testing)
- }
|