Skip to content
Snippets Groups Projects
Commit 806422cb authored by Lukas Stadler's avatar Lukas Stadler
Browse files

[GR-3035] Use RBaseNode.error in more places.

parents d07d45c5 3853a076
No related branches found
No related tags found
No related merge requests found
Showing
with 60 additions and 71 deletions
......@@ -85,9 +85,9 @@ public abstract class AccessSlotNode extends RBaseNode {
CompilerDirectives.transferToInterpreter();
RStringVector classAttr = getClassNode.getClassAttr(object);
if (classAttr == null) {
throw RError.error(this, RError.Message.SLOT_CANNOT_GET, name, TypeofNode.getTypeof(object).getName());
throw error(RError.Message.SLOT_CANNOT_GET, name, TypeofNode.getTypeof(object).getName());
} else {
throw RError.error(this, RError.Message.SLOT_NONE, name, classAttr.getLength() == 0 ? RRuntime.STRING_NA : classAttr.getDataAt(0));
throw error(RError.Message.SLOT_NONE, name, classAttr.getLength() == 0 ? RRuntime.STRING_NA : classAttr.getDataAt(0));
}
}
if (value instanceof RSymbol) {
......@@ -101,7 +101,7 @@ public abstract class AccessSlotNode extends RBaseNode {
@Specialization
protected Object getSlotS4(@SuppressWarnings("unused") RNull object, String name) {
throw RError.error(this, RError.Message.SLOT_BASIC_CLASS, name, "NULL");
throw error(RError.Message.SLOT_BASIC_CLASS, name, "NULL");
}
@Specialization(guards = {"slotAccessAllowed(object)"})
......@@ -138,10 +138,10 @@ public abstract class AccessSlotNode extends RBaseNode {
if (classAttr == null) {
RStringVector implicitClassVec = ImplicitClassHierarchyNode.getImplicitClass(object, false);
assert implicitClassVec.getLength() > 0;
throw RError.error(this, RError.Message.SLOT_BASIC_CLASS, name, implicitClassVec.getDataAt(0));
throw error(RError.Message.SLOT_BASIC_CLASS, name, implicitClassVec.getDataAt(0));
} else {
assert classAttr.getLength() > 0;
throw RError.error(this, RError.Message.SLOT_NON_S4, name, classAttr.getDataAt(0));
throw error(RError.Message.SLOT_NON_S4, name, classAttr.getDataAt(0));
}
}
......
......@@ -330,7 +330,7 @@ final class CachedReplaceVectorNode extends CachedVectorNode {
}
}
error = () -> {
throw RError.error(this, message, valueType.getName(), vectorType.getName(), false);
throw error(message, valueType.getName(), vectorType.getName(), false);
};
}
}
......@@ -471,7 +471,7 @@ final class CachedReplaceVectorNode extends CachedVectorNode {
}
env.put(positionString, value);
} catch (PutException ex) {
throw RError.error(this, ex);
throw error(ex);
}
return env;
}
......
......@@ -52,9 +52,10 @@ import com.oracle.truffle.r.runtime.data.model.RAbstractIntVector;
import com.oracle.truffle.r.runtime.data.model.RAbstractListVector;
import com.oracle.truffle.r.runtime.data.model.RAbstractStringVector;
import com.oracle.truffle.r.runtime.data.model.RAbstractVector;
import com.oracle.truffle.r.runtime.nodes.RBaseNode;
@ImportStatic({RRuntime.class, com.oracle.truffle.api.interop.Message.class})
public abstract class ExtractVectorNode extends Node {
public abstract class ExtractVectorNode extends RBaseNode {
protected static final int CACHE_LIMIT = 5;
......@@ -114,7 +115,7 @@ public abstract class ExtractVectorNode extends Node {
@Cached("IS_BOXED.createNode()") Node isBoxedNode,
@Cached("UNBOX.createNode()") Node unboxNode) {
if (positions.length == 0) {
throw RError.error(this, RError.Message.GENERIC, "No positions for foreign access.");
throw error(RError.Message.GENERIC, "No positions for foreign access.");
}
positions = positionProfile.profile(positions);
try {
......@@ -148,7 +149,7 @@ public abstract class ExtractVectorNode extends Node {
return RRuntime.java2R(obj);
}
public static Object read(Node caller, Object position, Node foreignRead, Node keyInfoNode, TruffleObject object, FirstStringNode firstString, CastStringNode castNode)
public static Object read(RBaseNode caller, Object position, Node foreignRead, Node keyInfoNode, TruffleObject object, FirstStringNode firstString, CastStringNode castNode)
throws RError, InteropException {
if (position instanceof Integer) {
position = ((int) position) - 1;
......@@ -161,7 +162,7 @@ public abstract class ExtractVectorNode extends Node {
} else if (position instanceof RAbstractStringVector) {
position = firstString.executeString(castNode.doCast(position));
} else if (!(position instanceof String)) {
throw RError.error(caller, RError.Message.GENERIC, "invalid index during foreign access");
throw caller.error(RError.Message.GENERIC, "invalid index during foreign access");
}
int info = ForeignAccess.sendKeyInfo(keyInfoNode, object, position);
......@@ -174,7 +175,7 @@ public abstract class ExtractVectorNode extends Node {
return ForeignAccess.sendRead(foreignRead, clazz, position);
}
}
throw RError.error(caller, RError.Message.GENERIC, "invalid index/identifier during foreign access: " + position);
throw caller.error(RError.Message.GENERIC, "invalid index/identifier during foreign access: " + position);
}
@Specialization(guards = {"cached != null", "cached.isSupported(vector, positions)"})
......
......@@ -24,7 +24,6 @@ package com.oracle.truffle.r.nodes.access.vector;
import com.oracle.truffle.api.dsl.Cached;
import com.oracle.truffle.api.dsl.Specialization;
import com.oracle.truffle.api.nodes.Node;
import com.oracle.truffle.r.nodes.binary.BoxPrimitiveNode;
import com.oracle.truffle.r.nodes.unary.CastIntegerNode;
import com.oracle.truffle.r.nodes.unary.CastIntegerNodeGen;
......@@ -50,9 +49,10 @@ import com.oracle.truffle.r.runtime.data.model.RAbstractRawVector;
import com.oracle.truffle.r.runtime.data.model.RAbstractStringVector;
import com.oracle.truffle.r.runtime.data.model.RAbstractVector;
import com.oracle.truffle.r.runtime.env.REnvironment;
import com.oracle.truffle.r.runtime.nodes.RBaseNode;
import com.oracle.truffle.r.runtime.ops.na.NACheck;
abstract class PositionCastNode extends Node {
abstract class PositionCastNode extends RBaseNode {
private final ElementAccessMode mode;
private final boolean replace;
......@@ -137,7 +137,7 @@ abstract class PositionCastNode extends Node {
if (position.getName().length() == 0) {
return doMissing(RMissing.instance);
} else {
throw RError.error(this, RError.Message.INVALID_SUBSCRIPT_TYPE, "symbol");
throw error(RError.Message.INVALID_SUBSCRIPT_TYPE, "symbol");
}
}
......@@ -145,9 +145,9 @@ abstract class PositionCastNode extends Node {
protected RMissing doMissing(@SuppressWarnings("unused") RMissing position) {
if (mode.isSubscript()) {
if (replace) {
throw RError.error(this, RError.Message.MISSING_SUBSCRIPT);
throw error(RError.Message.MISSING_SUBSCRIPT);
} else {
throw RError.error(this, RError.Message.INVALID_SUBSCRIPT_TYPE, "symbol");
throw error(RError.Message.INVALID_SUBSCRIPT_TYPE, "symbol");
}
} else {
return RMissing.instance;
......@@ -167,7 +167,7 @@ abstract class PositionCastNode extends Node {
@Specialization(guards = "getInvalidType(position) != null")
protected RAbstractVector doInvalidType(Object position) {
throw RError.error(this, RError.Message.INVALID_SUBSCRIPT_TYPE, getInvalidType(position).getName());
throw error(RError.Message.INVALID_SUBSCRIPT_TYPE, getInvalidType(position).getName());
}
protected static RType getInvalidType(Object positionValue) {
......
......@@ -22,7 +22,6 @@
*/
package com.oracle.truffle.r.nodes.access.vector;
import com.oracle.truffle.api.nodes.Node;
import com.oracle.truffle.api.profiles.BranchProfile;
import com.oracle.truffle.r.nodes.attributes.SpecialAttributesFunctions.GetDimNamesAttributeNode;
import com.oracle.truffle.r.nodes.attributes.SpecialAttributesFunctions.GetNamesAttributeNode;
......@@ -35,8 +34,9 @@ import com.oracle.truffle.r.runtime.data.RStringVector;
import com.oracle.truffle.r.runtime.data.model.RAbstractContainer;
import com.oracle.truffle.r.runtime.data.model.RAbstractIntVector;
import com.oracle.truffle.r.runtime.data.model.RAbstractStringVector;
import com.oracle.truffle.r.runtime.nodes.RBaseNode;
final class PositionCharacterLookupNode extends Node {
final class PositionCharacterLookupNode extends RBaseNode {
private final ElementAccessMode mode;
private final int numDimensions;
......@@ -73,7 +73,7 @@ final class PositionCharacterLookupNode extends Node {
result = searchNode.apply(dimName, position, notFoundStartIndex, null);
} else {
emptyProfile.enter();
throw RError.error(this, Message.SUBSCRIPT_BOUNDS);
throw error(Message.SUBSCRIPT_BOUNDS);
}
} else {
emptyProfile.enter();
......@@ -85,9 +85,9 @@ final class PositionCharacterLookupNode extends Node {
private RError noDimNames() {
if (mode.isSubset()) {
throw RError.error(this, Message.NO_ARRAY_DIMNAMES);
throw error(Message.NO_ARRAY_DIMNAMES);
} else {
throw RError.error(this, Message.SUBSCRIPT_BOUNDS);
throw error(Message.SUBSCRIPT_BOUNDS);
}
}
}
......@@ -24,7 +24,6 @@ package com.oracle.truffle.r.nodes.access.vector;
import com.oracle.truffle.api.CompilerDirectives;
import com.oracle.truffle.api.dsl.Specialization;
import com.oracle.truffle.api.nodes.Node;
import com.oracle.truffle.api.profiles.BranchProfile;
import com.oracle.truffle.api.profiles.ConditionProfile;
import com.oracle.truffle.api.profiles.ValueProfile;
......@@ -45,8 +44,9 @@ import com.oracle.truffle.r.runtime.data.model.RAbstractDoubleVector;
import com.oracle.truffle.r.runtime.data.model.RAbstractIntVector;
import com.oracle.truffle.r.runtime.data.model.RAbstractStringVector;
import com.oracle.truffle.r.runtime.data.model.RAbstractVector;
import com.oracle.truffle.r.runtime.nodes.RBaseNode;
abstract class PositionCheckNode extends Node {
abstract class PositionCheckNode extends RBaseNode {
private final Class<?> positionClass;
private final int dimensionIndex;
......@@ -199,7 +199,7 @@ abstract class PositionCheckNode extends Node {
*
* A zero/NA anywhere in a row will cause a zero/NA in the same position in the result.
*/
public abstract static class Mat2indsubNode extends Node {
public abstract static class Mat2indsubNode extends RBaseNode {
public abstract RAbstractVector execute(int[] vectorDimensions, RAbstractVector pos, int[] positionDimensions);
......@@ -228,12 +228,12 @@ abstract class PositionCheckNode extends Node {
}
if (k < 0) {
error.enter();
throw RError.error(this, RError.Message.GENERIC, "negative values are not allowed in a matrix subscript");
throw error(RError.Message.GENERIC, "negative values are not allowed in a matrix subscript");
}
int dim = vectorDimensions[j];
if (k > dim) {
error.enter();
throw RError.error(this, RError.Message.SUBSCRIPT_BOUNDS);
throw error(RError.Message.SUBSCRIPT_BOUNDS);
}
iv[i] += (k - 1) * tdim;
tdim *= dim;
......@@ -263,12 +263,12 @@ abstract class PositionCheckNode extends Node {
}
if (k < 0) {
error.enter();
throw RError.error(this, RError.Message.GENERIC, "negative values are not allowed in a matrix subscript");
throw error(RError.Message.GENERIC, "negative values are not allowed in a matrix subscript");
}
int dim = vectorDimensions[j];
if (k > dim) {
error.enter();
throw RError.error(this, RError.Message.SUBSCRIPT_BOUNDS);
throw error(RError.Message.SUBSCRIPT_BOUNDS);
}
iv[i] += (k - 1) * tdim;
tdim *= dim;
......
......@@ -66,12 +66,12 @@ abstract class PositionCheckSubscriptNode extends PositionCheckNode {
if (positionLength != 1) {
error.enter();
if (positionLength >= 3) {
throw RError.error(this, RError.Message.SELECT_MORE_1);
throw error(RError.Message.SELECT_MORE_1);
} else {
if (value == RRuntime.LOGICAL_TRUE) {
throw RError.error(this, RError.Message.SELECT_MORE_1);
throw error(RError.Message.SELECT_MORE_1);
} else {
throw RError.error(this, RError.Message.SELECT_LESS_1);
throw error(RError.Message.SELECT_LESS_1);
}
}
}
......@@ -95,7 +95,7 @@ abstract class PositionCheckSubscriptNode extends PositionCheckNode {
} else {
message = RError.Message.SELECT_LESS_1;
}
throw RError.error(this, message);
throw error(message);
}
assert positionLength == 1;
positionNACheck.enable(position);
......@@ -153,9 +153,9 @@ abstract class PositionCheckSubscriptNode extends PositionCheckNode {
}
}
if (selected <= 1) {
throw RError.error(this, RError.Message.SELECT_LESS_1);
throw error(RError.Message.SELECT_LESS_1);
} else {
throw RError.error(this, RError.Message.SELECT_MORE_1);
throw error(RError.Message.SELECT_MORE_1);
}
}
}
......@@ -173,7 +173,7 @@ abstract class PositionCheckSubscriptNode extends PositionCheckNode {
message = RError.Message.SELECT_MORE_1;
}
}
throw RError.error(this, message);
throw error(message);
} else {
if (numDimensions == 1 && isListLike(containerType) && !recursive) {
// lists pass on the NA value
......@@ -188,7 +188,7 @@ abstract class PositionCheckSubscriptNode extends PositionCheckNode {
if (recursive) {
throw new RecursiveIndexNotFoundError();
} else {
throw RError.error(this, RError.Message.SUBSCRIPT_BOUNDS);
throw error(RError.Message.SUBSCRIPT_BOUNDS);
}
}
}
......@@ -108,7 +108,7 @@ abstract class PositionCheckSubsetNode extends PositionCheckNode {
outOfBoundsProfile.enter();
if (isMultiDimension()) {
error.enter();
throw RError.error(this, RError.Message.LOGICAL_SUBSCRIPT_LONG);
throw error(RError.Message.LOGICAL_SUBSCRIPT_LONG);
}
length = positionLength;
}
......@@ -265,11 +265,11 @@ abstract class PositionCheckSubsetNode extends PositionCheckNode {
if (hasSeenPositive || hasSeenNA) {
if (numDimensions > 1 && outOfBoundsCount > 0) {
error.enter();
throw RError.error(this, RError.Message.SUBSCRIPT_BOUNDS);
throw error(RError.Message.SUBSCRIPT_BOUNDS);
}
if (hasSeenNegative) {
error.enter();
throw RError.error(this, RError.Message.ONLY_0_MIXED);
throw error(RError.Message.ONLY_0_MIXED);
}
profile.maxOutOfBoundsIndex = maxOutOfBoundsIndex;
profile.selectedPositionsCount = positionLength - zeroCount;
......
......@@ -25,7 +25,6 @@ package com.oracle.truffle.r.nodes.access.vector;
import com.oracle.truffle.api.CompilerDirectives;
import com.oracle.truffle.api.CompilerDirectives.TruffleBoundary;
import com.oracle.truffle.api.nodes.ExplodeLoop;
import com.oracle.truffle.api.nodes.Node;
import com.oracle.truffle.api.profiles.BranchProfile;
import com.oracle.truffle.api.profiles.ConditionProfile;
import com.oracle.truffle.r.nodes.profile.VectorLengthProfile;
......@@ -35,13 +34,13 @@ import com.oracle.truffle.r.runtime.data.REmpty;
import com.oracle.truffle.r.runtime.data.RMissing;
import com.oracle.truffle.r.runtime.data.RSymbol;
import com.oracle.truffle.r.runtime.data.model.RAbstractContainer;
import com.oracle.truffle.r.runtime.nodes.RBaseNode;
final class PositionsCheckNode extends Node {
final class PositionsCheckNode extends RBaseNode {
@Children private final PositionCheckNode[] positionsCheck;
private final ElementAccessMode mode;
private final BranchProfile errorBranch = BranchProfile.create();
private final VectorLengthProfile selectedPositionsCountProfile = VectorLengthProfile.create();
private final VectorLengthProfile maxOutOfBoundsProfile = VectorLengthProfile.create();
private final ConditionProfile containsNAProfile = ConditionProfile.createBinaryProfile();
......@@ -113,12 +112,10 @@ final class PositionsCheckNode extends Node {
private void verifyDimensions(int[] vectorDimensions) {
if (vectorDimensions == null) {
if (isMultiDimension()) {
errorBranch.enter();
throw dimensionsError();
}
} else {
if (getDimensions() > vectorDimensions.length || getDimensions() < vectorDimensions.length) {
errorBranch.enter();
throw dimensionsError();
}
}
......@@ -129,15 +126,15 @@ final class PositionsCheckNode extends Node {
if (replace) {
if (mode.isSubset()) {
if (getDimensions() == 2) {
throw RError.error(this, RError.Message.INCORRECT_SUBSCRIPTS_MATRIX);
throw error(RError.Message.INCORRECT_SUBSCRIPTS_MATRIX);
} else {
throw RError.error(this, RError.Message.INCORRECT_SUBSCRIPTS);
throw error(RError.Message.INCORRECT_SUBSCRIPTS);
}
} else {
throw RError.error(this, RError.Message.IMPROPER_SUBSCRIPT);
throw error(RError.Message.IMPROPER_SUBSCRIPT);
}
} else {
throw RError.error(this, RError.Message.INCORRECT_DIMENSIONS);
throw error(RError.Message.INCORRECT_DIMENSIONS);
}
}
......
......@@ -59,8 +59,7 @@ abstract class RecursiveExtractSubscriptNode extends RecursiveSubscriptNode {
try {
return subscriptExtract.apply(frame, vector, positions, exact, dropDimensions);
} catch (RecursiveIndexNotFoundError e) {
errorBranch.enter();
throw RError.error(this, RError.Message.SUBSCRIPT_BOUNDS);
throw error(RError.Message.SUBSCRIPT_BOUNDS);
}
}
......@@ -74,17 +73,14 @@ abstract class RecursiveExtractSubscriptNode extends RecursiveSubscriptNode {
Object selection = getPositionExtract.apply(frame, firstPosition, new Object[]{RInteger.valueOf(i)}, RLogical.TRUE, RLogical.TRUE);
try {
if (!(currentVector instanceof RAbstractListVector)) {
errorBranch.enter();
throw indexingFailed(i);
}
currentVector = recursiveSubscriptExtract.apply(frame, currentVector, new Object[]{selection}, exact, dropDimensions);
if (currentVector == RNull.instance) {
errorBranch.enter();
throw RError.error(this, RError.Message.SUBSCRIPT_BOUNDS);
throw error(RError.Message.SUBSCRIPT_BOUNDS);
}
} catch (RecursiveIndexNotFoundError e) {
errorBranch.enter();
throw noSuchIndex(i);
}
}
......@@ -92,8 +88,7 @@ abstract class RecursiveExtractSubscriptNode extends RecursiveSubscriptNode {
try {
return subscriptExtract.apply(frame, currentVector, new Object[]{selection}, exact, dropDimensions);
} catch (RecursiveIndexNotFoundError e) {
errorBranch.enter();
throw RError.error(this, RError.Message.SUBSCRIPT_BOUNDS);
throw error(RError.Message.SUBSCRIPT_BOUNDS);
}
}
......
......@@ -22,19 +22,16 @@
*/
package com.oracle.truffle.r.nodes.access.vector;
import com.oracle.truffle.api.nodes.Node;
import com.oracle.truffle.api.profiles.BranchProfile;
import com.oracle.truffle.r.nodes.control.RLengthNode;
import com.oracle.truffle.r.runtime.RError;
import com.oracle.truffle.r.runtime.data.model.RAbstractListVector;
import com.oracle.truffle.r.runtime.nodes.RBaseNode;
abstract class RecursiveSubscriptNode extends Node {
abstract class RecursiveSubscriptNode extends RBaseNode {
protected final Class<?> vectorClass;
protected final Class<?> positionClass;
protected final BranchProfile errorBranch = BranchProfile.create();
@Child protected RLengthNode positionLengthNode = RLengthNode.create();
RecursiveSubscriptNode(RAbstractListVector vector, Object position) {
......@@ -50,12 +47,10 @@ abstract class RecursiveSubscriptNode extends Node {
}
protected final RError indexingFailed(int i) {
errorBranch.enter();
throw RError.error(this, RError.Message.RECURSIVE_INDEXING_FAILED, i);
throw error(RError.Message.RECURSIVE_INDEXING_FAILED, i);
}
protected final RError noSuchIndex(int i) {
errorBranch.enter();
throw RError.error(this, RError.Message.NO_SUCH_INDEX, i);
throw error(RError.Message.NO_SUCH_INDEX, i);
}
}
......@@ -46,12 +46,13 @@ import com.oracle.truffle.r.runtime.data.model.RAbstractDoubleVector;
import com.oracle.truffle.r.runtime.data.model.RAbstractIntVector;
import com.oracle.truffle.r.runtime.data.model.RAbstractListVector;
import com.oracle.truffle.r.runtime.data.model.RAbstractStringVector;
import com.oracle.truffle.r.runtime.nodes.RBaseNode;
/**
* Syntax node for element writes.
*/
@ImportStatic({RRuntime.class, com.oracle.truffle.api.interop.Message.class})
public abstract class ReplaceVectorNode extends Node {
public abstract class ReplaceVectorNode extends RBaseNode {
protected static final int CACHE_LIMIT = 5;
......@@ -84,7 +85,7 @@ public abstract class ReplaceVectorNode extends Node {
protected Node createForeignWrite(Object[] positions) {
if (positions.length != 1) {
throw RError.error(this, RError.Message.GENERIC, "Invalid number positions for foreign access.");
throw error(RError.Message.GENERIC, "Invalid number positions for foreign access.");
}
return Message.WRITE.createNode();
}
......@@ -132,7 +133,7 @@ public abstract class ReplaceVectorNode extends Node {
String string = firstString.executeString(castNode.doCast(position));
position = string;
} else if (!(position instanceof String)) {
throw RError.error(this, RError.Message.GENERIC, "invalid index during foreign access");
throw error(RError.Message.GENERIC, "invalid index during foreign access");
}
int info = ForeignAccess.sendKeyInfo(keyInfoNode, object, position);
......@@ -147,7 +148,7 @@ public abstract class ReplaceVectorNode extends Node {
return;
}
}
throw RError.error(this, RError.Message.GENERIC, "invalid index/identifier during foreign access: " + position);
throw error(RError.Message.GENERIC, "invalid index/identifier during foreign access: " + position);
}
@Specialization(limit = "CACHE_LIMIT", guards = {"cached != null", "cached.isSupported(vector, positions)"})
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment