static SugarSyntaxVar *kNameSpace_guessSyntaxFromTokenList(KonohaContext *kctx, kNameSpace *ns, kArray *tokenList) { int beginIdx = 0, endIdx = kArray_size(tokenList); if(beginIdx < endIdx) { ksymbol_t keyword = tokenList->TokenItems[beginIdx]->resolvedSyntaxInfo->keyword; if(keyword == KW_TextPattern) { ksymbol_t kw; if(isSubKeyword(kctx, tokenList, beginIdx, endIdx)) { char buf[256]; PLATAPI snprintf_i(buf, sizeof(buf), "%s_%s", S_text(tokenList->TokenItems[beginIdx]->text), S_text(tokenList->TokenItems[beginIdx+1]->text)); kw = ksymbolA((const char *)buf, strlen(buf), SYM_NEWID); } else { kw = ksymbolA(S_text(tokenList->TokenItems[beginIdx]->text), S_size(tokenList->TokenItems[beginIdx]->text), SYM_NEWID); } return (SugarSyntaxVar *)NEWSYN_(ns, kw); } else if(keyword == KW_DOLLAR) { // $TokenPattern char buf[256]; PLATAPI snprintf_i(buf, sizeof(buf), "$%s", S_text(tokenList->TokenItems[beginIdx+1]->text)); ksymbol_t kw = ksymbolA((const char *)buf, strlen(buf), SYM_NEWID); return (SugarSyntaxVar *)NEWSYN_(ns, kw); } } return NULL; }
static void AFTER_LoadScript(KonohaContext *kctx, const char *filename) { int stdlog_count = 0; if(stdlog2 != NULL) { stdlog_count = 1; fprintf(stdlog2, "Q.E.D.\n"); // Q.E.D. fclose(stdlog2); } //if(PLATAPI exitStatus != 0) return; if(stdlog_count != 0) { //filename = (filename == NULL) ? "shell" : filename; char proof_file[256]; char result_file[256]; PLATAPI snprintf_i(proof_file, sizeof(proof_file), "%s.%s_proof", filename, GetProfile()); PLATAPI snprintf_i(result_file, sizeof(result_file), "%s.%s_tested", filename, GetProfile()); FILE *fp = fopen(proof_file, "r"); if(fp == NULL) { fprintf(stdout, "no proof file: %s\n", proof_file); ((KonohaFactory *)kctx->platApi)->exitStatus = 1; return; } FILE *fp2 = fopen(result_file, "r"); DBG_ASSERT(fp2 != NULL); int ret = check_result2(fp, fp2); if(ret != 0) { fprintf(stdout, "proof file mismatched: %s\n", proof_file); ((KonohaFactory *)kctx->platApi)->exitStatus = 78; } else { ((KonohaFactory *)kctx->platApi)->exitStatus = 0; } fclose(fp); fclose(fp2); } }
static int konoha_test(CTX, const char *testname) { int ret = 1; //FAILED char script_file[256]; char correct_file[256]; char result_file[256]; PLAT snprintf_i(script_file, 256, "%s", testname); PLAT snprintf_i(correct_file, 256, "%s.proof", script_file); PLAT snprintf_i(result_file, 256, "%s.tested", script_file); FILE *fp = fopen(correct_file, "r"); if (fp == NULL) { fprintf(stdout, "no proof file: %s\n", testname); } stdlog = fopen(result_file, "w"); konoha_load((konoha_t)_ctx, script_file); fprintf(stdlog, "Q.E.D.\n"); // Q.E.D. fclose(stdlog); if(fp != NULL) { FILE *fp2 = fopen(result_file, "r"); ret = check_result(fp, fp2); if(ret == 0) { fprintf(stdout, "[PASS]: %s\n", testname); } else { fprintf(stdout, "[FAIL]: %s\n", testname); konoha_AssertResult = 1; } fclose(fp); fclose(fp2); } return ret; }
/* float to String */ static KMETHOD Float_toString(KonohaContext *kctx, KonohaStack *sfp) { char buf[40]; PLATAPI snprintf_i(buf, sizeof(buf), KFLOAT_FMT, sfp[0].floatValue); KReturn(KLIB new_kString(kctx, OnStack, buf, strlen(buf), StringPolicy_ASCII)); }