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.
This commit is contained in:
Victor Stinner 2016-03-26 01:04:37 +01:00
parent 92c8dce985
commit ca9dbc7d88
1 changed files with 21 additions and 1 deletions

View File

@ -3,14 +3,34 @@
(for compilers supporting computed gotos or "labels-as-values", such as gcc). (for compilers supporting computed gotos or "labels-as-values", such as gcc).
""" """
import opcode
import os import os
import sys 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): def write_contents(f):
"""Write C code contents to the target file object. """Write C code contents to the target file object.
""" """
opcode = find_module('opcode')
targets = ['_unknown_opcode'] * 256 targets = ['_unknown_opcode'] * 256
for opname, op in opcode.opmap.items(): for opname, op in opcode.opmap.items():
targets[op] = "TARGET_%s" % opname targets[op] = "TARGET_%s" % opname