Eval-Compile
view release on metacpan or search on metacpan
return -1;
}
static AV *eval_cache=0;
MODULE = Eval::Compile PACKAGE = Eval::Compile
void
cache_eval_undef()
PREINIT:
SV *last;
PPCODE:
last = eval_cache;
if ( !eval_cache ){
XSRETURN(0);
};
eval_cache=0;
SvREFCNT_dec( last );
last =0 ;
XSRETURN(0);
PREINIT:
I32 ret_count;
//I32 i;
SV **value;
char *pstr;
STRLEN plen;
AV* temppad;
HV* closure_cache;
p_closure closure;
dXSTARG;
PPCODE:
PERL_UNUSED_VAR(ix);
if ( !eval_cache ){
eval_cache = newAV();
temppad = eval_cache;
closure_cache = newHV();
AvPUSHs( eval_cache, (SV*)closure_cache );
}
else {
temppad = eval_cache;
closure_cache =( HV*) AvELT( eval_cache, 0);
void
cache_this ( SV * key, CV * calc_sv )
PREINIT:
I32 ret_count;
//I32 i;
SV **value;
char *pstr;
STRLEN plen;
dXSTARG;
PPCODE:
if ( ! (PL_op->op_private & OPpENTERSUB_HASTARG )){
croak( "panic: XS sub no target " );
};
if (SvTYPE(TARG) != SVt_PVHV ){
(void)SvUPGRADE( TARG , SVt_PVHV );
}
pstr = SvPV( key, plen );
value = hv_fetch( (HV*) TARG, pstr, plen, 0);
if (value){
XPUSHs(*value);
XSRETURN(1);
void run_sub( SV * code )
PREINIT:
I32 ret_count;
int i;
PPCODE:
dSP;
PUSHMARK(SP);
PUTBACK;
ret_count = call_sv( code, G_NOARGS | G_SCALAR );
SPAGAIN;
for( i=0; i<ret_count; ++i){
sv_dump( POPs );
}
PUTBACK;
void
compile_sub( SV *codetext)
PREINIT:
SV *text;
SV *anonsub;
PPCODE:
//dSP;
text= sv_newmortal( );
sv_setpv( text , "sub {\n" );
sv_catsv( text, codetext );
sv_catpv( text, "\n};\n" );
anonsub = eval_pv( SvPV_nolen(text) , 0 );
if ( !SvTRUE(ERRSV)){
XPUSHs(&PL_sv_no);
XPUSHs( anonsub );
PREINIT:
int i;
PADNAMELIST *names;
PAD *values;
CV *subcv;
long subcv_depth;
long stack_depth;
bool context_match;
U32 context_seq;
AV *results;
PPCODE:
if (cv && CvPADLIST( cv ) ){
PADLIST *padlist = CvPADLIST( cv );
if (CvDEPTH(cv)){
croak( "Fail compile: cv is running" );
}
stack_depth = dive_in_stack();
if ( stack_depth < 0 ){
warn( "found no variables " );
}
context_match = FALSE;
( run in 0.347 second using v1.01-cache-2.11-cpan-5511b514fd6 )