Hi,
This is the C code that called from a Perl function: (allocation, construction, etc. was used when I didn't attempt to use the Perl parser of the calling function)
dTHX; // Returns NULL for my_perl :(
// Call a PERL function
dSP; /* Ini
+tialize stack pointer */
ENTER; /* Eve
+rything created after here */
SAVETMPS; /* ...
+is a temporary variable. */
PUSHMARK(SP); /* Rem
+ember the stack pointer */
XPUSHs(sv_2mortal(newSViv((unsigned int)cbCtx))); /* Pus
+h callback context onto stack */
my_hash = newHV();
my_arr = newAV();
hv_store( my_hash, "aaaaaa", 6, newSViv(42), 0 );
for ( int i = 0; i < 50; i++ )
{
av_push( my_arr, newSViv((unsigned int)i) );
}
// Store reference to parameters on the HASH
hv_store( my_hash, "bbbbbb", 6, newRV((SV*)my_arr), 0 );
XPUSHs( sv_2mortal(newRV((SV*)my_hash)) );
//PUTBACK; /* Mak
+e local stack pointer global */
call_pv( funcName, G_SCALAR ); /* Cal
+l the function */
retVal = POPi; /* POP
+ the return of the PERL function */
SPAGAIN; /* Ref
+resh stack pointer */
PUTBACK;
FREETMPS; /* fre
+e that return value */
LEAVE; /* ...
+and the XPUSHed "mortal" args */
|