sim: clean up child handling
The old code for handling SimObject children was kind of messy, with children stored both in _values and _children, and inconsistent and potentially buggy handling of SimObject vectors. Now children are always stored in _children, and SimObject vectors are consistently handled using the SimObjectVector class. Also, by deferring the parenting of SimObject-valued parameters until the end (instead of doing it at assignment), we eliminate the hole where one could assign a vector of SimObjects to a parameter then append to that vector, with the appended objects never getting parented properly. This patch induces small stats changes in tests with data races due to changes in the object creation & initialization order. The new code does object vectors in order and so should be more stable.
This commit is contained in:
@@ -55,6 +55,10 @@ def instantiate():
|
||||
# we need to fix the global frequency
|
||||
ticks.fixGlobalFrequency()
|
||||
|
||||
# Make sure SimObject-valued params are in the configuration
|
||||
# hierarchy so we catch them with future descendants() walks
|
||||
for obj in root.descendants(): obj.adoptOrphanParams()
|
||||
|
||||
# Unproxy in sorted order for determinism
|
||||
for obj in root.descendants(): obj.unproxyParams()
|
||||
|
||||
|
||||
Reference in New Issue
Block a user