Fix the sequence length in the YAML parser

The initialSize in EconomicsMaps.create() is not the actual stored size,
hence the accurate size is not determined until ObjectMembers are added
after addMembers() called.

Since the size set during the creation of VmListing cannot be changed
afterwards, the size of node.getValue() is used instead of members'
size.
This commit is contained in:
luuvish
2024-04-09 08:28:14 +00:00
committed by Philip K.F. Hölzenspies
parent 3c6df1fe34
commit 375b88f53e

View File

@@ -345,14 +345,15 @@ public final class ParserNodes {
@Override
public VmListing construct(Node node) {
var sequenceNode = (SequenceNode) node;
var members = EconomicMaps.<Object, ObjectMember>create(sequenceNode.getValue().size());
var size = sequenceNode.getValue().size();
var members = EconomicMaps.<Object, ObjectMember>create(size);
var result =
new VmListing(
VmUtils.createEmptyMaterializedFrame(),
BaseModule.getListingClass().getPrototype(),
members,
EconomicMaps.size(members));
size);
if (!node.isRecursive()) {
addMembers(sequenceNode, result);
@@ -390,14 +391,15 @@ public final class ParserNodes {
@Override
public VmListing construct(Node node) {
var mappingNode = (MappingNode) node;
var members = EconomicMaps.<Object, ObjectMember>create(mappingNode.getValue().size());
var size = mappingNode.getValue().size();
var members = EconomicMaps.<Object, ObjectMember>create(size);
var result =
new VmListing(
VmUtils.createEmptyMaterializedFrame(),
BaseModule.getListingClass().getPrototype(),
members,
EconomicMaps.size(members));
size);
if (!node.isRecursive()) {
addMembers(mappingNode, result);
@@ -437,7 +439,8 @@ public final class ParserNodes {
@Override
public VmObject construct(Node node) {
var mappingNode = (MappingNode) node;
var members = EconomicMaps.<Object, ObjectMember>create(mappingNode.getValue().size());
var size = mappingNode.getValue().size();
var members = EconomicMaps.<Object, ObjectMember>create(size);
VmObject result;
if (useMapping) {