In order to allow Data types to specialize their fields completely,
we introduced a copy constructor for VariableTableManager that
duplicates the Data type's VTM into the new subclass. But because
that duplicate still used the same realClass, variable accessors
would frequently return to the original Data type's VTM rather than
use the duplicate.
This patch fixes the duplication process to also reset the
realClass to the new Data type subclass, keeping all future usages
and updates at the correct level. Without this, new instance
variables discovered on subtypes would add an accessor on the
subtype, but then proceed to allocate the variable table based on
the size of the table in the old VTM from the Data supertype.
In order to allow Data types to specialize their fields completely, we introduced a copy constructor for VariableTableManager that duplicates the Data type's VTM into the new subclass. But because that duplicate still used the same realClass, variable accessors would frequently return to the original Data type's VTM rather than use the duplicate.
This patch fixes the duplication process to also reset the realClass to the new Data type subclass, keeping all future usages and updates at the correct level. Without this, new instance variables discovered on subtypes would add an accessor on the subtype, but then proceed to allocate the variable table based on the size of the table in the old VTM from the Data supertype.