/* * cbufferevent Class (*buffer_event_cb)() 1st stage callback from event_base_dispatch(), NEVER BE CALLED FROM OTHERS. */ static void Cbev_eventCB_1st(struct bufferevent *bev, short what, void *arg) { kbuffereventCBArg *cbArg = arg; KonohaContext *kctx = cbArg->kctx; BEGIN_UnusedStack(lsfp); KClass *returnType = kMethod_GetReturnType(cbArg->kcb[BEV_EventCB]->method); KUnsafeFieldSet(lsfp[0].asObject, K_NULL); KUnsafeFieldSet(lsfp[1].asObject, (kObject *)cbArg->cbev); lsfp[2].intValue = what; KUnsafeFieldSet(lsfp[3].asObject, (kObject *)cbArg->arg); KStackSetFuncAll(lsfp, KLIB Knull(kctx, returnType), 0/*UL*/, cbArg->kcb[BEV_EventCB], 3); KStackCall(lsfp); END_UnusedStack(); }
/* * cevent_base Class 1st stage callback from event_base_dispatch(), NEVER BE CALLED FROM OTHERS. */ static void cevent_callback_1st(evutil_socket_t evd, short event, void *arg) { keventCBArg *cbArg = arg; KonohaContext *kctx = cbArg->kctx; BEGIN_UnusedStack(lsfp); KClass *returnType = kMethod_GetReturnType(cbArg->kcb->method); KUnsafeFieldSet(lsfp[0].asObject, K_NULL); lsfp[1].intValue = evd; lsfp[2].intValue = event; KUnsafeFieldSet(lsfp[3].asObject, (kObject *)cbArg->arg); KStackSetFuncAll(lsfp, KLIB Knull(kctx, returnType), 0/*UL*/, cbArg->kcb, 3); KStackCall(lsfp); END_UnusedStack(); }
static void Cbev_dataCB_dispatcher(enum e_buffereventCB cat, struct bufferevent *bev, void *arg) { kbuffereventCBArg *cbArg = arg; KonohaContext *kctx = cbArg->kctx; BEGIN_UnusedStack(lsfp); KClass *returnType = kMethod_GetReturnType(cbArg->kcb[cat]->method); KUnsafeFieldSet(lsfp[0].asObject, K_NULL); KUnsafeFieldSet(lsfp[1].asObject, (kObject *)cbArg->cbev); KUnsafeFieldSet(lsfp[2].asObject, (kObject *)cbArg->arg); KStackSetFuncAll(lsfp, KLIB Knull(kctx, returnType), 0/*UL*/, cbArg->kcb[cat], 2); KStackCall(lsfp); END_UnusedStack(); }
/* copied from src/parser/import/typecheck.h */ static kNode *CallTypeFunc(KonohaContext *kctx, kFunc *fo, kNode *expr, kNameSpace *ns, kObject *reqType) { INIT_GCSTACK(); BEGIN_UnusedStack(lsfp); KUnsafeFieldSet(lsfp[1].asNode, expr); KUnsafeFieldSet(lsfp[2].asNameSpace, ns); KUnsafeFieldSet(lsfp[3].asObject, reqType); CallSugarMethod(kctx, lsfp, fo, 4, UPCAST(K_NULLNODE)); END_UnusedStack(); RESET_GCSTACK(); if(kNode_IsError(expr)) return expr; if(lsfp[K_RTNIDX].asNode == K_NULLNODE) { DBG_ASSERT(expr->attrTypeId == KType_var); // untyped } DBG_ASSERT(IS_Node(lsfp[K_RTNIDX].asObject)); return (kNode *)lsfp[K_RTNIDX].asObject; }
static int konoha_handler(request_rec *r) { //konoha_config_t *conf = ap_get_module_config( // r->server->module_config, &konoha_module); if(strcmp(r->handler, "konoha-script")) { return DECLINED; } //if(r->method_number != M_GET) { // TODO // return HTTP_METHOD_NOT_ALLOWED; //} KClass *cRequest; KonohaContext* konoha = konoha_create(&cRequest, 1); //assert(cRequest != NULL); r->content_encoding = "utf-8"; ap_log_rerror(APLOG_MARK, APLOG_CRIT, 0, r, "filename=%s", r->filename); if(Konoha_LoadScript(konoha, r->filename)) { return DECLINED; } KonohaContext *kctx = konoha; kNameSpace *ns = KNULL(NameSpace); kMethod *mtd = KLIB kNameSpace_GetMethodByParamSizeNULL(kctx, ns, KClass_System, KMethodName_("handler"), -1, KMethodMatch_NoOption); // fixme if(mtd == NULL) { ap_log_rerror(APLOG_MARK, APLOG_CRIT, 0, r, "System.handler() not found"); return -1; } /* XXX: We assume Request Object may not be freed by GC */ kObject *req_obj = KLIB new_kObject(kctx, OnStack, cRequest, (uintptr_t)r); BEGIN_UnusedStack(lsfp); KStackSetObjectValue(lsfp[K_CALLDELTA+0].asObject, K_NULL); KStackSetObjectValue(lsfp[K_CALLDELTA+1].asObject, req_obj); { KonohaStack *sfp = lsfp + K_CALLDELTA; KStackSetMethodAll(sfp, KLIB Knull(kctx, KClass_Int), 0/*UL*/, mtd, 1); KStackCall(sfp); } END_UnusedStack(); int ret = lsfp[0].intValue; Konoha_Destroy(konoha); return ret; }