Graeme Geldenhuys wrote:
Hi,

While porting DUnit2 to Free Pascal I came across the following code. I have never seen syntax like that, yet it is accepted by FPC and Delphi compilers.

Is this documented in FPC docs? What does the '... at <some_function_returning_a_pointer>' do?

Unfortunately I don't have any docs (fpc, delphi or kylix) available here on my home pc, but I'll try and look for tips tomorrow at work. In somebody else could give some insight it would be much appreciated.

=======================================
procedure TTestProc.Warn(const ErrorMsg: string; const ErrorAddress: Pointer);
begin
 if ErrorAddress = nil then
   raise EPostTestFailure.Create(ErrorMsg) at CallerAddr
 else
   raise EPostTestFailure.Create(ErrorMsg) at ErrorAddress;
end;
Usually you place raise ESomeException.Create() to paticular place where it happen. Therefore in IDE or in your application you will see error message with address of function where exception was raised.

But if you place raise ESomeException.Create() to some special function which only raises it like your Warn fiunction then address of exception will be useless. Who wants to know that it was raised in Warn function? Better to assign a caller address to that exception. For this we have 'at' keyword.

You can replace this code:
if ErrorAddress = nil then
  raise EPostTestFailure.Create(ErrorMsg) at CallerAddr

by next magic functions in fpc:
if ErrorAddress = nil then
  raise EPostTestFailure.Create(ErrorMsg) at get_caller_addr(get_frame)

Best regards,
Paul Ishenin.
_______________________________________________
fpc-pascal maillist  -  fpc-pascal@lists.freepascal.org
http://lists.freepascal.org/mailman/listinfo/fpc-pascal

Reply via email to