Skip to content

Commit c0aea3d

Browse files
committed
Cache the hash
1 parent 861d30b commit c0aea3d

1 file changed

Lines changed: 9 additions & 7 deletions

File tree

Lib/inspect.py

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -982,19 +982,21 @@ def getmodule(object, _filename=None):
982982
return object
983983
if hasattr(object, '__module__'):
984984
return sys.modules.get(object.__module__)
985-
code = _getcode(object)
986-
if code and hash(code) in _moduleless:
987-
return None
988985
# Try the filename to modulename cache
989986
if _filename is not None and _filename in modulesbyfile:
990987
return sys.modules.get(modulesbyfile[_filename])
988+
# Compute hash to track moduleless objects
989+
code = _getcode(object)
990+
hashcode = hash(code) if code else None
991+
if hashcode and hashcode in _moduleless:
992+
return None
991993
# Try the cache again with the absolute file name
992994
try:
993995
file = getabsfile(object, _filename)
994996
except (TypeError, FileNotFoundError):
995-
_moduleless.add(hash(code))
997+
_moduleless.add(hashcode)
996998
return None
997-
if code and hash(code) in _moduleless:
999+
if hashcode and hashcode in _moduleless:
9981000
return None
9991001
if file in modulesbyfile:
10001002
return sys.modules.get(modulesbyfile[file])
@@ -1016,7 +1018,7 @@ def getmodule(object, _filename=None):
10161018
# Check the main module
10171019
main = sys.modules['__main__']
10181020
if not hasattr(object, '__name__'):
1019-
_moduleless.add(hash(code))
1021+
_moduleless.add(hashcode)
10201022
return None
10211023
if hasattr(main, object.__name__):
10221024
mainobject = getattr(main, object.__name__)
@@ -1028,7 +1030,7 @@ def getmodule(object, _filename=None):
10281030
builtinobject = getattr(builtin, object.__name__)
10291031
if builtinobject is object:
10301032
return builtin
1031-
_moduleless.add(hash(code))
1033+
_moduleless.add(hashcode)
10321034
return None
10331035

10341036

0 commit comments

Comments
 (0)