diff options
author | Ron Dreslinski <rdreslin@umich.edu> | 2006-10-09 00:28:26 -0400 |
---|---|---|
committer | Ron Dreslinski <rdreslin@umich.edu> | 2006-10-09 00:28:26 -0400 |
commit | 95ca4f9d4a64cc2d28550e40fbe1c41734e7c1c2 (patch) | |
tree | 0b2a4b7b679280ddd51b29d069b91dd388422e66 /src/python/m5 | |
parent | 0087061681869c9aaab81c3797020b083a83d46a (diff) | |
parent | 67a114fc29662d262a3d7ae867f6ee4c25c0ce8f (diff) | |
download | gem5-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.py | 2 | ||||
-rw-r--r-- | src/python/m5/proxy.py | 17 |
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: |