Might this be madness? (BRAINSTORMS AHEAD!): The API of the Perl data types could be specified in the following way: *) a class hierarchy (hopefully not a deep one). eg. AnyV (XV?) | ------------------------- | | | | SV AV HV ... ... *) for each class a list of preproc. macros which may (only) be called for this class and its derived classes. eg. SvPLUS(SV * this,SV * arg) The type-checking would, of course, be done on the expansion of the macro :-( PROS: + The macros will be defined for convenience anyway, I guess. + If -- in a later phase of design/implementation -- it proves to be better to remove a function from the vtables it could be turned into a static function or mapped to another virtual function (eg. PUSH -> SPLICE) without changing the callers of the function. (Of course *not* without recompiling the calling code :-( I'm starting to think it *is* madness.) + There could be (dirty?) inline optimizations for special cases. (Only makes sense if CALLs are quite expensive.) + The virtual function dispatch could be done for any argument of the macro, not only for the first. CONS: - This scheme could become a mess, if abused. - Binary compatiblity for extensions would require extremely strict version control of the macro definitions. (If they are kept together with the vtable definitions this is probably not a problem.) (There could also be wrapper functions.) INDIFFERENCE: . I think debugging would not suffer much, if there are not too many inline optimizations, because most macros will expand to a single unconditional line of C-code. -EdwinThread Next