From edb90f2225252f39812aa897bddc265b44313fe2 Mon Sep 17 00:00:00 2001 From: Christian Humer <christian.humer@oracle.com> Date: Thu, 16 Apr 2015 13:55:16 +0200 Subject: [PATCH] Update to the latest Graal and DSL changes. --- .../truffle/r/nodes/builtin/base/AsRaw.java | 2 +- .../r/nodes/access/WriteVariableNode.java | 12 ++--- .../access/array/read/AccessArrayNode.java | 8 +-- .../access/array/read/GetDimNamesNode.java | 8 +-- .../array/read/GetMultiDimDataNode.java | 11 ++-- .../nodes/access/array/read/GetNamesNode.java | 16 ++---- .../access/array/read/PositionsArrayNode.java | 14 ++--- .../array/write/SetMultiDimDataNode.java | 9 ++-- .../array/write/UpdateArrayHelperNode.java | 7 ++- .../r/nodes/binary/BinaryBooleanNode.java | 53 +++++++------------ .../r/nodes/unary/CastToContainerNode.java | 2 - .../oracle/truffle/r/runtime/RRuntime.java | 4 ++ .../com/oracle/truffle/r/test/TestBase.java | 4 +- mx.fastr/imports | 2 +- 14 files changed, 67 insertions(+), 85 deletions(-) diff --git a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/AsRaw.java b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/AsRaw.java index 31fc5c2a0d..4751b4a4e6 100644 --- a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/AsRaw.java +++ b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/AsRaw.java @@ -73,7 +73,7 @@ public abstract class AsRaw extends RBuiltinNode { return (RRawVector) castRawNode.executeRaw(frame, o); } - public abstract RRaw executeRaw(VirtualFrame frame, Object o); + public abstract Object executeRaw(VirtualFrame frame, Object o); @Specialization protected RRawVector asRaw(RNull vector) { diff --git a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/access/WriteVariableNode.java b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/access/WriteVariableNode.java index 61f6bcb6e0..6760bfbc25 100644 --- a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/access/WriteVariableNode.java +++ b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/access/WriteVariableNode.java @@ -419,33 +419,29 @@ public abstract class WriteVariableNode extends RNode implements VisibilityContr public abstract Mode getMode(); @Specialization(guards = "isLogicalKind(frame, frameSlot)") - protected byte doLogical(VirtualFrame frame, byte value, MaterializedFrame enclosingFrame, FrameSlot frameSlot) { + protected void doLogical(VirtualFrame frame, byte value, MaterializedFrame enclosingFrame, FrameSlot frameSlot) { controlVisibility(); FrameSlotChangeMonitor.setByteAndInvalidate(enclosingFrameProfile.profile(enclosingFrame), frameSlot, value, true, invalidateProfile); - return value; } @Specialization(guards = "isIntegerKind(frame, frameSlot)") - protected int doInteger(VirtualFrame frame, int value, MaterializedFrame enclosingFrame, FrameSlot frameSlot) { + protected void doInteger(VirtualFrame frame, int value, MaterializedFrame enclosingFrame, FrameSlot frameSlot) { controlVisibility(); FrameSlotChangeMonitor.setIntAndInvalidate(enclosingFrameProfile.profile(enclosingFrame), frameSlot, value, true, invalidateProfile); - return value; } @Specialization(guards = "isDoubleKind(frame, frameSlot)") - protected double doDouble(VirtualFrame frame, double value, MaterializedFrame enclosingFrame, FrameSlot frameSlot) { + protected void doDouble(VirtualFrame frame, double value, MaterializedFrame enclosingFrame, FrameSlot frameSlot) { controlVisibility(); FrameSlotChangeMonitor.setDoubleAndInvalidate(enclosingFrameProfile.profile(enclosingFrame), frameSlot, value, true, invalidateProfile); - return value; } @Specialization - protected Object doObject(VirtualFrame frame, Object value, MaterializedFrame enclosingFrame, FrameSlot frameSlot) { + protected void doObject(VirtualFrame frame, Object value, MaterializedFrame enclosingFrame, FrameSlot frameSlot) { controlVisibility(); MaterializedFrame profiledFrame = enclosingFrameProfile.profile(enclosingFrame); Object newValue = shareObjectValue(profiledFrame, frameSlot, storedObjectProfile.profile(value), getMode(), true); FrameSlotChangeMonitor.setObjectAndInvalidate(profiledFrame, frameSlot, newValue, true, invalidateProfile); - return value; } } diff --git a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/access/array/read/AccessArrayNode.java b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/access/array/read/AccessArrayNode.java index 8a7e10eca2..4af91ac175 100644 --- a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/access/array/read/AccessArrayNode.java +++ b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/access/array/read/AccessArrayNode.java @@ -182,7 +182,7 @@ public abstract class AccessArrayNode extends RNode { int accDstDimensions, NACheck posCheck, NACheck elementCheck) { if (getMultiDimData == null) { CompilerDirectives.transferToInterpreterAndInvalidate(); - getMultiDimData = insert(GetMultiDimDataNodeGen.create(posCheck, elementCheck, null, null, null, null, null, null, null, null)); + getMultiDimData = insert(GetMultiDimDataNodeGen.create(posCheck, elementCheck)); } return getMultiDimData.executeMultiDimDataGet(frame, data, vector, positions, currentDimLevel, srcArrayBase, dstArrayBase, accSrcDimensions, accDstDimensions); } @@ -190,15 +190,15 @@ public abstract class AccessArrayNode extends RNode { private RStringVector getNames(VirtualFrame frame, RAbstractVector vector, Object[] positions, int currentDimLevel, NACheck namesCheck) { if (getNamesNode == null) { CompilerDirectives.transferToInterpreterAndInvalidate(); - getNamesNode = insert(GetNamesNodeGen.create(namesCheck, null, null, null, null)); + getNamesNode = insert(GetNamesNodeGen.create(namesCheck)); } - return (RStringVector) getNamesNode.executeNamesGet(frame, vector, positions, currentDimLevel, RNull.instance); + return getNamesNode.executeNamesGet(frame, vector, positions, currentDimLevel, RNull.instance); } private RStringVector getDimNames(VirtualFrame frame, RList dstDimNames, RAbstractVector vector, Object[] positions, int currentSrcDimLevel, int currentDstDimLevel, NACheck namesCheck) { if (getDimNamesNode == null) { CompilerDirectives.transferToInterpreterAndInvalidate(); - getDimNamesNode = insert(GetDimNamesNodeGen.create(namesCheck, null, null, null, null, null)); + getDimNamesNode = insert(GetDimNamesNodeGen.create(namesCheck)); } return (RStringVector) getDimNamesNode.executeDimNamesGet(frame, dstDimNames, vector, positions, currentSrcDimLevel, currentDstDimLevel); } diff --git a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/access/array/read/GetDimNamesNode.java b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/access/array/read/GetDimNamesNode.java index ac452d85f6..c9ba342525 100644 --- a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/access/array/read/GetDimNamesNode.java +++ b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/access/array/read/GetDimNamesNode.java @@ -25,6 +25,7 @@ package com.oracle.truffle.r.nodes.access.array.read; import com.oracle.truffle.api.*; import com.oracle.truffle.api.dsl.*; import com.oracle.truffle.api.frame.*; +import com.oracle.truffle.api.nodes.*; import com.oracle.truffle.api.utilities.*; import com.oracle.truffle.r.nodes.*; import com.oracle.truffle.r.runtime.*; @@ -32,9 +33,8 @@ import com.oracle.truffle.r.runtime.data.*; import com.oracle.truffle.r.runtime.data.model.*; import com.oracle.truffle.r.runtime.ops.na.*; -@NodeChildren({@NodeChild(value = "dimNames", type = RNode.class), @NodeChild(value = "vec", type = RNode.class), @NodeChild(value = "pos", type = RNode.class), - @NodeChild(value = "srcDimLevel", type = RNode.class), @NodeChild(value = "dstDimLevel", type = RNode.class)}) -abstract class GetDimNamesNode extends RNode { +@TypeSystemReference(RTypes.class) +abstract class GetDimNamesNode extends Node { public abstract Object executeDimNamesGet(VirtualFrame frame, RList dstDimNames, RAbstractVector vector, Object[] positions, int currentSrcDimLevel, int currentDstDimLevel); @@ -45,7 +45,7 @@ abstract class GetDimNamesNode extends RNode { private RStringVector getDimNamesRecursive(VirtualFrame frame, RList dstDimNames, RAbstractVector vector, Object[] positions, int currentSrcDimLevel, int currentDstDimLevel, NACheck namesCheck) { if (getDimNamesNodeRecursive == null) { CompilerDirectives.transferToInterpreterAndInvalidate(); - getDimNamesNodeRecursive = insert(GetDimNamesNodeGen.create(namesCheck, null, null, null, null, null)); + getDimNamesNodeRecursive = insert(GetDimNamesNodeGen.create(namesCheck)); } return (RStringVector) getDimNamesNodeRecursive.executeDimNamesGet(frame, dstDimNames, vector, positions, currentSrcDimLevel, currentDstDimLevel); } diff --git a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/access/array/read/GetMultiDimDataNode.java b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/access/array/read/GetMultiDimDataNode.java index 7faa952522..92a43d6548 100644 --- a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/access/array/read/GetMultiDimDataNode.java +++ b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/access/array/read/GetMultiDimDataNode.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2014, 2014, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2014, 2015, 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 @@ -25,6 +25,7 @@ package com.oracle.truffle.r.nodes.access.array.read; import com.oracle.truffle.api.*; import com.oracle.truffle.api.dsl.*; import com.oracle.truffle.api.frame.*; +import com.oracle.truffle.api.nodes.*; import com.oracle.truffle.api.utilities.*; import com.oracle.truffle.r.nodes.*; import com.oracle.truffle.r.runtime.*; @@ -32,10 +33,8 @@ import com.oracle.truffle.r.runtime.data.*; import com.oracle.truffle.r.runtime.data.model.*; import com.oracle.truffle.r.runtime.ops.na.*; -@NodeChildren({@NodeChild(value = "data", type = RNode.class), @NodeChild(value = "vec", type = RNode.class), @NodeChild(value = "pos", type = RNode.class), - @NodeChild(value = "currDimLevel", type = RNode.class), @NodeChild(value = "srcArrayBase", type = RNode.class), @NodeChild(value = "dstArrayBase", type = RNode.class), - @NodeChild(value = "accSrcDimensions", type = RNode.class), @NodeChild(value = "accDstDimensions", type = RNode.class)}) -abstract class GetMultiDimDataNode extends RNode { +@TypeSystemReference(RTypes.class) +abstract class GetMultiDimDataNode extends Node { public abstract Object executeMultiDimDataGet(VirtualFrame frame, Object data, RAbstractVector vector, Object[] positions, int currentDimLevel, int srcArrayBase, int dstArrayBase, int accSrcDimensions, int accDstDimensions); @@ -53,7 +52,7 @@ abstract class GetMultiDimDataNode extends RNode { int accDstDimensions, NACheck posCheck, NACheck elementCheck) { if (getMultiDimDataRecursive == null) { CompilerDirectives.transferToInterpreterAndInvalidate(); - getMultiDimDataRecursive = insert(GetMultiDimDataNodeGen.create(posCheck, elementCheck, null, null, null, null, null, null, null, null)); + getMultiDimDataRecursive = insert(GetMultiDimDataNodeGen.create(posCheck, elementCheck)); } return getMultiDimDataRecursive.executeMultiDimDataGet(frame, data, vector, positions, currentDimLevel, srcArrayBase, dstArrayBase, accSrcDimensions, accDstDimensions); } diff --git a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/access/array/read/GetNamesNode.java b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/access/array/read/GetNamesNode.java index f1efcfe76c..d93cbb5e67 100644 --- a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/access/array/read/GetNamesNode.java +++ b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/access/array/read/GetNamesNode.java @@ -25,17 +25,15 @@ package com.oracle.truffle.r.nodes.access.array.read; import com.oracle.truffle.api.*; import com.oracle.truffle.api.dsl.*; import com.oracle.truffle.api.frame.*; +import com.oracle.truffle.api.nodes.*; import com.oracle.truffle.api.utilities.*; -import com.oracle.truffle.r.nodes.*; import com.oracle.truffle.r.runtime.data.*; import com.oracle.truffle.r.runtime.data.model.*; import com.oracle.truffle.r.runtime.ops.na.*; -@NodeChildren({@NodeChild(value = "vec", type = RNode.class), @NodeChild(value = "pos", type = RNode.class), @NodeChild(value = "currDimLevel", type = RNode.class), - @NodeChild(value = "names", type = RNode.class)}) -abstract class GetNamesNode extends RNode { +abstract class GetNamesNode extends Node { - public abstract Object executeNamesGet(VirtualFrame frame, RAbstractVector vector, Object[] positions, int currentDimLevel, Object names); + public abstract RStringVector executeNamesGet(VirtualFrame frame, RAbstractVector vector, Object[] positions, int currentDimLevel, Object names); private final NACheck namesNACheck; @@ -44,19 +42,15 @@ abstract class GetNamesNode extends RNode { private RStringVector getNamesRecursive(VirtualFrame frame, RAbstractVector vector, Object[] positions, int currentDimLevel, Object names, NACheck namesCheck) { if (getNamesNodeRecursive == null) { CompilerDirectives.transferToInterpreterAndInvalidate(); - getNamesNodeRecursive = insert(GetNamesNodeGen.create(namesCheck, null, null, null, null)); + getNamesNodeRecursive = insert(GetNamesNodeGen.create(namesCheck)); } - return (RStringVector) getNamesNodeRecursive.executeNamesGet(frame, vector, positions, currentDimLevel, names); + return getNamesNodeRecursive.executeNamesGet(frame, vector, positions, currentDimLevel, names); } protected GetNamesNode(NACheck namesNACheck) { this.namesNACheck = namesNACheck; } - protected GetNamesNode(GetNamesNode other) { - this.namesNACheck = other.namesNACheck; - } - @Specialization protected RStringVector getNames(VirtualFrame frame, RAbstractVector vector, Object[] positions, int currentDimLevel, RStringVector names) { return getNamesInternal(frame, vector, positions, currentDimLevel, names); diff --git a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/access/array/read/PositionsArrayNode.java b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/access/array/read/PositionsArrayNode.java index 21722f10d3..d477da23d0 100644 --- a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/access/array/read/PositionsArrayNode.java +++ b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/access/array/read/PositionsArrayNode.java @@ -76,9 +76,9 @@ public class PositionsArrayNode extends RNode { public Object executeEval(VirtualFrame frame, Object vector, Object exact) { if (hasVarArg) { - return executeEvalVarArg(frame, vector, exact); + return doEvalVarArg(frame, vector, exact); } else { - return executeEvalNoVarArg(frame, vector, exact); + return doEvalNoVarArg(frame, vector, exact); } } @@ -91,11 +91,11 @@ public class PositionsArrayNode extends RNode { return evaluatedElements; } - public Object executeEvalNoVarArg(VirtualFrame frame, Object vector, Object exact) { + private Object doEvalNoVarArg(VirtualFrame frame, Object vector, Object exact) { int length = conversionAdapter.getLength(); Object[] evaluatedElements = explodeLoopNoVarArg(frame, positionsAdapter, length); length = conversionAdapter.getLength(); // could have changed - executeEvalInternal(frame, vector, exact, evaluatedElements, length); + doEvalInternal(frame, vector, exact, evaluatedElements, length); return conversionAdapter.getLength() == 1 ? evaluatedElements[0] : evaluatedElements; } @@ -116,7 +116,7 @@ public class PositionsArrayNode extends RNode { return evaluatedElements; } - public Object executeEvalVarArg(VirtualFrame frame, Object vector, Object exact) { + private Object doEvalVarArg(VirtualFrame frame, Object vector, Object exact) { int length = conversionAdapter.getLength(); Object[] evaluatedElements = explodeLoopVarArg(frame, positionsAdapter, length, promiseHelper); if (evaluatedElements.length != conversionAdapter.getLength()) { @@ -124,12 +124,12 @@ public class PositionsArrayNode extends RNode { this.conversionAdapter = insert(new PositionsArrayConversionNodeMultiDimAdapter(this.conversionAdapter.isSubset(), evaluatedElements.length)); } length = conversionAdapter.getLength(); // could have changed - executeEvalInternal(frame, vector, exact, evaluatedElements, length); + doEvalInternal(frame, vector, exact, evaluatedElements, length); return conversionAdapter.getLength() == 1 ? evaluatedElements[0] : evaluatedElements; } @ExplodeLoop - public void executeEvalInternal(VirtualFrame frame, Object vector, Object exact, Object[] evaluatedElements, int length) { + private void doEvalInternal(VirtualFrame frame, Object vector, Object exact, Object[] evaluatedElements, int length) { for (int i = 0; i < length; i++) { Object convertedOperator = conversionAdapter.executeConvert(frame, vector, evaluatedElements[i], exact, i); evaluatedElements[i] = conversionAdapter.executeArg(frame, vector, convertedOperator, i); diff --git a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/access/array/write/SetMultiDimDataNode.java b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/access/array/write/SetMultiDimDataNode.java index 37c3f0cafc..896998f23b 100644 --- a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/access/array/write/SetMultiDimDataNode.java +++ b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/access/array/write/SetMultiDimDataNode.java @@ -25,6 +25,7 @@ package com.oracle.truffle.r.nodes.access.array.write; import com.oracle.truffle.api.*; import com.oracle.truffle.api.dsl.*; import com.oracle.truffle.api.frame.*; +import com.oracle.truffle.api.nodes.*; import com.oracle.truffle.api.utilities.*; import com.oracle.truffle.r.nodes.*; import com.oracle.truffle.r.runtime.*; @@ -32,10 +33,8 @@ import com.oracle.truffle.r.runtime.data.*; import com.oracle.truffle.r.runtime.data.model.*; import com.oracle.truffle.r.runtime.ops.na.*; -@NodeChildren({@NodeChild(value = "val", type = RNode.class), @NodeChild(value = "vec", type = RNode.class), @NodeChild(value = "pos", type = RNode.class), - @NodeChild(value = "currDimLevel", type = RNode.class), @NodeChild(value = "srcArrayBase", type = RNode.class), @NodeChild(value = "dstArrayBase", type = RNode.class), - @NodeChild(value = "accSrcDimensions", type = RNode.class), @NodeChild(value = "accDstDimensions", type = RNode.class)}) -abstract class SetMultiDimDataNode extends RNode { +@TypeSystemReference(RTypes.class) +abstract class SetMultiDimDataNode extends Node { public abstract Object executeMultiDimDataSet(VirtualFrame frame, RAbstractContainer value, RAbstractVector vector, Object[] positions, int currentDimLevel, int srcArrayBase, int dstArrayBase, int accSrcDimensions, int accDstDimensions); @@ -51,7 +50,7 @@ abstract class SetMultiDimDataNode extends RNode { int accSrcDimensions, int accDstDimensions, NACheck posCheck, NACheck elementCheck) { if (setMultiDimDataRecursive == null) { CompilerDirectives.transferToInterpreterAndInvalidate(); - setMultiDimDataRecursive = insert(SetMultiDimDataNodeGen.create(posCheck, elementCheck, this.isSubset, null, null, null, null, null, null, null, null)); + setMultiDimDataRecursive = insert(SetMultiDimDataNodeGen.create(posCheck, elementCheck, this.isSubset)); } return setMultiDimDataRecursive.executeMultiDimDataSet(frame, value, vector, positions, currentDimLevel, srcArrayBase, dstArrayBase, accSrcDimensions, accDstDimensions); } diff --git a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/access/array/write/UpdateArrayHelperNode.java b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/access/array/write/UpdateArrayHelperNode.java index 7bb262c5da..547900ccd4 100644 --- a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/access/array/write/UpdateArrayHelperNode.java +++ b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/access/array/write/UpdateArrayHelperNode.java @@ -234,7 +234,7 @@ public abstract class UpdateArrayHelperNode extends RNode { int accSrcDimensions, int accDstDimensions, NACheck posNACheck, NACheck elementNACheck) { if (setMultiDimData == null) { CompilerDirectives.transferToInterpreterAndInvalidate(); - setMultiDimData = insert(SetMultiDimDataNodeGen.create(posNACheck, elementNACheck, this.isSubset, null, null, null, null, null, null, null, null)); + setMultiDimData = insert(SetMultiDimDataNodeGen.create(posNACheck, elementNACheck, this.isSubset)); } return setMultiDimData.executeMultiDimDataSet(frame, value, vector, positions, currentDimLevel, srcArrayBase, dstArrayBase, accSrcDimensions, accDstDimensions); } @@ -1188,6 +1188,11 @@ public abstract class UpdateArrayHelperNode extends RNode { return updateSubset(v, castInteger(frame, value), recLevel, positions, vector); } + @Specialization(guards = {"!isObject(vector)", "isSubset", "!posNames(positions)", "multiPos(positions)"}) + protected RAbstractIntVector updateSubset(VirtualFrame frame, Object v, RAbstractDoubleVector value, int recLevel, RIntVector positions, RAbstractIntVector vector) { + return updateSubset(v, castInteger(frame, value), recLevel, positions, vector); + } + @Specialization(guards = {"!isObject(vector)", "isSubset", "!posNames(positions)", "onePosition(positions)"}) protected Object updateSubsetOne(VirtualFrame frame, Object v, RAbstractIntVector value, int recLevel, RIntVector positions, RAbstractIntVector vector) { return updateRecursive(frame, v, value, vector, positions.getDataAt(0), recLevel); diff --git a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/binary/BinaryBooleanNode.java b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/binary/BinaryBooleanNode.java index df13eb3c30..4541589319 100644 --- a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/binary/BinaryBooleanNode.java +++ b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/binary/BinaryBooleanNode.java @@ -90,33 +90,30 @@ public abstract class BinaryBooleanNode extends RBuiltinNode { } @Specialization(guards = {"isEmpty(left)", "expectLogical()"}) - protected RLogicalVector doEmptyLogical(RAbstractRawVector left, RRaw right) { - return RDataFactory.createLogicalVector(0); - } - - @Specialization(guards = {"isEmpty(right)", "expectLogical()"}) - protected RLogicalVector doEmptyLogical(RRaw left, RAbstractRawVector right) { - return RDataFactory.createLogicalVector(0); - } - - @Specialization(guards = {"isEmpty(left)", "!expectLogical()"}) - protected RAbstractRawVector doEmptyRaw(RAbstractRawVector left, RRaw right) { - return RDataFactory.createRawVector(0); - } - - @Specialization(guards = {"isEmpty(right)", "!expectLogical()"}) - protected RAbstractRawVector doEmptyRaw(RRaw left, RAbstractRawVector right) { - return RDataFactory.createRawVector(0); + protected RAbstractVector doEmptyRaw(RAbstractRawVector left, RAbstractRawVector right) { + if (expectLogical()) { + return RDataFactory.createLogicalVector(0); + } else { + return RDataFactory.createRawVector(0); + } } - @Specialization(guards = {"isEmpty(left) || isEmpty(right)", "expectLogical()"}) - protected RLogicalVector doEmptyLogical(RAbstractRawVector left, RAbstractRawVector right) { - return RDataFactory.createLogicalVector(0); + @Specialization(guards = "isEmpty(left)") + protected RAbstractVector doEmpty(RAbstractVector left, Object right) { + if (left instanceof RAbstractRawVector) { + return doEmptyRaw(null, null); + } else { + return RDataFactory.createLogicalVector(0); + } } - @Specialization(guards = {"isEmpty(left) || isEmpty(right)", "!expectLogical()"}) - protected RAbstractRawVector doEmptyRaw(RAbstractRawVector left, RAbstractRawVector right) { - return RDataFactory.createRawVector(0); + @Specialization(guards = "isEmpty(right)") + protected RAbstractVector doEmpty(Object left, RAbstractVector right) { + if (right instanceof RAbstractRawVector) { + return doEmptyRaw(null, null); + } else { + return RDataFactory.createLogicalVector(0); + } } // int @@ -347,16 +344,6 @@ public abstract class BinaryBooleanNode extends RBuiltinNode { // empty vectors - @Specialization(guards = "isEmpty(left)") - protected RLogicalVector doEmpty(RAbstractVector left, Object right) { - return RDataFactory.createLogicalVector(0); - } - - @Specialization(guards = "isEmpty(right)") - protected RLogicalVector doEmpty(Object left, RAbstractVector right) { - return RDataFactory.createLogicalVector(0); - } - // int vector and scalar @Specialization diff --git a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/unary/CastToContainerNode.java b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/unary/CastToContainerNode.java index 5315747434..9d652068a0 100644 --- a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/unary/CastToContainerNode.java +++ b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/unary/CastToContainerNode.java @@ -31,8 +31,6 @@ import com.oracle.truffle.api.frame.*; public abstract class CastToContainerNode extends CastNode { - public abstract RAbstractContainer executeRAbstractContainer(VirtualFrame frame, Object value); - public abstract Object executeObject(VirtualFrame frame, Object value); @Specialization diff --git a/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/RRuntime.java b/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/RRuntime.java index 72e89c4070..854d9a2f39 100644 --- a/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/RRuntime.java +++ b/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/RRuntime.java @@ -167,6 +167,8 @@ public class RRuntime { return RType.Character.getName(); } else if (c == RFunction.class) { return RType.Function.getName(); + } else if (c == Object.class) { + return RType.Any.getName(); } else { throw new RuntimeException("internal error, unknown class: " + c); } @@ -192,6 +194,8 @@ public class RRuntime { return "Raw"; } else if (c == RString.class) { return "Character"; + } else if (c == Object.class) { + return "Any"; } else { throw new RuntimeException("internal error, unknown class: " + c); } diff --git a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/TestBase.java b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/TestBase.java index 2996fd5746..40b44d65fa 100644 --- a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/TestBase.java +++ b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/TestBase.java @@ -281,7 +281,7 @@ public class TestBase { /** * Emptied at the start of a JUnit test, each failed micro test will be added to the list. */ - private static ArrayList<String> failedMicroTests; + private static ArrayList<String> failedMicroTests = new ArrayList<>(); private static ArrayList<String> unexpectedSuccessfulMicroTests = new ArrayList<>(); @@ -360,7 +360,7 @@ public class TestBase { */ @After public void afterTest() { - if (!failedMicroTests.isEmpty()) { + if (failedMicroTests != null && !failedMicroTests.isEmpty()) { fail(failedMicroTests.size() + " micro-test(s) failed: \n " + new TreeSet<>(failedMicroTests)); } } diff --git a/mx.fastr/imports b/mx.fastr/imports index 267e895975..de0f93d8e3 100644 --- a/mx.fastr/imports +++ b/mx.fastr/imports @@ -1 +1 @@ -graal,518ce9a36939d45be7d4460c2dae2209404818b3,http://hg.openjdk.java.net/graal/graal +graal,e6b59c7b39919b56b74dfe97e85e1a6b98b90243,http://hg.openjdk.java.net/graal/graal -- GitLab