mirror of
https://github.com/python/cpython.git
synced 2025-08-04 08:59:19 +00:00
Issue #15627: Add the compile_source() method to
importlib.abc.SourceLoader. This provides an easy hook into the import system to allow for source transformations, AST optimizations, etc.
This commit is contained in:
parent
195ad6ce05
commit
5650e4f41c
5 changed files with 2404 additions and 2360 deletions
|
@ -931,6 +931,14 @@ class SourceLoader(_LoaderBasics):
|
|||
raise ImportError("Failed to decode source file",
|
||||
name=fullname) from exc
|
||||
|
||||
def compile_source(self, data, path):
|
||||
"""Return the code object compiled from source.
|
||||
|
||||
The 'data' argument can be any object type that compile() supports.
|
||||
"""
|
||||
return _call_with_frames_removed(compile, data, path, 'exec',
|
||||
dont_inherit=True)
|
||||
|
||||
def get_code(self, fullname):
|
||||
"""Concrete implementation of InspectLoader.get_code.
|
||||
|
||||
|
@ -976,9 +984,7 @@ class SourceLoader(_LoaderBasics):
|
|||
raise ImportError(msg.format(bytecode_path),
|
||||
name=fullname, path=bytecode_path)
|
||||
source_bytes = self.get_data(source_path)
|
||||
code_object = _call_with_frames_removed(compile,
|
||||
source_bytes, source_path, 'exec',
|
||||
dont_inherit=True)
|
||||
code_object = self.compile_source(source_bytes, source_path)
|
||||
_verbose_message('code object from {}', source_path)
|
||||
if (not sys.dont_write_bytecode and bytecode_path is not None and
|
||||
source_mtime is not None):
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue