According to Bernhard Tschirren:
You cannot use SizeOf with an object TYPE. See test program below: [...]
Now you can. :-) Diff below.
Sayonara
Do swidanya,
Peter
Dipl.-Phys. Peter Gerwinski, Essen, Germany, free physicist and programmer peter.gerwinski@uni-essen.de - http://home.pages.de/~peter.gerwinski/ [970201] maintainer GNU Pascal [970714] - http://home.pages.de/~gnu-pascal/ [970125]
8< --------------------------------------------------------------------------- --- ../../gpc-970806/p/parse.y Wed Aug 6 14:47:15 1997 +++ parse.y Sat Aug 9 11:30:51 1997 @@ -5238,14 +5240,30 @@ && DECL_BIT_FIELD (TREE_OPERAND ($3, 1))) error ("`SizeOf' applied to a packed record field");
+ /* Now $3 is either a variable access or a type declaration. + * In both cases, TREE_TYPE ($3) carries the actual type. + */ if (PASCAL_TYPE_OBJECT (TREE_TYPE ($3))) { /* Read the size of the object at run time from the VMT. */ - tree vmt = build_component_ref ($3, - get_identifier ("vmt")); - $$ = build_component_ref (build_indirect_ref (vmt, - "`SizeOf'"), + tree vmt; + if (TREE_CODE ($3) == TYPE_DECL) + { + char *name = concat ("", "vmt_", IDENTIFIER_POINTER ( + TYPE_LANG_NAME (TREE_TYPE ($3)))); + vmt = lookup_name (get_identifier (name)); + if (! vmt) + abort (); + free (name); + } + else + { + vmt = build_component_ref ($3, + get_identifier ("vmt")); + vmt = build_indirect_ref (vmt, "`SizeOf'"); + } + $$ = build_component_ref (vmt, get_identifier ("object_size")); } else