//## cid Object.tocid(); static KMETHOD Object_tocid(KonohaContext *kctx, KonohaStack *sfp) { kObject *o = sfp[0].asObject; ktype_t cid = O_typeId(o); DBG_P(">>> Class=%s, cid=%d", SYM_t(CT_(cid)->classNameSymbol), cid); KReturnUnboxValue(cid); }
static void Method_p(CTX, ksfp_t *sfp, int pos, kwb_t *wb, int level) { kMethod *mtd = sfp[pos].mtd; kParam *pa = kMethod_param(mtd); DBG_ASSERT(IS_Method(mtd)); if(level != 0) { MethodAttribute_p(_ctx, mtd, wb); } kwb_printf(wb, "%s %s.%s%s", TY_t(pa->rtype), TY_t(mtd->cid), T_mn(mtd->mn)); if(level != 0) { size_t i; kwb_putc(wb, '('); for(i = 0; i < pa->psize; i++) { if(i > 0) { kwb_putc(wb, ',', ' '); } if(FN_isCOERCION(pa->p[i].fn)) { kwb_printf(wb, "@Coercion "); } kwb_printf(wb, "%s %s", TY_t(pa->p[i].ty), SYM_t(pa->p[i].fn)); } // if(Param_isVARGs(DP(mtd)->mp)) { // knh_write_delimdots(_ctx, w); // } kwb_putc(wb, ')'); } }
static void DumpVisitor_init(KonohaContext *kctx, struct IRBuilder *builder, kMethod *mtd) { unsigned i; KGrowingBuffer wb; KLIB Kwb_init(&(kctx->stack->cwb), &wb); kParam *pa = Method_param(mtd); KLIB Kwb_printf(kctx, &wb, "METHOD %s%s(", T_mn(mtd->mn)); for (i = 0; i < pa->psize; i++) { if(i != 0) { KLIB Kwb_write(kctx, &wb, ", ", 2); } KLIB Kwb_printf(kctx, &wb, "%s %s", TY_t(pa->paramtypeItems[i].ty), SYM_t(pa->paramtypeItems[i].fn)); } emit_string(KLIB Kwb_top(kctx, &wb, 1), "", ") {", 0); builder->local_fields = (void *) KMalloc_UNTRACE(sizeof(int)); DUMPER(builder)->indent = 0; }
static void kMethod_WriteToBuffer(KonohaContext *kctx, kMethod *mtd, KGrowingBuffer *wb) { kParam *pa = Method_param(mtd); Method_WriteAttributeToBuffer(kctx, mtd, wb); KLIB Kwb_printf(kctx, wb, "%s %s.%s%s", TY_t(pa->rtype), TY_t(mtd->typeId), MethodName_t(mtd->mn)); { size_t i; KLIB Kwb_Write(kctx, wb, "(", 1); for(i = 0; i < pa->psize; i++) { if(i > 0) { KLIB Kwb_Write(kctx, wb, ", ", 2); } if(FN_isCOERCION(pa->paramtypeItems[i].fn)) { KLIB Kwb_printf(kctx, wb, "@Coercion "); } KLIB Kwb_printf(kctx, wb, "%s %s", TY_t(pa->paramtypeItems[i].ty), SYM_t(pa->paramtypeItems[i].fn)); } KLIB Kwb_Write(kctx, wb, ")", 1); } }
static kMethod *Object_newProtoSetterNULL(KonohaContext *kctx, kStmt *stmt, kObject *o, ktype_t ty, ksymbol_t symbol) { ktype_t cid = O_typeId(o); kNameSpace *ns = Stmt_ns(stmt); kMethod *mtd = KLIB kNameSpace_GetSetterMethodNULL(kctx, ns, cid, symbol, TY_var); if(mtd != NULL) { SUGAR kStmt_Message2(kctx, stmt, NULL, ErrTag, "already defined name: %s", SYM_t(symbol)); return NULL; } mtd = KLIB kNameSpace_GetGetterMethodNULL(kctx, ns, cid, symbol, TY_var); if(mtd != NULL && Method_returnType(mtd) != ty) { SUGAR kStmt_Message2(kctx, stmt, NULL, ErrTag, "differently defined name: %s", SYM_t(symbol)); return NULL; } int flag = kField_Setter; if(mtd == NULL) { // no getter flag |= kField_Getter; } KLIB KonohaClass_AddField(kctx, O_ct(o), flag, ty, symbol); return KLIB kNameSpace_GetSetterMethodNULL(kctx, ns, cid, symbol, ty); }
static void kcid_p(KonohaContext *kctx, KonohaValue *v, int pos, KGrowingBuffer *wb) { ktype_t cid = (ktype_t)v[pos].intValue; DBG_P(">>> Class=%s, cid=%d", SYM_t(CT_(cid)->classNameSymbol), cid); KLIB Kwb_printf(kctx, wb, "%s%s", PSYM_t(CT_(cid)->classNameSymbol)); }
static void UndefinedStmt_asm(KonohaContext *kctx, kStmt *stmt, int shift, int espidx) { DBG_P("undefined asm syntax kw='%s'", SYM_t(stmt->syn->keyword)); }