-static inline void psi_jit_compile_callbacks(struct psi_context *C,
- struct psi_jit_call *impl_call, struct psi_let_exp *let_exp)
-{
- struct psi_jit_call *call;
- struct psi_let_callback *cb;
- struct psi_let_func *fn = NULL;
-
- switch (let_exp->kind) {
- case PSI_LET_CALLBACK:
- cb = let_exp->data.callback;
- if ((call = psi_jit_call_alloc(C, cb->decl))) {
- if (!psi_jit_call_init_callback_closure(C, call, impl_call, let_exp)) {
- psi_jit_call_free(call);
- break;
- }
-
- cb->decl->sym = call->closure;
- }
- fn = cb->func;
- /* no break */
- case PSI_LET_FUNC:
- if (!fn) {
- fn = let_exp->data.func;
- }
- if (fn->inner) {
- size_t i = 0;
- struct psi_let_exp *inner_let;
-
- while (psi_plist_get(fn->inner, i++, &inner_let)) {
- psi_jit_compile_callbacks(C, impl_call, inner_let);
- }
- }
- break;
- default:
- break;
- }
-}
-