Skip to content

Instantly share code, notes, and snippets.

@kevroletin
Last active December 14, 2015 10:09
Show Gist options
  • Save kevroletin/5069653 to your computer and use it in GitHub Desktop.
Save kevroletin/5069653 to your computer and use it in GitHub Desktop.
Test where Delphi allocates local variables of anonymous methods
program inner_var;
{$APPTYPE CONSOLE}
{$R *.res}
uses
System.SysUtils;
type
TCmd = (SET_VALUE, WRITE_VALUE);
TServerProc = reference to procedure(cmd: TCmd; data: Integer);
var
procArr: array[1..5] of TServerProc;
procedure StackMangler;
var arr: array[1..100] of Integer;
i: Integer;
begin
for i := 1 to 100 do
arr[i] := 777;
end;
procedure Factory;
var i: Integer;
begin
for i := 1 to 5 do
begin
procArr[i] :=
procedure (cmd: TCmd; data: Integer)
var storedValue: Integer;
begin
case cmd of
SET_VALUE: storedValue := data;
WRITE_VALUE: Writeln(storedValue);
end;
end;
end;
end;
var i: Integer;
begin
Factory();
for i := 1 to 5 do
begin
procArr[i](SET_VALUE, i);
procArr[i](WRITE_VALUE, 0);
end;
StackMangler();
for i := 1 to 5 do
begin
procArr[i](WRITE_VALUE, 0);
end;
Readln;
end.
@kevroletin
Copy link
Author

Result of execution:

1
2
3
4
5
777
777
777
777
777

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment