[pypy-svn] r54932 - in pypy/branch/smalltalk-shadow-changes/pypy/lang/smalltalk: . test

tverwaes at codespeak.net tverwaes at codespeak.net
Mon May 19 15:28:07 CEST 2008


Author: tverwaes
Date: Mon May 19 15:28:06 2008
New Revision: 54932

Modified:
   pypy/branch/smalltalk-shadow-changes/pypy/lang/smalltalk/constants.py
   pypy/branch/smalltalk-shadow-changes/pypy/lang/smalltalk/objtable.py
   pypy/branch/smalltalk-shadow-changes/pypy/lang/smalltalk/squeakimage.py
   pypy/branch/smalltalk-shadow-changes/pypy/lang/smalltalk/test/test_primitives.py
   pypy/branch/smalltalk-shadow-changes/pypy/lang/smalltalk/wrapper.py
Log:
(cfbolz, tverwaes) moving from global object dictionary, since it's not
necessarily consistent after translating


Modified: pypy/branch/smalltalk-shadow-changes/pypy/lang/smalltalk/constants.py
==============================================================================
--- pypy/branch/smalltalk-shadow-changes/pypy/lang/smalltalk/constants.py	(original)
+++ pypy/branch/smalltalk-shadow-changes/pypy/lang/smalltalk/constants.py	Mon May 19 15:28:06 2008
@@ -128,7 +128,6 @@
     "false": SO_FALSE,
     "charactertable": SO_CHARACTER_TABLE_ARRAY,
     "schedulerassociationpointer" : SO_SCHEDULERASSOCIATIONPOINTER,
-    "compactclasses" : SO_COMPACT_CLASSES_ARRAY,
     "smalltalkdict" : SO_SMALLTALK,
 }
 

Modified: pypy/branch/smalltalk-shadow-changes/pypy/lang/smalltalk/objtable.py
==============================================================================
--- pypy/branch/smalltalk-shadow-changes/pypy/lang/smalltalk/objtable.py	(original)
+++ pypy/branch/smalltalk-shadow-changes/pypy/lang/smalltalk/objtable.py	Mon May 19 15:28:06 2008
@@ -31,11 +31,19 @@
 w_nil = model.w_nil
 w_nil.w_class = classtable.classtable['w_UndefinedObject']
 
-objtable = {}
+# We use indirection because translated globals are assumed to be constant
+class ObjectTableHolder(object):
+    pass
+
+object_table_holder = ObjectTableHolder()
+object_table_holder.objtable = {}
+
+def get_objtable():
+    return object_table_holder.objtable
 
 for name in constants.objects_in_special_object_table:
     name = "w_" + name
     try:
-        objtable[name] = globals()[name]
+        get_objtable()[name] = globals()[name]
     except KeyError, e:
-        objtable[name] = None
+        get_objtable()[name] = None

Modified: pypy/branch/smalltalk-shadow-changes/pypy/lang/smalltalk/squeakimage.py
==============================================================================
--- pypy/branch/smalltalk-shadow-changes/pypy/lang/smalltalk/squeakimage.py	(original)
+++ pypy/branch/smalltalk-shadow-changes/pypy/lang/smalltalk/squeakimage.py	Mon May 19 15:28:06 2008
@@ -124,7 +124,7 @@
             chunk.g_object.init_w_object()
 
     def assign_prebuilt_constants(self):
-        from pypy.lang.smalltalk import classtable, constants, objtable
+        from pypy.lang.smalltalk import classtable, constants
         # assign w_objects for objects that are already in classtable
         for name, so_index in constants.classes_in_special_object_table.items():
             # w_object = getattr(classtable, "w_" + name)
@@ -133,7 +133,7 @@
         # assign w_objects for objects that are already in objtable
         for name, so_index in constants.objects_in_special_object_table.items():
             # w_object = getattr(objtable, "w_" + name)
-            w_object = objtable.objtable["w_" + name]
+            w_object = objtable.get_objtable()["w_" + name]
             self.special_object(so_index).w_object = w_object
 
     def special_object(self, index):
@@ -204,7 +204,7 @@
 
         from pypy.lang.smalltalk import objtable
         for name, idx in constants.objects_in_special_object_table.items():
-            objtable.objtable["w_" + name] = self.special_objects[idx]
+            objtable.get_objtable()["w_" + name] = self.special_objects[idx]
 
     def special(self, index):
         return self.special_objects[index]

Modified: pypy/branch/smalltalk-shadow-changes/pypy/lang/smalltalk/test/test_primitives.py
==============================================================================
--- pypy/branch/smalltalk-shadow-changes/pypy/lang/smalltalk/test/test_primitives.py	(original)
+++ pypy/branch/smalltalk-shadow-changes/pypy/lang/smalltalk/test/test_primitives.py	Mon May 19 15:28:06 2008
@@ -393,45 +393,6 @@
     now = int(time.time())
     assert (prim(primitives.SECONDS_CLOCK, [42]).value - now) <= 2
 
-def test_become():
-    py.test.skip("implement me!")
-    """
-    testBecome
-      | p1 p2 a |
-      p1 := 1 at 2.
-      p2 := #(3 4 5).
-      a := p1 -> p2.
-      XXX ? self assert: 1 at 2 = a key.
-      XXX ? self assert: #(3 4 5) = a value.
-      XXX ? self assert: p1 -> p2 = a.
-      self assert: p1 == a key.
-      self assert: p2 == a value.
-      p1 become: p2.
-      XXX ? self assert: 1 at 2 = a value.
-      XXX ? self assert: #(3 4 5) = a key.
-      XXX ? self assert: p1 -> p2 = a.
-      self assert: p1 == a key.
-      self assert: p2 == a value.
-  
-      self should: [1 become: 2] raise: Error.
-    """
-    # XXX Test deviates from original spec
-    w_p1 = model.W_PointersObject(None, 2)
-    w_p2 = model.W_PointersObject(None, 3)
-    w_a = model.W_PointersObject(classtable.w_Array, 2)
-    w_a.atput0(0,w_p1)
-    w_a.atput0(1,w_p2)
-    objtable.objects += [w_p1]
-    objtable.objects += [w_p2]
-    objtable.objects += [w_a]
-    s_a = w_a.as_association_get_shadow()
-    assert s_a.key() == w_p1
-    assert s_a.value() == w_p2
-    prim(primitives.BECOME, [w_p1, w_p2])
-    s_a = w_a.as_association_get_shadow()
-    assert s_a.key() == w_p2
-    assert s_a.value() == w_p1
-    
 def test_load_inst_var():
     " try to test the LoadInstVar primitives a little "
     w_v = prim(primitives.INST_VAR_AT_0, ["q"])

Modified: pypy/branch/smalltalk-shadow-changes/pypy/lang/smalltalk/wrapper.py
==============================================================================
--- pypy/branch/smalltalk-shadow-changes/pypy/lang/smalltalk/wrapper.py	(original)
+++ pypy/branch/smalltalk-shadow-changes/pypy/lang/smalltalk/wrapper.py	Mon May 19 15:28:06 2008
@@ -163,7 +163,7 @@
 
 def scheduler():
     from pypy.lang.smalltalk import objtable
-    w_association = objtable.objtable["w_schedulerassociationpointer"]
+    w_association = objtable.get_objtable()["w_schedulerassociationpointer"]
     assert w_association is not None
     w_scheduler = AssociationWrapper(w_association).value()
     assert isinstance(w_scheduler, model.W_PointersObject)



More information about the Pypy-commit mailing list