blueloveTH 2 yıl önce
ebeveyn
işleme
b73029247b
2 değiştirilmiş dosya ile 10 ekleme ve 1 silme
  1. 1 1
      src/ceval.h
  2. 9 0
      src/pocketpy.h

+ 1 - 1
src/ceval.h

@@ -439,7 +439,7 @@ __NEXT_STEP:;
                 source = it->second;
                 _lazy_modules.erase(it);
             }
-            CodeObject_ code = compile(source, name.sv(), EXEC_MODE);
+            CodeObject_ code = compile(source, Str(name.sv())+".py", EXEC_MODE);
             PyObject* new_mod = new_module(name);
             _exec(code, new_mod);
             new_mod->attr()._try_perfect_rehash();

+ 9 - 0
src/pocketpy.h

@@ -190,6 +190,15 @@ inline void init_builtins(VM* _vm) {
         return VAR(ss.str());
     });
 
+    _vm->bind_method<1>("object", "__getattribute__", [](VM* vm, ArgsView args) {
+        PyObject* self = args[0];
+        if(is_tagged(self) || !self->is_attr_valid()) vm->TypeError("object has no attribute");
+        StrName name = CAST(Str&, args[1]);
+        PyObject* ret = self->attr().try_get(name);
+        if(ret == nullptr) vm->AttributeError(name.sv());
+        return ret;
+    });
+
     _vm->bind_method<1>("object", "__eq__", CPP_LAMBDA(VAR(args[0] == args[1])));
     _vm->bind_method<1>("object", "__ne__", CPP_LAMBDA(VAR(args[0] != args[1])));