# HG changeset patch # User Paul Boddie # Date 1486243583 -3600 # Node ID b7334adb7dec68d7ffc81d5960cc67898b976929 # Parent 0495cc21f241dd3bb0e446240a51a7cd83addd06 Handle situations where a global accidentally refers to a built-in module. diff -r 0495cc21f241 -r b7334adb7dec importer.py --- a/importer.py Sat Feb 04 18:10:20 2017 +0100 +++ b/importer.py Sat Feb 04 22:26:23 2017 +0100 @@ -444,6 +444,13 @@ if provider and provider != module.name: + # Handle built-in modules accidentally referenced by + # names. + + if provider == "__builtins__" and found.has_kind(""): + raise ProgramError("Name %s, used by %s, refers to module %s." % + (found.leaf(), module.name, found.get_origin())) + # Record the provider dependency. module.required.add(provider) diff -r 0495cc21f241 -r b7334adb7dec referencing.py --- a/referencing.py Sat Feb 04 18:10:20 2017 +0100 +++ b/referencing.py Sat Feb 04 22:26:23 2017 +0100 @@ -3,7 +3,7 @@ """ Reference abstractions. -Copyright (C) 2016 Paul Boddie +Copyright (C) 2016, 2017 Paul Boddie This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software @@ -187,6 +187,15 @@ return self.get_name().rsplit(".", 1)[0] + def leaf(self): + + "Return the leafname of the reference's origin." + + if not self.get_origin(): + return None + + return self.get_origin().rsplit(".", 1)[-1] + def ancestors(self): """