aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorVictor Stinner <victor.stinner@gmail.com>2016-03-26 01:04:37 +0100
committerVictor Stinner <victor.stinner@gmail.com>2016-03-26 01:04:37 +0100
commitca9dbc7d880ac6e5e1df3219e34670b18998a346 (patch)
tree8a62e3503de9f05648ba0fe6b3bea632cbcdae3b
parent92c8dce98550b3a3130bda28c38f192f1f49dba5 (diff)
downloadcpython3-ca9dbc7d880ac6e5e1df3219e34670b18998a346.tar.gz
makeopcodetargets.py: we need to import Lib/opcode.py
Issue #20021: use importlib.machinery to import Lib/opcode.py and not an opcode module coming from somewhere else. makeopcodetargets.py is part of the Python build process and it is run by an external Python program, not the built Python program. Patch written by Serhiy Storchaka.
-rwxr-xr-xPython/makeopcodetargets.py22
1 files changed, 21 insertions, 1 deletions
diff --git a/Python/makeopcodetargets.py b/Python/makeopcodetargets.py
index 7a57a0631b..023c9e6c9f 100755
--- a/Python/makeopcodetargets.py
+++ b/Python/makeopcodetargets.py
@@ -3,14 +3,34 @@
(for compilers supporting computed gotos or "labels-as-values", such as gcc).
"""
-import opcode
import os
import sys
+try:
+ from importlib.machinery import SourceFileLoader
+except ImportError:
+ import imp
+
+ def find_module(modname):
+ """Finds and returns a module in the local dist/checkout.
+ """
+ modpath = os.path.join(
+ os.path.dirname(os.path.dirname(__file__)), "Lib")
+ return imp.load_module(modname, *imp.find_module(modname, [modpath]))
+else:
+ def find_module(modname):
+ """Finds and returns a module in the local dist/checkout.
+ """
+ modpath = os.path.join(
+ os.path.dirname(os.path.dirname(__file__)), "Lib", modname + ".py")
+ return SourceFileLoader(modname, modpath).load_module()
+
+
def write_contents(f):
"""Write C code contents to the target file object.
"""
+ opcode = find_module('opcode')
targets = ['_unknown_opcode'] * 256
for opname, op in opcode.opmap.items():
targets[op] = "TARGET_%s" % opname