title: What does `at ReturnAddress` mean in Delphi?
body: <p>While browsing System.Zip (Delphi XE2) to see how it works, I found this function:</p>
  
  <pre><code>procedure VerifyWrite(Stream: TStream; var Buffer; Count: Integer);
  begin
    if Stream.Write(Buffer, Count) &lt;&gt; Count then
      raise EZipException.CreateRes(@SZipErrorWrite) at ReturnAddress;
  end;
  </code></pre>
  
  <p>It's the <code>at ReturnAddress</code> part that sort of puzzles me. </p>
  
  <p>I didn't know that <code>at</code> was a valid keyword (the syntax highlighter doesn't seem to recognise it either).</p>
  
  <p>According to the IDE it's declared as <code>System.ReturnAddress</code>, but I can only find it declared as a label somewhere in the (asm) code of <code>procedure _HandleAnyException;</code>.  The system unit is full of references to it though.</p>
  
  <p>So what I would like to know is this:</p>
  
  <ol>
  <li><strong>What is <code>ReturnAddress</code>?</strong></li>
  <li><strong>What exactly does <code>Raise Exception.Create ... at ReturnAddress</code> do?</strong></li>
  </ol>
  
  <p>Bonuspoints if you can give a real-world example of where this would be a useful construct, or if you can advice against using it.</p>