SWISH-3
view release on metacpan or search on metacpan
/*
* This file is part of libswish3
* Copyright (C) 2010 Peter Karman
*
* libswish3 is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* libswish3 is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with libswish3; if not, write to the Free Software
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
*/
/* all XS stuff is prefixed with 'sp_' for Swish Perl */
#include "xs_boiler.h"
#include "libswish3.h"
#include "macros.h"
#include "xs_helpers.c"
MODULE = SWISH::3 PACKAGE = SWISH::3
PROTOTYPES: enable
void
_setup(CLASS)
char* CLASS;
CODE:
/* Perl has its own setenv/putenv, which can break when libswish3 uses native setenv().
* This magic Perl var seems to fix it, per this thread:
* http://grokbase.com/post/2004/11/11/suse-s-perl-safe-putenf-diff/IQxdco6nM5eY6zUPwmOkuMRH3vo
* Where the compile-time def was used, this var is not available (e.g. Solaris).
*/
#ifndef PERL_USE_SAFE_PUTENV
PL_use_safe_putenv = 1;
#endif /* PERL_USE_SAFE_PUTENV */
swish_setup();
swish_3*
_init(CLASS)
char* CLASS;
PREINIT:
swish_3* s3;
CODE:
s3 = swish_3_init( &sp_handler, NULL );
s3->ref_cnt++;
s3->stash = sp_Stash_new();
sp_Stash_set_char( s3->stash, DATA_CLASS_KEY, DATA_CLASS );
sp_Stash_set_char( s3->stash, CONFIG_CLASS_KEY, CONFIG_CLASS );
sp_Stash_set_char( s3->stash, ANALYZER_CLASS_KEY, ANALYZER_CLASS );
sp_Stash_set_char( s3->stash, PARSER_CLASS_KEY, PARSER_CLASS );
sp_Stash_set_char( s3->stash, SELF_CLASS_KEY, CLASS );
//warn("new() stash refcnt = %d\n", SvREFCNT((SV*)SvRV((SV*)s3->stash)));
//sp_describe_object( (SV*)s3->stash );
s3->analyzer->tokenizer = (&sp_tokenize3);
s3->analyzer->stash = sp_Stash_new();
sp_Stash_set_char( s3->analyzer->stash, SELF_CLASS_KEY, ANALYZER_CLASS );
s3->config->stash = sp_Stash_new();
sp_Stash_set_char( s3->config->stash, SELF_CLASS_KEY, CONFIG_CLASS );
RETVAL = s3;
OUTPUT:
RETVAL
void
_show_sizes(self)
SV* self;
CODE:
warn("sizeof pointer: %ld\n", sizeof(SV*));
warn("sizeof long: %ld\n", sizeof(long));
warn("sizeof int: %ld\n", sizeof(int));
warn("sizeof IV: %ld\n", sizeof(IV));
( run in 0.823 second using v1.01-cache-2.11-cpan-6aa56a78535 )