Mercurial > cpython-lru_cache-weakref
view Python/makeopcodetargets.py @ 62198:b2c1995633bd 3.1
Merged revisions 81849 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/branches/py3k
........
r81849 | victor.stinner | 2010-06-08 23:45:51 +0200 (mar., 08 juin 2010) | 7 lines
PyArg_Parse*("Z#") raises an error for unknown type
instead of ignoring the error and leave the pointer to the string and the size
unchanged (not initialized).
Fix also the type in the error message of "Z", "Z#" and "Y" formats.
........
| author | Victor Stinner <victor.stinner@haypocalc.com> |
|---|---|
| date | Tue, 08 Jun 2010 21:46:32 +0000 |
| parents | f197407bdba2 |
| children | 3c9232a684ae |
line wrap: on
line source
#! /usr/bin/env python """Generate C code for the jump table of the threaded code interpreter (for compilers supporting computed gotos or "labels-as-values", such as gcc). """ # This code should stay compatible with Python 2.3, at least while # some of the buildbots have Python 2.3 as their system Python. import imp import os 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])) 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(): if opname == "STOP_CODE": # XXX opcode not implemented continue targets[op] = "TARGET_%s" % opname f.write("static void *opcode_targets[256] = {\n") f.write(",\n".join([" &&%s" % s for s in targets])) f.write("\n};\n") if __name__ == "__main__": import sys assert len(sys.argv) < 3, "Too many arguments" if len(sys.argv) == 2: target = sys.argv[1] else: target = "Python/opcode_targets.h" f = open(target, "w") try: write_contents(f) finally: f.close()
