[pypy-svn] r17481 - in pypy/dist/pypy/interpreter: astcompiler pyparser/test

pedronis at codespeak.net pedronis at codespeak.net
Mon Sep 12 00:20:19 CEST 2005


Author: pedronis
Date: Mon Sep 12 00:20:17 2005
New Revision: 17481

Modified:
   pypy/dist/pypy/interpreter/astcompiler/pycodegen.py
   pypy/dist/pypy/interpreter/pyparser/test/test_astcompiler.py
Log:
use the std space instead of a faked one in this test, better convers forget space.* needed op

fixed some of those

we get a failing test this, related to different decisions about consts, 

first, we need proper line numbering



Modified: pypy/dist/pypy/interpreter/astcompiler/pycodegen.py
==============================================================================
--- pypy/dist/pypy/interpreter/astcompiler/pycodegen.py	(original)
+++ pypy/dist/pypy/interpreter/astcompiler/pycodegen.py	Mon Sep 12 00:20:17 2005
@@ -292,15 +292,16 @@
 
 
     def visitModule(self, node):
+        space = self.space
         self.parseSymbols(node)
         assert node.scope is not None
         self.scope = node.scope
         self.emitop_int('SET_LINENO', 0)
-        if node.doc:
+        if not space.is_w(node.doc, space.w_None):
             self.emitop_obj('LOAD_CONST', node.doc)
             self.storeName('__doc__')
         node.node.accept( self )
-        self.emitop_obj('LOAD_CONST', self.space.w_None )
+        self.emitop_obj('LOAD_CONST', space.w_None )
         self.emit('RETURN_VALUE')
 
     def visitExpression(self, node):
@@ -313,7 +314,8 @@
 
     def visitFunction(self, node):
         self._visitFuncOrLambda(node, isLambda=0)
-        if node.doc:
+        space = self.space
+        if not space.is_w(node.doc, space.w_None):
             self.setDocstring(node.doc)
         self.storeName(node.name)
 
@@ -1207,7 +1209,7 @@
         CodeGenerator.__init__(self, space, graph)
         self.optimized = 1
 
-        if not isLambda and func.doc:
+        if not isLambda and not space.is_w(func.doc, space.w_None):
             self.setDocstring(func.doc)
 
         if func.varargs:
@@ -1281,7 +1283,7 @@
                                            optimized=0, klass=1)
         CodeGenerator.__init__(self, space, graph)
         self.graph.setFlag(CO_NEWLOCALS)
-        if klass.doc:
+        if not space.is_w(klass.doc, space.w_None):
             self.setDocstring(klass.doc)
 
     def get_module(self):
@@ -1303,7 +1305,7 @@
         self.set_lineno(klass)
         self.emitop("LOAD_GLOBAL", "__name__")
         self.storeName("__module__")
-        if klass.doc:
+        if not space.is_w(klass.doc, space.w_None):
             self.emitop_obj("LOAD_CONST", klass.doc)
             self.storeName('__doc__')
 

Modified: pypy/dist/pypy/interpreter/pyparser/test/test_astcompiler.py
==============================================================================
--- pypy/dist/pypy/interpreter/pyparser/test/test_astcompiler.py	(original)
+++ pypy/dist/pypy/interpreter/pyparser/test/test_astcompiler.py	Mon Sep 12 00:20:17 2005
@@ -8,6 +8,8 @@
     import sys
     if sys.version[:3] != "2.4":
         py.test.skip("expected to work only on 2.4")
+    import pypy.conftest
+    mod.std_space = pypy.conftest.getobjspace('std')
 
 from pypy.interpreter.astcompiler import ast, misc, pycodegen
 
@@ -77,7 +79,7 @@
         Generator = pycodegen.ExpressionCodeGenerator
     codegen = Generator(space, ast)
     rcode = codegen.getCode()
-    return to_code(rcode)
+    return rcode
 
 def compile_with_stablecompiler(expr, target='exec'):
     from pypy.interpreter.testcompiler import compile
@@ -85,8 +87,9 @@
     return compile(expr, '<?>', target)
 
 
-def compare_code(ac_code, sc_code):
+def compare_code(ac_code, sc_code, space=FakeSpace()):
     #print "Filename", ac_code.co_filename, sc_code.co_filename
+    ac_code = to_code(ac_code, space)
     assert ac_code.co_filename == sc_code.co_filename
     #print repr(ac_code.co_code)
     #print repr(sc_code.co_code)
@@ -99,23 +102,28 @@
         assert ac_code.co_code == sc_code.co_code
     assert ac_code.co_varnames == sc_code.co_varnames
     assert ac_code.co_flags == sc_code.co_flags
-    
+
     assert len(ac_code.co_consts) == len(sc_code.co_consts)
     for c1, c2 in zip( ac_code.co_consts, sc_code.co_consts ):
         if type(c1)==PyCode:
-            c1 = to_code(c1)
-            return compare_code( c1, c2 )
+            return compare_code( c1, c2, space )
         else:
             assert c1 == c2
 
-def to_code( rcode ):
+def to_code( rcode, space ):
     import new
+    consts = []
+    for w in rcode.co_consts_w:
+        if type(w)==PyCode:
+            consts.append(w)
+        else:
+            consts.append(space.unwrap(w))
     code = new.code( rcode.co_argcount,
                      rcode.co_nlocals,
                      rcode.co_stacksize,
                      rcode.co_flags,
                      rcode.co_code,
-                     tuple(rcode.co_consts_w),
+                     tuple(consts),
                      tuple(rcode.co_names),
                      tuple(rcode.co_varnames),
                      rcode.co_filename,
@@ -126,12 +134,15 @@
                      tuple(rcode.co_cellvars) )
     return code
 
-def check_compile(expr, target='exec', quiet=False):
+def check_compile(expr, target='exec', quiet=False, space=FakeSpace()):
     if not quiet:
         print "Compiling:", expr
+
+    space = std_space
+
     sc_code = compile_with_stablecompiler(expr, target=target)
-    ac_code = compile_with_astcompiler(expr, target=target)
-    compare_code(ac_code, sc_code)
+    ac_code = compile_with_astcompiler(expr, target=target, space=space)
+    compare_code(ac_code, sc_code, space=space)
 
 ## def check_compile( expr ):
 ##     space = FakeSpace()



More information about the Pypy-commit mailing list