[pypy-svn] r34719 - in pypy/dist/pypy/translator: cli cli/test oosupport
antocuni at codespeak.net
antocuni at codespeak.net
Fri Nov 17 20:39:38 CET 2006
Author: antocuni
Date: Fri Nov 17 20:39:37 2006
New Revision: 34719
Modified:
pypy/dist/pypy/translator/cli/constant.py
pypy/dist/pypy/translator/cli/ilgenerator.py
pypy/dist/pypy/translator/cli/test/test_constant.py
pypy/dist/pypy/translator/oosupport/constant.py
Log:
Fix a bug in oosupport that produced wrong code when splitting
constant initialization into multiple steps, and the relative test.
Modified: pypy/dist/pypy/translator/cli/constant.py
==============================================================================
--- pypy/dist/pypy/translator/cli/constant.py (original)
+++ pypy/dist/pypy/translator/cli/constant.py Fri Nov 17 20:39:37 2006
@@ -41,7 +41,6 @@
DEBUG_CONST_INIT = False
DEBUG_CONST_INIT_VERBOSE = False
-MAX_CONST_PER_STEP = 100
SERIALIZE = False
# ______________________________________________________________________
Modified: pypy/dist/pypy/translator/cli/ilgenerator.py
==============================================================================
--- pypy/dist/pypy/translator/cli/ilgenerator.py (original)
+++ pypy/dist/pypy/translator/cli/ilgenerator.py Fri Nov 17 20:39:37 2006
@@ -252,7 +252,7 @@
self.call_method('void class [mscorlib]System.IO.TextWriter::WriteLine(string)', virtual=True)
def add_comment(self, text):
- self.out.write('// %s\n' % text)
+ self.code.writeline('// %s' % text)
def flush(self):
pass
Modified: pypy/dist/pypy/translator/cli/test/test_constant.py
==============================================================================
--- pypy/dist/pypy/translator/cli/test/test_constant.py (original)
+++ pypy/dist/pypy/translator/cli/test/test_constant.py Fri Nov 17 20:39:37 2006
@@ -119,3 +119,12 @@
s = A('bar')
return a.dict[s]
assert self.interpret(fn, [True]) == 42
+
+ def test_multiple_step(self):
+ from pypy.translator.oosupport import constant
+ constant.MAX_CONST_PER_STEP = 2
+ c1 = [1]
+ c2 = [2]
+ def fn(x, y):
+ return c1[x] + c2[y]
+ assert self.interpret(fn, [0, 0]) == 3
Modified: pypy/dist/pypy/translator/oosupport/constant.py
==============================================================================
--- pypy/dist/pypy/translator/oosupport/constant.py (original)
+++ pypy/dist/pypy/translator/oosupport/constant.py Fri Nov 17 20:39:37 2006
@@ -29,6 +29,8 @@
from pypy.rpython.ootypesystem import ootype
import operator
+MAX_CONST_PER_STEP = 100
+
PRIMITIVE_TYPES = set([ootype.Void, ootype.Bool, ootype.Char, ootype.UniChar,
ootype.Float, ootype.Signed, ootype.Unsigned,
ootype.String, ootype.SignedLongLong,
@@ -255,9 +257,9 @@
""" Iterates through each constant, initializing its data. """
gen.add_section("Initialize Data Phase")
for const in all_constants:
+ self._consider_step(gen)
gen.add_comment("Constant: %s" % const.name)
self._push_constant_during_init(gen, const)
- self._consider_step(gen)
if not const.initialize_data(gen):
gen.pop(const.OOTYPE())
@@ -266,7 +268,7 @@
start a new step every so often to ensure the initialization
functions don't get too large and upset mono or the JVM or
what have you. """
- if (self._all_counter % 100) == 0:
+ if (self._all_counter % MAX_CONST_PER_STEP) == 0:
self._end_step(gen)
self._declare_step(gen, self._step_counter) # open the next step
self._all_counter += 1
More information about the Pypy-commit
mailing list