From 1be1fe48630cc8d90c707e797718199dc3363057 Mon Sep 17 00:00:00 2001 From: translatenix <119817707+translatenix@users.noreply.github.com> Date: Thu, 31 Oct 2024 13:28:04 -0700 Subject: [PATCH] Use VmObjectBuilder in Listing.distinct(By) implementations (#760) --- .../org/pkl/core/runtime/VmObjectBuilder.java | 4 +++ .../pkl/core/stdlib/base/ListingNodes.java | 27 +++++-------------- 2 files changed, 10 insertions(+), 21 deletions(-) diff --git a/pkl-core/src/main/java/org/pkl/core/runtime/VmObjectBuilder.java b/pkl-core/src/main/java/org/pkl/core/runtime/VmObjectBuilder.java index f95bbeeb..f2cc06d9 100644 --- a/pkl-core/src/main/java/org/pkl/core/runtime/VmObjectBuilder.java +++ b/pkl-core/src/main/java/org/pkl/core/runtime/VmObjectBuilder.java @@ -26,6 +26,10 @@ public final class VmObjectBuilder { private final EconomicMap members; private int elementCount = 0; + public VmObjectBuilder() { + members = EconomicMaps.create(); + } + public VmObjectBuilder(int initialSize) { members = EconomicMaps.create(initialSize); } diff --git a/pkl-core/src/main/java/org/pkl/core/stdlib/base/ListingNodes.java b/pkl-core/src/main/java/org/pkl/core/stdlib/base/ListingNodes.java index a7b9564d..72d07916 100644 --- a/pkl-core/src/main/java/org/pkl/core/stdlib/base/ListingNodes.java +++ b/pkl-core/src/main/java/org/pkl/core/stdlib/base/ListingNodes.java @@ -21,7 +21,6 @@ import com.oracle.truffle.api.dsl.Specialization; import com.oracle.truffle.api.nodes.LoopNode; import org.pkl.core.ast.PklNode; import org.pkl.core.ast.lambda.*; -import org.pkl.core.ast.member.ObjectMember; import org.pkl.core.runtime.*; import org.pkl.core.stdlib.ExternalMethod0Node; import org.pkl.core.stdlib.ExternalMethod1Node; @@ -87,24 +86,17 @@ public final class ListingNodes { @Specialization protected VmListing eval(VmListing self) { var visitedValues = CollectionUtils.newHashSet(); - var newMembers = EconomicMaps.create(); - var index = new MutableLong(0); + var builder = new VmObjectBuilder(); self.forceAndIterateMemberValues( (key, member, value) -> { if (visitedValues.add(value)) { - newMembers.put( - index.getAndIncrement(), - VmUtils.createSyntheticObjectElement(member.getQualifiedName(), value)); + builder.addElement(value); } return true; }); - return new VmListing( - VmUtils.createEmptyMaterializedFrame(), - BaseModule.getListingClass().getPrototype(), - newMembers, - newMembers.size()); + return builder.toListing(); } } @@ -166,24 +158,17 @@ public final class ListingNodes { @Specialization protected VmListing eval(VmListing self, VmFunction selector) { var visitedValues = CollectionUtils.newHashSet(); - var newMembers = EconomicMaps.create(); - var index = new MutableLong(0); + var builder = new VmObjectBuilder(); self.forceAndIterateMemberValues( (key, member, value) -> { if (visitedValues.add(applyNode.execute(selector, value))) { - newMembers.put( - index.getAndIncrement(), - VmUtils.createSyntheticObjectElement(member.getQualifiedName(), value)); + builder.addElement(value); } return true; }); - return new VmListing( - VmUtils.createEmptyMaterializedFrame(), - BaseModule.getListingClass().getPrototype(), - newMembers, - newMembers.size()); + return builder.toListing(); } }