From 7c302c6d960cbf379853defa325ca64943309651 Mon Sep 17 00:00:00 2001 From: Lukas Stadler <lukas.stadler@oracle.com> Date: Wed, 15 Nov 2017 17:00:26 +0100 Subject: [PATCH] various fixes --- .../r/library/stats/RandFunctionsNodes.java | 3 +- .../r/nodes/builtin/base/CrossprodCommon.java | 4 +- .../r/nodes/builtin/base/IsTypeFunctions.java | 84 ++++++++----------- .../truffle/r/nodes/control/ForNode.java | 6 +- .../truffle/r/runtime/RErrorHandling.java | 2 +- 5 files changed, 43 insertions(+), 56 deletions(-) diff --git a/com.oracle.truffle.r.library/src/com/oracle/truffle/r/library/stats/RandFunctionsNodes.java b/com.oracle.truffle.r.library/src/com/oracle/truffle/r/library/stats/RandFunctionsNodes.java index f8b8ad866b..457b35543d 100644 --- a/com.oracle.truffle.r.library/src/com/oracle/truffle/r/library/stats/RandFunctionsNodes.java +++ b/com.oracle.truffle.r.library/src/com/oracle/truffle/r/library/stats/RandFunctionsNodes.java @@ -21,7 +21,6 @@ import static com.oracle.truffle.r.runtime.RError.SHOW_CALLER; import java.util.Arrays; -import com.oracle.truffle.api.CompilerDirectives.CompilationFinal; import com.oracle.truffle.api.dsl.Cached; import com.oracle.truffle.api.dsl.Specialization; import com.oracle.truffle.api.nodes.Node; @@ -57,7 +56,7 @@ import com.oracle.truffle.r.runtime.rng.RRNG; * {@link RandFunction3_Double}, {@link RandFunction2_Double} or {@link RandFunction1_Double}. */ public final class RandFunctionsNodes { - @CompilationFinal private static final RDouble DUMMY_VECTOR = RDouble.valueOf(1); + private static final RDouble DUMMY_VECTOR = RDouble.valueOf(1); private RandFunctionsNodes() { // static class diff --git a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/CrossprodCommon.java b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/CrossprodCommon.java index e88dada037..38067a8c51 100644 --- a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/CrossprodCommon.java +++ b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/CrossprodCommon.java @@ -80,7 +80,7 @@ public abstract class CrossprodCommon extends RBuiltinNode.Arg2 { return CrossprodCommonNodeGen.create(false); } - @Specialization(guards = {"x.isMatrix()", "y.isMatrix()"}) + @Specialization(guards = {"getXDimsNode.isMatrix(x)", "getYDimsNode.isMatrix(y)"}) protected RDoubleVector crossprod(RAbstractDoubleVector x, RAbstractDoubleVector y, @Cached("create()") GetDimAttributeNode getXDimsNode, @Cached("create()") GetDimAttributeNode getYDimsNode) { @@ -100,7 +100,7 @@ public abstract class CrossprodCommon extends RBuiltinNode.Arg2 { return copyDimNames(x, y, (RAbstractVector) matMult.executeObject(transposeX(x), transposeY(y))); } - @Specialization(guards = "x.isMatrix()") + @Specialization(guards = "getDimsNode.isMatrix(x)") protected RDoubleVector crossprodDoubleMatrix(RAbstractDoubleVector x, @SuppressWarnings("unused") RNull y, @Cached("create()") GetReadonlyData.Double getReadonlyData, @Cached("create()") GetDimAttributeNode getDimsNode, diff --git a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/IsTypeFunctions.java b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/IsTypeFunctions.java index 1c8e9a467c..dee51d150d 100644 --- a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/IsTypeFunctions.java +++ b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/IsTypeFunctions.java @@ -41,6 +41,7 @@ import com.oracle.truffle.r.nodes.attributes.GetFixedAttributeNode; import com.oracle.truffle.r.nodes.attributes.SpecialAttributesFunctions.GetClassAttributeNode; import com.oracle.truffle.r.nodes.attributes.SpecialAttributesFunctions.GetDimAttributeNode; import com.oracle.truffle.r.nodes.attributes.SpecialAttributesFunctionsFactory.GetDimAttributeNodeGen; +import com.oracle.truffle.r.nodes.builtin.NodeWithArgumentCasts.Casts; import com.oracle.truffle.r.nodes.builtin.RBuiltinNode; import com.oracle.truffle.r.nodes.helpers.InheritsCheckNode; import com.oracle.truffle.r.runtime.RError; @@ -59,6 +60,7 @@ import com.oracle.truffle.r.runtime.data.RNull; import com.oracle.truffle.r.runtime.data.RPairList; import com.oracle.truffle.r.runtime.data.RRaw; import com.oracle.truffle.r.runtime.data.RSymbol; +import com.oracle.truffle.r.runtime.data.model.RAbstractAtomicVector; import com.oracle.truffle.r.runtime.data.model.RAbstractComplexVector; import com.oracle.truffle.r.runtime.data.model.RAbstractDoubleVector; import com.oracle.truffle.r.runtime.data.model.RAbstractIntVector; @@ -72,17 +74,14 @@ import com.oracle.truffle.r.runtime.data.model.RAbstractVector; */ public class IsTypeFunctions { - protected abstract static class MissingAdapter extends RBuiltinNode.Arg1 { - - protected static Casts createCasts(Class<? extends MissingAdapter> extCls) { - Casts casts = new Casts(extCls); - casts.arg("x").mustNotBeMissing(RError.Message.ARGUMENT_MISSING, "x"); - return casts; - } + protected static Casts createCasts(Class<? extends RBuiltinNode> extCls) { + Casts casts = new Casts(extCls); + casts.arg("x").mustNotBeMissing(RError.Message.ARGUMENT_MISSING, "x"); + return casts; } @RBuiltin(name = "is.array", kind = PRIMITIVE, parameterNames = {"x"}, dispatch = INTERNAL_GENERIC, behavior = PURE) - public abstract static class IsArray extends MissingAdapter { + public abstract static class IsArray extends RBuiltinNode.Arg1 { static { createCasts(IsArray.class); @@ -106,7 +105,7 @@ public class IsTypeFunctions { @ImportStatic(RRuntime.class) @RBuiltin(name = "is.recursive", kind = PRIMITIVE, parameterNames = {"x"}, behavior = PURE) - public abstract static class IsRecursive extends MissingAdapter { + public abstract static class IsRecursive extends RBuiltinNode.Arg1 { static { createCasts(IsRecursive.class); @@ -144,9 +143,7 @@ public class IsTypeFunctions { } @RBuiltin(name = "is.atomic", kind = PRIMITIVE, parameterNames = {"x"}, behavior = PURE) - public abstract static class IsAtomic extends MissingAdapter { - - @Child private InheritsCheckNode inheritsFactorCheck = new InheritsCheckNode(RRuntime.CLASS_FACTOR); + public abstract static class IsAtomic extends RBuiltinNode.Arg1 { static { createCasts(IsAtomic.class); @@ -157,28 +154,19 @@ public class IsTypeFunctions { return RRuntime.LOGICAL_TRUE; } - @Specialization(guards = {"!isRList(arg)", "!isRExpression(arg)"}) - protected byte isAtomic(@SuppressWarnings("unused") RAbstractVector arg) { + @Specialization + protected byte isAtomic(@SuppressWarnings("unused") RAbstractAtomicVector arg) { return RRuntime.LOGICAL_TRUE; } - protected static boolean isNonListVector(Object value) { - return value instanceof Integer || value instanceof Double || value instanceof RComplex || value instanceof String || value instanceof RRaw || - (value instanceof RAbstractVector && !(value instanceof RListBase)); - } - - protected boolean isFactor(Object value) { - return inheritsFactorCheck.execute(value); - } - - @Specialization(guards = {"!isRMissing(value)", "!isRNull(value)", "!isFactor(value)", "!isNonListVector(value)"}) + @Fallback protected byte isType(@SuppressWarnings("unused") Object value) { return RRuntime.LOGICAL_FALSE; } } @RBuiltin(name = "is.call", kind = PRIMITIVE, parameterNames = {"x"}, behavior = PURE) - public abstract static class IsCall extends MissingAdapter { + public abstract static class IsCall extends RBuiltinNode.Arg1 { static { Casts.noCasts(IsCall.class); @@ -196,7 +184,7 @@ public class IsTypeFunctions { } @RBuiltin(name = "is.character", kind = PRIMITIVE, parameterNames = {"x"}, behavior = PURE) - public abstract static class IsCharacter extends MissingAdapter { + public abstract static class IsCharacter extends RBuiltinNode.Arg1 { static { createCasts(IsCharacter.class); @@ -218,7 +206,7 @@ public class IsTypeFunctions { } @RBuiltin(name = "is.complex", kind = PRIMITIVE, parameterNames = {"x"}, behavior = PURE) - public abstract static class IsComplex extends MissingAdapter { + public abstract static class IsComplex extends RBuiltinNode.Arg1 { static { createCasts(IsComplex.class); @@ -240,7 +228,7 @@ public class IsTypeFunctions { } @RBuiltin(name = "is.double", kind = PRIMITIVE, parameterNames = {"x"}, behavior = PURE) - public abstract static class IsDouble extends MissingAdapter { + public abstract static class IsDouble extends RBuiltinNode.Arg1 { static { createCasts(IsDouble.class); @@ -262,7 +250,7 @@ public class IsTypeFunctions { } @RBuiltin(name = "is.expression", kind = PRIMITIVE, parameterNames = {"x"}, behavior = PURE) - public abstract static class IsExpression extends MissingAdapter { + public abstract static class IsExpression extends RBuiltinNode.Arg1 { static { createCasts(IsExpression.class); @@ -280,7 +268,7 @@ public class IsTypeFunctions { } @RBuiltin(name = "is.function", kind = PRIMITIVE, parameterNames = {"x"}, behavior = PURE) - public abstract static class IsFunction extends MissingAdapter { + public abstract static class IsFunction extends RBuiltinNode.Arg1 { static { createCasts(IsFunction.class); @@ -298,7 +286,7 @@ public class IsTypeFunctions { } @RBuiltin(name = "is.integer", kind = PRIMITIVE, parameterNames = {"x"}, behavior = PURE) - public abstract static class IsInteger extends MissingAdapter { + public abstract static class IsInteger extends RBuiltinNode.Arg1 { static { createCasts(IsInteger.class); @@ -320,7 +308,7 @@ public class IsTypeFunctions { } @RBuiltin(name = "is.language", kind = PRIMITIVE, parameterNames = {"x"}, behavior = PURE) - public abstract static class IsLanguage extends MissingAdapter { + public abstract static class IsLanguage extends RBuiltinNode.Arg1 { static { createCasts(IsLanguage.class); @@ -348,7 +336,7 @@ public class IsTypeFunctions { } @RBuiltin(name = "is.list", kind = PRIMITIVE, parameterNames = {"x"}, behavior = PURE) - public abstract static class IsList extends MissingAdapter { + public abstract static class IsList extends RBuiltinNode.Arg1 { static { createCasts(IsList.class); @@ -373,7 +361,7 @@ public class IsTypeFunctions { } @RBuiltin(name = "is.logical", kind = PRIMITIVE, parameterNames = {"x"}, behavior = PURE) - public abstract static class IsLogical extends MissingAdapter { + public abstract static class IsLogical extends RBuiltinNode.Arg1 { static { createCasts(IsLogical.class); @@ -395,7 +383,7 @@ public class IsTypeFunctions { } @RBuiltin(name = "is.matrix", kind = PRIMITIVE, parameterNames = {"x"}, dispatch = INTERNAL_GENERIC, behavior = PURE) - public abstract static class IsMatrix extends MissingAdapter { + public abstract static class IsMatrix extends RBuiltinNode.Arg1 { private final ConditionProfile isMatrixProfile = ConditionProfile.createBinaryProfile(); @Child private GetDimAttributeNode getDim = GetDimAttributeNodeGen.create(); @@ -416,7 +404,7 @@ public class IsTypeFunctions { } @RBuiltin(name = "is.name", aliases = {"is.symbol"}, kind = PRIMITIVE, parameterNames = {"x"}, behavior = PURE) - public abstract static class IsName extends MissingAdapter { + public abstract static class IsName extends RBuiltinNode.Arg1 { static { createCasts(IsName.class); @@ -434,12 +422,18 @@ public class IsTypeFunctions { } @RBuiltin(name = "is.numeric", kind = PRIMITIVE, parameterNames = {"x"}, dispatch = INTERNAL_GENERIC, behavior = PURE) - public abstract static class IsNumeric extends MissingAdapter { + public abstract static class IsNumeric extends RBuiltinNode.Arg1 { static { createCasts(IsNumeric.class); } + @Child private InheritsCheckNode inheritsCheck = new InheritsCheckNode(RRuntime.CLASS_FACTOR); + + protected boolean isFactor(Object o) { + return inheritsCheck.execute(o); + } + @Specialization(guards = "!isFactor(value)") protected byte isType(@SuppressWarnings("unused") RAbstractIntVector value) { return RRuntime.LOGICAL_TRUE; @@ -459,20 +453,14 @@ public class IsTypeFunctions { return value instanceof Integer || value instanceof Double || value instanceof RAbstractIntVector || value instanceof RAbstractDoubleVector; } - @Specialization(guards = {"!isRMissing(value)", "!isAnyNumeric(value)"}) + @Fallback protected byte isType(@SuppressWarnings("unused") Object value) { return RRuntime.LOGICAL_FALSE; } - - @Child private InheritsCheckNode inheritsCheck = new InheritsCheckNode(RRuntime.CLASS_FACTOR); - - protected boolean isFactor(Object o) { - return inheritsCheck.execute(o); - } } @RBuiltin(name = "is.null", kind = PRIMITIVE, parameterNames = {"x"}, behavior = PURE) - public abstract static class IsNull extends MissingAdapter { + public abstract static class IsNull extends RBuiltinNode.Arg1 { static { createCasts(IsNull.class); @@ -497,7 +485,7 @@ public class IsTypeFunctions { * {@code FALSE}. */ @RBuiltin(name = "is.object", kind = PRIMITIVE, parameterNames = {"x"}, behavior = PURE) - public abstract static class IsObject extends MissingAdapter { + public abstract static class IsObject extends RBuiltinNode.Arg1 { @Child private GetClassAttributeNode getClassNode = GetClassAttributeNode.create(); @@ -519,7 +507,7 @@ public class IsTypeFunctions { } @RBuiltin(name = "is.pairlist", kind = PRIMITIVE, parameterNames = {"x"}, behavior = PURE) - public abstract static class IsPairList extends MissingAdapter { + public abstract static class IsPairList extends RBuiltinNode.Arg1 { static { createCasts(IsPairList.class); @@ -542,7 +530,7 @@ public class IsTypeFunctions { } @RBuiltin(name = "is.raw", kind = PRIMITIVE, parameterNames = {"x"}, behavior = PURE) - public abstract static class IsRaw extends MissingAdapter { + public abstract static class IsRaw extends RBuiltinNode.Arg1 { static { createCasts(IsRaw.class); diff --git a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/control/ForNode.java b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/control/ForNode.java index 8498a61289..7a3866e37c 100644 --- a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/control/ForNode.java +++ b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/control/ForNode.java @@ -200,11 +200,11 @@ public abstract class ForNode extends AbstractLoopNode implements RSyntaxNode, R return createLoopNode(new ForIndexRepeatingNode(this, var.getIdentifier(), RASTUtils.cloneNode(body), indexName, lengthName, rangeName)); } - private LoopNode createLoopNode(AbstractRepeatingNode n) { + private static LoopNode createLoopNode(AbstractRepeatingNode n) { return Truffle.getRuntime().createLoopNode(n); } - private TruffleObject getIterator(TruffleObject obj, Node readNode, Node executeNode) { + private static TruffleObject getIterator(TruffleObject obj, Node readNode, Node executeNode) { assert ForeignArray2R.isJavaIterable(obj); try { TruffleObject itFun = (TruffleObject) ForeignAccess.sendRead(readNode, obj, "iterator"); @@ -214,7 +214,7 @@ public abstract class ForNode extends AbstractLoopNode implements RSyntaxNode, R } } - private int getKeysLength(TruffleObject keys, Node sizeNode) { + private static int getKeysLength(TruffleObject keys, Node sizeNode) { try { return (int) ForeignAccess.sendGetSize(sizeNode, keys); } catch (UnsupportedMessageException ex) { diff --git a/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/RErrorHandling.java b/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/RErrorHandling.java index 2cc2e1bba7..d1962cdbda 100644 --- a/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/RErrorHandling.java +++ b/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/RErrorHandling.java @@ -789,7 +789,7 @@ public class RErrorHandling { String preamble = kind; String errorMsg = null; assert call instanceof RNull || call instanceof RLanguage; - if (call == RNull.instance || ((RLanguage) call).getRep().getSourceSection() == null) { + if (call == RNull.instance) { // generally means top-level of shell or similar preamble += ": "; errorMsg = preamble + formattedMsg; -- GitLab