blueloveTH 21 часов назад
Родитель
Сommit
6d45b633d8
3 измененных файлов с 17 добавлено и 0 удалено
  1. 2 0
      src/compiler/compiler.c
  2. 11 0
      src/public/ModuleSystem.c
  3. 4 0
      tests/302_import_multi.py

+ 2 - 0
src/compiler/compiler.c

@@ -2547,6 +2547,8 @@ static Error* compile_normal_import(Compiler* self, c11_sbuf* buf) {
         }
 
         c11_string* path = c11_sbuf__submit(buf);
+        c11_sbuf__ctor(buf);
+        
         int path_index = Ctx__add_const_string(ctx(), c11_string__sv(path));
         c11_string__delete(path);
 

+ 11 - 0
src/public/ModuleSystem.c

@@ -56,8 +56,19 @@ static void py_ModuleInfo__dtor(py_ModuleInfo* mi) {
     c11_string__delete(mi->path);
 }
 
+static bool module__repr__(int argc, py_Ref argv) {
+    PY_CHECK_ARGC(1);
+    py_ModuleInfo* self = py_touserdata(argv);
+    c11_sbuf buf;
+    c11_sbuf__ctor(&buf);
+    pk_sprintf(&buf, "<module '%s'>", self->path->data);
+    c11_sbuf__py_submit(&buf, py_retval());
+    return true;
+}
+
 py_Type pk_module__register() {
     py_Type type = pk_newtype("module", tp_object, NULL, (py_Dtor)py_ModuleInfo__dtor, false, true);
+    py_bindmagic(type, __repr__, module__repr__);
     return type;
 }
 

+ 4 - 0
tests/302_import_multi.py

@@ -0,0 +1,4 @@
+import os, math
+
+assert repr(os) == "<module 'os'>"
+assert repr(math) == "<module 'math'>"