diff --git a/com.oracle.truffle.r.library/src/com/oracle/truffle/r/library/methods/MethodsListDispatch.java b/com.oracle.truffle.r.library/src/com/oracle/truffle/r/library/methods/MethodsListDispatch.java index ce07d50f5bc3879e1c777194002da7b8b15f6ae0..48f6249fe47be0de70c34485090586d4674ca342 100644 --- a/com.oracle.truffle.r.library/src/com/oracle/truffle/r/library/methods/MethodsListDispatch.java +++ b/com.oracle.truffle.r.library/src/com/oracle/truffle/r/library/methods/MethodsListDispatch.java @@ -203,7 +203,12 @@ public class MethodsListDispatch { @Child private AccessSlotNode accessSlotNode; static { - Casts.noCasts(R_M_setPrimitiveMethods.class); + Casts casts = new Casts(R_M_setPrimitiveMethods.class); + casts.arg(0, "fname").asStringVector().findFirst(); + casts.arg(1, "op"); + casts.arg(2, "code").mustBe(stringValue()).asStringVector().findFirst(); + casts.arg(3, "fundef"); + casts.arg(4, "mlist"); } private AccessSlotNode initAccessSlotNode() { @@ -215,12 +220,8 @@ public class MethodsListDispatch { @Specialization @TruffleBoundary - protected Object setPrimitiveMethods(Object fname, Object op, Object codeVec, RTypedValue fundef, Object mlist) { - String fnameString = RRuntime.asString(fname); - String codeVecString = RRuntime.asString(codeVec); - if (codeVecString == null) { - throw RError.error(this, RError.Message.GENERIC, "argument 'code' must be a character string"); - } + protected Object setPrimitiveMethods(String fnameString, Object op, String codeVecString, Object fundefObj, Object mlist) { + RTypedValue fundef = (RTypedValue) fundefObj; if (op == RNull.instance) { byte value = RRuntime.asLogical(RContext.getInstance().allowPrimitiveMethods()); diff --git a/com.oracle.truffle.r.library/src/com/oracle/truffle/r/library/stats/SplineFunctions.java b/com.oracle.truffle.r.library/src/com/oracle/truffle/r/library/stats/SplineFunctions.java index d6b11cfc74a07bed8a89598ff39b90aeea27ec95..03b79a3c255bd585bc26178647cadec00635bb40 100644 --- a/com.oracle.truffle.r.library/src/com/oracle/truffle/r/library/stats/SplineFunctions.java +++ b/com.oracle.truffle.r.library/src/com/oracle/truffle/r/library/stats/SplineFunctions.java @@ -20,6 +20,8 @@ import static com.oracle.truffle.r.nodes.builtin.CastBuilder.Predef.constant; import static com.oracle.truffle.r.nodes.builtin.CastBuilder.Predef.findFirst; import static com.oracle.truffle.r.nodes.builtin.CastBuilder.Predef.integerValue; import static com.oracle.truffle.r.nodes.builtin.CastBuilder.Predef.numericValue; +import static com.oracle.truffle.r.nodes.builtin.CastBuilder.Predef.doubleValue; +import static com.oracle.truffle.r.nodes.builtin.CastBuilder.Predef.instanceOf; import com.oracle.truffle.r.nodes.builtin.RExternalBuiltinNode; import com.oracle.truffle.r.runtime.RError; import static com.oracle.truffle.r.runtime.RError.Message.NA_INTRODUCED_COERCION; @@ -79,6 +81,12 @@ public class SplineFunctions { public abstract static class SplineEval extends RExternalBuiltinNode.Arg2 { + static { + Casts casts = new Casts(SplineEval.class); + casts.arg(0, "xout").mustBe(doubleValue()).asDoubleVector(); + casts.arg(1, "z").mustBe(instanceOf(RList.class)); + } + @Specialization @TruffleBoundary protected Object splineEval(RAbstractDoubleVector xout, RList z) { diff --git a/com.oracle.truffle.r.library/src/com/oracle/truffle/r/library/utils/Rprofmem.java b/com.oracle.truffle.r.library/src/com/oracle/truffle/r/library/utils/Rprofmem.java index e96b554c9dca7fd74c1add7b9f09ccdd29569959..9500f6f83e4113de60775b842c033a22b0eecc85 100644 --- a/com.oracle.truffle.r.library/src/com/oracle/truffle/r/library/utils/Rprofmem.java +++ b/com.oracle.truffle.r.library/src/com/oracle/truffle/r/library/utils/Rprofmem.java @@ -30,6 +30,9 @@ import com.oracle.truffle.api.CompilerDirectives.TruffleBoundary; import com.oracle.truffle.api.dsl.Specialization; import com.oracle.truffle.api.frame.Frame; import com.oracle.truffle.api.nodes.Node; +import static com.oracle.truffle.r.nodes.builtin.CastBuilder.Predef.doubleValue; +import static com.oracle.truffle.r.nodes.builtin.CastBuilder.Predef.instanceOf; +import static com.oracle.truffle.r.nodes.builtin.CastBuilder.Predef.stringValue; import com.oracle.truffle.r.nodes.builtin.RExternalBuiltinNode; import com.oracle.truffle.r.runtime.RArguments; import com.oracle.truffle.r.runtime.RError; @@ -48,6 +51,13 @@ import com.oracle.truffle.r.runtime.instrument.InstrumentationState.RprofState; public abstract class Rprofmem extends RExternalBuiltinNode.Arg3 implements RDataFactory.Listener { + static { + Casts casts = new Casts(Rprofmem.class); + casts.arg(0, "filename").mustBe(stringValue()).asStringVector(); + casts.arg(1, "append").mustBe(instanceOf(byte.class)); + casts.arg(2, "threshold").mustBe(doubleValue()).asDoubleVector(); + } + @Specialization @TruffleBoundary public Object doRprofmem(RAbstractStringVector filenameVec, byte appendL, RAbstractDoubleVector thresholdVec) {