summaryrefslogtreecommitdiff
path: root/src/python/m5
diff options
context:
space:
mode:
authorRon Dreslinski <rdreslin@umich.edu>2006-10-09 00:28:26 -0400
committerRon Dreslinski <rdreslin@umich.edu>2006-10-09 00:28:26 -0400
commit95ca4f9d4a64cc2d28550e40fbe1c41734e7c1c2 (patch)
tree0b2a4b7b679280ddd51b29d069b91dd388422e66 /src/python/m5
parent0087061681869c9aaab81c3797020b083a83d46a (diff)
parent67a114fc29662d262a3d7ae867f6ee4c25c0ce8f (diff)
downloadgem5-95ca4f9d4a64cc2d28550e40fbe1c41734e7c1c2.tar.xz
Merge zizzer:/z/m5/Bitkeeper/newmem
into zazzer.eecs.umich.edu:/z/rdreslin/m5bk/newmemcleanest --HG-- extra : convert_revision : 77b06379a520dd91f124c0a543e30ec3a9cd1452
Diffstat (limited to 'src/python/m5')
-rw-r--r--src/python/m5/params.py2
-rw-r--r--src/python/m5/proxy.py17
2 files changed, 14 insertions, 5 deletions
diff --git a/src/python/m5/params.py b/src/python/m5/params.py
index cbbd23004..93d784181 100644
--- a/src/python/m5/params.py
+++ b/src/python/m5/params.py
@@ -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
diff --git a/src/python/m5/proxy.py b/src/python/m5/proxy.py
index 7ebc0ae19..e539f14ee 100644
--- a/src/python/m5/proxy.py
+++ b/src/python/m5/proxy.py
@@ -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: