[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