X-Git-Url: https://git.m6w6.name/?p=m6w6%2Fext-psi;a=blobdiff_plain;f=src%2Fcontext.c;h=f580f7f424bb70a8fd3d9fcd0a9ee9900539a55c;hp=ba587201926ffafc0286fce4b8c76d1dc8fdf491;hb=574519ef5e3ab76f00253fad870afce7135638d1;hpb=43f9e142088705cc003bb021a32ecd4d4d3b3d2b diff --git a/src/context.c b/src/context.c index ba58720..f580f7f 100644 --- a/src/context.c +++ b/src/context.c @@ -161,11 +161,26 @@ int psi_glob(const char *pattern, int flags, return rv; } +int psi_printf(const char *fmt, ...) { + int rs; + char *a1; + va_list ap1, ap2; + + va_start(ap1, fmt); + va_copy(ap2, ap1); + a1 = va_arg(ap2, char *); + rs = vprintf(fmt, ap1); + va_end(ap1); + va_end(ap2); + return rs; +} + static struct psi_func_redir { const char *name; void (*func)(void); } psi_func_redirs[] = { {"glob", (void (*)(void)) psi_glob}, + {"printf", (void (*)(void)) psi_printf}, PSI_REDIRS {0} }; @@ -1214,9 +1229,9 @@ zend_function_entry *PSI_ContextCompile(PSI_Context *C) } -void PSI_ContextCall(PSI_Context *C, decl_callinfo *decl_call) +void PSI_ContextCall(PSI_Context *C, decl_callinfo *decl_call, impl_vararg *va) { - C->ops->call(C, decl_call); + C->ops->call(C, decl_call, va); } static inline void dump_decl_type(int fd, decl_type *t) { @@ -1404,8 +1419,8 @@ void PSI_ContextDump(PSI_Context *C, int fd) dprintf(fd, " = %s", iarg->def->text); } } - if (impl->func->args->vararg) { - impl_arg *vararg = impl->func->args->vararg; + if (impl->func->args->vararg.name) { + impl_arg *vararg = impl->func->args->vararg.name; dprintf(fd, ", %s %s...$%s", vararg->type->name,