Fixes for Port proxies and proxy parameters.
authorSteve Reinhardt <stever@eecs.umich.edu>
Mon, 9 Oct 2006 01:26:59 +0000 (18:26 -0700)
committerSteve Reinhardt <stever@eecs.umich.edu>
Mon, 9 Oct 2006 01:26:59 +0000 (18:26 -0700)
--HG--
extra : convert_revision : 76b16fe2926611bd1c12c8ad7392355ad30a5138

src/python/m5/params.py
src/python/m5/proxy.py

index cbbd2300484e155278fdc9608fe1f7d6d01c9fe4..93d78418125ac566447fb6df627e08261bbe259e 100644 (file)
@@ -804,7 +804,7 @@ class PortRef(object):
         newRef.simobj = simobj
         assert(isSimObject(newRef.simobj))
         if self.peer and not proxy.isproxy(self.peer):
-            peerObj = memo[self.peer.simobj]
+            peerObj = self.peer.simobj(_memo=memo)
             newRef.peer = self.peer.clone(peerObj, memo)
             assert(not isinstance(newRef.peer, VectorPortRef))
         return newRef
index 7ebc0ae195376051b44760e6088bd7aef2974af2..e539f14eec64ea6f45515d8bbe74bac9b14f2c59 100644 (file)
@@ -33,6 +33,8 @@
 #
 #####################################################################
 
+import copy
+
 class BaseProxy(object):
     def __init__(self, search_self, search_up):
         self._search_self = search_self
@@ -129,15 +131,22 @@ class AttrProxy(BaseProxy):
             return super(AttrProxy, self).__getattr__(self, attr)
         if hasattr(self, '_pdesc'):
             raise AttributeError, "Attribute reference on bound proxy"
-        self._modifiers.append(attr)
-        return self
+        # Return a copy of self rather than modifying self in place
+        # since self could be an indirect reference via a variable or
+        # parameter
+        new_self = copy.deepcopy(self)
+        new_self._modifiers.append(attr)
+        return new_self
 
     # support indexing on proxies (e.g., Self.cpu[0])
     def __getitem__(self, key):
         if not isinstance(key, int):
             raise TypeError, "Proxy object requires integer index"
-        self._modifiers.append(key)
-        return self
+        if hasattr(self, '_pdesc'):
+            raise AttributeError, "Index operation on bound proxy"
+        new_self = copy.deepcopy(self)
+        new_self._modifiers.append(key)
+        return new_self
 
     def find(self, obj):
         try: