Skip to content

Instantly share code, notes, and snippets.

@cloudbender
Last active August 10, 2021 22:52
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save cloudbender/6bcb4a1b9bd0dbb657f2c4d7d4914db3 to your computer and use it in GitHub Desktop.
Save cloudbender/6bcb4a1b9bd0dbb657f2c4d7d4914db3 to your computer and use it in GitHub Desktop.
{$mode delphi}
program know_thy_self;
// inspect addresses of caller, self, result
// in various models
uses
sysutils;
// sprites to be discreet paintable screen objects
// class version
Type classSprite = class
public
procedure reportproc; // report as proc
function reportfunc:classSprite; // report as func returning self
end;
procedure classSprite.reportproc;
begin
writeln( ' self : '+IntToHex( Integer( @self )));
end;
function classSprite.reportfunc:classSprite;
begin
result:=self;
writeln( ' self : '+IntToHex( Integer( @self )));
writeln( ' result : '+IntToHex( Integer( @result )));
end;
// object version
Type objectSprite = Object
public
procedure reportproc; // report as proc
function reportfunc:objectSprite; // report as func returning self
end;
procedure objectSprite.reportproc;
begin
writeln( ' self : '+IntToHex( Integer( @self )));
end;
function objectSprite.reportfunc:objectSprite;
begin
result:=self;
writeln( ' self : '+IntToHex( Integer( @self )));
writeln( ' result : '+IntToHex( Integer( @result )));
end;
// main
var csprite: classSprite;
var osprite: objectSprite;
begin
csprite:= classSprite.create();
writeln('');
writeln(' as class instance ...');
writeln(' caller : '+IntToHex( Integer( @csprite )));
writeln(' when calling procs ...');
csprite.reportproc();
csprite.reportproc();
csprite.reportproc();
writeln(' when calling funcs ...');
csprite.reportfunc();
csprite.reportfunc();
csprite.reportfunc();
csprite.free;
writeln('');
writeln('');
writeln(' as object var ...');
writeln(' caller : '+IntToHex( Integer( @osprite )));
writeln(' when calling procs ...');
osprite.reportproc();
osprite.reportproc();
osprite.reportproc();
writeln(' when calling funcs ...');
osprite.reportfunc();
osprite.reportfunc();
osprite.reportfunc();
writeln('');
end.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment