diff --git a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/AsRaw.java b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/AsRaw.java
index d71d282770bc1a4adeefdd769f6388b04b65fb7f..ba0d5efa556a6ae879b8f0b60229ac8d758ce20f 100644
--- a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/AsRaw.java
+++ b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/AsRaw.java
@@ -43,7 +43,7 @@ public abstract class AsRaw extends RBuiltinNode.Arg1 {
 
     static {
         Casts casts = new Casts(AsRaw.class);
-        casts.arg("x").mustBe(missingValue().not(), RError.Message.ARGUMENTS_PASSED, 0, "'as.raw'", 1).asRawVector();
+        casts.arg("x").defaultWarningContext(RError.NO_CALLER).mustBe(missingValue().not(), RError.Message.ARGUMENTS_PASSED, 0, "'as.raw'", 1).asRawVector();
     }
 
     @Specialization
diff --git a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/builtin/casts/PipelineToCastNode.java b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/builtin/casts/PipelineToCastNode.java
index 95bd066c8945c5bca7b2db28e07fc67773d3e24d..c3ea76508b9b697ce7d3ea766b39239068689a7c 100644
--- a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/builtin/casts/PipelineToCastNode.java
+++ b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/builtin/casts/PipelineToCastNode.java
@@ -240,15 +240,15 @@ public final class PipelineToCastNode {
                     return step.vectorCoercion ? CastDoubleNodeGen.create(step.preserveNames, step.preserveDimensions, step.preserveAttributes, false, step.useClosure, warningContext)
                                     : CastDoubleBaseNodeGen.create(step.preserveNames, step.preserveDimensions, step.preserveAttributes, false, step.useClosure, warningContext);
                 case Character:
-                    return step.vectorCoercion ? CastStringNodeGen.create(step.preserveNames, step.preserveDimensions, step.preserveAttributes, false, false, warningContext)
-                                    : CastStringBaseNodeGen.create(step.preserveNames, step.preserveDimensions, step.preserveAttributes, false, false, warningContext);
+                    return step.vectorCoercion ? CastStringNodeGen.create(step.preserveNames, step.preserveDimensions, step.preserveAttributes, false, step.useClosure, warningContext)
+                                    : CastStringBaseNodeGen.create(step.preserveNames, step.preserveDimensions, step.preserveAttributes, false, step.useClosure, warningContext);
                 case Logical:
                     return step.vectorCoercion ? CastLogicalNodeGen.create(step.preserveNames, step.preserveDimensions, step.preserveAttributes)
                                     : CastLogicalBaseNodeGen.create(step.preserveNames, step.preserveDimensions, step.preserveAttributes);
                 case Complex:
-                    return CastComplexNodeGen.create(step.preserveNames, step.preserveDimensions, step.preserveAttributes, false, warningContext);
+                    return CastComplexNodeGen.create(step.preserveNames, step.preserveDimensions, step.preserveAttributes, step.useClosure, warningContext);
                 case Raw:
-                    return CastRawNodeGen.create(step.preserveNames, step.preserveDimensions, step.preserveAttributes);
+                    return CastRawNodeGen.create(step.preserveNames, step.preserveDimensions, step.preserveAttributes, step.useClosure, step.useClosure, warningContext);
                 case Any:
                     return CastToVectorNodeGen.create(step.preserveNonVector);
                 default:
diff --git a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/unary/CastIntegerNode.java b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/unary/CastIntegerNode.java
index 486d8071a80c14efe50fcc4602b443bf1772670c..ff751fb600ae71324c743746d006d8df14f9df59 100644
--- a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/unary/CastIntegerNode.java
+++ b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/unary/CastIntegerNode.java
@@ -241,10 +241,10 @@ public abstract class CastIntegerNode extends CastIntegerBaseNode {
     }
 
     protected boolean useClosure(RAbstractAtomicVector x) {
-        return !isForeignWrapper(x) && useClosure() && !(x instanceof RAbstractStringVector || x instanceof RAbstractComplexVector);
+        return useClosure() && !isForeignWrapper(x) && !(x instanceof RAbstractIntVector) && !(x instanceof RAbstractStringVector || x instanceof RAbstractComplexVector);
     }
 
     protected boolean noClosure(RAbstractAtomicVector x) {
-        return !isForeignWrapper(x) && (!useClosure() || x instanceof RAbstractStringVector || x instanceof RAbstractComplexVector);
+        return !isForeignWrapper(x) && !(x instanceof RAbstractIntVector) && (!useClosure() || x instanceof RAbstractStringVector || x instanceof RAbstractComplexVector);
     }
 }
diff --git a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/unary/CastRawNode.java b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/unary/CastRawNode.java
index 2b8fca447aece3df6390f9748e4c7980091f4b19..33e255794271a51a6d6a033563952a4b8a9ee321 100644
--- a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/unary/CastRawNode.java
+++ b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/unary/CastRawNode.java
@@ -24,34 +24,32 @@ package com.oracle.truffle.r.nodes.unary;
 
 import com.oracle.truffle.api.CompilerDirectives;
 import com.oracle.truffle.api.dsl.Cached;
+import com.oracle.truffle.api.dsl.ImportStatic;
 import com.oracle.truffle.api.dsl.Specialization;
-import com.oracle.truffle.api.profiles.BranchProfile;
 import com.oracle.truffle.api.profiles.ConditionProfile;
+import com.oracle.truffle.r.runtime.DSLConfig;
 import com.oracle.truffle.r.runtime.RError;
+import com.oracle.truffle.r.runtime.RError.ErrorContext;
 import com.oracle.truffle.r.runtime.RRuntime;
 import com.oracle.truffle.r.runtime.RType;
 import com.oracle.truffle.r.runtime.data.RComplex;
+import com.oracle.truffle.r.runtime.data.RList;
 import com.oracle.truffle.r.runtime.data.RMissing;
 import com.oracle.truffle.r.runtime.data.RNull;
 import com.oracle.truffle.r.runtime.data.RPairList;
 import com.oracle.truffle.r.runtime.data.RRaw;
 import com.oracle.truffle.r.runtime.data.RRawVector;
-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.RAbstractAtomicVector;
 import com.oracle.truffle.r.runtime.data.model.RAbstractListVector;
-import com.oracle.truffle.r.runtime.data.model.RAbstractLogicalVector;
 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.ops.na.NACheck;
+import com.oracle.truffle.r.runtime.data.nodes.VectorAccess;
+import com.oracle.truffle.r.runtime.data.nodes.VectorAccess.SequentialIterator;
 import com.oracle.truffle.r.runtime.ops.na.NAProfile;
 
+@ImportStatic({DSLConfig.class})
 public abstract class CastRawNode extends CastBaseNode {
 
-    private final NACheck naCheck = NACheck.create();
-    private final BranchProfile warningBranch = BranchProfile.create();
-
     protected CastRawNode(boolean preserveNames, boolean preserveDimensions, boolean preserveAttributes) {
         this(preserveNames, preserveDimensions, preserveAttributes, false);
     }
@@ -60,6 +58,10 @@ public abstract class CastRawNode extends CastBaseNode {
         super(preserveNames, preserveDimensions, preserveAttributes, forRFFI);
     }
 
+    protected CastRawNode(boolean preserveNames, boolean preserveDimensions, boolean preserveAttributes, boolean forRFFI, boolean useClosures, ErrorContext warningContext) {
+        super(preserveNames, preserveDimensions, preserveAttributes, forRFFI, useClosures, warningContext);
+    }
+
     @Child private CastRawNode recursiveCastRaw;
 
     @Override
@@ -95,7 +97,7 @@ public abstract class CastRawNode extends CastBaseNode {
 
     private RRaw checkOutOfRange(int operand, int intResult) {
         if (intResult != operand) {
-            warning(RError.Message.OUT_OF_RANGE);
+            warning(warningContext(), RError.Message.OUT_OF_RANGE);
             return factory().createRaw((byte) 0);
         }
         return factory().createRaw((byte) intResult);
@@ -108,16 +110,41 @@ public abstract class CastRawNode extends CastBaseNode {
     }
 
     @Specialization
-    protected RRaw doDouble(double operand) {
-        int intResult = RRuntime.double2rawIntValue(operand);
+    protected RRaw doDouble(double operand,
+                    @Cached("create()") NAProfile naProfile) {
+        int intResult;
+        if (naProfile.isNA(operand)) {
+            warning(warningContext(), RError.Message.OUT_OF_RANGE);
+            intResult = 0;
+        } else {
+            if (operand > Integer.MAX_VALUE || operand <= Integer.MIN_VALUE) {
+                intResult = 0;
+                warning(warningContext(), RError.Message.NA_INTRODUCED_COERCION_INT);
+            } else {
+                intResult = RRuntime.double2rawIntValue(operand);
+            }
+        }
         return checkOutOfRange((int) operand, intResult);
     }
 
     @Specialization
-    protected RRaw doComplex(RComplex operand) {
-        int intResult = RRuntime.complex2rawIntValue(operand);
-        if (operand.getImaginaryPart() != 0) {
-            warning(RError.Message.IMAGINARY_PARTS_DISCARDED_IN_COERCION);
+    protected RRaw doComplex(RComplex operand,
+                    @Cached("create()") NAProfile naProfile) {
+        int intResult;
+        if (naProfile.isNA(operand)) {
+            warning(warningContext(), RError.Message.OUT_OF_RANGE);
+            intResult = 0;
+        } else {
+            double realPart = operand.getRealPart();
+            if (realPart > Integer.MAX_VALUE || realPart <= Integer.MIN_VALUE) {
+                intResult = 0;
+                warning(warningContext(), RError.Message.NA_INTRODUCED_COERCION_INT);
+            } else {
+                intResult = RRuntime.complex2rawIntValue(operand);
+                if (operand.getImaginaryPart() != 0) {
+                    warning(warningContext(), RError.Message.IMAGINARY_PARTS_DISCARDED_IN_COERCION);
+                }
+            }
         }
         return checkOutOfRange((int) operand.getRealPart(), intResult);
     }
@@ -144,12 +171,17 @@ public abstract class CastRawNode extends CastBaseNode {
         } else {
             intValue = RRuntime.string2intNoCheck(operand);
             if (RRuntime.isNA(intValue)) {
-                warning(RError.Message.NA_INTRODUCED_COERCION);
+                try {
+                    Double.parseDouble(operand);
+                    warning(warningContext(), RError.Message.NA_INTRODUCED_COERCION_INT);
+                } catch (NumberFormatException e) {
+                    warning(warningContext(), RError.Message.NA_INTRODUCED_COERCION);
+                }
             }
         }
         int intRawValue = RRuntime.int2rawIntValue(intValue);
         if (intRawValue != intValue) {
-            warning(RError.Message.OUT_OF_RANGE);
+            warning(warningContext(), RError.Message.OUT_OF_RANGE);
             return RRaw.valueOf((byte) 0);
         }
         return RRaw.valueOf((byte) intRawValue);
@@ -163,134 +195,25 @@ public abstract class CastRawNode extends CastBaseNode {
         return ret;
     }
 
-    @Specialization
-    protected RRawVector doIntVector(RAbstractIntVector operand) {
-        int length = operand.getLength();
-        byte[] bdata = new byte[length];
-        boolean warning = false;
-        for (int i = 0; i < length; i++) {
-            int intValue = operand.getDataAt(i);
-            int intRawValue = RRuntime.int2rawIntValue(intValue);
-            if (intRawValue != intValue) {
-                warningBranch.enter();
-                warning = true;
-                intRawValue = 0;
-            }
-            bdata[i] = (byte) intRawValue;
-        }
-        if (warning) {
-            warning(RError.Message.OUT_OF_RANGE);
-        }
-        return vectorCopy(operand, bdata);
-    }
-
-    @Specialization
-    protected RRawVector doLogicalVector(RAbstractLogicalVector operand) {
-        byte[] bdata = new byte[operand.getLength()];
-        boolean warning = false;
-        for (int i = 0; i < operand.getLength(); i++) {
-            int intVal = RRuntime.logical2int(operand.getDataAt(i));
-            int intRawValue = RRuntime.int2rawIntValue(intVal);
-            if (intVal != intRawValue) {
-                warningBranch.enter();
-                warning = true;
-                intRawValue = 0;
-            }
-            bdata[i] = (byte) intRawValue;
-        }
-        if (warning) {
-            warning(RError.Message.OUT_OF_RANGE);
-        }
-        return vectorCopy(operand, bdata);
-    }
-
-    @Specialization
-    protected RRawVector doStringVector(RAbstractStringVector operand,
-                    @Cached("createBinaryProfile()") ConditionProfile emptyStringProfile,
-                    @Cached("create()") NAProfile naProfile) {
-        naCheck.enable(operand);
+    private RRawVector createResultVector(RAbstractVector operand, VectorAccess uAccess) {
         byte[] bdata = new byte[operand.getLength()];
-
-        boolean naCoercionWarning = false;
-        boolean outOfRangeWarning = false;
-        for (int i = 0; i < operand.getLength(); i++) {
-            String value = operand.getDataAt(i);
-            int intValue;
-            if (naCheck.check(value) || emptyStringProfile.profile(value.isEmpty())) {
-                intValue = RRuntime.INT_NA;
-            } else {
-                intValue = RRuntime.string2intNoCheck(value);
-                if (naProfile.isNA(intValue)) {
-                    if (!value.isEmpty()) {
-                        warningBranch.enter();
-                        naCoercionWarning = true;
-                    }
-                }
-                int intRawValue = RRuntime.int2rawIntValue(intValue);
-                if (intValue != intRawValue) {
-                    warningBranch.enter();
-                    outOfRangeWarning = true;
-                    intValue = 0;
-                }
+        try (SequentialIterator sIter = uAccess.access(operand, warningContext())) {
+            while (uAccess.next(sIter)) {
+                bdata[sIter.getIndex()] = uAccess.getRaw(sIter);
             }
-            bdata[i] = (byte) intValue;
-        }
-        if (naCoercionWarning) {
-            warning(RError.Message.NA_INTRODUCED_COERCION);
-        }
-        if (outOfRangeWarning) {
-            warning(RError.Message.OUT_OF_RANGE);
         }
         return vectorCopy(operand, bdata);
     }
 
-    @Specialization
-    protected RRawVector doComplexVector(RAbstractComplexVector operand) {
-        byte[] bdata = new byte[operand.getLength()];
-        boolean imaginaryDiscardedWarning = false;
-        boolean outOfRangeWarning = false;
-        for (int i = 0; i < operand.getLength(); i++) {
-            RComplex complexVal = operand.getDataAt(i);
-            int intRawValue = RRuntime.complex2rawIntValue(complexVal);
-            if (complexVal.getImaginaryPart() != 0.0) {
-                warningBranch.enter();
-                imaginaryDiscardedWarning = true;
-            }
-            if ((int) complexVal.getRealPart() != intRawValue) {
-                warningBranch.enter();
-                outOfRangeWarning = true;
-                intRawValue = 0;
-            }
-            bdata[i] = (byte) intRawValue;
-        }
-        if (imaginaryDiscardedWarning) {
-            warning(RError.Message.IMAGINARY_PARTS_DISCARDED_IN_COERCION);
-        }
-        if (outOfRangeWarning) {
-            warning(RError.Message.OUT_OF_RANGE);
-        }
-        return vectorCopy(operand, bdata);
+    @Specialization(guards = {"uAccess.supports(operand)", "!isRawVector(operand)"}, limit = "getGenericVectorAccessCacheSize()")
+    protected RRawVector doAbstractVector(RAbstractAtomicVector operand,
+                    @Cached("operand.access()") VectorAccess uAccess) {
+        return createResultVector(operand, uAccess);
     }
 
-    @Specialization
-    protected RRawVector doDoubleVector(RAbstractDoubleVector operand) {
-        int length = operand.getLength();
-        byte[] bdata = new byte[length];
-        boolean warning = false;
-        for (int i = 0; i < length; i++) {
-            double doubleValue = operand.getDataAt(i);
-            int intRawValue = RRuntime.double2rawIntValue(doubleValue);
-            if (intRawValue != (int) doubleValue) {
-                warningBranch.enter();
-                warning = true;
-                intRawValue = 0;
-            }
-            bdata[i] = (byte) intRawValue;
-        }
-        if (warning) {
-            warning(RError.Message.OUT_OF_RANGE);
-        }
-        return vectorCopy(operand, bdata);
+    @Specialization(replaces = "doAbstractVector", guards = {"!isRawVector(operand)"})
+    protected RRawVector doAbstractVectorGeneric(RAbstractAtomicVector operand) {
+        return createResultVector(operand, operand.slowPathAccess());
     }
 
     @Specialization
@@ -298,23 +221,50 @@ public abstract class CastRawNode extends CastBaseNode {
         return operand;
     }
 
-    @Specialization
-    protected RRawVector doList(RAbstractListVector value) {
-        int length = value.getLength();
-        byte[] data = new byte[length];
-        for (int i = 0; i < length; i++) {
-            data[i] = ((RRaw) castRawRecursive(value.getDataAt(i))).getValue();
+    @Specialization(guards = {"uAccess.supports(value)"}, limit = "getVectorAccessCacheSize()")
+    protected RRawVector doList(RAbstractListVector value,
+                    @Cached("value.access()") VectorAccess uAccess) {
+        byte[] bdata = new byte[value.getLength()];
+        try (SequentialIterator sIter = uAccess.access(value, warningContext())) {
+            while (uAccess.next(sIter)) {
+                int i = sIter.getIndex();
+                Object entry = uAccess.getListElement(sIter);
+                if (entry instanceof RList) {
+                    bdata[i] = 0;
+                } else {
+                    Object castEntry = castRawRecursive(entry);
+                    if (castEntry instanceof RRaw) {
+                        bdata[i] = ((RRaw) castRawRecursive(castEntry)).getValue();
+                    } else if (castEntry instanceof RAbstractRawVector) {
+                        RAbstractRawVector rawVector = (RAbstractRawVector) castEntry;
+                        if (rawVector.getLength() == 1) {
+                            bdata[i] = rawVector.getRawDataAt(0);
+                        } else if (rawVector.getLength() == 0) {
+                            bdata[i] = 0;
+                        } else {
+                            throw throwCannotCoerceListError("object");
+                        }
+                    } else {
+                        throw throwCannotCoerceListError("object");
+                    }
+                }
+            }
         }
-        RRawVector result = factory().createRawVector(data, getPreservedDimensions(value), getPreservedNames(value), null);
+        RRawVector result = factory().createRawVector(bdata, getPreservedDimensions(value), getPreservedNames(value), null);
         if (preserveRegAttributes()) {
             result.copyRegAttributesFrom(value);
         }
         return result;
     }
 
+    @Specialization(replaces = "doList")
+    protected RRawVector doListGenric(RAbstractListVector value) {
+        return doList(value, value.slowPathAccess());
+    }
+
     @Specialization(guards = "!pairList.isLanguage()")
     protected RRawVector doPairList(RPairList pairList) {
-        return doList(pairList.toRList());
+        return (RRawVector) castRawRecursive(pairList.toRList());
     }
 
     public static CastRawNode createForRFFI(boolean preserveNames, boolean preserveDimensions, boolean preserveAttributes) {
@@ -324,4 +274,9 @@ public abstract class CastRawNode extends CastBaseNode {
     public static CastRawNode createNonPreserving() {
         return CastRawNodeGen.create(false, false, false);
     }
+
+    protected boolean isRawVector(RAbstractAtomicVector x) {
+        return x instanceof RAbstractRawVector;
+    }
+
 }
diff --git a/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/data/nodes/FastPathVectorAccess.java b/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/data/nodes/FastPathVectorAccess.java
index a9784b83a8b3b59327f77d64310f8c26b9911cd4..f7d15ce1285143d4a3fca5d2d696811ec2c63274 100644
--- a/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/data/nodes/FastPathVectorAccess.java
+++ b/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/data/nodes/FastPathVectorAccess.java
@@ -35,6 +35,7 @@ import com.oracle.truffle.r.runtime.data.RNull;
 import com.oracle.truffle.r.runtime.data.RRaw;
 import com.oracle.truffle.r.runtime.data.RVector;
 import com.oracle.truffle.r.runtime.data.model.RAbstractContainer;
+import com.oracle.truffle.r.runtime.ops.na.NAProfile;
 
 /**
  * Base classes for {@link VectorAccess} implementations that are used on the fast path. For
@@ -444,17 +445,28 @@ public abstract class FastPathVectorAccess extends VectorAccess {
 
         @Override
         protected final byte getRawImpl(AccessIterator accessIter, int index) {
-            double value = getComplexRImpl(accessIter, index);
-            if (Double.isNaN(value) || value < 0 || value >= 256) {
+            RComplex value = getComplexImpl(accessIter, index);
+
+            double realPart = value.getRealPart();
+            double realResult = realPart;
+
+            if (realPart > Integer.MAX_VALUE || realPart <= Integer.MIN_VALUE) {
                 warningReportedProfile.enter();
-                accessIter.warning(Message.OUT_OF_RANGE);
-                return 0;
+                accessIter.warning(RError.Message.NA_INTRODUCED_COERCION_INT);
+                realResult = 0;
             }
+
             if (getComplexIImpl(accessIter, index) != 0) {
                 warningReportedProfile.enter();
                 accessIter.warning(Message.IMAGINARY_PARTS_DISCARDED_IN_COERCION);
             }
-            return (byte) value;
+
+            if (Double.isNaN(realPart) || realPart < 0 || realPart >= 256) {
+                warningReportedProfile.enter();
+                accessIter.warning(Message.OUT_OF_RANGE);
+                realResult = 0;
+            }
+            return (byte) RRuntime.double2rawIntValue(realResult);
         }
 
         @Override
@@ -498,6 +510,7 @@ public abstract class FastPathVectorAccess extends VectorAccess {
     public abstract static class FastPathFromStringAccess extends FastPathVectorAccess {
 
         ConditionProfile emptyStringProfile = ConditionProfile.createBinaryProfile();
+        private NAProfile naProfile = NAProfile.create();
 
         public FastPathFromStringAccess(Object value) {
             super(value);
@@ -544,8 +557,31 @@ public abstract class FastPathVectorAccess extends VectorAccess {
 
         @Override
         protected final byte getRawImpl(AccessIterator accessIter, int index) {
-            int value = na.convertStringToInt(getStringImpl(accessIter, index));
-            return value >= 0 && value <= 255 ? (byte) value : 0;
+            String value = getStringImpl(accessIter, index);
+            int intValue;
+            if (na.check(value) || emptyStringProfile.profile(value.isEmpty())) {
+                intValue = RRuntime.INT_NA;
+            } else {
+                intValue = RRuntime.string2intNoCheck(value);
+                if (naProfile.isNA(intValue)) {
+                    if (!value.isEmpty()) {
+                        warningReportedProfile.enter();
+                        try {
+                            Double.parseDouble(value);
+                            accessIter.warning(RError.Message.NA_INTRODUCED_COERCION_INT);
+                        } catch (NumberFormatException e) {
+                            accessIter.warning(RError.Message.NA_INTRODUCED_COERCION);
+                        }
+                    }
+                }
+                int intRawValue = RRuntime.int2rawIntValue(intValue);
+                if (intValue != intRawValue) {
+                    warningReportedProfile.enter();
+                    accessIter.warning(Message.OUT_OF_RANGE);
+                    intValue = 0;
+                }
+            }
+            return intValue >= 0 && intValue <= 255 ? (byte) intValue : 0;
         }
 
         @Override
diff --git a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/ExpectedTestOutput.test b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/ExpectedTestOutput.test
index fdba9cc4c32c2ff320152b169189f5768ef00438..cab492ed4f6b4acb93dd3d27a12d087359c51ebb 100644
--- a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/ExpectedTestOutput.test
+++ b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/ExpectedTestOutput.test
@@ -7783,30 +7783,41 @@ C:D         9
 [241] "361" "362" "363" "364" "365" "366" "367" "370" "371" "372" "373" "374"
 [253] "375" "376" "377"
 
-##com.oracle.truffle.r.test.builtins.TestBuiltin_asraw.testAsRaw#Output.IgnoreWarningContext#
-#{ as.raw("test") }
+##com.oracle.truffle.r.test.builtins.TestBuiltin_asraw.testAsRaw#
+#{ as.raw('1') }
+[1] 01
+
+##com.oracle.truffle.r.test.builtins.TestBuiltin_asraw.testAsRaw#
+#{ as.raw('1000') }
+[1] 00
+Warning message:
+out-of-range values treated as 0 in coercion to raw
+
+##com.oracle.truffle.r.test.builtins.TestBuiltin_asraw.testAsRaw#Output.IgnoreWhitespace#
+#{ as.raw('10000000000000000') }
 [1] 00
 Warning messages:
-1: NAs introduced by coercion
+1: NAs introduced by coercion to integer range
 2: out-of-range values treated as 0 in coercion to raw
 
-##com.oracle.truffle.r.test.builtins.TestBuiltin_asraw.testAsRaw#Output.IgnoreWarningContext#
-#{ as.raw('10000001') }
+##com.oracle.truffle.r.test.builtins.TestBuiltin_asraw.testAsRaw#Output.IgnoreWhitespace#
+#{ as.raw('test') }
 [1] 00
-Warning message:
-out-of-range values treated as 0 in coercion to raw
+Warning messages:
+1: NAs introduced by coercion
+2: out-of-range values treated as 0 in coercion to raw
 
 ##com.oracle.truffle.r.test.builtins.TestBuiltin_asraw.testAsRaw#
 #{ as.raw() }
 Error in as.raw() : 0 arguments passed to 'as.raw' which requires 1
 
-##com.oracle.truffle.r.test.builtins.TestBuiltin_asraw.testAsRaw#Output.IgnoreWarningContext#
+##com.oracle.truffle.r.test.builtins.TestBuiltin_asraw.testAsRaw#
 #{ as.raw(-1) }
 [1] 00
 Warning message:
 out-of-range values treated as 0 in coercion to raw
 
-##com.oracle.truffle.r.test.builtins.TestBuiltin_asraw.testAsRaw#Output.IgnoreWarningContext#
+##com.oracle.truffle.r.test.builtins.TestBuiltin_asraw.testAsRaw#
 #{ as.raw(-1L) }
 [1] 00
 Warning message:
@@ -7816,7 +7827,7 @@ out-of-range values treated as 0 in coercion to raw
 #{ as.raw(1) }
 [1] 01
 
-##com.oracle.truffle.r.test.builtins.TestBuiltin_asraw.testAsRaw#Output.IgnoreWarningContext#
+##com.oracle.truffle.r.test.builtins.TestBuiltin_asraw.testAsRaw#
 #{ as.raw(1+1i) }
 [1] 01
 Warning message:
@@ -7826,26 +7837,125 @@ imaginary parts discarded in coercion
 #{ as.raw(1.1) }
 [1] 01
 
+##com.oracle.truffle.r.test.builtins.TestBuiltin_asraw.testAsRaw#
+#{ as.raw(1000) }
+[1] 00
+Warning message:
+out-of-range values treated as 0 in coercion to raw
+
+##com.oracle.truffle.r.test.builtins.TestBuiltin_asraw.testAsRaw#Output.IgnoreWhitespace#
+#{ as.raw(1000+1i) }
+[1] 00
+Warning messages:
+1: imaginary parts discarded in coercion
+2: out-of-range values treated as 0 in coercion to raw
+
+##com.oracle.truffle.r.test.builtins.TestBuiltin_asraw.testAsRaw#Output.IgnoreWhitespace#
+#{ as.raw(10000000000000000) }
+[1] 00
+Warning messages:
+1: NAs introduced by coercion to integer range
+2: out-of-range values treated as 0 in coercion to raw
+
+##com.oracle.truffle.r.test.builtins.TestBuiltin_asraw.testAsRaw#Output.IgnoreWhitespace#
+#{ as.raw(10000000000000000+1i) }
+[1] 00
+Warning messages:
+1: NAs introduced by coercion to integer range
+2: out-of-range values treated as 0 in coercion to raw
+
+##com.oracle.truffle.r.test.builtins.TestBuiltin_asraw.testAsRaw#
+#{ as.raw(1000L) }
+[1] 00
+Warning message:
+out-of-range values treated as 0 in coercion to raw
+
 ##com.oracle.truffle.r.test.builtins.TestBuiltin_asraw.testAsRaw#
 #{ as.raw(1L) }
 [1] 01
 
-##com.oracle.truffle.r.test.builtins.TestBuiltin_asraw.testAsRaw#Output.IgnoreWarningContext#
+##com.oracle.truffle.r.test.builtins.TestBuiltin_asraw.testAsRaw#
 #{ as.raw(NA) }
 [1] 00
 Warning message:
 out-of-range values treated as 0 in coercion to raw
 
+##com.oracle.truffle.r.test.builtins.TestBuiltin_asraw.testAsRaw#
+#{ as.raw(NA_complex_) }
+[1] 00
+Warning message:
+out-of-range values treated as 0 in coercion to raw
+
+##com.oracle.truffle.r.test.builtins.TestBuiltin_asraw.testAsRaw#
+#{ as.raw(NA_integer_) }
+[1] 00
+Warning message:
+out-of-range values treated as 0 in coercion to raw
+
 ##com.oracle.truffle.r.test.builtins.TestBuiltin_asraw.testAsRaw#
 #{ as.raw(NULL) }
 raw(0)
 
-##com.oracle.truffle.r.test.builtins.TestBuiltin_asraw.testAsRaw#Output.IgnoreWarningContext#
-#{ as.raw(c('10000001', '42')) }
-[1] 00 2a
+##com.oracle.truffle.r.test.builtins.TestBuiltin_asraw.testAsRaw#
+#{ as.raw(TRUE) }
+[1] 01
+
+##com.oracle.truffle.r.test.builtins.TestBuiltin_asraw.testAsRaw#
+#{ as.raw(as.raw(list(1, 1+1i)) }
+Error: unexpected '}' in "{ as.raw(as.raw(list(1, 1+1i)) }"
+
+##com.oracle.truffle.r.test.builtins.TestBuiltin_asraw.testAsRaw#
+#{ as.raw(as.raw(list(1, 10000000000000)) }
+Error: unexpected '}' in "{ as.raw(as.raw(list(1, 10000000000000)) }"
+
+##com.oracle.truffle.r.test.builtins.TestBuiltin_asraw.testAsRaw#
+#{ as.raw(as.raw(list(1, 10000000000000, 1+1i)) }
+Error: unexpected '}' in "{ as.raw(as.raw(list(1, 10000000000000, 1+1i)) }"
+
+##com.oracle.truffle.r.test.builtins.TestBuiltin_asraw.testAsRaw#
+#{ as.raw(as.raw(list(1, 2, c(1, 2, 3))) }
+Error: unexpected '}' in "{ as.raw(as.raw(list(1, 2, c(1, 2, 3))) }"
+
+##com.oracle.truffle.r.test.builtins.TestBuiltin_asraw.testAsRaw#
+#{ as.raw(as.raw(list(1, 2, new.env())) }
+Error: unexpected '}' in "{ as.raw(as.raw(list(1, 2, new.env())) }"
+
+##com.oracle.truffle.r.test.builtins.TestBuiltin_asraw.testAsRaw#
+#{ as.raw(as.raw(list(1, NA)) }
+Error: unexpected '}' in "{ as.raw(as.raw(list(1, NA)) }"
+
+##com.oracle.truffle.r.test.builtins.TestBuiltin_asraw.testAsRaw#
+#{ as.raw(as.raw(list(1, NA, list(1))) }
+Error: unexpected '}' in "{ as.raw(as.raw(list(1, NA, list(1))) }"
+
+##com.oracle.truffle.r.test.builtins.TestBuiltin_asraw.testAsRaw#
+#{ as.raw(as.raw(list(1, NA, list(1, 2, 3))) }
+Error: unexpected '}' in "{ as.raw(as.raw(list(1, NA, list(1, 2, 3))) }"
+
+##com.oracle.truffle.r.test.builtins.TestBuiltin_asraw.testAsRaw#
+#{ as.raw(c('1', '1000')) }
+[1] 01 00
 Warning message:
 out-of-range values treated as 0 in coercion to raw
 
+##com.oracle.truffle.r.test.builtins.TestBuiltin_asraw.testAsRaw#
+#{ as.raw(c('1', '2')) }
+[1] 01 02
+
+##com.oracle.truffle.r.test.builtins.TestBuiltin_asraw.testAsRaw#Output.IgnoreWhitespace#
+#{ as.raw(c('10000000000000000', '1')) }
+[1] 00 01
+Warning messages:
+1: NAs introduced by coercion to integer range
+2: out-of-range values treated as 0 in coercion to raw
+
+##com.oracle.truffle.r.test.builtins.TestBuiltin_asraw.testAsRaw#Output.IgnoreWhitespace#
+#{ as.raw(c('10000000000000000', '1000')) }
+[1] 00 00
+Warning messages:
+1: NAs introduced by coercion to integer range
+2: out-of-range values treated as 0 in coercion to raw
+
 ##com.oracle.truffle.r.test.builtins.TestBuiltin_asraw.testAsRaw#Output.IgnoreWarningContext#
 #{ as.raw(c(1+3i, -2-1i, NA)) }
 [1] 01 00 00
@@ -7853,7 +7963,7 @@ Warning messages:
 1: imaginary parts discarded in coercion
 2: out-of-range values treated as 0 in coercion to raw
 
-##com.oracle.truffle.r.test.builtins.TestBuiltin_asraw.testAsRaw#Output.IgnoreWarningContext#
+##com.oracle.truffle.r.test.builtins.TestBuiltin_asraw.testAsRaw#
 #{ as.raw(c(1, -2, 3)) }
 [1] 01 00 03
 Warning message:
@@ -7863,19 +7973,49 @@ out-of-range values treated as 0 in coercion to raw
 #{ as.raw(c(1, 2, 3)) }
 [1] 01 02 03
 
-##com.oracle.truffle.r.test.builtins.TestBuiltin_asraw.testAsRaw#Output.IgnoreWarningContext#
+##com.oracle.truffle.r.test.builtins.TestBuiltin_asraw.testAsRaw#
 #{ as.raw(c(1,1000,NA)) }
 [1] 01 00 00
 Warning message:
 out-of-range values treated as 0 in coercion to raw
 
-##com.oracle.truffle.r.test.builtins.TestBuiltin_asraw.testAsRaw#Output.IgnoreWarningContext#
+##com.oracle.truffle.r.test.builtins.TestBuiltin_asraw.testAsRaw#Output.IgnoreWarningMessage#
+#{ as.raw(c(1000, 1+1i)) }
+[1] 00 01
+Warning messages:
+1: imaginary parts discarded in coercion
+2: out-of-range values treated as 0 in coercion to raw
+
+##com.oracle.truffle.r.test.builtins.TestBuiltin_asraw.testAsRaw#Output.IgnoreWhitespace#
+#{ as.raw(c(10000000000000000+1i, 1+1i)) }
+[1] 00 01
+Warning messages:
+1: NAs introduced by coercion to integer range
+2: imaginary parts discarded in coercion
+3: out-of-range values treated as 0 in coercion to raw
+
+##com.oracle.truffle.r.test.builtins.TestBuiltin_asraw.testAsRaw#Output.IgnoreWhitespace#
+#{ as.raw(c(10000000000000000+1i, 1000+1i, NA_complex_, 1+1i)) }
+[1] 00 00 00 01
+Warning messages:
+1: NAs introduced by coercion to integer range
+2: imaginary parts discarded in coercion
+3: out-of-range values treated as 0 in coercion to raw
+
+##com.oracle.truffle.r.test.builtins.TestBuiltin_asraw.testAsRaw#Output.IgnoreWarningMessage#
+#{ as.raw(c(1000L, 1+1i)) }
+[1] 00 01
+Warning messages:
+1: imaginary parts discarded in coercion
+2: out-of-range values treated as 0 in coercion to raw
+
+##com.oracle.truffle.r.test.builtins.TestBuiltin_asraw.testAsRaw#
 #{ as.raw(c(1L, -2L, 3L)) }
 [1] 01 00 03
 Warning message:
 out-of-range values treated as 0 in coercion to raw
 
-##com.oracle.truffle.r.test.builtins.TestBuiltin_asraw.testAsRaw#Output.IgnoreWarningContext#
+##com.oracle.truffle.r.test.builtins.TestBuiltin_asraw.testAsRaw#
 #{ as.raw(c(1L, -2L, NA)) }
 [1] 01 00 00
 Warning message:
@@ -7885,6 +8025,23 @@ out-of-range values treated as 0 in coercion to raw
 #{ as.raw(c(1L, 2L, 3L)) }
 [1] 01 02 03
 
+##com.oracle.truffle.r.test.builtins.TestBuiltin_asraw.testAsRaw#
+#{ as.raw(c(1L, 2L, NA_integer_)) }
+[1] 01 02 00
+Warning message:
+out-of-range values treated as 0 in coercion to raw
+
+##com.oracle.truffle.r.test.builtins.TestBuiltin_asraw.testAsRaw#Output.IgnoreWhitespace#
+#{ as.raw(c(NA_complex_, 1+1i)) }
+[1] 00 01
+Warning messages:
+1: imaginary parts discarded in coercion
+2: out-of-range values treated as 0 in coercion to raw
+
+##com.oracle.truffle.r.test.builtins.TestBuiltin_asraw.testAsRaw#
+#{ as.raw(c(TRUE, FALSE)) }
+[1] 01 00
+
 ##com.oracle.truffle.r.test.builtins.TestBuiltin_asraw.testAsRaw#
 #{ as.raw(list("1", 2L, 3.4)) }
 [1] 01 02 03
@@ -81931,7 +82088,7 @@ imaginary parts discarded in coercion
 #{ as.complex(as.logical(c(1+1i,1+1i))) }
 [1] 1+0i 1+0i
 
-##com.oracle.truffle.r.test.builtins.TestMiscBuiltins.testCasts#Output.IgnoreWarningContext#
+##com.oracle.truffle.r.test.builtins.TestMiscBuiltins.testCasts#
 #{ as.complex(as.raw(c(1+1i,1+1i))) }
 [1] 1+0i 1+0i
 Warning message:
@@ -145642,13 +145799,13 @@ Warning messages:
 #if (!any(R.version$engine == "FastR")) { as.raw(127) } else { to <- .fastr.interop.new(java.type('com.oracle.truffle.r.test.library.fastr.TestJavaInterop$TestClass'));as.raw(to$fieldStaticByteObject) }
 [1] 7f
 
-##com.oracle.truffle.r.test.library.fastr.TestJavaInterop.testAsXXX#Output.IgnoreWarningMessage#
+##com.oracle.truffle.r.test.library.fastr.TestJavaInterop.testAsXXX#
 #if (!any(R.version$engine == "FastR")) { as.raw(2147483647) } else { to <- .fastr.interop.new(java.type('com.oracle.truffle.r.test.library.fastr.TestJavaInterop$TestClass'));as.raw(to$fieldStaticIntegerObject) }
 [1] 00
 Warning message:
 out-of-range values treated as 0 in coercion to raw
 
-##com.oracle.truffle.r.test.library.fastr.TestJavaInterop.testAsXXX#Output.IgnoreWarningMessage#
+##com.oracle.truffle.r.test.library.fastr.TestJavaInterop.testAsXXX#
 #if (!any(R.version$engine == "FastR")) { as.raw(32767) } else { to <- .fastr.interop.new(java.type('com.oracle.truffle.r.test.library.fastr.TestJavaInterop$TestClass'));as.raw(to$fieldStaticShortObject) }
 [1] 00
 Warning message:
diff --git a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_asraw.java b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_asraw.java
index af160b0108a973cc3eb43f1e2e43d14fd7239c22..5b03c3b88aaf91d90a54f8123f69d5657edfcb53 100644
--- a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_asraw.java
+++ b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_asraw.java
@@ -63,25 +63,55 @@ public class TestBuiltin_asraw extends TestBase {
         assertEval("{ as.raw(NULL) }");
         assertEval("{ as.raw(1) }");
         assertEval("{ as.raw(1L) }");
+        assertEval("{ as.raw(TRUE) }");
+        assertEval("{ as.raw(c(TRUE, FALSE)) }");
+        assertEval("{ as.raw(NA_integer_) }");
         assertEval("{ as.raw(1.1) }");
         assertEval("{ as.raw(c(1, 2, 3)) }");
         assertEval("{ as.raw(c(1L, 2L, 3L)) }");
+        assertEval("{ as.raw(c(1L, 2L, NA_integer_)) }");
         assertEval("{ as.raw(list(1,2,3)) }");
         assertEval("{ as.raw(list(\"1\", 2L, 3.4)) }");
+        assertEval("{ as.raw(as.raw(list(1, 2, c(1, 2, 3))) }");
+        assertEval("{ as.raw(as.raw(list(1, 2, new.env())) }");
+        assertEval("{ as.raw(as.raw(list(1, 10000000000000)) }");
+        assertEval("{ as.raw(as.raw(list(1, 1+1i)) }");
+        assertEval("{ as.raw(as.raw(list(1, 10000000000000, 1+1i)) }");
+        assertEval("{ as.raw(as.raw(list(1, NA)) }");
+        assertEval("{ as.raw(as.raw(list(1, NA, list(1))) }");
+        assertEval("{ as.raw(as.raw(list(1, NA, list(1, 2, 3))) }");
         assertEval("{ as.raw.cls <- function(x) 42; as.raw(structure(c(1,2), class='cls')); }");
 
-        assertEval(Output.IgnoreWarningContext, "{ as.raw(1+1i) }");
-        assertEval(Output.IgnoreWarningContext, "{ as.raw(-1) }");
-        assertEval(Output.IgnoreWarningContext, "{ as.raw(-1L) }");
-        assertEval(Output.IgnoreWarningContext, "{ as.raw(NA) }");
-        assertEval(Output.IgnoreWarningContext, "{ as.raw(\"test\") }");
+        assertEval("{ as.raw(1+1i) }");
+        assertEval("{ as.raw(-1) }");
+        assertEval("{ as.raw(-1L) }");
+        assertEval("{ as.raw(NA) }");
+        assertEval("{ as.raw(1000L) }");
+        assertEval("{ as.raw(1000) }");
+        assertEval(Output.IgnoreWhitespace, "{ as.raw(10000000000000000) }");
+        assertEval(Output.IgnoreWhitespace, "{ as.raw('test') }");
+        assertEval("{ as.raw('1') }");
+        assertEval("{ as.raw('1000') }");
+        assertEval(Output.IgnoreWhitespace, "{ as.raw('10000000000000000') }");
+        assertEval("{ as.raw(c('1', '2')) }");
+        assertEval("{ as.raw(c('1', '1000')) }");
+        assertEval(Output.IgnoreWhitespace, "{ as.raw(c('10000000000000000', '1000')) }");
+        assertEval(Output.IgnoreWhitespace, "{ as.raw(c('10000000000000000', '1')) }");
         assertEval(Output.IgnoreWarningContext, "{ as.raw(c(1+3i, -2-1i, NA)) }");
-        assertEval(Output.IgnoreWarningContext, "{ as.raw(c(1, -2, 3)) }");
-        assertEval(Output.IgnoreWarningContext, "{ as.raw(c(1,1000,NA)) }");
-        assertEval(Output.IgnoreWarningContext, "{ as.raw(c(1L, -2L, 3L)) }");
-        assertEval(Output.IgnoreWarningContext, "{ as.raw(c(1L, -2L, NA)) }");
-        assertEval(Output.IgnoreWarningContext, "{ as.raw('10000001') }");
-        assertEval(Output.IgnoreWarningContext, "{ as.raw(c('10000001', '42')) }");
+        assertEval(Output.IgnoreWhitespace, "{ as.raw(10000000000000000+1i) }");
+        assertEval("{ as.raw(NA_complex_) }");
+        assertEval(Output.IgnoreWhitespace, "{ as.raw(1000+1i) }");
+        assertEval(Output.IgnoreWhitespace, "{ as.raw(c(10000000000000000+1i, 1+1i)) }");
+        assertEval(Output.IgnoreWhitespace, "{ as.raw(c(NA_complex_, 1+1i)) }");
+        // gnur has a fixed warnign order,
+        // no matter how they are encountered while traversing the vector
+        assertEval(Output.IgnoreWarningMessage, "{ as.raw(c(1000L, 1+1i)) }");
+        assertEval(Output.IgnoreWarningMessage, "{ as.raw(c(1000, 1+1i)) }");
+        assertEval(Output.IgnoreWhitespace, "{ as.raw(c(10000000000000000+1i, 1000+1i, NA_complex_, 1+1i)) }");
+        assertEval("{ as.raw(c(1, -2, 3)) }");
+        assertEval("{ as.raw(c(1,1000,NA)) }");
+        assertEval("{ as.raw(c(1L, -2L, 3L)) }");
+        assertEval("{ as.raw(c(1L, -2L, NA)) }");
         assertEval("{ y <- as.raw(c(5L, 6L)); attr(y, 'someAttr') <- 'someValue'; x <- as.raw(y); x[[1]] <- as.raw(42); y }");
     }
 }
diff --git a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestMiscBuiltins.java b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestMiscBuiltins.java
index b664de1039d4fc145fb12e23b3a015f04ada5a6a..53e851c99ef1a9dc771733f010e73063c70f3a9b 100644
--- a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestMiscBuiltins.java
+++ b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestMiscBuiltins.java
@@ -110,7 +110,7 @@ public class TestMiscBuiltins extends TestBase {
         assertEval("{ x <- 1:3 ; attr(x,\"my\") <- 10 ; attributes(as.matrix(x)) }");
 
         assertEval("{ as.complex(as.double(c(1+1i,1+1i))) }");
-        assertEval(Output.IgnoreWarningContext, "{ as.complex(as.raw(c(1+1i,1+1i))) }");
+        assertEval("{ as.complex(as.raw(c(1+1i,1+1i))) }");
     }
 
     @Test
diff --git a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/library/fastr/TestJavaInterop.java b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/library/fastr/TestJavaInterop.java
index 14ec46b0f9ddb61462fb9d650896e8e051a5cfce..0c765ee621c368083deeabf0850b649487d3586a 100644
--- a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/library/fastr/TestJavaInterop.java
+++ b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/library/fastr/TestJavaInterop.java
@@ -982,7 +982,7 @@ public class TestJavaInterop extends TestBase {
                     assertEvalFastR(Output.IgnoreWarningMessage, expr, getAsXXX(f.get(t), asXXX));
                 } else if (asXXX.equals("as.expression") && (name.contains("Long") || name.contains("Double"))) {
                     assertEvalFastR(Ignored.ImplementationError, expr, getAsXXX(f.get(t), asXXX));
-                } else if (asXXX.equals("as.raw") && (name.contains("Short") || name.contains("Integer") || name.contains("Long") || name.contains("Double") || name.contains("NaN"))) {
+                } else if (asXXX.equals("as.raw") && (name.contains("Long") || name.contains("Double") || name.contains("NaN"))) {
                     assertEvalFastR(Output.IgnoreWarningMessage, expr, getAsXXX(f.get(t), asXXX));
                 } else if (asXXX.equals("as.symbol") && (name.contains("Long") || name.contains("Double") || name.contains("Float"))) {
                     assertEvalFastR(Ignored.ImplementationError, expr, getAsXXX(f.get(t), asXXX));