The guard against nested pointer chains searched every sublist for a `*', including the ones that hold a type of their own. A function type with a pointer parameter, while the same type with an int parameter passed. (* [char 4]) was let through as well and came out as `vector-ref char 4 * p'. A `*' inside an array or a function type belongs to that type, so the search stops there. What the flat conversion cannot express is now named: a fn type is a function pointer already, and a pointer to an array is not supported. Parameters of a function type are walked without their names. C writes a parameter name into a declarator and a type has none, so fmt-c prints whatever it is handed there as a type: `(s (* char))' came out as `char(*) s'. fmt-c printed a nameless array declarator's #f into the C, which showed up in these parameters.
17 KiB
17 KiB