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) {