static KMETHOD KMethodFunc_ObjectPrototypeSetter(KonohaContext *kctx, KonohaStack *sfp) { kMethod *mtd = sfp[K_MTDIDX].calledMethod; ksymbol_t key = (ksymbol_t)mtd->delta; KLIB kObjectProto_SetObject(kctx, sfp[0].asObject, key, kObject_typeId(sfp[1].asObject), sfp[1].asObject); KReturn(sfp[1].asObject); }
static KMETHOD PatternMatch_ClassName(KonohaContext *kctx, KonohaStack *sfp) { VAR_PatternMatch(stmt, name, tokenList, beginIdx, endIdx); kTokenVar *tk = tokenList->TokenVarItems[beginIdx]; int returnIdx = -1; if(tk->tokenType == KSymbol_SymbolPattern || tk->resolvedSyntaxInfo->keyword == KSymbol_TypePattern) { KLIB kObjectProto_SetObject(kctx, stmt, name, kObject_typeId(tk), tk); returnIdx = beginIdx + 1; } KReturnUnboxValue(returnIdx); }
static void kNameSpace_LookupMethodWithInlineCache(KonohaContext *kctx, KonohaStack *sfp, kNameSpace *ns, kMethod **cache) { ktypeattr_t typeId = kObject_typeId(sfp[0].asObject); kMethod *mtd = cache[0]; if(mtd->typeId != typeId) { KClass *ct = kObject_class(sfp[0].asObject); mtd = KLIB kNameSpace_GetMethodBySignatureNULL(kctx, ns, ct, mtd->mn, mtd->paramdom, 0, NULL); cache[0] = mtd; } KStackSetUnboxValue(sfp[0].unboxValue, kObject_Unbox(sfp[0].asObject)); KStackSetUnboxValue(sfp[K_MTDIDX].calledMethod, mtd); }