def main(argv): argparser = argparse.ArgumentParser( usage= "%s [PyCPython options, see below] [CPython options, see via --help]" % argv[0], description="Emulate CPython by interpreting its C code via PyCParser.", epilog= "All other options are passed on to CPython. Use --help to see them.", add_help=False # we will add our own ) argparser.add_argument('--pycpython-help', action='help', help='show this help message and exit') argparser.add_argument( '--dump-python', action='store', nargs=1, help= "Dumps the converted Python code of the specified function, e.g. Py_Main." ) argparser.add_argument( '--verbose-jit', action='store_true', help="Prints what functions and global vars we are going to translate." ) args_ns, argv_rest = argparser.parse_known_args(argv[1:]) argv = argv[:1] + argv_rest print "PyCPython -", argparser.description, print "(use --pycpython-help for help)" state = CPythonState() print "Parsing CPython...", state.parse_cpython() if state._errors: print "finished, parse errors:" for m in state._errors: print m else: print "finished, no parse errors." interpreter = cparser.interpreter.Interpreter() interpreter.register(state) if args_ns.dump_python: for fn in args_ns.dump_python: print print "PyAST of %s:" % fn interpreter.dumpFunc(fn) sys.exit() if args_ns.verbose_jit: interpreter.debug_print_getFunc = True interpreter.debug_print_getVar = True args = ("Py_Main", len(argv), argv + [None]) print "Run", args, ":" interpreter.runFunc(*args)
def main(argv): argparser = argparse.ArgumentParser( usage="%s [PyCPython options, see below] [CPython options, see via --help]" % argv[0], description="Emulate CPython by interpreting its C code via PyCParser.", epilog="All other options are passed on to CPython. Use --help to see them.", add_help=False # we will add our own ) argparser.add_argument( '--pycpython-help', action='help', help='show this help message and exit') argparser.add_argument( '--dump-python', action='store', nargs=1, help="Dumps the converted Python code of the specified function, e.g. Py_Main.") argparser.add_argument( '--verbose-jit', action='store_true', help="Prints what functions and global vars we are going to translate.") args_ns, argv_rest = argparser.parse_known_args(argv[1:]) argv = argv[:1] + argv_rest print "PyCPython -", argparser.description, print "(use --pycpython-help for help)" state = CPythonState() print "Parsing CPython...", state.parse_cpython() if state._errors: print "finished, parse errors:" for m in state._errors: print m else: print "finished, no parse errors." interpreter = cparser.interpreter.Interpreter() interpreter.register(state) if args_ns.dump_python: for fn in args_ns.dump_python: print print "PyAST of %s:" % fn interpreter.dumpFunc(fn) sys.exit() if args_ns.verbose_jit: interpreter.debug_print_getFunc = True interpreter.debug_print_getVar = True args = ("Py_Main", len(argv), argv + [None]) print "Run", args, ":" interpreter.runFunc(*args)
state = prepareState() cparser.parse(MyDir + "/test_interpreter.c", state) import cparser.interpreter interpreter = cparser.interpreter.Interpreter() interpreter.register(state) if __name__ == '__main__': print "erros so far:" for m in state._errors: print m for f in state.contentlist: if not isinstance(f, cparser.CFunc): continue if not f.body: continue print print "parsed content of " + str(f) + ":" for c in f.body.contentlist: print c print print "PyAST of main:" interpreter.dumpFunc("main") print print interpreter.runFunc("main", len(sys.argv), sys.argv + [None])
state = prepareState() cparser.parse(MyDir + "/test_interpreter.c", state) from cparser import interpreter interpreter = interpreter.Interpreter() interpreter.register(state) if __name__ == '__main__': print("errors so far:") for m in state._errors: print(m) for f in state.contentlist: if not isinstance(f, cparser.CFunc): continue if not f.body: continue print() print("parsed content of " + str(f) + ":") for c in f.body.contentlist: print(c) print() print("PyAST of main:") interpreter.dumpFunc("main") print() print() interpreter.runFunc("main", len(sys.argv), sys.argv + [None])
return state state = prepareState() cparser.parse(CPythonDir + "/Modules/main.c", state) # Py_Main cparser.parse(CPythonDir + "/Python/getopt.c", state) # _PyOS_GetOpt cparser.parse(CPythonDir + "/Python/pythonrun.c", state) # Py_Initialize cparser.parse(CPythonDir + "/Python/pystate.c", state) # PyInterpreterState_New cparser.parse(CPythonDir + "/Python/sysmodule.c", state) # PySys_ResetWarnOptions cparser.parse(CPythonDir + "/Include/structmember.h", state) # struct PyMemberDef. just for now to avoid errors :) import cparser.interpreter interpreter = cparser.interpreter.Interpreter() interpreter.register(state) interpreter.registerFinalize() if __name__ == '__main__': print "erros so far:" for m in state._errors: print m print print "PyAST of Py_Main:" interpreter.dumpFunc("Py_Main") args = ("Py_Main", len(sys.argv), sys.argv + [None]) print "Run", args, ":" interpreter.runFunc(*args)