diff options
author | Brett Cannon <brett@python.org> | 2013-01-26 13:48:36 (GMT) |
---|---|---|
committer | Brett Cannon <brett@python.org> | 2013-01-26 13:48:36 (GMT) |
commit | 14581d5dc4e4f9117e62b3a1bc62c4ba935be048 (patch) | |
tree | c0afa6cfafd8beeddb612d4b7448f569a69fc428 /Lib/importlib | |
parent | 80512de43b83168bb920504f4d809fa70b17548b (diff) | |
download | cpython-14581d5dc4e4f9117e62b3a1bc62c4ba935be048.zip cpython-14581d5dc4e4f9117e62b3a1bc62c4ba935be048.tar.gz cpython-14581d5dc4e4f9117e62b3a1bc62c4ba935be048.tar.bz2 |
Port py_compile over to importlib
Diffstat (limited to 'Lib/importlib')
-rw-r--r-- | Lib/importlib/_bootstrap.py | 21 |
1 files changed, 14 insertions, 7 deletions
diff --git a/Lib/importlib/_bootstrap.py b/Lib/importlib/_bootstrap.py index 344ef84..fa3a243 100644 --- a/Lib/importlib/_bootstrap.py +++ b/Lib/importlib/_bootstrap.py @@ -689,6 +689,15 @@ def _compile_bytecode(data, name=None, bytecode_path=None, source_path=None): raise ImportError("Non-code object in {!r}".format(bytecode_path), name=name, path=bytecode_path) +def _code_to_bytecode(code, mtime=0, source_size=0): + """Compile a code object into bytecode for writing out to a byte-compiled + file.""" + data = bytearray(_MAGIC_BYTES) + data.extend(_w_long(mtime)) + data.extend(_w_long(source_size)) + data.extend(marshal.dumps(code)) + return data + # Loaders ##################################################################### @@ -951,13 +960,13 @@ class SourceLoader(_LoaderBasics): raise ImportError("Failed to decode source file", name=fullname) from exc - def source_to_code(self, data, path): + def source_to_code(self, data, path, *, _optimize=-1): """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) + dont_inherit=True, optimize=_optimize) def get_code(self, fullname): """Concrete implementation of InspectLoader.get_code. @@ -1000,11 +1009,9 @@ class SourceLoader(_LoaderBasics): code_object = self.source_to_code(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): - data = bytearray(_MAGIC_BYTES) - data.extend(_w_long(source_mtime)) - data.extend(_w_long(len(source_bytes))) - data.extend(marshal.dumps(code_object)) + source_mtime is not None): + data = _code_to_bytecode(code_object, source_mtime, + len(source_bytes)) try: self._cache_bytecode(source_path, bytecode_path, data) _verbose_message('wrote {!r}', bytecode_path) |