chromatic wrote: > > Having written or maintained more than one thunking layer between different > calling conventions (Perl 5 to C, Parrot to C, Perl 5 to Parrot, Parrot to > Perl 5), let me assure you that calling conventions between languages differ > more than they are similar. > > Forcing all creators of NCI bindings to map well-understood C concepts to > completely different semantics in an attempt to unify parsing -- especially > when there already exists a usable, forty-year old mechanism for specifying > the signatures of C functions -- is a foolish consistency.
We're not using a "forty-year old mechanism for specifying the signatures of C functions", we're using our own custom syntax that includes things like the Parrot interpreter, Parrot register types, slurpy arrays, etc. Oh, wait... do you think I mean that we should eliminate NCI entirely in favor of PCC? No, not at all. I'm only talking about the strings representing the signatures. >> Shifting this syntax over to PCC-style is a trivial conversion. > > If that is the case, you may convince me. Okay, quick pass conversion: # INT register stuff # I (same) - INTVAL # c (C) - char # s (H) - short # i (T) - int # l (L) - long # NUM register stuff # N (same) - FLOATVAL # f (F) - float # d (D) - double # STR register stuff # S (same) - pointer to a STRING-register # t (C*) - character string (0-terminated) # Buffers are not valid return parameters, # use 'p' when the native function returns a pointer value # b (V*) - void * # B (V**) - void ** # PMC register stuff # P (same) - pointer to a PMC-register # O ('Pi' for *P*MC *i*nvocant) - pointer to PMC-register (object) # p (A) - data pointer from PMC (on store into a new UnManagedStruct PMC) [Note: generic pointer type, i.e. "pointer to *A*nything" ] # 2 (H*) - pointer to short # 3 (T*) - pointer to int # 4 (L*) - pointer to long # void stuff # v (V) - void # special stuff # 0 (Z) - insert a NULL (pointer) - doesn't consume a register # J (same) - Parrot_Interp param # @ ('Ps' for *P*MC *s*lurpy) - slurpy array # callback stuff # U ('Pc' for *P*MC *c*allback) - Single PMC parameter to pass into callback - user data And, converting a few samples: d JOd # Parrot builtins becomes: JPiD->D v JOPSP # Namespace.set_global becomes: JPiPSP->V (or:) JPiPSP-> Allison _______________________________________________ http://lists.parrot.org/mailman/listinfo/parrot-dev