Code: Select all
Structure t1
l.l
a.a
EndStructure
Structure t2
d.d
b.t1
EndStructure
a.t2
Debug SizeOf(a)
Debug SizeOf(a\b)
Debug SizeOf(a\b\a) ; <- Syntax error?!
Debug SizeOf(t2)
Debug SizeOf(t2\b)
Debug SizeOf(t2\b\a); <- dito
Code: Select all
Structure t1
l.l
a.a
EndStructure
Structure t2
d.d
b.t1
EndStructure
a.t2
Debug SizeOf(a)
Debug SizeOf(a\b)
Debug SizeOf(a\b\a) ; <- Syntax error?!
Debug SizeOf(t2)
Debug SizeOf(t2\b)
Debug SizeOf(t2\b\a); <- dito
Code: Select all
Debug OffsetOf(t2\b) + OffsetOf(t1\a) ; Debug OffsetOf(t2\b\a)
Code: Select all
Structure ab
StructureUnion;structure-union is the trick here
_type.b[1]
somedata.l
EndStructureUnion
EndStructure
Structure bc
StructureUnion
_type.b[2]
elsedata.l
EndStructureUnion
EndStructure
Procedure ab_doit(*a.ab)
Debug "AB-Variant"
EndProcedure
Procedure bc_doit(*b.bc)
Debug "BC-Variant"
EndProcedure
Macro GetType(x): SizeOf(x\_type) :EndMacro
Macro doit(x)
CompilerSelect GetType(x)
CompilerCase gettype(ab)
ab_doit(x)
CompilerCase gettype(bc)
bc_doit(y)
CompilerDefault
CompilerError "[doit] Supported type"
CompilerEndSelect
EndMacro
Define var.ab, ok.bc
doit(var)
doit(ok)
Code: Select all
structure pepe
jose.f
juan.d
endstructure
Structure Person
Name.s
ForName.s
Age.pepe
EndStructure
var.person
Debug sizeof(person\Age); <- if this is allowed ...
;Debug sizeof(person\Age\juan); <- why this one is not?. At least it is not a "Syntax error" !