diff --git a/src/ceval.h b/src/ceval.h index 47660561..df63ed2b 100644 --- a/src/ceval.h +++ b/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(); diff --git a/src/pocketpy.h b/src/pocketpy.h index dc5edfb2..faa8e60b 100644 --- a/src/pocketpy.h +++ b/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])));