Skip to content
Snippets Groups Projects
Commit 10343026 authored by Michael Haupt's avatar Michael Haupt
Browse files

fixes in cummax/cummin builtins

parent b6a678a8
Branches
No related tags found
No related merge requests found
......@@ -14,6 +14,7 @@ import static com.oracle.truffle.r.runtime.RBuiltinKind.*;
import java.util.*;
import com.oracle.truffle.api.*;
import com.oracle.truffle.api.dsl.*;
import com.oracle.truffle.api.frame.*;
import com.oracle.truffle.r.nodes.builtin.*;
......@@ -27,6 +28,8 @@ public abstract class CumMax extends RBuiltinNode {
private final NACheck na = NACheck.create();
@Child private CastDoubleNode castDouble;
@Specialization
protected double cummax(double arg) {
controlVisibility();
......@@ -40,9 +43,9 @@ public abstract class CumMax extends RBuiltinNode {
}
@Specialization
protected Object cummax(VirtualFrame frame, String arg) {
protected Object cummax(String arg) {
controlVisibility();
return CastDoubleNodeFactory.create(null, false, false, false).executeDouble(frame, arg);
return na.convertStringToDouble(arg);
}
@Specialization
......@@ -145,7 +148,11 @@ public abstract class CumMax extends RBuiltinNode {
@Specialization
protected RDoubleVector cummax(VirtualFrame frame, RStringVector v) {
controlVisibility();
return cummax((RDoubleVector) CastDoubleNodeFactory.create(null, false, false, false).executeDouble(frame, v));
if (castDouble == null) {
CompilerDirectives.transferToInterpreterAndInvalidate();
castDouble = insert(CastDoubleNodeFactory.create(null, false, false, false));
}
return cummax((RDoubleVector) castDouble.executeDouble(frame, v));
}
@Specialization
......
......@@ -14,6 +14,7 @@ import static com.oracle.truffle.r.runtime.RBuiltinKind.*;
import java.util.*;
import com.oracle.truffle.api.*;
import com.oracle.truffle.api.dsl.*;
import com.oracle.truffle.api.frame.*;
import com.oracle.truffle.r.nodes.builtin.*;
......@@ -27,6 +28,8 @@ public abstract class CumMin extends RBuiltinNode {
private final NACheck na = NACheck.create();
@Child private CastDoubleNode castDouble;
@Specialization
protected double cummin(double arg) {
controlVisibility();
......@@ -50,13 +53,13 @@ public abstract class CumMin extends RBuiltinNode {
}
@Specialization
protected double cummax(String arg) {
protected double cummin(String arg) {
controlVisibility();
return CastDoubleNodeFactory.create(null, false, false, false).doString(arg);
return na.convertStringToDouble(arg);
}
@Specialization
protected RIntVector cumMin(RIntSequence v) {
protected RIntVector cummin(RIntSequence v) {
controlVisibility();
int[] cminV = new int[v.getLength()];
......@@ -145,7 +148,11 @@ public abstract class CumMin extends RBuiltinNode {
@Specialization
protected RDoubleVector cummin(VirtualFrame frame, RStringVector v) {
controlVisibility();
return cummin((RDoubleVector) CastDoubleNodeFactory.create(null, false, false, false).executeDouble(frame, v));
if (castDouble == null) {
CompilerDirectives.transferToInterpreterAndInvalidate();
castDouble = insert(CastDoubleNodeFactory.create(null, false, false, false));
}
return cummin((RDoubleVector) castDouble.executeDouble(frame, v));
}
@Specialization
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment