From ff31b16285688a7852382fee42041e69f37f8f80 Mon Sep 17 00:00:00 2001 From: Dave Abrahams Date: Thu, 30 Nov 2000 04:53:31 +0000 Subject: [PATCH] Fixed __module__ name extraction logic so that when a module is not initializing the module name comes from the global __name__. [SVN r8362] --- src/classes.cpp | 22 +++++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) diff --git a/src/classes.cpp b/src/classes.cpp index 34b42c22..2901aa81 100644 --- a/src/classes.cpp +++ b/src/classes.cpp @@ -840,7 +840,27 @@ namespace { void add_current_module_name(dictionary& name_space) { static string module_key("__module__", string::interned); - name_space.set_item(module_key, module_builder::name()); + + // If the user didn't specify a __module__ attribute already + if (name_space.get_item(module_key).get() == 0) + { + if (module_builder::initializing()) + { + // The global __name__ is not properly set in this case + name_space.set_item(module_key, module_builder::name()); + } + else + { + // Get the module name from the global __name__ + PyObject *globals = PyEval_GetGlobals(); + if (globals != NULL) + { + PyObject *module_name = PyDict_GetItemString(globals, "__name__"); + if (module_name != NULL) + name_space.set_item(module_key, module_name); + } + } + } } }