diff --git a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/unary/CastBaseNode.java b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/unary/CastBaseNode.java index 8216976903f773de772b3b7bea546ad3d34e26cd..50b122a47f86b5d25fd10b4f5e63774033cacb33 100644 --- a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/unary/CastBaseNode.java +++ b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/unary/CastBaseNode.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2013, 2017, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2013, 2018, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -32,13 +32,13 @@ import com.oracle.truffle.api.profiles.ValueProfile; import com.oracle.truffle.r.nodes.attributes.SpecialAttributesFunctions.GetDimAttributeNode; import com.oracle.truffle.r.nodes.attributes.SpecialAttributesFunctions.GetDimNamesAttributeNode; import com.oracle.truffle.r.nodes.attributes.SpecialAttributesFunctions.GetNamesAttributeNode; -import com.oracle.truffle.r.nodes.attributes.SpecialAttributesFunctions.SetDimNamesAttributeNode; import com.oracle.truffle.r.runtime.NullProfile; import com.oracle.truffle.r.runtime.RError; import com.oracle.truffle.r.runtime.RError.Message; import com.oracle.truffle.r.runtime.RInternalError; import com.oracle.truffle.r.runtime.RRuntime; import com.oracle.truffle.r.runtime.RType; +import com.oracle.truffle.r.runtime.data.RDataFactory.VectorFactory; import com.oracle.truffle.r.runtime.data.RList; import com.oracle.truffle.r.runtime.data.RNull; import com.oracle.truffle.r.runtime.data.RStringVector; @@ -50,16 +50,17 @@ import com.oracle.truffle.r.runtime.env.REnvironment; public abstract class CastBaseNode extends CastNode { private final BranchProfile listCoercionErrorBranch = BranchProfile.create(); - private final ConditionProfile hasDimNamesProfile = ConditionProfile.createBinaryProfile(); private final NullProfile hasDimensionsProfile = NullProfile.create(); private final NullProfile hasNamesProfile = NullProfile.create(); + private final NullProfile hasDimNamesProfile = NullProfile.create(); private final ValueProfile reuseClassProfile; @Child private GetNamesAttributeNode getNamesNode = GetNamesAttributeNode.create(); @Child private GetDimAttributeNode getDimNode; - @Child private SetDimNamesAttributeNode setDimNamesNode; @Child private GetDimNamesAttributeNode getDimNamesNode; + @Child private VectorFactory factory; + private final boolean preserveNames; private final boolean preserveDimensions; private final boolean preserveAttributes; @@ -87,13 +88,18 @@ public abstract class CastBaseNode extends CastNode { this.preserveDimensions = preserveDimensions; this.preserveAttributes = preserveAttributes; this.forRFFI = forRFFI; - if (preserveDimensions) { - getDimNamesNode = GetDimNamesAttributeNode.create(); - } this.useClosure = useClosure; reuseClassProfile = useClosure ? ValueProfile.createClassProfile() : null; } + protected final VectorFactory factory() { + if (factory == null) { + CompilerDirectives.transferToInterpreterAndInvalidate(); + factory = insert(VectorFactory.create()); + } + return factory; + } + public final boolean preserveNames() { return preserveNames; } @@ -135,22 +141,25 @@ public abstract class CastBaseNode extends CastNode { protected RStringVector getPreservedNames(RAbstractContainer operand) { if (preserveNames()) { + if (getNamesNode == null) { + CompilerDirectives.transferToInterpreterAndInvalidate(); + getNamesNode = insert(GetNamesAttributeNode.create()); + } return hasNamesProfile.profile(getNamesNode.getNames(operand)); } else { return null; } } - protected void preserveDimensionNames(RAbstractContainer operand, RAbstractContainer ret) { + protected RList getPreservedDimNames(RAbstractContainer operand) { if (preserveDimensions()) { - RList dimNames = getDimNamesNode.getDimNames(operand); - if (hasDimNamesProfile.profile(dimNames != null)) { - if (setDimNamesNode == null) { - CompilerDirectives.transferToInterpreterAndInvalidate(); - setDimNamesNode = insert(SetDimNamesAttributeNode.create()); - } - setDimNamesNode.setDimNames(ret, (RList) dimNames.copy()); + if (getDimNamesNode == null) { + CompilerDirectives.transferToInterpreterAndInvalidate(); + getDimNamesNode = insert(GetDimNamesAttributeNode.create()); } + return hasDimNamesProfile.profile(getDimNamesNode.getDimNames(operand)); + } else { + return null; } } diff --git a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/unary/CastComplexNode.java b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/unary/CastComplexNode.java index 2d090b4a654604710acaf7f0a34eb7880b33b061..c8e3f629d60417fd4268697956873685ad68013e 100644 --- a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/unary/CastComplexNode.java +++ b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/unary/CastComplexNode.java @@ -123,7 +123,7 @@ public abstract class CastComplexNode extends CastBaseNode { @Specialization protected RComplex doRaw(RRaw operand) { - return RDataFactory.createComplex(operand.getValue(), 0); + return factory().createComplex(operand.getValue(), 0); } @Specialization @@ -151,8 +151,7 @@ public abstract class CastComplexNode extends CastBaseNode { ddata[index + 1] = complexValue.getImaginaryPart(); seenNA = seenNA || naProfile.isNA(complexValue); } - RComplexVector ret = RDataFactory.createComplexVector(ddata, !seenNA, getPreservedDimensions(operand), getPreservedNames(operand)); - preserveDimensionNames(operand, ret); + RComplexVector ret = factory().createComplexVector(ddata, !seenNA, getPreservedDimensions(operand), getPreservedNames(operand), getPreservedDimNames(operand)); if (preserveRegAttributes()) { ret.copyRegAttributesFrom(operand); } @@ -204,8 +203,7 @@ public abstract class CastComplexNode extends CastBaseNode { if (warning) { warning(RError.Message.NA_INTRODUCED_COERCION); } - RComplexVector ret = RDataFactory.createComplexVector(ddata, !seenNA, getPreservedDimensions(operand), getPreservedNames(operand)); - preserveDimensionNames(operand, ret); + RComplexVector ret = factory().createComplexVector(ddata, !seenNA, getPreservedDimensions(operand), getPreservedNames(operand), getPreservedDimNames(operand)); if (preserveRegAttributes()) { ret.copyRegAttributesFrom(operand); } @@ -259,7 +257,7 @@ public abstract class CastComplexNode extends CastBaseNode { } } } - RComplexVector ret = RDataFactory.createComplexVector(result, !seenNA, getPreservedDimensions(list), getPreservedNames(list)); + RComplexVector ret = factory().createComplexVector(result, !seenNA, getPreservedDimensions(list), getPreservedNames(list), null); if (preserveRegAttributes()) { ret.copyRegAttributesFrom(list); } diff --git a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/unary/CastDoubleNode.java b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/unary/CastDoubleNode.java index 25f98c0075c43bd8f6cc7aaf0fdb98f410ce54c8..a1da4842acb486ec401386106602a86f032edfa8 100644 --- a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/unary/CastDoubleNode.java +++ b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/unary/CastDoubleNode.java @@ -36,7 +36,6 @@ import com.oracle.truffle.r.runtime.RError; import com.oracle.truffle.r.runtime.RRuntime; import com.oracle.truffle.r.runtime.RType; import com.oracle.truffle.r.runtime.data.RComplex; -import com.oracle.truffle.r.runtime.data.RDataFactory; import com.oracle.truffle.r.runtime.data.RDoubleVector; import com.oracle.truffle.r.runtime.data.RList; import com.oracle.truffle.r.runtime.data.RPairList; @@ -73,8 +72,7 @@ public abstract class CastDoubleNode extends CastDoubleBaseNode { } private RDoubleVector vectorCopy(RAbstractContainer operand, double[] data, boolean isComplete) { - RDoubleVector ret = RDataFactory.createDoubleVector(data, isComplete, getPreservedDimensions(operand), getPreservedNames(operand)); - preserveDimensionNames(operand, ret); + RDoubleVector ret = factory().createDoubleVector(data, isComplete, getPreservedDimensions(operand), getPreservedNames(operand), getPreservedDimNames(operand)); if (preserveRegAttributes()) { ret.copyRegAttributesFrom(operand); } @@ -152,8 +150,7 @@ public abstract class CastDoubleNode extends CastDoubleBaseNode { if (warning) { warning(RError.Message.NA_INTRODUCED_COERCION); } - RDoubleVector ret = RDataFactory.createDoubleVector(ddata, !seenNA, getPreservedDimensions(operand), getPreservedNames(operand)); - preserveDimensionNames(operand, ret); + RDoubleVector ret = factory().createDoubleVector(ddata, !seenNA, getPreservedDimensions(operand), getPreservedNames(operand), getPreservedDimNames(operand)); if (preserveRegAttributes()) { ret.copyRegAttributesFrom(operand); } @@ -216,7 +213,7 @@ public abstract class CastDoubleNode extends CastDoubleBaseNode { } } } - RDoubleVector ret = RDataFactory.createDoubleVector(result, !seenNA, getPreservedDimensions(list), getPreservedNames(list)); + RDoubleVector ret = factory().createDoubleVector(result, !seenNA, getPreservedDimensions(list), getPreservedNames(list), null); if (preserveRegAttributes()) { ret.copyRegAttributesFrom(list); } diff --git a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/unary/CastExpressionNode.java b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/unary/CastExpressionNode.java index c426860c0f999a558a6de930d99a750e1133cec7..61d97bf3b443d1fc034ee2c27117065611668014 100644 --- a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/unary/CastExpressionNode.java +++ b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/unary/CastExpressionNode.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2015, 2017, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2015, 2018, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -27,7 +27,6 @@ import com.oracle.truffle.api.dsl.Specialization; import com.oracle.truffle.r.nodes.attributes.SpecialAttributesFunctions.GetNamesAttributeNode; import com.oracle.truffle.r.runtime.RError; import com.oracle.truffle.r.runtime.RType; -import com.oracle.truffle.r.runtime.data.RDataFactory; import com.oracle.truffle.r.runtime.data.RExpression; import com.oracle.truffle.r.runtime.data.RFunction; import com.oracle.truffle.r.runtime.data.RList; @@ -98,14 +97,14 @@ public abstract class CastExpressionNode extends CastBaseNode { if (obj instanceof RList) { RList list = (RList) obj; // TODO other attributes - return RDataFactory.createExpression(data, getNamesNode.getNames(list)); + return factory().createExpression(data, getNamesNode.getNames(list)); } else { - return RDataFactory.createExpression(data); + return factory().createExpression(data); } } - private static RExpression create(Object obj) { - return RDataFactory.createExpression(new Object[]{obj}); + private RExpression create(Object obj) { + return factory().createExpression(new Object[]{obj}); } /** diff --git a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/unary/CastIntegerNode.java b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/unary/CastIntegerNode.java index a11b5b0defcf48dcb49b9849e483a80ac54c67f9..27ced1f36b98d4ddbb52bb6d7e1a81877c9f948b 100644 --- a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/unary/CastIntegerNode.java +++ b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/unary/CastIntegerNode.java @@ -34,7 +34,6 @@ import com.oracle.truffle.r.runtime.RRuntime; import com.oracle.truffle.r.runtime.RType; import com.oracle.truffle.r.runtime.data.RArgsValuesAndNames; import com.oracle.truffle.r.runtime.data.RComplex; -import com.oracle.truffle.r.runtime.data.RDataFactory; import com.oracle.truffle.r.runtime.data.RDoubleSequence; import com.oracle.truffle.r.runtime.data.RIntSequence; import com.oracle.truffle.r.runtime.data.RIntVector; @@ -82,12 +81,11 @@ public abstract class CastIntegerNode extends CastIntegerBaseNode { @Specialization protected RIntSequence doDoubleSequence(RDoubleSequence operand) { // start and stride cannot be NA so no point checking - return RDataFactory.createIntSequence(RRuntime.double2intNoCheck(operand.getStart()), RRuntime.double2intNoCheck(operand.getStride()), operand.getLength()); + return factory().createIntSequence(RRuntime.double2intNoCheck(operand.getStart()), RRuntime.double2intNoCheck(operand.getStride()), operand.getLength()); } private RIntVector vectorCopy(RAbstractVector operand, int[] idata, boolean isComplete) { - RIntVector ret = RDataFactory.createIntVector(idata, isComplete, getPreservedDimensions(operand), getPreservedNames(operand)); - preserveDimensionNames(operand, ret); + RIntVector ret = factory().createIntVector(idata, isComplete, getPreservedDimensions(operand), getPreservedNames(operand), getPreservedDimNames(operand)); if (preserveRegAttributes()) { ret.copyRegAttributesFrom(operand); } @@ -224,7 +222,7 @@ public abstract class CastIntegerNode extends CastIntegerBaseNode { } } } - RIntVector ret = RDataFactory.createIntVector(result, !seenNA, getPreservedDimensions(list), getPreservedNames(list)); + RIntVector ret = factory().createIntVector(result, !seenNA, getPreservedDimensions(list), getPreservedNames(list), null); if (preserveRegAttributes()) { ret.copyRegAttributesFrom(list); } diff --git a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/unary/CastListNode.java b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/unary/CastListNode.java index a84cc5a885946ba875aba03b60ea89df0fbeb298..ec0161f873bc94ea080ad2cdf4c1fd0d04a7b558 100644 --- a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/unary/CastListNode.java +++ b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/unary/CastListNode.java @@ -30,7 +30,6 @@ import com.oracle.truffle.api.profiles.ValueProfile; import com.oracle.truffle.r.nodes.attributes.SpecialAttributesFunctions.SetClassAttributeNode; import com.oracle.truffle.r.runtime.RRuntime; import com.oracle.truffle.r.runtime.RType; -import com.oracle.truffle.r.runtime.data.RDataFactory; import com.oracle.truffle.r.runtime.data.RFunction; import com.oracle.truffle.r.runtime.data.RInteropScalar; import com.oracle.truffle.r.runtime.data.RList; @@ -64,17 +63,17 @@ public abstract class CastListNode extends CastBaseNode { @Specialization protected RList doNull(@SuppressWarnings("unused") RNull operand) { - return RDataFactory.createList(); + return factory().createList(new Object[0]); } @Specialization protected RList doDouble(double operand) { - return RDataFactory.createList(new Object[]{operand}); + return factory().createList(new Object[]{operand}); } @Specialization protected RList doInt(int operand) { - return RDataFactory.createList(new Object[]{operand}); + return factory().createList(new Object[]{operand}); } @Specialization @@ -85,8 +84,7 @@ public abstract class CastListNode extends CastBaseNode { for (int i = 0; i < data.length; i++) { data[i] = profiledOperand.getDataAtAsObject(i); } - RList ret = RDataFactory.createList(data, getPreservedDimensions(operand), getPreservedNames(operand)); - preserveDimensionNames(operand, ret); + RList ret = factory().createList(data, getPreservedDimensions(operand), getPreservedNames(operand), getPreservedDimNames(operand)); if (preserveRegAttributes()) { ret.copyRegAttributesFrom(operand); } @@ -100,27 +98,27 @@ public abstract class CastListNode extends CastBaseNode { @Specialization protected RList doFunction(RFunction func) { - return RDataFactory.createList(new Object[]{func}); + return factory().createList(new Object[]{func}); } @Specialization protected RList doEnvironment(REnvironment env) { - return RDataFactory.createList(new Object[]{env}); + return factory().createList(new Object[]{env}); } @Specialization protected RList doS4Object(RS4Object o) { - return RDataFactory.createList(new Object[]{o}); + return factory().createList(new Object[]{o}); } @Specialization protected RList doRSymbol(RSymbol s) { - return RDataFactory.createList(new Object[]{s}); + return factory().createList(new Object[]{s}); } @Specialization protected RList doRInterop(RInteropScalar ri) { - return RDataFactory.createList(new Object[]{ri}); + return factory().createList(new Object[]{ri}); } @Specialization(guards = {"isForeignObject(obj)"}) @@ -134,7 +132,7 @@ public abstract class CastListNode extends CastBaseNode { } return (RList) execute(o); } - return RDataFactory.createList(new Object[]{obj}); + return factory().createList(new Object[]{obj}); } public static CastListNode create() { diff --git a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/unary/CastLogicalNode.java b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/unary/CastLogicalNode.java index cc36f7a8d95b76be4b519269a9d68d6ed708e08e..406dee86e3ee543691bf6df0f3724c5a868aa61c 100644 --- a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/unary/CastLogicalNode.java +++ b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/unary/CastLogicalNode.java @@ -92,8 +92,7 @@ public abstract class CastLogicalNode extends CastLogicalBaseNode { } private RLogicalVector vectorCopy(RAbstractVector operand, byte[] bdata, boolean isComplete) { - RLogicalVector ret = RDataFactory.createLogicalVector(bdata, isComplete, getPreservedDimensions(operand), getPreservedNames(operand)); - preserveDimensionNames(operand, ret); + RLogicalVector ret = factory().createLogicalVector(bdata, isComplete, getPreservedDimensions(operand), getPreservedNames(operand), getPreservedDimNames(operand)); if (preserveRegAttributes()) { ret.copyRegAttributesFrom(operand); } @@ -126,7 +125,7 @@ public abstract class CastLogicalNode extends CastLogicalBaseNode { protected RLogicalVector asLogical(RAbstractIntVector factor) { byte[] data = new byte[factor.getLength()]; Arrays.fill(data, RRuntime.LOGICAL_NA); - return RDataFactory.createLogicalVector(data, RDataFactory.INCOMPLETE_VECTOR); + return factory().createLogicalVector(data, RDataFactory.INCOMPLETE_VECTOR); } @Specialization @@ -182,7 +181,7 @@ public abstract class CastLogicalNode extends CastLogicalBaseNode { } } } - RLogicalVector ret = RDataFactory.createLogicalVector(result, !seenNA, getPreservedDimensions(list), getPreservedNames(list)); + RLogicalVector ret = factory().createLogicalVector(result, !seenNA, getPreservedDimensions(list), getPreservedNames(list), null); if (preserveRegAttributes()) { ret.copyRegAttributesFrom(list); } diff --git a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/unary/CastRawNode.java b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/unary/CastRawNode.java index fd644286c9590ee90f01756f885a1010552b3bf1..60c7bcd81d822cf4afc1df821f2bdd5ce046f5ff 100644 --- a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/unary/CastRawNode.java +++ b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/unary/CastRawNode.java @@ -31,7 +31,6 @@ import com.oracle.truffle.r.runtime.RError; import com.oracle.truffle.r.runtime.RRuntime; import com.oracle.truffle.r.runtime.RType; import com.oracle.truffle.r.runtime.data.RComplex; -import com.oracle.truffle.r.runtime.data.RDataFactory; import com.oracle.truffle.r.runtime.data.RMissing; import com.oracle.truffle.r.runtime.data.RNull; import com.oracle.truffle.r.runtime.data.RPairList; @@ -97,9 +96,9 @@ public abstract class CastRawNode extends CastBaseNode { private RRaw checkOutOfRange(int operand, int intResult) { if (intResult != operand) { warning(RError.Message.OUT_OF_RANGE); - return RDataFactory.createRaw((byte) 0); + return factory().createRaw((byte) 0); } - return RDataFactory.createRaw((byte) intResult); + return factory().createRaw((byte) intResult); } @Specialization @@ -157,8 +156,7 @@ public abstract class CastRawNode extends CastBaseNode { } private RRawVector vectorCopy(RAbstractVector operand, byte[] bdata) { - RRawVector ret = RDataFactory.createRawVector(bdata, getPreservedDimensions(operand), getPreservedNames(operand)); - preserveDimensionNames(operand, ret); + RRawVector ret = factory().createRawVector(bdata, getPreservedDimensions(operand), getPreservedNames(operand), getPreservedDimNames(operand)); if (preserveRegAttributes()) { ret.copyRegAttributesFrom(operand); } @@ -307,7 +305,7 @@ public abstract class CastRawNode extends CastBaseNode { for (int i = 0; i < length; i++) { data[i] = ((RRaw) castRawRecursive(value.getDataAt(i))).getValue(); } - RRawVector result = RDataFactory.createRawVector(data, getPreservedDimensions(value), getPreservedNames(value)); + RRawVector result = factory().createRawVector(data, getPreservedDimensions(value), getPreservedNames(value), null); if (preserveRegAttributes()) { result.copyRegAttributesFrom(value); } diff --git a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/unary/CastStringNode.java b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/unary/CastStringNode.java index 13ba94958a26aa5c85f208bcd23d9257e03d41e4..7b4a6c692057875447b2efe083a21bbb9f174d75 100644 --- a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/unary/CastStringNode.java +++ b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/unary/CastStringNode.java @@ -32,7 +32,6 @@ import com.oracle.truffle.api.profiles.ValueProfile; import com.oracle.truffle.r.runtime.RDeparse; import com.oracle.truffle.r.runtime.RError; import com.oracle.truffle.r.runtime.RRuntime; -import com.oracle.truffle.r.runtime.data.RDataFactory; import com.oracle.truffle.r.runtime.data.RIntSequence; import com.oracle.truffle.r.runtime.data.RPairList; import com.oracle.truffle.r.runtime.data.RStringSequence; @@ -64,8 +63,7 @@ public abstract class CastStringNode extends CastStringBaseNode { public abstract Object executeString(Object o); private RStringVector vectorCopy(RAbstractContainer operand, String[] data) { - RStringVector ret = RDataFactory.createStringVector(data, operand.isComplete(), getPreservedDimensions(operand), getPreservedNames(operand)); - preserveDimensionNames(operand, ret); + RStringVector ret = factory().createStringVector(data, operand.isComplete(), getPreservedDimensions(operand), getPreservedNames(operand), getPreservedDimNames(operand)); if (preserveRegAttributes()) { ret.copyRegAttributesFrom(operand); } @@ -83,7 +81,7 @@ public abstract class CastStringNode extends CastStringBaseNode { @Specialization protected RStringSequence doIntSequence(RIntSequence vector) { - return RDataFactory.createStringSequence("", "", vector.getStart(), vector.getStride(), vector.getLength()); + return factory().createStringSequence("", "", vector.getStart(), vector.getStride(), vector.getLength()); } @Specialization(guards = {"!isIntSequence(operandIn)", "!isRAbstractStringVector(operandIn)"}) diff --git a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/unary/CastSymbolNode.java b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/unary/CastSymbolNode.java index ceec657aa963ac86a58fdb05b73a8dbbf3526f28..c83d19c435312fb41f297c5cb83cbde3c5bbab71 100644 --- a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/unary/CastSymbolNode.java +++ b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/unary/CastSymbolNode.java @@ -32,7 +32,6 @@ import com.oracle.truffle.r.runtime.RError.Message; import com.oracle.truffle.r.runtime.RInternalError; import com.oracle.truffle.r.runtime.RType; import com.oracle.truffle.r.runtime.data.RComplex; -import com.oracle.truffle.r.runtime.data.RDataFactory; import com.oracle.truffle.r.runtime.data.RList; import com.oracle.truffle.r.runtime.data.RNull; import com.oracle.truffle.r.runtime.data.RRaw; @@ -151,8 +150,8 @@ public abstract class CastSymbolNode extends CastBaseNode { } @TruffleBoundary - private static RSymbol asSymbol(String s) { - return RDataFactory.createSymbolInterned(s); + private RSymbol asSymbol(String s) { + return factory().createSymbolInterned(s); } @Override diff --git a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/unary/PrecedenceNode.java b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/unary/PrecedenceNode.java index 9207a1a2eb2a01f28ab2a9b9c9595da69ed28947..9faa3dfcb97356690eb56d3be8b27d901c009257 100644 --- a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/unary/PrecedenceNode.java +++ b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/unary/PrecedenceNode.java @@ -22,6 +22,9 @@ */ package com.oracle.truffle.r.nodes.unary; +import static com.oracle.truffle.r.runtime.interop.ForeignArray2R.isForeignArray; +import static com.oracle.truffle.r.runtime.interop.ForeignArray2R.isJavaIterable; + import com.oracle.truffle.api.CompilerDirectives; import com.oracle.truffle.api.CompilerDirectives.TruffleBoundary; import com.oracle.truffle.api.dsl.Cached; @@ -61,8 +64,6 @@ import com.oracle.truffle.r.runtime.data.model.RAbstractVector; import com.oracle.truffle.r.runtime.env.REnvironment; import com.oracle.truffle.r.runtime.interop.Foreign2R; import com.oracle.truffle.r.runtime.interop.ForeignArray2R; -import static com.oracle.truffle.r.runtime.interop.ForeignArray2R.isForeignArray; -import static com.oracle.truffle.r.runtime.interop.ForeignArray2R.isJavaIterable; import com.oracle.truffle.r.runtime.nodes.RBaseNode; @ImportStatic({Message.class, RRuntime.class, ForeignArray2R.class, Foreign2R.class})