On Mon, 27 Aug 2007, Suresh Govindachar wrote:
> 
>   So ActiveState is "exporting" Perl_sv_2iv_flags and
>   Perl_newXS_flags in a way that is different from the
>   way they export other symbols.

Nope, this is all incorrect.  I've now downloaded the vim sources to
see what is really going on:

The src/if_perl.xs file contains code to redefine all Perl functions it
assumes it uses to wrapper names, and then looks up the real functions
at runtime.  That means that this file is specific to the Perl version
used to compile it and will need to be updated for Perl 5.8.9.  See for
example:

# if (PERL_REVISION == 5) && (PERL_VERSION >= 8)
#  define Perl_sv_2pv_flags dll_Perl_sv_2pv_flags
#  define Perl_sv_2pv_nolen dll_Perl_sv_2pv_nolen
# else
#  define Perl_sv_2pv dll_Perl_sv_2pv
# endif
...
#if (PERL_REVISION == 5) && (PERL_VERSION >= 8)
static char* (*Perl_sv_2pv_flags)(pTHX_ SV*, STRLEN*, I32);
static char* (*Perl_sv_2pv_nolen)(pTHX_ SV*);
#else
static char* (*Perl_sv_2pv)(pTHX_ SV*, STRLEN*);
#endif
...
#if (PERL_REVISION == 5) && (PERL_VERSION >= 8)
    {"Perl_sv_2pv_flags", (PERL_PROC*)&Perl_sv_2pv_flags},
    {"Perl_sv_2pv_nolen", (PERL_PROC*)&Perl_sv_2pv_nolen},
#else
    {"Perl_sv_2pv", (PERL_PROC*)&Perl_sv_2pv},
#endif

Similar code will be needed for sv_2iv_flags() and any other new symbol.
It is a bit awkward to do this for ActivePerl 822, as it identifies itself
as 5.8.8 because 5.8.9 has not been released yet, so we don't know which
additional features will still be added.  But internally AP822 is probably
closer to what will be 5.8.9 than to 5.8.8.

Anyways, the problem is that if_perl.xs is coupled pretty tightly to the
Perl internals and needs updating whenever the internals change.

Cheers,
-Jan

_______________________________________________
Perl-Win32-Users mailing list
Perl-Win32-Users@listserv.ActiveState.com
To unsubscribe: http://listserv.ActiveState.com/mailman/mysubs

Reply via email to