[bugfix] Fix in-class updates of inherited mutable variables #2880
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
The problem was that when variables from base classes where lowered in the current namespace as
ShadowVars their value was not deep copied as in the past. As a result, when a mutable variable was updated in a subclass body, the original copy of the base class was being changed and this was visible to any new class inheriting it.The solution is much more complicated as simply doing a deep copy of the original value, due to aliases. If we lower the root variable and simply deep copy its value, its alias still refers to the original one. In this case, for example,
env_varsbehaviour would have been fixed but not that ofvariables. As a result, whenever a variable is lowered, all of its aliases are also lowered. We essentially recreate the aliases asShadowVars pointing to theShadowVarof the lowered root variable.Finally, a couple of tweaks were needed for deprecated aliases:
Closes #2848.