diff options
author | Geoffrey Blake <geoffrey.blake@arm.com> | 2013-10-31 13:41:13 -0500 |
---|---|---|
committer | Geoffrey Blake <geoffrey.blake@arm.com> | 2013-10-31 13:41:13 -0500 |
commit | 15938e049267d87e4272aa863741e56eba883117 (patch) | |
tree | 129ca1c1fe7843d561439b1269c9ea80016b2037 /src/python/m5 | |
parent | 6b4543184ea4203f44210f8061b888d8d683979a (diff) | |
download | gem5-15938e049267d87e4272aa863741e56eba883117.tar.xz |
config: Fix handling of parents for simobject vectors
SimObjectVector objects did not provide the same interface to
the _parent attribute through get_parent() like a normal
SimObject. It also handled assigning a _parent incorrectly
if objects in a SimObjectVector were changed post-creation,
leading to errors later when the simulator tried to execute.
This patch fixes these two omissions.
Diffstat (limited to 'src/python/m5')
-rw-r--r-- | src/python/m5/SimObject.py | 5 | ||||
-rw-r--r-- | src/python/m5/params.py | 13 |
2 files changed, 18 insertions, 0 deletions
diff --git a/src/python/m5/SimObject.py b/src/python/m5/SimObject.py index 8aa7260e7..14499759c 100644 --- a/src/python/m5/SimObject.py +++ b/src/python/m5/SimObject.py @@ -784,6 +784,11 @@ class SimObject(object): self._parent = parent self._name = name + # Return parent object of this SimObject, not implemented by SimObjectVector + # because the elements in a SimObjectVector may not share the same parent + def get_parent(self): + return self._parent + # Also implemented by SimObjectVector def get_name(self): return self._name diff --git a/src/python/m5/params.py b/src/python/m5/params.py index 981bb0d37..ff645bb37 100644 --- a/src/python/m5/params.py +++ b/src/python/m5/params.py @@ -247,6 +247,19 @@ class SimObjectVector(VectorParamValue): a.append(v.get_config_as_dict()) return a + # If we are replacing an item in the vector, make sure to set the + # parent reference of the new SimObject to be the same as the parent + # of the SimObject being replaced. Useful to have if we created + # a SimObjectVector of temporary objects that will be modified later in + # configuration scripts. + def __setitem__(self, key, value): + val = self[key] + if value.has_parent(): + warn("SimObject %s already has a parent" % value.get_name() +\ + " that is being overwritten by a SimObjectVector") + value.set_parent(val.get_parent(), val._name) + super(SimObjectVector, self).__setitem__(key, value) + class VectorParamDesc(ParamDesc): # Convert assigned value to appropriate type. If the RHS is not a # list or tuple, it generates a single-element list. |