On 14 October 2011 08:40, Steffen Mueller <smuel...@cpan.org> 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

Reply via email to