Просматривая System.Zip (Delphi XE2), чтобы увидеть, как он работает, я обнаружил эту функцию:
procedure VerifyWrite(Stream: TStream; var Buffer; Count: Integer);
begin
if Stream.Write(Buffer, Count) <> Count then
raise EZipException.CreateRes(@SZipErrorWrite) at ReturnAddress;
end;
Эта часть at ReturnAddress
меня как-то озадачивает.
Я не знал, что at
было допустимым ключевым словом (кажется, что подсветка синтаксиса его тоже не распознает).
Согласно IDE, оно объявлено как System.ReturnAddress
,но я могу найти его только как метку где-то в (asm) коде procedure _HandleAnyException;
.Хотя системный блок полон ссылок на него.
Итак, я хотел бы знать следующее:
- Что такое
ReturnAddress
? - Что именно делает
Raise Exception.Create ... at ReturnAddress
?
Бонусные очки, если вы можете привести пример из реальной ситуации, где это будет полезная конструкция, или если вы можетесовет против его использования.