diff --git a/src/obj_base.c b/src/obj_base.c index 6f8b644..0cf23d1 100644 --- a/src/obj_base.c +++ b/src/obj_base.c @@ -41,12 +41,14 @@ static KrkValue _class_to_str(int argc, KrkValue argv[], int hasKw) { KrkValue module = NONE_VAL(); krk_tableGet(&AS_CLASS(argv[0])->fields, OBJECT_VAL(S("__module__")), &module); + int includeModule = !(IS_NONE(module) || (IS_STRING(module) && AS_STRING(module) == S("__builtins__"))); + size_t allocSize = sizeof("") + AS_CLASS(argv[0])->name->length; if (IS_STRING(module)) allocSize += AS_STRING(module)->length + 1; char * tmp = malloc(allocSize); size_t l = snprintf(tmp, allocSize, "", - IS_STRING(module) ? AS_CSTRING(module) : "", - IS_STRING(module) ? "." : "", + includeModule ? AS_CSTRING(module) : "", + includeModule ? "." : "", AS_CLASS(argv[0])->name->chars); KrkString * out = krk_copyString(tmp,l); free(tmp); diff --git a/src/vm.c b/src/vm.c index 42d1d75..ae27946 100644 --- a/src/vm.c +++ b/src/vm.c @@ -421,6 +421,10 @@ KrkClass * krk_makeClass(KrkInstance * module, KrkClass ** _class, const char * krk_push(OBJECT_VAL(*_class)); /* Bind it */ krk_attachNamedObject(&module->fields,name,(KrkObj*)*_class); + /* Now give it a __module__ */ + KrkValue moduleName = NONE_VAL(); + krk_tableGet(&module->fields, OBJECT_VAL(S("__name__")), &moduleName); + krk_attachNamedValue(&(*_class)->fields,"__module__",moduleName); krk_pop(); } krk_pop();