Skip to content
Snippets Groups Projects
Commit c6cddfc4 authored by Zbynek Slajchrt's avatar Zbynek Slajchrt
Browse files

Conflict resolution in Arg builtin, a leftover nested class removed from IsUnsorted

parent 16c59a56
No related branches found
No related tags found
No related merge requests found
......@@ -29,21 +29,11 @@ import static com.oracle.truffle.r.runtime.builtins.RBehavior.PURE;
import static com.oracle.truffle.r.runtime.builtins.RBuiltinKind.PRIMITIVE;
import com.oracle.truffle.api.dsl.Specialization;
import com.oracle.truffle.api.profiles.ConditionProfile;
import com.oracle.truffle.r.nodes.builtin.CastBuilder;
import com.oracle.truffle.r.nodes.builtin.RBuiltinNode;
import com.oracle.truffle.r.runtime.RError;
import com.oracle.truffle.r.runtime.RRuntime;
import com.oracle.truffle.r.nodes.unary.UnaryArithmeticBuiltinNode;
import com.oracle.truffle.r.runtime.RError;
import com.oracle.truffle.r.runtime.RType;
import com.oracle.truffle.r.runtime.builtins.RBuiltin;
import com.oracle.truffle.r.runtime.data.RComplex;
import com.oracle.truffle.r.runtime.data.RDataFactory;
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;
import com.oracle.truffle.r.runtime.data.model.RAbstractLogicalVector;
import com.oracle.truffle.r.runtime.ops.na.NACheck;
@RBuiltin(name = "Arg", kind = PRIMITIVE, parameterNames = {"z"}, dispatch = COMPLEX_GROUP_GENERIC, behavior = PURE)
public abstract class Arg extends UnaryArithmeticBuiltinNode {
......@@ -91,27 +81,6 @@ public abstract class Arg extends UnaryArithmeticBuiltinNode {
return Math.atan2(im, re);
}
private final ConditionProfile signumProfile = ConditionProfile.createBinaryProfile();
private final NACheck naCheck = NACheck.create();
@Override
protected void createCasts(CastBuilder casts) {
casts.arg("z").mustBe(numericValue().or(complexValue()), RError.Message.NON_NUMERIC_ARGUMENT_FUNCTION);
}
@Specialization
protected double arg(double z) {
naCheck.enable(z);
if (naCheck.check(z)) {
return RRuntime.DOUBLE_NA;
}
if (signumProfile.profile(z >= 0)) {
return 0;
} else {
return Math.PI;
}
}
@Specialization
@Override
public Object calculateUnboxed(Object op) {
......
......@@ -57,8 +57,6 @@ public abstract class IsUnsorted extends RBuiltinNode {
private final ConditionProfile strictlyProfile = ConditionProfile.createBinaryProfile();
@Child private RComplexComparator ccmp = new RComplexComparator();
@Override
protected void createCasts(CastBuilder casts) {
casts.arg("strictly").asLogicalVector().findFirst(RRuntime.LOGICAL_NA).notNA().map(toBoolean());
......@@ -168,48 +166,4 @@ public abstract class IsUnsorted extends RBuiltinNode {
return RRuntime.LOGICAL_NA;
}
public final class RComplexComparator extends RBaseNode {
public Object execute(RComplex x, RComplex y, boolean naLast) {
// compare real parts
boolean nax = RRuntime.isNA(x.getRealPart());
boolean nay = RRuntime.isNA(y.getRealPart());
if (nax && nay) {
return 0;
}
if (nax) {
return naLast ? 1 : -1;
}
if (nay) {
return naLast ? -1 : 1;
}
if (x.getRealPart() < y.getRealPart()) {
return -1;
}
if (x.getRealPart() > y.getRealPart()) {
return 1;
}
// compare real parts
nax = RRuntime.isNA(x.getImaginaryPart());
nay = RRuntime.isNA(y.getImaginaryPart());
if (nax && nay) {
return 0;
}
if (nax) {
return naLast ? 1 : -1;
}
if (nay) {
return naLast ? -1 : 1;
}
if (x.getImaginaryPart() < y.getImaginaryPart()) {
return -1;
}
if (x.getImaginaryPart() > y.getImaginaryPart()) {
return 1;
}
return 0; // equal
}
}
}
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