I feel I'm becoming annoying, but: the embedding and extending interfaces are still using different names for Parrot_Interp/Parrot_INTERP. Which one is correct?
Mattia,
Both are correct. Sort of. :) Parrot_INTERP is an opaque type, which is a technique for improving binary compatibility. In the core, which is always compiled as a unit, the fields of the interpreter structure can be accessed directly. But to preserve binary compatibility if the struct layout is modified, embedders and extensions (which are built separately from the core) must use accessor functions, and in fact do not generally even have the struct definition.
Thus, in parrot/extend.h,
For non-core users: typedef void * Parrot_INTERP in non-core users
For core users: typedef struct Parrot_Interp * Parrot_INTERP for core users
Looks like Parrot_INTERP is the best name to use in general, though.
This is rather on the unclear side. I would have clarified this by using "private" or "opaque" on the internal name for the struct, or prefixing with an underscore to indicate a private identifier—rather than differentiating just by capitalization.
... okay, I'm beginning to agree with you. There's another name, Interp, for the same structure, defined in parrot/interpreter.h. That, and struct Parrot_Interp is a struct while Parrot_Interp is a pointer.
—
Gordon Henriksen [EMAIL PROTECTED]