//## String ResultSet.getString(String n); static KMETHOD ResultSet_getString(KonohaContext *kctx, KonohaStack *sfp) { kResultSet *rs = (kResultSet *)sfp[0].asObject; kString *res = TS_EMPTY; int idx = ResultSet_FindColumn(kctx, rs, sfp[1].asString); if(idx >= 0) { ktypeattr_t type = rs->column[idx].type; krbp_t *val = &rs->column[idx].val; if(type == KType_String) { res = val[0].asString; } else if(type == KType_Int) { KBuffer wb; KLIB KBuffer_Init(&(kctx->stack->cwb), &wb); KLIB KBuffer_printf(kctx, &wb, KFLOAT_FMT, val[0].floatValue); const char *text = KLIB KBuffer_text(kctx, &wb, 0); res = KLIB new_kString(kctx, OnStack, text, KBuffer_bytesize(&wb), 0); KLIB KBuffer_Free(&wb); } else if(KDefinedKonohaCommonModule() && type == KType_float) { KBuffer wb; KLIB KBuffer_Init(&(kctx->stack->cwb), &wb); KLIB KBuffer_printf(kctx, &wb, KFLOAT_FMT, val[0].floatValue); KLIB KBuffer_Free(&wb); const char *text = KLIB KBuffer_text(kctx, &wb, 0); res = KLIB new_kString(kctx, OnStack, text, KBuffer_bytesize(&wb), 0); KLIB KBuffer_Free(&wb); } } KReturn(res); }
static void DumpVirtualCode(KonohaContext *kctx, KVirtualCode *c) { KBuffer wb; KLIB KBuffer_Init(&(kctx->stack->cwb), &wb); WriteVirtualCode(kctx, &wb, c); DBG_P(">>>\n%s", KLIB KBuffer_text(kctx, &wb, EnsureZero)); KLIB KBuffer_Free(&wb); }
static void dumpMethod(KonohaContext *kctx, KonohaStack *sfp, kMethod *mtd) { KBuffer wb; KLIB KBuffer_Init(&(kctx->stack->cwb), &wb); kMethod_WriteToBuffer(kctx, mtd, &wb); PLATAPI printf_i("%s\n", KLIB KBuffer_text(kctx, &wb, EnsureZero)); KLIB KBuffer_Free(&wb); return; }
//## String String.new(Bytes ba); static KMETHOD String_new_fromBytes_withDefaultDecode(KonohaContext *kctx, KonohaStack *sfp) { kBytes *ba = sfp[1].asBytes; kString *s = TS_EMPTY; if(ba->bytesize != 0) { KMakeTrace(trace, sfp); KBuffer wb; KLIB KBuffer_Init(&(kctx->stack->cwb), &wb); KBuffer_convertCharset(kctx, &wb, "UTF-8", I18NAPI systemCharset, ba->buf, ba->bytesize, trace); KLIB KBuffer_text(kctx, &wb, EnsureZero); /* String must be Null terminated */ s = KLIB KBuffer_Stringfy(kctx, &wb, OnStack, StringPolicy_FreeKBuffer); } KReturn(s); }
//## void File.print(String line); static KMETHOD File_print(KonohaContext *kctx, KonohaStack *sfp) { kFile *file = sfp[0].asFile; kString *line = sfp[1].asString; KMakeTrace(trace, sfp); if(file->writerIconv == ICONV_NULL || kString_Is(ASCII, line)) { TRACE_fwrite(kctx, file, kString_text(line), kString_size(line), trace); } else { KBuffer wb; KLIB KBuffer_Init(&(kctx->stack->cwb), &wb); KLIB KBuffer_iconv(kctx, &wb, file->writerIconv, kString_text(line), kString_size(line), trace); TRACE_fwrite(kctx, file, KLIB KBuffer_text(kctx, &wb, NonZero), KBuffer_bytesize(&wb), trace); KLIB KBuffer_Free(&wb); } }
//## Bytes String.toBytes(); static KMETHOD String_toBytes(KonohaContext *kctx, KonohaStack *sfp) { kString* thisString = sfp[0].asString; size_t size = kString_size(thisString); if(PLATAPI I18NModule.isSystemCharsetUTF8(kctx)) { KReturn(new_kBytes(kctx, OnStack, KGetReturnType(sfp), kString_text(thisString), size)); } else { KMakeTrace(trace, sfp); KBuffer wb; KLIB KBuffer_Init(&(kctx->stack->cwb), &wb); KBuffer_convertCharset(kctx, &wb, I18NAPI systemCharset, "UTF-8", kString_text(thisString), size, trace); KReturnWith( new_kBytes(kctx, OnStack, KGetReturnType(sfp), KLIB KBuffer_text(kctx, &wb, NonZero), KBuffer_bytesize(&wb)), KLIB KBuffer_Free(&wb) ); } }
static kNode *ParseSource(KonohaContext *kctx, kNameSpace *ns, const char *script, size_t len) { KBuffer wb; KLIB KBuffer_Init(&(kctx->stack->cwb), &wb); KLIB KBuffer_Write(kctx, &wb, "(", 1); KLIB KBuffer_Write(kctx, &wb, script, len); KLIB KBuffer_Write(kctx, &wb, ")", 1); KTokenSeq tokens = {ns, KGetParserContext(kctx)->preparedTokenList}; KTokenSeq_Push(kctx, tokens); const char *buf = KLIB KBuffer_text(kctx, &wb, EnsureZero); SUGAR Tokenize(kctx, ns, buf, 0, 0, tokens.tokenList); KTokenSeq_End(kctx, tokens); KTokenSeq step2 = {ns, tokens.tokenList, kArray_size(tokens.tokenList)}; SUGAR Preprocess(kctx, ns, RangeTokenSeq(tokens), NULL, step2.tokenList); KTokenSeq_End(kctx, step2); kNode *newexpr = SUGAR ParseNewNode(kctx, ns, step2.tokenList, &step2.beginIdx, step2.endIdx, 0, NULL); KTokenSeq_Pop(kctx, tokens); KLIB KBuffer_Free(&wb); return newexpr; }
static void kException_AddStackTrace(KonohaContext *kctx, KonohaStack *sfp, kException *e) { kMethod *mtd = sfp[K_MTDIDX].calledMethod; KBuffer wb; KLIB KBuffer_Init(&kctx->stack->cwb, &wb); kfileline_t uline = sfp[K_RTNIDX].calledFileLine; if(uline > 0) { const char *file = KFileLine_textFileName(uline); KLIB KBuffer_printf(kctx, &wb, "(%s:%d) %s.%s%s" , PLATAPI shortFilePath(file), (kushort_t)uline, kMethod_Fmt3(mtd)); } // int i = 0, psize = kMethod_ParamSize(mtd); // kParam *pa = kMethod_GetParam(mtd); // KClass *thisClass = O_cid(sfp[0]); // for(i = 0; i < psize; i++) { // pa->paramtypeItems[0].attrTypeId; // if(i > 0) { // knh_putc(ctx, cwb->w, ','); // } // knh_Write_fn(ctx, cwb->w, p->fn); // knh_putc(ctx, cwb->w, '='); // knh_Write_sfp(ctx, cwb->w, type, &sfp[i+1], FMT_line); // } const char *msg = KLIB KBuffer_text(kctx, &wb, EnsureZero); KLIB new_kString(kctx, e->StackTraceList, msg, strlen(msg), 0); // if((mtd)->mn != MN_LAMBDA) { // knh_uline_t uline = knh_stack_uline(ctx, sfp); // knh_Write_uline(ctx, cwb->w, uline); // knh_Write_type(ctx, cwb->w, (mtd)->cid); // knh_putc(ctx, cwb->w, '.'); // knh_Write_mn(ctx, cwb->w, (mtd)->mn); // knh_putc(ctx, cwb->w, '('); // knh_putc(ctx, cwb->w, ')'); // if(DP(e)->tracesNULL == NULL) { // KNH_INITv(DP(e)->tracesNULL, new_Array(ctx, CLASS_String, 0)); // } // knh_Array_Add(ctx, DP(e)->tracesNULL, knh_cwb_newString(ctx, cwb)); // } }
static KMETHOD PyObject_toString(KonohaContext *kctx, KonohaStack *sfp) { kPyObject *po = (kPyObject *)sfp[0].asObject; KBuffer wb; // assert DBG_ASSERT(po->self != NULL); KLIB KBuffer_Init(&(kctx->stack->cwb), &wb); kObject_class(sfp[0].asObject)->p(kctx, sfp, 0, &wb); kString *s = KLIB new_kString(kctx, OnStack, KLIB KBuffer_text(kctx, &wb, 1), KBuffer_bytesize(&wb), 0); KLIB KBuffer_Free(&wb); KReturn(s); //if(PyString_Check(po->self)) { // //dec // t = PyString_AsString(po->self); // KReturn(KLIB new_kString(kctx, t, strlen(t), 0)); //} //else if(PyUnicode_Check(po->self)) { // //dec // PyObject *s = PyUnicode_AsUTF8String(po->self); // // [TODO] there is no t's NULL check. Is it OK? // t = PyString_AsString(s); // KReturn(KLIB new_kString(kctx, t, strlen(t), 0)); //} //else if(PyByteArray_Check(po->self)) { // //dec // t = PyByteArray_AsString(po->self); // KReturn(KLIB new_kString(kctx, t, strlen(t), 0)); //} //else { // KBuffer wb; // KLIB KBuffer_Init(&(kctx->stack->cwb), &wb); // kObject_class(sfp[0].asObject)->p(kctx, sfp, 0, &wb, 0); // kString *s = KLIB new_kString(kctx, KLIB KBuffer_text(kctx, &wb, 1), KBuffer_bytesize(&wb), 0); // KLIB KBuffer_Free(&wb); // KReturn(s); //} }