In Delphi XE2, the compiler declares 2 additional intrinsic routines that are undocumented.
They are ReturnAddress and AddressOfReturnAddress. They behaved as if they're declared like this:
function ReturnAddress: Pointer;function AddressOfReturnAddress: Pointer;
As far as I can discover, both ReturnAddress and AddressOfReturnAddress do the same thing. Return the address of the caller's next instruction.
procedure X; var P: Pointer; begin {.... other statements ... } P := ReturnAddress; // P will contain the address of the label ThisAddress after this statement gets executed. {... other statements ... } end; procedure Y; label ThisAddress; begin X; ThisAddress: {... other statements ...} end;
In 2017, with the release of Delphi 10.2 Tokyo, Embarcadero introduced a specialized implementation of the Observer pattern into the System.Classes unit. While it has been in the wild for 9 years, it remains a "hidden" architecture for many, primarily because it serves as the invisible engine behind LiveBindings. Other than live bindings, you can also use the Observer pattern as a way to update component settings to the Windows registry, an .ini file, or persist it elsewhere.
System.Classes