#! /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).
"""

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("\t&&%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()
