fprintf (F, "union %s", ((SymEntry*) T->A.P)->Name);
break;
case T_TYPE_ARRAY:
+ /* Recursive call */
+ PrintType (F, T + 1);
if (T->A.L == UNSPECIFIED) {
- fprintf (F, "[] ");
+ fprintf (F, " []");
} else {
- fprintf (F, "[%ld] ", T->A.L);
+ fprintf (F, " [%ld]", T->A.L);
}
- /* Recursive call */
- PrintType (F, T + 1);
return;
case T_TYPE_PTR:
- fprintf (F, "* ");
/* Recursive call */
PrintType (F, T + 1);
+ fprintf (F, " *");
return;
case T_TYPE_FUNC:
fprintf (F, "function returning ");
switch (UnqualifiedType (T->C)) {
case T_VOID:
- return 0; /* Assume voids have size zero */
+ /* A void variable is a cc65 extension.
+ ** Get its size (in bytes).
+ */
+ return T->A.U;
+
+ /* Beware: There's a chance that this triggers problems in other parts
+ of the compiler. The solution is to fix the callers, because calling
+ SizeOf() with a function type as argument is bad. */
+ case T_FUNC:
+ return 0; /* Size of function is unknown */
case T_SCHAR:
case T_UCHAR:
return SIZEOF_INT;
case T_PTR:
- case T_FUNC: /* Maybe pointer to function */
return SIZEOF_PTR;
case T_LONG:
/* Array with unspecified size */
return 0;
} else {
- return T->A.L * SizeOf (T + 1);
+ return T->A.U * SizeOf (T + 1);
}
default: