From eae8679f661c09a764683b11c8073bc8f105814d Mon Sep 17 00:00:00 2001 From: Florian Angerer <florian.angerer@oracle.com> Date: Wed, 13 Dec 2017 13:00:45 +0100 Subject: [PATCH] Fix: Did not box Java String for dimnames. --- .../nodes/access/vector/CachedExtractVectorNode.java | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/access/vector/CachedExtractVectorNode.java b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/access/vector/CachedExtractVectorNode.java index 4ab4126616..5101c995fa 100644 --- a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/access/vector/CachedExtractVectorNode.java +++ b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/access/vector/CachedExtractVectorNode.java @@ -39,6 +39,7 @@ import com.oracle.truffle.r.nodes.attributes.SpecialAttributesFunctions.GetDimNa import com.oracle.truffle.r.nodes.attributes.SpecialAttributesFunctions.GetNamesAttributeNode; import com.oracle.truffle.r.nodes.attributes.SpecialAttributesFunctions.SetDimAttributeNode; import com.oracle.truffle.r.nodes.attributes.SpecialAttributesFunctions.SetDimNamesAttributeNode; +import com.oracle.truffle.r.nodes.binary.BoxPrimitiveNode; import com.oracle.truffle.r.nodes.profile.AlwaysOnBranchProfile; import com.oracle.truffle.r.nodes.profile.VectorLengthProfile; import com.oracle.truffle.r.runtime.RRuntime; @@ -80,6 +81,8 @@ final class CachedExtractVectorNode extends CachedVectorNode { @Child private GetDimNamesAttributeNode getDimNamesNode; @Child private GetNamesAttributeNode getNamesNode; @Child private GetNamesAttributeNode getNamesFromDimNamesNode; + @Child private BoxPrimitiveNode boxOldDimNames; + @Child private BoxPrimitiveNode boxNewDimName; @Children private final CachedExtractVectorNode[] extractNames; @Children private final CachedExtractVectorNode[] extractNamesAlternative; @@ -280,7 +283,13 @@ final class CachedExtractVectorNode extends CachedVectorNode { } else if (positionsCheckNode.isEmptyPosition(i, positions[i])) { result = RNull.instance; } else { - result = extract(i, (RAbstractStringVector) RRuntime.asAbstractVector(dataAt), positions[i], positionProfile[i]); + if (boxOldDimNames == null) { + boxOldDimNames = insert(BoxPrimitiveNode.create()); + } + if (boxNewDimName == null) { + boxNewDimName = insert(BoxPrimitiveNode.create()); + } + result = boxNewDimName.execute(extract(i, (RAbstractStringVector) boxOldDimNames.execute(dataAt), positions[i], positionProfile[i])); } newDimNames[dimIndex] = result; if (newDimNamesNames != null) { -- GitLab