[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