Hi - I'm trying to write an XS Function which returns a list of values:
Following the examples in the perlxs/perlguts/perlxstut pages, I tried:
void
j_random_ids(zp, ...)
J_Random * zp
PREINIT:
int i;
int j;
int p;
int n = 0;
PPCODE:
[ some code to mangle some data structures here
and put the number of return values in n ]
if( zp->id[ID_OVERFLOW] )
{
XSRETURN_EMPTY;
}
else
{
EXTEND( SP, n );
for(i = 0; i < MAX_IDS; i++)
{
if(zp->id[i]) { PUSHi(i); }
}
}
I've also tried:
else
{
for(i = 0; i < MAX_IDS; i++)
{
if(zp->id[i]) { XPUSHi(i); }
}
}
Both of these result in the folowing error:
Jrandom.xs: In function `XS_Z__j_random_ids':
Jrandom.xs:227: `targ' undeclared (first use in this function)
Jrandom.xs:227: (Each undeclared identifier is reported only once
Jrandom.xs:227: for each function it appears in.)
make: *** [Jrandom.o] Error 1
make: Target `makemakerdflt' not remade because of errors.
I ran Jrandom.c through gcc -E, and found things like:
Perl_sv_setiv (targ , (IV)( i ));
in there, but none of the files in/usr/libb/perl5/5.005/i38-linux/CORE
seem to define targ : there's a '#define TARG targ', but no definition
of targ itself [based on a quick look and some grepping]
perl -V says:
ummary of my perl5 (5.0 patchlevel 5 subversion 3) configuration:
Platform:
osname=linux, osvers=2.2.15pre14, archname=i386-linux
uname='linux them 2.2.15pre14 #2 smp mon mar 13 14:29:00 est 2000 i686
unknown '
hint=recommended, useposix=true, d_sigaction=define
usethreads=undef useperlio=undef d_sfio=undef
Compiler:
cc='cc', optimize='-O2 ', gccversion=2.95.2 20000313 (Debian GNU/Linux)
cppflags='-Dbool=char -DHAS_BOOL -D_REENTRANT -DDEBIAN
-I/usr/local/include'
ccflags ='-Dbool=char -DHAS_BOOL -D_REENTRANT -DDEBIAN
-I/usr/local/include'
stdchar='char', d_stdstdio=undef, usevfork=false
intsize=4, longsize=4, ptrsize=4, doublesize=8
d_longlong=define, longlongsize=8, d_longdbl=define, longdblsize=12
alignbytes=4, usemymalloc=n, prototype=define
Linker and Libraries:
ld='cc', ldflags =' -L/usr/local/lib'
libpth=/usr/local/lib /lib /usr/lib
libs=-lnsl -lndbm -lgdbm -ldbm -ldb -ldl -lm -lc -lposix -lcrypt
libc=, so=so, useshrplib=false, libperl=libperl.a
Dynamic Linking:
dlsrc=dl_dlopen.xs, dlext=so, d_dlsymun=undef, ccdlflags='-rdynamic'
cccdlflags='-fPIC', lddlflags='-shared -L/usr/local/lib'
Characteristics of this binary (from libperl):
Built under linux
Compiled at Apr 30 2000 12:08:38
@INC:
/usr/lib/perl5/5.005/i386-linux
/usr/lib/perl5/5.005
/usr/local/lib/site_perl/i386-linux
/usr/local/lib/site_perl
/usr/lib/perl5
.
Any ideas? Hints? Thwacks upside the head with a clue by four?
--
Vivek