[Xapian-discuss] FIXMEs in Search::Xapian

Olly Betts olly at survex.com
Wed Sep 29 03:52:26 BST 2010


On Tue, Sep 28, 2010 at 06:03:53PM +0100, Tim Brody wrote:
> On Tue, 2010-09-28 at 15:51 +0100, Tim Brody wrote:
> 
> > There's something odd in perl/util.i:
> >       if ( ref( $item ) eq 'Search::Xapian::Query' ) {
> >           push(@arr, ref($item));
> >       } else {
> >           push(@arr, $item);
> >       }

Yes, the first branch will push the string 'Search::Xapian::Query' rather than
the object.

> After much faffing I've worked up a patch for the above segfault.
> 
> The minimal change is to replace the XS typemap with the correct (?)
> SWIG typemap ... but I also simplified the code structure by passing an
> ARRAY rather than ** + len.

That looks good to me - I tweaked the whitespace (looks like you have
tab width 4, but we use tab width 8 in Xapian code), and fixed it to
reserve av_len() + 1 elements, and have applied it in trunk r15022.

And thanks for including a regression test - that's very much appreciated.

I also added the new testcase to the XS Search::Xapian too (r15023) -
thankfully it already passes there.

> Is there a list of SWIG macros c.f. perlapi?

http://swig.org/Doc2.0/Perl5.html

Note that the way the Query constructors is handled isn't how you
typically do things in SWIG - this case is unusual as we want to handle
a "mixed" array.  Usually you just write a typemap for each parameter
type which SWIG doesn't already know how to handle.

Cheers,
    Olly



More information about the Xapian-discuss mailing list