[pypy-svn] r10589 - pypy/dist/pypy/translator
tismer at codespeak.net
tismer at codespeak.net
Wed Apr 13 19:52:09 CEST 2005
Author: tismer
Date: Wed Apr 13 19:52:09 2005
New Revision: 10589
Modified:
pypy/dist/pypy/translator/geninterplevel.py
Log:
small additions for builtin module and system file support.
Reason: we want rpystone to work after interpleveling.
Modified: pypy/dist/pypy/translator/geninterplevel.py
==============================================================================
--- pypy/dist/pypy/translator/geninterplevel.py (original)
+++ pypy/dist/pypy/translator/geninterplevel.py Wed Apr 13 19:52:09 2005
@@ -79,6 +79,17 @@
self.initcode.append1('%s = %s(%r)' % (
name, unique, hex(value)[2:-1] ) )
+def bltinmod_helper(self, mod):
+ name = self.uniquename("mod_%s" % mod.__name__)
+ unique = self.uniquenameofprebuilt("bltinmod_helper", bltinmod_helper)
+ self.initcode.append1(
+ 'def %s(name):\n'
+ ' dic = space.newdict([])\n'
+ ' space.exec_("import %%s" %% name, dic, dic)\n'
+ ' return space.eval("%%s" %% name, dic, dic)' % (unique, ))
+ self.initcode.append1('%s = %s(%r)' % (name, unique, mod.__name__))
+ return name
+
class GenRpy:
def __init__(self, translator, entrypoint=None, modname=None, moddict=None):
self.translator = translator
@@ -354,12 +365,11 @@
return name
def nameof_module(self, value):
- #assert value is os or not hasattr(value, "__file__") or \
- # not (value.__file__.endswith('.pyc') or
- # value.__file__.endswith('.py') or
- # value.__file__.endswith('.pyo')), \
- # "%r is not a builtin module (probably :)"%value
- # assume that we get a faked module
+ if value is os or not hasattr(value, "__file__") or \
+ not (value.__file__.endswith('.pyc') or
+ value.__file__.endswith('.py') or
+ value.__file__.endswith('.pyo')) :
+ return bltinmod_helper(self, value)
name = self.uniquename('mod_%s' % value.__name__)
self.initcode.append1('import %s as _tmp' % value.__name__)
self.initcode.append1('%s = space.wrap(_tmp)' % (name))
@@ -775,11 +785,11 @@
def nameof_file(self, fil):
if fil is sys.stdin:
- return 'PySys_GetObject("stdin")'
+ return 'space.sys.get("stdin")'
if fil is sys.stdout:
- return 'PySys_GetObject("stdout")'
+ return 'space.sys.get("stdout")'
if fil is sys.stderr:
- return 'PySys_GetObject("stderr")'
+ return 'space.sys.get("stderr")'
raise Exception, 'Cannot translate an already-open file: %r' % (fil,)
def gen_source(self, fname, ftmpname=None, file=file):
More information about the Pypy-commit
mailing list