[pypy-svn] r46549 - in pypy/dist/pypy/translator/cli: . src

antocuni at codespeak.net antocuni at codespeak.net
Thu Sep 13 19:31:36 CEST 2007


Author: antocuni
Date: Thu Sep 13 19:31:34 2007
New Revision: 46549

Modified:
   pypy/dist/pypy/translator/cli/constant.py
   pypy/dist/pypy/translator/cli/cts.py
   pypy/dist/pypy/translator/cli/src/pypylib.cs
Log:
implement weakrefs for gencli



Modified: pypy/dist/pypy/translator/cli/constant.py
==============================================================================
--- pypy/dist/pypy/translator/cli/constant.py	(original)
+++ pypy/dist/pypy/translator/cli/constant.py	Thu Sep 13 19:31:34 2007
@@ -396,8 +396,7 @@
         
 class CLIWeakRefConst(CLIBaseConstMixin, WeakRefConst):
     def create_pointer(self, gen):
-        gen.ilasm.opcode('ldnull')
-        gen.ilasm.new('instance void %s::.ctor(object)' % self.get_type())
+        gen.ilasm.new('instance void %s::.ctor()' % self.get_type())
         self.db.const_count.inc('WeakRef')
 
     def get_type(self, include_class=True):
@@ -406,7 +405,6 @@
     def initialize_data(self, constgen, gen):
         if self.value is not None:
             push_constant(self.db, self.value._TYPE, self.value, gen)
-            gen.ilasm.call_method(
-                'void %s::set_Target(object)' % self.get_type(), True)
+            gen.ilasm.call_method('void %s::ll_set(object)' % self.get_type(), True)
             return True
     

Modified: pypy/dist/pypy/translator/cli/cts.py
==============================================================================
--- pypy/dist/pypy/translator/cli/cts.py	(original)
+++ pypy/dist/pypy/translator/cli/cts.py	Thu Sep 13 19:31:34 2007
@@ -104,7 +104,7 @@
     char =    T('char')
     string =  T('string')
 
-    weakref = CliClassType('mscorlib', 'System.WeakReference')
+    weakref = CliClassType('pypylib', 'pypy.runtime.WeakReference')
     type = CliClassType('mscorlib', 'System.Type')
     object = CliClassType('mscorlib', 'System.Object')
     list = CliGenericType('pypylib', 'pypy.runtime.List', 1)
@@ -132,7 +132,7 @@
     ootype.Class: types.type,
     ootype.String: types.string,
     ootype.StringBuilder: types.string_builder,
-    #WeakGcAddress: types.weakref,
+    ootype.WeakReference: types.weakref,
 
     # maps generic types to their ordinal
     ootype.List.SELFTYPE_T: types.list,

Modified: pypy/dist/pypy/translator/cli/src/pypylib.cs
==============================================================================
--- pypy/dist/pypy/translator/cli/src/pypylib.cs	(original)
+++ pypy/dist/pypy/translator/cli/src/pypylib.cs	Thu Sep 13 19:31:34 2007
@@ -552,6 +552,21 @@
         public TValue ll_current_value() { return it.Current.Value; }
     }
 
+    public class WeakReference
+    {
+        System.WeakReference wref;
+
+        public void ll_set(object obj)
+        {
+            this.wref = new System.WeakReference(obj);
+        }
+
+        public object ll_deref()
+        {
+            return this.wref.Target;
+        }
+    }
+
     public class Record_Signed_Signed {
         public int item0;
         public int item1;



More information about the Pypy-commit mailing list