From aab2001ab7a8196eb01be1a05977400fed8d8d79 Mon Sep 17 00:00:00 2001 From: Andreas Hansson Date: Thu, 5 Apr 2012 10:44:35 -0400 Subject: Python: Make the All proxy traverse SimObject children as well This patch changes the behaviour of the All proxy parameter to not only consider the direct children, but also do a pre-order depth-first traversal of the object tree and append all results from the children. This is used in a later patch to find all the memories in the system, independent of where they are located in the hierarchy. --- src/python/m5/SimObject.py | 4 ++++ src/python/m5/proxy.py | 2 ++ 2 files changed, 6 insertions(+) (limited to 'src/python') diff --git a/src/python/m5/SimObject.py b/src/python/m5/SimObject.py index 8c14be287..c1f0ff63e 100644 --- a/src/python/m5/SimObject.py +++ b/src/python/m5/SimObject.py @@ -865,6 +865,10 @@ class SimObject(object): if isinstance(child, ptype) and not isproxy(child) and \ not isNullPointer(child): all[child] = True + if isSimObject(child): + # also add results from the child itself + child_all, done = child.find_all(ptype) + all.update(dict(zip(child_all, [done] * len(child_all)))) # search param space for pname,pdesc in self._params.iteritems(): if issubclass(pdesc.ptype, ptype): diff --git a/src/python/m5/proxy.py b/src/python/m5/proxy.py index a29265892..8c1a46909 100644 --- a/src/python/m5/proxy.py +++ b/src/python/m5/proxy.py @@ -184,6 +184,8 @@ class AnyProxy(BaseProxy): def path(self): return 'any' +# The AllProxy traverses the entire sub-tree (not only the children) +# and adds all objects of a specific type class AllProxy(BaseProxy): def find(self, obj): return obj.find_all(self._pdesc.ptype) -- cgit v1.2.3