本文整理汇总了C++中call_sv函数的典型用法代码示例。如果您正苦于以下问题:C++ call_sv函数的具体用法?C++ call_sv怎么用?C++ call_sv使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了call_sv函数的20个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的C++代码示例。
示例1: call_async
static void
call_async(plcb_OPCTX *ctx, AV *resobj)
{
SV *cv = ctx->u.callback;
dSP;
if (cv == NULL || SvOK(cv) == 0) {
warn("Context does not have a callback (%p)!", cv);
return;
}
if ((ctx->flags & PLCB_OPCTXf_IMPLICIT) == 0) {
if (ctx->nremaining && (ctx->flags & PLCB_OPCTXf_CALLEACH) == 0) {
return; /* Still have ops. Only call once they're all complete */
}
}
ENTER;
SAVETMPS;
PUSHMARK(SP);
XPUSHs(sv_2mortal(newRV_inc((SV*)resobj)));
PUTBACK;
call_sv(cv, G_DISCARD);
FREETMPS;
LEAVE;
if (ctx->nremaining == 0 && (ctx->flags & PLCB_OPCTXf_CALLDONE)) {
ENTER;
SAVETMPS;
PUSHMARK(SP);
call_sv(cv, G_DISCARD);
FREETMPS;
LEAVE;
}
}
开发者ID:benvanstaveren,项目名称:perl-Couchbase-Client,代码行数:35,代码来源:callbacks.c
示例2: __getdns_callback
void
__getdns_callback(Net__GetDNS__XS__Context * context,
getdns_callback_type_t callback_type, Net__GetDNS__XS__Dict * response,
void * userarg, getdns_transaction_t transaction_id)
{
dSP;
struct __callback * cb;
if (!userarg) return;
cb = (struct __callback *)userarg;
if (!cb->callbackfn) return;
ENTER;
SAVETMPS;
PUSHMARK(SP);
XPUSHs(sv_2mortal(sv_setref_pv(newSV(0), "Net::GetDNS::XS::ContextPtr", (void *)context)));
XPUSHs(sv_2mortal(newSVuv(callback_type)));
XPUSHs(sv_2mortal(sv_setref_pv(newSV(0), "Net::GetDNS::XS::DictPtr", (void *)response)));
XPUSHs(sv_2mortal(newSVsv(cb->userarg)));
XPUSHs(sv_2mortal(newSVuv(transaction_id)));
PUTBACK;
call_sv((SV*)(cb->callbackfn), G_VOID);
FREETMPS;
LEAVE;
SvREFCNT_dec(cb->callbackfn);
Safefree(cb);
}
开发者ID:DNS-OARC,项目名称:p5-Net-GetDNS,代码行数:29,代码来源:net_getdns.c
示例3: call_sv_va
static SV *
call_sv_va (SV *func, int num, ...) {
dSP;
SV *ret;
I32 count;
va_list args;
ENTER;
SAVETMPS;
PUSHMARK (SP);
va_start (args, num);
for( ; num > 0; num-- ) {
XPUSHs (va_arg( args, SV* ));
}
va_end(args);
PUTBACK;
count = call_sv(func, G_SCALAR);
SPAGAIN;
if (count != 1) {
croak ("method didn't return a value");
}
ret = POPs;
SvREFCNT_inc (ret);
PUTBACK;
FREETMPS;
LEAVE;
return ret;
}
开发者ID:pkdevboxy,项目名称:mongo-perl-driver,代码行数:33,代码来源:perl_mongo.c
示例4: blizkost_call_in
void
blizkost_call_in(BLIZKOST_NEXUS, SV *what, U32 mode, PMC *positp, PMC *namedp,
PMC **retp) {
dBNPERL; dBNINTERP;
int num_returns, i;
{
/* Set up the stack. */
dSP;
ENTER;
SAVETMPS;
PUSHMARK(SP);
PUTBACK;
blizkost_slurpy_to_stack(nexus, positp, namedp);
/* Invoke the methods. */
num_returns = call_sv(what, mode);
SPAGAIN;
/* Build the results PMC array. */
*retp = pmc_new(interp, enum_class_ResizablePMCArray);
for (i = 0; i < num_returns; i++) {
SV *result_sv = POPs;
PMC *result_pmc = blizkost_wrap_sv(nexus, result_sv);
VTABLE_unshift_pmc(interp, *retp, result_pmc);
}
PUTBACK;
FREETMPS;
LEAVE;
}
}
开发者ID:GunioRobot,项目名称:blizkost,代码行数:32,代码来源:bkmarshal.c
示例5: modperl_perl_call_list
void modperl_perl_call_list(pTHX_ AV *subs, const char *name)
{
I32 i, oldscope = PL_scopestack_ix;
SV **ary = AvARRAY(subs);
MP_TRACE_g(MP_FUNC, "pid %lu" MP_TRACEf_TID MP_TRACEf_PERLID
" running %d %s subs",
(unsigned long)getpid(), MP_TRACEv_TID_ MP_TRACEv_PERLID_
AvFILLp(subs)+1, name);
for (i=0; i<=AvFILLp(subs); i++) {
CV *cv = (CV*)ary[i];
SV *atsv = ERRSV;
PUSHMARK(PL_stack_sp);
call_sv((SV*)cv, G_EVAL|G_DISCARD);
if (SvCUR(atsv)) {
Perl_sv_catpvf(aTHX_ atsv, "%s failed--call queue aborted",
name);
while (PL_scopestack_ix > oldscope) {
LEAVE;
}
Perl_croak(aTHX_ "%s", SvPVX(atsv));
}
}
}
开发者ID:gitpan,项目名称:mod_perl,代码行数:27,代码来源:modperl_util.c
示例6: PERL_SET_CONTEXT
SV *p5_scalar_call_gv_two_args(PerlInterpreter *my_perl, GV *gv, SV *arg, SV *arg2, I32 *count, I32 *type, I32 *err) {
PERL_SET_CONTEXT(my_perl);
{
dSP;
SV * retval = NULL;
ENTER;
SAVETMPS;
PUSHMARK(SP);
XPUSHs((SV*)arg);
XPUSHs((SV*)arg2);
PUTBACK;
SV * const rv = sv_2mortal(newRV((SV*)GvCV(gv)));
*count = call_sv(rv, G_SCALAR | G_EVAL);
SPAGAIN;
handle_p5_error(err);
if (*err)
fprintf(stderr, "err: %d\n", *err);
retval = pop_return_values(my_perl, sp, *count, type);
SPAGAIN;
PUTBACK;
FREETMPS;
LEAVE;
return retval;
}
}
开发者ID:niner,项目名称:Inline-Perl5,代码行数:34,代码来源:p5helper.c
示例7: invoke_row
/* Handles the row, adding it into the internal structure */
static void
invoke_row(AV *req, SV *reqrv, SV *rowsrv)
{
SV *meth;
dSP;
ENTER;
SAVETMPS;
PUSHMARK(SP);
/* First arg */
XPUSHs(reqrv);
meth = *av_fetch(req, PLCB_VHIDX_PRIVCB, 0);
if (rowsrv) {
XPUSHs(rowsrv);
}
PUTBACK;
call_sv(meth, G_DISCARD|G_EVAL);
SPAGAIN;
if (SvTRUE(ERRSV)) {
warn("Got error in %s", SvPV_nolen(ERRSV));
}
if (rowsrv) {
av_clear((AV *)SvRV(rowsrv));
}
FREETMPS;
LEAVE;
}
开发者ID:benvanstaveren,项目名称:perl-Couchbase-Client,代码行数:34,代码来源:query.c
示例8: owl_perlconfig_edit_callback
void owl_perlconfig_edit_callback(owl_editwin *e, bool success)
{
SV *cb = owl_editwin_get_cbdata(e);
SV *text;
dSP;
if(cb == NULL) {
owl_function_error("Perl callback is NULL!");
return;
}
text = owl_new_sv(owl_editwin_get_text(e));
ENTER;
SAVETMPS;
PUSHMARK(SP);
XPUSHs(sv_2mortal(text));
XPUSHs(sv_2mortal(newSViv(success)));
PUTBACK;
call_sv(cb, G_DISCARD|G_EVAL);
if(SvTRUE(ERRSV)) {
owl_function_error("%s", SvPV_nolen(ERRSV));
}
FREETMPS;
LEAVE;
}
开发者ID:asedeno,项目名称:barnowl,代码行数:29,代码来源:perlconfig.c
示例9: PUSHMARK
static SV *run_app(request_rec *r, SV *app, SV *env)
{
dTHX;
int count;
SV *res;
dSP;
ENTER;
SAVETMPS;
PUSHMARK(SP) ;
XPUSHs(sv_2mortal(env));
PUTBACK;
count = call_sv(app, G_EVAL|G_SCALAR|G_KEEPERR);
SPAGAIN;
if (SvTRUE(ERRSV)) {
res = NULL;
server_error(r, "%s", SvPV_nolen(ERRSV));
CLEAR_ERRSV();
(void) POPs;
} else if (count > 0) {
res = POPs;
SvREFCNT_inc(res);
} else {
res = NULL;
}
PUTBACK;
FREETMPS;
LEAVE;
return res;
}
开发者ID:mattn,项目名称:mod_psgi,代码行数:30,代码来源:mod_psgi.c
示例10: perl_timeout_cb
static gboolean
perl_timeout_cb(gpointer data)
{
PurplePerlTimeoutHandler *handler = data;
gboolean ret = FALSE;
dSP;
ENTER;
SAVETMPS;
PUSHMARK(sp);
XPUSHs((SV *)handler->data);
PUTBACK;
call_sv(handler->callback, G_EVAL | G_SCALAR);
SPAGAIN;
if (SvTRUE(ERRSV)) {
purple_debug_error("perl",
"Perl timeout function exited abnormally: %s\n",
SvPVutf8_nolen(ERRSV));
}
ret = POPi;
PUTBACK;
FREETMPS;
LEAVE;
if (ret == FALSE)
destroy_timeout_handler(handler);
return ret;
}
开发者ID:bf4,项目名称:pidgin-mac,代码行数:32,代码来源:perl-handlers.c
示例11: do_check
static inline void do_check(SV *cv, SV *value, SV *key) {
dTHX;
SV *ok = &PL_sv_undef, *msg = &PL_sv_undef;
dSP;
ENTER;
SAVETMPS;
PUSHMARK(SP);
PUSHs(sv_mortalcopy(value));
PUTBACK;
int count = call_sv(cv, G_ARRAY);
// could return 0 or 1 or 2 or more
SPAGAIN;
if (count) count == 1 ? (ok = POPs) : (msg = POPs, ok = POPs);
if (!SvTRUE(ok)) {
croak("Bad value \"%s\" for attribute \"%s\": %s", SvPV_nolen(value),
SvPV_nolen(key), SvTRUE(msg) ? SvPV_nolen(msg) : "");
}
PUTBACK;
FREETMPS;
LEAVE;
};
开发者ID:alexbyk,项目名称:perl-evo,代码行数:27,代码来源:helpers.c
示例12: plcb_call_sv_with_args_noret
static void plcb_call_sv_with_args_noret(SV *code, int mortalize, int nargs, ...)
{
va_list ap;
SV *cursv;
dSP;
ENTER;
SAVETMPS;
PUSHMARK(SP);
EXTEND(SP, nargs);
va_start(ap, nargs);
while (nargs) {
cursv = va_arg(ap, SV*);
if (mortalize) {
cursv = sv_2mortal(cursv);
}
PUSHs(cursv);
nargs--;
}
va_end(ap);
PUTBACK;
call_sv(code, G_DISCARD);
FREETMPS;
LEAVE;
}
开发者ID:neomorphic,项目名称:perl-Couchbase-Client,代码行数:33,代码来源:async_events.c
示例13: execute_perl
/*
this is used for autoload and shutdown callbacks
*/
static int
execute_perl (SV * function, char *args)
{
int count, ret_value = 1;
dSP;
ENTER;
SAVETMPS;
PUSHMARK (SP);
XPUSHs (sv_2mortal (newSVpv (args, 0)));
PUTBACK;
count = call_sv (function, G_EVAL | G_SCALAR);
SPAGAIN;
if (SvTRUE (ERRSV)) {
xchat_printf(ph, "Perl error: %s\n", SvPV_nolen (ERRSV));
if (!SvOK (POPs)) {} /* remove undef from the top of the stack */
} else if (count != 1) {
xchat_printf (ph, "Perl error: expected 1 value from %s, "
"got: %d\n", SvPV_nolen (function), count);
} else {
ret_value = POPi;
}
PUTBACK;
FREETMPS;
LEAVE;
return ret_value;
}
开发者ID:KhitryyGruzinGivi,项目名称:xchat,代码行数:34,代码来源:perl.c
示例14: bootstrap_callback
static void
bootstrap_callback(lcb_t instance, lcb_error_t status)
{
dSP;
PLCB_t *obj = (PLCB_t*) lcb_get_cookie(instance);
if (!obj->async) {
return;
}
if (!obj->conncb) {
warn("Object %p does not have a connect callback!", obj);
return;
}
printf("Invoking callback for connect..!\n");
ENTER;SAVETMPS;PUSHMARK(SP);
XPUSHs(sv_2mortal(newRV_inc(obj->selfobj)));
XPUSHs(sv_2mortal(newSViv(status)));
PUTBACK;
call_sv(obj->conncb, G_DISCARD);
SPAGAIN;
FREETMPS;LEAVE;
SvREFCNT_dec(obj->conncb); obj->conncb = NULL;
}
开发者ID:benvanstaveren,项目名称:perl-Couchbase-Client,代码行数:25,代码来源:callbacks.c
示例15: c2p_dlcb
void
c2p_dlcb(const char * name, off_t curr, off_t total)
{
SV * svname, * svcurr, * svtotal;
dSP;
if(!dlcb_ref){
return;
}
ENTER;
SAVETMPS;
svname = sv_2mortal(newSVpv(name, 0));
svcurr = sv_2mortal(newSViv(curr));
svtotal = sv_2mortal(newSViv(total));
PUSHMARK(SP);
XPUSHs(svname);
XPUSHs(svcurr);
XPUSHs(svtotal);
PUTBACK;
call_sv(dlcb_ref, G_DISCARD);
FREETMPS;
LEAVE;
return;
}
开发者ID:andrewgregory,项目名称:perl-alpm,代码行数:27,代码来源:cb.c
示例16: perl_pref_cb
static void
perl_pref_cb(const char *name, PurplePrefType type, gconstpointer value,
gpointer data)
{
PurplePerlPrefsHandler *handler = data;
dSP;
ENTER;
SAVETMPS;
PUSHMARK(sp);
XPUSHs(sv_2mortal(newSVpv(name, 0)));
XPUSHs(sv_2mortal(newSViv(type)));
switch(type) {
case PURPLE_PREF_INT:
XPUSHs(sv_2mortal(newSViv(GPOINTER_TO_INT(value))));
break;
case PURPLE_PREF_BOOLEAN:
XPUSHs((GPOINTER_TO_INT(value) == FALSE) ? &PL_sv_no : &PL_sv_yes);
break;
case PURPLE_PREF_STRING:
case PURPLE_PREF_PATH:
XPUSHs(sv_2mortal(newSVGChar(value)));
break;
case PURPLE_PREF_STRING_LIST:
case PURPLE_PREF_PATH_LIST:
{
AV* av = newAV();
const GList *l = value;
/* Append stuff backward to preserve order */
while (l && l->next) l = l->next;
while (l) {
av_push(av, sv_2mortal(newSVGChar(l->data)));
l = l->prev;
}
XPUSHs(sv_2mortal(newRV_noinc((SV *) av)));
} break;
default:
case PURPLE_PREF_NONE:
XPUSHs(&PL_sv_undef);
break;
}
XPUSHs((SV *)handler->data);
PUTBACK;
call_sv(handler->callback, G_EVAL | G_VOID | G_DISCARD);
SPAGAIN;
if (SvTRUE(ERRSV)) {
purple_debug_error("perl",
"Perl prefs callback function exited abnormally: %s\n",
SvPVutf8_nolen(ERRSV));
}
PUTBACK;
FREETMPS;
LEAVE;
}
开发者ID:bf4,项目名称:pidgin-mac,代码行数:60,代码来源:perl-handlers.c
示例17: call_perl_function__one_arg
static SV *
call_perl_function__one_arg(SV * function_name, SV * arg1) {
dSP;
int count;
SV *res;
ENTER;
SAVETMPS;
PUSHMARK(SP);
XPUSHs(sv_2mortal(arg1));
PUTBACK;
count = call_sv(function_name, G_SCALAR);
SPAGAIN;
if (count == 1)
res = newSVsv(POPs);
else
res = &PL_sv_undef;
PUTBACK;
FREETMPS;
LEAVE;
return res;
}
开发者ID:gitpan,项目名称:ApacheBench,代码行数:29,代码来源:xs_util.c
示例18: callFilter
SV *
callFilter(SV *filter, SV *el)
{
SV *val;
I32 n;
dTHX;
dSP;
ENTER;
SAVETMPS;
PUSHMARK(sp);
XPUSHs(el);
PUTBACK;
n = call_sv(filter, (G_SCALAR | G_EVAL));
SPAGAIN;
val = POPs;
SvREFCNT_inc(val);
PUTBACK;
FREETMPS;
LEAVE;
return(val);
}
开发者ID:sboehringer,项目名称:RSPerl,代码行数:25,代码来源:Converters.c
示例19: campher_call_sv_scalar
// arg is NULL-terminated and caller must free.
static void campher_call_sv_scalar(PerlInterpreter* my_perl, SV* sv, SV** arg, SV** ret) {
PERL_SET_CONTEXT(my_perl);
dSP;
ENTER;
SAVETMPS;
PUSHMARK(SP);
if (arg != NULL) {
while (*arg != NULL) {
XPUSHs(*arg);
arg++;
}
}
PUTBACK;
I32 count = call_sv(sv, G_SCALAR);
// TOD: deal with error flag. will just crash process for now.
SPAGAIN;
if (count != 1) {
croak("expected 1 in campher_call_sv_scalar");
}
SV* result = POPs;
SvREFCNT_inc(result);
*ret = result;
PUTBACK;
FREETMPS;
LEAVE;
}
开发者ID:KZTVANG,项目名称:campher,代码行数:34,代码来源:campher.c
示例20: campher_call_sv_void
// arg is NULL-terminated and caller must free.
static void campher_call_sv_void(PerlInterpreter* my_perl, SV* sv, SV** arg) {
PERL_SET_CONTEXT(my_perl);
dSP;
ENTER;
SAVETMPS;
PUSHMARK(SP);
if (arg != NULL) {
while (*arg != NULL) {
XPUSHs(*arg);
arg++;
}
}
PUTBACK;
I32 ret = call_sv(sv, G_VOID);
if (ret != 0) {
assert(false);
}
FREETMPS;
LEAVE;
}
开发者ID:KZTVANG,项目名称:campher,代码行数:26,代码来源:campher.c
注:本文中的call_sv函数示例由纯净天空整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。 |
请发表评论