[pypy-svn] r66687 - pypy/branch/pyjitpl5/pypy/translator/cli

antocuni at codespeak.net antocuni at codespeak.net
Thu Jul 30 11:41:12 CEST 2009


Author: antocuni
Date: Thu Jul 30 11:41:10 2009
New Revision: 66687

Modified:
   pypy/branch/pyjitpl5/pypy/translator/cli/constant.py
   pypy/branch/pyjitpl5/pypy/translator/cli/gencli.py
Log:
kill kill kill! :-)

So far there were three different ways to handle pbcs in the cli backend, but
two were just old experiments which turned to be slow, untested and maybe
half-broken.  Kill them and keep only the old "StaticFieldConstGenerator"



Modified: pypy/branch/pyjitpl5/pypy/translator/cli/constant.py
==============================================================================
--- pypy/branch/pyjitpl5/pypy/translator/cli/constant.py	(original)
+++ pypy/branch/pyjitpl5/pypy/translator/cli/constant.py	Thu Jul 30 11:41:10 2009
@@ -49,7 +49,7 @@
 # Different generators implementing different techniques for loading
 # constants (Static fields, singleton fields, etc)
 
-class CLIBaseConstGenerator(BaseConstantGenerator):
+class CLIConstantGenerator(BaseConstantGenerator):
     """
     Base of all CLI constant generators.  It implements the oosupport
     constant generator in terms of the CLI interface.
@@ -66,7 +66,19 @@
         return gen
 
     def _end_gen_constants(self, gen, numsteps):
-        assert gen.ilasm is self.ilasm
+
+        self.ilasm.begin_function('.cctor', [], 'void', False, 'static',
+                                  'specialname', 'rtspecialname', 'default')
+        self.ilasm.stderr('CONST: initialization starts', DEBUG_CONST_INIT)
+        for i in range(numsteps):
+            self.ilasm.stderr('CONST: step %d of %d' % (i, numsteps),
+                              DEBUG_CONST_INIT)
+            step_name = 'step%d' % i
+            self.ilasm.call('void %s::%s()' % (CONST_CLASS, step_name))
+        self.ilasm.stderr('CONST: initialization completed', DEBUG_CONST_INIT)
+        self.ilasm.ret()
+        self.ilasm.end_function()
+        
         self.end_class()
 
     def begin_class(self):
@@ -96,11 +108,6 @@
         else:
             return BaseConstantGenerator._create_complex_const(self, value)
 
-class FieldConstGenerator(CLIBaseConstGenerator):
-    pass
-
-class StaticFieldConstGenerator(FieldConstGenerator):
-
     # _________________________________________________________________
     # OOSupport interface
     
@@ -127,144 +134,8 @@
         gen.ilasm.ret()
         gen.ilasm.end_function()
 
-    def _end_gen_constants(self, gen, numsteps):
 
-        self.ilasm.begin_function('.cctor', [], 'void', False, 'static',
-                                  'specialname', 'rtspecialname', 'default')
-        self.ilasm.stderr('CONST: initialization starts', DEBUG_CONST_INIT)
-        for i in range(numsteps):
-            self.ilasm.stderr('CONST: step %d of %d' % (i, numsteps),
-                              DEBUG_CONST_INIT)
-            step_name = 'step%d' % i
-            self.ilasm.call('void %s::%s()' % (CONST_CLASS, step_name))
-        self.ilasm.stderr('CONST: initialization completed', DEBUG_CONST_INIT)
-        self.ilasm.ret()
-        self.ilasm.end_function()
 
-        super(StaticFieldConstGenerator, self)._end_gen_constants(
-            gen, numsteps)
-
-class InstanceFieldConstGenerator(FieldConstGenerator):
-    
-    # _________________________________________________________________
-    # OOSupport interface
-    
-    def push_constant(self, gen, const):
-        # load the singleton instance
-        gen.ilasm.opcode('ldsfld class %s %s::Singleton' % (CONST_CLASS, CONST_CLASS))
-        gen.ilasm.opcode('ldfld %s %s::%s' % (const.get_type(), CONST_CLASS, const.name))
-
-    def _push_constant_during_init(self, gen, const):
-        # during initialization, we load the 'this' pointer from our
-        # argument rather than the singleton argument
-        gen.ilasm.opcode('ldarg.0')
-        gen.ilasm.opcode('ldfld %s %s::%s' % (const.get_type(), CONST_CLASS, const.name))
-
-    def _pre_store_constant(self, gen, const):
-        gen.ilasm.opcode('ldarg.0')
-        
-    def _store_constant(self, gen, const):
-        gen.ilasm.set_field((const.get_type(), CONST_CLASS, const.name))
-
-    # _________________________________________________________________
-    # CLI interface
-
-    def _declare_const(self, gen, all_constants):
-        gen.ilasm.field(const.name, const.get_type(), static=False)
-    
-    def _declare_step(self, gen, stepnum):
-        gen.ilasm.begin_function('step%d' % stepnum, [], 'void', False)
-
-    def _close_step(self, gen, stepnum):
-        gen.ilasm.ret()
-        gen.ilasm.end_function()
-
-    def _end_gen_constants(self, gen, numsteps):
-
-        ilasm = gen.ilasm
-
-        ilasm.begin_function('.ctor', [], 'void', False, 'specialname', 'rtspecialname', 'instance')
-        ilasm.opcode('ldarg.0')
-        ilasm.call('instance void object::.ctor()')
-
-        ilasm.opcode('ldarg.0')
-        ilasm.opcode('stsfld class %s %s::Singleton' % (CONST_CLASS, CONST_CLASS))
-        
-        for i in range(numsteps):
-            step_name = 'step%d' % i
-            ilasm.opcode('ldarg.0')
-            ilasm.call('instance void %s::%s()' % (CONST_CLASS, step_name))
-        ilasm.ret()
-        ilasm.end_function()
-
-        # declare&init the Singleton containing the constants
-        ilasm.field('Singleton', 'class %s' % CONST_CLASS, static=True)
-        ilasm.begin_function('.cctor', [], 'void', False, 'static', 'specialname', 'rtspecialname', 'default')
-        if SERIALIZE:
-            self._serialize_ctor()
-        else:
-            self._plain_ctor()
-        ilasm.end_function()
-
-        super(StaticFieldConstGenerator, self)._end_gen_constants(gen, numsteps)
-
-    def _plain_ctor(self):
-        self.ilasm.new('instance void class %s::.ctor()' % CONST_CLASS)
-        self.ilasm.pop()
-        self.ilasm.ret()
-
-    def _serialize_ctor(self):
-        self.ilasm.opcode('ldstr "constants.dat"')
-        self.ilasm.call('object [pypylib]pypy.runtime.Utils::Deserialize(string)')
-        self.ilasm.opcode('dup')
-        self.ilasm.opcode('brfalse initialize')
-        self.ilasm.stderr('Constants deserialized successfully')        
-        self.ilasm.opcode('stsfld class %s %s::Singleton' % (CONST_CLASS, CONST_CLASS))
-        self.ilasm.ret()
-        self.ilasm.label('initialize')
-        self.ilasm.pop()
-        self.ilasm.stderr('Cannot deserialize constants... initialize them!')
-        self.ilasm.new('instance void class %s::.ctor()' % CONST_CLASS)
-        self.ilasm.opcode('ldstr "constants.dat"')
-        self.ilasm.call('void [pypylib]pypy.runtime.Utils::Serialize(object, string)')
-        self.ilasm.ret()
-
-class LazyConstGenerator(StaticFieldConstGenerator):
-    def push_constant(self, ilasm, const):
-        getter_name = '%s::%s' % (CONST_CLASS, 'get_%s' % const.name)
-        ilasm.call('%s %s()' % (const.get_type(), getter_name))
-
-    def _create_pointers(self, gen, all_constants):
-        # overload to do nothing since we handle everything in lazy fashion
-        pass
-
-    def _initialize_data(self, gen, all_constants):
-        # overload to do nothing since we handle everything in lazy fashion
-        pass
-
-    def _declare_const(self, gen, const):
-        # Declare the field
-        super(LazyConstGenerator, self)._declare_const(gen, const)
-
-        # Create the method for accessing the field
-        getter_name = 'get_%s' % const.name
-        type_ = const.get_type()
-        self.ilasm.begin_function(getter_name, [], type_, False, 'static')
-        self.ilasm.load_static_constant(type_, CONST_NAMESPACE, CONST_CLASS, const.name)
-        # if it's already initialized, just return it
-        self.ilasm.opcode('dup')
-        self.ilasm.opcode('brfalse', 'initialize')
-        self.ilasm.opcode('ret')
-        # else, initialize!
-        self.ilasm.label('initialize')
-        self.ilasm.opcode('pop') # discard the null value we know is on the stack
-        const.instantiate(ilasm)
-        self.ilasm.opcode('dup') # two dups because const.init pops the value at the end
-        self.ilasm.opcode('dup')
-        self.ilasm.store_static_constant(type_, CONST_NAMESPACE, CONST_CLASS, const.name)
-        const.init(ilasm)
-        self.ilasm.opcode('ret')
-        self.ilasm.end_function()
 
 # ______________________________________________________________________
 # Mixins

Modified: pypy/branch/pyjitpl5/pypy/translator/cli/gencli.py
==============================================================================
--- pypy/branch/pyjitpl5/pypy/translator/cli/gencli.py	(original)
+++ pypy/branch/pyjitpl5/pypy/translator/cli/gencli.py	Thu Jul 30 11:41:10 2009
@@ -26,7 +26,7 @@
     Database = LowLevelDatabase
     log = log
     
-    ConstantGenerator = constant.StaticFieldConstGenerator
+    ConstantGenerator = constant.CLIConstantGenerator
     InstanceConst = constant.CLIInstanceConst
     RecordConst = constant.CLIRecordConst
     ClassConst = constant.CLIClassConst



More information about the Pypy-commit mailing list