Man kann ja
SizeOf() auf Datentypen, Konstanten oder Variablen anwenden.
So muss es wohl ablaufen
Der Compiler schaut also in seinen Syntaxtree (die Dinge sind intern als Baum organisiert) nach.
Der Baum wird auch als "dekorierter Syntaxbaum" bezeichnet.
Trifft er auf eine Variable, dann entnimmt er den Datentyp.
Mit dem Datentyp schaut er in seinen Datatree und entnimmt die Grösse in Bytes.
Pseudocode:
Delphi-Quellcode:
function SizeOf(arg : string):integer;
begin
item := LookupTree(arg);
if item=nil then
CompilerError;
if IsVariable(item) then
result := SizeOf(Item.datatypeName)
else
result := Item.Instancesize;
end;
Bei komplexen Datentypen wie Records und Objekten, liefert Instancesize die Summe der Einzelteile.
Bei Unions wird die max. InstanceSize der Einzelteile geliefert.