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.
This commit is contained in:
parent
6b4543184e
commit
15938e0492
2 changed files with 18 additions and 0 deletions
|
@ -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
|
||||
|
|
|
@ -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.
|
||||
|
|
Loading…
Reference in a new issue