[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