int callComp( SV* cmp, int a, int b ) { int count, rv; dSP; ENTER; SAVETMPS; PUSHMARK(SP); XPUSHs( sv_2mortal( newSViv( a ) ) ); XPUSHs( sv_2mortal( newSViv( b ) ) ); PUTBACK; if( ( count = call_sv( cmp, G_SCALAR ) ) != 1 ) croak( "Bad comparator" ); SPAGAIN; rv = POPi; FREETMPS; LEAVE; }