static kbool_t float_initPackage(KonohaContext *kctx, kNameSpace *ns, int argc, const char**args, kfileline_t pline) { KonohaFloatModule *base = (KonohaFloatModule*)KCALLOC(sizeof(KonohaFloatModule), 1); base->h.name = "float"; base->h.setup = kmodfloat_setup; base->h.reftrace = kmodfloat_reftrace; base->h.free = kmodfloat_free; KLIB Konoha_setModule(kctx, MOD_float, &base->h, pline); KDEFINE_CLASS defFloat = { STRUCTNAME(Float), .cflag = CFLAG_Int, .init = Float_init, .p = Float_p, }; base->cFloat = KLIB Konoha_defineClass(kctx, ns->packageId, PN_konoha, NULL, &defFloat, pline); int FN_x = FN_("x"); KDEFINE_METHOD MethodData[] = { _Public|_Const|_Im, _F(Float_opPlus), TY_Float, TY_Float, MN_("+"), 0, _Public|_Const|_Im, _F(Float_opADD), TY_Float, TY_Float, MN_("+"), 1, TY_Float, FN_x, _Public|_Const|_Im, _F(Int_opADD), TY_Float, TY_Int, MN_("+"), 1, TY_Float, FN_x, _Public|_Const|_Im, _F(Float_opSUB), TY_Float, TY_Float, MN_("-"), 1, TY_Float, FN_x, _Public|_Const|_Im, _F(Int_opSUB), TY_Float, TY_Int, MN_("-"), 1, TY_Float, FN_x, _Public|_Const|_Im, _F(Float_opMUL), TY_Float, TY_Float, MN_("*"), 1, TY_Float, FN_x, _Public|_Im, _F(Float_opDIV), TY_Float, TY_Float, MN_("/"), 1, TY_Float, FN_x, _Public|_Const|_Im, _F(Float_opEQ), TY_Boolean, TY_Float, MN_("=="), 1, TY_Float, FN_x, _Public|_Const|_Im, _F(Float_opNEQ), TY_Boolean, TY_Float, MN_("!="), 1, TY_Float, FN_x, _Public|_Const|_Im, _F(Float_opLT), TY_Boolean, TY_Float, MN_("<"), 1, TY_Float, FN_x, _Public|_Const|_Im, _F(Float_opLTE), TY_Boolean, TY_Float, MN_("<="), 1, TY_Float, FN_x, _Public|_Const|_Im, _F(Float_opGT), TY_Boolean, TY_Float, MN_(">"), 1, TY_Float, FN_x, _Public|_Const|_Im, _F(Float_opGTE), TY_Boolean, TY_Float, MN_(">="), 1, TY_Float, FN_x, _Public|_Const|_Im, _F(Int_opMUL), TY_Float, TY_Int, MN_("*"), 1, TY_Float, FN_x, _Public|_Im, _F(Int_opDIV), TY_Float, TY_Int, MN_("/"), 1, TY_Float, FN_x, _Public|_Const|_Im, _F(Int_opEQ), TY_Boolean, TY_Int, MN_("=="), 1, TY_Float, FN_x, _Public|_Const|_Im, _F(Int_opNEQ), TY_Boolean, TY_Int, MN_("!="), 1, TY_Float, FN_x, _Public|_Const|_Im, _F(Int_opLT), TY_Boolean, TY_Int, MN_("<"), 1, TY_Float, FN_x, _Public|_Const|_Im, _F(Int_opLTE), TY_Boolean, TY_Int, MN_("<="), 1, TY_Float, FN_x, _Public|_Const|_Im, _F(Int_opGT), TY_Boolean, TY_Int, MN_(">"), 1, TY_Float, FN_x, _Public|_Const|_Im, _F(Int_opGTE), TY_Boolean, TY_Int, MN_(">="), 1, TY_Float, FN_x, _Public|_Const|_Im|_Coercion, _F(Float_toInt), TY_Int, TY_Float, MN_to(TY_Int), 0, _Public|_Const|_Im|_Coercion, _F(Int_toFloat), TY_Float, TY_Int, MN_to(TY_Float), 0, _Public|_Const|_Im, _F(Float_toString), TY_String, TY_Float, MN_to(TY_String), 0, _Public|_Const|_Im, _F(String_toFloat), TY_Float, TY_String, MN_to(TY_Float), 0, _Public|_Const|_Im, _F(Float_opMINUS), TY_Float, TY_Float, MN_("-"), 0, DEND, }; KLIB kNameSpace_loadMethodData(kctx, ns, MethodData); KDEFINE_FLOAT_CONST FloatData[] = { {"FLOAT_EPSILON", TY_Float, DBL_EPSILON}, {"Infinity", TY_Float, INFINITY}, {"NaN", TY_Float, NAN}, {} }; KLIB kNameSpace_loadConstData(kctx, ns, KonohaConst_(FloatData), pline); return true; }
static void konoha_define(CTX, char *keyvalue) { char *p = strchr(keyvalue, '='); if(p != NULL) { if(isdigit(p[1])) { long n = strtol(p+1, NULL, 0); KDEFINE_INT_CONST ConstData[] = { {keyvalue, TY_Int, n}, {} }; kNameSpace_loadConstData(KNULL(NameSpace), ConstData, 0); } else { KDEFINE_TEXT_CONST ConstData[] = { {keyvalue, TY_TEXT, p+1}, {} }; kNameSpace_loadConstData(KNULL(NameSpace), ConstData, 0); } } else { fprintf(stdout, "invalid define option: use -D<key>=<value>\n"); } }
static void konoha_commandline(CTX, int argc, char** argv) { kclass_t *CT_StringArray0 = CT_p0(_ctx, CT_Array, TY_String); kArray *a = (kArray*)new_kObject(CT_StringArray0, NULL); int i; for(i = 0; i < argc; i++) { DBG_P("argv=%d, '%s'", i, argv[i]); kArray_add(a, new_kString(argv[i], strlen(argv[i]), SPOL_TEXT)); } KDEFINE_OBJECT_CONST ConstData[] = { {"SCRIPT_ARGV", CT_StringArray0->cid, (kObject*)a}, {} }; kNameSpace_loadConstData(KNULL(NameSpace), ConstData, 0); }
static kbool_t object_initPackage(KonohaContext *kctx, kNameSpace *ns, int argc, const char**args, KTraceInfo *trace) { KRequirePackage("konoha.subtype", trace); KDEFINE_INT_CONST ClassData[] = { // add Object as available {"Object", VirtualType_KonohaClass, (uintptr_t)CT_(TY_Object)}, {NULL}, }; KLIB kNameSpace_loadConstData(kctx, ns, KonohaConst_(ClassData), 0); KDEFINE_METHOD MethodData[] = { _Public|_Const, _F(Object_getTypeId), TY_int, TY_Object, MN_("getTypeId"), 0, DEND, }; KLIB kNameSpace_loadMethodData(kctx, ns, MethodData); return true; }