On 14 October 2011 08:40, Steffen Mueller <[email protected]> wrote:
> You can get this to work with typemaps. Have a look at how Mike Sheldrake
> solved this same problem (different symbol; Polygon on win32) for
> Math::Clipper. Should have been a few weeks/months ago.
Thanks for the help.
I wrote a typemap, which works, but only if I help xsubpp. I have the
following xs:
foo::group *
foo::group::new()
CODE:
RETVAL = new foo::group;
OUTPUT:
RETVAL
which xsubpp converts to:
XS(XS_Foo__Group_new)
{
#ifdef dVAR
dVAR; dXSARGS;
#else
dXSARGS;
#endif
if (items != 1)
croak_xs_usage(cv, "CLASS");
{
char * CLASS = (char *)SvPV_nolen(ST(0));
foo__group * RETVAL;
#line 16 "Group.xs"
RETVAL = new foo::group;
#line 88 "Group.c"
ST(0) = sv_newmortal();
sv_setref_pv(ST(0), "Foo::Group", (void*)RETVAL);
}
XSRETURN(1);
}
which g++ doesn't like:
Group.c: In function 'void XS_Foo__Group_new(PerlInterpreter*, CV*)':
Group.c:84: error: 'foo__group' was not declared in this scope
Group.c:84: error: 'RETVAL' was not declared in this scope
If I
#define foo__group foo::group
then g++ is happy and everything works, but this strikes me as an evil hack.
Is there a better way?
Regards
Jeff