diff --git a/com.oracle.truffle.r.engine/src/com/oracle/truffle/r/engine/REngine.java b/com.oracle.truffle.r.engine/src/com/oracle/truffle/r/engine/REngine.java
index 4ce6506ad29b6dcae8e77584fefd887948a024d2..ef4cb07f6261225f6dda0f9c43aa9dd6494c41eb 100644
--- a/com.oracle.truffle.r.engine/src/com/oracle/truffle/r/engine/REngine.java
+++ b/com.oracle.truffle.r.engine/src/com/oracle/truffle/r/engine/REngine.java
@@ -100,7 +100,6 @@ import com.oracle.truffle.r.runtime.data.RLanguage;
 import com.oracle.truffle.r.runtime.data.RMissing;
 import com.oracle.truffle.r.runtime.data.RNull;
 import com.oracle.truffle.r.runtime.data.RPromise;
-import com.oracle.truffle.r.runtime.data.RStringVector;
 import com.oracle.truffle.r.runtime.data.RSymbol;
 import com.oracle.truffle.r.runtime.data.RTypedValue;
 import com.oracle.truffle.r.runtime.data.model.RAbstractVector;
@@ -462,7 +461,7 @@ final class REngine implements Engine, Engine.Timings {
 
     @Override
     @TruffleBoundary
-    public Object evalFunction(RFunction func, MaterializedFrame frame, RCaller caller, RStringVector names, Object... args) {
+    public Object evalFunction(RFunction func, MaterializedFrame frame, RCaller caller, boolean evalPromises, ArgumentsSignature names, Object... args) {
         assert frame == null || caller != null;
         MaterializedFrame actualFrame = frame;
         if (actualFrame == null) {
@@ -475,15 +474,17 @@ final class REngine implements Engine, Engine.Timings {
             }
         }
         RArgsValuesAndNames reorderedArgs = CallMatcherGenericNode.reorderArguments(args, func,
-                        names == null ? ArgumentsSignature.empty(args.length) : ArgumentsSignature.get(names.getDataWithoutCopying()), RError.NO_CALLER);
+                        names == null ? ArgumentsSignature.empty(args.length) : names, RError.NO_CALLER);
         Object[] newArgs = reorderedArgs.getArguments();
-        for (int i = 0; i < newArgs.length; i++) {
-            Object arg = newArgs[i];
-            if (arg instanceof RPromise) {
-                newArgs[i] = PromiseHelperNode.evaluateSlowPath(null, (RPromise) arg);
+        if (evalPromises) {
+            for (int i = 0; i < newArgs.length; i++) {
+                Object arg = newArgs[i];
+                if (arg instanceof RPromise) {
+                    newArgs[i] = PromiseHelperNode.evaluateSlowPath((RPromise) arg);
+                }
             }
         }
-        return CallRFunctionNode.executeSlowpath(func, caller == null ? RArguments.getCall(actualFrame) : caller, actualFrame, newArgs, null);
+        return CallRFunctionNode.executeSlowpath(func, caller == null ? RArguments.getCall(actualFrame) : caller, actualFrame, newArgs, reorderedArgs.getSignature(), null);
     }
 
     private Object evalNode(RSyntaxElement exprRep, REnvironment envir, RCaller caller) {
@@ -706,6 +707,6 @@ final class REngine implements Engine, Engine.Timings {
     }
 
     private static Object evaluatePromise(Object value) {
-        return value instanceof RPromise ? PromiseHelperNode.evaluateSlowPath(null, (RPromise) value) : value;
+        return value instanceof RPromise ? PromiseHelperNode.evaluateSlowPath((RPromise) value) : value;
     }
 }
diff --git a/com.oracle.truffle.r.engine/src/com/oracle/truffle/r/engine/RRuntimeASTAccessImpl.java b/com.oracle.truffle.r.engine/src/com/oracle/truffle/r/engine/RRuntimeASTAccessImpl.java
index 7c242944350bfebdceda6e44619e119485e7d8c3..454eafb417159396083e0e72333299f393f513ff 100644
--- a/com.oracle.truffle.r.engine/src/com/oracle/truffle/r/engine/RRuntimeASTAccessImpl.java
+++ b/com.oracle.truffle.r.engine/src/com/oracle/truffle/r/engine/RRuntimeASTAccessImpl.java
@@ -367,7 +367,7 @@ class RRuntimeASTAccessImpl implements RRuntimeASTAccess {
     public Object callback(RFunction f, Object[] args) {
         boolean gd = RContext.getInstance().stateInstrumentation.setDebugGloballyDisabled(true);
         try {
-            return RContext.getEngine().evalFunction(f, null, null, null, args);
+            return RContext.getEngine().evalFunction(f, null, null, true, null, args);
         } catch (ReturnException ex) {
             // cannot throw return exceptions further up.
             return ex.getResult();
diff --git a/com.oracle.truffle.r.engine/src/com/oracle/truffle/r/engine/interop/NativeLogicalArray.java b/com.oracle.truffle.r.engine/src/com/oracle/truffle/r/engine/interop/NativeLogicalArray.java
index 01f3f46c1b265e9dbe67ba13aaa36a49a5285714..d8229921a159b81888e35baacb3cc9f160757faf 100644
--- a/com.oracle.truffle.r.engine/src/com/oracle/truffle/r/engine/interop/NativeLogicalArray.java
+++ b/com.oracle.truffle.r.engine/src/com/oracle/truffle/r/engine/interop/NativeLogicalArray.java
@@ -31,7 +31,7 @@ import com.oracle.truffle.r.runtime.data.RTruffleObject;
  * array in FastR is represented as {@code byte[]}.
  */
 public class NativeLogicalArray extends NativeNACheck implements RTruffleObject {
-    @CompilationFinal public final byte[] data;
+    @CompilationFinal(dimensions = 1) public final byte[] data;
 
     public NativeLogicalArray(Object obj, byte[] value) {
         super(obj);
diff --git a/com.oracle.truffle.r.engine/src/com/oracle/truffle/r/engine/shell/JLineConsoleCompleter.java b/com.oracle.truffle.r.engine/src/com/oracle/truffle/r/engine/shell/JLineConsoleCompleter.java
index eaeeb329ea451ca404e91fe0c99f69592298e2e8..b5e7c8ae1eb3dec0c024c9185b453d5e7ee94507 100644
--- a/com.oracle.truffle.r.engine/src/com/oracle/truffle/r/engine/shell/JLineConsoleCompleter.java
+++ b/com.oracle.truffle.r.engine/src/com/oracle/truffle/r/engine/shell/JLineConsoleCompleter.java
@@ -78,7 +78,7 @@ public class JLineConsoleCompleter implements Completer {
             REnvironment utils = REnvironment.getRegisteredNamespace("utils");
             Object o = utils.get(".completeToken");
             if (o instanceof RPromise) {
-                o = PromiseHelperNode.evaluateSlowPath(null, (RPromise) o);
+                o = PromiseHelperNode.evaluateSlowPath((RPromise) o);
             }
             RFunction completeToken;
             if (o instanceof RFunction) {
@@ -99,7 +99,7 @@ public class JLineConsoleCompleter implements Completer {
             env.safePut("token", buffer.substring(start, cursor));
 
             MaterializedFrame callingFrame = REnvironment.globalEnv().getFrame();
-            RContext.getEngine().evalFunction(completeToken, callingFrame, RCaller.createInvalid(callingFrame), null, new Object[]{});
+            RContext.getEngine().evalFunction(completeToken, callingFrame, RCaller.createInvalid(callingFrame), true, null, new Object[]{});
 
             o = env.get("comps");
             if (!(o instanceof RAbstractStringVector)) {
diff --git a/com.oracle.truffle.r.library/src/com/oracle/truffle/r/library/fastrGrid/GridContext.java b/com.oracle.truffle.r.library/src/com/oracle/truffle/r/library/fastrGrid/GridContext.java
index a2c92c4c538b61773a56f0198121a8525c4b4606..efd87be667163e281801070eb5c2804b37d73378 100644
--- a/com.oracle.truffle.r.library/src/com/oracle/truffle/r/library/fastrGrid/GridContext.java
+++ b/com.oracle.truffle.r.library/src/com/oracle/truffle/r/library/fastrGrid/GridContext.java
@@ -129,7 +129,7 @@ public final class GridContext {
             internalCode = RInternalCode.lookup(RContext.getInstance(), "grid", RInternalCode.loadSourceRelativeTo(LInitGrid.class, "fastrGrid.R"));
         }
         RFunction redrawAll = internalCode.lookupFunction(functionName);
-        return RContext.getEngine().evalFunction(redrawAll, REnvironment.baseEnv().getFrame(), RCaller.topLevel, null, args);
+        return RContext.getEngine().evalFunction(redrawAll, REnvironment.baseEnv().getFrame(), RCaller.topLevel, true, null, args);
     }
 
     private static final class DeviceAndState {
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 5ec3a485350a46e226516c39801a6203aeac81d3..00ac91621ba2c891c36d0fd298552d9fbf5a8823 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
@@ -423,7 +423,7 @@ public class MethodsListDispatch {
                 Object res = FrameSlotChangeMonitor.getValue(slot, currentFrame);
                 if (res != null) {
                     if (res instanceof RPromise) {
-                        res = PromiseHelperNode.evaluateSlowPath(null, (RPromise) res);
+                        res = PromiseHelperNode.evaluateSlowPath((RPromise) res);
                     }
                 }
                 return res;
diff --git a/com.oracle.truffle.r.library/src/com/oracle/truffle/r/library/stats/RandFunctionsNodes.java b/com.oracle.truffle.r.library/src/com/oracle/truffle/r/library/stats/RandFunctionsNodes.java
index a0792babded9bea59dbdce3bc98c75732dd23191..93cd847a3d3b093e9e1a5afe3530ebe9a3290052 100644
--- a/com.oracle.truffle.r.library/src/com/oracle/truffle/r/library/stats/RandFunctionsNodes.java
+++ b/com.oracle.truffle.r.library/src/com/oracle/truffle/r/library/stats/RandFunctionsNodes.java
@@ -188,7 +188,7 @@ public final class RandFunctionsNodes {
                 double bValue = b.getDataAt(i % bLength);
                 double cValue = c.getDataAt(i % cLength);
                 double value = function.execute(aValue, bValue, cValue, randProvider);
-                if (Double.isNaN(value) || value < Integer.MIN_VALUE || value > Integer.MAX_VALUE) {
+                if (Double.isNaN(value) || value <= Integer.MIN_VALUE || value > Integer.MAX_VALUE) {
                     nodeData.nan.enter();
                     nans = true;
                     result[i] = RRuntime.INT_NA;
diff --git a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/BaseGammaFunctions.java b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/BaseGammaFunctions.java
index 4ee6d5194ce3f1c778d4daae7f8153523bb28902..7befd61a6d92b13739f47315f30ab3f29e202af5 100644
--- a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/BaseGammaFunctions.java
+++ b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/BaseGammaFunctions.java
@@ -142,7 +142,7 @@ public class BaseGammaFunctions {
 
         @Child private DpsiFnCalc dpsiFnCalc;
 
-        @CompilationFinal private static final double[] bvalues = new double[]{1.00000000000000000e+00, -5.00000000000000000e-01, 1.66666666666666667e-01, -3.33333333333333333e-02,
+        @CompilationFinal(dimensions = 1) private static final double[] bvalues = new double[]{1.00000000000000000e+00, -5.00000000000000000e-01, 1.66666666666666667e-01, -3.33333333333333333e-02,
                         2.38095238095238095e-02, -3.33333333333333333e-02, 7.57575757575757576e-02, -2.53113553113553114e-01, 1.16666666666666667e+00, -7.09215686274509804e+00,
                         5.49711779448621554e+01, -5.29124242424242424e+02, 6.19212318840579710e+03, -8.65802531135531136e+04, 1.42551716666666667e+06, -2.72982310678160920e+07,
                         6.01580873900642368e+08, -1.51163157670921569e+10, 4.29614643061166667e+11, -1.37116552050883328e+13, 4.88332318973593167e+14, -1.92965793419400681e+16};
diff --git a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/BasePackage.java b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/BasePackage.java
index 2bf4e37ed7d34b898ab99c5a2c8da89f5987f94c..e3a1265309de34b27e0774a7c315d00ef201ba9d 100644
--- a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/BasePackage.java
+++ b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/BasePackage.java
@@ -380,6 +380,7 @@ public class BasePackage extends RBuiltinPackage {
         add(FastRInterop.InteropNew.class, FastRInteropFactory.InteropNewNodeGen::create);
         add(FastRInterop.IsNull.class, FastRInteropFactory.IsNullNodeGen::create);
         add(FastRInterop.IsExecutable.class, FastRInteropFactory.IsExecutableNodeGen::create);
+        add(FastRInterop.IsExternal.class, FastRInteropFactory.IsExternalNodeGen::create);
         add(FastRInterop.JavaClass.class, FastRInteropFactory.JavaClassNodeGen::create);
         add(FastRInterop.IsJavaArray.class, FastRInteropFactory.IsJavaArrayNodeGen::create);
         add(FastRInterop.NewJavaArray.class, FastRInteropFactory.NewJavaArrayNodeGen::create);
diff --git a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/BaseVariables.java b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/BaseVariables.java
index eed42c1ccb422c02631de094eb4a9d8f9b6a9aea..be994a54ddf2652100c3fa0d3b3126bfe806af5e 100644
--- a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/BaseVariables.java
+++ b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/BaseVariables.java
@@ -5,7 +5,7 @@
  *
  * Copyright (c) 1995-2012, The R Core Team
  * Copyright (c) 2003, The R Foundation
- * Copyright (c) 2015, 2016, Oracle and/or its affiliates
+ * Copyright (c) 2015, 2017, Oracle and/or its affiliates
  *
  * All rights reserved.
  */
@@ -26,7 +26,7 @@ import com.oracle.truffle.r.runtime.env.REnvironment;
  */
 public class BaseVariables {
     // @formatter:off
-    @CompilationFinal private static final String[] PLATFORM_NAMES = new String[] {
+    @CompilationFinal(dimensions = 1) private static final String[] PLATFORM_NAMES = new String[] {
         "OS.type", "file.sep", "dynlib.ext", "GUI", "endian", "pkgType", "path.sep", "r_arch"
     };
     // @formatter:on
@@ -42,7 +42,7 @@ public class BaseVariables {
     }
 
     // @formatter:off
-    @CompilationFinal private static final String[] MACHINE_NAMES = new String[] {
+    @CompilationFinal(dimensions = 1) private static final String[] MACHINE_NAMES = new String[] {
         "double.eps",            "double.neg.eps",        "double.xmin",
         "double.xmax",           "double.base",           "double.digits",
         "double.rounding",       "double.guard",          "double.ulp.digits",
diff --git a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/DoCall.java b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/DoCall.java
index ec10b5b52c2799325428a28f97b2791f025321dd..ce6d340ec5cb2eb59e18ed0f4ad03e5748e25fc2 100644
--- a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/DoCall.java
+++ b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/DoCall.java
@@ -28,25 +28,43 @@ import static com.oracle.truffle.r.nodes.builtin.CastBuilder.Predef.toBoolean;
 import static com.oracle.truffle.r.runtime.RVisibility.CUSTOM;
 import static com.oracle.truffle.r.runtime.builtins.RBehavior.COMPLEX;
 
+import java.util.Arrays;
+
+import com.oracle.truffle.api.CompilerDirectives;
 import com.oracle.truffle.api.CompilerDirectives.TruffleBoundary;
 import com.oracle.truffle.api.dsl.Cached;
 import com.oracle.truffle.api.dsl.Specialization;
+import com.oracle.truffle.api.frame.FrameSlot;
+import com.oracle.truffle.api.frame.FrameSlotKind;
+import com.oracle.truffle.api.frame.FrameSlotTypeException;
 import com.oracle.truffle.api.frame.MaterializedFrame;
 import com.oracle.truffle.api.frame.VirtualFrame;
+import com.oracle.truffle.api.nodes.Node;
 import com.oracle.truffle.api.profiles.BranchProfile;
+import com.oracle.truffle.api.profiles.ConditionProfile;
+import com.oracle.truffle.api.profiles.ValueProfile;
 import com.oracle.truffle.r.nodes.RASTUtils;
+import com.oracle.truffle.r.nodes.access.ConstantNode;
+import com.oracle.truffle.r.nodes.access.variables.ReadVariableNode;
 import com.oracle.truffle.r.nodes.attributes.SpecialAttributesFunctions.GetNamesAttributeNode;
 import com.oracle.truffle.r.nodes.builtin.RBuiltinNode;
+import com.oracle.truffle.r.nodes.builtin.base.DoCallNodeGen.DoCallInternalNodeGen;
 import com.oracle.truffle.r.nodes.builtin.base.GetFunctions.Get;
 import com.oracle.truffle.r.nodes.builtin.base.GetFunctionsFactory.GetNodeGen;
-import com.oracle.truffle.r.nodes.function.call.RExplicitCallNode;
+import com.oracle.truffle.r.nodes.function.RCallerHelper;
 import com.oracle.truffle.r.nodes.function.opt.ShareObjectNode;
+import com.oracle.truffle.r.nodes.function.visibility.SetVisibilityNode;
 import com.oracle.truffle.r.runtime.ArgumentsSignature;
+import com.oracle.truffle.r.runtime.RArguments;
+import com.oracle.truffle.r.runtime.RCaller;
+import com.oracle.truffle.r.runtime.RDispatch;
 import com.oracle.truffle.r.runtime.RError;
 import com.oracle.truffle.r.runtime.RError.Message;
+import com.oracle.truffle.r.runtime.RInternalError;
 import com.oracle.truffle.r.runtime.RRuntime;
 import com.oracle.truffle.r.runtime.RType;
 import com.oracle.truffle.r.runtime.builtins.RBuiltin;
+import com.oracle.truffle.r.runtime.builtins.RBuiltinDescriptor;
 import com.oracle.truffle.r.runtime.builtins.RBuiltinKind;
 import com.oracle.truffle.r.runtime.context.RContext;
 import com.oracle.truffle.r.runtime.data.RArgsValuesAndNames;
@@ -58,24 +76,18 @@ import com.oracle.truffle.r.runtime.data.RList;
 import com.oracle.truffle.r.runtime.data.RPromise;
 import com.oracle.truffle.r.runtime.data.RPromise.Closure;
 import com.oracle.truffle.r.runtime.data.RPromise.PromiseState;
-import com.oracle.truffle.r.runtime.data.RStringVector;
 import com.oracle.truffle.r.runtime.data.RSymbol;
 import com.oracle.truffle.r.runtime.data.model.RAbstractListVector;
 import com.oracle.truffle.r.runtime.data.model.RAbstractStringVector;
 import com.oracle.truffle.r.runtime.env.REnvironment;
+import com.oracle.truffle.r.runtime.env.frame.FrameSlotChangeMonitor;
+import com.oracle.truffle.r.runtime.env.frame.RFrameSlot;
 import com.oracle.truffle.r.runtime.nodes.InternalRSyntaxNodeChildren;
 import com.oracle.truffle.r.runtime.nodes.RSyntaxNode;
 
 @RBuiltin(name = ".fastr.do.call", visibility = CUSTOM, kind = RBuiltinKind.INTERNAL, parameterNames = {"what", "args", "quote", "envir"}, behavior = COMPLEX)
 public abstract class DoCall extends RBuiltinNode.Arg4 implements InternalRSyntaxNodeChildren {
 
-    @Child private GetNamesAttributeNode getNamesNode = GetNamesAttributeNode.create();
-
-    private final BranchProfile containsRLanguageProfile = BranchProfile.create();
-    private final BranchProfile containsRSymbolProfile = BranchProfile.create();
-
-    @Child private RExplicitCallNode call = RExplicitCallNode.create();
-
     static {
         Casts casts = new Casts(DoCall.class);
         casts.arg("what").defaultError(Message.MUST_BE_STRING_OR_FUNCTION, "what").mustBe(instanceOf(RFunction.class).or(stringValue()));
@@ -88,72 +100,180 @@ public abstract class DoCall extends RBuiltinNode.Arg4 implements InternalRSynta
         return GetNodeGen.create();
     }
 
+    // Note: quote tells us if symbols in args list should be interpreted as symbols (quote=TRUE) or
+    // they should be interpreted as read of given symbol from the given environment.
+
     @Specialization
     protected Object doCall(VirtualFrame frame, RAbstractStringVector what, RList argsAsList, boolean quote, REnvironment env,
+                    @Cached("create()") DoCallInternal internal,
                     @Cached("createGet()") Get getNode) {
         if (what.getLength() != 1) {
             throw error(RError.Message.MUST_BE_STRING_OR_FUNCTION, "what");
         }
+        // Note: if the function is in fact a promise, we are evaluating it here slightly earlier
+        // than GNU R. It should not a be a problem.
         RFunction func = (RFunction) getNode.execute(frame, what.getDataAt(0), env, RType.Function.getName(), true);
-        return doCall(frame, func, argsAsList, quote, env);
+        return doCall(frame, func, argsAsList, quote, env, internal);
     }
 
     @Specialization
-    protected Object doCall(VirtualFrame frame, RFunction func, RList argsAsList, boolean quote, REnvironment env) {
-        /*
-         * To re-create the illusion of a normal call, turn the values in argsAsList into promises.
+    protected Object doCall(VirtualFrame virtualFrame, RFunction func, RList argsAsList, boolean quote, REnvironment env,
+                    @Cached("create()") DoCallInternal internal) {
+        return internal.execute(virtualFrame, func, argsAsList, quote, env);
+    }
+
+    protected abstract static class DoCallInternal extends Node {
+        @Child private GetNamesAttributeNode getNamesNode = GetNamesAttributeNode.create();
+        @Child private SetVisibilityNode setVisibilityNode = SetVisibilityNode.create();
+
+        public static DoCallInternal create() {
+            return DoCallInternalNodeGen.create();
+        }
+
+        public abstract Object execute(VirtualFrame virtualFrame, RFunction func, RList argsAsList, boolean quote, REnvironment env);
+
+        protected final ArgumentsSignature getArgsNames(RList argsAsList) {
+            ArgumentsSignature signature = ArgumentsSignature.fromNamesAttribute(getNamesNode.getNames(argsAsList));
+            return signature == null ? ArgumentsSignature.empty(argsAsList.getLength()) : signature;
+        }
+
+        /**
+         * Fast version that works only for simple cases. It does not explicitly create the AST and
+         * evaluate it, but instead it directly implements what the execution of such AST would do.
          */
-        Object[] argValues = argsAsList.getDataCopy();
-        RStringVector n = getNamesNode.getNames(argsAsList);
-        ArgumentsSignature signature;
-        if (n == null) {
-            signature = ArgumentsSignature.empty(argValues.length);
-        } else {
-            String[] argNames = new String[argValues.length];
+        @Specialization(guards = "isSimple(func, argsAsList)")
+        public Object doSimple(VirtualFrame virtualFrame, RFunction func, RList argsAsList, boolean quote, REnvironment env,
+                        @Cached("create()") ShareObjectNode shareObjectNode,
+                        @Cached("createBinaryProfile()") ConditionProfile quoteProfile,
+                        @Cached("create()") BranchProfile containsRSymbolProfile,
+                        @Cached("createClassProfile()") ValueProfile frameAccessProfile) {
+            Object[] argValuesData = argsAsList.getDataWithoutCopying();
+            Object[] argValues = argValuesData;
+            MaterializedFrame envFrame = env.getFrame(frameAccessProfile).materialize();
+            if (quoteProfile.profile(!quote)) {
+                argValues = Arrays.copyOf(argValuesData, argValuesData.length);
+                for (int i = 0; i < argValues.length; i++) {
+                    Object arg = argValues[i];
+                    if (arg instanceof RSymbol) {
+                        containsRSymbolProfile.enter();
+                        RSymbol symbol = (RSymbol) arg;
+                        if (symbol.getName().isEmpty()) {
+                            argValues[i] = REmpty.instance;
+                        } else {
+                            argValues[i] = createLookupPromise(envFrame, symbol);
+                        }
+                    }
+                }
+            }
             for (int i = 0; i < argValues.length; i++) {
-                String name = n.getDataAt(i);
-                argNames[i] = name == null ? null : name.isEmpty() ? null : name;
+                shareObjectNode.execute(argValues[i]);
+            }
+            ArgumentsSignature signature = getArgsNames(argsAsList);
+            RCaller caller = RCaller.create(virtualFrame, RCallerHelper.createFromArguments(func, new RArgsValuesAndNames(argValues, signature)));
+            try {
+                Object resultValue = RContext.getEngine().evalFunction(func, envFrame, caller, false, signature, argValues);
+                setVisibilityNode.execute(virtualFrame, getVisibility(envFrame));
+                return resultValue;
+            } finally {
+                for (int i = 0; i < argValues.length; i++) {
+                    ShareObjectNode.unshare(argValues[i]);
+                }
             }
-            signature = ArgumentsSignature.get(argNames);
         }
-        if (!quote) {
+
+        protected static boolean isSimple(RFunction function, RList args) {
+            RBuiltinDescriptor builtin = function.getRBuiltin();
+            if (builtin != null && builtin.getDispatch() != RDispatch.DEFAULT) {
+                CompilerDirectives.transferToInterpreter();
+                return false;
+            }
+            for (int i = 0; i < args.getLength(); i++) {
+                if (args.getDataAt(i) instanceof RLanguage) {
+                    CompilerDirectives.transferToInterpreter();
+                    // Note: language is tricky because of formulae, which are language that is
+                    // really not meant to be evaluated again in a different frame than the one were
+                    // the were evaluated for the first time. The solution should be to clone the
+                    // language's rep and get its nodes in uninitilized state, but that does not
+                    // work for some reason.
+                    return false;
+                }
+            }
+            return true;
+        }
+
+        @TruffleBoundary
+        private static RPromise createLookupPromise(MaterializedFrame callerFrame, RSymbol symbol) {
+            Closure closure = RPromise.Closure.create(RContext.getASTBuilder().lookup(RSyntaxNode.SOURCE_UNAVAILABLE, symbol.getName(), false).asRNode());
+            return RDataFactory.createPromise(PromiseState.Supplied, closure, callerFrame);
+        }
+
+        @TruffleBoundary
+        private boolean getVisibility(MaterializedFrame envFrame) {
+            FrameSlot envVisibilitySlot = FrameSlotChangeMonitor.findOrAddFrameSlot(envFrame.getFrameDescriptor(), RFrameSlot.Visibility, FrameSlotKind.Boolean);
+            if (envVisibilitySlot != null) {
+                try {
+                    return envFrame.getBoolean(envVisibilitySlot);
+                } catch (FrameSlotTypeException e) {
+                    throw RInternalError.shouldNotReachHere();
+                }
+            }
+            return false;
+        }
+
+        @Specialization(guards = "!isSimple(func, argsAsList)")
+        public Object doGeneric(VirtualFrame virtualFrame, RFunction func, RList argsAsList, boolean quote, REnvironment env) {
+            CallResult result = doCallGeneric(func, argsAsList.getDataWithoutCopying(), getArgsNames(argsAsList), quote, RArguments.getCall(virtualFrame), env);
+            setVisibilityNode.execute(virtualFrame, result.visibility);
+            return result.value;
+        }
+
+        @TruffleBoundary
+        private CallResult doCallGeneric(RFunction function, Object[] argValues, ArgumentsSignature argsSignature, boolean quote, RCaller call, REnvironment env) {
+            RSyntaxNode[] argsConstants = new RSyntaxNode[argValues.length];
             for (int i = 0; i < argValues.length; i++) {
-                Object arg = argValues[i];
-                if (arg instanceof RLanguage) {
-                    containsRLanguageProfile.enter();
-                    RLanguage lang = (RLanguage) arg;
-                    argValues[i] = createRLanguagePromise(env.getFrame().materialize(), lang);
-                } else if (arg instanceof RSymbol) {
-                    containsRSymbolProfile.enter();
-                    RSymbol symbol = (RSymbol) arg;
-                    if (symbol.getName().isEmpty()) {
-                        argValues[i] = REmpty.instance;
+                if (!quote && argValues[i] instanceof RLanguage) {
+                    argsConstants[i] = ((RLanguage) argValues[i]).getRep().asRSyntaxNode();
+                } else if (!quote && argValues[i] instanceof RSymbol) {
+                    RSymbol symbol = (RSymbol) argValues[i];
+                    if (symbol.isMissing()) {
+                        argsConstants[i] = ConstantNode.create(REmpty.instance);
                     } else {
-                        argValues[i] = createLookupPromise(env.getFrame().materialize(), symbol);
+                        argsConstants[i] = ReadVariableNode.create(((RSymbol) argValues[i]).getName());
                     }
+                } else {
+                    argsConstants[i] = ConstantNode.create(argValues[i]);
                 }
             }
-        }
-        for (int i = 0; i < argValues.length; i++) {
-            ShareObjectNode.share(argValues[i]);
-        }
-        try {
-            return call.execute(frame, func, new RArgsValuesAndNames(argValues, signature));
-        } finally {
             for (int i = 0; i < argValues.length; i++) {
-                ShareObjectNode.unshare(argValues[i]);
+                ShareObjectNode.share(argValues[i]);
+            }
+            RLanguage lang = RDataFactory.createLanguage(RASTUtils.createCall(ConstantNode.create(function), true, argsSignature, argsConstants).asRNode());
+            try {
+                Object resultValue = RContext.getEngine().eval(lang, env, call);
+                MaterializedFrame envFrame = env.getFrame();
+                FrameSlot envVisibilitySlot = FrameSlotChangeMonitor.findOrAddFrameSlot(envFrame.getFrameDescriptor(), RFrameSlot.Visibility, FrameSlotKind.Boolean);
+                boolean resultVisibility = false;
+                if (envVisibilitySlot != null) {
+                    resultVisibility = envFrame.getBoolean(envVisibilitySlot);
+                }
+                return new CallResult(resultValue, resultVisibility);
+            } catch (FrameSlotTypeException e) {
+                throw RInternalError.shouldNotReachHere();
+            } finally {
+                for (int i = 0; i < argValues.length; i++) {
+                    ShareObjectNode.unshare(argValues[i]);
+                }
             }
         }
-    }
 
-    @TruffleBoundary
-    private static RPromise createLookupPromise(MaterializedFrame callerFrame, RSymbol symbol) {
-        Closure closure = RPromise.Closure.create(RContext.getASTBuilder().lookup(RSyntaxNode.SOURCE_UNAVAILABLE, symbol.getName(), false).asRNode());
-        return RDataFactory.createPromise(PromiseState.Supplied, closure, callerFrame);
-    }
+        private static final class CallResult {
+            public final Object value;
+            public final boolean visibility;
 
-    @TruffleBoundary
-    private static RPromise createRLanguagePromise(MaterializedFrame callerFrame, RLanguage lang) {
-        return RDataFactory.createPromise(PromiseState.Supplied, RPromise.Closure.create(RASTUtils.cloneNode(lang.getRep())), callerFrame);
+            CallResult(Object value, boolean visibility) {
+                this.value = value;
+                this.visibility = visibility;
+            }
+        }
     }
 }
diff --git a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/Exists.java b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/Exists.java
index 2e8a04837d0705b28bb39734801bcd3b40776db6..51bf9095613afaf8efa757bfabfa5ba2fc87b64b 100644
--- a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/Exists.java
+++ b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/Exists.java
@@ -66,14 +66,14 @@ public abstract class Exists extends RBuiltinNode.Arg4 {
         if (!inherits) {
             Object obj = env.get(name);
             if (modeType != RType.Any && obj instanceof RPromise) {
-                obj = PromiseHelperNode.evaluateSlowPath(null, (RPromise) obj);
+                obj = PromiseHelperNode.evaluateSlowPath((RPromise) obj);
             }
             return RRuntime.asLogical(obj != null && RRuntime.checkType(obj, modeType));
         }
         for (REnvironment e = env; e != REnvironment.emptyEnv(); e = e.getParent()) {
             Object obj = e.get(name);
             if (modeType != RType.Any && obj instanceof RPromise) {
-                obj = PromiseHelperNode.evaluateSlowPath(null, (RPromise) obj);
+                obj = PromiseHelperNode.evaluateSlowPath((RPromise) obj);
             }
             if (obj != null && RRuntime.checkType(obj, modeType)) {
                 return RRuntime.LOGICAL_TRUE;
diff --git a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/FileFunctions.java b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/FileFunctions.java
index 2b33757ec46aa25f0170a3c31f779b4e120d4707..f4d636e57a42f4340d51a196310c18a5b377efdf 100644
--- a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/FileFunctions.java
+++ b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/FileFunctions.java
@@ -43,7 +43,6 @@ import java.nio.file.Paths;
 import java.nio.file.SimpleFileVisitor;
 import java.nio.file.StandardCopyOption;
 import java.nio.file.attribute.BasicFileAttributes;
-import java.nio.file.attribute.FileTime;
 import java.nio.file.attribute.PosixFileAttributes;
 import java.util.ArrayList;
 import java.util.Arrays;
@@ -315,9 +314,9 @@ public class FileFunctions {
                         PosixFileAttributes pfa = Files.readAttributes(path, PosixFileAttributes.class);
                         size = pfa.size();
                         isdir = RRuntime.asLogical(pfa.isDirectory());
-                        mtime = getTimeInSecs(pfa.lastModifiedTime());
-                        ctime = getTimeInSecs(pfa.creationTime());
-                        atime = getTimeInSecs(pfa.lastAccessTime());
+                        mtime = Utils.getTimeInSecs(pfa.lastModifiedTime());
+                        ctime = Utils.getTimeInSecs(pfa.creationTime());
+                        atime = Utils.getTimeInSecs(pfa.lastAccessTime());
                         uname = pfa.owner().getName();
                         grname = pfa.group().getName();
                         mode = Utils.intFilePermissions(pfa.permissions());
@@ -347,14 +346,6 @@ public class FileFunctions {
             return RDataFactory.createList(data, NAMES_VECTOR);
         }
 
-        private static int getTimeInSecs(Object fileTime) {
-            if (fileTime == null) {
-                return RRuntime.INT_NA;
-            } else {
-                return (int) ((FileTime) fileTime).toMillis() / 1000;
-            }
-        }
-
         private static Object createColumnData(Column column, int vecLength) {
             // @formatter:off
             switch(column) {
diff --git a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/GetOldClass.java b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/GetOldClass.java
index 8301704079762b789c5b79c3d1395fd6e5680ea8..a0e3caa5659487e3fd021c13191e4756a508ce73 100644
--- a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/GetOldClass.java
+++ b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/GetOldClass.java
@@ -34,6 +34,7 @@ import com.oracle.truffle.r.nodes.function.ClassHierarchyNode;
 import com.oracle.truffle.r.runtime.builtins.RBuiltin;
 import com.oracle.truffle.r.runtime.data.RFunction;
 import com.oracle.truffle.r.runtime.data.RNull;
+import com.oracle.truffle.r.runtime.data.RSymbol;
 import com.oracle.truffle.r.runtime.data.model.RAbstractContainer;
 
 @RBuiltin(name = "oldClass", kind = PRIMITIVE, parameterNames = {"x"}, behavior = PURE)
@@ -56,6 +57,11 @@ public abstract class GetOldClass extends RBuiltinNode.Arg1 {
         }
     }
 
+    @Specialization
+    protected Object getOldClass(@SuppressWarnings("unused") RSymbol arg) {
+        return RNull.instance;
+    }
+
     @Specialization
     protected Object getOldClass(@SuppressWarnings("unused") RFunction arg) {
         return RNull.instance;
diff --git a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/Identical.java b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/Identical.java
index 9200d000ff439387eddd20b366953f7acfae0a2c..178f29c4816b6bd7125b6db76099c92bba38a8c2 100644
--- a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/Identical.java
+++ b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/Identical.java
@@ -33,6 +33,7 @@ import com.oracle.truffle.api.CompilerDirectives.TruffleBoundary;
 import com.oracle.truffle.api.dsl.Fallback;
 import com.oracle.truffle.api.dsl.Specialization;
 import com.oracle.truffle.api.object.DynamicObject;
+import com.oracle.truffle.api.interop.TruffleObject;
 import com.oracle.truffle.api.profiles.ConditionProfile;
 import com.oracle.truffle.r.nodes.attributes.IterableAttributeNode;
 import com.oracle.truffle.r.nodes.builtin.RBuiltinNode;
@@ -44,6 +45,7 @@ import com.oracle.truffle.r.runtime.data.RAttributable;
 import com.oracle.truffle.r.runtime.data.RAttributesLayout;
 import com.oracle.truffle.r.runtime.data.RExternalPtr;
 import com.oracle.truffle.r.runtime.data.RFunction;
+import com.oracle.truffle.r.runtime.data.RInteropScalar;
 import com.oracle.truffle.r.runtime.data.RLanguage;
 import com.oracle.truffle.r.runtime.data.RListBase;
 import com.oracle.truffle.r.runtime.data.RPairList;
@@ -333,6 +335,16 @@ public abstract class Identical extends RBuiltinNode.Arg7 {
         return identicalAttr(x, y, numEq, singleNA, attribAsSet, ignoreBytecode, ignoreEnvironment);
     }
 
+    @Specialization
+    protected byte doInternalIdenticalForeignObject(RInteropScalar x, RInteropScalar y, boolean numEq, boolean singleNA, boolean attribAsSet, boolean ignoreBytecode, boolean ignoreEnvironment) {
+        return RRuntime.asLogical(x == y);
+    }
+
+    @Specialization(guards = "areForeignObjects(x, y)")
+    protected byte doInternalIdenticalForeignObject(TruffleObject x, TruffleObject y, boolean numEq, boolean singleNA, boolean attribAsSet, boolean ignoreBytecode, boolean ignoreEnvironment) {
+        return RRuntime.asLogical(x == y);
+    }
+
     @SuppressWarnings("unused")
     @Fallback
     protected byte doInternalIdenticalWrongTypes(Object x, Object y, Object numEq, Object singleNA, Object attribAsSet, Object ignoreBytecode, Object ignoreEnvironment) {
@@ -340,6 +352,10 @@ public abstract class Identical extends RBuiltinNode.Arg7 {
         return RRuntime.LOGICAL_FALSE;
     }
 
+    protected boolean areForeignObjects(TruffleObject x, TruffleObject y) {
+        return RRuntime.isForeignObject(x) && RRuntime.isForeignObject(x);
+    }
+
     protected boolean vectorsLists(RAbstractVector x, RAbstractVector y) {
         return x instanceof RListBase && y instanceof RListBase;
     }
diff --git a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/IsFiniteFunctions.java b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/IsFiniteFunctions.java
index 075d0dbb0345c8a8fbb981fac42b4732aa436adb..501d4a283f10f8a9cddbee1d34879ff4cc9c8de8 100644
--- a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/IsFiniteFunctions.java
+++ b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/IsFiniteFunctions.java
@@ -31,7 +31,9 @@ import java.util.function.IntPredicate;
 
 import com.oracle.truffle.api.CompilerDirectives.TruffleBoundary;
 import com.oracle.truffle.api.dsl.Fallback;
+import com.oracle.truffle.api.dsl.ImportStatic;
 import com.oracle.truffle.api.dsl.Specialization;
+import com.oracle.truffle.api.interop.TruffleObject;
 import com.oracle.truffle.r.nodes.attributes.SpecialAttributesFunctions.GetDimAttributeNode;
 import com.oracle.truffle.r.nodes.attributes.SpecialAttributesFunctions.GetNamesAttributeNode;
 import com.oracle.truffle.r.nodes.builtin.RBuiltinNode;
@@ -53,6 +55,7 @@ import com.oracle.truffle.r.runtime.data.model.RAbstractVector;
 
 public class IsFiniteFunctions {
 
+    @ImportStatic(RRuntime.class)
     public abstract static class Adapter extends RBuiltinNode.Arg1 {
 
         @Child private GetDimAttributeNode getDims = GetDimAttributeNode.create();
@@ -83,6 +86,12 @@ public class IsFiniteFunctions {
             return doFunConstant(x, RRuntime.LOGICAL_FALSE);
         }
 
+        @Specialization(guards = "isForeignObject(obj)")
+        @TruffleBoundary
+        protected byte doIsForeign(@SuppressWarnings("unused") TruffleObject obj) {
+            throw error(RError.Message.DEFAULT_METHOD_NOT_IMPLEMENTED_FOR_TYPE, "external object");
+        }
+
         @Fallback
         @TruffleBoundary
         protected Object doIsFiniteOther(Object x) {
diff --git a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/IsNA.java b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/IsNA.java
index c08de1b1f10abdba38904bb6e90c461d64b64727..166728e6642771dc131f3944539d2638e4ad2bc0 100644
--- a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/IsNA.java
+++ b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/IsNA.java
@@ -29,7 +29,9 @@ import static com.oracle.truffle.r.runtime.builtins.RBuiltinKind.PRIMITIVE;
 import com.oracle.truffle.api.CompilerDirectives;
 import com.oracle.truffle.api.CompilerDirectives.TruffleBoundary;
 import com.oracle.truffle.api.dsl.Fallback;
+import com.oracle.truffle.api.dsl.ImportStatic;
 import com.oracle.truffle.api.dsl.Specialization;
+import com.oracle.truffle.api.interop.TruffleObject;
 import com.oracle.truffle.api.profiles.ConditionProfile;
 import com.oracle.truffle.r.nodes.attributes.SpecialAttributesFunctions.GetDimAttributeNode;
 import com.oracle.truffle.r.nodes.attributes.SpecialAttributesFunctions.GetDimNamesAttributeNode;
@@ -53,6 +55,7 @@ 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.RAbstractVector;
 
+@ImportStatic(RRuntime.class)
 @RBuiltin(name = "is.na", kind = PRIMITIVE, parameterNames = {"x"}, dispatch = INTERNAL_GENERIC, behavior = PURE)
 public abstract class IsNA extends RBuiltinNode.Arg1 {
 
@@ -195,6 +198,11 @@ public abstract class IsNA extends RBuiltinNode.Arg1 {
         return RDataFactory.createEmptyLogicalVector();
     }
 
+    @Specialization(guards = "isForeignObject(obj)")
+    protected byte isNA(@SuppressWarnings("unused") TruffleObject obj) {
+        return RRuntime.LOGICAL_FALSE;
+    }
+
     // Note: all the primitive values have specialization, so we can only get RTypedValue in
     // fallback
     @Fallback
diff --git a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/IsTypeFunctions.java b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/IsTypeFunctions.java
index 74152f23bf2199922819321a77e4e70350476f6c..f966c9ab3c357134731cfa5fa331f6379f3c94ce 100644
--- a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/IsTypeFunctions.java
+++ b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/IsTypeFunctions.java
@@ -31,7 +31,9 @@ import static com.oracle.truffle.r.runtime.builtins.RBuiltinKind.PRIMITIVE;
 import com.oracle.truffle.api.CompilerDirectives.TruffleBoundary;
 import com.oracle.truffle.api.dsl.Cached;
 import com.oracle.truffle.api.dsl.Fallback;
+import com.oracle.truffle.api.dsl.ImportStatic;
 import com.oracle.truffle.api.dsl.Specialization;
+import com.oracle.truffle.api.interop.TruffleObject;
 import com.oracle.truffle.api.object.DynamicObject;
 import com.oracle.truffle.api.profiles.ConditionProfile;
 import com.oracle.truffle.r.nodes.attributes.GetFixedAttributeNode;
@@ -100,6 +102,7 @@ public class IsTypeFunctions {
         }
     }
 
+    @ImportStatic(RRuntime.class)
     @RBuiltin(name = "is.recursive", kind = PRIMITIVE, parameterNames = {"x"}, behavior = PURE)
     public abstract static class IsRecursive extends MissingAdapter {
 
@@ -126,6 +129,11 @@ public class IsTypeFunctions {
             return arg instanceof RListBase;
         }
 
+        @Specialization(guards = "isForeignObject(obj)")
+        protected byte isRecursive(@SuppressWarnings("unused") TruffleObject obj) {
+            return RRuntime.LOGICAL_FALSE;
+        }
+
         @Fallback
         protected byte isRecursiveFallback(@SuppressWarnings("unused") Object value) {
             return RRuntime.LOGICAL_TRUE;
diff --git a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/Parse.java b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/Parse.java
index 55e01a2343ef37ec8ace29e634f44409123869d7..d39308b1ce11a881d5752fedf1fc500ba68ae365 100644
--- a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/Parse.java
+++ b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/Parse.java
@@ -96,9 +96,9 @@ public abstract class Parse extends RBuiltinNode.Arg6 {
     @Child private CastStringNode castStringNode;
     @Child private CastToVectorNode castVectorNode;
 
-    @Child private SetFixedAttributeNode setSrcRefAttrNode = SetFixedAttributeNode.create("srcref");
-    @Child private SetFixedAttributeNode setWholeSrcRefAttrNode = SetFixedAttributeNode.create("wholeSrcref");
-    @Child private SetFixedAttributeNode setSrcFileAttrNode = SetFixedAttributeNode.create("srcfile");
+    @Child private SetFixedAttributeNode setSrcRefAttrNode = SetFixedAttributeNode.create(RRuntime.R_SRCREF);
+    @Child private SetFixedAttributeNode setWholeSrcRefAttrNode = SetFixedAttributeNode.create(RRuntime.R_WHOLE_SRCREF);
+    @Child private SetFixedAttributeNode setSrcFileAttrNode = SetFixedAttributeNode.create(RRuntime.R_SRCFILE);
 
     static {
         Casts casts = new Casts(Parse.class);
diff --git a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/PrintFunctions.java b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/PrintFunctions.java
index 873b10c3c1e1777b846da88ff8d5d53e37c9ea5f..3c217de32aa4b145a881ee4c6bf20e5f8a6d4a02 100644
--- a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/PrintFunctions.java
+++ b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/PrintFunctions.java
@@ -93,7 +93,7 @@ public class PrintFunctions {
                         @Cached("createShowFunction(frame)") RFunction showFunction) {
             if (noOpt) {
                 // S4 should only be called in case noOpt is true
-                RContext.getEngine().evalFunction(showFunction, null, null, null, o);
+                RContext.getEngine().evalFunction(showFunction, null, null, true, null, o);
             } else {
                 printDefault(showFunction, digits, quote, naPrint, printGap, right, max, useSource, noOpt);
             }
diff --git a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/StandardGeneric.java b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/StandardGeneric.java
index 0334382ddc1d606ea1bbd9dfb1ba213dda04c6cc..cdd90a090899456d7e339fbb92da3e3f5d0f06a8 100644
--- a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/StandardGeneric.java
+++ b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/StandardGeneric.java
@@ -97,7 +97,7 @@ public abstract class StandardGeneric extends RBuiltinNode.Arg2 {
             // and this slow path should not be executed again
             REnvironment methodsEnv = REnvironment.getRegisteredNamespace("methods");
             RFunction currentFunction = ReadVariableNode.lookupFunction(".getMethodsTable", methodsEnv.getFrame(), true, true);
-            mtable = (REnvironment) RContext.getEngine().evalFunction(currentFunction, frame.materialize(), RCaller.create(frame, getOriginalCall()), null, def);
+            mtable = (REnvironment) RContext.getEngine().evalFunction(currentFunction, frame.materialize(), RCaller.create(frame, getOriginalCall()), true, null, def);
         }
         RList sigArgs = (RList) readSigARgs.execute(null, fnFrame);
         int sigLength = (int) castIntScalar.doCast(readSigLength.execute(null, fnFrame));
diff --git a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/UpdateNames.java b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/UpdateNames.java
index c58e054d13d7f8a640da45c7c0c134c4243714f8..a2f76704d12304fa76d7e7e413bd859021cf90b7 100644
--- a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/UpdateNames.java
+++ b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/UpdateNames.java
@@ -34,6 +34,7 @@ import com.oracle.truffle.r.nodes.builtin.RBuiltinNode;
 import com.oracle.truffle.r.nodes.unary.CastStringNode;
 import com.oracle.truffle.r.nodes.unary.CastStringNodeGen;
 import com.oracle.truffle.r.nodes.unary.GetNonSharedNode;
+import com.oracle.truffle.r.runtime.RError;
 import com.oracle.truffle.r.runtime.RError.Message;
 import com.oracle.truffle.r.runtime.builtins.RBuiltin;
 import com.oracle.truffle.r.runtime.data.RDataFactory;
@@ -48,7 +49,8 @@ public abstract class UpdateNames extends RBuiltinNode.Arg2 {
     @Child private CastStringNode castStringNode;
 
     static {
-        Casts.noCasts(UpdateNames.class);
+        Casts casts = new Casts(UpdateNames.class);
+        casts.arg("x").mustNotBeNull(RError.Message.SET_ATTRIBUTES_ON_NULL);
     }
 
     private Object castString(Object o) {
diff --git a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/UpdateSlot.java b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/UpdateSlot.java
index 560b5fc442c9b3f045b699ee24fb4b268c34dd5e..083a7bcbe272cfe059e3f61900662e65c0c086fc 100644
--- a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/UpdateSlot.java
+++ b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/UpdateSlot.java
@@ -111,7 +111,7 @@ public abstract class UpdateSlot extends RBuiltinNode.Arg3 {
                                 checkSlotAssignFunction.getEnclosingFrame(), null);
             } else {
                 // slow path
-                RContext.getEngine().evalFunction(currentFunction, frame.materialize(), RCaller.createInvalid(frame), null, objClass, name, valClass);
+                RContext.getEngine().evalFunction(currentFunction, frame.materialize(), RCaller.createInvalid(frame), true, null, objClass, name, valClass);
             }
         }
     }
diff --git a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/Xtfrm.java b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/Xtfrm.java
index abac7f57b85b22c01cf560bddb9d11ab29e4fe4f..a6f492fda37610985d91e463e67177c96dd1f5f5 100644
--- a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/Xtfrm.java
+++ b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/Xtfrm.java
@@ -67,6 +67,6 @@ public abstract class Xtfrm extends RBuiltinNode.Arg1 {
             env = REnvironment.createEnclosingEnvironments(frame.materialize());
         }
         RFunction func = (RFunction) getNode.execute(frame, "xtfrm.default", env, RType.Function.getName(), true);
-        return RContext.getEngine().evalFunction(func, null, null, null, x);
+        return RContext.getEngine().evalFunction(func, null, null, true, null, x);
     }
 }
diff --git a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/printer/S4ObjectPrinter.java b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/printer/S4ObjectPrinter.java
index 2ff2c2bf36eaaf8fa1c1123cf8b40b2dec33b8e6..173799ff0b9808f9564f0908b66fd78ca324fc5c 100644
--- a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/printer/S4ObjectPrinter.java
+++ b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/printer/S4ObjectPrinter.java
@@ -63,7 +63,7 @@ final class S4ObjectPrinter implements ValuePrinter<RS4Object> {
 
     static void printS4(PrintContext printCtx, Object o) {
         Frame frame = com.oracle.truffle.r.runtime.Utils.getActualCurrentFrame();
-        RContext.getEngine().evalFunction(createShowFunction(frame), null, null, null, o);
+        RContext.getEngine().evalFunction(createShowFunction(frame), null, null, true, null, o);
         // The show function prints an additional new line character. The following attribute
         // instructs the ValuePrinter.println method not to print the new line since it was
         // already printed.
diff --git a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/fastr/FastRInterop.java b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/fastr/FastRInterop.java
index 0857f0b53170e67e2b6042ce574718bad030cbff..4c2f44c65435784378c9ac91b3fb8e3f55df718b 100644
--- a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/fastr/FastRInterop.java
+++ b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/fastr/FastRInterop.java
@@ -53,6 +53,7 @@ import com.oracle.truffle.api.interop.java.JavaInterop;
 import com.oracle.truffle.api.nodes.DirectCallNode;
 import com.oracle.truffle.api.nodes.Node;
 import com.oracle.truffle.api.profiles.ConditionProfile;
+import com.oracle.truffle.api.profiles.ValueProfile;
 import com.oracle.truffle.api.source.Source;
 import com.oracle.truffle.api.source.Source.Builder;
 import com.oracle.truffle.r.nodes.builtin.CastBuilder.Predef;
@@ -92,6 +93,12 @@ import java.util.logging.Logger;
 
 public class FastRInterop {
 
+    private static boolean isTesting = false;
+
+    public static void testingMode() {
+        isTesting = true;
+    }
+
     @RBuiltin(name = ".fastr.interop.eval", visibility = OFF, kind = PRIMITIVE, parameterNames = {"mimeType", "source"}, behavior = COMPLEX)
     public abstract static class Eval extends RBuiltinNode.Arg2 {
 
@@ -420,26 +427,31 @@ public class FastRInterop {
         }
     }
 
-    @RBuiltin(name = ".fastr.java.class", visibility = ON, kind = PRIMITIVE, parameterNames = {"class"}, behavior = COMPLEX)
-    public abstract static class JavaClass extends RBuiltinNode.Arg1 {
+    @RBuiltin(name = ".fastr.java.class", visibility = ON, kind = PRIMITIVE, parameterNames = {"class", "silent"}, behavior = COMPLEX)
+    public abstract static class JavaClass extends RBuiltinNode.Arg2 {
 
         static {
             Casts casts = new Casts(JavaClass.class);
             casts.arg("class").mustBe(stringValue()).asStringVector().mustBe(Predef.singleElement()).findFirst();
+            casts.arg("silent").mapMissing(Predef.constant(RRuntime.LOGICAL_FALSE)).mustBe(logicalValue().or(Predef.nullValue())).asLogicalVector().mustBe(singleElement()).findFirst().mustBe(
+                            notLogicalNA()).map(Predef.toBoolean());
         }
 
         @Specialization
         @TruffleBoundary
-        public TruffleObject javaClass(String clazz) {
+        public TruffleObject javaClass(String clazz, boolean silent) {
             try {
-                return JavaInterop.asTruffleObject(Class.forName(clazz));
+                return JavaInterop.asTruffleObject(Class.forName(clazz.replaceAll("/", ".")));
             } catch (ClassNotFoundException | SecurityException | IllegalArgumentException e) {
+                if (silent) {
+                    return RNull.instance;
+                }
                 throw error(RError.Message.GENERIC, "error while accessing Java class: " + e.getMessage());
             }
         }
     }
 
-    @ImportStatic({Message.class, RRuntime.class})
+    @ImportStatic({RRuntime.class})
     @RBuiltin(name = ".fastr.java.isArray", visibility = ON, kind = PRIMITIVE, parameterNames = {"obj"}, behavior = COMPLEX)
     public abstract static class IsJavaArray extends RBuiltinNode.Arg1 {
 
@@ -506,7 +518,7 @@ public class FastRInterop {
             Casts casts = new Casts(ToJavaArray.class);
             casts.arg("x").mustNotBeMissing();
             casts.arg("className").allowMissing().mustBe(stringValue()).asStringVector().mustBe(Predef.singleElement()).findFirst();
-            casts.arg("flat").mapMissing(Predef.constant(RRuntime.asLogical(true))).mustBe(logicalValue().or(Predef.nullValue())).asLogicalVector().mustBe(singleElement()).findFirst().mustBe(
+            casts.arg("flat").mapMissing(Predef.constant(RRuntime.LOGICAL_TRUE)).mustBe(logicalValue().or(Predef.nullValue())).asLogicalVector().mustBe(singleElement()).findFirst().mustBe(
                             notLogicalNA()).map(Predef.toBoolean());
         }
 
@@ -796,8 +808,9 @@ public class FastRInterop {
                 }
                 Object result = ForeignAccess.sendNew(sendNew, clazz, argValues);
                 return RRuntime.java2R(result);
-            } catch (SecurityException | IllegalArgumentException | UnsupportedTypeException | ArityException | UnsupportedMessageException e) {
-                throw error(RError.Message.GENERIC, "error during Java object instantiation: " + e.getMessage());
+            } catch (IllegalStateException | SecurityException | IllegalArgumentException | UnsupportedTypeException | ArityException | UnsupportedMessageException e) {
+                String msg = isTesting ? "error during Java object instantiation" : "error during Java object instantiation: " + e.getMessage();
+                throw error(RError.Message.GENERIC, msg);
             }
         }
 
@@ -806,4 +819,23 @@ public class FastRInterop {
             throw error(RError.Message.GENERIC, "interop object needed as receiver of NEW message");
         }
     }
+
+    @ImportStatic(RRuntime.class)
+    @RBuiltin(name = ".fastr.interop.isExternal", visibility = ON, kind = PRIMITIVE, parameterNames = {"obj"}, behavior = COMPLEX)
+    public abstract static class IsExternal extends RBuiltinNode.Arg1 {
+
+        static {
+            Casts.noCasts(IsExternal.class);
+        }
+
+        @Specialization(guards = {"isForeignObject(obj)"})
+        public byte isExternal(TruffleObject obj) {
+            return RRuntime.LOGICAL_TRUE;
+        }
+
+        @Fallback
+        public byte isExternal(Object obj) {
+            return RRuntime.LOGICAL_FALSE;
+        }
+    }
 }
diff --git a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/fastr/FastRSourceInfo.java b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/fastr/FastRSourceInfo.java
index ed3430a7b325f4ad1d1f6abd39ecc8fb61e57102..5f9863bb15b9b99732b13ce28e22876aaab8e349 100644
--- a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/fastr/FastRSourceInfo.java
+++ b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/fastr/FastRSourceInfo.java
@@ -22,15 +22,20 @@
  */
 package com.oracle.truffle.r.nodes.builtin.fastr;
 
+import static com.oracle.truffle.r.nodes.builtin.CastBuilder.Predef.instanceOf;
 import static com.oracle.truffle.r.runtime.RVisibility.ON;
 import static com.oracle.truffle.r.runtime.builtins.RBuiltinKind.PRIMITIVE;
 
+import com.oracle.truffle.api.dsl.Fallback;
 import com.oracle.truffle.api.dsl.Specialization;
+import com.oracle.truffle.api.nodes.Node;
 import com.oracle.truffle.api.source.SourceSection;
 import com.oracle.truffle.r.nodes.builtin.RBuiltinNode;
+import com.oracle.truffle.r.runtime.RError;
 import com.oracle.truffle.r.runtime.builtins.RBehavior;
 import com.oracle.truffle.r.runtime.builtins.RBuiltin;
 import com.oracle.truffle.r.runtime.data.RFunction;
+import com.oracle.truffle.r.runtime.data.RLanguage;
 import com.oracle.truffle.r.runtime.data.RNull;
 
 /**
@@ -40,25 +45,37 @@ import com.oracle.truffle.r.runtime.data.RNull;
 public abstract class FastRSourceInfo extends RBuiltinNode.Arg1 {
 
     static {
-        Casts.noCasts(FastRSourceInfo.class);
+        Casts casts = new Casts(FastRSourceInfo.class);
+        casts.arg("fun").defaultError(RError.Message.GENERIC, "Only functions are allowed.").mustBe(instanceOf(RFunction.class).or(instanceOf(RLanguage.class)));
     }
 
     @Specialization
-    public Object srcInfo(@SuppressWarnings("unused") RNull fun) {
-        return RNull.instance;
+    public Object srcInfo(RFunction fun) {
+        return srcInfo(fun.getRootNode());
     }
 
     @Specialization
-    public Object srcInfo(RFunction fun) {
-        SourceSection ss = fun.getRootNode().getSourceSection();
+    public Object srcInfo(RLanguage fun) {
+        return srcInfo(fun.getRep());
+    }
+
+    private Object srcInfo(Node fun) {
+        SourceSection ss = fun.getSourceSection();
         if (ss != null) {
             String path = ss.getSource().getPath();
             if (path != null) {
                 return path + "#" + ss.getStartLine();
+            } else if (ss.getSource().getURI() != null) {
+                return ss.getSource().getURI() + "#" + ss.getStartLine();
             } else {
                 return ss.getSource().getName();
             }
         }
         return RNull.instance;
     }
+
+    @Fallback
+    public Object srcInfo(@SuppressWarnings("unused") Object o) {
+        return RNull.instance;
+    }
 }
diff --git a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/fastr/FastRTreeStats.java b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/fastr/FastRTreeStats.java
index 75a82d67668729717c7458700c24757ba51b08f8..71a45e61427f6db63500611e90e59991cd859f64 100644
--- a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/fastr/FastRTreeStats.java
+++ b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/fastr/FastRTreeStats.java
@@ -73,7 +73,7 @@ public abstract class FastRTreeStats extends RBuiltinNode.Arg1 {
             String binding = bindings.getDataAt(i);
             Object value = env.get(binding);
             if (value instanceof RPromise) {
-                value = PromiseHelperNode.evaluateSlowPath(null, (RPromise) value);
+                value = PromiseHelperNode.evaluateSlowPath((RPromise) value);
 
             }
             if (value instanceof RFunction) {
diff --git a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/methods/R/methods_overrides.R b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/methods/R/methods_overrides.R
index 99c947a62dbc8ce4e07359f7873abf9baab63558..698ae85bc701c39fe45b7d6ae8f35fcd75ae7345 100644
--- a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/methods/R/methods_overrides.R
+++ b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/methods/R/methods_overrides.R
@@ -23,4 +23,20 @@ eval(expression({
 # this function is replaced with a primitive because it is expected to
 # modify its argument in-place, which can clash with argument refcount handling
 `slot<-` <- .fastr.methods.slotassign
+
+new <- function (Class, ...) {
+    if(is.character(Class)) {
+        javaClass <- .fastr.java.class(Class, silent=TRUE)
+        if(!is.null(javaClass)) {
+            Class <- javaClass
+        }
+    }
+    if(.fastr.interop.isExternal(Class)) {
+        .fastr.interop.new(Class, ...)
+    } else {
+        ClassDef <- getClass(Class, where = topenv(parent.frame()))
+        value <- .Call(C_new_object, ClassDef)
+        initialize(value, ...)
+    }
+}
 }), asNamespace("methods"))
diff --git a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/tools/R/tools_overrides.R b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/tools/R/tools_overrides.R
new file mode 100644
index 0000000000000000000000000000000000000000..0899b8303b49a63a02bb3669bf319aa373637eab
--- /dev/null
+++ b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/tools/R/tools_overrides.R
@@ -0,0 +1,165 @@
+#
+# This material is distributed under the GNU General Public License
+# Version 2. You may review the terms of this license at
+# http://www.gnu.org/licenses/gpl-2.0.html
+#
+# Copyright (c) 1995-2015, The R Core Team
+# Copyright (c) 2003, The R Foundation
+# Copyright (c) 2017, Oracle and/or its affiliates
+#
+# All rights reserved.
+#
+
+
+
+# The modified function ".install_package_code_files" copies the source 
+# file of the package to be installed into the installation directory 
+# (see comments starting with "FastR extension:").
+# The code is then parsed from these files such that the parsed
+# elements are associated with the source files in the installation 
+# directory.
+
+eval(expression({
+.install_package_code_files <-
+function(dir, outDir)
+{
+    if(!dir.exists(dir))
+        stop(gettextf("directory '%s' does not exist", dir),
+             domain = NA)
+    dir <- file_path_as_absolute(dir)
+
+    ## Attempt to set the LC_COLLATE locale to 'C' to turn off locale
+    ## specific sorting.
+    curLocale <- Sys.getlocale("LC_COLLATE")
+    on.exit(Sys.setlocale("LC_COLLATE", curLocale), add = TRUE)
+    ## (Guaranteed to work as per the Sys.setlocale() docs.)
+    lccollate <- "C"
+    if(Sys.setlocale("LC_COLLATE", lccollate) != lccollate) {
+        ## <NOTE>
+        ## I don't think we can give an error here.
+        ## It may be the case that Sys.setlocale() fails because the "OS
+        ## reports request cannot be honored" (src/main/platform.c), in
+        ## which case we should still proceed ...
+        warning("cannot turn off locale-specific sorting via LC_COLLATE")
+        ## </NOTE>
+    }
+
+    ## We definitely need a valid DESCRIPTION file.
+    db <- .read_description(file.path(dir, "DESCRIPTION"))
+
+    codeDir <- file.path(dir, "R")
+    if(!dir.exists(codeDir)) return(invisible())
+
+    codeFiles <- list_files_with_type(codeDir, "code", full.names = FALSE)
+
+    collationField <-
+        c(paste("Collate", .OStype(), sep = "."), "Collate")
+    if(any(i <- collationField %in% names(db))) {
+        collationField <- collationField[i][1L]
+        codeFilesInCspec <- .read_collate_field(db[collationField])
+        ## Duplicated entries in the collation spec?
+        badFiles <-
+            unique(codeFilesInCspec[duplicated(codeFilesInCspec)])
+        if(length(badFiles)) {
+            out <- gettextf("\nduplicated files in '%s' field:",
+                            collationField)
+            out <- paste(out,
+                         paste(" ", badFiles, collapse = "\n"),
+                         sep = "\n")
+            stop(out, domain = NA)
+        }
+        ## See which files are listed in the collation spec but don't
+        ## exist.
+        badFiles <- setdiff(codeFilesInCspec, codeFiles)
+        if(length(badFiles)) {
+            out <- gettextf("\nfiles in '%s' field missing from '%s':",
+                            collationField,
+                            codeDir)
+            out <- paste(out,
+                         paste(" ", badFiles, collapse = "\n"),
+                         sep = "\n")
+            stop(out, domain = NA)
+        }
+        ## See which files exist but are missing from the collation
+        ## spec.  Note that we do not want the collation spec to use
+        ## only a subset of the available code files.
+        badFiles <- setdiff(codeFiles, codeFilesInCspec)
+        if(length(badFiles)) {
+            out <- gettextf("\nfiles in '%s' missing from '%s' field:",
+                            codeDir,
+                            collationField)
+            out <- paste(out,
+                         paste(" ", badFiles, collapse = "\n"),
+                         sep = "\n")
+            stop(out, domain = NA)
+        }
+        ## Everything's groovy ...
+        codeFiles <- codeFilesInCspec
+    }
+
+    codeFiles <- file.path(codeDir, codeFiles)
+
+    if(!dir.exists(outDir) && !dir.create(outDir))
+        stop(gettextf("cannot open directory '%s'", outDir),
+             domain = NA)
+    outCodeDir <- file.path(outDir, "R")
+    if(!dir.exists(outCodeDir) && !dir.create(outCodeDir))
+        stop(gettextf("cannot open directory '%s'", outCodeDir),
+             domain = NA)
+    outFile <- file.path(outCodeDir, db["Package"])
+    if(!file.create(outFile))
+        stop(gettextf("unable to create '%s'", outFile), domain = NA)
+    writeLines(paste0(".packageName <- \"", db["Package"], "\""),
+               outFile)
+    enc <- as.vector(db["Encoding"])
+    need_enc <- !is.na(enc) # Encoding was specified
+    ## assume that if locale is 'C' we can used 8-bit encodings unchanged.
+    if(need_enc && !(Sys.getlocale("LC_CTYPE") %in% c("C", "POSIX"))) {
+        con <- file(outFile, "a")
+        on.exit(close(con))  # Windows does not like files left open
+        for(f in codeFiles) {
+            tmp <- iconv(readLines(f, warn = FALSE), from = enc, to = "")
+            if(length(bad <- which(is.na(tmp)))) {
+                warning(sprintf(ngettext(length(bad),
+                                         "unable to re-encode %s line %s",
+                                         "unable to re-encode %s lines %s"),
+                                sQuote(basename(f)),
+                                paste(bad, collapse = ", ")),
+                        domain = NA, call. = FALSE)
+                tmp <- iconv(readLines(f, warn = FALSE), from = enc, to = "",
+                             sub = "byte")
+            }
+
+			# FastR extension: also copy original source file
+            singleOutFile <- file.path(outCodeDir, basename(f))
+            writeLines(tmp, file(singleOutFile))
+
+            writeLines(paste0("#line 1 \"", singleOutFile, "\""), con)
+            writeLines(tmp, con)
+        }
+	close(con); on.exit()
+    } else {
+        ## <NOTE>
+        ## It may be safer to do
+        ##   writeLines(sapply(codeFiles, readLines), outFile)
+        ## instead, but this would be much slower ...
+        ## use fast version of file.append that ensures LF between files
+
+		# FastR extension: also copy original source file
+        singleOutFiles <- file.path(outCodeDir, basename(codeFiles))
+        file.copy(codeFiles, singleOutFiles)
+
+        if(!all(.file_append_ensuring_LFs(outFile, singleOutFiles)))
+            stop("unable to write code files")
+        ## </NOTE>
+    }
+    ## A syntax check here, so that we do not install a broken package.
+    ## FIXME:  this is only needed if we don't lazy load, as the lazy loader
+    ## would detect the error.
+    op <- options(showErrorCalls=FALSE)
+    on.exit(options(op))
+    parse(outFile)
+    invisible()
+}
+
+}), asNamespace("tools"))
diff --git a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/access/AccessSlotNode.java b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/access/AccessSlotNode.java
index 1d8fccff965444f3ffc3f9f100a442e4dfab6db3..61f7c1074d7076934b15812a134481813c0953eb 100644
--- a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/access/AccessSlotNode.java
+++ b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/access/AccessSlotNode.java
@@ -76,7 +76,7 @@ public abstract class AccessSlotNode extends RBaseNode {
                 // TODO: any way to cache it or use a mechanism similar to overrides?
                 REnvironment methodsNamespace = REnvironment.getRegisteredNamespace("methods");
                 RFunction dataPart = getDataPartFunction(methodsNamespace);
-                return RContext.getEngine().evalFunction(dataPart, methodsNamespace.getFrame(), RCaller.create(null, RASTUtils.getOriginalCall(this)), null, object);
+                return RContext.getEngine().evalFunction(dataPart, methodsNamespace.getFrame(), RCaller.create(null, RASTUtils.getOriginalCall(this)), true, null, object);
             } else if (name == RRuntime.NAMES_ATTR_KEY && object instanceof RAbstractVector) {
                 assert false; // RS4Object can never be a vector?
                 return RNull.instance;
@@ -126,7 +126,7 @@ public abstract class AccessSlotNode extends RBaseNode {
         // TODO: any way to cache it or use a mechanism similar to overrides?
         REnvironment methodsNamespace = REnvironment.getRegisteredNamespace("methods");
         RFunction dataPart = getDataPartFunction(methodsNamespace);
-        return RContext.getEngine().evalFunction(dataPart, methodsNamespace.getFrame(), RCaller.create(null, RASTUtils.getOriginalCall(this)), null, object);
+        return RContext.getEngine().evalFunction(dataPart, methodsNamespace.getFrame(), RCaller.create(null, RASTUtils.getOriginalCall(this)), true, null, object);
     }
 
     // this is really a fallback specialization but @Fallback does not work here (because of the
diff --git a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/access/UpdateSlotNode.java b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/access/UpdateSlotNode.java
index 59d8ab2c49c12060a5c96d63205779293f1f01e2..f895c1d2bb2c1a2fbd0d82ebf19e56f2ca2022ec 100644
--- a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/access/UpdateSlotNode.java
+++ b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/access/UpdateSlotNode.java
@@ -59,7 +59,7 @@ public abstract class UpdateSlotNode extends RBaseNode {
         REnvironment methodsNamespace = REnvironment.getRegisteredNamespace("methods");
         Object f = methodsNamespace.findFunction(SET_DATA_PART);
         RFunction dataPart = (RFunction) RContext.getRRuntimeASTAccess().forcePromise(SET_DATA_PART, f);
-        return RContext.getEngine().evalFunction(dataPart, methodsNamespace.getFrame(), RCaller.createInvalid(null), null, object, prepareValue(value), RRuntime.LOGICAL_TRUE);
+        return RContext.getEngine().evalFunction(dataPart, methodsNamespace.getFrame(), RCaller.createInvalid(null), true, null, object, prepareValue(value), RRuntime.LOGICAL_TRUE);
     }
 
     protected boolean isData(String name) {
diff --git a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/access/variables/LocalReadVariableNode.java b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/access/variables/LocalReadVariableNode.java
index 4ce17a2cce609f80633704791c90461355b68150..19334b09e2066a604b4023ff6051b5c155075d2e 100644
--- a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/access/variables/LocalReadVariableNode.java
+++ b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/access/variables/LocalReadVariableNode.java
@@ -47,7 +47,7 @@ public final class LocalReadVariableNode extends Node {
     private final Object identifier;
     private final boolean forceResult;
 
-    @CompilationFinal private boolean[] seenValueKinds;
+    @CompilationFinal(dimensions = 1) private boolean[] seenValueKinds;
     @CompilationFinal private ValueProfile valueProfile;
     @CompilationFinal private ConditionProfile isNullProfile;
     @CompilationFinal private ConditionProfile isMissingProfile;
diff --git a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/access/variables/ReadVariableNode.java b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/access/variables/ReadVariableNode.java
index 5df1356f04147c5cae76348b71b5d1212b09636f..dc171181ab5335a264ed0dc034392008002875f6 100644
--- a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/access/variables/ReadVariableNode.java
+++ b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/access/variables/ReadVariableNode.java
@@ -144,7 +144,7 @@ public final class ReadVariableNode extends RSourceSectionNode implements RSynta
     private final ReadKind kind;
     private int invalidationCount;
 
-    @CompilationFinal private final boolean[] seenValueKinds = new boolean[FrameSlotKind.values().length];
+    @CompilationFinal(dimensions = 1) private final boolean[] seenValueKinds = new boolean[FrameSlotKind.values().length];
 
     private ReadVariableNode(SourceSection sourceSection, Object identifier, RType mode, ReadKind kind) {
         super(sourceSection);
@@ -422,7 +422,7 @@ public final class ReadVariableNode extends RSourceSectionNode implements RSynta
     private static final class MultiAssumptionLevel extends FrameLevel {
 
         private final FrameLevel next;
-        @CompilationFinal private final Assumption[] assumptions;
+        @CompilationFinal(dimensions = 1) private final Assumption[] assumptions;
 
         private MultiAssumptionLevel(FrameLevel next, Assumption... assumptions) {
             this.next = next;
@@ -755,7 +755,7 @@ public final class ReadVariableNode extends RSourceSectionNode implements RSynta
                         throw RError.error(RError.SHOW_CALLER, RError.Message.ARGUMENT_MISSING, identifier);
                     }
                     if (value instanceof RPromise) {
-                        return PromiseHelperNode.evaluateSlowPath(null, (RPromise) value);
+                        return PromiseHelperNode.evaluateSlowPath((RPromise) value);
                     }
                     return value;
                 }
diff --git a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/access/vector/CachedExtractVectorNode.java b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/access/vector/CachedExtractVectorNode.java
index 7e8564b4ecffa5f5b5fb7e88e6c2c72bb18df1fd..0ce9148bd595ef13b9a3a6a175f26ab6590cea02 100644
--- a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/access/vector/CachedExtractVectorNode.java
+++ b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/access/vector/CachedExtractVectorNode.java
@@ -249,6 +249,7 @@ final class CachedExtractVectorNode extends CachedVectorNode {
         return extractedVector;
     }
 
+    @TruffleBoundary
     private Object doEnvironment(REnvironment env, Object[] positions) {
         if (mode.isSubset()) {
             throw error(RError.Message.OBJECT_NOT_SUBSETTABLE, RType.Environment.getName());
@@ -258,7 +259,7 @@ final class CachedExtractVectorNode extends CachedVectorNode {
         if (positionString != null) {
             Object obj = env.get(positionString);
             if (promiseInEnvironment.profile(obj instanceof RPromise)) {
-                obj = PromiseHelperNode.evaluateSlowPath(null, (RPromise) obj);
+                obj = PromiseHelperNode.evaluateSlowPath((RPromise) obj);
             }
             return obj == null ? RNull.instance : obj;
         }
diff --git a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/access/vector/SearchFirstStringNode.java b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/access/vector/SearchFirstStringNode.java
index 68f3ed04763a21695a242de4f7e6ee9bc6ac17ab..b1baf683b5031c769d903b4ef3db0054f8a93623 100644
--- a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/access/vector/SearchFirstStringNode.java
+++ b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/access/vector/SearchFirstStringNode.java
@@ -64,7 +64,7 @@ final class SearchFirstStringNode extends Node {
     private final boolean useNAForNotFound;
     private final boolean exactMatch;
 
-    @CompilationFinal private int[] cachedIndices;
+    @CompilationFinal(dimensions = 1) private int[] cachedIndices;
 
     private SearchFirstStringNode(boolean exactMatch, boolean useNAForNotFound) {
         this.exactMatch = exactMatch;
diff --git a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/ffi/JavaUpCallsRFFIImpl.java b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/ffi/JavaUpCallsRFFIImpl.java
index a6e270047ddfc99e8f2ab0d7170fb53245a143d2..5e88b23d2c8ba06309f6249d69c0fd12e26bd681 100644
--- a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/ffi/JavaUpCallsRFFIImpl.java
+++ b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/ffi/JavaUpCallsRFFIImpl.java
@@ -44,6 +44,7 @@ import com.oracle.truffle.api.source.SourceSection;
 import com.oracle.truffle.r.nodes.RASTUtils;
 import com.oracle.truffle.r.nodes.ffi.ParseResult.ParseStatus;
 import com.oracle.truffle.r.nodes.function.ClassHierarchyNode;
+import com.oracle.truffle.r.runtime.ArgumentsSignature;
 import com.oracle.truffle.r.runtime.RArguments;
 import com.oracle.truffle.r.runtime.RCaller;
 import com.oracle.truffle.r.runtime.RCleanUp;
@@ -204,7 +205,7 @@ public abstract class JavaUpCallsRFFIImpl implements UpCallsRFFI {
     public Object R_do_MAKE_CLASS(Object clazz) {
         String name = "getClass";
         RFunction getClass = (RFunction) RContext.getRRuntimeASTAccess().forcePromise(name, REnvironment.getRegisteredNamespace("methods").get(name));
-        return RContext.getEngine().evalFunction(getClass, null, RCaller.createInvalid(null), null, clazz);
+        return RContext.getEngine().evalFunction(getClass, null, RCaller.createInvalid(null), true, null, clazz);
     }
 
     @Override
@@ -733,10 +734,11 @@ public abstract class JavaUpCallsRFFIImpl implements UpCallsRFFI {
             RFunction f = (RFunction) l.car();
             Object args = l.cdr();
             if (args == RNull.instance) {
-                result = RContext.getEngine().evalFunction(f, env == REnvironment.globalEnv() ? null : ((REnvironment) env).getFrame(), RCaller.topLevel, null, new Object[0]);
+                result = RContext.getEngine().evalFunction(f, env == REnvironment.globalEnv() ? null : ((REnvironment) env).getFrame(), RCaller.topLevel, true, null, new Object[0]);
             } else {
                 RList argsList = ((RPairList) args).toRList();
-                result = RContext.getEngine().evalFunction(f, env == REnvironment.globalEnv() ? null : ((REnvironment) env).getFrame(), RCaller.topLevel, argsList.getNames(),
+                result = RContext.getEngine().evalFunction(f, env == REnvironment.globalEnv() ? null : ((REnvironment) env).getFrame(), RCaller.topLevel, true,
+                                ArgumentsSignature.fromNamesAttribute(argsList.getNames()),
                                 argsList.getDataNonShared());
             }
         } else {
@@ -794,7 +796,7 @@ public abstract class JavaUpCallsRFFIImpl implements UpCallsRFFI {
     @Override
     public int R_compute_identical(Object x, Object y, int flags) {
         RFunction indenticalBuiltin = RContext.lookupBuiltin("identical");
-        Object res = RContext.getEngine().evalFunction(indenticalBuiltin, null, null, null, x, y, RRuntime.asLogical((!((flags & 1) == 0))),
+        Object res = RContext.getEngine().evalFunction(indenticalBuiltin, null, null, true, null, x, y, RRuntime.asLogical((!((flags & 1) == 0))),
                         RRuntime.asLogical((!((flags & 2) == 0))), RRuntime.asLogical((!((flags & 4) == 0))), RRuntime.asLogical((!((flags & 8) == 0))), RRuntime.asLogical((!((flags & 16) == 0))));
         return (int) res;
     }
diff --git a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/function/ArgumentMatcher.java b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/function/ArgumentMatcher.java
index 7c2fefce91fa49c3feb87db49592190fa9eebbde..db25097a00b0d4d46095db9db9ec3ee1fc72274c 100644
--- a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/function/ArgumentMatcher.java
+++ b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/function/ArgumentMatcher.java
@@ -232,7 +232,6 @@ public class ArgumentMatcher {
         }, index -> evaluatedArgs.getSignature().getName(index), null);
 
         Object[] evaledArgs = new Object[match.resultPermutation.length];
-
         for (int formalIndex = 0; formalIndex < match.resultPermutation.length; formalIndex++) {
             int suppliedIndex = match.resultPermutation[formalIndex];
 
@@ -260,7 +259,7 @@ public class ArgumentMatcher {
                 evaledArgs[formalIndex] = evaluatedArgs.getArgument(suppliedIndex);
             }
         }
-        return new RArgsValuesAndNames(evaledArgs, formals.getSignature());
+        return new RArgsValuesAndNames(evaledArgs, match.resultSignature);
     }
 
     /**
@@ -483,8 +482,8 @@ public class ArgumentMatcher {
         public static final int UNMATCHED = -1;
         public static final int VARARGS = -2;
 
-        @CompilationFinal private final int[] resultPermutation;
-        @CompilationFinal private final int[] varargsPermutation;
+        @CompilationFinal(dimensions = 1) private final int[] resultPermutation;
+        @CompilationFinal(dimensions = 1) private final int[] varargsPermutation;
         private final ArgumentsSignature varargsSignature;
 
         /**
diff --git a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/function/CallArgumentsNode.java b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/function/CallArgumentsNode.java
index cc46a97dbc6e04ef47e8496e7a2c0e8fcd874583..5501e65549862d5d6a213f040011bbd808784956 100644
--- a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/function/CallArgumentsNode.java
+++ b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/function/CallArgumentsNode.java
@@ -73,7 +73,7 @@ public final class CallArgumentsNode extends RBaseNode implements UnmatchedArgum
      * If a supplied argument is a {@link ReadVariableNode} whose name is "...", this field contains
      * the index of the name. Otherwise it is an empty list.
      */
-    @CompilationFinal private final int[] varArgsSymbolIndices;
+    @CompilationFinal(dimensions = 1) private final int[] varArgsSymbolIndices;
 
     private final IdentityHashMap<RNode, Closure> closureCache = new IdentityHashMap<>();
 
diff --git a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/function/CallMatcherNode.java b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/function/CallMatcherNode.java
index 0e77db678e9fdab5a97ca7e600f8e50b192d17aa..88f0ec886749048b8b13f2d7ba6eb64f664ab8e2 100644
--- a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/function/CallMatcherNode.java
+++ b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/function/CallMatcherNode.java
@@ -196,7 +196,7 @@ public abstract class CallMatcherNode extends RBaseNode {
          * {@link VarArgsHelper#flattenNames(ArgumentsSignature)} for the interpretation of the
          * values.
          */
-        @CompilationFinal private final long[] preparePermutation;
+        @CompilationFinal(dimensions = 1) private final long[] preparePermutation;
         private final MatchPermutation permutation;
         private final FormalArguments formals;
         @Child private RFastPathNode fastPath;
diff --git a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/function/ClassHierarchyNode.java b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/function/ClassHierarchyNode.java
index dcaab1397e5254f321c47f018e8ef863c3b4a3dc..00a81a5535eb4c606c8de0f490e4841b5d119a3f 100644
--- a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/function/ClassHierarchyNode.java
+++ b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/function/ClassHierarchyNode.java
@@ -257,7 +257,7 @@ abstract class S4Class extends RBaseNode {
             // the assumption here is that the R function can only return either a String or
             // RStringVector
             s4Extends = (RStringVector) castToVector.doCast(
-                            RContext.getEngine().evalFunction(sExtendsForS3Function, methodsEnv.getFrame(), RCaller.create(null, RASTUtils.getOriginalCall(this)), null, classAttr));
+                            RContext.getEngine().evalFunction(sExtendsForS3Function, methodsEnv.getFrame(), RCaller.create(null, RASTUtils.getOriginalCall(this)), true, null, classAttr));
             RContext.getInstance().putS4Extends(classAttr, s4Extends);
         }
         return s4Extends;
diff --git a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/function/FormalArguments.java b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/function/FormalArguments.java
index c5ad9ab6fc76124e931dba51b3e1ede58e2f4801..4935f4c82e118d45a5d3215be04dc1a6f7455a03 100644
--- a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/function/FormalArguments.java
+++ b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/function/FormalArguments.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013, 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2017, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -61,7 +61,7 @@ public final class FormalArguments extends Arguments<RNode> implements ClosureCa
      * builtins), {@link RMissing#instance} and {@link RArgsValuesAndNames#EMPTY} will be replaced
      * with the actual default values on the callee side.
      */
-    @CompilationFinal private final Object[] internalDefaultArguments;
+    @CompilationFinal(dimensions = 1) private final Object[] internalDefaultArguments;
 
     private FormalArguments(RNode[] defaultArguments, Object[] internalDefaultArguments, ArgumentsSignature signature) {
         super(defaultArguments, signature);
diff --git a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/function/PromiseHelperNode.java b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/function/PromiseHelperNode.java
index b635984a2cb511bea0b9716cacf2003f3c1470ea..ade76a40145d1f6dfe9dd841ea13f7a49e28f986 100644
--- a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/function/PromiseHelperNode.java
+++ b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/function/PromiseHelperNode.java
@@ -223,6 +223,11 @@ public class PromiseHelperNode extends RBaseNode {
         return generateValueDefault(frame, promise);
     }
 
+    @TruffleBoundary
+    public static Object evaluateSlowPath(RPromise promise) {
+        return evaluateSlowPath(null, promise);
+    }
+
     public static Object evaluateSlowPath(VirtualFrame frame, RPromise promise) {
         CompilerAsserts.neverPartOfCompilation();
         if (promise.isEvaluated()) {
diff --git a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/function/PromiseNode.java b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/function/PromiseNode.java
index fb72a30e6767f4d7cfe16c7646084ecc216de57a..a954484576061db50e18ce78152450a2b5c67c36 100644
--- a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/function/PromiseNode.java
+++ b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/function/PromiseNode.java
@@ -529,6 +529,10 @@ public abstract class PromiseNode extends RNode {
                     size++;
                     evaluatedArgs[i] = promiseCheckHelper.checkEvaluate(frame, argValue);
                 }
+                if (evaluatedArgs[i] == null) {
+                    CompilerDirectives.transferToInterpreterAndInvalidate();
+                    throw RInternalError.shouldNotReachHere("evaluated argument must not be null");
+                }
             }
             if (containsVarargProfile.profile(containsVarargs)) {
                 return size;
diff --git a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/function/RCallNode.java b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/function/RCallNode.java
index 65788bca319adb4635b5150e578e660e01d77488..8233f4cc27ba2047cc64a0bf5e8ff340351c6144 100644
--- a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/function/RCallNode.java
+++ b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/function/RCallNode.java
@@ -790,10 +790,10 @@ public abstract class RCallNode extends RCallBaseNode implements RSyntaxNode, RS
         @Child private SetVisibilityNode visibility = SetVisibilityNode.create();
 
         // not using profiles to save overhead
-        @CompilationFinal private final boolean[] argEmptySeen;
-        @CompilationFinal private final boolean[] varArgSeen;
-        @CompilationFinal private final boolean[] nonWrapSeen;
-        @CompilationFinal private final boolean[] wrapSeen;
+        @CompilationFinal(dimensions = 1) private final boolean[] argEmptySeen;
+        @CompilationFinal(dimensions = 1) private final boolean[] varArgSeen;
+        @CompilationFinal(dimensions = 1) private final boolean[] nonWrapSeen;
+        @CompilationFinal(dimensions = 1) private final boolean[] wrapSeen;
 
         private final FormalArguments formals;
         private final RBuiltinDescriptor builtinDescriptor;
diff --git a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/function/S3FunctionLookupNode.java b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/function/S3FunctionLookupNode.java
index e7921cf9d346bc1fe281a94b8b7c96ec6d2e4837..7447a2e1f7dddae8c2cc3d7d3a3ae2e60ff97515 100644
--- a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/function/S3FunctionLookupNode.java
+++ b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/function/S3FunctionLookupNode.java
@@ -109,7 +109,7 @@ public abstract class S3FunctionLookupNode extends RBaseNode {
         Result result;
         Object methodsTable = getTable.get();
         if (methodsTable instanceof RPromise) {
-            methodsTable = PromiseHelperNode.evaluateSlowPath(null, (RPromise) methodsTable);
+            methodsTable = PromiseHelperNode.evaluateSlowPath((RPromise) methodsTable);
         }
         MaterializedFrame methodsTableFrame = methodsTable == null ? null : ((REnvironment) methodsTable).getFrame();
 
@@ -173,7 +173,7 @@ public abstract class S3FunctionLookupNode extends RBaseNode {
 
     private static RFunction checkPromise(Object value) {
         if (value instanceof RPromise) {
-            return (RFunction) PromiseHelperNode.evaluateSlowPath(null, (RPromise) value);
+            return (RFunction) PromiseHelperNode.evaluateSlowPath((RPromise) value);
         } else {
             return (RFunction) value;
         }
@@ -280,7 +280,7 @@ public abstract class S3FunctionLookupNode extends RBaseNode {
 
         @Child private S3FunctionLookupNode next;
 
-        @CompilationFinal private final String[] cachedTypeContents;
+        @CompilationFinal(dimensions = 1) private final String[] cachedTypeContents;
         @Children private final ReadVariableNode[] unsuccessfulReadsCallerFrame;
         @Child private LocalReadVariableNode readS3MethodsTable;
         @Children private final LocalReadVariableNode[] unsuccessfulReadsTable;
diff --git a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/function/call/CallRFunctionNode.java b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/function/call/CallRFunctionNode.java
index 02a315c52e90c6df7363da15e1a207af7b8876c0..ee1b587d0e3ccb584dd31d81d7bd75f9d612986d 100644
--- a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/function/call/CallRFunctionNode.java
+++ b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/function/call/CallRFunctionNode.java
@@ -65,8 +65,17 @@ public final class CallRFunctionNode extends Node {
         return callNode;
     }
 
+    public static Object executeSlowpath(RFunction function, RCaller caller, MaterializedFrame callerFrame, Object[] evaluatedArgs, ArgumentsSignature suppliedSignature, DispatchArgs dispatchArgs) {
+        Object[] callArgs = RArguments.create(function, caller, callerFrame, evaluatedArgs, suppliedSignature, function.getEnclosingFrame(), dispatchArgs);
+        return executeSlowpath(function, caller, callerFrame, callArgs);
+    }
+
     public static Object executeSlowpath(RFunction function, RCaller caller, MaterializedFrame callerFrame, Object[] evaluatedArgs, DispatchArgs dispatchArgs) {
         Object[] callArgs = RArguments.create(function, caller, callerFrame, evaluatedArgs, dispatchArgs);
+        return executeSlowpath(function, caller, callerFrame, callArgs);
+    }
+
+    private static Object executeSlowpath(RFunction function, RCaller caller, MaterializedFrame callerFrame, Object[] callArgs) {
         try {
             return function.getTarget().call(callArgs);
         } finally {
diff --git a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/instrumentation/RInstrumentation.java b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/instrumentation/RInstrumentation.java
index 4f8856e8c6c19f8d3606fe432efc8bb45feb0f7d..9e2edd953ca0c0f1454310c8564c8e2db52fb53c 100644
--- a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/instrumentation/RInstrumentation.java
+++ b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/instrumentation/RInstrumentation.java
@@ -43,7 +43,7 @@ public class RInstrumentation {
      * The function names that were requested to be used in implicit {@code debug(f)} calls, when
      * those functions are defined. Global to all contexts.
      */
-    @CompilationFinal private static String[] debugFunctionNames;
+    @CompilationFinal(dimensions = 1) private static String[] debugFunctionNames;
 
     public static FunctionDefinitionNode getFunctionDefinitionNode(RFunction func) {
         assert !func.isBuiltin();
diff --git a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/objects/CollectGenericArgumentsNode.java b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/objects/CollectGenericArgumentsNode.java
index f8b51386ac4fa75a5a54bd348c0889c2dae88ed1..c5fe1e156efc33ac413d46e50f47f837a7cc0f4c 100644
--- a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/objects/CollectGenericArgumentsNode.java
+++ b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/objects/CollectGenericArgumentsNode.java
@@ -120,7 +120,7 @@ public abstract class CollectGenericArgumentsNode extends RBaseNode {
             } else {
                 Object value = FrameSlotChangeMonitor.getValue(slot, frame);
                 if (value instanceof RPromise) {
-                    value = PromiseHelperNode.evaluateSlowPath(null, (RPromise) value);
+                    value = PromiseHelperNode.evaluateSlowPath((RPromise) value);
                 }
                 result[i] = classHierarchyNodeSlowPath.executeString(value);
             }
diff --git a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/objects/DispatchGeneric.java b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/objects/DispatchGeneric.java
index 9d4fdeb7f07be32e3bfa3d428564c36b170dcd6a..4098d1e5d501124ac77f8186066ce82ecb77dcb9 100644
--- a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/objects/DispatchGeneric.java
+++ b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/objects/DispatchGeneric.java
@@ -73,7 +73,7 @@ public abstract class DispatchGeneric extends RBaseNode {
             CompilerDirectives.transferToInterpreterAndInvalidate();
             REnvironment methodsEnv = REnvironment.getRegisteredNamespace("methods");
             RFunction currentFunction = ReadVariableNode.lookupFunction(".InheritForDispatch", methodsEnv.getFrame(), true, true);
-            method = (RFunction) RContext.getEngine().evalFunction(currentFunction, frame.materialize(), RCaller.create(frame, RASTUtils.getOriginalCall(this)), null, classes, fdef, mtable);
+            method = (RFunction) RContext.getEngine().evalFunction(currentFunction, frame.materialize(), RCaller.create(frame, RASTUtils.getOriginalCall(this)), true, null, classes, fdef, mtable);
         }
         method = loadMethod.executeRFunction(frame, method, fname);
         Object ret = executeMethod.executeObject(frame, method, fname);
diff --git a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/objects/LoadMethod.java b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/objects/LoadMethod.java
index 236289defb37f1353359c34e785f0b5b943282d6..3780418d1675fe83fe3101d4ad6bdc6a021b14fd 100644
--- a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/objects/LoadMethod.java
+++ b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/objects/LoadMethod.java
@@ -136,7 +136,7 @@ abstract class LoadMethod extends RBaseNode {
                                 loadMethodFunction.getEnclosingFrame(), null);
             } else {
                 // slow path
-                ret = (RFunction) RContext.getEngine().evalFunction(currentFunction, frame.materialize(), caller, null, fdef, fname, REnvironment.frameToEnvironment(frame.materialize()));
+                ret = (RFunction) RContext.getEngine().evalFunction(currentFunction, frame.materialize(), caller, true, null, fdef, fname, REnvironment.frameToEnvironment(frame.materialize()));
             }
         } else {
             ret = fdef;
diff --git a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/unary/TypeofNode.java b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/unary/TypeofNode.java
index 1df443ba8c97ea0df8b9b11c2f42a9540d0b1608..c2e606b1f73a542fce854d221e417ee5848b8d36 100644
--- a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/unary/TypeofNode.java
+++ b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/unary/TypeofNode.java
@@ -62,6 +62,11 @@ public abstract class TypeofNode extends UnaryNode {
         return RType.Missing;
     }
 
+    @Specialization(guards = "isForeignObject(object)")
+    protected RType doTruffleObject(@SuppressWarnings("unused") TruffleObject object) {
+        return RType.TruffleObject;
+    }
+
     @Specialization(guards = {"operand.getClass() == cachedClass"}, limit = "NUMBER_OF_CACHED_CLASSES")
     protected static RType doCachedTyped(Object operand,
                     @Cached("getTypedValueClass(operand)") Class<? extends RTypedValue> cachedClass) {
@@ -82,11 +87,6 @@ public abstract class TypeofNode extends UnaryNode {
         return operand.getRType();
     }
 
-    @Specialization(guards = "isForeignObject(object)")
-    protected RType doTruffleObject(@SuppressWarnings("unused") TruffleObject object) {
-        return RType.TruffleObject;
-    }
-
     protected static boolean isForeignObject(Object obj) {
         return RRuntime.isForeignObject(obj);
     }
diff --git a/com.oracle.truffle.r.parser/src/com/oracle/truffle/r/parser/ParserGeneration.java b/com.oracle.truffle.r.parser/src/com/oracle/truffle/r/parser/ParserGeneration.java
index 76e8351cb9a82020724fb76869eac71177c84b17..1af7872f3177f094f90ad57e44d6637f0b6e7f76 100644
--- a/com.oracle.truffle.r.parser/src/com/oracle/truffle/r/parser/ParserGeneration.java
+++ b/com.oracle.truffle.r.parser/src/com/oracle/truffle/r/parser/ParserGeneration.java
@@ -89,6 +89,7 @@ public class ParserGeneration {
         "support for hex float literals",
         "support for hex float literals without decimal point: 0x0p0",
         "different warning for hex and dec integer literals",
-        "raise ZERO_LENGTH_VARIABLE errors in parser"
+        "raise ZERO_LENGTH_VARIABLE errors in parser",
+        "support for file delimiter"
     };
 }
diff --git a/com.oracle.truffle.r.parser/src/com/oracle/truffle/r/parser/R.g b/com.oracle.truffle.r.parser/src/com/oracle/truffle/r/parser/R.g
index 3eb64bd8c0ee37a980a2f881ead4ce5d078f731e..e7162c65d7f0dea88277c9859e8cb769411dbf38 100644
--- a/com.oracle.truffle.r.parser/src/com/oracle/truffle/r/parser/R.g
+++ b/com.oracle.truffle.r.parser/src/com/oracle/truffle/r/parser/R.g
@@ -28,6 +28,7 @@ package com.oracle.truffle.r.parser;
 
 import java.util.ArrayList;
 import java.util.List;
+import java.io.IOException;
 
 import com.oracle.truffle.api.RootCallTarget;
 import com.oracle.truffle.api.frame.MaterializedFrame;
@@ -39,6 +40,7 @@ import com.oracle.truffle.r.runtime.RInternalError;
 import com.oracle.truffle.r.runtime.RRuntime;
 import com.oracle.truffle.r.runtime.data.RComplex;
 import com.oracle.truffle.r.runtime.data.RFunction;
+import com.oracle.truffle.r.runtime.RSource;
 import com.oracle.truffle.r.runtime.data.RNull;
 import com.oracle.truffle.r.runtime.env.REnvironment;
 import com.oracle.truffle.r.runtime.nodes.RCodeBuilder;
@@ -60,7 +62,9 @@ import com.oracle.truffle.r.runtime.RError;
 
 @members {
     private Source source;
+    private Source initialSource;
     private RCodeBuilder<T> builder;
+    private int fileStartOffset = 0;
     
     /**
      * Always use this constructor to initialize the R specific fields.
@@ -69,6 +73,7 @@ import com.oracle.truffle.r.runtime.RError;
         super(new CommonTokenStream(new RLexer(new ANTLRStringStream(source.getCode()))));
         assert source != null && builder != null;
         this.source = source;
+        this.initialSource = source;
         this.builder = builder;
     }
     
@@ -101,8 +106,13 @@ import com.oracle.truffle.r.runtime.RError;
      */
     private SourceSection src(Token t) {
         CommonToken token = (CommonToken) t;
-        int startIndex = token.getStartIndex();
-        return source.createSection(startIndex, token.getStopIndex() - startIndex + 1);
+        try {
+        	return source.createSection(token.getStartIndex() - fileStartOffset, token.getStopIndex() - token.getStartIndex() + 1);
+        } catch(IllegalArgumentException e) {
+        	// fall back and use the initial source (the file being parsed) 
+        	resetSource();
+        	return source.createSection(token.getStartIndex(), token.getStopIndex() - token.getStartIndex() + 1);
+        }
     }
     
     /**
@@ -114,8 +124,43 @@ import com.oracle.truffle.r.runtime.RError;
         int startIndex = cstart.getStartIndex();
         int stopIndex = cstop.getStopIndex();
         int length = stopIndex - startIndex + (cstop.getType() == Token.EOF ? 0 : 1);
-        return source.createSection(startIndex, length);
+        try {
+        	return source.createSection(startIndex - fileStartOffset, length);
+        } catch(IllegalArgumentException e) {
+        	// fall back and use the initial source (the file being parsed) 
+        	resetSource();
+        	return source.createSection(startIndex, length);
+        }
     }
+    
+    /**
+     * Checks if the token is a comment token indicating that the following part of the source file was
+     * pasted from another file.
+     * The format of this file delimiter is '#line 1 "filename"'
+     */
+    private void checkFileDelim(CommonToken commentToken) {
+			String commentLine = commentToken.getText();
+	    	if(commentLine.startsWith("#line 1")) {
+	    		int q0 = commentLine.indexOf("\"");
+	    		int q1 = commentLine.indexOf("\"", q0+1);
+	    		if(q0 != -1 && q1 != -1) {
+	    			String path = commentLine.substring(q0+1, q1);
+	    			try {
+                        source = RSource.fromFileName(path, false);
+                        fileStartOffset = commentToken.getStopIndex() + 1;
+                    } catch (IOException e) {
+                    }
+	    		} else {
+	    			// fall back and use the initial source (the file being parsed)
+	    			resetSource();
+	    		}
+	    	}
+	    }
+	
+	private void resetSource() {
+		source = initialSource;
+		fileStartOffset = 0;
+	}
 
 	// without this override, the parser will not throw exceptions if it can recover    
     @Override
@@ -205,9 +250,12 @@ statement returns [T v]
     : e=expr_or_assign n_one { $v = $e.v; }
     ;
 
-n_ : (NEWLINE | COMMENT)*;
-n_one  : (NEWLINE | COMMENT)+ | EOF | SEMICOLON n_;
-n_multi  : (NEWLINE | COMMENT | SEMICOLON)+ | EOF;
+n_ : (NEWLINE | COMMENT { checkFileDelim((CommonToken)last()); } 
+     )*;
+n_one  : (NEWLINE | COMMENT { checkFileDelim((CommonToken)last()); }
+         )+ | EOF | SEMICOLON n_;
+n_multi  : (NEWLINE | COMMENT { checkFileDelim((CommonToken)last()); }
+            | SEMICOLON)+ | EOF;
 
 expr_wo_assign returns [T v]
     : w=while_expr                                      { $v = $w.v; }
diff --git a/com.oracle.truffle.r.pkgs/graalvm/R/g.R b/com.oracle.truffle.r.pkgs/graalvm/R/g.R
index 11190d265a2eae66b34b16136912e434a2645e2c..a39bb05199fd0a4c31a0846d32d718849cca4537 100644
--- a/com.oracle.truffle.r.pkgs/graalvm/R/g.R
+++ b/com.oracle.truffle.r.pkgs/graalvm/R/g.R
@@ -35,11 +35,16 @@ graalvm.status <- function() {
 #' @param port The port at which the GraalVM agent is listening
 #' @param rlibs The value of the FastR R_LIBS environmental variable. The default 
 #' value is calculated as paste0(graalvm.home, "/language/R/library").
+#' @param javaOpts a character vector of Java options
 #' @examples
 #' graalvm.setup("~/work/graalvm-0.21")
+#' # Running GraalVM in debug mode
+#' graalvm.setup("~/work/graalvm-0.21", javaOpts = c("-Xdebug", "-Xrunjdwp:transport=dt_socket,server=y,address=8000,suspend=y"))
 #' @export
-graalvm.setup <- function(home, host = "localhost", port = 9876, rlibs = paste0(home, "/language/R/library")) {
-	options(graalvm.home = home, graalvm.host = host, graalvm.port = port, graalvm.rlibs = rlibs)
+graalvm.setup <- function(home, host = "localhost", port = 9876, rlibs = paste0(home, "/language/R/library"), 
+							javaOpts = character(0)) {
+	options(graalvm.home = home, graalvm.host = host, graalvm.port = port, graalvm.rlibs = rlibs,
+	graalvm.javaOpts = paste(sapply(javaOpts, function(opt) { paste0("-J'", opt, "'")  }), collapse = " "))
 }
 
 commandURL <- function(cmd) {
@@ -70,8 +75,9 @@ graalvm.start <- function() {
 	
 		gHost <- getOption("graalvm.host");
 		gPort <- getOption("graalvm.port");
+		javaOpts <- getOption("graalvm.javaOpts");
 	
-		nodeLaunchCmd <- paste0(libEnvVar, " ", gHome, "/bin/node ", serverScriptPath, " ", gHost, " ", gPort, " &")
+		nodeLaunchCmd <- paste0(libEnvVar, " ", gHome, "/bin/node ", javaOpts, " ", serverScriptPath, " ", gHost, " ", gPort, " &")
 		system(nodeLaunchCmd, ignore.stdout = TRUE, ignore.stderr = TRUE)
 	
 		attempts <- 0L
diff --git a/com.oracle.truffle.r.pkgs/graalvm/man/graalvm.Rd b/com.oracle.truffle.r.pkgs/graalvm/man/graalvm.Rd
index a77541d69d508e1551913b79f81c471d5ad9db42..96c0d86c24f63bc09feff2103b15a36d0111a6cb 100644
--- a/com.oracle.truffle.r.pkgs/graalvm/man/graalvm.Rd
+++ b/com.oracle.truffle.r.pkgs/graalvm/man/graalvm.Rd
@@ -37,7 +37,7 @@ g.r("a1")
 g.js("a2")
 g.rb("$a3")
 
-g(a1 = FALSE)
+g(a1 <- FALSE)
 gget(a1)
 a1
 
diff --git a/com.oracle.truffle.r.pkgs/graalvm/man/graalvm.setup.Rd b/com.oracle.truffle.r.pkgs/graalvm/man/graalvm.setup.Rd
index 9007932d6d936816d018cd3c0e24b8e3ec171a76..b79dbedb74454bf354303a725ae392e867eddcb7 100644
--- a/com.oracle.truffle.r.pkgs/graalvm/man/graalvm.setup.Rd
+++ b/com.oracle.truffle.r.pkgs/graalvm/man/graalvm.setup.Rd
@@ -5,7 +5,7 @@
 \title{Set up the GraalVM agent}
 \usage{
 graalvm.setup(home, host = "localhost", port = 9876, rlibs = paste0(home,
-  "/language/R/library"))
+  "/language/R/library"), javaOpts = character(0))
 }
 \arguments{
 \item{home}{The home folder of the GraalVM installation}
@@ -16,10 +16,14 @@ graalvm.setup(home, host = "localhost", port = 9876, rlibs = paste0(home,
 
 \item{rlibs}{The value of the FastR R_LIBS environmental variable. The default 
 value is calculated as paste0(graalvm.home, "/language/R/library").}
+
+\item{javaOpts}{a character vector of Java options}
 }
 \description{
 Set up the GraalVM agent
 }
 \examples{
 graalvm.setup("~/work/graalvm-0.21")
+# Running GraalVM in debug mode
+graalvm.setup("~/work/graalvm-0.21", javaOpts = c("-Xdebug", "-Xrunjdwp:transport=dt_socket,server=y,address=8000,suspend=y"))
 }
diff --git a/com.oracle.truffle.r.pkgs/rJava/NAMESPACE b/com.oracle.truffle.r.pkgs/rJava/NAMESPACE
index 20c27039014d4fc3a4125f92e4f5960410723234..1e1eb30c84f13ea28d8ff269af6bff007c690969 100644
--- a/com.oracle.truffle.r.pkgs/rJava/NAMESPACE
+++ b/com.oracle.truffle.r.pkgs/rJava/NAMESPACE
@@ -1,5 +1,6 @@
 # Generated by roxygen2: do not edit by hand
 
+export(.jaddClassPath)
 export(.jarray)
 export(.jbyte)
 export(.jcall)
@@ -12,5 +13,7 @@ export(.jinit)
 export(.jlong)
 export(.jnew)
 export(.jnull)
+export(.jpackage)
 export(.jshort)
 export(.jsimplify)
+export(J)
diff --git a/com.oracle.truffle.r.pkgs/rJava/R/rj.R b/com.oracle.truffle.r.pkgs/rJava/R/rj.R
index eb18a8713c1f47f2d7739a9fd41cf8bbbc28590d..3d3b8a59d271ed2576bceda40d2541cfa2b66490 100644
--- a/com.oracle.truffle.r.pkgs/rJava/R/rj.R
+++ b/com.oracle.truffle.r.pkgs/rJava/R/rj.R
@@ -24,6 +24,7 @@
     simplify = FALSE, use.true.class = FALSE) 
 {
     if(is.character(obj)) {
+        obj <- gsub("/", ".", as.character(obj))
         co <- .fastr.java.class(obj)
         r <- co[method](...)
     } else {
@@ -91,6 +92,18 @@
     invisible(x)
 }
 
+#' @export
+J <- function (class, method, ...) 
+{    
+    class <- gsub("/", ".", as.character(class))
+    javaClass <- .fastr.java.class(class)
+    if (nargs() == 1L && missing(method)) {
+        javaClass
+    } else {
+        .jcall(javaClass, ,method, ...)
+    }    
+}
+
 #
 # noop stubs
 #
@@ -117,3 +130,31 @@
 {    
     # do nothing
 }
+
+#' @export
+.jpackage <- function (name, jars='*', morePaths='', nativeLibrary=FALSE, lib.loc=NULL)
+{    
+    javalibs <- system.file("java", package = name, lib.loc = lib.loc)
+    if(javalibs == "") {
+        javalibs = paste0("library/", name, "/java")
+    }
+    cat(paste0("********************************************************\n",
+               "*** WARNING!!!\n",
+               "*** .jpackage is not yet implemented.\n",
+               "*** Please ensure that all java libraries from:\n",
+               "*** ", javalibs, "\n",
+               "*** are on FastR classpath\n",
+               "********************************************************\n"))
+}
+
+#' @export
+.jaddClassPath <- function (path)
+{
+    cat(paste0("********************************************************\n",
+               "*** WARNING!!!\n",
+               "*** .jaddClasPath is not yet implemented.\n",
+               "*** Please ensure that \n",
+               "*** ", path, "\n",
+               "*** is on FastR classpath\n",
+               "********************************************************\n"))
+}
\ No newline at end of file
diff --git a/com.oracle.truffle.r.pkgs/rJava/tests/testthat/testJ.R b/com.oracle.truffle.r.pkgs/rJava/tests/testthat/testJ.R
new file mode 100644
index 0000000000000000000000000000000000000000..92de8cc5060f4d7047173dea91bbf681c56d0590
--- /dev/null
+++ b/com.oracle.truffle.r.pkgs/rJava/tests/testthat/testJ.R
@@ -0,0 +1,20 @@
+# prerequisites:
+# - 'testthat' package has to be installed: install.packages("testthat")
+# - FastR`s rJava package has to be installed: bin/r CMD INSTALL com.oracle.truffle.r.pkgs/rjava
+# - mxbuild/dists/fastr-unit-tests.jar has to be on FastR classpath
+
+library(testthat)
+library(rJava)
+
+testName <- "test J function"
+test_that(testName, {
+    cat(paste0(testName, "\n"))
+    tc <- J("com.oracle.truffle.r.test.library.fastr.TestJavaInterop$TestClass")
+    expect_equal(2147483647L, tc$fieldStaticInteger)
+
+    tc <- J("com/oracle/truffle/r/test/library/fastr/TestJavaInterop$TestClass")
+    expect_equal(2147483647L, tc$fieldStaticInteger)
+
+    expect_equal(2147483647L, J("com.oracle.truffle.r.test.library.fastr.TestJavaInterop$TestClass", "methodStaticInteger"))
+    expect_equal(2147483647L, J("com/oracle/truffle/r/test/library/fastr/TestJavaInterop$TestClass", "methodStaticInteger"))
+})
diff --git a/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/ArgumentsSignature.java b/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/ArgumentsSignature.java
index ca2ec69bbd8f5615607da8898b48296b20b6997d..ac69a5a14fd5a4ec37a529811733dbe1df51a437 100644
--- a/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/ArgumentsSignature.java
+++ b/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/ArgumentsSignature.java
@@ -30,6 +30,7 @@ import com.oracle.truffle.api.CompilerAsserts;
 import com.oracle.truffle.api.CompilerDirectives;
 import com.oracle.truffle.api.CompilerDirectives.CompilationFinal;
 import com.oracle.truffle.api.CompilerDirectives.TruffleBoundary;
+import com.oracle.truffle.r.runtime.data.RStringVector;
 
 public final class ArgumentsSignature implements Iterable<String> {
 
@@ -47,7 +48,7 @@ public final class ArgumentsSignature implements Iterable<String> {
     public static final int NO_VARARG = -1;
 
     @CompilationFinal(dimensions = 1) private static final ArgumentsSignature[] EMPTY_SIGNATURES = new ArgumentsSignature[32];
-    public static final ArgumentsSignature INVALID_SIGNATURE = new ArgumentsSignature(new String[]{"<<invalid>>"});
+    public static final ArgumentsSignature INVALID_SIGNATURE = new ArgumentsSignature(new String[]{"<<invalid>>"}, false);
 
     static {
         for (int i = 0; i < EMPTY_SIGNATURES.length; i++) {
@@ -55,12 +56,8 @@ public final class ArgumentsSignature implements Iterable<String> {
         }
     }
 
-    @TruffleBoundary
     public static ArgumentsSignature get(String... names) {
-        assert names != null;
-        ArgumentsSignature newSignature = new ArgumentsSignature(names);
-        ArgumentsSignature oldSignature = signatures.putIfAbsent(newSignature, newSignature);
-        return oldSignature != null ? oldSignature : newSignature;
+        return get(names, false);
     }
 
     public static ArgumentsSignature empty(int length) {
@@ -73,15 +70,41 @@ public final class ArgumentsSignature implements Iterable<String> {
         return get(new String[length]);
     }
 
+    /**
+     * Returns {@code null} if the the vector is {@code null}. Any empty string in the vector is
+     * converted to {@code null} value.
+     */
+    public static ArgumentsSignature fromNamesAttribute(RStringVector names) {
+        return names == null ? null : get(names.getDataWithoutCopying(), true);
+    }
+
+    @TruffleBoundary
+    private static ArgumentsSignature get(String[] names, boolean convertEmpty) {
+        assert names != null;
+        ArgumentsSignature newSignature = new ArgumentsSignature(names, convertEmpty);
+        ArgumentsSignature oldSignature = signatures.putIfAbsent(newSignature, newSignature);
+        return oldSignature != null ? oldSignature : newSignature;
+    }
+
     @CompilationFinal(dimensions = 1) private final String[] names;
     @CompilationFinal(dimensions = 1) private final int[] varArgIndexes;
     @CompilationFinal(dimensions = 1) private final boolean[] isVarArg;
     private final int varArgIndex;
     private final int nonNullCount;
 
-    private ArgumentsSignature(String[] names) {
-        this.names = Arrays.stream(names).map(s -> s == null || s == UNMATCHED ? s : s.intern()).toArray(String[]::new);
-        this.nonNullCount = (int) Arrays.stream(names).filter(s -> s != null).count();
+    private ArgumentsSignature(String[] names, boolean convertEmpty) {
+        this.names = new String[names.length];
+        int nonNullCount = 0;
+        for (int i = 0; i < names.length; i++) {
+            String s = names[i];
+            if (s == null || (s.isEmpty() && convertEmpty)) {
+                this.names[i] = null;
+                continue;
+            }
+            nonNullCount++;
+            this.names[i] = s == UNMATCHED ? s : s.intern();
+        }
+        this.nonNullCount = nonNullCount;
 
         int index = NO_VARARG;
         int count = 0;
diff --git a/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/RErrorHandling.java b/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/RErrorHandling.java
index ac0af78b884cfab4b846dbdea61cac73915befec..6913a4f10243e621613dcd5c67915e5b532eb991 100644
--- a/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/RErrorHandling.java
+++ b/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/RErrorHandling.java
@@ -356,7 +356,7 @@ public class RErrorHandling {
                         errorcallDfltWithCall(fromCall(call), Message.GENERIC, msg);
                     } else {
                         RFunction hf = (RFunction) h;
-                        RContext.getEngine().evalFunction(hf, null, null, null, cond);
+                        RContext.getEngine().evalFunction(hf, null, null, true, null, cond);
                     }
                 } else {
                     throw gotoExitingHandler(cond, call, entry);
@@ -524,7 +524,7 @@ public class RErrorHandling {
                             evaluatedArgs[i] = RMissing.instance;
                         }
                     }
-                    RContext.getEngine().evalFunction(errorFunction, null, null, null, evaluatedArgs);
+                    RContext.getEngine().evalFunction(errorFunction, null, null, true, null, evaluatedArgs);
                 } else if (errorExpr instanceof RLanguage || errorExpr instanceof RExpression) {
                     if (errorExpr instanceof RLanguage) {
                         RContext.getEngine().eval((RLanguage) errorExpr, materializedFrame);
diff --git a/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/RSerialize.java b/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/RSerialize.java
index 8ee00ebb4a460f4cff2111a5a39047dc91e2fa30..410a9d3b4f89474c1fc5e5f36acfd473257aa4f8 100644
--- a/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/RSerialize.java
+++ b/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/RSerialize.java
@@ -19,6 +19,7 @@ import java.io.OutputStream;
 import java.io.PrintStream;
 import java.lang.ref.WeakReference;
 import java.nio.charset.StandardCharsets;
+import java.nio.file.NoSuchFileException;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Deque;
@@ -38,7 +39,11 @@ import com.oracle.truffle.api.frame.FrameDescriptor;
 import com.oracle.truffle.api.frame.FrameSlot;
 import com.oracle.truffle.api.frame.FrameSlotKind;
 import com.oracle.truffle.api.frame.MaterializedFrame;
+import com.oracle.truffle.api.instrumentation.StandardTags;
+import com.oracle.truffle.api.nodes.Node;
 import com.oracle.truffle.api.object.DynamicObject;
+import com.oracle.truffle.api.source.Source;
+import com.oracle.truffle.api.source.SourceSection;
 import com.oracle.truffle.r.runtime.conn.RConnection;
 import com.oracle.truffle.r.runtime.context.RContext;
 import com.oracle.truffle.r.runtime.data.RArgsValuesAndNames;
@@ -466,7 +471,7 @@ public class RSerialize {
                     // fast path through getRegisteredNamespace
                     Object namespace = REnvironment.getRegisteredNamespace(s.getDataAt(0));
                     if (namespace == null) {
-                        namespace = RContext.getEngine().evalFunction(contextState.getDotDotFindNamespace(), null, null, null, s, "");
+                        namespace = RContext.getEngine().evalFunction(contextState.getDotDotFindNamespace(), null, null, true, null, s, "");
                     }
                     return checkResult(addReadRef(namespace));
                 }
@@ -580,6 +585,7 @@ public class RSerialize {
                             RFunction func = PairlistDeserializer.processFunction(carItem, cdrItem, tagItem, currentFunctionName, packageName);
                             if (attrItem != RNull.instance) {
                                 setAttributes(func, attrItem);
+                                handleFunctionSrcrefAttr(func);
                             }
                             result = func;
                             break;
@@ -894,6 +900,7 @@ public class RSerialize {
                     pl = (RPairList) cdr;
                 }
             }
+
             return result;
         }
 
@@ -1427,259 +1434,254 @@ public class RSerialize {
                     outRefIndex(refIndex);
                 } else if (type == SEXPTYPE.SYMSXP) {
                     writeSymbol((RSymbol) obj);
-                } else if (type == SEXPTYPE.ENVSXP) {
-                    REnvironment env = (REnvironment) obj;
-                    addReadRef(obj);
-                    String name = null;
-                    if ((name = env.isPackageEnv()) != null) {
-                        RError.warning(RError.SHOW_CALLER2, RError.Message.PACKAGE_AVAILABLE, name);
-                        stream.writeInt(SEXPTYPE.PACKAGESXP.code);
-                        stream.writeString(name);
-                    } else if (env.isNamespaceEnv()) {
-                        stream.writeInt(SEXPTYPE.NAMESPACESXP.code);
-                        RStringVector nameSpaceEnvSpec = env.getNamespaceSpec();
-                        outStringVec(nameSpaceEnvSpec, false);
-                    } else {
-                        stream.writeInt(SEXPTYPE.ENVSXP.code);
-                        stream.writeInt(env.isLocked() ? 1 : 0);
-                        writeItem(env.getParent());
-                        /*
-                         * TODO To be truly compatible with GnuR we should remember whether an
-                         * environment was created with new.env(hash=T) and output it in that form
-                         * with the associated size. For internal FastR use it does not matter, so
-                         * we use the "frame" form, which is a pairlist. tag is binding name, car is
-                         * binding value
-                         */
-                        String[] bindings = env.ls(true, null, false).getDataWithoutCopying();
-                        for (String binding : bindings) {
-                            Object value = getValueIgnoreActiveBinding(env.getFrame(), binding);
-                            writePairListEntry(binding, value);
-                        }
-                        terminatePairList();
-                        writeItem(RNull.instance); // hashtab
-                        DynamicObject attributes = env.getAttributes();
-                        if (attributes != null) {
-                            writeAttributes(attributes);
-                        } else {
-                            writeItem(RNull.instance);
-                        }
-                    }
                 } else {
-                    // flags
-                    DynamicObject attributes = null;
-                    if (obj instanceof RAttributable) {
-                        RAttributable rattr = (RAttributable) obj;
-                        attributes = rattr.getAttributes();
-                        if (attributes != null && attributes.isEmpty()) {
-                            attributes = null;
-                        }
-                    }
-                    boolean hasTag = gnuRType == SEXPTYPE.CLOSXP || gnuRType == SEXPTYPE.DOTSXP || (gnuRType == SEXPTYPE.PROMSXP && !((RPromise) obj).isEvaluated()) ||
-                                    (type == SEXPTYPE.LISTSXP && !((RPairList) obj).isNullTag());
-                    int gpbits = getGPBits(obj);
-                    int flags = Flags.packFlags(gnuRType, gpbits, isObject(obj), attributes != null, hasTag);
-                    stream.writeInt(flags);
-                    switch (type) {
-                        case STRSXP: {
-                            if (obj instanceof String) {
-                                // length 1 vector
-                                stream.writeInt(1);
-                                writeCHARSXP((String) obj);
+                    if (type == SEXPTYPE.ENVSXP) {
+                        REnvironment env = (REnvironment) obj;
+                        addReadRef(obj);
+                        String name = null;
+                        if ((name = env.isPackageEnv()) != null) {
+                            RError.warning(RError.SHOW_CALLER2, RError.Message.PACKAGE_AVAILABLE, name);
+                            stream.writeInt(SEXPTYPE.PACKAGESXP.code);
+                            stream.writeString(name);
+                        } else if (env.isNamespaceEnv()) {
+                            stream.writeInt(SEXPTYPE.NAMESPACESXP.code);
+                            RStringVector nameSpaceEnvSpec = env.getNamespaceSpec();
+                            outStringVec(nameSpaceEnvSpec, false);
+                        } else {
+                            stream.writeInt(SEXPTYPE.ENVSXP.code);
+                            stream.writeInt(env.isLocked() ? 1 : 0);
+                            writeItem(env.getParent());
+                            /*
+                             * TODO To be truly compatible with GnuR we should remember whether an
+                             * environment was created with new.env(hash=T) and output it in that
+                             * form with the associated size. For internal FastR use it does not
+                             * matter, so we use the "frame" form, which is a pairlist. tag is
+                             * binding name, car is binding value
+                             */
+                            String[] bindings = env.ls(true, null, false).getDataWithoutCopying();
+                            for (String binding : bindings) {
+                                Object value = getValueIgnoreActiveBinding(env.getFrame(), binding);
+                                writePairListEntry(binding, value);
+                            }
+                            terminatePairList();
+                            writeItem(RNull.instance); // hashtab
+                            OutAttributes attributes = new OutAttributes(env, type, gnuRType);
+                            if (attributes.hasAttributes()) {
+                                writeAttributes(attributes);
                             } else {
-                                outStringVec((RAbstractStringVector) obj, true);
+                                writeItem(RNull.instance);
                             }
-                            break;
                         }
+                    } else {
+                        // flags
+                        OutAttributes attributes = new OutAttributes(obj, type, gnuRType);
+                        boolean hasTag = gnuRType == SEXPTYPE.CLOSXP || gnuRType == SEXPTYPE.DOTSXP || (gnuRType == SEXPTYPE.PROMSXP && !((RPromise) obj).isEvaluated()) ||
+                                        (type == SEXPTYPE.LISTSXP && !((RPairList) obj).isNullTag());
+                        int gpbits = getGPBits(obj);
+                        int flags = Flags.packFlags(gnuRType, gpbits, isObject(obj), attributes.hasAttributes(), hasTag);
+                        stream.writeInt(flags);
+                        switch (type) {
+                            case STRSXP: {
+                                if (obj instanceof String) {
+                                    // length 1 vector
+                                    stream.writeInt(1);
+                                    writeCHARSXP((String) obj);
+                                } else {
+                                    outStringVec((RAbstractStringVector) obj, true);
+                                }
+                                break;
+                            }
 
-                        case INTSXP: {
-                            if (obj instanceof Integer) {
-                                stream.writeInt(1);
-                                stream.writeInt((int) obj);
-                            } else {
-                                RAbstractIntVector vec = (RAbstractIntVector) obj;
-                                stream.writeInt(vec.getLength());
-                                for (int i = 0; i < vec.getLength(); i++) {
-                                    stream.writeInt(vec.getDataAt(i));
+                            case INTSXP: {
+                                if (obj instanceof Integer) {
+                                    stream.writeInt(1);
+                                    stream.writeInt((int) obj);
+                                } else {
+                                    RAbstractIntVector vec = (RAbstractIntVector) obj;
+                                    stream.writeInt(vec.getLength());
+                                    for (int i = 0; i < vec.getLength(); i++) {
+                                        stream.writeInt(vec.getDataAt(i));
+                                    }
                                 }
+                                break;
                             }
-                            break;
-                        }
 
-                        case REALSXP: {
-                            if (obj instanceof Double) {
-                                stream.writeInt(1);
-                                stream.writeDouble((double) obj);
-                            } else {
-                                RAbstractDoubleVector vec = (RAbstractDoubleVector) obj;
-                                stream.writeInt(vec.getLength());
-                                for (int i = 0; i < vec.getLength(); i++) {
-                                    stream.writeDouble(vec.getDataAt(i));
+                            case REALSXP: {
+                                if (obj instanceof Double) {
+                                    stream.writeInt(1);
+                                    stream.writeDouble((double) obj);
+                                } else {
+                                    RAbstractDoubleVector vec = (RAbstractDoubleVector) obj;
+                                    stream.writeInt(vec.getLength());
+                                    for (int i = 0; i < vec.getLength(); i++) {
+                                        stream.writeDouble(vec.getDataAt(i));
+                                    }
                                 }
+                                break;
                             }
-                            break;
-                        }
 
-                        case LGLSXP: {
-                            // Output as ints
-                            if (obj instanceof Byte) {
-                                stream.writeInt(1);
-                                stream.writeInt(RRuntime.logical2int((byte) obj));
-                            } else {
-                                RAbstractLogicalVector vec = (RAbstractLogicalVector) obj;
+                            case LGLSXP: {
+                                // Output as ints
+                                if (obj instanceof Byte) {
+                                    stream.writeInt(1);
+                                    stream.writeInt(RRuntime.logical2int((byte) obj));
+                                } else {
+                                    RAbstractLogicalVector vec = (RAbstractLogicalVector) obj;
+                                    stream.writeInt(vec.getLength());
+                                    for (int i = 0; i < vec.getLength(); i++) {
+                                        stream.writeInt(RRuntime.logical2int(vec.getDataAt(i)));
+                                    }
+                                }
+                                break;
+                            }
+
+                            case CPLXSXP: {
+                                RAbstractComplexVector vec = (RAbstractComplexVector) obj;
                                 stream.writeInt(vec.getLength());
                                 for (int i = 0; i < vec.getLength(); i++) {
-                                    stream.writeInt(RRuntime.logical2int(vec.getDataAt(i)));
+                                    RComplex val = vec.getDataAt(i);
+                                    if (RRuntime.isNA(val)) {
+                                        stream.writeDouble(RRuntime.DOUBLE_NA);
+                                        stream.writeDouble(RRuntime.DOUBLE_NA);
+                                    } else {
+                                        stream.writeDouble(val.getRealPart());
+                                        stream.writeDouble(val.getImaginaryPart());
+                                    }
                                 }
+                                break;
                             }
-                            break;
-                        }
 
-                        case CPLXSXP: {
-                            RAbstractComplexVector vec = (RAbstractComplexVector) obj;
-                            stream.writeInt(vec.getLength());
-                            for (int i = 0; i < vec.getLength(); i++) {
-                                RComplex val = vec.getDataAt(i);
-                                if (RRuntime.isNA(val)) {
-                                    stream.writeDouble(RRuntime.DOUBLE_NA);
-                                    stream.writeDouble(RRuntime.DOUBLE_NA);
+                            case EXPRSXP:
+                            case VECSXP: {
+                                RAbstractVector list;
+                                if (type == SEXPTYPE.EXPRSXP) {
+                                    list = (RExpression) obj;
                                 } else {
-                                    stream.writeDouble(val.getRealPart());
-                                    stream.writeDouble(val.getImaginaryPart());
+                                    list = (RList) obj;
+                                }
+                                stream.writeInt(list.getLength());
+                                for (int i = 0; i < list.getLength(); i++) {
+                                    Object listObj = list.getDataAtAsObject(i);
+                                    writeItem(listObj);
                                 }
+                                break;
                             }
-                            break;
-                        }
 
-                        case EXPRSXP:
-                        case VECSXP: {
-                            RAbstractVector list;
-                            if (type == SEXPTYPE.EXPRSXP) {
-                                list = (RExpression) obj;
-                            } else {
-                                list = (RList) obj;
-                            }
-                            stream.writeInt(list.getLength());
-                            for (int i = 0; i < list.getLength(); i++) {
-                                Object listObj = list.getDataAtAsObject(i);
-                                writeItem(listObj);
+                            case RAWSXP: {
+                                RRawVector raw = (RRawVector) obj;
+                                byte[] data = raw.getDataWithoutCopying();
+                                stream.writeInt(data.length);
+                                stream.writeRaw(data);
+                                break;
                             }
-                            break;
-                        }
 
-                        case RAWSXP: {
-                            RRawVector raw = (RRawVector) obj;
-                            byte[] data = raw.getDataWithoutCopying();
-                            stream.writeInt(data.length);
-                            stream.writeRaw(data);
-                            break;
-                        }
-
-                        case EXTPTRSXP: {
-                            addReadRef(obj);
-                            RExternalPtr xptr = (RExternalPtr) obj;
-                            writeItem(xptr.getProt());
-                            writeItem(xptr.getTag());
-                            break;
-                        }
-
-                        case S4SXP: {
-                            break;
-                        }
-
-                        /*
-                         * The objects that GnuR represents as a pairlist. To avoid stack overflow,
-                         * these utilize manual tail recursion on the cdr of the pairlist.
-                         */
-
-                        case FUNSXP:
-                        case PROMSXP:
-                        case LANGSXP:
-                        case LISTSXP:
-                        case DOTSXP: {
-                            if (type == SEXPTYPE.FUNSXP && gnuRType == SEXPTYPE.BUILTINSXP) {
-                                // special case
-                                RFunction fun = (RFunction) obj;
-                                String name = fun.getRBuiltin().getName();
-                                stream.writeString(name);
+                            case EXTPTRSXP: {
+                                addReadRef(obj);
+                                RExternalPtr xptr = (RExternalPtr) obj;
+                                writeItem(xptr.getProt());
+                                writeItem(xptr.getTag());
                                 break;
                             }
-                            tailCall = true;
-                            // attributes written first to avoid recursion on cdr
-                            if (attributes != null) {
-                                writeAttributes(attributes);
-                                attributes = null;
+
+                            case S4SXP: {
+                                break;
                             }
 
-                            switch (type) {
-                                case FUNSXP: {
+                            /*
+                             * The objects that GnuR represents as a pairlist. To avoid stack
+                             * overflow, these utilize manual tail recursion on the cdr of the
+                             * pairlist.closePairList
+                             */
+
+                            case FUNSXP:
+                            case PROMSXP:
+                            case LANGSXP:
+                            case LISTSXP:
+                            case DOTSXP: {
+                                if (type == SEXPTYPE.FUNSXP && gnuRType == SEXPTYPE.BUILTINSXP) {
+                                    // special case
                                     RFunction fun = (RFunction) obj;
-                                    RPairList pl = (RPairList) serializeLanguageObject(state, fun);
-                                    assert pl != null;
-                                    state.convertUnboundValues(pl);
-                                    if (FastROptions.debugMatches("printWclosure")) {
-                                        Debug.printClosure(pl);
-                                    }
-                                    writeItem(pl.getTag());
-                                    writeItem(pl.car());
-                                    obj = pl.cdr();
+                                    String name = fun.getRBuiltin().getName();
+                                    stream.writeString(name);
                                     break;
                                 }
+                                tailCall = true;
 
-                                case PROMSXP: {
-                                    RPairList pl = (RPairList) serializeLanguageObject(state, obj);
-                                    assert pl != null;
-                                    state.convertUnboundValues(pl);
-                                    if (pl.getTag() != RNull.instance) {
-                                        writeItem(pl.getTag());
-                                    }
-                                    writeItem(pl.car());
-                                    obj = pl.cdr();
-                                    break;
+                                // attributes written first to avoid recursion on cdr
+                                writeAttributes(attributes);
+                                if (attributes != null) {
+                                    attributes = null;
                                 }
 
-                                case LISTSXP: {
-                                    RPairList pl = (RPairList) obj;
-                                    if (!pl.isNullTag()) {
+                                switch (type) {
+                                    case FUNSXP: {
+                                        RFunction fun = (RFunction) obj;
+                                        RPairList pl = (RPairList) serializeLanguageObject(state, fun);
+                                        assert pl != null;
+                                        state.convertUnboundValues(pl);
+                                        if (FastROptions.debugMatches("printWclosure")) {
+                                            Debug.printClosure(pl);
+                                        }
                                         writeItem(pl.getTag());
+                                        writeItem(pl.car());
+                                        obj = pl.cdr();
+                                        break;
                                     }
-                                    writeItem(pl.car());
-                                    obj = pl.cdr();
-                                    break;
-                                }
 
-                                case LANGSXP: {
-                                    RPairList pl = (RPairList) serializeLanguageObject(state, obj);
-                                    state.convertUnboundValues(pl);
-                                    writeItem(pl.car());
-                                    obj = pl.cdr();
-                                    break;
-                                }
+                                    case PROMSXP: {
+                                        RPairList pl = (RPairList) serializeLanguageObject(state, obj);
+                                        assert pl != null;
+                                        state.convertUnboundValues(pl);
+                                        if (pl.getTag() != RNull.instance) {
+                                            writeItem(pl.getTag());
+                                        }
+                                        writeItem(pl.car());
+                                        obj = pl.cdr();
+                                        break;
+                                    }
 
-                                case DOTSXP: {
-                                    // This in GnuR is a pairlist
-                                    RArgsValuesAndNames rvn = (RArgsValuesAndNames) obj;
-                                    Object list = RNull.instance;
-                                    for (int i = rvn.getLength() - 1; i >= 0; i--) {
-                                        String name = rvn.getSignature().getName(i);
-                                        list = RDataFactory.createPairList(rvn.getArgument(i), list, name == null ? RNull.instance : RDataFactory.createSymbolInterned(name));
+                                    case LISTSXP: {
+                                        RPairList pl = (RPairList) obj;
+                                        if (!pl.isNullTag()) {
+                                            writeItem(pl.getTag());
+                                        }
+                                        writeItem(pl.car());
+                                        obj = pl.cdr();
+                                        break;
                                     }
-                                    RPairList pl = (RPairList) list;
-                                    if (!pl.isNullTag()) {
-                                        writeItem(pl.getTag());
+
+                                    case LANGSXP: {
+                                        RPairList pl = (RPairList) serializeLanguageObject(state, obj);
+                                        state.convertUnboundValues(pl);
+                                        writeItem(pl.car());
+                                        obj = pl.cdr();
+                                        break;
+                                    }
+
+                                    case DOTSXP: {
+                                        // This in GnuR is a pairlist
+                                        RArgsValuesAndNames rvn = (RArgsValuesAndNames) obj;
+                                        Object list = RNull.instance;
+                                        for (int i = rvn.getLength() - 1; i >= 0; i--) {
+                                            String name = rvn.getSignature().getName(i);
+                                            list = RDataFactory.createPairList(rvn.getArgument(i), list, name == null ? RNull.instance : RDataFactory.createSymbolInterned(name));
+                                        }
+                                        RPairList pl = (RPairList) list;
+                                        if (!pl.isNullTag()) {
+                                            writeItem(pl.getTag());
+                                        }
+                                        writeItem(pl.car());
+                                        obj = pl.cdr();
+                                        break;
                                     }
-                                    writeItem(pl.car());
-                                    obj = pl.cdr();
-                                    break;
                                 }
+                                break;
                             }
-                            break;
-                        }
 
-                        default:
-                            throw RInternalError.unimplemented(type.name());
-                    }
+                            default:
+                                throw RInternalError.unimplemented(type.name());
+                        }
 
-                    if (attributes != null) {
                         writeAttributes(attributes);
                     }
                 }
@@ -1755,17 +1757,34 @@ public class RSerialize {
             }
         }
 
-        private void writeAttributes(DynamicObject attributes) throws IOException {
-            // have to convert to GnuR pairlist
-            Iterator<RAttributesLayout.RAttribute> iter = RAttributesLayout.asIterable(attributes).iterator();
-            while (iter.hasNext()) {
-                RAttributesLayout.RAttribute attr = iter.next();
-                // name is the tag of the virtual pairlist
-                // value is the car
-                // next is the cdr
-                writePairListEntry(attr.getName(), attr.getValue());
+        private void writeAttributes(OutAttributes outAttrs) throws IOException {
+            if (outAttrs != null) {
+                SourceSection ss = outAttrs.getSourceReferenceAttributes();
+                if (ss != null) {
+                    String path = RSource.getPathInternal(ss.getSource());
+                    if (path != null) {
+                        REnvironment createSrcfile = RSrcref.createSrcfile(path);
+                        Object createLloc = RSrcref.createLloc(ss, createSrcfile);
+                        writePairListEntry(RRuntime.R_SRCREF, createLloc);
+                        writePairListEntry(RRuntime.R_SRCFILE, createSrcfile);
+                    }
+                }
+                DynamicObject attributes = outAttrs.getExplicitAttributes();
+                if (attributes != null) {
+                    // have to convert to GnuR pairlist
+                    Iterator<RAttributesLayout.RAttribute> iter = RAttributesLayout.asIterable(attributes).iterator();
+                    while (iter.hasNext()) {
+                        RAttributesLayout.RAttribute attr = iter.next();
+                        // name is the tag of the virtual pairlist
+                        // value is the car
+                        // next is the cdr
+                        writePairListEntry(attr.getName(), attr.getValue());
+                    }
+                }
+                if (outAttrs.hasAttributes()) {
+                    terminatePairList();
+                }
             }
-            terminatePairList();
         }
 
         private void writePairListEntry(String name, Object value) throws IOException {
@@ -2072,6 +2091,50 @@ public class RSerialize {
         }
     }
 
+    /**
+     * An abstraction of implicit and explicit attributes to serialize.
+     */
+    private static class OutAttributes {
+        private DynamicObject explicitAttributes;
+        private SourceSection ss;
+
+        private OutAttributes(Object obj, SEXPTYPE type, SEXPTYPE gnuRType) {
+
+            if (obj instanceof RAttributable) {
+                explicitAttributes = ((RAttributable) obj).getAttributes();
+            }
+            initSourceSection(obj, type, gnuRType);
+        }
+
+        private void initSourceSection(Object obj, SEXPTYPE type, SEXPTYPE gnuRType) {
+            if (type == SEXPTYPE.FUNSXP && gnuRType != SEXPTYPE.BUILTINSXP) {
+                RFunction fun = (RFunction) obj;
+                RSyntaxFunction body = (RSyntaxFunction) fun.getRootNode();
+                setSourceSection(body);
+            }
+        }
+
+        private void setSourceSection(RSyntaxElement body) {
+            SourceSection lazySourceSection = body.getLazySourceSection();
+            if (RSource.getPathInternal(lazySourceSection.getSource()) != null) {
+                ss = lazySourceSection;
+            }
+        }
+
+        public boolean hasAttributes() {
+            return explicitAttributes != null && !explicitAttributes.isEmpty() || ss != null;
+        }
+
+        public DynamicObject getExplicitAttributes() {
+            return explicitAttributes;
+        }
+
+        public SourceSection getSourceReferenceAttributes() {
+            return ss;
+        }
+
+    }
+
     /**
      * For {@code lazyLoadDBinsertValue}.
      */
@@ -2195,7 +2258,7 @@ public class RSerialize {
                     String name = ((RSyntaxLookup) lhs).getIdentifier();
                     infixFieldAccess = "$".equals(name) || "@".equals(name);
                 }
-                serializeArguments(arguments, element.getSyntaxSignature(), infixFieldAccess);
+                serializeArguments(element, arguments, element.getSyntaxSignature(), infixFieldAccess);
             }
             return null;
         }
@@ -2208,7 +2271,7 @@ public class RSerialize {
             return false;
         }
 
-        private void serializeArguments(RSyntaxElement[] arguments, ArgumentsSignature signature, boolean infixFieldAccess) {
+        private void serializeArguments(RSyntaxCall callElement, RSyntaxElement[] arguments, ArgumentsSignature signature, boolean infixFieldAccess) {
             state.openPairList(SEXPTYPE.LISTSXP);
             if (arguments.length == 0) {
                 state.setNull();
@@ -2239,7 +2302,11 @@ public class RSerialize {
                 }
                 state.linkPairList(arguments.length);
             }
-            state.setCdr(state.closePairList());
+            Object pl = state.closePairList();
+            if (callElement instanceof Node && RContext.getRRuntimeASTAccess().isTaggedWith((Node) callElement, StandardTags.StatementTag.class)) {
+                attachSrcref(callElement, pl);
+            }
+            state.setCdr(pl);
         }
 
         @Override
@@ -2341,13 +2408,52 @@ public class RSerialize {
         REnvironment env = REnvironment.frameToEnvironment(f.getEnclosingFrame());
         state.openPairList().setTag(env);
         serializeFunctionDefinition(state, function);
-        return state.closePairList();
+        Object pl = state.closePairList();
+        return pl;
     }
 
     private static void serializeFunctionDefinition(State state, RSyntaxFunction function) {
         SerializeVisitor visitor = new SerializeVisitor(state);
         state.setCar(visitor.visitFunctionFormals(function));
-        state.setCdr(visitor.visitFunctionBody(function));
+        Object body = visitor.visitFunctionBody(function);
+
+        // convert and attach source section to srcref attribute
+        attachSrcref(function, body);
+
+        state.setCdr(body);
+    }
+
+    /**
+     * Converts the source section from the syntax element to a srcref attribute and attaches it to
+     * the serialization object.
+     *
+     * @param syntaxElement The syntax element providing the source section.
+     * @param serObj The object to attribute (most likely a pair list).
+     */
+    private static void attachSrcref(RSyntaxElement syntaxElement, Object serObj) {
+        SourceSection ss = getFileSourceSection(syntaxElement);
+        if (ss != null && serObj instanceof RAttributable) {
+            String pathInternal = RSource.getPathInternal(ss.getSource());
+            RAttributable attributable = (RAttributable) serObj;
+            attributable.setAttr(RRuntime.R_SRCFILE, RSrcref.createSrcfile(pathInternal));
+            RList createBlockSrcrefs = RSrcref.createBlockSrcrefs(syntaxElement);
+            if (createBlockSrcrefs != null) {
+                attributable.setAttr(RRuntime.R_SRCREF, createBlockSrcrefs);
+                attributable.setAttr(RRuntime.R_WHOLE_SRCREF, RSrcref.createLloc(ss));
+            } else {
+                Object createLloc = RSrcref.createLloc(ss);
+                attributable.setAttr(RRuntime.R_SRCREF, createLloc);
+                attributable.setAttr(RRuntime.R_WHOLE_SRCREF, RSrcref.createLloc(ss));
+            }
+        }
+    }
+
+    private static SourceSection getFileSourceSection(RSyntaxElement syntaxElement) {
+        SourceSection ss = syntaxElement.getLazySourceSection();
+        if (ss != null && RSource.getPathInternal(ss.getSource()) != null) {
+            return ss;
+        }
+        return null;
     }
 
     private static Object serializeLanguage(State state, RLanguage lang) {
@@ -2387,9 +2493,10 @@ public class RSerialize {
     private static final class PairlistDeserializer {
 
         public static RFunction processFunction(Object car, Object cdr, Object tag, String functionName, String packageName) {
-            // car == arguments, cdr == body, tag == environment
+            // car == arguments, cdr == body, tag == PairList(attributes, environment)
 
             REnvironment environment = (REnvironment) tag;
+
             MaterializedFrame enclosingFrame = environment.getFrame();
             RootCallTarget callTarget = RContext.getASTBuilder().rootFunction(RSyntaxNode.LAZY_DEPARSE, processArguments(car), processBody(cdr), functionName);
 
@@ -2460,7 +2567,11 @@ public class RSerialize {
                 RPairList function = (RPairList) cdr;
                 return processFunctionExpression(function.car(), function.cdr(), function.getTag());
             }
-            return RContext.getASTBuilder().call(RSyntaxNode.LAZY_DEPARSE, process(car, true), processArguments(cdr));
+            RSyntaxNode call = RContext.getASTBuilder().call(RSyntaxNode.LAZY_DEPARSE, process(car, true), processArguments(cdr));
+            if (cdr instanceof RAttributable) {
+                handleSrcrefAttr((RAttributable) cdr, call);
+            }
+            return call;
         }
 
         private static RSyntaxNode processFunctionExpression(Object car, Object cdr, @SuppressWarnings("unused") Object tag) {
@@ -2494,20 +2605,83 @@ public class RSerialize {
         private static RSyntaxNode processBody(Object cdr) {
             if (cdr instanceof RPairList) {
                 RPairList pl = (RPairList) cdr;
+                RSyntaxNode body;
                 switch (pl.getType()) {
                     case BCODESXP:
                         RAbstractListVector list = (RAbstractListVector) pl.cdr();
-                        return process(list.getDataAtAsObject(0), false);
+                        body = process(list.getDataAtAsObject(0), false);
+                        break;
                     case LISTSXP:
                         assert pl.cdr() == RNull.instance || (pl.cadr() == RNull.instance && pl.cddr() == RNull.instance);
-                        return process(pl.car(), false);
+                        body = process(pl.car(), false);
+                        break;
                     case LANGSXP:
-                        return processCall(pl.car(), pl.cdr(), pl.getTag());
+                        body = processCall(pl.car(), pl.cdr(), pl.getTag());
+                        break;
                     default:
                         throw RInternalError.shouldNotReachHere("unexpected SXP type in body: " + pl.getType());
                 }
+                handleSrcrefAttr(pl, body);
+                return body;
             }
             return process(cdr, false);
         }
     }
+
+    private static void handleFunctionSrcrefAttr(RFunction func) {
+        handleSrcrefAttr(func, (RSyntaxElement) func.getRootNode());
+    }
+
+    /**
+     * @param func Element carrying the {@value RRuntime#R_SRCREF} attribute.
+     * @param elem The syntax element to create the source section for.
+     */
+    private static void handleSrcrefAttr(RAttributable func, RSyntaxElement elem) {
+        if (elem instanceof RSyntaxCall) {
+            handleSrcrefAttr(func, (RSyntaxCall) elem);
+        } else {
+            Object srcref = func.getAttr(RRuntime.R_SRCREF);
+            if (srcref instanceof RAbstractIntVector) {
+                SourceSection ss = RSrcref.createSourceSection((RAbstractIntVector) srcref, null);
+                elem.setSourceSection(ss);
+            }
+        }
+    }
+
+    /**
+     * @param func Element carrying the {@value RRuntime#R_SRCREF} attribute.
+     * @param elem The syntax element to create the source section for.
+     */
+    private static void handleSrcrefAttr(RAttributable func, RSyntaxCall elem) {
+        Object srcref = func.getAttr(RRuntime.R_SRCREF);
+        if (srcref instanceof RAbstractIntVector) {
+            SourceSection ss = RSrcref.createSourceSection((RAbstractIntVector) srcref, null);
+            elem.setSourceSection(ss);
+        } else if (srcref instanceof RList) {
+            try {
+                Object srcfile = func.getAttr(RRuntime.R_SRCFILE);
+                assert srcfile instanceof REnvironment;
+                Source source = RSource.fromSrcfile((REnvironment) srcfile);
+
+                RList l = (RList) srcref;
+                RSyntaxElement[] syntaxArguments = elem.getSyntaxArguments();
+                assert syntaxArguments.length == l.getLength() - 1;
+
+                for (int i = 0; i < l.getLength(); i++) {
+                    Object dataAt = l.getDataAt(i);
+                    assert dataAt instanceof RAbstractIntVector;
+                    SourceSection ss = RSrcref.createSourceSection((RAbstractIntVector) dataAt, source);
+                    if (i == 0) {
+                        elem.setSourceSection(ss);
+                    } else {
+                        syntaxArguments[i - 1].setSourceSection(ss);
+                    }
+                }
+            } catch (NoSuchFileException e) {
+                RError.warning(RError.SHOW_CALLER, RError.Message.GENERIC, "Missing source file: " + e.getMessage());
+            } catch (IOException e) {
+                RError.warning(RError.SHOW_CALLER, RError.Message.GENERIC, "Cannot access source file: " + e.getMessage());
+            }
+        }
+    }
 }
diff --git a/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/RSource.java b/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/RSource.java
index 16f3e223d16b0c343dba84208bd6e57da4c54d0e..e4bdde9ff45ac1d7c3b801028d1081d55d32fcf8 100644
--- a/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/RSource.java
+++ b/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/RSource.java
@@ -27,9 +27,13 @@ import java.io.IOException;
 import java.net.URI;
 import java.net.URISyntaxException;
 import java.net.URL;
+import java.nio.file.Path;
+import java.nio.file.Paths;
 
 import com.oracle.truffle.api.source.Source;
 import com.oracle.truffle.api.source.SourceSection;
+import com.oracle.truffle.r.runtime.RSrcref.SrcrefFields;
+import com.oracle.truffle.r.runtime.env.REnvironment;
 
 /**
  * A facade for the creation of Truffle {@link Source} objects, which is complicated in R due the
@@ -187,6 +191,18 @@ public class RSource {
         return Source.newBuilder(url).name(name).mimeType(RRuntime.R_APP_MIME).build();
     }
 
+    /**
+     * Create an (external) source from an R srcfile ({@link RSrcref#createSrcfile(String)}).
+     */
+    public static Source fromSrcfile(REnvironment env) throws IOException {
+        Path filename = Paths.get((String) RRuntime.r2Java(env.get(SrcrefFields.filename.name())));
+        if (filename.isAbsolute()) {
+            return fromFileName(filename.toString(), false);
+        }
+        Path wd = Paths.get((String) RRuntime.r2Java(env.get(SrcrefFields.wd.name())));
+        return fromFileName(wd.resolve(filename).toString(), false);
+    }
+
     /**
      * Create an unknown source with the given name.
      */
@@ -221,6 +237,18 @@ public class RSource {
         return uri.getPath();
     }
 
+    /**
+     * Like {@link #getPath(Source)} but ignoring if {@code source} is "internal".
+     */
+    public static String getPathInternal(Source source) {
+        if (source == null) {
+            return null;
+        }
+        URI uri = source.getURI();
+        assert uri != null;
+        return uri.getPath();
+    }
+
     /**
      * Always returns a non-null string even for internal sources.
      */
diff --git a/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/RSrcref.java b/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/RSrcref.java
index d2a27b63774482b121dc835c85c905c982377e17..63c82fd5e0eaa8dda66b6952f055c0f5c19d4de9 100644
--- a/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/RSrcref.java
+++ b/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/RSrcref.java
@@ -14,8 +14,12 @@ package com.oracle.truffle.r.runtime;
 import java.io.IOException;
 import java.nio.file.FileSystems;
 import java.nio.file.Files;
+import java.nio.file.NoSuchFileException;
 import java.nio.file.Path;
+import java.nio.file.Paths;
 import java.nio.file.attribute.PosixFileAttributes;
+import java.util.LinkedList;
+import java.util.List;
 
 import com.oracle.truffle.api.CompilerDirectives.TruffleBoundary;
 import com.oracle.truffle.api.source.Source;
@@ -23,12 +27,21 @@ import com.oracle.truffle.api.source.SourceSection;
 import com.oracle.truffle.r.runtime.context.RContext;
 import com.oracle.truffle.r.runtime.data.RDataFactory;
 import com.oracle.truffle.r.runtime.data.RIntVector;
+import com.oracle.truffle.r.runtime.data.RList;
 import com.oracle.truffle.r.runtime.data.RNull;
 import com.oracle.truffle.r.runtime.data.RStringVector;
+import com.oracle.truffle.r.runtime.data.model.RAbstractIntVector;
 import com.oracle.truffle.r.runtime.env.REnvironment;
 import com.oracle.truffle.r.runtime.env.REnvironment.PutException;
 import com.oracle.truffle.r.runtime.ffi.BaseRFFI;
+import com.oracle.truffle.r.runtime.nodes.RSourceSectionNode;
+import com.oracle.truffle.r.runtime.nodes.RSyntaxCall;
+import com.oracle.truffle.r.runtime.nodes.RSyntaxConstant;
+import com.oracle.truffle.r.runtime.nodes.RSyntaxElement;
+import com.oracle.truffle.r.runtime.nodes.RSyntaxFunction;
+import com.oracle.truffle.r.runtime.nodes.RSyntaxLookup;
 import com.oracle.truffle.r.runtime.nodes.RSyntaxNode;
+import com.oracle.truffle.r.runtime.nodes.RSyntaxVisitor;
 
 /**
  * Utilities for handling R srcref attributes, in particular conversion from {@link Source},
@@ -50,7 +63,9 @@ public class RSrcref {
         timestamp,
         filename,
         isFile,
-        wd;
+        wd,
+        fixedNewlines,
+        lines;
     }
 
     private static final RStringVector SRCREF_ATTR = RDataFactory.createStringVectorFromScalar(RRuntime.R_SRCREF);
@@ -66,22 +81,28 @@ public class RSrcref {
     @TruffleBoundary
     private static REnvironment createSrcfile(Path path) {
         // A srcref is an environment
-        double mtime;
+        REnvironment env = RContext.getInstance().srcfileEnvironments.get(path);
+        if (env == null) {
+            env = RDataFactory.createNewEnv("");
+            env.safePut(SrcrefFields.Enc.name(), "unknown");
+            env.safePut(SrcrefFields.encoding.name(), "native.enc");
+            env.safePut(SrcrefFields.timestamp.name(), getTimestamp(path));
+            env.safePut(SrcrefFields.filename.name(), path.toString());
+            env.safePut(SrcrefFields.isFile.name(), RRuntime.LOGICAL_TRUE);
+            env.safePut(SrcrefFields.wd.name(), BaseRFFI.GetwdRootNode.create().getCallTarget().call());
+            env.setClassAttr(SRCFILE_ATTR);
+            RContext.getInstance().srcfileEnvironments.put(path, env);
+        }
+        return env;
+    }
+
+    private static int getTimestamp(Path path) {
         try {
             PosixFileAttributes pfa = Files.readAttributes(path, PosixFileAttributes.class);
-            mtime = pfa.lastModifiedTime().toMillis();
+            return Utils.getTimeInSecs(pfa.lastModifiedTime());
         } catch (IOException ex) {
-            mtime = RRuntime.DOUBLE_NA;
+            return RRuntime.INT_NA;
         }
-        REnvironment env = RDataFactory.createNewEnv("");
-        env.safePut(SrcrefFields.Enc.name(), "unknown");
-        env.safePut(SrcrefFields.encoding.name(), "native.enc");
-        env.safePut(SrcrefFields.timestamp.name(), mtime);
-        env.safePut(SrcrefFields.filename.name(), path.toString());
-        env.safePut(SrcrefFields.isFile.name(), RRuntime.LOGICAL_TRUE);
-        env.safePut(SrcrefFields.wd.name(), BaseRFFI.GetwdRootNode.create().getCallTarget().call());
-        env.setClassAttr(SRCFILE_ATTR);
-        return env;
     }
 
     /**
@@ -93,6 +114,35 @@ public class RSrcref {
         return createLloc(ss, createSrcfile(path));
     }
 
+    /**
+     * Creates a block source reference or {@code null} if the function's body is not a block
+     * statement.<br>
+     * Srcref for blocks are different in that it is an RList of srcref vectors whereas each element
+     * corresponds to one syntax call in the block (including the block itself). E.g.
+     * <p>
+     * <code> {<br/>
+     * print('Hello')<br/>
+     * print(x)<br/>
+     * }</code>
+     * </p>
+     * will result in [[1, 20, 4, 1, 20, 1, 1, 4], [2, 2, 2, 15, 2, 15, 2, 2], [3, 2, 3, 9, 2, 9, 3,
+     * 3]]
+     *
+     * @param function
+     */
+    @TruffleBoundary
+    public static RList createBlockSrcrefs(RSyntaxElement function) {
+
+        BlockSrcrefsVisitor v = new BlockSrcrefsVisitor();
+        v.accept(function);
+        List<Object> blockSrcrefs = v.blockSrcrefs;
+
+        if (!blockSrcrefs.isEmpty()) {
+            return RDataFactory.createList(blockSrcrefs.toArray());
+        }
+        return null;
+    }
+
     @TruffleBoundary
     public static Object createLloc(SourceSection src) {
         if (src == null) {
@@ -107,13 +157,19 @@ public class RSrcref {
             env = RDataFactory.createNewEnv("src");
             env.setClassAttr(RDataFactory.createStringVector(new String[]{"srcfilecopy", RRuntime.R_SRCFILE}, true));
             try {
-                env.put("filename", source.getPath() == null ? "" : source.getPath());
-                env.put("fixedNewlines", RRuntime.LOGICAL_TRUE);
+                String pathStr = RSource.getPathInternal(source);
+                Path path = Paths.get(pathStr != null ? pathStr : "");
+                env.put(SrcrefFields.filename.name(), path.toString());
+                env.put(SrcrefFields.fixedNewlines.name(), RRuntime.LOGICAL_TRUE);
                 String[] lines = new String[source.getLineCount()];
                 for (int i = 0; i < lines.length; i++) {
                     lines[i] = source.getCode(i + 1);
                 }
-                env.put("lines", RDataFactory.createStringVector(lines, true));
+                env.put(SrcrefFields.lines.name(), RDataFactory.createStringVector(lines, true));
+                env.safePut(SrcrefFields.Enc.name(), "unknown");
+                env.safePut(SrcrefFields.isFile.name(), RRuntime.asLogical(Files.isRegularFile(path)));
+                env.safePut(SrcrefFields.timestamp.name(), getTimestamp(path));
+                env.safePut(SrcrefFields.wd.name(), BaseRFFI.GetwdRootNode.create().getCallTarget().call());
             } catch (PutException e) {
                 throw RInternalError.shouldNotReachHere(e);
             }
@@ -149,4 +205,98 @@ public class RSrcref {
         lloc.setAttr(RRuntime.R_SRCFILE, srcfile);
         return lloc;
     }
+
+    public static SourceSection createSourceSection(RAbstractIntVector srcrefVec, Source sharedSource) {
+
+        try {
+            Source source;
+            if (sharedSource != null) {
+                source = sharedSource;
+            } else {
+                Object srcfile = srcrefVec.getAttr(RRuntime.R_SRCFILE);
+                assert srcfile instanceof REnvironment;
+                source = RSource.fromSrcfile((REnvironment) srcfile);
+            }
+            int startLine = srcrefVec.getDataAt(0);
+            int startColumn = srcrefVec.getDataAt(1);
+            int startIdx = getLineStartOffset(source, startLine) + startColumn;
+            int length = getLineStartOffset(source, srcrefVec.getDataAt(2)) + srcrefVec.getDataAt(3) - startIdx + 1;
+            return source.createSection(startLine, startColumn, length);
+        } catch (NoSuchFileException e) {
+            RError.warning(RError.SHOW_CALLER, RError.Message.GENERIC, "Missing source file: " + e.getMessage());
+        } catch (IOException e) {
+            RError.warning(RError.SHOW_CALLER, RError.Message.GENERIC, "Cannot access source file: " + e.getMessage());
+        } catch (IllegalArgumentException e) {
+            RError.warning(RError.SHOW_CALLER, RError.Message.GENERIC, "Invalid source reference: " + e.getMessage());
+        }
+        return RSourceSectionNode.LAZY_DEPARSE;
+    }
+
+    private static int getLineStartOffset(Source source, int lineNum) {
+        try {
+            return source.getLineStartOffset(lineNum);
+        } catch (IllegalArgumentException e) {
+            throw new IllegalArgumentException(String.format("line %d does not exist in source %s", lineNum, RSource.getPathInternal(source)), e);
+        }
+    }
+
+    private static final class BlockSrcrefsVisitor extends RSyntaxVisitor<Void> {
+        private List<Object> blockSrcrefs = new LinkedList<>();
+        private int depth = 0;
+
+        @Override
+        public Void visit(RSyntaxCall element) {
+
+            if (depth == 0 && !isBlockStatement(element)) {
+                return null;
+            }
+
+            addSrcref(blockSrcrefs, element);
+
+            if (depth == 0) {
+                RSyntaxElement[] syntaxArguments = element.getSyntaxArguments();
+                for (int i = 0; i < syntaxArguments.length; i++) {
+                    if (syntaxArguments[i] != null) {
+                        depth++;
+                        accept(syntaxArguments[i]);
+                        depth--;
+                    }
+                }
+            }
+            return null;
+        }
+
+        private static void addSrcref(List<Object> blockSrcrefs, RSyntaxElement element) {
+            SourceSection lazySourceSection = element.getLazySourceSection();
+            if (lazySourceSection != null) {
+                blockSrcrefs.add(createLloc(lazySourceSection));
+            }
+        }
+
+        private static boolean isBlockStatement(RSyntaxCall element) {
+            RSyntaxElement lhs = element.getSyntaxLHS();
+            if (lhs instanceof RSyntaxLookup) {
+                return "{".equals(((RSyntaxLookup) lhs).getIdentifier());
+            }
+            return false;
+        }
+
+        @Override
+        public Void visit(RSyntaxConstant element) {
+            addSrcref(blockSrcrefs, element);
+            return null;
+        }
+
+        @Override
+        public Void visit(RSyntaxLookup element) {
+            addSrcref(blockSrcrefs, element);
+            return null;
+        }
+
+        @Override
+        public Void visit(RSyntaxFunction element) {
+            accept(element.getSyntaxBody());
+            return null;
+        }
+    }
 }
diff --git a/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/RVersionInfo.java b/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/RVersionInfo.java
index 6336fb8835fb96f7a1b51dd13271d8cf0c45778f..a75cadee75a33b68a9af0c30ef6fee1b9f13ad6b 100644
--- a/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/RVersionInfo.java
+++ b/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/RVersionInfo.java
@@ -45,9 +45,9 @@ public enum RVersionInfo {
 
     public static final int SERIALIZE_VERSION = (2 << 16) + (3 << 8) + 0;
 
-    @CompilationFinal private static final RVersionInfo[] VALUES = RVersionInfo.values();
-    @CompilationFinal private static String[] ListValues;
-    @CompilationFinal private static String[] ListNames;
+    @CompilationFinal(dimensions = 1) private static final RVersionInfo[] VALUES = RVersionInfo.values();
+    @CompilationFinal(dimensions = 1) private static String[] ListValues;
+    @CompilationFinal(dimensions = 1) private static String[] ListNames;
 
     private final String listName;
     private String value;
diff --git a/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/Utils.java b/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/Utils.java
index a511ed968943b46d2c5da96149c8453114209c04..5d3c31feba257afdbfd70dbc0da57b7c367a7f19 100644
--- a/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/Utils.java
+++ b/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/Utils.java
@@ -30,6 +30,7 @@ import java.io.InputStreamReader;
 import java.nio.file.FileSystem;
 import java.nio.file.FileSystems;
 import java.nio.file.Path;
+import java.nio.file.attribute.FileTime;
 import java.nio.file.attribute.PosixFilePermission;
 import java.util.Arrays;
 import java.util.Set;
@@ -718,4 +719,12 @@ public final class Utils {
         }
         return startingTempDir;
     }
+
+    public static int getTimeInSecs(FileTime fileTime) {
+        if (fileTime == null) {
+            return RRuntime.INT_NA;
+        } else {
+            return (int) (fileTime.toMillis() / 1000);
+        }
+    }
 }
diff --git a/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/VirtualEvalFrame.java b/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/VirtualEvalFrame.java
index 22a80d4b03955807496f3d3a1952717086f30ef4..7eae87ef3866b9eb754f29a2c251b42923662118 100644
--- a/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/VirtualEvalFrame.java
+++ b/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/VirtualEvalFrame.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013, 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2017, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -35,7 +35,7 @@ import com.oracle.truffle.r.runtime.data.RFunction;
  */
 public abstract class VirtualEvalFrame extends SubstituteVirtualFrame implements VirtualFrame, MaterializedFrame {
 
-    @CompilationFinal protected final Object[] arguments;
+    @CompilationFinal(dimensions = 1) protected final Object[] arguments;
 
     private VirtualEvalFrame(MaterializedFrame originalFrame, Object[] arguments) {
         super(originalFrame);
diff --git a/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/context/Engine.java b/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/context/Engine.java
index 6c7f7f692cc73dc2134594d4f5c71f4bc65dd99d..fe6fc77fa95752f8dea4d2fced40aa64930cd326 100644
--- a/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/context/Engine.java
+++ b/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/context/Engine.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013, 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2017, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -28,13 +28,13 @@ import com.oracle.truffle.api.RootCallTarget;
 import com.oracle.truffle.api.frame.MaterializedFrame;
 import com.oracle.truffle.api.source.Source;
 import com.oracle.truffle.api.vm.PolyglotEngine;
+import com.oracle.truffle.r.runtime.ArgumentsSignature;
 import com.oracle.truffle.r.runtime.RCaller;
 import com.oracle.truffle.r.runtime.RError;
 import com.oracle.truffle.r.runtime.RSource;
 import com.oracle.truffle.r.runtime.data.RExpression;
 import com.oracle.truffle.r.runtime.data.RFunction;
 import com.oracle.truffle.r.runtime.data.RLanguage;
-import com.oracle.truffle.r.runtime.data.RStringVector;
 import com.oracle.truffle.r.runtime.env.REnvironment;
 import com.oracle.truffle.r.runtime.nodes.RNode;
 
@@ -171,8 +171,12 @@ public interface Engine {
      * namespace, but the current stack is not empty. So when {@code frame} is not {@code null} a
      * {@code caller} should be passed to maintain the call stack correctly. {@code names} string
      * vector describing (optional) argument names
+     * 
+     * @param names signature of the given parameters, may be {@code null} in which case the empty
+     *            signature of correct cardinality shall be used.
+     * @param evalPromises whether to evaluate promises in args array before calling the function.
      */
-    Object evalFunction(RFunction func, MaterializedFrame frame, RCaller caller, RStringVector names, Object... args);
+    Object evalFunction(RFunction func, MaterializedFrame frame, RCaller caller, boolean evalPromises, ArgumentsSignature names, Object... args);
 
     /**
      * Checks for the existence of (startup/shutdown) function {@code name} and, if present, invokes
diff --git a/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/context/RContext.java b/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/context/RContext.java
index aca66505b2857a49062c21ee187782489dc2e01f..9307e6ca2c095256491c65c15c3ab41529766085 100644
--- a/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/context/RContext.java
+++ b/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/context/RContext.java
@@ -24,6 +24,8 @@ package com.oracle.truffle.r.runtime.context;
 
 import java.io.Closeable;
 import java.util.ArrayList;
+import java.lang.ref.WeakReference;
+import java.nio.file.Path;
 import java.util.EnumSet;
 import java.lang.ref.WeakReference;
 import java.util.HashMap;
@@ -491,6 +493,7 @@ public final class RContext extends com.oracle.truffle.api.ExecutionContext impl
 
     public final WeakHashMap<String, WeakReference<String>> stringMap = new WeakHashMap<>();
     public final WeakHashMap<Source, REnvironment> sourceRefEnvironments = new WeakHashMap<>();
+    public final WeakHashMap<Path, REnvironment> srcfileEnvironments = new WeakHashMap<>();
 
     private ContextState[] contextStates() {
         return new ContextState[]{stateREnvVars, stateRProfile, stateTempPath, stateROptions, stateREnvironment, stateRErrorHandling, stateRConnection, stateStdConnections, stateRNG, stateRFFI,
diff --git a/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/env/frame/ActiveBinding.java b/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/env/frame/ActiveBinding.java
index f44d5c5222baf7632708d894ec6e08fea8c74a7f..892566e5bf11b2a9067369e42ae9b843a4f01afd 100644
--- a/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/env/frame/ActiveBinding.java
+++ b/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/env/frame/ActiveBinding.java
@@ -27,7 +27,6 @@ import java.util.Objects;
 import com.oracle.truffle.r.runtime.RCaller;
 import com.oracle.truffle.r.runtime.RType;
 import com.oracle.truffle.r.runtime.context.RContext;
-import com.oracle.truffle.r.runtime.data.RDataFactory;
 import com.oracle.truffle.r.runtime.data.RFunction;
 import com.oracle.truffle.r.runtime.data.RTruffleObject;
 import com.oracle.truffle.r.runtime.env.REnvironment;
@@ -64,11 +63,11 @@ public class ActiveBinding implements RTruffleObject {
     }
 
     public Object writeValue(Object value) {
-        return RContext.getEngine().evalFunction(function, REnvironment.baseEnv().getFrame(), RCaller.createInvalid(null), null, value);
+        return RContext.getEngine().evalFunction(function, REnvironment.baseEnv().getFrame(), RCaller.createInvalid(null), true, null, value);
     }
 
     public Object readValue() {
-        return RContext.getEngine().evalFunction(function, REnvironment.baseEnv().getFrame(), RCaller.createInvalid(null), RDataFactory.createEmptyStringVector());
+        return RContext.getEngine().evalFunction(function, REnvironment.baseEnv().getFrame(), RCaller.createInvalid(null), true, null);
     }
 
 }
diff --git a/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/env/frame/NSBaseMaterializedFrame.java b/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/env/frame/NSBaseMaterializedFrame.java
index e7006cbd06fb44eee613d651621de8cd08e5c778..94f26a4df6708e8f4cca13e3df8236092625ad95 100644
--- a/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/env/frame/NSBaseMaterializedFrame.java
+++ b/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/env/frame/NSBaseMaterializedFrame.java
@@ -42,7 +42,7 @@ public final class NSBaseMaterializedFrame implements MaterializedFrame {
     private static final ValueProfile frameProfile = ValueProfile.createClassProfile();
 
     private final MaterializedFrame packageBaseFrame;
-    @CompilationFinal private final Object[] arguments;
+    @CompilationFinal(dimensions = 1) private final Object[] arguments;
 
     // this frame descriptor is only used for lookups in FrameSlotChangeMonitor
     private final FrameDescriptor markerFrameDescriptor;
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 b6e76f7af86b6eecee2314cb956428b2ab276cb3..5c89154642282ef8112e8636bce9fda6e47c3a4a 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
@@ -1067,11 +1067,11 @@ Error in `Encoding<-`(`*tmp*`, value = "UTF-8") :
 #argv <- structure(list(x = 'abc', value = 'UTF-8'), .Names = c('x',     'value'));do.call('Encoding<-', argv)
 [1] "abc"
 
-##com.oracle.truffle.r.test.builtins.TestBuiltin_ISOdatetime.testISOdatetime1#Ignored.Unknown#
+##com.oracle.truffle.r.test.builtins.TestBuiltin_ISOdatetime.testISOdatetime1#Ignored.ImplementationError#
 #argv <- structure(list(year = 1970, month = 1, day = 1, hour = 0,     min = 0, sec = 0, tz = 'GMT'), .Names = c('year', 'month',     'day', 'hour', 'min', 'sec', 'tz'));do.call('ISOdatetime', argv)
 [1] "1970-01-01 GMT"
 
-##com.oracle.truffle.r.test.builtins.TestBuiltin_ISOdatetime.testISOdatetime2#Ignored.Unknown#
+##com.oracle.truffle.r.test.builtins.TestBuiltin_ISOdatetime.testISOdatetime2#Ignored.ImplementationError#
 #argv <- structure(list(year = 2002, month = 6, day = 24, hour = 0,     min = 0, sec = 10), .Names = c('year', 'month', 'day', 'hour',     'min', 'sec'));do.call('ISOdatetime', argv)
 [1] "2002-06-24 00:00:10 GMT"
 
@@ -1179,7 +1179,7 @@ attr(,"my")
  [7]  0.3826834  0.0000000 -0.3826834 -0.7071068 -0.9238795 -1.0000000
 [13] -0.9238795 -0.7071068 -0.3826834  0.0000000
 
-##com.oracle.truffle.r.test.builtins.TestBuiltin_La.testLa1#Ignored.Unknown#
+##com.oracle.truffle.r.test.builtins.TestBuiltin_La.testLa1#Ignored.ImplementationError#
 #argv <- list(structure(c(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0), .Dim = c(18L, 7L), .Dimnames = list(c('1', '2', '3', '4', '5', '6', '7', '8', '9', '10', '11', '12', '13', '14', '15', '16', '17', '18'), c('(Intercept)', 'Rail2', 'Rail5', 'Rail1', 'Rail6', 'Rail3', 'Rail4')))); .Internal(La_qr(argv[[1]]))
 $qr
    (Intercept)       Rail2       Rail5       Rail6       Rail3       Rail4
@@ -1268,7 +1268,7 @@ $vectors
 NULL
 
 
-##com.oracle.truffle.r.test.builtins.TestBuiltin_La.testLa4#Ignored.Unknown#
+##com.oracle.truffle.r.test.builtins.TestBuiltin_La.testLa4#Ignored.Unimplemented#
 #argv <- list('S', structure(c(1, 0, 0, 0, 0, 1.4142135623731, 0, 0, 0, 0, 1.73205080756888, 0, 0, 0, 0, 2), .Dim = c(4L, 4L), Dimnames = list(character(0), character(0))), c(2, 1.73205080756888, 1.4142135623731, 1), structure(c(0, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 0), .Dim = c(4L, 4L)), structure(c(0, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 0), .Dim = c(4L, 4L))); .Internal(La_svd(argv[[1]], argv[[2]], argv[[3]], argv[[4]], argv[[5]]))
 $d
 [1] 2.000000 1.732051 1.414214 1.000000
@@ -1300,7 +1300,7 @@ $vectors
 [3,] -0.4814328  7.071068e-01 0.5179020
 
 
-##com.oracle.truffle.r.test.builtins.TestBuiltin_La.testLa6#Ignored.Unknown#
+##com.oracle.truffle.r.test.builtins.TestBuiltin_La.testLa6#Ignored.Unimplemented#
 #argv <- list('S', structure(c(FALSE, TRUE, FALSE, TRUE, TRUE, FALSE, TRUE, TRUE, TRUE, FALSE, TRUE, FALSE, TRUE, TRUE, FALSE, TRUE, FALSE, FALSE, FALSE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE), .Dim = c(5L, 5L)), c(3.37916576339493, 1.53572230863579, 1.41421356237309, 0.472012430194285, 3.04287016253022e-18), structure(c(-0.38209344041777, -0.441911867608196, -0.441911867608196, -0.563415484445979, -0.38209344041777, -0.594200765232569, 0.307687929858406, 0.307687929858405, 0.32327569786942, -0.594200765232566, 0.499999999999999, -0.5, 0.500000000000001, 7.42461647718073e-16, -0.500000000000001, 0.0304967766615352, 0.45830343560406, 0.458303435604061, -0.760299819185526, 0.0304967766615352, -0.5, -0.5, 0.5, -1.11022302462516e-16, 0.5), .Dim = c(5L, 5L)), structure(c(-0.41058086214689, 0.0239384830763564, -0.707106781186547, -0.575195883735897, 0, -0.428282990831553, 0.611211774620929, 9.15933995315754e-16, 0.331150287627506, 0.577350269189626, -0.41058086214689, 0.0239384830763538, 0.707106781186548, -0.575195883735897, 5.55111512312578e-17, -0.226146609649533, -0.773838814336698, -1.55431223447522e-15, 0.129220226886747, 0.577350269189625, -0.654429600481086, -0.162627039715767, -5.27355936696949e-16, 0.460370514514253, -0.577350269189626), .Dim = c(5L, 5L))); .Internal(La_svd(argv[[1]], argv[[2]], argv[[3]], argv[[4]], argv[[5]]))
 $d
 [1] 3.379166e+00 1.535722e+00 1.414214e+00 4.720124e-01 3.042870e-18
@@ -1322,11 +1322,11 @@ $vt
 [5,]  0.00000000  5.773503e-01  5.551115e-17  5.773503e-01 -5.773503e-01
 
 
-##com.oracle.truffle.r.test.builtins.TestBuiltin_La.testLa7#Ignored.Unknown#
+##com.oracle.truffle.r.test.builtins.TestBuiltin_La.testLa7#Ignored.Unimplemented#
 #argv <- list(structure(c(1, 1, 3, 3), .Dim = c(2L, 2L)), 'O'); .Internal(La_dgecon(argv[[1]], argv[[2]]))
 [1] 0
 
-##com.oracle.truffle.r.test.builtins.TestBuiltin_La.testLa8#Ignored.Unknown#
+##com.oracle.truffle.r.test.builtins.TestBuiltin_La.testLa8#Ignored.Unimplemented#
 #argv <- list('N', structure(c(-4, 0, 0, 0, 0, 0, 0, -406.725, 41.7955066364795, 0, 0, 0, 0, 0, -1550.79375, 381.717151319926, 49.8228991342168, 0, 0, 0, 0, -1277.325, 224.617432123818, -31.1858918860748, -282.060212912726, 0, 0, 0, -1042.675, 125.261805546114, -29.9849484767744, 164.425554254677, -170.353263600129, 0, 0, -469.696, 26.3795103523805, 4.19691803785862, -3.18974110831568, 0.0462484557378925, 1.46320172717486, 0, -7818, 18.2758880432689, 1.77525956575195, -1.45298766739792, -0.449176219307484, -0.281900648530911, -0.669305080560524), .Dim = c(7L, 7L), .Dimnames = list(c('1947', '1948', '1949', '1950', '1951', '1952', '1953'), c('(Intercept)', 'GNP.deflator', 'GNP', 'Unemployed', 'Armed.Forces', 'Population', 'Year'))), c(8164.12940108939, 457.24498274114, 324.584423503013, 134.312174464868, 4.95553195929945, 1.41954832076337, 0.000342370904183799), structure(0, .Dim = c(1L, 1L)), structure(0, .Dim = c(1L, 1L))); .Internal(La_svd(argv[[1]], argv[[2]], argv[[3]], argv[[4]], argv[[5]]))
 $d
 [1] 8.164129e+03 4.572450e+02 3.245844e+02 1.343122e+02 4.955532e+00
@@ -2335,7 +2335,7 @@ Error in acos() : 0 arguments passed to 'acos' which requires 1
 #argv <- list(c(0.3+3i,-3+2i));acos(argv[[1]]);
 [1] 1.476169-1.822701i 2.535455-1.968638i
 
-##com.oracle.truffle.r.test.builtins.TestBuiltin_acosh.testacosh1#Ignored.Unknown#
+##com.oracle.truffle.r.test.builtins.TestBuiltin_acosh.testacosh1#Output.MissingWarning#
 #argv <- list(FALSE);acosh(argv[[1]]);
 [1] NaN
 Warning message:
@@ -2466,15 +2466,15 @@ Error: invalid 'pattern' argument
 #argv <- list('x86_64-linux-gnu', 'x86_64-linux-gnu', FALSE, FALSE, c(1L, 1L, 1L), c(0.1, NA, NA, NA, NA), FALSE, TRUE); .Internal(agrep(argv[[1]], argv[[2]], argv[[3]], argv[[4]], argv[[5]], argv[[6]], argv[[7]], argv[[8]]))
 [1] 1
 
-##com.oracle.truffle.r.test.builtins.TestBuiltin_agrep.testagrep3#Ignored.Unknown#
+##com.oracle.truffle.r.test.builtins.TestBuiltin_agrep.testagrep3#Ignored.ImplementationError#
 #argv <- list('lasy', c(' 1 lazy 2', '1 lasy 2'), FALSE, FALSE, c(1L, 1L, 1L), structure(c(NA, 0.1, 0.1, 0, 0.1), .Names = c('cost', 'insertions', 'deletions', 'substitutions', 'all')), FALSE, TRUE); .Internal(agrep(argv[[1]], argv[[2]], argv[[3]], argv[[4]], argv[[5]], argv[[6]], argv[[7]], argv[[8]]))
 [1] 2
 
-##com.oracle.truffle.r.test.builtins.TestBuiltin_agrep.testagrep4#Ignored.Unknown#
+##com.oracle.truffle.r.test.builtins.TestBuiltin_agrep.testagrep4#Ignored.Unimplemented#
 #argv <- list('laysy', c('1 lazy', '1', '1 LAZY'), FALSE, TRUE, c(1L, 1L, 1L), c(2, NA, NA, NA, NA), FALSE, TRUE); .Internal(agrep(argv[[1]], argv[[2]], argv[[3]], argv[[4]], argv[[5]], argv[[6]], argv[[7]], argv[[8]]))
 [1] "1 lazy"
 
-##com.oracle.truffle.r.test.builtins.TestBuiltin_agrep.testagrep5#Ignored.Unknown#
+##com.oracle.truffle.r.test.builtins.TestBuiltin_agrep.testagrep5#Ignored.Unimplemented#
 #argv <- list('laysy', c('1 lazy', '1', '1 LAZY'), TRUE, FALSE, c(1L, 1L, 1L), c(2, NA, NA, NA, NA), FALSE, TRUE); .Internal(agrep(argv[[1]], argv[[2]], argv[[3]], argv[[4]], argv[[5]], argv[[6]], argv[[7]], argv[[8]]))
 [1] 1 3
 
@@ -3085,7 +3085,7 @@ In anyDuplicated.default(c(1L, 2L, 1L, 1L, 3L, 2L), incomparables = "cat") :
 #argv <- list(c('1', '4', '6', '9', '11', NA, '15', '16', '17', '20', '21', '23', '29', '41', '45', '48', '55', '62', '63', '65', '70', '74', '82', '83', '85', '86', '92', '93', '97', '98', '99', '103', '104', '106', '108', '109', '112', '113', '120', '126', '127', '128', '132', '139', '142', '145', '148', '151', '159', '164', '165', '169', '171', '173', '175', '189', '191', '193', '194', '195', '198', '200', '202', '209', '212', '213', '215', '216', '221', '223', '224', '227'), FALSE, FALSE); .Internal(anyDuplicated(argv[[1]], argv[[2]], argv[[3]]))
 [1] 0
 
-##com.oracle.truffle.r.test.builtins.TestBuiltin_anyDuplicated.testanyDuplicated18#Ignored.Unknown#
+##com.oracle.truffle.r.test.builtins.TestBuiltin_anyDuplicated.testanyDuplicated18#Ignored.ImplementationError#
 #argv <- structure(list(x = structure(c(3, 2, 7, 2, 6, 2, 7, 2),     .Dim = c(4L, 2L), .Dimnames = list(c('A', 'B', 'C', 'D'),         c('M', 'F'))), MARGIN = 0), .Names = c('x', 'MARGIN'));do.call('anyDuplicated', argv)
 [1] 4
 
@@ -3129,7 +3129,7 @@ In anyDuplicated.default(c(1L, 2L, 1L, 1L, 3L, 2L), incomparables = "cat") :
 #argv <- structure(list(x = c(1, NA, 3, NA, 3), incomparables = c(3,     NA)), .Names = c('x', 'incomparables'));do.call('anyDuplicated.default', argv)
 [1] 0
 
-##com.oracle.truffle.r.test.builtins.TestBuiltin_anyDuplicatedmatrix.testanyDuplicatedmatrix1#Ignored.Unknown#
+##com.oracle.truffle.r.test.builtins.TestBuiltin_anyDuplicatedmatrix.testanyDuplicatedmatrix1#Ignored.ImplementationError#
 #argv <- structure(list(x = structure(c(3, 2, 7, 2, 6, 2, 7, 2),     .Dim = c(4L, 2L), .Dimnames = list(c('A', 'B', 'C', 'D'),         c('M', 'F'))), MARGIN = 0), .Names = c('x', 'MARGIN'));do.call('anyDuplicated.matrix', argv)
 [1] 4
 
@@ -3296,7 +3296,7 @@ Error in aperm.default(c(1, 2, 3)) :
 Error in aperm.default(c(c(2, 3), c(4, 5), c(6, 7)), c(3, 4)) :
   invalid first argument, must be an array
 
-##com.oracle.truffle.r.test.builtins.TestBuiltin_aperm.testaperm1#Ignored.Unknown#
+##com.oracle.truffle.r.test.builtins.TestBuiltin_aperm.testaperm1#Ignored.ImplementationError#
 #argv <- list(structure(c(FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE), .Dim = c(5L, 14L), .Dimnames = list(c('#ifdef', '\\Sexpr', 'build', 'install', 'render'), NULL)), c(2L, 1L), TRUE); .Internal(aperm(argv[[1]], argv[[2]], argv[[3]]))
       #ifdef \\Sexpr build install render
  [1,]  FALSE   FALSE FALSE   FALSE  FALSE
@@ -3314,7 +3314,7 @@ Error in aperm.default(c(c(2, 3), c(4, 5), c(6, 7)), c(3, 4)) :
 [13,]  FALSE   FALSE FALSE   FALSE  FALSE
 [14,]  FALSE   FALSE FALSE   FALSE  FALSE
 
-##com.oracle.truffle.r.test.builtins.TestBuiltin_aperm.testaperm10#Ignored.Unknown#
+##com.oracle.truffle.r.test.builtins.TestBuiltin_aperm.testaperm10#Ignored.ImplementationError#
 #argv <- list(structure(c(32, 53, 10, 3, 11, 50, 10, 30, 10, 25, 7, 5, 3, 15, 7, 8, 36, 66, 16, 4, 9, 34, 7, 64, 5, 29, 7, 5, 2, 14, 7, 8), .Dim = c(4L, 4L, 2L), .Dimnames = structure(list(Hair = c('Black', 'Brown', 'Red', 'Blond'), Eye = c('Brown', 'Blue', 'Hazel', 'Green'), Sex = c('Male', 'Female')), .Names = c('Hair', 'Eye', 'Sex')), class = 'table'), c(3L, 1L, 2L), TRUE); .Internal(aperm(argv[[1]], argv[[2]], argv[[3]]))
 , , Eye = Brown
 
@@ -3359,7 +3359,7 @@ Sex      Black Brown Red Blond
 [2,]    0 -0.5   NA
 [3,]   -1   NA    0
 
-##com.oracle.truffle.r.test.builtins.TestBuiltin_aperm.testaperm13#Ignored.Unknown#
+##com.oracle.truffle.r.test.builtins.TestBuiltin_aperm.testaperm13#Ignored.ImplementationError#
 #argv <- list(structure(c('    Null deviance:', 'Residual deviance:', '3.118557', '0.012672', ' on', ' on', '8', '7', ' degrees of freedom\n', ' degrees of freedom\n'), .Dim = c(2L, 5L), .Dimnames = list(c('null.deviance', 'deviance'), NULL)), c(2L, 1L), TRUE); .Internal(aperm(argv[[1]], argv[[2]], argv[[3]]))
      null.deviance           deviance
 [1,] "    Null deviance:"    "Residual deviance:"
@@ -3385,7 +3385,7 @@ Sex      Black Brown Red Blond
 [3,]
 
 
-##com.oracle.truffle.r.test.builtins.TestBuiltin_aperm.testaperm15#Ignored.Unknown#
+##com.oracle.truffle.r.test.builtins.TestBuiltin_aperm.testaperm15#Ignored.ImplementationError#
 #argv <- list(structure(c(FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE), .Dim = c(5L, 20L), .Dimnames = list(c('#ifdef', '\\Sexpr', 'build', 'install', 'render'), NULL)), c(2L, 1L), TRUE); .Internal(aperm(argv[[1]], argv[[2]], argv[[3]]))
       #ifdef \\Sexpr build install render
  [1,]  FALSE   FALSE FALSE   FALSE  FALSE
@@ -3447,7 +3447,7 @@ Sex      Black Brown Red Blond
 #argv <- list(structure(c(NA, NA, NA), .Dim = 3L), 1L, TRUE); .Internal(aperm(argv[[1]], argv[[2]], argv[[3]]))
 [1] NA NA NA
 
-##com.oracle.truffle.r.test.builtins.TestBuiltin_aperm.testaperm19#Ignored.Unknown#
+##com.oracle.truffle.r.test.builtins.TestBuiltin_aperm.testaperm19#Ignored.ImplementationError#
 #argv <- list(structure(c(4, 8, 12, 16, 20, 24, 28, 32, 36, 40, 44, 48, 4000, 8000, 12000, 16000, 20000, 24000, 28000, 32000, 36000, 40000, 44000, 48000, 8, 16, 24, 32, 40, 48, 56, 64, 72, 80, 88, 96, 8000, 16000, 24000, 32000, 40000, 48000, 56000, 64000, 72000, 80000, 88000, 96000, 12, 24, 36, 48, 60, 72, 84, 96, 108, 120, 132, 144, 12000, 24000, 36000, 48000, 60000, 72000, 84000, 96000, 108000, 120000, 132000, 144000, 16, 32, 48, 64, 80, 96, 112, 128, 144, 160, 176, 192, 16000, 32000, 48000, 64000, 80000, 96000, 112000, 128000, 144000, 160000, 176000, 192000, 20, 40, 60, 80, 100, 120, 140, 160, 180, 200, 220, 240, 20000, 40000, 60000, 80000, 1e+05, 120000, 140000, 160000, 180000, 2e+05, 220000, 240000, 24, 48, 72, 96, 120, 144, 168, 192, 216, 240, 264, 288, 24000, 48000, 72000, 96000, 120000, 144000, 168000, 192000, 216000, 240000, 264000, 288000, 28, 56, 84, 112, 140, 168, 196, 224, 252, 280, 308, 336, 28000, 56000, 84000, 112000, 140000, 168000, 196000, 224000, 252000, 280000, 308000, 336000, 32, 64, 96, 128, 160, 192, 224, 256, 288, 320, 352, 384, 32000, 64000, 96000, 128000, 160000, 192000, 224000, 256000, 288000, 320000, 352000, 384000, 36, 72, 108, 144, 180, 216, 252, 288, 324, 360, 396, 432, 36000, 72000, 108000, 144000, 180000, 216000, 252000, 288000, 324000, 360000, 396000, 432000, 40, 80, 120, 160, 200, 240, 280, 320, 360, 400, 440, 480, 40000, 80000, 120000, 160000, 2e+05, 240000, 280000, 320000, 360000, 4e+05, 440000, 480000, 44, 88, 132, 176, 220, 264, 308, 352, 396, 440, 484, 528, 44000, 88000, 132000, 176000, 220000, 264000, 308000, 352000, 396000, 440000, 484000, 528000, 48, 96, 144, 192, 240, 288, 336, 384, 432, 480, 528, 576, 48000, 96000, 144000, 192000, 240000, 288000, 336000, 384000, 432000, 480000, 528000, 576000, 52, 104, 156, 208, 260, 312, 364, 416, 468, 520, 572, 624, 52000, 104000, 156000, 208000, 260000, 312000, 364000, 416000, 468000, 520000, 572000, 624000, 56, 112, 168, 224, 280, 336, 392, 448, 504, 560, 616, 672, 56000, 112000, 168000, 224000, 280000, 336000, 392000, 448000, 504000, 560000, 616000, 672000, 60, 120, 180, 240, 300, 360, 420, 480, 540, 600, 660, 720, 60000, 120000, 180000, 240000, 3e+05, 360000, 420000, 480000, 540000, 6e+05, 660000, 720000, 64, 128, 192, 256, 320, 384, 448, 512, 576, 640, 704, 768, 64000, 128000, 192000, 256000, 320000, 384000, 448000, 512000, 576000, 640000, 704000, 768000, 68, 136, 204, 272, 340, 408, 476, 544, 612, 680, 748, 816, 68000, 136000, 204000, 272000, 340000, 408000, 476000, 544000, 612000, 680000, 748000, 816000, 72, 144, 216, 288, 360, 432, 504, 576, 648, 720, 792, 864, 72000, 144000, 216000, 288000, 360000, 432000, 504000, 576000, 648000, 720000, 792000, 864000, 76, 152, 228, 304, 380, 456, 532, 608, 684, 760, 836, 912, 76000, 152000, 228000, 304000, 380000, 456000, 532000, 608000, 684000, 760000, 836000, 912000, 80, 160, 240, 320, 400, 480, 560, 640, 720, 800, 880, 960, 80000, 160000, 240000, 320000, 4e+05, 480000, 560000, 640000, 720000, 8e+05, 880000, 960000, 84, 168, 252, 336, 420, 504, 588, 672, 756, 840, 924, 1008, 84000, 168000, 252000, 336000, 420000, 504000, 588000, 672000, 756000, 840000, 924000, 1008000, 88, 176, 264, 352, 440, 528, 616, 704, 792, 880, 968, 1056, 88000, 176000, 264000, 352000, 440000, 528000, 616000, 704000, 792000, 880000, 968000, 1056000, 92, 184, 276, 368, 460, 552, 644, 736, 828, 920, 1012, 1104, 92000, 184000, 276000, 368000, 460000, 552000, 644000, 736000, 828000, 920000, 1012000, 1104000, 96, 192, 288, 384, 480, 576, 672, 768, 864, 960, 1056, 1152, 96000, 192000, 288000, 384000, 480000, 576000, 672000, 768000, 864000, 960000, 1056000, 1152000), .Dim = c(3L, 4L, 2L, 3L, 4L, 2L), .Dimnames = list(c('A', 'B', 'C'), c('D', 'E', 'F', 'G'), c('frequentist', 'bayesian'), NULL, NULL, c('happy', 'sad'))), c(4L, 1L, 5L, 2L, 6L, 3L), TRUE); .Internal(aperm(argv[[1]], argv[[2]], argv[[3]]))
 , , 1, D, happy, frequentist
 
@@ -3949,7 +3949,7 @@ Sex      Black Brown Red Blond
 [2,] "default" "default" "default"
 [3,] NA        NA        NA
 
-##com.oracle.truffle.r.test.builtins.TestBuiltin_aperm.testaperm20#Ignored.Unknown#
+##com.oracle.truffle.r.test.builtins.TestBuiltin_aperm.testaperm20#Ignored.ImplementationError#
 #argv <- list(structure(1:24, .Dim = c(4L, 6L), .Dimnames = structure(list(happy = c('a', 'b', 'c', 'd'), sad = c('A', 'B', 'C', 'D', 'E', 'F')), .Names = c('happy', 'sad'))), c(2, 1), TRUE); .Internal(aperm(argv[[1]], argv[[2]], argv[[3]]))
    happy
 sad  a  b  c  d
@@ -3960,7 +3960,7 @@ sad  a  b  c  d
   E 17 18 19 20
   F 21 22 23 24
 
-##com.oracle.truffle.r.test.builtins.TestBuiltin_aperm.testaperm21#Ignored.Unknown#
+##com.oracle.truffle.r.test.builtins.TestBuiltin_aperm.testaperm21#Ignored.ImplementationError#
 #argv <- list(structure(1:120, .Dim = 2:5, .Dimnames = list(NULL, c('a', 'b', 'c'), NULL, c('V5', 'V6', 'V7', 'V8', 'V9'))), 1:4, TRUE); .Internal(aperm(argv[[1]], argv[[2]], argv[[3]]))
 , , 1, V5
 
@@ -4083,7 +4083,7 @@ sad  a  b  c  d
 [2,] 116 118 120
 
 
-##com.oracle.truffle.r.test.builtins.TestBuiltin_aperm.testaperm22#Ignored.Unknown#
+##com.oracle.truffle.r.test.builtins.TestBuiltin_aperm.testaperm22#Ignored.ImplementationError#
 #argv <- list(structure(c('    Null deviance:', 'Residual deviance:', '67.5316', ' 4.5512', ' on', ' on', '9', '7', ' degrees of freedom\n', ' degrees of freedom\n'), .Dim = c(2L, 5L), .Dimnames = list(c('null.deviance', 'deviance'), NULL)), c(2L, 1L), TRUE); .Internal(aperm(argv[[1]], argv[[2]], argv[[3]]))
      null.deviance           deviance
 [1,] "    Null deviance:"    "Residual deviance:"
@@ -4097,13 +4097,13 @@ sad  a  b  c  d
       [,1]  [,2]  [,3]
 [1,] FALSE FALSE FALSE
 
-##com.oracle.truffle.r.test.builtins.TestBuiltin_aperm.testaperm24#Ignored.Unknown#
+##com.oracle.truffle.r.test.builtins.TestBuiltin_aperm.testaperm24#Ignored.ImplementationError#
 #argv <- list(structure(c(3, 3, 3, 3, 3, 3, 3, 3, 4, 3, 2, 1, 2, 3, 4, 5), .Dim = c(8L, 2L), .Dimnames = list(c('a', 'b', 'c', 'd', 'e', 'f', 'g', 'h'), c('x1', 'x2'))), c(2L, 1L), TRUE); .Internal(aperm(argv[[1]], argv[[2]], argv[[3]]))
    a b c d e f g h
 x1 3 3 3 3 3 3 3 3
 x2 4 3 2 1 2 3 4 5
 
-##com.oracle.truffle.r.test.builtins.TestBuiltin_aperm.testaperm25#Ignored.Unknown#
+##com.oracle.truffle.r.test.builtins.TestBuiltin_aperm.testaperm25#Ignored.ImplementationError#
 #argv <- list(structure(c(0, 1.23517986278748, 1.95771376416406, 2.47035972557496, 2.86799882564536, 3.19289362695154, 3.46758826742286, 3.70553958836244, 3.91542752832811, 4.10317868843284, 4.27302027203108, 4.42807348973901, 4.57070862330685, 4.70276813021034, 4.82571258980942, 4.94071945114991, 5.04875179140451, 5.15060739111559, 5.2469545231864, 5.33835855122032, 5.42530203158692, 5.50820013481856, 5.58741263619316, 5.66325335252649, 5.73599765129073, 5.80588848609433, 5.87314129249217, 5.93794799299782, 6.00048029898585, 6.0608924525969, 6.11932351888589, 6.17589931393739, 6.23073403619514, 6.28393165419199, 6.33558709306823, 6.38578725390307, 6.43461189335533, 6.48213438597388, 6.52842238747091, 6.5735384140078, 6.61754034994095, 6.6604818943744, 6.70241295516147, 6.74337999760604, 6.78342635397348, 6.82259249898064, 6.86091629565604, 6.89843321531397, 6.93517653484573, 6.97117751407821, 7.00646555556857, 7.04106834888181, 7.07501200112497, 7.10832115527965, 7.14101909767645, 7.1731278557853, 7.20466828735046, 7.23566016177333, 7.26612223453848, 7.29607231538438, 7.3255273308395, 7.35450338167337, 7.38301579575098, 7.41107917672487, 7.43870744895221, 7.46591389898262, 7.49271121392624, 7.51911151697947, 7.54512640035722, 7.57076695585571, 7.59604380324749, 7.62096711669055, 7.64554664931599, 7.66979175614282, 7.69371141545478, 7.71731424876136, 7.74060853945395, 7.76360225025839, 7.78630303957574, 7.80871827679528, 7.83085505665623, 7.85272021272842, 7.87432033007586, 7.89566175716188, 7.91675061704988, 7.93759281794895, 7.95819406314991, 7.97855986039352, 7.99869553070936, 8.01860621676096, 8.03829689072971, 8.05777236176812, 8.07703728304995, 8.09609615844352, 8.11495334883177, 8.13361307810145, 8.15207943882202, 8.17035639763321, 8.1884478003592, 8.20635737686569, 5.76558893216369, 5.5342688729893, 5.69366159038267, 6.17674775070929, 6.08762735966107, 6.68653280779044, 6.70253591217234, 6.32938323618963, 6.81735284786279, 6.64835766778347, 6.91213030655848, 7.1496842781073, 7.25682341590407, 7.46164094256645, 7.37149913131863, 7.56470707593246, 7.71334191900841, 7.71375128844693, 7.82793409372511, 7.90749319121623, 7.96255733207686, 8.11381187364273, 8.21211505208663, 8.18427543602736, 8.29133399017863, 8.31295002652197, 8.345677476918, 8.39053879616249, 8.40857122007675, 8.48086068897741, 8.7064475146364, 8.66563269607315, 8.79435721712053, 8.7996087849725, 8.82443395257555, 8.91314507957224, 8.8999544270272, 8.96760168103462, 8.93548690078514, 9.01332239000153, 9.07083338712431, 9.15422051683385, 9.20109302097792, 9.2062218972166, 9.31170984199071, 9.30909253379462, 9.35447695163181, 9.45333740615033, 9.41458248768079, 9.46983861007334, 9.51652628670815, 9.5301888386762, 9.59497468213833, 9.61268143770055, 9.64141492393412, 9.68857453461133, 9.77580537125637, 9.79816256416163, 9.79128849346381, 9.80699184934282, 9.91833626833319, 9.95487179604373, 9.88086373278725, 9.93505313047982, 9.97034080826287, 9.97752630228797, 10.1165750634827, 10.0977558023188, 10.1414502841663, 10.129071787117, 10.166774063688, 10.1792762662323, 10.2172491181904, 10.2670710204409, 10.2742314938915, 10.287876622612, 10.3447249333494, 10.4075370351282, 10.3465199067119, 10.4404223214255, 10.422301774768, 10.4739543513507, 10.5314461891317, 10.4813429169605, 10.5097541699286, 10.5389544549716, 10.5752633644781, 10.6133054015308, 10.6776080133421, 10.6266190058322, 10.6657950921482, 10.7067723709738, 10.7424707425861, 10.7418659657784, 10.7335163259687, 10.780101845273, 10.8334343829096, 10.8616735406708, 10.8535694508523, 10.8900668188725), .Dim = c(100L, 2L), .Dimnames = list(c('1', '2', '3', '4', '5', '6', '7', '8', '9', '10', '11', '12', '13', '14', '15', '16', '17', '18', '19', '20', '21', '22', '23', '24', '25', '26', '27', '28', '29', '30', '31', '32', '33', '34', '35', '36', '37', '38', '39', '40', '41', '42', '43', '44', '45', '46', '47', '48', '49', '50', '51', '52', '53', '54', '55', '56', '57', '58', '59', '60', '61', '62', '63', '64', '65', '66', '67', '68', '69', '70', '71', '72', '73', '74', '75', '76', '77', '78', '79', '80', '81', '82', '83', '84', '85', '86', '87', '88', '89', '90', '91', '92', '93', '94', '95', '96', '97', '98', '99', '100'), c('log(x)', 'log(z)'))), 1:2, TRUE); .Internal(aperm(argv[[1]], argv[[2]], argv[[3]]))
       log(x)    log(z)
 1   0.000000  5.765589
@@ -4207,7 +4207,7 @@ x2 4 3 2 1 2 3 4 5
 99  8.188448 10.853569
 100 8.206357 10.890067
 
-##com.oracle.truffle.r.test.builtins.TestBuiltin_aperm.testaperm27#Ignored.Unknown#
+##com.oracle.truffle.r.test.builtins.TestBuiltin_aperm.testaperm27#Ignored.ImplementationError#
 #argv <- structure(list(a = structure(c(0.124248979591837, 0.266432653061224,     0.404342857142857, 0.0992163265306122, 0.0851836734693878,     0.0937632653061225, 0.0163551020408163, 0.182897959183673,     0.303289795918367, 0.010330612244898, 0.0557795918367347,     0.0490938775510204, 0.0992163265306122, 0.0851836734693878,     0.0937632653061225, 0.143689795918367, 0.098469387755102,     0.104004081632653, 0.0116979591836735, 0.0826530612244898,     0.0713795918367347, 0.00929795918367347, 0.0412040816326531,     0.0476285714285714, 0.0163551020408163, 0.182897959183673,     0.303289795918367, 0.0116979591836735, 0.0826530612244898,     0.0713795918367347, 0.0301591836734694, 0.220816326530612,     0.304587755102041, 0.00606938775510204, 0.0731020408163265,     0.0488244897959184, 0.010330612244898, 0.0557795918367347,     0.0490938775510204, 0.00929795918367347, 0.0412040816326531,     0.0476285714285714, 0.00606938775510204, 0.0731020408163265,     0.0488244897959184, 0.0111061224489796, 0.0391061224489796,     0.0754326530612245), .Dim = c(3L, 4L, 4L), .Dimnames = structure(list(Species = c('setosa',     'versicolor', 'virginica'), c('Sepal.Length', 'Sepal.Width',     'Petal.Length', 'Petal.Width'), c('Sepal.Length', 'Sepal.Width',     'Petal.Length', 'Petal.Width')), .Names = c('Species', '',     ''))), perm = c(2, 3, 1)), .Names = c('a', 'perm'));do.call('aperm', argv)
 , , Species = setosa
 
@@ -4250,19 +4250,19 @@ x2 4 3 2 1 2 3 4 5
  [8,] 0.6666667
  [9,] 0.6666667
 
-##com.oracle.truffle.r.test.builtins.TestBuiltin_aperm.testaperm4#Ignored.Unknown#
+##com.oracle.truffle.r.test.builtins.TestBuiltin_aperm.testaperm4#Ignored.ImplementationError#
 #argv <- list(structure(c(0L, 0L, 0L, 1L, 0L, 1L, 1L, 1L), .Dim = c(1L, 8L), .Dimnames = list('strata(enum)', c('rx', 'size', 'number', 'strata(enum)', 'cluster(id)', 'rx:strata(enum)', 'size:strata(enum)', 'number:strata(enum)'))), 1:2, TRUE); .Internal(aperm(argv[[1]], argv[[2]], argv[[3]]))
              rx size number strata(enum) cluster(id) rx:strata(enum)
 strata(enum)  0    0      0            1           0               1
              size:strata(enum) number:strata(enum)
 strata(enum)                 1                   1
 
-##com.oracle.truffle.r.test.builtins.TestBuiltin_aperm.testaperm5#Ignored.Unknown#
+##com.oracle.truffle.r.test.builtins.TestBuiltin_aperm.testaperm5#Ignored.ImplementationError#
 #argv <- list(structure(c(9.2319289524956, -0.470372045488369, 186.857050189827), .Dim = c(1L, 3L), .Dimnames = list('118', c('age', 'sex', 'meal.cal'))), 1:2, TRUE); .Internal(aperm(argv[[1]], argv[[2]], argv[[3]]))
          age       sex meal.cal
 118 9.231929 -0.470372 186.8571
 
-##com.oracle.truffle.r.test.builtins.TestBuiltin_aperm.testaperm6#Ignored.Unknown#
+##com.oracle.truffle.r.test.builtins.TestBuiltin_aperm.testaperm6#Ignored.ImplementationError#
 #argv <- list(structure(c(414L, 439L, 382L, 388L, 383L, 364L, 364L, 363L, 349L, 371L, 102L, 388L, 388L, 363L, 367L, 365L, 382L, 362L, 373L, 385L, 376L, 360L, 306L, 160L, 316L, 316L, 315L, 357L, 360L, 347L, 353L, 308L, 327L, 329L, 343L, 251L, 318L, 304L, 316L, 335L, 365L, 336L, 350L, 356L, 339L, 301L, 330L, 300L, 300L, 312L, 334L, 270L, 347L, 293L, 303L, 337L, 287L, 293L, 293L, 318L, 359L, 351L, 322L, 343L, 269L, 286L, 286L, 273L, 297L, 273L, 273L, 273L, 294L, 303L, 281L, 273L, 255L, 269L, 270L, 270L, 276L, 264L, 245L, 261L, 270L, 273L, 306L, 274L, 279L, 278L, 278L, 284L, 276L, 265L, 294L, 277L, 259L, 287L, 263L, 240L, 217L, 271L, 252L, 331L, 255L, 271L, 254L, 185L, 213L, 210L, 203L, 288L, 269L, 269L, 91L, 91L, 192L, 199L, 195L, 198L, 207L, 200L, 197L, 243L, 203L, 197L, 227L, 227L, 219L, 8L, NA, NA, 246L, NA, 292L, NA, 294L, NA, 19L, 373L, NA, 211L, 82L, NA, 334L, 18L, NA, 280L, NA, NA, NA, NA, 146L, NA, NA, NA, 267L, 206L, 175L, NA, NA, NA, NA, 118L, NA, NA, NA, NA, 274L, NA, NA, 187L, NA, 6L, NA, NA, 146L, 304L, NA, 52L, 67L, NA, 265L, NA, 91L, NA, NA, NA, 318L, 57L, 226L, 65L, NA, 264L, NA, NA, NA, 236L, NA, 207L, NA, NA, NA, NA, NA, NA, 23L, NA, NA, NA, NA, NA, NA, 113L, 99L, NA, NA, 14L, NA, NA, NA, NA, NA, NA, NA, 4L, NA, 167L, NA, NA, NA, NA, NA, NA, NA, NA, NA, 165L, NA, NA, NA, NA, NA, NA, NA, NA, 11L, NA, NA, 168L, NA, NA, 120L, NA, 104L, NA, 373L, 26L, NA, NA, 253L, NA, NA, NA, NA, NA, NA, NA, NA, 260L, 114L, NA, 370L, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 280L, NA, NA, NA, NA, 240L, NA, NA, NA, NA, 361L, NA, NA, NA, NA, NA, NA, NA, 188L, NA, NA, 65L, 248L, NA, NA, NA, 121L, NA, NA, NA, NA, 121L, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 306L, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 159L, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 22L, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 152L, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 265L, 337L, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 255L, 250L, NA, NA, NA, 203L, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 213L, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 169L, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 241L, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 269L, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 284L, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 249L, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 307L, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 322L, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 350L, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA), .Dim = c(128L, 8L), .Dimnames = list(    NULL, c('futime', 'e1', 'e2', 'e3', 'e4', 'e5', 'e6', 'e7'))), c(2L, 1L), TRUE); .Internal(aperm(argv[[1]], argv[[2]], argv[[3]]))
        [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10] [,11] [,12] [,13]
 futime  414  439  382  388  383  364  364  363  349   371   102   388   388
@@ -4383,7 +4383,7 @@ e7         NA
 [5,]  -10    0  180    0    0    0  340  380
 [6,]    0    0    0    0    0    0    0    0
 
-##com.oracle.truffle.r.test.builtins.TestBuiltin_aperm.testaperm8#Ignored.Unknown#
+##com.oracle.truffle.r.test.builtins.TestBuiltin_aperm.testaperm8#Ignored.ImplementationError#
 #argv <- list(structure(c(544.790381900886, 398.486952468991, 440.879079007027, 273.26068924187, -165.547292067734, -289.908895455829, -336.563851641157, -433.491123254512, -446.830170210184, -229.698549757081, 7.43503106965538, 237.187718724823, 544.790381900886, 398.486952468991, 440.879079007027, 273.26068924187, -165.547292067734, -289.908895455829, -336.563851641157, -433.491123254512, -446.830170210184, -229.698549757081, 7.43503106965538, 237.187718724823, 544.790381900886, 398.486952468991, 440.879079007027, 273.26068924187, -165.547292067734, -289.908895455829, -336.563851641157, -433.491123254512, -446.830170210184, -229.698549757081, 7.43503106965538, 237.187718724823, 544.790381900886, 398.486952468991, 440.879079007027, 273.26068924187, -165.547292067734, -289.908895455829, -336.563851641157, -433.491123254512, -446.830170210184, -229.698549757081, 7.43503106965538, 237.187718724823, 544.790381900886, 398.486952468991, 440.879079007027, 273.26068924187, -165.547292067734, -289.908895455829, -336.563851641157, -433.491123254512, -446.830170210184, -229.698549757081, 7.43503106965538, 237.187718724823, 544.790381900886, 398.486952468991, 440.879079007027, 273.26068924187, -165.547292067734, -289.908895455829, -336.563851641157, -433.491123254512, -446.830170210184, -229.698549757081, 7.43503106965538, 237.187718724823, 1539.44739946315, 1548.66655077773, 1557.88570209231, 1566.45228027983, 1575.01885846735, 1583.14083472285, 1591.26281097836, 1599.26100149451, 1607.25919201066, 1611.39689466313, 1615.5345973156, 1612.61129444623, 1609.68799157686, 1603.44643859537, 1597.20488561388, 1588.73002343463, 1580.25516125537, 1570.86127478964, 1561.46738832392, 1549.89535441445, 1538.32332050498, 1524.62526591843, 1510.92721133189, 1499.65830819836, 1488.38940506483, 1479.31388700637, 1470.23836894792, 1460.03887936132, 1449.83938977473, 1441.27547309544, 1432.71155641615, 1432.51830671501, 1432.32505701387, 1433.15763708544, 1433.99021715701, 1434.96142536256, 1435.9326335681, 1435.47421580154, 1435.01579803498, 1433.4368629411, 1431.85792784722, 1430.85617066215, 1429.85441347709, 1432.59097206397, 1435.32753065085, 1440.49425642708, 1445.66098220331, 1448.76676550395, 1451.87254880459, 1452.9163236715, 1453.96009853841, 1454.6961768366, 1455.43225513478, 1452.22362902495, 1449.01500291512, 1442.43484036078, 1435.85467780644, 1426.50159512644, 1417.14851244644, 1409.58997614642, 1402.0314398464, 1397.59624058751, 1393.16104132862, 1386.64426440334, 1380.12748747807, 1371.71107833433, 1363.2946691906, 1354.59002807904, 1345.88538696748, 1336.94914699242, 1328.01290701735, 1318.64960669271, 49.7622186359663, -84.1535032467218, -121.764781099341, 37.2870304782966, 82.528433600382, -44.2319392670254, 25.3010406627996, -34.7698782399993, 48.5709781995188, 110.301655093951, -1.96962838525201, -3.7990131710535, -51.4783734777507, 135.066608935635, 114.916035379091, -28.990712676497, -11.7078691876363, 7.04762066618673, -38.9035366827579, 16.5957688400649, -38.4931502947952, 52.0732838386475, 26.6377575984557, 329.153973076816, -13.1797869657194, 872.199160524634, 371.882552045056, -254.299568603192, -95.2920977069916, 8.63342236039193, 16.852295225008, -29.0271834604991, 13.5051131963112, 4.54091267164154, 25.5747517733375, 386.850855912621, 259.276984531009, -199.961168270532, -153.894877042003, 94.302447817031, -20.3106357794875, 21.0527247936745, -6.29056183593116, 13.9001511905426, -29.4973604406664, -31.7957066699985, -224.096013272965, -30.9544842287708, 22.3370692945275, 432.596723859509, 47.1608224545594, -304.956866078466, 50.1150369329559, 24.6852664308792, -14.4511512739648, -4.94371710626865, -19.024507596255, -56.8030453693573, -314.583543516094, 165.222305128756, 316.17817825271, 23.9168069434991, 11.9598796643579, -128.904953645213, 0.419804589665318, -6.80218287850425, 29.2691824505584, 53.9010951754703, 40.9447832426993, -26.2505972353374, -41.4479380870087, -214.837325417531, 2134, 1863, 1877, 1877, 1492, 1249, 1280, 1131, 1209, 1492, 1621, 1846, 2103, 2137, 2153, 1833, 1403, 1288, 1186, 1133, 1053, 1347, 1545, 2066, 2020, 2750, 2283, 1479, 1189, 1160, 1113, 970, 999, 1208, 1467, 2059, 2240, 1634, 1722, 1801, 1246, 1162, 1087, 1013, 959, 1179, 1229, 1655, 2019, 2284, 1942, 1423, 1340, 1187, 1098, 1004, 970, 1140, 1110, 1812, 2263, 1820, 1846, 1531, 1215, 1075, 1056, 975, 940, 1081, 1294, 1341), .Dim = c(72L, 4L), .Dimnames = list(NULL, c('STL.seasonal', 'STL.trend', 'STL.remainder', 'data')), .Tsp = c(1974, 1979.91666666667, 12), class = c('mts', 'ts', 'matrix')), 1:2, TRUE); .Internal(aperm(argv[[1]], argv[[2]], argv[[3]]))
       STL.seasonal STL.trend STL.remainder data
  [1,]   544.790382  1539.447    49.7622186 2134
@@ -4477,7 +4477,7 @@ e7         NA
 #argv <- structure(list(x = 1:5, values = 0:1, after = 3), .Names = c('x',     'values', 'after'));do.call('append', argv)
 [1] 1 2 3 0 1 4 5
 
-##com.oracle.truffle.r.test.builtins.TestBuiltin_aregexec.testaregexec1#Ignored.Unknown#
+##com.oracle.truffle.r.test.builtins.TestBuiltin_aregexec.testaregexec1#Ignored.Unimplemented#
 #argv <- list('FALSE', 'FALSE', c(0.1, NA, NA, NA, NA), c(1L, 1L, 1L), FALSE, FALSE, FALSE); .Internal(aregexec(argv[[1]], argv[[2]], argv[[3]], argv[[4]], argv[[5]], argv[[6]], argv[[7]]))
 [[1]]
 [1] 1
@@ -4485,7 +4485,7 @@ attr(,"match.length")
 [1] 5
 
 
-##com.oracle.truffle.r.test.builtins.TestBuiltin_aregexec.testaregexec2#Ignored.Unknown#
+##com.oracle.truffle.r.test.builtins.TestBuiltin_aregexec.testaregexec2#Ignored.Unimplemented#
 #argv <- list('(lay)(sy)', c('1 lazy', '1', '1 LAZY'), c(2, NA, NA, NA, NA), c(1L, 1L, 1L), FALSE, FALSE, FALSE); .Internal(aregexec(argv[[1]], argv[[2]], argv[[3]], argv[[4]], argv[[5]], argv[[6]], argv[[7]]))
 [[1]]
 [1] 3 3 5
@@ -6179,7 +6179,7 @@ character(0)
 #argv <- structure(list(x = structure(c(1L, 2L, NA), .Label = c('AB',     'CD'), class = 'factor')), .Names = 'x');do.call('as.character.factor', argv)
 [1] "AB" "CD" NA
 
-##com.oracle.truffle.r.test.builtins.TestBuiltin_ascomplex.testAsComplex#Ignored.Unknown#
+##com.oracle.truffle.r.test.builtins.TestBuiltin_ascomplex.testAsComplex#Ignored.ImplementationError#
 #{ as.complex("+.1e+2-3i") }
 [1] 10-3i
 
@@ -6203,7 +6203,7 @@ character(0)
 #{ as.complex("1+5i") }
 [1] 1+5i
 
-##com.oracle.truffle.r.test.builtins.TestBuiltin_ascomplex.testAsComplex#Ignored.Unknown#
+##com.oracle.truffle.r.test.builtins.TestBuiltin_ascomplex.testAsComplex#Ignored.ImplementationError#
 #{ as.complex("1e-2+3i") }
 [1] 0.01+3i
 
@@ -6293,7 +6293,7 @@ complex(0)
 #argv <- list(FALSE, FALSE);as.complex(argv[[1]],argv[[2]]);
 [1] 0+0i
 
-##com.oracle.truffle.r.test.builtins.TestBuiltin_ascomplex.testascomplex3#Ignored.Unknown#
+##com.oracle.truffle.r.test.builtins.TestBuiltin_ascomplex.testascomplex3#Output.IgnoreWarningMessage#
 #argv <- list(' ');as.complex(argv[[1]]);
 [1] NA
 
@@ -6341,12 +6341,12 @@ q3.csv      0.3333333 0.6666667 0.5000000
 [1] Freq
 <0 rows> (or 0-length row.names)
 
-##com.oracle.truffle.r.test.builtins.TestBuiltin_asdifftime.testasdifftime1#Ignored.Unknown#
+##com.oracle.truffle.r.test.builtins.TestBuiltin_asdifftime.testasdifftime1#Ignored.ImplementationError#
 #argv <- structure(list(tim = c('0:3:20', '11:23:15')), .Names = 'tim');do.call('as.difftime', argv)
 Time differences in mins
 [1]   3.333333 683.250000
 
-##com.oracle.truffle.r.test.builtins.TestBuiltin_asdifftime.testasdifftime2#Ignored.Unknown#
+##com.oracle.truffle.r.test.builtins.TestBuiltin_asdifftime.testasdifftime2#Ignored.ImplementationError#
 #argv <- structure(list(tim = c('3:20', '23:15', '2:'), format = '%H:%M'),     .Names = c('tim', 'format'));do.call('as.difftime', argv)
 Time differences in hours
 [1]  3.333333 23.250000        NA
@@ -6467,7 +6467,7 @@ numeric(0)
 [149] 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 4 4 4 4 4 4 4 4 4 4 4 4 4 5 5 5 5 5 5 5 5 5
 [186] 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6
 
-##com.oracle.truffle.r.test.builtins.TestBuiltin_asdouble.testasdouble16#Ignored.Unknown#
+##com.oracle.truffle.r.test.builtins.TestBuiltin_asdouble.testasdouble16#Ignored.ImplementationError#
 #argv <- list(structure(28, units = 'days', class = 'difftime'), units = 'secs');as.double(argv[[1]],argv[[2]]);
 [1] 2419200
 
@@ -6508,7 +6508,7 @@ numeric(0)
  [1] 9.9e-03 9.9e-02 9.9e-01 9.9e+00 9.9e+01 9.9e+02 9.9e+03 9.9e+04 9.9e+05
 [10] 9.9e+06 9.9e+07 9.9e+08 9.9e+09 9.9e+10
 
-##com.oracle.truffle.r.test.builtins.TestBuiltin_asdouble.testasdouble19#Ignored.Unknown#
+##com.oracle.truffle.r.test.builtins.TestBuiltin_asdouble.testasdouble19#Ignored.ImplementationError#
 #argv <- list(structure(180.958333333333, units = 'days', class = 'difftime'), units = 'secs');as.double(argv[[1]],argv[[2]]);
 [1] 15634800
 
@@ -6558,7 +6558,7 @@ numeric(0)
  [1]   9.000   3.000   3.000   6.761 156.678  18.327  11.764 191.640 323.560
 [10] 197.210 190.640
 
-##com.oracle.truffle.r.test.builtins.TestBuiltin_asdouble.testasdouble3#Ignored.Unknown#
+##com.oracle.truffle.r.test.builtins.TestBuiltin_asdouble.testasdouble3#Ignored.ImplementationError#
 #argv <- list(structure(4, tzone = 'GMT', units = 'days', class = 'difftime'), units = 'secs');as.double(argv[[1]],argv[[2]]);
 [1] 345600
 
@@ -7202,7 +7202,7 @@ logical(0)
 [1,]    1    3
 [2,]    2    4
 
-##com.oracle.truffle.r.test.builtins.TestBuiltin_asmatrix.testMatrix#Ignored.Unknown#Output.IgnoreWarningContext#
+##com.oracle.truffle.r.test.builtins.TestBuiltin_asmatrix.testMatrix#Output.MissingWarning#
 #{ matrix(1:4,3,2) }
      [,1] [,2]
 [1,]    1    4
@@ -7305,7 +7305,7 @@ In matrix(1:4, 3, 2) :
 [1,]    1    3
 [2,]    2    4
 
-##com.oracle.truffle.r.test.builtins.TestBuiltin_asmatrix.testMatrix#Ignored.Unknown#Output.IgnoreWarningContext#
+##com.oracle.truffle.r.test.builtins.TestBuiltin_asmatrix.testMatrix#Output.MissingWarning#
 #{ matrix(c(1,2,3,4),3,2) }
      [,1] [,2]
 [1,]    1    4
@@ -8555,7 +8555,7 @@ NULL
 #argv <- list(structure(c(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1), .Dim = c(32L, 23L), .Dimnames = list(c('1', '2', '3', '4', '5', '6', '7', '8', '9', '10', '11', '12', '13', '14', '15', '16', '17', '18', '19', '20', '21', '22', '23', '24', '25', '26', '27', '28', '29', '30', '31', '32'), c('(Intercept)', 'HairBrown', 'HairRed', 'HairBlond', 'EyeBlue', 'EyeHazel', 'EyeGreen', 'SexFemale', 'HairBrown:EyeBlue', 'HairRed:EyeBlue', 'HairBlond:EyeBlue', 'HairBrown:EyeHazel', 'HairRed:EyeHazel', 'HairBlond:EyeHazel', 'HairBrown:EyeGreen', 'HairRed:EyeGreen', 'HairBlond:EyeGreen', 'HairBrown:SexFemale', 'HairRed:SexFemale', 'HairBlond:SexFemale', 'EyeBlue:SexFemale', 'EyeHazel:SexFemale', 'EyeGreen:SexFemale')), assign = c(0L, 1L, 1L, 1L, 2L, 2L, 2L, 3L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 5L, 5L, 5L, 6L, 6L, 6L), contrasts = structure(list(Hair = 'contr.treatment',     Eye = 'contr.treatment', Sex = 'contr.treatment'), .Names = c('Hair', 'Eye', 'Sex'))), 'assign');attr(argv[[1]],argv[[2]]);
  [1] 0 1 1 1 2 2 2 3 4 4 4 4 4 4 4 4 4 5 5 5 6 6 6
 
-##com.oracle.truffle.r.test.builtins.TestBuiltin_attr.testattr10#Ignored.Unknown#
+##com.oracle.truffle.r.test.builtins.TestBuiltin_attr.testattr10#Output.IgnoreWhitespace#
 #argv <- list(structure(list(Employed = c(60.323, 61.122, 60.171, 61.187, 63.221, 63.639, 64.989, 63.761, 66.019, 67.857, 68.169, 66.513, 68.655, 69.564, 69.331, 70.551), GNP.deflator = c(83, 88.5, 88.2, 89.5, 96.2, 98.1, 99, 100, 101.2, 104.6, 108.4, 110.8, 112.6, 114.2, 115.7, 116.9), GNP = c(234.289, 259.426, 258.054, 284.599, 328.975, 346.999, 365.385, 363.112, 397.469, 419.18, 442.769, 444.546, 482.704, 502.601, 518.173, 554.894), Unemployed = c(235.6, 232.5, 368.2, 335.1, 209.9, 193.2, 187, 357.8, 290.4, 282.2, 293.6, 468.1, 381.3, 393.1, 480.6, 400.7), Armed.Forces = c(159, 145.6, 161.6, 165, 309.9, 359.4, 354.7, 335, 304.8, 285.7, 279.8, 263.7, 255.2, 251.4, 257.2, 282.7), Population = c(107.608, 108.632, 109.773, 110.929, 112.075, 113.27, 115.094, 116.219, 117.388, 118.734, 120.445, 121.95, 123.366, 125.368, 127.852, 130.081), Year = 1947:1962), .Names = c('Employed', 'GNP.deflator', 'GNP', 'Unemployed', 'Armed.Forces', 'Population', 'Year'), terms = quote(Employed ~ GNP.deflator + GNP + Unemployed +     Armed.Forces + Population + Year), row.names = 1947:1962, class = 'data.frame'), 'terms');attr(argv[[1]],argv[[2]]);
 Employed ~ GNP.deflator + GNP + Unemployed + Armed.Forces + Population +
     Year
@@ -9411,7 +9411,7 @@ $class
 #argv <- list(c(1000, 1e+07, 1));attributes(argv[[1]]);
 NULL
 
-##com.oracle.truffle.r.test.builtins.TestBuiltin_attributes.testattributes23#Ignored.Unknown#
+##com.oracle.truffle.r.test.builtins.TestBuiltin_attributes.testattributes23#Ignored.ImplementationError#
 #argv <- list(structure(list(), .Names = character(0), arguments = structure('object', simpleOnly = TRUE), signatures = list(), generic = structure(function (object) standardGeneric('show'), generic = structure('show', package = 'methods'), package = 'methods', group = list(), valueClass = character(0), signature = structure('object', simpleOnly = TRUE), default = structure(function (object) showDefault(object, FALSE), target = structure('ANY', class = structure('signature', package = 'methods'), .Names = 'object', package = 'methods'), defined = structure('ANY', class = structure('signature', package = 'methods'), .Names = 'object', package = 'methods'), generic = structure('show', package = 'methods'), class = structure('derivedDefaultMethod', package = 'methods')), skeleton = quote((function (object) showDefault(object, FALSE))(object)), class = structure('standardGeneric', package = 'methods')), class = structure('listOfMethods', package = 'methods')));attributes(argv[[1]]);
 $names
 character(0)
@@ -9677,7 +9677,7 @@ attr(,"foo")
 #argv <- structure(list(structure(list(), class = structure('L',     package = '.GlobalEnv')), value = NULL), .Names = c('', 'value'));do.call('attributes<-', argv)
 list()
 
-##com.oracle.truffle.r.test.builtins.TestBuiltin_backsolve.testbacksolve1#Ignored.Unknown#
+##com.oracle.truffle.r.test.builtins.TestBuiltin_backsolve.testbacksolve1#Ignored.Unimplemented#
 #argv <- list(structure(c(-2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -0.0421675318334475, 0, -2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -0.0421675318334475, 0, 0, -2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -0.445407110781343, 0, 0, 0, -1.73205080756888, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -0.510819156714975, 0, 0, 0, 0, -1.73205080756888, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -0.510819156714975, 0, 0, 0, 0, 0, -1.73205080756888, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -0.510819156714975, 0, 0, 0, 0, 0, 0, -1.4142135623731, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -0.0592753100948471, 0, 0, 0, 0, 0, 0, 0, -1.4142135623731, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -0.428419619610855, 0, 0, 0, 0, 0, 0, 0, 0, -1.4142135623731, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -0.252201198430086, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1.4142135623731, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -0.428419619610855, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1.73205080756888, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -0.510819156714975, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1.4142135623731, 0, 0, 0, 0, 0, 0, 0, 0, 0, -0.0592753100948472, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1.4142135623731, 0, 0, 0, 0, 0, 0, 0, 0, -0.0592753100948472, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1.4142135623731, 0, 0, 0, 0, 0, 0, 0, -0.252201198430086, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1.4142135623731, 0, 0, 0, 0, 0, 0, -0.252201198430086, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -2, 0, 0, 0, 0, 0, -0.0421675318334475, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -2, 0, 0, 0, 0, -0.0421675318334475, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1.73205080756888, 0, 0, 0, -0.0486697428190666, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1.73205080756888, 0, 0, -0.0486697428190666, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1.73205080756888, 0, -0.0486697428190666, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1.73205080756888, -0.0486697428190666, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -0.935285871700694), .Dim = c(22L, 22L), .Dimnames = list(c('StripS01', 'StripS02', 'StripS03', 'StripS04', 'StripS05', 'StripS06', 'StripS07', 'StripS08', 'StripS09', 'StripS10', 'StripS11', 'StripS12', 'StripS13', 'StripS14', 'StripS15', 'StripS16', 'StripS17', 'StripS18', 'StripS19', 'StripS20', 'StripS21', ''), c('3', '4', '5', '6', '9', '10', '11', '12', '13', '14', '15', '16', '19', '20', '21', '25', '26', '27', '31', '32', '33', '39'))), structure(c(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.00019677474442243), .Dim = c(22L, 1L)), 22L, FALSE, FALSE); .Internal(backsolve(argv[[1]], argv[[2]], argv[[3]], argv[[4]], argv[[5]]))
                [,1]
  [1,]  0.0000000000
@@ -9703,7 +9703,7 @@ list()
 [21,]  0.0000000000
 [22,] -0.0002103899
 
-##com.oracle.truffle.r.test.builtins.TestBuiltin_backsolve.testbacksolve2#Ignored.Unknown#
+##com.oracle.truffle.r.test.builtins.TestBuiltin_backsolve.testbacksolve2#Ignored.Unimplemented#
 #argv <- list(structure(c(-2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -0.0421590411210753, 0, -2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -0.0421590411210753, 0, 0, -2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -0.445373554228914, 0, 0, 0, -1.73205080756888, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -0.510781706167877, 0, 0, 0, 0, -1.73205080756888, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -0.510781706167877, 0, 0, 0, 0, 0, -1.73205080756888, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -0.510781706167877, 0, 0, 0, 0, 0, 0, -1.4142135623731, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -0.0592635069735823, 0, 0, 0, 0, 0, 0, 0, -1.4142135623731, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -0.428392065749892, 0, 0, 0, 0, 0, 0, 0, 0, -1.4142135623731, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -0.252172670570357, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1.4142135623731, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -0.428392065749892, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1.73205080756888, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -0.510781706167877, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1.4142135623731, 0, 0, 0, 0, 0, 0, 0, 0, 0, -0.0592635069735823, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1.4142135623731, 0, 0, 0, 0, 0, 0, 0, 0, -0.0592635069735823, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1.4142135623731, 0, 0, 0, 0, 0, 0, 0, -0.252172670570357, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1.4142135623731, 0, 0, 0, 0, 0, 0, -0.252172670570357, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -2, 0, 0, 0, 0, 0, -0.0421590411210753, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -2, 0, 0, 0, 0, -0.0421590411210753, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1.73205080756888, 0, 0, 0, -0.0486599542810648, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1.73205080756888, 0, 0, -0.0486599542810647, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1.73205080756888, 0, -0.0486599542810648, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1.73205080756888, -0.0486599542810648, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -0.935253697073914), .Dim = c(22L, 22L), .Dimnames = list(c('StripS01', 'StripS02', 'StripS03', 'StripS04', 'StripS05', 'StripS06', 'StripS07', 'StripS08', 'StripS09', 'StripS10', 'StripS11', 'StripS12', 'StripS13', 'StripS14', 'StripS15', 'StripS16', 'StripS17', 'StripS18', 'StripS19', 'StripS20', 'StripS21', ''), c('3', '4', '5', '6', '9', '10', '11', '12', '13', '14', '15', '16', '19', '20', '21', '25', '26', '27', '31', '32', '33', '39'))), structure(c(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1.20033559004316e-05), .Dim = c(22L, 1L)), 22L, FALSE, FALSE); .Internal(backsolve(argv[[1]], argv[[2]], argv[[3]], argv[[4]], argv[[5]]))
                [,1]
  [1,]  0.000000e+00
@@ -9729,7 +9729,7 @@ list()
 [21,]  0.000000e+00
 [22,] -1.283433e-05
 
-##com.oracle.truffle.r.test.builtins.TestBuiltin_backsolve.testbacksolve3#Ignored.Unknown#
+##com.oracle.truffle.r.test.builtins.TestBuiltin_backsolve.testbacksolve3#Ignored.Unimplemented#
 #argv <- list(structure(c(-0.91092349872819, -1.26769315823132, 0, -1.11965595698793), .Dim = c(2L, 2L)), structure(c(-0.000210872744086474, 0.000210873298561107), .Dim = c(2L, 1L)), 2L, FALSE, FALSE); .Internal(backsolve(argv[[1]], argv[[2]], argv[[3]], argv[[4]], argv[[5]]))
               [,1]
 [1,]  0.0002314934
@@ -9851,23 +9851,23 @@ character(0)
 # .Internal(bcVersion())
 [1] 8
 
-##com.oracle.truffle.r.test.builtins.TestBuiltin_besselI.testbesselI1#Ignored.Unknown#
+##com.oracle.truffle.r.test.builtins.TestBuiltin_besselI.testbesselI1#Ignored.Unimplemented#
 #argv <- list(FALSE, FALSE, 1); .Internal(besselI(argv[[1]], argv[[2]], argv[[3]]))
 [1] 1
 
-##com.oracle.truffle.r.test.builtins.TestBuiltin_besselI.testbesselI2#Ignored.Unknown#
+##com.oracle.truffle.r.test.builtins.TestBuiltin_besselI.testbesselI2#Ignored.Unimplemented#
 #argv <- list(logical(0), logical(0), 1); .Internal(besselI(argv[[1]], argv[[2]], argv[[3]]))
 numeric(0)
 
-##com.oracle.truffle.r.test.builtins.TestBuiltin_besselJ.testbesselJ1#Ignored.Unknown#
+##com.oracle.truffle.r.test.builtins.TestBuiltin_besselJ.testbesselJ1#Ignored.Unimplemented#
 #argv <- list(logical(0), logical(0)); .Internal(besselJ(argv[[1]], argv[[2]]))
 numeric(0)
 
-##com.oracle.truffle.r.test.builtins.TestBuiltin_besselJ.testbesselJ2#Ignored.Unknown#
+##com.oracle.truffle.r.test.builtins.TestBuiltin_besselJ.testbesselJ2#Ignored.Unimplemented#
 #argv <- list(FALSE, FALSE); .Internal(besselJ(argv[[1]], argv[[2]]))
 [1] 1
 
-##com.oracle.truffle.r.test.builtins.TestBuiltin_besselJ.testbesselJ3#Ignored.Unknown#
+##com.oracle.truffle.r.test.builtins.TestBuiltin_besselJ.testbesselJ3#Ignored.Unimplemented#
 #argv <- list(c(9.5367431640625e-07, 1.9073486328125e-06, 3.814697265625e-06, 7.62939453125e-06, 1.52587890625e-05, 3.0517578125e-05, 6.103515625e-05, 0.0001220703125, 0.000244140625, 0.00048828125, 0.0009765625, 0.001953125, 0.00390625, 0.0078125, 0.015625, 0.03125, 0.0625, 0.125, 0.25, 0.5, 1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024), 2.5); .Internal(besselJ(argv[[1]], argv[[2]]))
  [1]  4.724426e-17  2.672539e-16  1.511816e-15  8.552124e-15  4.837812e-14
  [6]  2.736680e-13  1.548100e-12  8.757375e-12  4.953919e-11  2.802360e-10
@@ -9877,15 +9877,15 @@ numeric(0)
 [26] -8.858053e-02 -9.352409e-02 -4.969565e-02  4.984926e-02 -2.597979e-03
 [31]  3.880718e-03
 
-##com.oracle.truffle.r.test.builtins.TestBuiltin_besselK.testbesselK1#Ignored.Unknown#
+##com.oracle.truffle.r.test.builtins.TestBuiltin_besselK.testbesselK1#Ignored.Unimplemented#
 #argv <- list(FALSE, FALSE, 1); .Internal(besselK(argv[[1]], argv[[2]], argv[[3]]))
 [1] Inf
 
-##com.oracle.truffle.r.test.builtins.TestBuiltin_besselK.testbesselK2#Ignored.Unknown#
+##com.oracle.truffle.r.test.builtins.TestBuiltin_besselK.testbesselK2#Ignored.Unimplemented#
 #argv <- list(logical(0), logical(0), 1); .Internal(besselK(argv[[1]], argv[[2]], argv[[3]]))
 numeric(0)
 
-##com.oracle.truffle.r.test.builtins.TestBuiltin_besselK.testbesselK3#Ignored.Unknown#
+##com.oracle.truffle.r.test.builtins.TestBuiltin_besselK.testbesselK3#Ignored.Unimplemented#
 #argv <- list(c(9.5367431640625e-07, 1.9073486328125e-06, 3.814697265625e-06, 7.62939453125e-06, 1.52587890625e-05, 3.0517578125e-05, 6.103515625e-05, 0.0001220703125, 0.000244140625, 0.00048828125, 0.0009765625, 0.001953125, 0.00390625, 0.0078125, 0.015625, 0.03125, 0.0625, 0.125, 0.25, 0.5, 1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024), 3, 1); .Internal(besselK(argv[[1]], argv[[2]], argv[[3]]))
  [1]  9.223372e+18  1.152922e+18  1.441152e+17  1.801440e+16  2.251800e+15
  [6]  2.814750e+14  3.518437e+13  4.398047e+12  5.497558e+11  6.871947e+10
@@ -9895,7 +9895,7 @@ numeric(0)
 [26]  3.209956e-15  2.688919e-29  2.948133e-57 5.271814e-113 2.445443e-224
 [31]  0.000000e+00
 
-##com.oracle.truffle.r.test.builtins.TestBuiltin_besselK.testbesselK4#Ignored.Unknown#
+##com.oracle.truffle.r.test.builtins.TestBuiltin_besselK.testbesselK4#Ignored.Unimplemented#
 #argv <- list(c(9.5367431640625e-07, 1.9073486328125e-06, 3.814697265625e-06, 7.62939453125e-06, 1.52587890625e-05, 3.0517578125e-05, 6.103515625e-05, 0.0001220703125, 0.000244140625, 0.00048828125, 0.0009765625, 0.001953125, 0.00390625, 0.0078125, 0.015625, 0.03125, 0.0625, 0.125, 0.25, 0.5, 1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024), 3.5, 1); .Internal(besselK(argv[[1]], argv[[2]], argv[[3]]))
  [1]  2.219478e+22  1.961760e+21  1.733967e+20  1.532625e+19  1.354662e+18
  [6]  1.197363e+17  1.058330e+16  9.354401e+14  8.268201e+13  7.308126e+12
@@ -9905,7 +9905,7 @@ numeric(0)
 [26]  3.374310e-15  2.757500e-29  2.985649e-57 5.305318e-113 2.453209e-224
 [31]  0.000000e+00
 
-##com.oracle.truffle.r.test.builtins.TestBuiltin_besselY.testbesselY1#Ignored.Unknown#
+##com.oracle.truffle.r.test.builtins.TestBuiltin_besselY.testbesselY1#Ignored.Unimplemented#
 #argv <- list(c(9.5367431640625e-07, 1.9073486328125e-06, 3.814697265625e-06, 7.62939453125e-06, 1.52587890625e-05, 3.0517578125e-05, 6.103515625e-05, 0.0001220703125, 0.000244140625, 0.00048828125, 0.0009765625, 0.001953125, 0.00390625, 0.0078125, 0.015625, 0.03125, 0.0625, 0.125, 0.25, 0.5, 1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024), 20.5); .Internal(besselY(argv[[1]], argv[[2]]))
  [1] -6.747747e+146 -4.550341e+140 -3.068520e+134 -2.069255e+128 -1.395401e+122
  [6] -9.409884e+115 -6.345551e+109 -4.279120e+103  -2.885623e+97  -1.945918e+91
@@ -9915,7 +9915,7 @@ numeric(0)
 [26]  -7.076470e-02   2.381079e-02   4.744158e-02  -3.516090e-02   3.336562e-02
 [31]  -2.491015e-02
 
-##com.oracle.truffle.r.test.builtins.TestBuiltin_besselY.testbesselY2#Ignored.Unknown#
+##com.oracle.truffle.r.test.builtins.TestBuiltin_besselY.testbesselY2#Ignored.Unimplemented#
 #argv <- list(2, c(3, 8.94, 14.88, 20.82, 26.76, 32.7, 38.64, 44.58, 50.52, 56.46, 62.4, 68.34, 74.28, 80.22, 86.16, 92.1, 98.04, 103.98, 109.92, 115.86, 121.8, 127.74, 133.68, 139.62, 145.56, 151.5, 157.44, 163.38, 169.32, 175.26, 181.2, 187.14, 193.08, 199.02, 204.96, 210.9, 216.84, 222.78, 228.72, 234.66, 240.6, 246.54, 252.48, 258.42, 264.36, 270.3, 276.24, 282.18, 288.12, 294.06, 300)); .Internal(besselY(argv[[1]], argv[[2]]))
  [1]  -1.127784e+00  -1.282008e+04  -2.165098e+10  -4.733004e+17  -6.084569e+25
  [6]  -3.046226e+34  -4.601250e+43  -1.761838e+53  -1.506980e+63  -2.615568e+73
@@ -9930,7 +9930,7 @@ numeric(0)
 [51]           -Inf
 There were 22 warnings (use warnings() to see them)
 
-##com.oracle.truffle.r.test.builtins.TestBuiltin_besselY.testbesselY3#Ignored.Unknown#
+##com.oracle.truffle.r.test.builtins.TestBuiltin_besselY.testbesselY3#Ignored.Unimplemented#
 #argv <- list(c(0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1, 1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 1.7, 1.8, 1.9, 2, 2.1, 2.2, 2.3, 2.4, 2.5, 2.6, 2.7, 2.8, 2.9, 3, 3.1, 3.2, 3.3, 3.4, 3.5, 3.6, 3.7, 3.8, 3.9, 4, 4.1, 4.2, 4.3, 4.4, 4.5, 4.6, 4.7, 4.8, 4.9, 5, 5.1, 5.2, 5.3, 5.4, 5.5, 5.6, 5.7, 5.8, 5.9, 6, 6.1, 6.2, 6.3, 6.4, 6.5, 6.6, 6.7, 6.8, 6.9, 7, 7.1, 7.2, 7.3, 7.4, 7.5, 7.6, 7.7, 7.8, 7.9, 8, 8.1, 8.2, 8.3, 8.4, 8.5, 8.6, 8.7, 8.8, 8.9, 9, 9.1, 9.2, 9.3, 9.4, 9.5, 9.6, 9.7, 9.8, 9.9, 10), -0.2); .Internal(besselY(argv[[1]], argv[[2]]))
   [1]         -Inf -1.129937637 -0.690945975 -0.435238869 -0.251890636
   [6] -0.108032918  0.010318976  0.110293104  0.195945764  0.269765825
@@ -9954,23 +9954,23 @@ There were 22 warnings (use warnings() to see them)
  [96]  0.102417825  0.077752074  0.052569412  0.027122694  0.001664807
 [101] -0.023553761
 
-##com.oracle.truffle.r.test.builtins.TestBuiltin_besselY.testbesselY4#Ignored.Unknown#
+##com.oracle.truffle.r.test.builtins.TestBuiltin_besselY.testbesselY4#Ignored.Unimplemented#
 #argv <- list(logical(0), logical(0)); .Internal(besselY(argv[[1]], argv[[2]]))
 numeric(0)
 
-##com.oracle.truffle.r.test.builtins.TestBuiltin_beta.testbeta1#Ignored.Unknown#
+##com.oracle.truffle.r.test.builtins.TestBuiltin_beta.testbeta1#Ignored.Unimplemented#
 #argv <- list(FALSE, FALSE); .Internal(beta(argv[[1]], argv[[2]]))
 [1] Inf
 
-##com.oracle.truffle.r.test.builtins.TestBuiltin_beta.testbeta2#Ignored.Unknown#
+##com.oracle.truffle.r.test.builtins.TestBuiltin_beta.testbeta2#Ignored.Unimplemented#
 #argv <- list(logical(0), logical(0)); .Internal(beta(argv[[1]], argv[[2]]))
 numeric(0)
 
-##com.oracle.truffle.r.test.builtins.TestBuiltin_beta.testbeta4#Ignored.Unknown#
+##com.oracle.truffle.r.test.builtins.TestBuiltin_beta.testbeta4#Ignored.Unimplemented#
 #argv <- structure(list(a = 0.01, b = 171), .Names = c('a', 'b'));do.call('beta', argv)
 [1] 94.45204
 
-##com.oracle.truffle.r.test.builtins.TestBuiltin_beta.testbeta5#Ignored.Unknown#
+##com.oracle.truffle.r.test.builtins.TestBuiltin_beta.testbeta5#Ignored.Unimplemented#
 #argv <- structure(list(a = 1e-200, b = 1e-200), .Names = c('a',     'b'));do.call('beta', argv)
 [1] 2e+200
 
@@ -10035,11 +10035,11 @@ integer(0)
 [101]  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  1  2  2  2  2  2  2
 [126]  2  1  2  2  1  2  1  2  2  1  1  2  1  1  2  2  1  2  1  2  2
 
-##com.oracle.truffle.r.test.builtins.TestBuiltin_bindtextdomain.testbindtextdomain1#Ignored.Unknown#
+##com.oracle.truffle.r.test.builtins.TestBuiltin_bindtextdomain.testbindtextdomain1#Ignored.MissingBuiltin#
 #argv <- list('splines', '/home/roman/r-instrumented/library/translations'); .Internal(bindtextdomain(argv[[1]], argv[[2]]))
 [1] "/home/roman/r-instrumented/library/translations"
 
-##com.oracle.truffle.r.test.builtins.TestBuiltin_bindtextdomain.testbindtextdomain2#Ignored.Unknown#
+##com.oracle.truffle.r.test.builtins.TestBuiltin_bindtextdomain.testbindtextdomain2#Ignored.MissingBuiltin#
 #argv <- list('utils', '/home/lzhao/hg/r-instrumented/library/translations'); .Internal(bindtextdomain(argv[[1]], argv[[2]]))
 [1] "/home/lzhao/hg/r-instrumented/library/translations"
 
@@ -10184,7 +10184,7 @@ Error in .Internal(bitwiseShiftR(, 1)) : argument 1 is empty
 #{ .Internal(bitwiseShiftR(200, ))}
 Error in .Internal(bitwiseShiftR(200, )) : argument 2 is empty
 
-##com.oracle.truffle.r.test.builtins.TestBuiltin_bitwiseShiftR.testBitwiseFunctions#Ignored.Unknown#
+##com.oracle.truffle.r.test.builtins.TestBuiltin_bitwiseShiftR.testBitwiseFunctions#Output.IgnoreWarningMessage#
 #{ bitwShiftR(c(1,2,3,4), c("Hello")) }
 [1] NA NA NA NA
 Warning message:
@@ -11043,7 +11043,7 @@ $Residuals
 #argv <- list(structure(1208822400, class = c('POSIXct', 'POSIXt')), structure(1209168000, class = c('POSIXct', 'POSIXt')));c(argv[[1]],argv[[2]]);
 [1] "2008-04-22 GMT" "2008-04-26 GMT"
 
-##com.oracle.truffle.r.test.builtins.TestBuiltin_c.testc14#Ignored.Unknown#
+##com.oracle.truffle.r.test.builtins.TestBuiltin_c.testc14#Ignored.OutputFormatting#
 #argv <- list(`Grand mean` = structure(103.87323943662, class = 'mtable'), structure(list(N = structure(c(78.7365206866197, 98.5088731171753, 113.842206450509, 123.008873117175), .Dim = 4L, .Dimnames = structure(list(N = c('0.0cwt', '0.2cwt', '0.4cwt', '0.6cwt')), .Names = 'N'), class = 'mtable'), `V:N` = structure(c(79.5323303457107, 86.1989970123773, 69.7732394366197, 98.0323303457106, 108.032330345711, 89.1989970123773, 114.198997012377, 116.698997012377, 110.365663679044, 124.365663679044, 126.365663679044, 118.032330345711), .Dim = 3:4, .Dimnames = structure(list(V = c('Golden.rain', 'Marvellous', 'Victory'), N = c('0.0cwt', '0.2cwt', '0.4cwt', '0.6cwt')), .Names = c('V', 'N')), class = 'mtable')), .Names = c('N', 'V:N')));c(argv[[1]],argv[[2]]);
 [[1]]
 [1] 103.8732
@@ -11061,6 +11061,10 @@ V             0.0cwt    0.2cwt    0.4cwt    0.6cwt
   Victory      69.77324  89.19900 110.36566 118.03233
 
 
+##com.oracle.truffle.r.test.builtins.TestBuiltin_c.testc14#Ignored.OutputFormatting#
+#options(digits=4);c(0.12345678912345,0.123)
+[1] 0.1235 0.1230
+
 ##com.oracle.truffle.r.test.builtins.TestBuiltin_c.testc15#
 #argv <- list(NULL, structure(list(class = 'try-error', condition = structure(list(message = '(converted from warning) NAs produced', call = quote(rexp(2, numeric()))), .Names = c('message', 'call'), class = c('simpleError', 'error', 'condition'))), .Names = c('class', 'condition')));c(argv[[1]],argv[[2]]);
 $class
@@ -11696,7 +11700,7 @@ $x
 #argv <- list(369.430769230769, 4.99999999999983);c(argv[[1]],argv[[2]]);
 [1] 369.4308   5.0000
 
-##com.oracle.truffle.r.test.builtins.TestBuiltin_c.testc57#Ignored.Unknown#
+##com.oracle.truffle.r.test.builtins.TestBuiltin_c.testc57#Ignored.ImplementationError#
 #argv <- list(structure(list(structure(list(title = 'boot: Bootstrap R (S-PLUS) Functions', author = structure(list(structure(list(given = 'Angelo', family = 'Canty', role = 'aut', email = NULL, comment = 'S original'), .Names = c('given', 'family', 'role', 'email', 'comment')), structure(list(given = c('Brian', 'D.'), family = 'Ripley', role = c('aut', 'trl', 'cre'), email = 'ripley@stats.ox.ac.uk', comment = 'R port, author of parallel support'), .Names = c('given', 'family', 'role', 'email', 'comment'))), class = 'person'),     year = '2012', note = 'R package version 1.3-4', url = 'http://CRAN.R-project.org/package=boot'), .Names = c('title', 'author', 'year', 'note', 'url'), bibtype = 'Manual', key = 'boot-package')), class = 'bibentry'), structure(list(structure(list(title = 'Bootstrap Methods and Their Applications', author = structure(list(structure(list(given = c('Anthony', 'C.'), family = 'Davison', role = 'aut', email = NULL, comment = NULL), .Names = c('given', 'family', 'role', 'email', 'comment')), structure(list(    given = c('David', 'V.'), family = 'Hinkley', role = 'aut', email = NULL, comment = NULL), .Names = c('given', 'family', 'role', 'email', 'comment'))), class = 'person'), year = '1997', publisher = 'Cambridge University Press', address = 'Cambridge', isbn = '0-521-57391-2', url = 'http://statwww.epfl.ch/davison/BMA/'), .Names = c('title', 'author', 'year', 'publisher', 'address', 'isbn', 'url'), bibtype = 'Book', key = 'boot-book')), class = 'bibentry'));c(argv[[1]],argv[[2]]);
 Canty A and Ripley BD (2012). _boot: Bootstrap R (S-PLUS) Functions_. R
 package version 1.3-4, <URL: http://CRAN.R-project.org/package=boot>.
@@ -11721,7 +11725,12 @@ Applications_. Cambridge University Press, Cambridge. ISBN
 #argv <- list('ArgMethod', 1.10714871779409);c(argv[[1]],argv[[2]]);
 [1] "ArgMethod"        "1.10714871779409"
 
-##com.oracle.truffle.r.test.builtins.TestBuiltin_c.testc61#Ignored.Unknown#
+##com.oracle.truffle.r.test.builtins.TestBuiltin_c.testc61#Ignored.OutputFormatting#
+#.Primitive('==');.Primitive('!');
+function (e1, e2)  .Primitive("==")
+function (x)  .Primitive("!")
+
+##com.oracle.truffle.r.test.builtins.TestBuiltin_c.testc61#Ignored.OutputFormatting#
 #argv <- list(structure(list(`ANY#ANY` = .Primitive('==')), .Names = 'ANY#ANY'), list());c(argv[[1]],argv[[2]]);
 $`ANY#ANY`
 function (e1, e2)  .Primitive("==")
@@ -11960,7 +11969,7 @@ $df.residual
 [1] 8
 
 
-##com.oracle.truffle.r.test.builtins.TestBuiltin_c.testc74#Ignored.Unknown#
+##com.oracle.truffle.r.test.builtins.TestBuiltin_c.testc74#Ignored.OutputFormatting#
 #argv <- list(structure(list(object = c('time', 'status')), .Names = 'object'), structure(list(max.level = NA, vec.len = 4, digits.d = 3, nchar.max = 128, give.attr = TRUE, give.head = TRUE, width = 80L, envir = NULL, strict.width = 'no', formatNum = function (x, ...) format(x, trim = TRUE, drop0trailing = TRUE, ...), list.len = 99), .Names = c('max.level', 'vec.len', 'digits.d', 'nchar.max', 'give.attr', 'give.head', 'width', 'envir', 'strict.width', 'formatNum', 'list.len')), structure(list(give.length = TRUE, nest.lev = 2, indent.str = '  .. ..'), .Names = c('give.length', 'nest.lev', 'indent.str')));c(argv[[1]],argv[[2]],argv[[3]]);
 $object
 [1] "time"   "status"
@@ -13018,7 +13027,7 @@ structure(integer(0), .Dim = c(0L, 3L), .Dimnames = list(NULL,
 [199,]    2    3    2    2    2    2
 [200,]    2    2    2    1    2    2
 
-##com.oracle.truffle.r.test.builtins.TestBuiltin_cbind.testcbind4#Ignored.Unknown#
+##com.oracle.truffle.r.test.builtins.TestBuiltin_cbind.testcbind4#Ignored.OutputFormatting#
 #argv <- list(structure(list(Sepal.Length = c(5.1, 4.9, 4.7, 4.6,     5, 5.4, 4.6, 5, 4.4, 4.9, 5.4, 4.8, 4.8, 4.3, 5.8, 5.7, 5.4,     5.1, 5.7, 5.1, 5.4, 5.1, 4.6, 5.1, 4.8, 5, 5, 5.2, 5.2, 4.7,     4.8, 5.4, 5.2, 5.5, 4.9, 5, 5.5, 4.9, 4.4, 5.1, 5, 4.5, 4.4,     5, 5.1, 4.8, 5.1, 4.6, 5.3, 5, 7, 6.4, 6.9, 5.5, 6.5, 5.7,     6.3, 4.9, 6.6, 5.2, 5, 5.9, 6, 6.1, 5.6, 6.7, 5.6, 5.8, 6.2,     5.6, 5.9, 6.1, 6.3, 6.1, 6.4, 6.6, 6.8, 6.7, 6, 5.7, 5.5,     5.5, 5.8, 6, 5.4, 6, 6.7, 6.3, 5.6, 5.5, 5.5, 6.1, 5.8, 5,     5.6, 5.7, 5.7, 6.2, 5.1, 5.7, 6.3, 5.8, 7.1, 6.3, 6.5, 7.6,     4.9, 7.3, 6.7, 7.2, 6.5, 6.4, 6.8, 5.7, 5.8, 6.4, 6.5, 7.7,     7.7, 6, 6.9, 5.6, 7.7, 6.3, 6.7, 7.2, 6.2, 6.1, 6.4, 7.2,     7.4, 7.9, 6.4, 6.3, 6.1, 7.7, 6.3, 6.4, 6, 6.9, 6.7, 6.9,     5.8, 6.8, 6.7, 6.7, 6.3, 6.5, 6.2, 5.9), Sepal.Width = c(4,     3, 3, 3, 4, 4, 3, 3, 3, 3, 4, 3, 3, 3, 4, 4, 4, 4, 4, 4,     3, 4, 4, 3, 3, 3, 3, 4, 3, 3, 3, 3, 4, 4, 3, 3, 4, 4, 3,     3, 4, 2, 3, 4, 4, 3, 4, 3, 4, 3, 3, 3, 3, 2, 3, 3, 3, 2,     3, 3, 2, 3, 2, 3, 3, 3, 3, 3, 2, 2, 3, 3, 2, 3, 3, 3, 3,     3, 3, 3, 2, 2, 3, 3, 3, 3, 3, 2, 3, 2, 3, 3, 3, 2, 3, 3,     3, 3, 2, 3, 3, 3, 3, 3, 3, 3, 2, 3, 2, 4, 3, 3, 3, 2, 3,     3, 3, 4, 3, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 3, 3,     3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 2, 3, 3, 3), Petal.Length = c(1.4,     1.4, 1.3, 1.5, 1.4, 1.7, 1.4, 1.5, 1.4, 1.5, 1.5, 1.6, 1.4,     1.1, 1.2, 1.5, 1.3, 1.4, 1.7, 1.5, 1.7, 1.5, 1, 1.7, 1.9,     1.6, 1.6, 1.5, 1.4, 1.6, 1.6, 1.5, 1.5, 1.4, 1.5, 1.2, 1.3,     1.4, 1.3, 1.5, 1.3, 1.3, 1.3, 1.6, 1.9, 1.4, 1.6, 1.4, 1.5,     1.4, 4.7, 4.5, 4.9, 4, 4.6, 4.5, 4.7, 3.3, 4.6, 3.9, 3.5,     4.2, 4, 4.7, 3.6, 4.4, 4.5, 4.1, 4.5, 3.9, 4.8, 4, 4.9, 4.7,     4.3, 4.4, 4.8, 5, 4.5, 3.5, 3.8, 3.7, 3.9, 5.1, 4.5, 4.5,     4.7, 4.4, 4.1, 4, 4.4, 4.6, 4, 3.3, 4.2, 4.2, 4.2, 4.3, 3,     4.1, 6, 5.1, 5.9, 5.6, 5.8, 6.6, 4.5, 6.3, 5.8, 6.1, 5.1,     5.3, 5.5, 5, 5.1, 5.3, 5.5, 6.7, 6.9, 5, 5.7, 4.9, 6.7, 4.9,     5.7, 6, 4.8, 4.9, 5.6, 5.8, 6.1, 6.4, 5.6, 5.1, 5.6, 6.1,     5.6, 5.5, 4.8, 5.4, 5.6, 5.1, 5.1, 5.9, 5.7, 5.2, 5, 5.2,     5.4, 5.1), Petal.Width = c(0.2, 0.2, 0.2, 0.2, 0.2, 0.4,     0.3, 0.2, 0.2, 0.1, 0.2, 0.2, 0.1, 0.1, 0.2, 0.4, 0.4, 0.3,     0.3, 0.3, 0.2, 0.4, 0.2, 0.5, 0.2, 0.2, 0.4, 0.2, 0.2, 0.2,     0.2, 0.4, 0.1, 0.2, 0.2, 0.2, 0.2, 0.1, 0.2, 0.2, 0.3, 0.3,     0.2, 0.6, 0.4, 0.3, 0.2, 0.2, 0.2, 0.2, 1.4, 1.5, 1.5, 1.3,     1.5, 1.3, 1.6, 1, 1.3, 1.4, 1, 1.5, 1, 1.4, 1.3, 1.4, 1.5,     1, 1.5, 1.1, 1.8, 1.3, 1.5, 1.2, 1.3, 1.4, 1.4, 1.7, 1.5,     1, 1.1, 1, 1.2, 1.6, 1.5, 1.6, 1.5, 1.3, 1.3, 1.3, 1.2, 1.4,     1.2, 1, 1.3, 1.2, 1.3, 1.3, 1.1, 1.3, 2.5, 1.9, 2.1, 1.8,     2.2, 2.1, 1.7, 1.8, 1.8, 2.5, 2, 1.9, 2.1, 2, 2.4, 2.3, 1.8,     2.2, 2.3, 1.5, 2.3, 2, 2, 1.8, 2.1, 1.8, 1.8, 1.8, 2.1, 1.6,     1.9, 2, 2.2, 1.5, 1.4, 2.3, 2.4, 1.8, 1.8, 2.1, 2.4, 2.3,     1.9, 2.3, 2.5, 2.3, 1.9, 2, 2.3, 1.8), Species = structure(c(1L,     1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,     1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,     1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,     1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L,     2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L,     2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L,     2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 3L, 3L, 3L, 3L, 3L, 3L,     3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L,     3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L,     3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L),     .Label = c('setosa', 'versicolor', 'virginica'), class = 'factor')),     .Names = c('Sepal.Length', 'Sepal.Width', 'Petal.Length',         'Petal.Width', 'Species'), row.names = c(NA, -150L),     class = 'data.frame'), structure(c(3, 2, 2, 2, 3, 3, 2, 2,     2, 2, 3, 2, 2, 2, 3, 3, 3, 3, 3, 3, 2, 3, 3, 2, 2, 2, 2,     3, 2, 2, 2, 2, 3, 3, 2, 2, 3, 3, 2, 2, 3, 1, 2, 3, 3, 2,     3, 2, 3, 2, 2, 2, 2, 1, 2, 2, 2, 1, 2, 2, 1, 2, 1, 2, 2,     2, 2, 2, 1, 1, 2, 2, 1, 2, 2, 2, 2, 2, 2, 2, 1, 1, 2, 2,     2, 2, 2, 1, 2, 1, 2, 2, 2, 1, 2, 2, 2, 2, 1, 2, 2, 2, 2,     2, 2, 2, 1, 2, 1, 3, 2, 2, 2, 1, 2, 2, 2, 3, 2, 1, 2, 2,     2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2,     2, 2, 2, 2, 2, 1, 2, 2, 2), .Names = c('4', '3', '3', '3',     '4', '4', '3', '3', '3', '3', '4', '3', '3', '3', '4', '4',     '4', '4', '4', '4', '3', '4', '4', '3', '3', '3', '3', '4',     '3', '3', '3', '3', '4', '4', '3', '3', '4', '4', '3', '3',     '4', '2', '3', '4', '4', '3', '4', '3', '4', '3', '3', '3',     '3', '2', '3', '3', '3', '2', '3', '3', '2', '3', '2', '3',     '3', '3', '3', '3', '2', '2', '3', '3', '2', '3', '3', '3',     '3', '3', '3', '3', '2', '2', '3', '3', '3', '3', '3', '2',     '3', '2', '3', '3', '3', '2', '3', '3', '3', '3', '2', '3',     '3', '3', '3', '3', '3', '3', '2', '3', '2', '4', '3', '3',     '3', '2', '3', '3', '3', '4', '3', '2', '3', '3', '3', '3',     '3', '3', '3', '3', '3', '3', '3', '4', '3', '3', '3', '3',     '3', '3', '3', '3', '3', '3', '3', '3', '3', '3', '2', '3',     '3', '3')));do.call('cbind', argv)
     Sepal.Length Sepal.Width Petal.Length Petal.Width    Species
 1            5.1           4          1.4         0.2     setosa
@@ -13481,23 +13490,23 @@ integer(0)
 #argv <- list(character(0), c('semiTransparency', 'transparentBackground', 'rasterImage', 'capture', 'locator', 'events'), 0L); .Internal(charmatch(argv[[1]], argv[[2]], argv[[3]]))
 integer(0)
 
-##com.oracle.truffle.r.test.builtins.TestBuiltin_chartr.testchartr1#Ignored.Unknown#
+##com.oracle.truffle.r.test.builtins.TestBuiltin_chartr.testchartr1#Ignored.Unimplemented#
 #argv <- list('.', '.', c('0.02', '0.06', '0.11', '0.22', '0.56', '1.1')); .Internal(chartr(argv[[1]], argv[[2]], argv[[3]]))
 [1] "0.02" "0.06" "0.11" "0.22" "0.56" "1.1"
 
-##com.oracle.truffle.r.test.builtins.TestBuiltin_chartr.testchartr2#Ignored.Unknown#
+##com.oracle.truffle.r.test.builtins.TestBuiltin_chartr.testchartr2#Ignored.Unimplemented#
 #argv <- list('iXs', 'why', 'MiXeD cAsE 123'); .Internal(chartr(argv[[1]], argv[[2]], argv[[3]]))
 [1] "MwheD cAyE 123"
 
-##com.oracle.truffle.r.test.builtins.TestBuiltin_chartr.testchartr3#Ignored.Unknown#
+##com.oracle.truffle.r.test.builtins.TestBuiltin_chartr.testchartr3#Ignored.Unimplemented#
 #argv <- list('a-cX', 'D-Fw', 'MiXeD cAsE 123'); .Internal(chartr(argv[[1]], argv[[2]], argv[[3]]))
 [1] "MiweD FAsE 123"
 
-##com.oracle.truffle.r.test.builtins.TestBuiltin_chartr.testchartr4#Ignored.Unknown#
+##com.oracle.truffle.r.test.builtins.TestBuiltin_chartr.testchartr4#Ignored.Unimplemented#
 #argv <- list('.', '.', character(0)); .Internal(chartr(argv[[1]], argv[[2]], argv[[3]]))
 character(0)
 
-##com.oracle.truffle.r.test.builtins.TestBuiltin_chartr.testchartr6#Ignored.Unknown#
+##com.oracle.truffle.r.test.builtins.TestBuiltin_chartr.testchartr6#Ignored.Unimplemented#
 #argv <- structure(list(old = 'NA', new = 'na', x = c('NA', NA,     'BANANA')), .Names = c('old', 'new', 'x'));do.call('chartr', argv)
 [1] "na"     NA       "Banana"
 
@@ -13917,7 +13926,7 @@ Error in `class<-`(x, ) : argument 2 is empty
 attr(,"class")
 [1] "first"
 
-##com.oracle.truffle.r.test.builtins.TestBuiltin_classassign.testclassassign1#Ignored.Unknown#
+##com.oracle.truffle.r.test.builtins.TestBuiltin_classassign.testclassassign1#Ignored.OutputFormatting#
 #argv <- list(structure(function (x, mode = 'any') .Internal(as.vector(x, mode)), target = structure('ANY', class = structure('signature', package = 'methods'), .Names = 'x', package = 'methods'), defined = structure('ANY', class = structure('signature', package = 'methods'), .Names = 'x', package = 'methods'), generic = character(0), class = structure('MethodDefinition', package = 'methods')), value = structure('MethodDefinition', package = 'methods'));`class<-`(argv[[1]],argv[[2]]);
 function (x, mode = "any")
 .Internal(as.vector(x, mode))
@@ -13946,7 +13955,7 @@ attr(,"class")
 attr(,"class")attr(,"package")
 [1] "methods"
 
-##com.oracle.truffle.r.test.builtins.TestBuiltin_classassign.testclassassign10#Ignored.Unknown#
+##com.oracle.truffle.r.test.builtins.TestBuiltin_classassign.testclassassign10#Output.IgnoreWhitespace#
 #argv <- list(structure(c('o', 'p', 'v', 'i', 'r', 'w', 'b', 'm', 'f', 's'), date = structure(1224086400, class = c('POSIXct', 'POSIXt'), tzone = ''), class = 'stamped'), value = 'stamped');`class<-`(argv[[1]],argv[[2]]);
  [1] "o" "p" "v" "i" "r" "w" "b" "m" "f" "s"
 attr(,"date")
@@ -13954,7 +13963,7 @@ attr(,"date")
 attr(,"class")
 [1] "stamped"
 
-##com.oracle.truffle.r.test.builtins.TestBuiltin_classassign.testclassassign11#Ignored.Unknown#
+##com.oracle.truffle.r.test.builtins.TestBuiltin_classassign.testclassassign11#Ignored.OutputFormatting#
 #argv <- list(structure(3.14159265358979, class = structure('3.14159265358979', class = 'testit')), structure(3.14159265358979, class = structure('3.14159265358979', class = 'testit')));`class<-`(argv[[1]],argv[[2]]);
 [1] 3.141593
 attr(,"class")
@@ -13970,7 +13979,7 @@ attr(,"class")
 attr(,"class")
 [1] "bar"
 
-##com.oracle.truffle.r.test.builtins.TestBuiltin_classassign.testclassassign13#Ignored.Unknown#
+##com.oracle.truffle.r.test.builtins.TestBuiltin_classassign.testclassassign13#Ignored.OutputFormatting#
 #argv <- list(structure(function (qr, y, k = qr$rank) standardGeneric('qr.fitted'), target = structure('ANY', class = structure('signature', package = 'methods'), .Names = 'qr', package = 'methods'), defined = structure('ANY', class = structure('signature', package = 'methods'), .Names = 'qr', package = 'methods'), generic = character(0), class = structure('MethodDefinition', package = 'methods')), value = structure('MethodDefinition', package = 'methods'));`class<-`(argv[[1]],argv[[2]]);
 function (qr, y, k = qr$rank)
 standardGeneric("qr.fitted")
@@ -13999,7 +14008,7 @@ attr(,"class")
 attr(,"class")attr(,"package")
 [1] "methods"
 
-##com.oracle.truffle.r.test.builtins.TestBuiltin_classassign.testclassassign14#Ignored.Unknown#
+##com.oracle.truffle.r.test.builtins.TestBuiltin_classassign.testclassassign14#Ignored.OutputFormatting#
 #argv <- list(structure(function (x = 1, nrow, ncol) standardGeneric('diag'), target = structure('ANY', class = structure('signature', package = 'methods'), .Names = 'x', package = 'methods'), defined = structure('ANY', class = structure('signature', package = 'methods'), .Names = 'x', package = 'methods'), generic = character(0), class = structure('MethodDefinition', package = 'methods')), value = structure('MethodDefinition', package = 'methods'));`class<-`(argv[[1]],argv[[2]]);
 function (x = 1, nrow, ncol)
 standardGeneric("diag")
@@ -14034,7 +14043,7 @@ attr(,"class")attr(,"package")
 attr(,"class")
 [1] "A"
 
-##com.oracle.truffle.r.test.builtins.TestBuiltin_classassign.testclassassign16#Ignored.Unknown#
+##com.oracle.truffle.r.test.builtins.TestBuiltin_classassign.testclassassign16#Ignored.OutputFormatting#
 #argv <- list(structure(function (x, y, ...) standardGeneric('plot'), target = structure('ANY', class = structure('signature', package = 'methods'), .Names = 'x', package = 'methods'), defined = structure('ANY', class = structure('signature', package = 'methods'), .Names = 'x', package = 'methods'), generic = character(0), class = structure('MethodDefinition', package = 'methods')), value = structure('MethodDefinition', package = 'methods'));`class<-`(argv[[1]],argv[[2]]);
 function (x, y, ...)
 standardGeneric("plot")
@@ -14063,7 +14072,7 @@ attr(,"class")
 attr(,"class")attr(,"package")
 [1] "methods"
 
-##com.oracle.truffle.r.test.builtins.TestBuiltin_classassign.testclassassign17#Ignored.Unknown#
+##com.oracle.truffle.r.test.builtins.TestBuiltin_classassign.testclassassign17#Ignored.OutputFormatting#
 #argv <- list(structure(function (x, logarithm = TRUE, ...) UseMethod('determinant'), target = structure('ANY', class = structure('signature', package = 'methods'), .Names = 'x', package = 'methods'), defined = structure('ANY', class = structure('signature', package = 'methods'), .Names = 'x', package = 'methods'), generic = character(0), class = structure('MethodDefinition', package = 'methods')), value = structure('MethodDefinition', package = 'methods'));`class<-`(argv[[1]],argv[[2]]);
 function (x, logarithm = TRUE, ...)
 UseMethod("determinant")
@@ -14092,7 +14101,7 @@ attr(,"class")
 attr(,"class")attr(,"package")
 [1] "methods"
 
-##com.oracle.truffle.r.test.builtins.TestBuiltin_classassign.testclassassign18#Ignored.Unknown#
+##com.oracle.truffle.r.test.builtins.TestBuiltin_classassign.testclassassign18#Ignored.OutputFormatting#
 #argv <- list(structure(function (x, y = NULL) .Internal(crossprod(x, y)), target = structure('ANY', class = structure('signature', package = 'methods'), .Names = 'x', package = 'methods'), defined = structure('ANY', class = structure('signature', package = 'methods'), .Names = 'x', package = 'methods'), generic = character(0), class = structure('MethodDefinition', package = 'methods')), value = structure('MethodDefinition', package = 'methods'));`class<-`(argv[[1]],argv[[2]]);
 function (x, y = NULL)
 .Internal(crossprod(x, y))
@@ -14121,7 +14130,7 @@ attr(,"class")
 attr(,"class")attr(,"package")
 [1] "methods"
 
-##com.oracle.truffle.r.test.builtins.TestBuiltin_classassign.testclassassign19#Ignored.Unknown#
+##com.oracle.truffle.r.test.builtins.TestBuiltin_classassign.testclassassign19#Ignored.OutputFormatting#
 #argv <- list(structure(function (obj, force = FALSE) standardGeneric('unname'), target = structure('ANY', class = structure('signature', package = 'methods'), .Names = 'obj', package = 'methods'), defined = structure('ANY', class = structure('signature', package = 'methods'), .Names = 'obj', package = 'methods'), generic = character(0), class = structure('MethodDefinition', package = 'methods')), value = structure('MethodDefinition', package = 'methods'));`class<-`(argv[[1]],argv[[2]]);
 function (obj, force = FALSE)
 standardGeneric("unname")
@@ -14150,7 +14159,7 @@ attr(,"class")
 attr(,"class")attr(,"package")
 [1] "methods"
 
-##com.oracle.truffle.r.test.builtins.TestBuiltin_classassign.testclassassign2#Ignored.Unknown#
+##com.oracle.truffle.r.test.builtins.TestBuiltin_classassign.testclassassign2#Ignored.OutputFormatting#
 #argv <- list(structure(list(c0 = structure(integer(0), .Label = character(0), class = 'factor')), .Names = 'c0', row.names = character(0), class = structure('integer(0)', .Names = 'c0')), structure(list(c0 = structure(integer(0), .Label = character(0), class = 'factor')), .Names = 'c0', row.names = character(0), class = structure('integer(0)', .Names = 'c0')));`class<-`(argv[[1]],argv[[2]]);
 $c0
 factor(0)
@@ -14176,7 +14185,7 @@ character(0)
 attr(,"class")
 [1] "anyC"
 
-##com.oracle.truffle.r.test.builtins.TestBuiltin_classassign.testclassassign5#Ignored.Unknown#
+##com.oracle.truffle.r.test.builtins.TestBuiltin_classassign.testclassassign5#Ignored.OutputFormatting#
 #argv <- list(structure(character(0), .Names = character(0), package = character(0), class = structure('signature', package = 'methods')), value = structure('signature', package = 'methods'));`class<-`(argv[[1]],argv[[2]]);
 named character(0)
 attr(,"package")
@@ -14207,7 +14216,7 @@ attr(,"class")
 #argv <- list(1:3, value = 'numeric');`class<-`(argv[[1]],argv[[2]]);
 [1] 1 2 3
 
-##com.oracle.truffle.r.test.builtins.TestBuiltin_classassign.testclassassign9#Ignored.Unknown#
+##com.oracle.truffle.r.test.builtins.TestBuiltin_classassign.testclassassign9#Ignored.OutputFormatting#
 #argv <- list(structure(c(1, 0, 0, 0, 1, 0, 0, 0, 1), .Dim = c(3L, 3L), class = structure('mmat2', package = '.GlobalEnv')), value = structure('mmat2', package = '.GlobalEnv'));`class<-`(argv[[1]],argv[[2]]);
      [,1] [,2] [,3]
 [1,]    1    0    0
@@ -14363,7 +14372,7 @@ Error in col(c(1, 2, 3)) :
 #argv <- list(structure(1:5, .Dim = c(5L, 1L), .Dimnames = list(c('1', '2', '3', '4', '5'), 'a')), 5, 1, FALSE); .Internal(colMeans(argv[[1]], argv[[2]], argv[[3]], argv[[4]]))
 [1] 3
 
-##com.oracle.truffle.r.test.builtins.TestBuiltin_colMeans.testcolMeans10#Ignored.Unknown#
+##com.oracle.truffle.r.test.builtins.TestBuiltin_colMeans.testcolMeans10#Ignored.ImplementationError#
 #argv <- list(structure(c(NA, 30.6929824561403, 25.6929824561403, 18.6929824561403, 6.69298245614035, -6.30701754385965, -13.3070175438597, -24.3070175438597, -21.3070175438597, 3.69298245614035, -2.30701754385965, -1.30701754385965, -20.3070175438597, -17.3070175438597, NA, NA, 12.6929824561403, 0.692982456140349, 0.692982456140349, -5.30701754385965, -11.3070175438597, -19.3070175438597, -10.3070175438597, -17.3070175438597, -20.3070175438597, -32.3070175438597, -24.3070175438597, -33.3070175438597, -31.3070175438597, -24.3070175438597, NA, -24.3070175438597, 2.69298245614035, 17.6929824561403, 18.6929824561403, 3.69298245614035, 14.6929824561403, 4.69298245614035, 14.6929824561403, 0.692982456140349, 14.6929824561403, 11.6929824561403, 22.6929824561403, 16.6929824561403, 19.6929824561403, 14.6929824561403, 10.6929824561403, 18.6929824561403, 22.6929824561403, 5.69298245614035, 6.69298245614035, 0.692982456140349, 3.69298245614035, -7.30701754385965, -8.30701754385965, -4.30701754385965, 0.692982456140349, 5.69298245614035, 4.69298245614035, 9.69298245614035, 14.6929824561403, 5.69298245614035, 4.69298245614035, 0.692982456140349, 15.6929824561403, 26.6929824561403, 14.6929824561403, 21.6929824561403, 22.6929824561403, 14.6929824561403, 5.69298245614035, 17.6929824561403, 19.6929824561403, 7.69298245614035, 5.69298245614035, 0.692982456140349, 23.6929824561403, 16.6929824561403, 12.6929824561403, 12.6929824561403, 14.6929824561403, 7.69298245614035, 12.6929824561403, 5.69298245614035, 6.69298245614035, -10.3070175438597, -0.307017543859651, -12.3070175438597, -12.3070175438597, -4.30701754385965, -18.3070175438597, -10.3070175438597, -20.3070175438597, -7.30701754385965, -21.3070175438597, -12.3070175438597, 2.69298245614035, 8.69298245614035, 8.69298245614035, -0.307017543859651, 9.69298245614035, -3.30701754385965, 4.69298245614035, -4.30701754385965, -5.30701754385965, -8.30701754385965, -2.30701754385965, -7.30701754385965, -7.30701754385965, 4.69298245614035, NA, NA, 11.6929824561403, -12.3070175438597, -16.3070175438597, -29.3070175438597, -28.3070175438597, -31.3070175438597, -32.3070175438597, -32.3070175438597), .Dim = c(120L, 1L), '`scaled:center`' = 56.3070175438597, .Dimnames = list(NULL, 'Series 1'), .Tsp = c(1, 120, 1), class = 'ts'), 120, 1, TRUE); .Internal(colMeans(argv[[1]], argv[[2]], argv[[3]], argv[[4]]))
 [1] -2.929138e-14
 
@@ -14969,7 +14978,7 @@ Warning message:
 In format.data.frame(x, digits = digits, na.encode = FALSE) :
   corrupt data frame: columns will be truncated or padded with NAs
 
-##com.oracle.truffle.r.test.builtins.TestBuiltin_copyDFattr.testcopyDFattr13#Ignored.Unknown#
+##com.oracle.truffle.r.test.builtins.TestBuiltin_copyDFattr.testcopyDFattr13#Ignored.ReferenceError#
 #argv <- list(structure(list(x = 1:10, y = c(-0.626453810742332, 0.183643324222082, -0.835628612410047, 1.59528080213779, 0.329507771815361, -0.820468384118015, 0.487429052428485, 0.738324705129217, 0.575781351653492, -0.305388387156356), z = structure(c(9L, 3L, 6L, 2L, 10L, 5L, 1L, 4L, 8L, 7L), .Label = c('a', 'c', 'f', 'h', 'i', 'p', 'v', 'x', 'y', 'z'), class = 'factor')), .Names = c('x', 'y', 'z'), row.names = c(NA, 10L), .S3Class = 'data.frame', timestamps = structure(1386392033.84327, class = c('POSIXct', 'POSIXt')), class = structure('myFrame', package = '.GlobalEnv')), structure(list(x = NULL, y = NULL, z = NULL), .Names = c('x', 'y', 'z'), row.names = c(NA, 10L), .S3Class = 'data.frame', timestamps = structure(1386392033.84327, class = c('POSIXct', 'POSIXt')), class = structure('myFrame', package = '.GlobalEnv'))); .Internal(copyDFattr(argv[[1]], argv[[2]]))
 $x
 NULL
@@ -15575,7 +15584,7 @@ In format.data.frame(x, digits = digits, na.encode = FALSE) :
 [1] File     Title    PDF      Depends  Keywords
 <0 rows> (or 0-length row.names)
 
-##com.oracle.truffle.r.test.builtins.TestBuiltin_copyDFattr.testcopyDFattr9#Ignored.Unknown#
+##com.oracle.truffle.r.test.builtins.TestBuiltin_copyDFattr.testcopyDFattr9#Ignored.ImplementationError#
 #argv <- list(structure(list(Version = c('2.11.0', '2.11.0', '2.11.0', '2.11.0', '2.11.0', '2.11.0', '2.11.0', '2.11.0', '2.11.0'), Date = c(NA_character_, NA_character_, NA_character_, NA_character_, NA_character_, NA_character_, NA_character_, NA_character_, NA_character_), Category = c('BUG FIXES', 'BUG FIXES', 'BUG FIXES', 'BUG FIXES', 'BUG FIXES', 'BUG FIXES', 'BUG FIXES', 'BUG FIXES', 'BUG FIXES'), Text = c('Using with(), eval() etc with a list with some unnamed elements now\n works.  (PR#14035)', 'cor(A, B) where A is n x 1 and B a 1-dimensional array segfaulted or\n gave an internal error.  (The case cor(B, A) was PR#7116.)', 'cut.POSIXt() applied to a start value after the DST transition on a\n DST-change day could give the wrong time for argument breaks in\n units of days or longer.  (PR#14208)', 'do_par() UNPROTECTed too early (PR#14214)', 'Subassignment x[[....]] <- y didn\'t check for a zero-length right\n hand side, and inserted a rubbish value.  (PR#14217)', 'Extreme tail behavior of, pbeta() {and hence pf()}, e.g., pbeta(x,\n 3, 2200, lower.tail=FALSE, log.p=TRUE) now returns finite values\n instead of jumping to -Inf too early.  (PR#14230).', 'read.fwf() misread multi-line records when n was specified.\n (PR#14241)', 'gzcon( <textConnection> ), an error, no longer damages the\n connection (in a way to have it segfault).  (PR#14237)', 'If xy[z].coords (used internally by many graphics functions) are\n given a list as x, they now check that the list has suitable names\n and give a more informative error message.  (PR#13936)')), .Names = c('Version', 'Date', 'Category', 'Text'), bad = c(FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE), package = 'R', row.names = c(1473L, 1483L, 1484L, 1485L, 1486L, 1493L, 1499L, 1503L, 1505L), class = c('news_db_from_Rd', 'news_db', 'data.frame')), structure(list(Version = NULL, Date = NULL, Category = NULL, Text = NULL), .Names = c('Version', 'Date', 'Category', 'Text'), bad = c(FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE), package = 'R', row.names = c(1473L, 1483L, 1484L, 1485L, 1486L, 1493L, 1499L, 1503L, 1505L), class = c('news_db_from_Rd', 'news_db', 'data.frame'))); .Internal(copyDFattr(argv[[1]], argv[[2]]))
 Error in split.default(x = seq_len(nrow(x)), f = f, drop = drop, ...) :
   group length is 0 but data length > 0
@@ -15890,7 +15899,7 @@ Error in cospi() : 0 arguments passed to 'cospi' which requires 1
 #argv <- list(c(-0.560475646552213-0.710406563699301i, -0.23017748948328+0.25688370915653i, 1.55870831414912-0.24669187846237i, 0.070508391424576-0.347542599397733i, 0.129287735160946-0.951618567265016i, 1.71506498688328-0.04502772480892i, 0.460916205989202-0.784904469457076i, -1.26506123460653-1.66794193658814i, -0.686852851893526-0.380226520287762i, -0.445661970099958+0.918996609060766i, 1.22408179743946-0.57534696260839i, 0.359813827057364+0.607964322225033i, 0.40077145059405-1.61788270828916i, 0.11068271594512-0.055561965524539i, -0.555841134754075+0.519407203943462i, 1.78691313680308+0.30115336216671i, 0.497850478229239+0.105676194148943i, -1.96661715662964-0.64070600830538i, 0.701355901563686-0.849704346033582i, -0.47279140772793-1.02412879060491i, -1.06782370598685+0.11764659710013i, -0.217974914658295-0.947474614184802i, -1.02600444830724-0.49055744370067i, -0.72889122929114-0.256092192198247i, -0.62503926784926+1.84386200523221i, -1.68669331074241-0.65194990169546i, 0.837787044494525+0.235386572284857i, 0.153373117836515+0.077960849563711i, -1.13813693701195-0.96185663413013i, 1.25381492106993-0.0713080861236i, 0.42646422147681+1.44455085842335i, -0.295071482992271+0.451504053079215i, 0.895125661045022+0.04123292199294i, 0.878133487533042-0.422496832339625i, 0.82158108163749-2.05324722154052i, 0.68864025410009+1.13133721341418i, 0.55391765353759-1.46064007092482i, -0.061911710576722+0.739947510877334i, -0.30596266373992+1.90910356921748i, -0.38047100101238-1.4438931609718i, -0.694706978920513+0.701784335374711i, -0.207917278019599-0.262197489402468i, -1.26539635156826-1.57214415914549i, 2.16895596533851-1.51466765378175i, 1.20796199830499-1.60153617357459i, -1.12310858320335-0.5309065221703i, -0.40288483529908-1.4617555849959i, -0.466655353623219+0.687916772975828i, 0.77996511833632+2.10010894052567i, -0.08336906647183-1.28703047603518i, 0.253318513994755+0.787738847475178i, -0.028546755348703+0.76904224100091i, -0.042870457291316+0.332202578950118i, 1.36860228401446-1.00837660827701i, -0.225770985659268-0.119452606630659i, 1.51647060442954-0.28039533517025i, -1.54875280423022+0.56298953322048i, 0.584613749636069-0.372438756103829i, 0.123854243844614+0.976973386685621i, 0.215941568743973-0.374580857767014i, 0.37963948275988+1.05271146557933i, -0.5023234531093-1.04917700666607i, -0.33320738366942-1.26015524475811i, -1.01857538310709+3.2410399349424i, -1.07179122647558-0.41685758816043i, 0.303528641404258+0.298227591540715i, 0.448209778629426+0.636569674033849i, 0.053004226730504-0.483780625708744i, 0.922267467879738+0.516862044313609i, 2.05008468562714+0.36896452738509i, -0.491031166056535-0.215380507641693i, -2.30916887564081+0.06529303352532i, 1.00573852446226-0.03406725373846i, -0.70920076258239+2.12845189901618i, -0.688008616467358-0.741336096272828i, 1.0255713696967-1.09599626707466i, -0.284773007051009+0.037788399171079i, -1.22071771225454+0.31048074944314i, 0.18130347974915+0.436523478910183i, -0.138891362439045-0.458365332711106i, 0.00576418589989-1.06332613397119i, 0.38528040112633+1.26318517608949i, -0.370660031792409-0.349650387953555i, 0.644376548518833-0.865512862653374i, -0.220486561818751-0.236279568941097i, 0.331781963915697-0.197175894348552i, 1.09683901314935+1.10992028971364i, 0.435181490833803+0.084737292197196i, -0.325931585531227+0.754053785184521i, 1.14880761845109-0.49929201717226i, 0.993503855962119+0.214445309581601i, 0.54839695950807-0.324685911490835i, 0.238731735111441+0.094583528173571i, -0.627906076039371-0.895363357977542i, 1.36065244853001-1.31080153332797i, -0.60025958714713+1.99721338474797i, 2.18733299301658+0.60070882367242i, 1.53261062618519-1.25127136162494i, -0.235700359100477-0.611165916680421i, -1.02642090030678-1.18548008459731i));cospi(argv[[1]]);
 Error in cospi(argv[[1]]) : unimplemented complex function
 
-##com.oracle.truffle.r.test.builtins.TestBuiltin_cospi.testcos7#Ignored.Unknown#
+##com.oracle.truffle.r.test.builtins.TestBuiltin_cospi.testcos7#Output.MissingWarning#
 #argv <- list(Inf);cospi(argv[[1]]);
 [1] NaN
 Warning message:
@@ -16089,7 +16098,7 @@ Error in crossprod(x, y) :
 [2,] 0.2495078 0.2546574 0.3491333
 [3,] 0.6736018 0.3491333 0.6084268
 
-##com.oracle.truffle.r.test.builtins.TestBuiltin_crossprod.testCrossprod#Ignored.Unknown#
+##com.oracle.truffle.r.test.builtins.TestBuiltin_crossprod.testCrossprod#Ignored.ImplementationError#
 #{ x <- matrix(c(NaN,2+3i,3,4+1i,5,NA), nrow=3); crossprod(x) }
          [,1]     [,2]
 [1,] NaN+NaNi NaN+NaNi
@@ -16110,7 +16119,7 @@ Error in crossprod(x, y) :
 [4,]    2    2    2    2    2    2
 [5,]    2    2    2    2    2    2
 
-##com.oracle.truffle.r.test.builtins.TestBuiltin_crossprod.testcrossprod2#Ignored.Unknown#
+##com.oracle.truffle.r.test.builtins.TestBuiltin_crossprod.testcrossprod2#Ignored.ImplementationError#
 #argv <- list(numeric(0), numeric(0)); .Internal(crossprod(argv[[1]], argv[[2]]))
      [,1]
 [1,]    0
@@ -16144,7 +16153,7 @@ Error in crossprod(x, y) :
 [1,] 0.000000000  -2.539995
 [2,] 0.004701819 -15.927030
 
-##com.oracle.truffle.r.test.builtins.TestBuiltin_crossprod.testcrossprod8#Ignored.Unknown#
+##com.oracle.truffle.r.test.builtins.TestBuiltin_crossprod.testcrossprod8#Ignored.ImplementationError#
 #argv <- list(structure(c(-0.0972759604917099, -0.0972759604917099, -0.197781705719934, -0.197781705719934, -0.258476920906799, -0.258476920906799, -0.31681058743414, -0.31681058743414, -0.36711291168933, -0.36711291168933, -0.386611727075222, -0.386611727075222, -0.339690730499459, -0.33969073049946, -0.392353467475584, -0.392353467475584, -0.277328754578855, -0.277328754578855, -0.062581948827679, -0.062581948827679, 0.204605005658209, 0.204605005658209, 0.32860008733551, 0.32860008733551, 0.504748197638673, 0.504748197638673, 0.0398546163039329, 0.039854616303933, -0.269613788250837, -0.269613788250837, -0.312096598983548, -0.312096598983548, 0.0190548270250438, 0.0190548270250438, 0.270521530002251, 0.270521530002251), .Dim = c(12L, 3L)), structure(c(-2.82631170793264, -2.82631170793264, -3.89457420977924, -3.89457420977924, -3.62818861156626, -3.62818861156626, -2.72530862462141, -2.72530862462141, -1.437640468988, -1.437640468988, -0.811701520293695, -0.811701520293695, 14291.543903102, 14291.543903102, 13346.8386233407, 13346.8386233407, 8863.44390274002, 8863.44390274002, 4080.15117667984, 4080.15117667984, 979.818149952962, 979.818149952962, 296.593928028368, 296.593928028368), .Dim = c(12L, 2L), .Dimnames = list(NULL, c('Vm', 'K')))); .Internal(crossprod(argv[[1]], argv[[2]]))
                Vm          K
 [1,] 7.376014e+00 -16175.971
@@ -16432,7 +16441,7 @@ numeric(0)
 #{ cumsum(as.raw(1:6)) }
 [1]  1  3  6 10 15 21
 
-##com.oracle.truffle.r.test.builtins.TestBuiltin_cumsum.testCumulativeSum#Ignored.Unknown#
+##com.oracle.truffle.r.test.builtins.TestBuiltin_cumsum.testCumulativeSum#Output.MissingWarning#
 #{ cumsum(c(-2147483647L, -1L)) }
 [1] -2147483647          NA
 Warning message:
@@ -16462,7 +16471,7 @@ integer overflow in 'cumsum'; use 'cumsum(as.numeric(.))'
 #{ cumsum(c(1e308, 1e308, NA, 1, 2)) }
 [1] 1e+308    Inf     NA     NA     NA
 
-##com.oracle.truffle.r.test.builtins.TestBuiltin_cumsum.testCumulativeSum#Ignored.Unknown#
+##com.oracle.truffle.r.test.builtins.TestBuiltin_cumsum.testCumulativeSum#Output.MissingWarning#
 #{ cumsum(c(2000000000L, 2000000000L)) }
 [1] 2000000000         NA
 Warning message:
@@ -16743,7 +16752,7 @@ character(0)
 #argv <- structure(list(x = c('A', 'B', 'C', NA)), .Names = 'x');do.call('data.class', argv)
 [1] "character"
 
-##com.oracle.truffle.r.test.builtins.TestBuiltin_date.testDate#Ignored.Unknown#
+##com.oracle.truffle.r.test.builtins.TestBuiltin_date.testDate#Ignored.OutputFormatting#
 #{date()}
 [1] "Wed Nov  9 20:10:56 2016"
 
@@ -20087,7 +20096,7 @@ Warning message:
 In dotchart(table(infert$education)) :
   x is neither a vector nor a matrix: using as.numeric(x)
 
-##com.oracle.truffle.r.test.builtins.TestBuiltin_dfltWarn.testdfltWarn11#Ignored.Unknown#
+##com.oracle.truffle.r.test.builtins.TestBuiltin_dfltWarn.testdfltWarn11#
 #argv <- list('Invalid file name(s) for R code in ./myTst/R:\n  file55711ba85492\n are now renamed to z<name>.R', quote(package.skeleton('myTst', code_files = tmp))); .Internal(.dfltWarn(argv[[1]], argv[[2]]))
 NULL
 Warning message:
@@ -21600,7 +21609,7 @@ Error: object 'x' not found
 [2,]    2    5    8   11
 [3,]    3    6    9   12
 
-##com.oracle.truffle.r.test.builtins.TestBuiltin_dimassign.testdimassign8#Ignored.Unknown#
+##com.oracle.truffle.r.test.builtins.TestBuiltin_dimassign.testdimassign8#Ignored.Unimplemented#
 #argv <- list(NULL, NULL);`dim<-`(argv[[1]],argv[[2]]);
 NULL
 
@@ -22077,8 +22086,8 @@ a 1259  845  719  390
 b 1360 1053  774  413
 
 ##com.oracle.truffle.r.test.builtins.TestBuiltin_dir.testdir1#Ignored.Unknown#
-#argv <- structure(list(path = '.', pattern = 'myTst_.*tar\.gz$'),     .Names = c('path', 'pattern'));do.call('dir', argv)
-Error: '\.' is an unrecognized escape in character string starting "'myTst_.*tar\."
+#argv <- structure(list(path = '.', pattern = 'myTst_.*tar[.]gz$'),     .Names = c('path', 'pattern'));do.call('dir', argv)
+character(0)
 
 ##com.oracle.truffle.r.test.builtins.TestBuiltin_dircreate.testdircreate1#Ignored.SideEffects#
 #argv <- list('/home/lzhao/tmp/RtmptS6o2G/translations', FALSE, FALSE, structure(511L, class = 'octmode')); .Internal(dir.create(argv[[1]], argv[[2]], argv[[3]], argv[[4]]))
@@ -22248,6 +22257,9 @@ Error in (function (x)  : object 'foo' not found
 #{ do.call("+", list(quote(1), 2))}
 [1] 3
 
+##com.oracle.truffle.r.test.builtins.TestBuiltin_docall.testDoCall#
+#{ do.call('+', list(data.frame(1), data.frame(2)), envir = new.env()); do.call('assign', list('a',2,new.env()), envir = new.env()); }
+
 ##com.oracle.truffle.r.test.builtins.TestBuiltin_docall.testDoCall#
 #{ do.call(quote, list(quote(1)))}
 [1] 1
@@ -22260,6 +22272,22 @@ x
 #{ do.call(quote, list(quote(x+1)))}
 x + 1
 
+##com.oracle.truffle.r.test.builtins.TestBuiltin_docall.testDoCall#
+#{ e <- new.env(); assign('a', 42, e); a <- 1; foo <- function(x) force(x); do.call('foo', list(as.name('a')), envir=e); }
+[1] 42
+
+##com.oracle.truffle.r.test.builtins.TestBuiltin_docall.testDoCall#
+#{ e <- new.env(); assign('a', 42, e); a <- 1; foo <- function(x) force(x); do.call('foo', list(as.name('a')), envir=e, quote=T); }
+a
+
+##com.oracle.truffle.r.test.builtins.TestBuiltin_docall.testDoCall#
+#{ e <- new.env(); assign('foo', 42, e); foo <- function(x) 1; do.call('foo', list(), envir=e); }
+[1] 1
+
+##com.oracle.truffle.r.test.builtins.TestBuiltin_docall.testDoCall#
+#{ e <- new.env(); assign('foo', function() 42, e); foo <- function(x) 1; do.call('foo', list(), envir=e); }
+[1] 42
+
 ##com.oracle.truffle.r.test.builtins.TestBuiltin_docall.testDoCall#Output.IgnoreErrorContext#
 #{ f <- function(x) x; do.call(f, list(quote(y + 1)))}
 Error in (function (x)  : object 'y' not found
@@ -22268,6 +22296,44 @@ Error in (function (x)  : object 'y' not found
 #{ f <- function(x) x; do.call(f, list(quote(y)))}
 Error in (function (x)  : object 'y' not found
 
+##com.oracle.truffle.r.test.builtins.TestBuiltin_docall.testDoCall#
+#{ foo <- function() ls(parent.frame()); bar <- function(a,b,c) do.call('foo', list()); bar(a=1,b=2,c=3); }
+[1] "a" "b" "c"
+
+##com.oracle.truffle.r.test.builtins.TestBuiltin_docall.testDoCall#
+#{ foo <- function() ls(parent.frame()); bar <- function(a,b,c) do.call('foo', list(), envir=globalenv()); bar(a=1,b=2,c=3) }
+[1] "bar" "foo"
+
+##com.oracle.truffle.r.test.builtins.TestBuiltin_docall.testDoCall#
+#{ foo <- function(a,b)  list(a=a,b=b); e <- new.env(); assign('a', 2); assign('b', 3); a<-0; b<-1; do.call('foo', list(a,b), env=e); }
+$a
+[1] 0
+
+$b
+[1] 1
+
+
+##com.oracle.truffle.r.test.builtins.TestBuiltin_docall.testDoCall#
+#{ foo <- function(a,b)  list(a=a,b=b); e <- new.env(); assign('a', 2); assign('b', 3); a<-0; b<-1; do.call('foo', list(a=as.name('a'),as.name('b')), env=e) }
+$a
+[1] 0
+
+$b
+[1] 1
+
+
+##com.oracle.truffle.r.test.builtins.TestBuiltin_docall.testDoCall#
+#{ foo <- function(a,b,c) { cat('foo called.'); list(a=a,b=b,c=c); }; side <- function() { cat('side effect!'); 42 }; do.call('foo', list(parse(text='side()')[[1]], 0, 0)); }
+foo called.side effect!$a
+[1] 42
+
+$b
+[1] 0
+
+$c
+[1] 0
+
+
 ##com.oracle.truffle.r.test.builtins.TestBuiltin_docall.testDoCall#
 #{ x<-list(c(1,2)); do.call("as.matrix", x) }
      [,1]
@@ -24083,19 +24149,19 @@ logical(0)
 #argv <- list(character(0), character(0)); .Internal(file.rename(argv[[1]], argv[[2]]))
 logical(0)
 
-##com.oracle.truffle.r.test.builtins.TestBuiltin_findInterval.testfindInterval1#Ignored.Unknown#
+##com.oracle.truffle.r.test.builtins.TestBuiltin_findInterval.testfindInterval1#Ignored.Unimplemented#
 #argv <- list(c(1, 2, 3, 4, 5, 6, 7, 8, 9), c(3, 3.25, 3.5, 3.75, 4, 4.25, 4.5, 4.75, 5, 5.25, 5.5, 5.75, 6), FALSE, FALSE); .Internal(findInterval(argv[[1]], argv[[2]], argv[[3]], argv[[4]]))
 Error: 4 arguments passed to .Internal(findInterval) which requires 5
 
-##com.oracle.truffle.r.test.builtins.TestBuiltin_findInterval.testfindInterval2#Ignored.Unknown#
+##com.oracle.truffle.r.test.builtins.TestBuiltin_findInterval.testfindInterval2#Ignored.Unimplemented#
 #argv <- list(NA_real_, NA_real_, FALSE, FALSE); .Internal(findInterval(argv[[1]], argv[[2]], argv[[3]], argv[[4]]))
 Error: 4 arguments passed to .Internal(findInterval) which requires 5
 
-##com.oracle.truffle.r.test.builtins.TestBuiltin_findInterval.testfindInterval3#Ignored.Unknown#
+##com.oracle.truffle.r.test.builtins.TestBuiltin_findInterval.testfindInterval3#Ignored.Unimplemented#
 #argv <- list(numeric(0), numeric(0), FALSE, FALSE); .Internal(findInterval(argv[[1]], argv[[2]], argv[[3]], argv[[4]]))
 Error: 4 arguments passed to .Internal(findInterval) which requires 5
 
-##com.oracle.truffle.r.test.builtins.TestBuiltin_findInterval.testfindInterval4#Ignored.Unknown#
+##com.oracle.truffle.r.test.builtins.TestBuiltin_findInterval.testfindInterval4#Ignored.Unimplemented#
 #argv <- list(c(5, 10, 15), c(2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18), FALSE, FALSE); .Internal(findInterval(argv[[1]], argv[[2]], argv[[3]], argv[[4]]))
 Error: 4 arguments passed to .Internal(findInterval) which requires 5
 
@@ -24505,7 +24571,7 @@ character(0)
 #argv <- structure(list(x = structure(integer(0), class = 'AsIs')),     .Names = 'x');do.call('format.AsIs', argv)
 character(0)
 
-##com.oracle.truffle.r.test.builtins.TestBuiltin_formatC.testformatC1#Ignored.Unknown#
+##com.oracle.truffle.r.test.builtins.TestBuiltin_formatC.testformatC1#Ignored.ImplementationError#
 #argv <- list(c(3.14159265358979, 3.1415926535898, 1), 'double', 10, 4L, 'g', '', c(12L, 12L, 12L)); .Internal(formatC(argv[[1]], argv[[2]], argv[[3]], argv[[4]], argv[[5]], argv[[6]], argv[[7]]))
 [1] "     3.142" "     3.142" "         1"
 
@@ -24526,22 +24592,22 @@ character(0)
  [1] "0.00003142" "0.0003142"  "0.003142"   "0.03142"    "0.3142"
  [6] "3.142"      "31.42"      "314.2"      " 3142"      "31416"
 
-##com.oracle.truffle.r.test.builtins.TestBuiltin_formatC.testformatC14#Ignored.Unknown#
+##com.oracle.truffle.r.test.builtins.TestBuiltin_formatC.testformatC14#Ignored.ReferenceError#
 #argv <- list(structure(c(1962.25, 1962.5, 1962.75, 1963, 1963.25, 1963.5, 1963.75, 1964, 1964.25, 1964.5, 1964.75, 1965, 1965.25, 1965.5, 1965.75, 1966, 1966.25, 1966.5, 1966.75, 1967, 1967.25, 1967.5, 1967.75, 1968, 1968.25, 1968.5, 1968.75, 1969, 1969.25, 1969.5, 1969.75, 1970, 1970.25, 1970.5, 1970.75, 1971, 1971.25, 1971.5, 1971.75), .Tsp = c(1962.25, 1971.75, 4), class = 'ts'), 'double', 1, 4L, 'g', '', c(12L, 12L, 12L, 12L, 12L, 12L, 12L, 12L, 12L, 12L, 12L, 12L, 12L, 12L, 12L, 12L, 12L, 12L, 12L, 12L, 12L, 12L, 12L, 12L, 12L, 12L, 12L, 12L, 12L, 12L, 12L, 12L, 12L, 12L, 12L, 12L, 12L, 12L, 12L)); .Internal(formatC(argv[[1]], argv[[2]], argv[[3]], argv[[4]], argv[[5]], argv[[6]], argv[[7]]))
  [1] "1962" "1962" "1963" "1963" "1963" "1964" "1964" "1964" "1964" "1964"
 [11] "1965" "1965" "1965" "1966" "1966" "1966" "1966" "1966" "1967" "1967"
 [21] "1967" "1968" "1968" "1968" "1968" "1968" "1969" "1969" "1969" "1970"
 [31] "1970" "1970" "1970" "1970" "1971" "1971" "1971" "1972" "1972"
 
-##com.oracle.truffle.r.test.builtins.TestBuiltin_formatC.testformatC2#Ignored.Unknown#
+##com.oracle.truffle.r.test.builtins.TestBuiltin_formatC.testformatC2#Ignored.ImplementationError#
 #argv <- list(1, 'double', 8, 5, 'g', '-', 13); .Internal(formatC(argv[[1]], argv[[2]], argv[[3]], argv[[4]], argv[[5]], argv[[6]], argv[[7]]))
 [1] "1       "
 
-##com.oracle.truffle.r.test.builtins.TestBuiltin_formatC.testformatC3#Ignored.Unknown#
+##com.oracle.truffle.r.test.builtins.TestBuiltin_formatC.testformatC3#Ignored.ImplementationError#
 #argv <- list(structure(c(1.5, 13.3414265412268, 1e-15, 8, 1, 500, 28), .Dim = c(7L, 1L), .Dimnames = list(c('m.ship.expon.', 'objective', 'tolerance', 'iterations', 'converged', 'maxit', 'n'), ' ')), 'double', 8L, 7L, 'g', '', c(15L, 15L, 15L, 15L, 15L, 15L, 15L)); .Internal(formatC(argv[[1]], argv[[2]], argv[[3]], argv[[4]], argv[[5]], argv[[6]], argv[[7]]))
 [1] "     1.5" "13.34143" "   1e-15" "       8" "       1" "     500" "      28"
 
-##com.oracle.truffle.r.test.builtins.TestBuiltin_formatC.testformatC4#Ignored.Unknown#
+##com.oracle.truffle.r.test.builtins.TestBuiltin_formatC.testformatC4#Ignored.ImplementationError#
 #argv <- list(c(1000, 1e+07, 1), 'double', 5, 4L, 'g', '', c(12L, 12L, 12L)); .Internal(formatC(argv[[1]], argv[[2]], argv[[3]], argv[[4]], argv[[5]], argv[[6]], argv[[7]]))
 [1] " 1000" "1e+07" "    1"
 
@@ -24561,7 +24627,7 @@ character(0)
 #argv <- list(structure(48.4333681840033, .Names = 'value'), 'double', 5L, 4L, 'g', '', 12L); .Internal(formatC(argv[[1]], argv[[2]], argv[[3]], argv[[4]], argv[[5]], argv[[6]], argv[[7]]))
 [1] "48.43"
 
-##com.oracle.truffle.r.test.builtins.TestBuiltin_formatC.testformatC9#Ignored.Unknown#
+##com.oracle.truffle.r.test.builtins.TestBuiltin_formatC.testformatC9#Ignored.ImplementationError#
 #argv <- list(c(0.0599, 0.00599, 0.000599, 5.99e-05, 5.99e-06, 5.99e-07), 'double', 3, -2, 'fg', '#', c(10, 11, 12, 13, 14, 15)); .Internal(formatC(argv[[1]], argv[[2]], argv[[3]], argv[[4]], argv[[5]], argv[[6]], argv[[7]]))
 [1] "0.060"      "0.0060"     "0.00060"    "0.000060"   "0.0000060"
 [6] "0.00000060"
@@ -24695,7 +24761,7 @@ In gamma(argv[[1]]) : NaNs produced
 Warning message:
 In gamma(argv[[1]]) : NaNs produced
 
-##com.oracle.truffle.r.test.builtins.TestBuiltin_gamma.testgamma3#Ignored.Unknown#
+##com.oracle.truffle.r.test.builtins.TestBuiltin_gamma.testgamma3#Ignored.Unimplemented#
 #argv <- list(structure(numeric(0), .Dim = c(0L, 0L)));gamma(argv[[1]]);
 <0 x 0 matrix>
 
@@ -24751,11 +24817,11 @@ In gamma(argv[[1]]) : NaNs produced
 Warning message:
 In gamma(argv[[1]]) : NaNs produced
 
-##com.oracle.truffle.r.test.builtins.TestBuiltin_gcinfo.testgcinfo1#Ignored.Unknown#
+##com.oracle.truffle.r.test.builtins.TestBuiltin_gcinfo.testgcinfo1#Ignored.Unimplemented#
 #argv <- list(list()); .Internal(gcinfo(argv[[1]]))
 [1] FALSE
 
-##com.oracle.truffle.r.test.builtins.TestBuiltin_gcinfo.testgcinfo2#Ignored.Unknown#
+##com.oracle.truffle.r.test.builtins.TestBuiltin_gcinfo.testgcinfo2#Ignored.Unimplemented#
 #argv <- list(FALSE); .Internal(gcinfo(argv[[1]]))
 [1] FALSE
 
@@ -25541,7 +25607,7 @@ logical(0)
 #argv <- list('\n', '\nqr(x, ...)\nqrR(qr, complete=FALSE, backPermute=TRUE)\n', FALSE, FALSE, FALSE, TRUE, FALSE, FALSE); .Internal(grepl(argv[[1]], argv[[2]], argv[[3]], argv[[4]], argv[[5]], argv[[6]], argv[[7]], argv[[8]]))
 [1] TRUE
 
-##com.oracle.truffle.r.test.builtins.TestBuiltin_growconst.testgrowconst1#Ignored.Unknown#
+##com.oracle.truffle.r.test.builtins.TestBuiltin_growconst.testgrowconst1#Ignored.Unimplemented#
 #argv <- list(list(list())); .Internal(growconst(argv[[1]]))
 [[1]]
 list()
@@ -25944,7 +26010,7 @@ Error: 'x' must be a character vector
 #argv <- list('Report Information on C Stack Size and Usage', 'UTF-8', '', 'byte', FALSE, FALSE); .Internal(iconv(argv[[1]], argv[[2]], argv[[3]], argv[[4]], argv[[5]], argv[[6]]))
 [1] "Report Information on C Stack Size and Usage"
 
-##com.oracle.truffle.r.test.builtins.TestBuiltin_iconv.testiconv2#Ignored.Unknown#
+##com.oracle.truffle.r.test.builtins.TestBuiltin_iconv.testiconv2#Ignored.ImplementationError#
 #argv <- list('façile'   , 'latin1', 'ASCII', NA_character_, TRUE, FALSE); .Internal(iconv(argv[[1]], argv[[2]], argv[[3]], argv[[4]], argv[[5]], argv[[6]]))
 [1] NA
 
@@ -26015,21 +26081,21 @@ Error: 'x' must be a character vector
 #argv <- list(character(0), 'latin1', 'ASCII', NA_character_, TRUE, FALSE); .Internal(iconv(argv[[1]], argv[[2]], argv[[3]], argv[[4]], argv[[5]], argv[[6]]))
 character(0)
 
-##com.oracle.truffle.r.test.builtins.TestBuiltin_iconv.testiconv6#Ignored.Unknown#
+##com.oracle.truffle.r.test.builtins.TestBuiltin_iconv.testiconv6#Ignored.ImplementationError#
 #argv <- list(list(), 'latin1', 'ASCII', NA_character_, TRUE, FALSE); .Internal(iconv(argv[[1]], argv[[2]], argv[[3]], argv[[4]], argv[[5]], argv[[6]]))
 character(0)
 
-##com.oracle.truffle.r.test.builtins.TestBuiltin_iconv.testiconv7#Ignored.Unknown#
+##com.oracle.truffle.r.test.builtins.TestBuiltin_iconv.testiconv7#Ignored.ImplementationError#
 #argv <- list('façile'   , 'latin1', 'ASCII', '', TRUE, FALSE); .Internal(iconv(argv[[1]], argv[[2]], argv[[3]], argv[[4]], argv[[5]], argv[[6]]))
 [1] "faile"
 
-##com.oracle.truffle.r.test.builtins.TestBuiltin_iconv.testiconv8#Ignored.Unknown#
+##com.oracle.truffle.r.test.builtins.TestBuiltin_iconv.testiconv8#Ignored.ImplementationError#
 #argv <- list(structure('Prediction matrix for soap film smooth', Rd_tag = 'TEXT'), 'UTF-8', 'ASCII', NA_character_, FALSE, FALSE); .Internal(iconv(argv[[1]], argv[[2]], argv[[3]], argv[[4]], argv[[5]], argv[[6]]))
 [1] "Prediction matrix for soap film smooth"
 attr(,"Rd_tag")
 [1] "TEXT"
 
-##com.oracle.truffle.r.test.builtins.TestBuiltin_iconv.testiconv9#Ignored.Unknown#
+##com.oracle.truffle.r.test.builtins.TestBuiltin_iconv.testiconv9#Ignored.ImplementationError#
 #argv <- list(structure(c('Q.1 Opinion of presidents job performance', 'Q.1 Opinion of presidents job performance', 'Q.1 Opinion of presidents job performance', 'Q.1 Opinion of presidents job performance', 'Q.1 Opinion of presidents job performance', 'Q.1 Opinion of presidents job performance', 'Q.1 Opinion of presidents job performance', 'Q.1 Opinion of presidents job performance', 'Q.1 Opinion of presidents job performance', 'Q.1 Opinion of presidents job performance'), .Names = c('Q1_MISSING_NONE', 'Q1_MISSING_1', 'Q1_MISSING_2', 'Q1_MISSING_3', 'Q1_MISSING_RANGE', 'Q1_MISSING_LOW', 'Q1_MISSING_HIGH', 'Q1_MISSING_RANGE_1', 'Q1_MISSING_LOW_1', 'Q1_MISSING_HIGH_1')), 'latin1', '', NA_character_, TRUE, FALSE); .Internal(iconv(argv[[1]], argv[[2]], argv[[3]], argv[[4]], argv[[5]], argv[[6]]))
                             Q1_MISSING_NONE
 "Q.1 Opinion of presidents job performance"
@@ -29429,10 +29495,14 @@ logical(0)
 #argv <- list(structure(c(39.7, 27.7, 43.5, 89.7, 70.2, 63.5, 36.5, 15.2, 35.3, 45.2, 1.2, 49.5, 63.1, 34, 17, 17.6, 67.8, 45.1, 50.9, 64.9, 59.8, 73, 37.6, 60.7, 60.8, 69.3, 71.2, 64.5, 75.9, 7.7, 72.6, 18.7, 78.2, 55.1, 58.1, 62, 53.3, 85.9, 67.5, 16.7, 46.6, 84.9, 19.4, 38.4, 5, 22, 17, 5, 16, 6, 12, 31, 9, 16, 37, 15, 13, 17, 15, 35, 14, 6, 22, 7, 22, 19, 15, 19, 16, 22, 12, 14, 9, 29, 18, 25, 12, 14, 14, 21, 12, 3, 14, 22, 16, 7, 26, 26, 5, 29, 15, 2, 7, 3, 7, 20, 7, 13, 53, 8, 13, 8, 12, 32, 8, 9, 12, 3, 10, 9, 7, 12, 10, 5, 1, 6, 9, 11, 2, 7, 6, 3, 8, 12, 7, 2, 7, 13, 29, 6, 28, 12, 93.4, 58.33, 5.16, 100, 92.85, 2.56, 33.77, 2.15, 90.57, 91.38, 42.34, 6.1, 96.83, 3.3, 9.96, 16.92, 97.16, 84.84, 15.14, 98.22, 5.23, 2.84, 4.97, 4.43, 7.72, 2.82, 2.4, 98.61, 99.06, 13.79, 24.2, 8.65, 98.96, 4.52, 5.23, 8.52, 97.67, 99.71, 2.27, 11.22, 50.43, 99.68, 12.11, 5.62, 20.2, 19.3, 20.6, 18.3, 23.6, 18, 20.3, 10.8, 26.6, 24.4, 18, 22.5, 18.1, 20, 22.2, 23, 24.9, 22.2, 16.7, 20.2, 18, 20, 20, 22.7, 16.3, 18.7, 21, 24.5, 17.8, 20.5, 21.2, 19.5, 19.4, 22.4, 23.8, 16.5, 21, 15.1, 19.1, 18.9, 18.2, 19.8, 20.2, 20.3), .Dim = c(44L, 5L), .Dimnames = list(c('Franches-Mnt', 'Rive Gauche', 'Neuveville', 'Herens', 'Broye', 'Paysd\'enhaut', 'Moutier', 'La Vallee', 'Porrentruy', 'Sarine', 'V. De Geneve', 'Yverdon', 'Sion', 'Grandson', 'Courtelary', 'Neuchatel', 'Glane', 'Delemont', 'Nyone', 'Monthey', 'Morges', 'Lavaux', 'Val de Ruz', 'Avenches', 'Rolle', 'Cossonay', 'Oron', 'Veveyse', 'St Maurice', 'La Chauxdfnd', 'Echallens', 'ValdeTravers', 'Martigwy', 'Moudon', 'Payerne', 'Aigle', 'Gruyere', 'Conthey', 'Aubonne', 'Le Locle', 'Rive Droite', 'Entremont', 'Lausanne', 'Boudry'), c('Agriculture', 'Examination', 'Education', 'Catholic', 'Infant.Mortality'))));is.numeric(argv[[1]]);
 [1] TRUE
 
-##com.oracle.truffle.r.test.builtins.TestBuiltin_isnumeric.testisnumeric14#Ignored.Unknown#
+##com.oracle.truffle.r.test.builtins.TestBuiltin_isnumeric.testisnumeric14#Ignored.ImplementationError#
 #argv <- list(structure(c(1386439154.20645, 1386469154.20645, 1386499154.20645, 1386529154.20645, 1386559154.20645, 1386589154.20645, 1386619154.20645, 1386649154.20645, 1386679154.20645, 1386709154.20645, 1386739154.20645, 1386769154.20645, 1386799154.20645, 1386829154.20645, 1386859154.20645, 1386889154.20645, 1386919154.20645, 1386949154.20645, 1386979154.20645, 1387009154.20645, 1387039154.20645, 1387069154.20645, 1387099154.20645, 1387129154.20645, 1387159154.20645, 1387189154.20645, 1387219154.20645, 1387249154.20645, 1387279154.20645, 1387309154.20645, 1387339154.20645, 1387369154.20645, 1387399154.20645, 1387429154.20645), class = c('POSIXct', 'POSIXt')));is.numeric(argv[[1]]);
 [1] FALSE
 
+##com.oracle.truffle.r.test.builtins.TestBuiltin_isnumeric.testisnumeric14#Ignored.ImplementationError#
+#is.numeric(structure(1L, class = c('POSIXct', 'POSIXt')))
+[1] FALSE
+
 ##com.oracle.truffle.r.test.builtins.TestBuiltin_isnumeric.testisnumeric15#
 #argv <- list(c('2001-01-01', NA, NA, '2004-10-26'));is.numeric(argv[[1]]);
 [1] FALSE
@@ -29453,7 +29523,7 @@ logical(0)
 #argv <- list(structure(c(79.5323303457107, 6, 86.1989970123773, 6, 69.7732394366197, 5, 98.0323303457106, 6, 108.032330345711, 6, 89.1989970123773, 6, 114.198997012377, 6, 116.698997012377, 6, 110.365663679044, 6, 124.365663679044, 6, 126.365663679044, 6, 118.032330345711, 6), .Dim = c(6L, 4L), .Dimnames = structure(list(V = c('Golden.rain', 'rep        ', 'Marvellous ', 'rep        ', 'Victory    ', 'rep        '), N = c('0.0cwt', '0.2cwt', '0.4cwt', '0.6cwt')), .Names = c('V', 'N'))));is.numeric(argv[[1]]);
 [1] TRUE
 
-##com.oracle.truffle.r.test.builtins.TestBuiltin_isnumeric.testisnumeric2#Ignored.Unknown#
+##com.oracle.truffle.r.test.builtins.TestBuiltin_isnumeric.testisnumeric2#Ignored.ImplementationError#
 #argv <- list(structure(c(12784, 12874, 12965, 13057, 13149, 13239, 13330, 13422, 13514, 13604, 13695, 13787, 13879, 13970, 14061, 14153, 14245, 14335), class = 'Date'));is.numeric(argv[[1]]);
 [1] FALSE
 
@@ -29461,7 +29531,7 @@ logical(0)
 #argv <- list(structure(numeric(0), .Dim = c(3L, 0L)));is.numeric(argv[[1]]);
 [1] TRUE
 
-##com.oracle.truffle.r.test.builtins.TestBuiltin_isnumeric.testisnumeric21#Ignored.Unknown#
+##com.oracle.truffle.r.test.builtins.TestBuiltin_isnumeric.testisnumeric21#Ignored.ImplementationError#
 #argv <- list(structure(16146, class = 'Date'));is.numeric(argv[[1]]);
 [1] FALSE
 
@@ -29469,7 +29539,7 @@ logical(0)
 #argv <- list(structure(c(-3.001e+155, -1.067e+107, -1.976e+62, -9.961e+152, -2.059e+23, 0.5104), .Names = c('Min.', '1st Qu.', 'Median', 'Mean', '3rd Qu.', 'Max.'), class = c('summaryDefault', 'table')));is.numeric(argv[[1]]);
 [1] TRUE
 
-##com.oracle.truffle.r.test.builtins.TestBuiltin_isnumeric.testisnumeric24#Ignored.Unknown#
+##com.oracle.truffle.r.test.builtins.TestBuiltin_isnumeric.testisnumeric24#Ignored.ImplementationError#
 #argv <- list(structure(16352, class = 'Date'));do.call('is.numeric', argv)
 [1] FALSE
 
@@ -29813,7 +29883,7 @@ Error in is.unsorted(x, strictly) : invalid 'strictly' argument
 #argv <- structure(list(x = c(1L, 2L, 3L, 5L, 5L, 6L, 6L, 7L,     7L, 7L, 7L, 7L, 8L, 8L, 9L, 9L, 10L, 12L, 12L, 12L, 12L,     13L, 15L, 20L, 28L)), .Names = 'x');do.call('is.unsorted', argv)
 [1] FALSE
 
-##com.oracle.truffle.r.test.builtins.TestBuiltin_isunsorted.testisunsorted14#Ignored.Unknown#
+##com.oracle.truffle.r.test.builtins.TestBuiltin_isunsorted.testisunsorted14#Ignored.ImplementationError#
 #argv <- structure(list(x = structure(list(x = 3:4, y = 1:2),     .Names = c('x', 'y'), row.names = c(NA, -2L), class = 'data.frame')),     .Names = 'x');do.call('is.unsorted', argv)
 [1] TRUE
 
@@ -29841,7 +29911,7 @@ Error in is.unsorted(x, strictly) : invalid 'strictly' argument
 #argv <- list(c(1, 2, 3, 2), FALSE); .Internal(is.unsorted(argv[[1]], argv[[2]]))
 [1] TRUE
 
-##com.oracle.truffle.r.test.builtins.TestBuiltin_isunsorted.testisunsorted7#Ignored.Unknown#
+##com.oracle.truffle.r.test.builtins.TestBuiltin_isunsorted.testisunsorted7#Ignored.ImplementationError#
 #argv <- list(structure(list(c0 = structure(integer(0), .Label = character(0), class = 'factor')), .Names = 'c0', row.names = character(0), class = structure('integer(0)', .Names = 'c0')), FALSE); .Internal(is.unsorted(argv[[1]], argv[[2]]))
 [1] FALSE
 
@@ -30517,7 +30587,7 @@ NULL
  1  2  3  4  5
 51 57 45 NA NA
 
-##com.oracle.truffle.r.test.builtins.TestBuiltin_lbeta.testlbeta1#Ignored.Unknown#
+##com.oracle.truffle.r.test.builtins.TestBuiltin_lbeta.testlbeta1#Ignored.Unimplemented#
 #argv <- list(FALSE, FALSE); .Internal(lbeta(argv[[1]], argv[[2]]))
 [1] Inf
 
@@ -31353,14 +31423,14 @@ Error in lgamma(as.raw(1)) :
 #{ lgamma(c(100, 2.2)) }
 [1] 359.13420537   0.09694747
 
-##com.oracle.truffle.r.test.builtins.TestBuiltin_lgamma.testlgamma1#Ignored.Unknown#
+##com.oracle.truffle.r.test.builtins.TestBuiltin_lgamma.testlgamma1#Ignored.OutputFormatting#
 #argv <- list(structure(c(2, 1, 1, 1, 3, 1, 1, 1, 4), .Dim = c(3L, 3L)));lgamma(argv[[1]]);
      [,1]      [,2]     [,3]
 [1,]    0 0.0000000 0.000000
 [2,]    0 0.6931472 0.000000
 [3,]    0 0.0000000 1.791759
 
-##com.oracle.truffle.r.test.builtins.TestBuiltin_lgamma.testlgamma2#Ignored.Unknown#
+##com.oracle.truffle.r.test.builtins.TestBuiltin_lgamma.testlgamma2#Ignored.ImplementationError#
 #argv <- list(structure(c(2, 3, 2, 1, 4, 4, 7, 2, 11, 11, 15, 10, 7, 8, 13, 12), .Dim = c(4L, 4L), .Dimnames = structure(list(income = c('< 15k', '15-25k', '25-40k', '> 40k'), satisfaction = c('VeryD', 'LittleD', 'ModerateS', 'VeryS')), .Names = c('income', 'satisfaction'))));lgamma(argv[[1]]);
         satisfaction
 income       VeryD  LittleD ModerateS     VeryS
@@ -33007,7 +33077,7 @@ character(0)
 #argv <- list('mgcv', NULL, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE); .Internal(list.files(argv[[1]], argv[[2]], argv[[3]], argv[[4]], argv[[5]], argv[[6]], argv[[7]], argv[[8]]))
 character(0)
 
-##com.oracle.truffle.r.test.builtins.TestBuiltin_lm.test#Ignored.Unknown#
+##com.oracle.truffle.r.test.builtins.TestBuiltin_lm.test#Ignored.ImplementationError#
 #require(stats); lm(data = structure(list(y = c(43, 63, 71, 61, 81, 43, 58, 71, 72, 67, 64, 67, 69, 68, 77, 81, 74, 65, 65, 50, 50, 64, 53, 40, 63, 66, 82), x1 = c(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1), x2 = c(51, 64, 70, 63, 78, 55, 67, 75, 82, 61, 53, 60, 62, 83, 77, 90, 85, 60, 70, 58, 40, 61, 66, 37, 54, 77, 82), x3 = c(30, 51, 68, 45, 56, 49, 42, 50, 72, 45, 53, 47, 57, 83, 54, 50, 64, 65, 46, 68, 33, 52, 52, 42, 42, 66, 39), x4 = c(47, 45, 48, 39, 57, 69, 66, 50, 59, 45, 72, 50, 59, 44, 75, 39, 45, 62, 47, 74, 75, 67, 47, 58, 54, 66, 62), x5 = c(61, 63, 76, 54, 71, 54, 66, 70, 71, 62, 58, 59, 55, 59, 79, 60, 79, 55, 75, 64, 43, 66, 63, 50, 66, 88, 64), x6 = c(92, 73, 86, 84, 83, 49, 68, 66, 83, 80, 67, 74, 63, 77, 77, 54, 79, 80, 85, 78, 64, 80, 80, 57, 75, 76, 78), x7 = c(45, 47, 48, 35, 47, 34, 35, 41, 31, 41, 34, 41, 25, 35, 46, 36, 63, 60, 46, 52, 33, 41, 37, 49, 33, 72, 39)), .Names = c('y', 'x1', 'x2', 'x3', 'x4', 'x5', 'x6', 'x7'), row.names = c('1', '2', '3', '4', '5', '6', '7', '8', '9', '10', '11', '12', '13', '14', '15', '16', '17', '18', '19', '20', '21', '22', '23', '24', '25', '26', '30'), class = 'data.frame'), formula = y ~ . + 0)
 
 Call:
@@ -34840,7 +34910,7 @@ Residuals NA     NA      NA      NA     NA
 [1,]    1    3
 [2,]    2    4
 
-##com.oracle.truffle.r.test.builtins.TestBuiltin_matrix.testmatrix13#Ignored.Unknown#
+##com.oracle.truffle.r.test.builtins.TestBuiltin_matrix.testmatrix13#Output.MissingWarning#
 #argv <- list(c(0, 0, 0, 0), 4L, 0L, FALSE, NULL, FALSE, FALSE); .Internal(matrix(argv[[1]], argv[[2]], argv[[3]], argv[[4]], argv[[5]], argv[[6]], argv[[7]]))
 
 [1,]
@@ -34850,6 +34920,22 @@ Residuals NA     NA      NA      NA     NA
 Warning message:
 data length exceeds size of matrix
 
+##com.oracle.truffle.r.test.builtins.TestBuiltin_matrix.testmatrix13#
+#matrix(1:4, 2, 1)
+     [,1]
+[1,]    1
+[2,]    2
+
+##com.oracle.truffle.r.test.builtins.TestBuiltin_matrix.testmatrix13#Output.MissingWarning#
+#matrix(1:4, 4, 0)
+
+[1,]
+[2,]
+[3,]
+[4,]
+Warning message:
+In matrix(1:4, 4, 0) : data length exceeds size of matrix
+
 ##com.oracle.truffle.r.test.builtins.TestBuiltin_matrix.testmatrix14#
 #argv <- list(0+0i, 7L, 2L, FALSE, NULL, FALSE, FALSE); .Internal(matrix(argv[[1]], argv[[2]], argv[[3]], argv[[4]], argv[[5]], argv[[6]], argv[[7]]))
      [,1] [,2]
@@ -35303,7 +35389,7 @@ Nissan Van 4                    24.81481   22.46154   20.22222   20.22222
 #argv <- list(structure(logical(0), .Dim = c(1L, 0L), .Dimnames = list('r', NULL)), 0L, 0L, FALSE, NULL, FALSE, FALSE); .Internal(matrix(argv[[1]], argv[[2]], argv[[3]], argv[[4]], argv[[5]], argv[[6]], argv[[7]]))
 <0 x 0 matrix>
 
-##com.oracle.truffle.r.test.builtins.TestBuiltin_matrix.testmatrix36#Ignored.Unknown#
+##com.oracle.truffle.r.test.builtins.TestBuiltin_matrix.testmatrix36#
 #argv <- list(c(0, 0, 0, 0, 0, 0, 4.94065645841247e-324, 0, 0, 0, 0, 0), structure(12L, .Names = '1'), 1L, FALSE, NULL, FALSE, FALSE); .Internal(matrix(argv[[1]], argv[[2]], argv[[3]], argv[[4]], argv[[5]], argv[[6]], argv[[7]]))
                [,1]
  [1,]  0.000000e+00
@@ -35319,7 +35405,7 @@ Nissan Van 4                    24.81481   22.46154   20.22222   20.22222
 [11,]  0.000000e+00
 [12,]  0.000000e+00
 
-##com.oracle.truffle.r.test.builtins.TestBuiltin_matrix.testmatrix37#Ignored.Unknown#
+##com.oracle.truffle.r.test.builtins.TestBuiltin_matrix.testmatrix37#Output.MissingWarning#
 #argv <- list(1:7, 3, 4, FALSE, NULL, FALSE, FALSE); .Internal(matrix(argv[[1]], argv[[2]], argv[[3]], argv[[4]], argv[[5]], argv[[6]], argv[[7]]))
      [,1] [,2] [,3] [,4]
 [1,]    1    4    7    3
@@ -35336,7 +35422,7 @@ data length [7] is not a sub-multiple or multiple of the number of rows [3]
 [3,]    2    3   -3    5
 [4,]   -2    3    2    1
 
-##com.oracle.truffle.r.test.builtins.TestBuiltin_matrix.testmatrix39#Ignored.Unknown#
+##com.oracle.truffle.r.test.builtins.TestBuiltin_matrix.testmatrix39#Output.MissingWarning#
 #argv <- list(c(-1, 4, 4, 9, 5, 1, 4, 8, 8, 2, 6, 0, 2, 3, 8, 8, 4, 4, 2, 3, 4, 0, -1, 7, 2, 4, 2, 3, 5, 6, 6, 5, 4, 3, 7, -1, 3, 1, -1, 2, 32, 1, 4, 4), 2L, 5L, FALSE, NULL, FALSE, FALSE); .Internal(matrix(argv[[1]], argv[[2]], argv[[3]], argv[[4]], argv[[5]], argv[[6]], argv[[7]]))
      [,1] [,2] [,3] [,4] [,5]
 [1,]   -1    4    5    4    8
@@ -35938,7 +36024,7 @@ In mean.default(x = c(2L, 1L, 2L, 2L)) :
 #argv <- structure(list(x = structure(c(31, NA, NA, 31), units = 'days',     class = 'difftime'), na.rm = TRUE), .Names = c('x', 'na.rm'));do.call('mean.difftime', argv)
 Time difference of 31 days
 
-##com.oracle.truffle.r.test.builtins.TestBuiltin_memDecompress.testmemDecompress1#Ignored.Unknown#
+##com.oracle.truffle.r.test.builtins.TestBuiltin_memDecompress.testmemDecompress1#Ignored.Unimplemented#
 #argv <- structure(list(from = as.raw(c(253, 55, 122, 88, 90,     0, 0, 1, 105, 34, 222, 54, 2, 0, 33, 1, 28, 0, 0, 0, 16,     207, 88, 204, 224, 7, 207, 0, 28, 93, 0, 24, 140, 130, 182,     196, 17, 52, 92, 78, 225, 221, 115, 179, 63, 98, 20, 119,     183, 90, 101, 43, 5, 112, 179, 75, 69, 222, 0, 0, 155, 136,     185, 16, 0, 1, 52, 208, 15, 0, 0, 0, 105, 254, 40, 141, 62,     48, 13, 139, 2, 0, 0, 0, 0, 1, 89, 90)), type = 'xz', asChar = TRUE),     .Names = c('from', 'type', 'asChar'));do.call('memDecompress', argv)
 [1] "12345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890"
 
@@ -36302,7 +36388,7 @@ In min(as.double(NA), na.rm = TRUE) :
 #{ min(as.integer(NA), as.integer(NA), na.rm=FALSE) }
 [1] NA
 
-##com.oracle.truffle.r.test.builtins.TestBuiltin_min.testMinimum#Ignored.Unknown#Output.IgnoreWarningContext#
+##com.oracle.truffle.r.test.builtins.TestBuiltin_min.testMinimum#Ignored.ImplementationError#Output.IgnoreWarningContext#
 #{ min(as.integer(NA), as.integer(NA), na.rm=TRUE) }
 [1] Inf
 Warning message:
@@ -36313,7 +36399,7 @@ In min(as.integer(NA), as.integer(NA), na.rm = TRUE) :
 #{ min(as.integer(NA), na.rm=FALSE) }
 [1] NA
 
-##com.oracle.truffle.r.test.builtins.TestBuiltin_min.testMinimum#Ignored.Unknown#Output.IgnoreWarningContext#
+##com.oracle.truffle.r.test.builtins.TestBuiltin_min.testMinimum#Ignored.ImplementationError#Output.IgnoreWarningContext#
 #{ min(as.integer(NA), na.rm=TRUE) }
 [1] Inf
 Warning message:
@@ -36360,13 +36446,13 @@ In min(double()) : no non-missing arguments to min; returning Inf
 Warning message:
 In min(double(0)) : no non-missing arguments to min; returning Inf
 
-##com.oracle.truffle.r.test.builtins.TestBuiltin_min.testMinimum#Ignored.Unknown#Output.IgnoreWarningContext#
+##com.oracle.truffle.r.test.builtins.TestBuiltin_min.testMinimum#Ignored.ImplementationError#Output.IgnoreWarningContext#
 #{ min(integer()) }
 [1] Inf
 Warning message:
 In min(integer()) : no non-missing arguments to min; returning Inf
 
-##com.oracle.truffle.r.test.builtins.TestBuiltin_min.testMinimum#Ignored.Unknown#Output.IgnoreWarningContext#
+##com.oracle.truffle.r.test.builtins.TestBuiltin_min.testMinimum#Ignored.ImplementationError#Output.IgnoreWarningContext#
 #{ min(integer(0)) }
 [1] Inf
 Warning message:
@@ -37929,7 +38015,7 @@ NULL
 #argv <- list(list(), NULL);`oldClass<-`(argv[[1]],argv[[2]]);
 list()
 
-##com.oracle.truffle.r.test.builtins.TestBuiltin_oldClassassign.testoldClassassign2#Ignored.Unknown#
+##com.oracle.truffle.r.test.builtins.TestBuiltin_oldClassassign.testoldClassassign2#Ignored.ImplementationError#
 #argv <- list(NULL, NULL);`oldClass<-`(argv[[1]],argv[[2]]);
 NULL
 
@@ -42882,9 +42968,20 @@ $ts.eps
 [1] 1e-05
 
 
-##com.oracle.truffle.r.test.builtins.TestBuiltin_options.testoptions5#Ignored.Unknown#
+##com.oracle.truffle.r.test.builtins.TestBuiltin_options.testoptions5#Ignored.ReferenceError#
 #argv <- list(NULL); .Internal(options(argv[[1]]))
 
+##com.oracle.truffle.r.test.builtins.TestBuiltin_options.testoptions5#
+#options(NA);
+Error in options(NA) : invalid argument
+
+##com.oracle.truffle.r.test.builtins.TestBuiltin_options.testoptions5#Ignored.ReferenceError#
+#options(NULL);
+
+##com.oracle.truffle.r.test.builtins.TestBuiltin_options.testoptions5#Ignored.Unimplemented#
+#options(list(NULL));
+Error in options(list(NULL)) : list argument has no valid names
+
 ##com.oracle.truffle.r.test.builtins.TestBuiltin_order.testOrder#
 #order(c('40 50', '405', '40 51', '4028', '40 20', '40 30', '404'))
 [1] 5 6 1 3 4 7 2
@@ -43321,7 +43418,7 @@ expression(for (i in 1:10) {
     x[i] <- i
 })
 
-##com.oracle.truffle.r.test.builtins.TestBuiltin_parse.testSource#Ignored.Unknown#
+##com.oracle.truffle.r.test.builtins.TestBuiltin_parse.testSource#Output.IgnoreWarningMessage#
 #{ source("test/r/simple/data/tree2/setx.r") ; x }
 Error in file(filename, "r", encoding = encoding) :
   cannot open the connection
@@ -43329,7 +43426,7 @@ In addition: Warning message:
 In file(filename, "r", encoding = encoding) :
   cannot open file 'test/r/simple/data/tree2/setx.r': No such file or directory
 
-##com.oracle.truffle.r.test.builtins.TestBuiltin_parse.testSource#Ignored.Unknown#
+##com.oracle.truffle.r.test.builtins.TestBuiltin_parse.testSource#Output.IgnoreWarningMessage#
 #{ source("test/r/simple/data/tree2/setx.r", local=TRUE) ; x }
 Error in file(filename, "r", encoding = encoding) :
   cannot open the connection
@@ -43337,7 +43434,7 @@ In addition: Warning message:
 In file(filename, "r", encoding = encoding) :
   cannot open file 'test/r/simple/data/tree2/setx.r': No such file or directory
 
-##com.oracle.truffle.r.test.builtins.TestBuiltin_parse.testSource#Ignored.Unknown#
+##com.oracle.truffle.r.test.builtins.TestBuiltin_parse.testSource#Output.IgnoreWarningMessage#
 #{ x <- 1; f <- function() { source("test/r/simple/data/tree2/incx.r", local=FALSE) ; x } ; c(f(), x) }
 Error in file(filename, "r", encoding = encoding) :
   cannot open the connection
@@ -43345,7 +43442,7 @@ In addition: Warning message:
 In file(filename, "r", encoding = encoding) :
   cannot open file 'test/r/simple/data/tree2/incx.r': No such file or directory
 
-##com.oracle.truffle.r.test.builtins.TestBuiltin_parse.testSource#Ignored.Unknown#
+##com.oracle.truffle.r.test.builtins.TestBuiltin_parse.testSource#Output.IgnoreWarningMessage#
 #{ x <- 1; f <- function() { source("test/r/simple/data/tree2/incx.r", local=TRUE) ; x } ; c(f(), x) }
 Error in file(filename, "r", encoding = encoding) :
   cannot open the connection
@@ -43353,7 +43450,7 @@ In addition: Warning message:
 In file(filename, "r", encoding = encoding) :
   cannot open file 'test/r/simple/data/tree2/incx.r': No such file or directory
 
-##com.oracle.truffle.r.test.builtins.TestBuiltin_parse.testSource#Ignored.Unknown#
+##com.oracle.truffle.r.test.builtins.TestBuiltin_parse.testSource#Output.IgnoreWarningMessage#
 #{ x <- 1; f <- function() { source("test/r/simple/data/tree2/setx.r", local=FALSE) ; x } ; c(f(), x) }
 Error in file(filename, "r", encoding = encoding) :
   cannot open the connection
@@ -43361,7 +43458,7 @@ In addition: Warning message:
 In file(filename, "r", encoding = encoding) :
   cannot open file 'test/r/simple/data/tree2/setx.r': No such file or directory
 
-##com.oracle.truffle.r.test.builtins.TestBuiltin_parse.testSource#Ignored.Unknown#
+##com.oracle.truffle.r.test.builtins.TestBuiltin_parse.testSource#Output.IgnoreWarningMessage#
 #{ x <- 1; f <- function() { source("test/r/simple/data/tree2/setx.r", local=TRUE) ; x } ; c(f(), x) }
 Error in file(filename, "r", encoding = encoding) :
   cannot open the connection
@@ -43535,7 +43632,7 @@ character(0)
 [218] " 0.43"   " 0.36"   " 0.36"   " 0.06"   " 1.00_*" " 0.26"   " 0.40"
 [225] " 0.36"   " 0.25"   " 0.57_*" " 0.57_*"
 
-##com.oracle.truffle.r.test.builtins.TestBuiltin_paste0.testpaste011#Ignored.Unknown#
+##com.oracle.truffle.r.test.builtins.TestBuiltin_paste0.testpaste011#Ignored.ImplementationError#
 #argv <- list(list(character(0), character(0), character(0)), NULL); .Internal(paste0(argv[[1]], argv[[2]]))
 character(0)
 
@@ -44771,19 +44868,19 @@ function (call)  .Primitive(".Internal")
 #argv <- list(.Primitive('log'), TRUE); .Internal(print.function(argv[[1]], argv[[2]]))
 function (x, base = exp(1))  .Primitive("log")
 
-##com.oracle.truffle.r.test.builtins.TestBuiltin_prmatrix.testprmatrix1#Ignored.Unknown#
+##com.oracle.truffle.r.test.builtins.TestBuiltin_prmatrix.testprmatrix1#Ignored.Unimplemented#
 #argv <- list(structure(c(1, 6, 9, 6, 4, 1, 1, 2, 1, 0.305397625390859, 0.00170825768891124, 8.51556634078892e-12, 0.64987756971621, 0.0197968749793939, 5.28672163823767e-10, 0.00471555351643001, 2.33367394341443e-13, 1.21630438148624e-64, 1, 1, 1), .Dim = c(3L, 7L), .Dimnames = list(NULL, c('time', 'n.risk', 'n.event', 'survival', 'std.err', 'lower 95% CI', 'upper 95% CI'))), c('', '', ''), c('time', 'n.risk', 'n.event', 'survival', 'std.err', 'lower 95% CI', 'upper 95% CI'), TRUE, FALSE, NULL); .Internal(prmatrix(argv[[1]], argv[[2]], argv[[3]], argv[[4]], argv[[5]], argv[[6]]))
  time n.risk n.event     survival      std.err lower 95% CI upper 95% CI
     1      6       1 3.053976e-01 6.498776e-01 4.715554e-03            1
     6      4       2 1.708258e-03 1.979687e-02 2.333674e-13            1
     9      1       1 8.515566e-12 5.286722e-10 1.216304e-64            1
 
-##com.oracle.truffle.r.test.builtins.TestBuiltin_prmatrix.testprmatrix2#Ignored.Unknown#
+##com.oracle.truffle.r.test.builtins.TestBuiltin_prmatrix.testprmatrix2#Ignored.Unimplemented#
 #argv <- list(structure(FALSE, .Dim = c(1L, 1L)), NULL, NULL, TRUE, FALSE, NULL); .Internal(prmatrix(argv[[1]], argv[[2]], argv[[3]], argv[[4]], argv[[5]], argv[[6]]))
       [,1]
 [1,] FALSE
 
-##com.oracle.truffle.r.test.builtins.TestBuiltin_prmatrix.testprmatrix3#Ignored.Unknown#
+##com.oracle.truffle.r.test.builtins.TestBuiltin_prmatrix.testprmatrix3#Ignored.Unimplemented#
 #argv <- list(structure(c(1, 2, 3, 4, 5, 8, 11, 12, 15, 17, 22, 23, 21, 19, 17, 16, 14, 12, 8, 6, 4, 3, 2, 1, 2, 2, 1, 2, 2, 4, 2, 2, 1, 1, 1, 1, 0.904761904761905, 0.80952380952381, 0.761904761904762, 0.666666666666667, 0.571428571428571, 0.380952380952381, 0.285714285714286, 0.19047619047619, 0.142857142857143, 0.0952380952380952, 0.0476190476190476, 0, 0.0640564484890047, 0.0856890867468988, 0.0929428640903365, 0.102868899974728, 0.107989849431208, 0.105971169574131, 0.0985807941917649, 0.0856890867468988, 0.0763603548321212, 0.0640564484890047, 0.0464714320451682, NaN, 0.670045882235034, 0.568905059924173, 0.519391415328429, 0.425350435565247, 0.337976953859493, 0.183066548820394, 0.116561326436765, 0.0594817013611753, 0.0356573551906667, 0.016259260212247, 0.00332446304253118, NA, 0.975294149038113, 0.923888828559295, 0.893257109782487, 0.82504400879734, 0.749240709943216, 0.577788677745831, 0.481819648009025, 0.37743489058515, 0.321161574680869, 0.261249981968687, 0.197044905698946, NA), .Dim = c(12L, 7L), .Dimnames = list(NULL, c('time', 'n.risk', 'n.event', 'survival', 'std.err', 'lower 95% CI', 'upper 95% CI'))), c('', '', '', '', '', '', '', '', '', '', '', ''), c('time', 'n.risk', 'n.event', 'survival', 'std.err', 'lower 95% CI', 'upper 95% CI'), TRUE, FALSE, NULL); .Internal(prmatrix(argv[[1]], argv[[2]], argv[[3]], argv[[4]], argv[[5]], argv[[6]]))
  time n.risk n.event   survival    std.err lower 95% CI upper 95% CI
     1     21       2 0.90476190 0.06405645  0.670045882    0.9752941
@@ -44799,13 +44896,13 @@ function (x, base = exp(1))  .Primitive("log")
    22      2       1 0.04761905 0.04647143  0.003324463    0.1970449
    23      1       1 0.00000000        NaN           NA           NA
 
-##com.oracle.truffle.r.test.builtins.TestBuiltin_prmatrix.testprmatrix4#Ignored.Unknown#
+##com.oracle.truffle.r.test.builtins.TestBuiltin_prmatrix.testprmatrix4#Ignored.Unimplemented#
 #argv <- list(structure(c(952L, 3622L, 202L, 406L), .Dim = c(2L, 2L), .Dimnames = list(c('subcohort', 'cohort'), c('1', '2'))), c('subcohort', 'cohort'), c('1', '2'), FALSE, FALSE, NULL); .Internal(prmatrix(argv[[1]], argv[[2]], argv[[3]], argv[[4]], argv[[5]], argv[[6]]))
              1   2
 subcohort  952 202
 cohort    3622 406
 
-##com.oracle.truffle.r.test.builtins.TestBuiltin_prmatrix.testprmatrix5#Ignored.Unknown#
+##com.oracle.truffle.r.test.builtins.TestBuiltin_prmatrix.testprmatrix5#Ignored.Unimplemented#
 #argv <- list(structure(c(-1.89646294299258, 1.16675019914746, -8.10054918052941, -5.02922966334328, -0.332284173685658, -0.370285767776029, -0.422218802914528, 0.27824687717147, NA, 0.150098588668891, 3.21153879975245, 0.000303372486059531, 0.00654384959664698, 0.717283460804982, 0.690536969224971, 0.655590578569862, 1.32081223535046, NA, 1.38078223740269, 0.565646487676971, 0.698724423746393, 0.770086232143856, 0.0568682431416458, 0.116409970657657, 0.0584328435912827, 0.0510212342180821, 0, -1.37346997348395, 2.06268442316178, -11.5933390979754, -6.53073571948212, -5.84305326362929, -3.1808767383421, -7.22571035337252, 5.45355049590036, NA, 0.17, 0.039, 0, 6.5e-11, 5.1e-09, 0.0015, 5e-13, 4.9e-08, NA), .Dim = c(9L, 5L), .Dimnames = list(c('toccfarm', 'toccoperatives', 'toccprofessional', 'toccsales', 'tocccraftsmen:education', 'toccfarm:education', 'toccoperatives:education', 'toccprofessional:education', 'toccsales:education'), c('coef', 'exp(coef)', 'se(coef)', 'z', 'p'))), c('toccfarm', 'toccoperatives', 'toccprofessional', 'toccsales', 'tocccraftsmen:education', 'toccfarm:education', 'toccoperatives:education', 'toccprofessional:education', 'toccsales:education'), c('coef', 'exp(coef)', 'se(coef)', 'z', 'p'), TRUE, FALSE, NULL); .Internal(prmatrix(argv[[1]], argv[[2]], argv[[3]], argv[[4]], argv[[5]], argv[[6]]))
                                  coef    exp(coef)   se(coef)          z
 toccfarm                   -1.8964629 0.1500985887 1.38078224  -1.373470
@@ -44828,7 +44925,7 @@ toccoperatives:education   5.0e-13
 toccprofessional:education 4.9e-08
 toccsales:education             NA
 
-##com.oracle.truffle.r.test.builtins.TestBuiltin_prmatrix.testprmatrix6#Ignored.Unknown#
+##com.oracle.truffle.r.test.builtins.TestBuiltin_prmatrix.testprmatrix6#Ignored.Unimplemented#
 #argv <- list(structure(c('splines-package', 'as.polySpline', 'asVector', 'backSpline', 'bs', 'interpSpline', 'ns', 'periodicSpline', 'polySpline', 'predict.bs', 'predict.bSpline', 'predict.nbSpline', 'predict.npolySpline', 'predict.ns', 'predict.pbSpline', 'predict.ppolySpline', 'spline.des', 'splineDesign', 'splineKnots', 'splineOrder', 'splines', 'xyVector', 'splines-package', 'polySpline', 'asVector', 'backSpline', 'bs', 'interpSpline', 'ns', 'periodicSpline', 'polySpline', 'predict.bs', 'predict.bSpline', 'predict.bSpline', 'predict.bSpline', 'predict.bs', 'predict.bSpline', 'predict.bSpline', 'splineDesign', 'splineDesign', 'splineKnots', 'splineOrder', 'splines-package', 'xyVector'), .Dim = c(22L, 2L)), NULL, c('Column 1', 'Column 2', 'Column 3'), FALSE, TRUE, NULL); .Internal(prmatrix(argv[[1]], argv[[2]], argv[[3]], argv[[4]], argv[[5]], argv[[6]]))
                  Column 1        Column 2
  [1,]     splines-package splines-package
@@ -44854,14 +44951,14 @@ toccsales:education             NA
 [21,]             splines splines-package
 [22,]            xyVector        xyVector
 
-##com.oracle.truffle.r.test.builtins.TestBuiltin_prmatrix.testprmatrix7#Ignored.Unknown#
+##com.oracle.truffle.r.test.builtins.TestBuiltin_prmatrix.testprmatrix7#Ignored.Unimplemented#
 #argv <- list(structure(c(' 0.228763', '-0.000666', '', '0.08909', '0.00426', '', '0.08899', '0.00426', '', '6.59', '0.02', '6.02', '1.00', '1.00', '3.06', '0.01', '0.88', '0.12'), .Dim = c(3L, 6L), .Dimnames = list(c('male', 'tt(agechf), linear', 'tt(agechf), nonlin'), c('coef', 'se(coef)', 'se2', 'Chisq', 'DF', 'p'))), c('male', 'tt(agechf), linear', 'tt(agechf), nonlin'), c('coef', 'se(coef)', 'se2', 'Chisq', 'DF', 'p'), FALSE, FALSE, NULL); .Internal(prmatrix(argv[[1]], argv[[2]], argv[[3]], argv[[4]], argv[[5]], argv[[6]]))
                    coef      se(coef) se2     Chisq DF   p
 male                0.228763 0.08909  0.08899 6.59  1.00 0.01
 tt(agechf), linear -0.000666 0.00426  0.00426 0.02  1.00 0.88
 tt(agechf), nonlin                            6.02  3.06 0.12
 
-##com.oracle.truffle.r.test.builtins.TestBuiltin_prmatrix.testprmatrix8#Ignored.Unknown#
+##com.oracle.truffle.r.test.builtins.TestBuiltin_prmatrix.testprmatrix8#Ignored.Unimplemented#
 #argv <- list(structure(c(' 0.00561', '-1.65487', '', '0.012', '0.483', '', '0.00872', '0.38527', '', ' 0.22', '11.74', '20.33', ' 1.0', ' 1.0', '13.9', '0.64000', '0.00061', '0.12000'), .Dim = c(3L, 6L), .Dimnames = list(c('age', 'sex', 'frailty(id, dist = \'t\', c'), c('coef', 'se(coef)', 'se2', 'Chisq', 'DF', 'p'))), c('age', 'sex', 'frailty(id, dist = \'t\', c'), c('coef', 'se(coef)', 'se2', 'Chisq', 'DF', 'p'), FALSE, FALSE, NULL); .Internal(prmatrix(argv[[1]], argv[[2]], argv[[3]], argv[[4]], argv[[5]], argv[[6]]))
                           coef     se(coef) se2     Chisq DF   p
 age                        0.00561 0.012    0.00872  0.22  1.0 0.64000
@@ -44956,7 +45053,7 @@ Error in prod(list()) : invalid 'type' (list) of argument
 #argv <- list(9L);prod(argv[[1]]);
 [1] 9
 
-##com.oracle.truffle.r.test.builtins.TestBuiltin_prod.testprod10#Ignored.Unknown#
+##com.oracle.truffle.r.test.builtins.TestBuiltin_prod.testprod10#
 #prod( );
 [1] 1
 
@@ -45013,7 +45110,7 @@ Evaluation  city centre   suburbs
 #argv <- structure(list(x = structure(integer(0), .Dim = 0L, .Dimnames = structure(list(NULL),     .Names = ''), class = 'table')), .Names = 'x');do.call('provideDimnames', argv)
 < table of extent 0 >
 
-##com.oracle.truffle.r.test.builtins.TestBuiltin_psigamma.testpsigamma1#Ignored.Unknown#
+##com.oracle.truffle.r.test.builtins.TestBuiltin_psigamma.testpsigamma1#Ignored.Unimplemented#
 #argv <- list(c(-100, -3, -2, -1, 0, 1, 2, -99.9, -7.7, -3, -2.9, -2.8, -2.7, -2.6, -2.5, -2.4, -2.3, -2.2, -2.1, -2, -1.9, -1.8, -1.7, -1.6, -1.5, -1.4, -1.3, -1.2, -1.1, -1, -0.9, -0.8, -0.7, -0.6, -0.5, -0.4, -0.3, -0.2, -0.0999999999999996, 0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1, 1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 1.7, 1.8, 1.9, 2, 2.1, 2.2, 2.3, 2.4, 2.5, 2.6, 2.7, 2.8, 2.9, 3, 5.1, 77), 1); .Internal(psigamma(argv[[1]], argv[[2]]))
  [1]          Inf          Inf          Inf          Inf          Inf
  [6]   1.64493407   0.64493407 103.34587903  14.95761284          Inf
@@ -45031,15 +45128,15 @@ Evaluation  city centre   suburbs
 [66]   0.46780689   0.44721207   0.42833216   0.41096375   0.39493407
 [71]   0.21654883   0.01307171
 
-##com.oracle.truffle.r.test.builtins.TestBuiltin_psigamma.testpsigamma2#Ignored.Unknown#
+##com.oracle.truffle.r.test.builtins.TestBuiltin_psigamma.testpsigamma2#Ignored.Unimplemented#
 #argv <- list(c(1e+30, 1e+45, 1e+60, 1e+75, 1e+90), 2); .Internal(psigamma(argv[[1]], argv[[2]]))
 [1]  -1e-60  -1e-90 -1e-120 -1e-150 -1e-180
 
-##com.oracle.truffle.r.test.builtins.TestBuiltin_psigamma.testpsigamma3#Ignored.Unknown#
+##com.oracle.truffle.r.test.builtins.TestBuiltin_psigamma.testpsigamma3#Ignored.Unimplemented#
 #argv <- list(c(1e+20, 1e+30, 1e+40, 1e+50, 1e+60), 5); .Internal(psigamma(argv[[1]], argv[[2]]))
 [1]  2.4e-99 2.4e-149 2.4e-199 2.4e-249 2.4e-299
 
-##com.oracle.truffle.r.test.builtins.TestBuiltin_psigamma.testpsigamma4#Ignored.Unknown#
+##com.oracle.truffle.r.test.builtins.TestBuiltin_psigamma.testpsigamma4#Ignored.Unimplemented#
 #argv <- list(c(-100, -3, -2, -1, 0, 1, 2, -99.9, -7.7, -3, -2.9, -2.8, -2.7, -2.6, -2.5, -2.4, -2.3, -2.2, -2.1, -2, -1.9, -1.8, -1.7, -1.6, -1.5, -1.4, -1.3, -1.2, -1.1, -1, -0.9, -0.8, -0.7, -0.6, -0.5, -0.4, -0.3, -0.2, -0.0999999999999996, 0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1, 1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 1.7, 1.8, 1.9, 2, 2.1, 2.2, 2.3, 2.4, 2.5, 2.6, 2.7, 2.8, 2.9, 3, 5.1, 77), 0); .Internal(psigamma(argv[[1]], argv[[2]]))
  [1]          NaN          NaN          NaN          NaN          NaN
  [6]  -0.57721566   0.42278434  -5.05966165  -0.17774844          NaN
@@ -45072,157 +45169,63 @@ NULL
 Error: only atomic vectors can be sorted
 
 ##com.oracle.truffle.r.test.builtins.TestBuiltin_psort.testpsort1#
-#argv <- list(7:8, 1:2); .Internal(psort(argv[[1]], argv[[2]]))
+#argv <- list(7:8, 1:2); .Internal(psort(argv[[1]], argv[[2]]))[argv[[2]]]
 [1] 7 8
 
 ##com.oracle.truffle.r.test.builtins.TestBuiltin_psort.testpsort10#
-#argv <- list(c(-1.05715266611575, -0.873306430909872, -0.548705796690786, -0.288240908441576, -0.0649703574297026, 0.224762433374997, 0.3255545927283, 0.4813346401898, 0.530823516045489, 1.2699009772491), c(1L, 3L, 4L, 5L, 6L, 7L, 8L, 10L)); .Internal(psort(argv[[1]], argv[[2]]))
- [1] -1.05715267 -0.87330643 -0.54870580 -0.28824091 -0.06497036  0.22476243
- [7]  0.32555459  0.48133464  0.53082352  1.26990098
+#argv <- list(c(-1.05715266611575, -0.873306430909872, -0.548705796690786, -0.288240908441576, -0.0649703574297026, 0.224762433374997, 0.3255545927283, 0.4813346401898, 0.530823516045489, 1.2699009772491), c(1L, 3L, 4L, 5L, 6L, 7L, 8L, 10L)); .Internal(psort(argv[[1]], argv[[2]]))[argv[[2]]]
+[1] -1.05715267 -0.54870580 -0.28824091 -0.06497036  0.22476243  0.32555459
+[7]  0.48133464  1.26990098
 
 ##com.oracle.truffle.r.test.builtins.TestBuiltin_psort.testpsort11#
-#argv <- list(c(-1.05715266611575, -0.873306430909873, -0.548705796690787, -0.288240908441577, -0.0649703574297025, 0.224762433374994, 0.3255545927283, 0.481334640189799, 0.530823516045488, 1.2699009772491), c(1L, 3L, 4L, 5L, 6L, 7L, 8L, 10L)); .Internal(psort(argv[[1]], argv[[2]]))
- [1] -1.05715267 -0.87330643 -0.54870580 -0.28824091 -0.06497036  0.22476243
- [7]  0.32555459  0.48133464  0.53082352  1.26990098
+#argv <- list(c(-1.05715266611575, -0.873306430909873, -0.548705796690787, -0.288240908441577, -0.0649703574297025, 0.224762433374994, 0.3255545927283, 0.481334640189799, 0.530823516045488, 1.2699009772491), c(1L, 3L, 4L, 5L, 6L, 7L, 8L, 10L)); .Internal(psort(argv[[1]], argv[[2]]))[argv[[2]]]
+[1] -1.05715267 -0.54870580 -0.28824091 -0.06497036  0.22476243  0.32555459
+[7]  0.48133464  1.26990098
 
 ##com.oracle.truffle.r.test.builtins.TestBuiltin_psort.testpsort12#
-#argv <- list(c(-Inf, -Inf, -Inf, -Inf, -Inf, -Inf, -Inf, -Inf, -Inf, -Inf, -Inf, -Inf, -Inf, -Inf, -Inf, -Inf, -Inf, -Inf, -Inf, -Inf, -Inf, -Inf, -4.17369555651928e+302, -2.72671165723473e+289, -2.21240023126594e+276, -2.24780296109123e+263, -2.88514442494869e+250, -4.72336572671053e+237, -9.96611412047338e+224, -2.74100158340596e+212, -9.94902790498679e+199, -4.83110332887119e+187, -3.18582547396557e+175, -2.90089508183654e+163, -3.71562599613334e+151, -6.83535188151783e+139, -1.84898368353639e+128, -7.55412056676629e+116, -4.80716085942859e+105, -4.9383857330861e+94, -8.54170618068872e+83, -2.61556777274611e+73, -1.5069799345972e+63, -1.76183826972506e+53, -4.60125024792566e+43, -3.04622557026196e+34, -6.08456909882282e+25, -473300382255715392, -21650982809.6744, -12820.0784261145, -1.12778377684043), c(1L, 13L, 14L, 26L, 38L, 39L, 51L)); .Internal(psort(argv[[1]], argv[[2]]))
- [1]           -Inf           -Inf           -Inf           -Inf           -Inf
- [6]           -Inf           -Inf           -Inf           -Inf           -Inf
-[11]           -Inf           -Inf           -Inf           -Inf           -Inf
-[16]           -Inf           -Inf           -Inf           -Inf           -Inf
-[21]           -Inf           -Inf -4.173696e+302 -2.726712e+289 -2.212400e+276
-[26] -2.247803e+263 -2.885144e+250 -4.723366e+237 -9.966114e+224 -2.741002e+212
-[31] -9.949028e+199 -4.831103e+187 -3.185825e+175 -2.900895e+163 -3.715626e+151
-[36] -6.835352e+139 -1.848984e+128 -7.554121e+116 -4.807161e+105  -4.938386e+94
-[41]  -8.541706e+83  -2.615568e+73  -1.506980e+63  -1.761838e+53  -4.601250e+43
-[46]  -3.046226e+34  -6.084569e+25  -4.733004e+17  -2.165098e+10  -1.282008e+04
-[51]  -1.127784e+00
-
-##com.oracle.truffle.r.test.builtins.TestBuiltin_psort.testpsort13#Ignored.Unknown#
-#argv <- list(c(0.5, 0.6, 1.2, 1.3, 1.6, 5.8, 6.2, 3.7, 5.1, 5, 4, 4, 5.3, 1.4, 6.6, 3.8, 2.6, 3.2, 2.9, 6.8, 10.6, 7.6, 9.3, 8, 10, 10, 8, 10.5, 10.5, 9.7, 9.7, 9.4, 8.9, 8.8, 8, 10.1, 8.5, 9.1, 7.5, 7.4, 7.5, 7.6, 8.4, 8.5, 10.8, 11.1, 12, 12, 18, 17.7, 16, 15, 14, 12.9, 12.7, 12.6, 17.9, 12.1, 17.7, 16.1, 13, 17.3, 17, 16.7, 13, 15.7, 19, 16, 17, 12, 12.2, 12.8, 14.6, 14.9, 17.6, 21, 20.5, 19.6, 20.2, 20.8, 21.1, 21.9, 20.5, 19.2, 22.5, 22, 23.2, 23, 22, 22, 23.4, 23.4, 23.5, 29, 26, 25, 28.5, 25.4, 29, 24.2, 23.9, 24.6, 25.7, 25.3, 28.6, 26.5, 29, 37.8, 30.9, 42, 31, 38.5, 41.4, 43.6, 46.7, 37.4, 45, 35.9, 36.1, 32, 44.4, 40.3, 30, 31, 32, 32.7, 36, 43.5, 33.1, 32.9, 36.3, 38.9, 30, 46.1, 45, 47.1, 47.7, 187, 147, 130, 49.2, 62, 141, 122, 105, 62, 64, 123, 112, 105, 63.6, 60, 49, 66, 87, 56.9, 60.7, 61.4, 156, 62, 64, 82, 88, 48.3, 109, 107, 85, 91, 148, 145, 53.1, 50, 92.2, 224, 293, 300, 211, 200, 197, 203, 359, 370), c(1L, 46L, 47L, 91L, 92L, 136L, 137L, 182L)); .Internal(psort(argv[[1]], argv[[2]]))
-  [1]   0.5   0.6   1.2   1.3   1.6   5.8   6.2   3.7   5.1   5.0   4.0   4.0
- [13]   5.3   1.4   6.6   3.8   2.6   3.2   2.9   6.8  10.6   7.6   9.3   8.0
- [25]  10.0  10.0   8.0  10.5  10.5   9.7   9.7   9.4   8.9   8.8   8.0  10.1
- [37]   8.5   9.1   7.5   7.4   7.5   7.6   8.4   8.5  10.8  11.1  12.0  12.0
- [49]  18.0  17.7  16.0  15.0  14.0  12.9  12.7  12.6  17.9  12.1  17.7  16.1
- [61]  13.0  17.3  17.0  16.7  13.0  15.7  19.0  16.0  17.0  12.0  12.2  12.8
- [73]  14.6  14.9  17.6  21.0  20.5  19.6  20.2  20.8  21.1  21.9  20.5  19.2
- [85]  22.5  22.0  23.2  23.0  22.0  22.0  23.4  23.4  23.5  29.0  26.0  25.0
- [97]  28.5  25.4  29.0  24.2  23.9  24.6  25.7  25.3  28.6  26.5  29.0  37.8
-[109]  30.9  42.0  31.0  38.5  41.4  43.6  46.7  37.4  45.0  35.9  36.1  32.0
-[121]  44.4  40.3  30.0  31.0  32.0  32.7  36.0  43.5  33.1  32.9  36.3  38.9
-[133]  30.0  46.1  45.0  47.1  47.7 187.0 147.0 130.0  49.2  62.0 141.0 122.0
-[145] 105.0  62.0  64.0 123.0 112.0 105.0  63.6  60.0  49.0  66.0  87.0  56.9
-[157]  60.7  61.4 156.0  62.0  64.0  82.0  88.0  48.3 109.0 107.0  85.0  91.0
-[169] 148.0 145.0  53.1  50.0  92.2 224.0 293.0 300.0 211.0 200.0 197.0 203.0
-[181] 359.0 370.0
+#argv <- list(c(-Inf, -Inf, -Inf, -Inf, -Inf, -Inf, -Inf, -Inf, -Inf, -Inf, -Inf, -Inf, -Inf, -Inf, -Inf, -Inf, -Inf, -Inf, -Inf, -Inf, -Inf, -Inf, -4.17369555651928e+302, -2.72671165723473e+289, -2.21240023126594e+276, -2.24780296109123e+263, -2.88514442494869e+250, -4.72336572671053e+237, -9.96611412047338e+224, -2.74100158340596e+212, -9.94902790498679e+199, -4.83110332887119e+187, -3.18582547396557e+175, -2.90089508183654e+163, -3.71562599613334e+151, -6.83535188151783e+139, -1.84898368353639e+128, -7.55412056676629e+116, -4.80716085942859e+105, -4.9383857330861e+94, -8.54170618068872e+83, -2.61556777274611e+73, -1.5069799345972e+63, -1.76183826972506e+53, -4.60125024792566e+43, -3.04622557026196e+34, -6.08456909882282e+25, -473300382255715392, -21650982809.6744, -12820.0784261145, -1.12778377684043), c(1L, 13L, 14L, 26L, 38L, 39L, 51L)); .Internal(psort(argv[[1]], argv[[2]]))[argv[[2]]]
+[1]           -Inf           -Inf           -Inf -2.247803e+263 -7.554121e+116
+[6] -4.807161e+105  -1.127784e+00
+
+##com.oracle.truffle.r.test.builtins.TestBuiltin_psort.testpsort13#
+#argv <- list(c(0.5, 0.6, 1.2, 1.3, 1.6, 5.8, 6.2, 3.7, 5.1, 5, 4, 4, 5.3, 1.4, 6.6, 3.8, 2.6, 3.2, 2.9, 6.8, 10.6, 7.6, 9.3, 8, 10, 10, 8, 10.5, 10.5, 9.7, 9.7, 9.4, 8.9, 8.8, 8, 10.1, 8.5, 9.1, 7.5, 7.4, 7.5, 7.6, 8.4, 8.5, 10.8, 11.1, 12, 12, 18, 17.7, 16, 15, 14, 12.9, 12.7, 12.6, 17.9, 12.1, 17.7, 16.1, 13, 17.3, 17, 16.7, 13, 15.7, 19, 16, 17, 12, 12.2, 12.8, 14.6, 14.9, 17.6, 21, 20.5, 19.6, 20.2, 20.8, 21.1, 21.9, 20.5, 19.2, 22.5, 22, 23.2, 23, 22, 22, 23.4, 23.4, 23.5, 29, 26, 25, 28.5, 25.4, 29, 24.2, 23.9, 24.6, 25.7, 25.3, 28.6, 26.5, 29, 37.8, 30.9, 42, 31, 38.5, 41.4, 43.6, 46.7, 37.4, 45, 35.9, 36.1, 32, 44.4, 40.3, 30, 31, 32, 32.7, 36, 43.5, 33.1, 32.9, 36.3, 38.9, 30, 46.1, 45, 47.1, 47.7, 187, 147, 130, 49.2, 62, 141, 122, 105, 62, 64, 123, 112, 105, 63.6, 60, 49, 66, 87, 56.9, 60.7, 61.4, 156, 62, 64, 82, 88, 48.3, 109, 107, 85, 91, 148, 145, 53.1, 50, 92.2, 224, 293, 300, 211, 200, 197, 203, 359, 370), c(1L, 46L, 47L, 91L, 92L, 136L, 137L, 182L)); .Internal(psort(argv[[1]], argv[[2]]))[argv[[2]]]
+[1]   0.5  11.1  12.0  23.4  23.4  47.1  47.7 370.0
 
 ##com.oracle.truffle.r.test.builtins.TestBuiltin_psort.testpsort14#
-#argv <- list(c(-1.36919169254062, -0.667819876370237, -0.253162069270378, -0.0834190388782434, -0.00786394222146348, 0.0246733498130512, 0.0730305465518564, 0.0881443844426084, 0.170711734013213, 0.552921941721332), c(1L, 3L, 4L, 5L, 6L, 7L, 8L, 10L)); .Internal(psort(argv[[1]], argv[[2]]))
- [1] -1.369191693 -0.667819876 -0.253162069 -0.083419039 -0.007863942
- [6]  0.024673350  0.073030547  0.088144384  0.170711734  0.552921942
-
-##com.oracle.truffle.r.test.builtins.TestBuiltin_psort.testpsort2#Ignored.Unknown#
-#argv <- list(c(0.0499999999999972, 0.300000000000004, 1.1, 0.0500000000000007, 0, 0.25, 1, 2.15, 1.95, 2.09999999999999, 1.95, 2.04999999999999, 2.59999999999999, 2.59999999999999, 2.6, 4.25, 3.45, 2.65000000000001, 3.49999999999999, 3.75000000000001, 2.75, 3.05, 2.8, 4.45, 3.35, 7.7, 14.2), 14L); .Internal(psort(argv[[1]], argv[[2]]))
- [1]  0.05  0.30  1.10  0.05  0.00  0.25  1.00  2.15  1.95  2.10  1.95  2.05
-[13]  2.60  2.60  2.60  4.25  3.45  2.65  3.50  3.75  2.75  3.05  2.80  4.45
-[25]  3.35  7.70 14.20
-
-##com.oracle.truffle.r.test.builtins.TestBuiltin_psort.testpsort3#Ignored.Unknown#
-#argv <- list(c(4.23272528138341e-16, 5.68989300120393e-16, 0.0499999999999982, 3.05311331771918e-16, 0.049999999999999, 0.0499999999999994, 3.05311331771918e-16, 0.0499999999999994, 0.100000000000001, 0.0999999999999994, 0.0999999999999994, 0.0500000000000006, 0.15, 0.15, 0.100000000000001, 0.0499999999999997, 0.150000000000001, 0.0999999999999995, 0.0999999999999993, 0.100000000000001, 0.0999999999999994, 0.100000000000001, 0.250000000000001, 0.250000000000001, 0.299999999999999, 0.199999999999999, 0.200000000000001, 0.3, 0.25, 0.199999999999999, 0.199999999999999, 0.150000000000001, 0.200000000000001, 0.199999999999998, 0.249999999999999, 0.199999999999999, 0.3, 0.350000000000001, 0.35, 0.300000000000001, 0.3, 0.350000000000002, 0.35, 0.35, 0.300000000000001, 0.350000000000001, 0.399999999999999, 0.4, 0.349999999999999, 0.350000000000001, 0.400000000000001, 0.300000000000001, 0.400000000000001, 0.449999999999999, 0.45, 0.450000000000001, 0.45, 0.450000000000001, 1.05, 0.7, 0.6, 1, 0.500000000000001, 0.5, 0.699999999999999, 1.05, 0.850000000000001, 0.650000000000001, 0.750000000000001, 0.75, 1, 0.699999999999999, 0.749999999999999, 1.05, 0.549999999999999, 0.500000000000001, 0.7, 0.8, 0.500000000000001, 0.650000000000001, 0.700000000000001, 0.599999999999999, 0.9, 0.75, 0.949999999999999, 0.899999999999999, 0.550000000000001, 1, 1.05, 1.05, 0.600000000000001, 0.6, 1.05, 0.749999999999999, 0.949999999999999, 1.1, 2.15, 1.45, 1.3, 2.1, 4.85, 3.7, 2.05, 1.2, 1.4, 1.3, 1.2, 1.85), 54:55); .Internal(psort(argv[[1]], argv[[2]]))
-  [1] 4.232725e-16 5.689893e-16 5.000000e-02 3.053113e-16 5.000000e-02
-  [6] 5.000000e-02 3.053113e-16 5.000000e-02 1.000000e-01 1.000000e-01
- [11] 1.000000e-01 5.000000e-02 1.500000e-01 1.500000e-01 1.000000e-01
- [16] 5.000000e-02 1.500000e-01 1.000000e-01 1.000000e-01 1.000000e-01
- [21] 1.000000e-01 1.000000e-01 2.500000e-01 2.500000e-01 3.000000e-01
- [26] 2.000000e-01 2.000000e-01 3.000000e-01 2.500000e-01 2.000000e-01
- [31] 2.000000e-01 1.500000e-01 2.000000e-01 2.000000e-01 2.500000e-01
- [36] 2.000000e-01 3.000000e-01 3.500000e-01 3.500000e-01 3.000000e-01
- [41] 3.000000e-01 3.500000e-01 3.500000e-01 3.500000e-01 3.000000e-01
- [46] 3.500000e-01 4.000000e-01 4.000000e-01 3.500000e-01 3.500000e-01
- [51] 4.000000e-01 3.000000e-01 4.000000e-01 4.500000e-01 4.500000e-01
- [56] 4.500000e-01 4.500000e-01 4.500000e-01 1.050000e+00 7.000000e-01
- [61] 6.000000e-01 1.000000e+00 5.000000e-01 5.000000e-01 7.000000e-01
- [66] 1.050000e+00 8.500000e-01 6.500000e-01 7.500000e-01 7.500000e-01
- [71] 1.000000e+00 7.000000e-01 7.500000e-01 1.050000e+00 5.500000e-01
- [76] 5.000000e-01 7.000000e-01 8.000000e-01 5.000000e-01 6.500000e-01
- [81] 7.000000e-01 6.000000e-01 9.000000e-01 7.500000e-01 9.500000e-01
- [86] 9.000000e-01 5.500000e-01 1.000000e+00 1.050000e+00 1.050000e+00
- [91] 6.000000e-01 6.000000e-01 1.050000e+00 7.500000e-01 9.500000e-01
- [96] 1.100000e+00 2.150000e+00 1.450000e+00 1.300000e+00 2.100000e+00
-[101] 4.850000e+00 3.700000e+00 2.050000e+00 1.200000e+00 1.400000e+00
-[106] 1.300000e+00 1.200000e+00 1.850000e+00
-
-##com.oracle.truffle.r.test.builtins.TestBuiltin_psort.testpsort4#Ignored.Unknown#
-#argv <- list(c(0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.0499999999999998, 0.05, 0.05, 0.05, 0.0499999999999999, 0.05, 0.0499999999999999, 0.05, 0.0499999999999999, 0.0499999999999999, 0.05, 0.0499999999999999, 0.0499999999999999, 0.05, 0.05, 0.0499999999999998, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.0499999999999999, 0.05, 0.05, 0.05, 0.0499999999999999, 0.0499999999999999, 0.0499999999999999, 0.05, 0.05, 0.0499999999999999, 0.05, 0.0499999999999999, 0.05, 0.05, 0.05, 0.0499999999999998, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.0555556, 0.05555554, 0.05555556, 0.05555556, 0.05555554, 0.0555556, 0.0555555, 0.0555556, 0.0555555, 0.0555556, 0.0555555, 0.0555556, 0.0555556, 0.0555555, 0.0555555999999999, 0.0555555000000001, 0.0555555999999999, 0.0555555000000001, 0.0555555999999999, 0.0555555, 0.0555556, 0.0555559999999999, 0.055555, 0.0555559999999999, 0.0526315, 0.05263162, 0.05263158, 0.05263158, 0.05263162, 0.0526315, 0.0526316, 0.0526316, 0.0526316, 0.0526316, 0.0526315, 0.0526316, 0.0526316, 0.0526316, 0.0526316, 0.0526315000000001, 0.0526316, 0.0526315999999999, 0.0526316, 0.0526315000000001, 0.0526316, 0.0526316, 0.052632, 0.0526310000000001, 0.0526319999999998, 0.08333333, 0.08333333, 0.08333334, 0.08333333, 0.08333333, 0.08333337, 0.0833333, 0.0833333, 0.0833333, 0.0833333, 0.0833333, 0.0833333, 0.0833333000000001, 0.0833333000000001, 0.0833333999999999, 0.0833333000000001, 0.0833333000000001, 0.0833333999999999, 0.0833333000000001, 0.0833333000000001, 0.0833333999999999, 0.0833333000000001, 0.0833333000000001, 0.0833330000000001, 0.0833330000000001), 76:77); .Internal(psort(argv[[1]], argv[[2]]))
-  [1] 0.05000000 0.05000000 0.05000000 0.05000000 0.05000000 0.05000000
-  [7] 0.05000000 0.05000000 0.05000000 0.05000000 0.05000000 0.05000000
- [13] 0.05000000 0.05000000 0.05000000 0.05000000 0.05000000 0.05000000
- [19] 0.05000000 0.05000000 0.05000000 0.05000000 0.05000000 0.05000000
- [25] 0.05000000 0.05000000 0.05000000 0.05000000 0.05000000 0.05000000
- [31] 0.05000000 0.05000000 0.05000000 0.05000000 0.05000000 0.05000000
- [37] 0.05000000 0.05000000 0.05000000 0.05000000 0.05000000 0.05000000
- [43] 0.05000000 0.05000000 0.05000000 0.05000000 0.05000000 0.05000000
- [49] 0.05000000 0.05000000 0.05000000 0.05000000 0.05000000 0.05000000
- [55] 0.05000000 0.05000000 0.05000000 0.05000000 0.05000000 0.05000000
- [61] 0.05000000 0.05000000 0.05000000 0.05000000 0.05000000 0.05000000
- [67] 0.05000000 0.05000000 0.05000000 0.05000000 0.05000000 0.05000000
- [73] 0.05000000 0.05000000 0.05000000 0.05000000 0.05000000 0.05000000
- [79] 0.05555560 0.05555554 0.05555556 0.05555556 0.05555554 0.05555560
- [85] 0.05555550 0.05555560 0.05555550 0.05555560 0.05555550 0.05555560
- [91] 0.05555560 0.05555550 0.05555560 0.05555550 0.05555560 0.05555550
- [97] 0.05555560 0.05555550 0.05555560 0.05555600 0.05555500 0.05555600
-[103] 0.05263150 0.05263162 0.05263158 0.05263158 0.05263162 0.05263150
-[109] 0.05263160 0.05263160 0.05263160 0.05263160 0.05263150 0.05263160
-[115] 0.05263160 0.05263160 0.05263160 0.05263150 0.05263160 0.05263160
-[121] 0.05263160 0.05263150 0.05263160 0.05263160 0.05263200 0.05263100
-[127] 0.05263200 0.08333333 0.08333333 0.08333334 0.08333333 0.08333333
-[133] 0.08333337 0.08333330 0.08333330 0.08333330 0.08333330 0.08333330
-[139] 0.08333330 0.08333330 0.08333330 0.08333340 0.08333330 0.08333330
-[145] 0.08333340 0.08333330 0.08333330 0.08333340 0.08333330 0.08333330
-[151] 0.08333300 0.08333300
-
-##com.oracle.truffle.r.test.builtins.TestBuiltin_psort.testpsort5#Ignored.Unknown#
-#argv <- list(c(-3.35281542033775, -3.57533122743112, -3.23282496934355, -3.3903449466851, -3.39757437954971, -3.36251831175626, -3.22932468384763, -3.22295685034786, -3.21402130636699, -3.11638102275539, -3.09226646401048, -3.21757818016328, -3.0862187014408, -3.08484132891786), 7:8); .Internal(psort(argv[[1]], argv[[2]]))
- [1] -3.352815 -3.575331 -3.232825 -3.390345 -3.397574 -3.362518 -3.229325
- [8] -3.222957 -3.214021 -3.116381 -3.092266 -3.217578 -3.086219 -3.084841
-
-##com.oracle.truffle.r.test.builtins.TestBuiltin_psort.testpsort6#Ignored.Unknown#
-#argv <- list(c(FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, TRUE, FALSE, FALSE, FALSE, TRUE, TRUE, FALSE, FALSE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, TRUE, TRUE, FALSE, TRUE, TRUE, FALSE, FALSE, FALSE, FALSE, TRUE, TRUE, FALSE, FALSE, TRUE, TRUE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, TRUE, FALSE, FALSE, FALSE, FALSE, TRUE, TRUE, FALSE, FALSE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, TRUE, TRUE, TRUE), c(66L, 195L)); .Internal(psort(argv[[1]], argv[[2]]))
-  [1] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
- [13] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
- [25] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
- [37] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
- [49] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
- [61] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
- [73] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
- [85] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
- [97] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
-[109] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
-[121] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
-[133] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
-[145] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
-[157] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
-[169] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
-[181] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
-[193] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
-[205] FALSE  TRUE FALSE FALSE FALSE  TRUE  TRUE FALSE FALSE  TRUE FALSE FALSE
-[217] FALSE FALSE FALSE FALSE  TRUE  TRUE FALSE  TRUE  TRUE FALSE FALSE FALSE
-[229] FALSE  TRUE  TRUE FALSE FALSE  TRUE  TRUE  TRUE FALSE FALSE FALSE FALSE
-[241] FALSE  TRUE FALSE FALSE FALSE FALSE  TRUE  TRUE FALSE FALSE  TRUE FALSE
-[253] FALSE FALSE FALSE FALSE FALSE  TRUE  TRUE  TRUE
+#argv <- list(c(-1.36919169254062, -0.667819876370237, -0.253162069270378, -0.0834190388782434, -0.00786394222146348, 0.0246733498130512, 0.0730305465518564, 0.0881443844426084, 0.170711734013213, 0.552921941721332), c(1L, 3L, 4L, 5L, 6L, 7L, 8L, 10L)); .Internal(psort(argv[[1]], argv[[2]]))[argv[[2]]]
+[1] -1.369191693 -0.253162069 -0.083419039 -0.007863942  0.024673350
+[6]  0.073030547  0.088144384  0.552921942
+
+##com.oracle.truffle.r.test.builtins.TestBuiltin_psort.testpsort2#
+#argv <- list(c(0.0499999999999972, 0.300000000000004, 1.1, 0.0500000000000007, 0, 0.25, 1, 2.15, 1.95, 2.09999999999999, 1.95, 2.04999999999999, 2.59999999999999, 2.59999999999999, 2.6, 4.25, 3.45, 2.65000000000001, 3.49999999999999, 3.75000000000001, 2.75, 3.05, 2.8, 4.45, 3.35, 7.7, 14.2), 14L); .Internal(psort(argv[[1]], argv[[2]]))[argv[[2]]]
+[1] 2.6
+
+##com.oracle.truffle.r.test.builtins.TestBuiltin_psort.testpsort3#
+#argv <- list(c(4.23272528138341e-16, 5.68989300120393e-16, 0.0499999999999982, 3.05311331771918e-16, 0.049999999999999, 0.0499999999999994, 3.05311331771918e-16, 0.0499999999999994, 0.100000000000001, 0.0999999999999994, 0.0999999999999994, 0.0500000000000006, 0.15, 0.15, 0.100000000000001, 0.0499999999999997, 0.150000000000001, 0.0999999999999995, 0.0999999999999993, 0.100000000000001, 0.0999999999999994, 0.100000000000001, 0.250000000000001, 0.250000000000001, 0.299999999999999, 0.199999999999999, 0.200000000000001, 0.3, 0.25, 0.199999999999999, 0.199999999999999, 0.150000000000001, 0.200000000000001, 0.199999999999998, 0.249999999999999, 0.199999999999999, 0.3, 0.350000000000001, 0.35, 0.300000000000001, 0.3, 0.350000000000002, 0.35, 0.35, 0.300000000000001, 0.350000000000001, 0.399999999999999, 0.4, 0.349999999999999, 0.350000000000001, 0.400000000000001, 0.300000000000001, 0.400000000000001, 0.449999999999999, 0.45, 0.450000000000001, 0.45, 0.450000000000001, 1.05, 0.7, 0.6, 1, 0.500000000000001, 0.5, 0.699999999999999, 1.05, 0.850000000000001, 0.650000000000001, 0.750000000000001, 0.75, 1, 0.699999999999999, 0.749999999999999, 1.05, 0.549999999999999, 0.500000000000001, 0.7, 0.8, 0.500000000000001, 0.650000000000001, 0.700000000000001, 0.599999999999999, 0.9, 0.75, 0.949999999999999, 0.899999999999999, 0.550000000000001, 1, 1.05, 1.05, 0.600000000000001, 0.6, 1.05, 0.749999999999999, 0.949999999999999, 1.1, 2.15, 1.45, 1.3, 2.1, 4.85, 3.7, 2.05, 1.2, 1.4, 1.3, 1.2, 1.85), 54:55); .Internal(psort(argv[[1]], argv[[2]]))[argv[[2]]]
+[1] 0.45 0.45
+
+##com.oracle.truffle.r.test.builtins.TestBuiltin_psort.testpsort4#
+#argv <- list(c(0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.0499999999999998, 0.05, 0.05, 0.05, 0.0499999999999999, 0.05, 0.0499999999999999, 0.05, 0.0499999999999999, 0.0499999999999999, 0.05, 0.0499999999999999, 0.0499999999999999, 0.05, 0.05, 0.0499999999999998, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.0499999999999999, 0.05, 0.05, 0.05, 0.0499999999999999, 0.0499999999999999, 0.0499999999999999, 0.05, 0.05, 0.0499999999999999, 0.05, 0.0499999999999999, 0.05, 0.05, 0.05, 0.0499999999999998, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.0555556, 0.05555554, 0.05555556, 0.05555556, 0.05555554, 0.0555556, 0.0555555, 0.0555556, 0.0555555, 0.0555556, 0.0555555, 0.0555556, 0.0555556, 0.0555555, 0.0555555999999999, 0.0555555000000001, 0.0555555999999999, 0.0555555000000001, 0.0555555999999999, 0.0555555, 0.0555556, 0.0555559999999999, 0.055555, 0.0555559999999999, 0.0526315, 0.05263162, 0.05263158, 0.05263158, 0.05263162, 0.0526315, 0.0526316, 0.0526316, 0.0526316, 0.0526316, 0.0526315, 0.0526316, 0.0526316, 0.0526316, 0.0526316, 0.0526315000000001, 0.0526316, 0.0526315999999999, 0.0526316, 0.0526315000000001, 0.0526316, 0.0526316, 0.052632, 0.0526310000000001, 0.0526319999999998, 0.08333333, 0.08333333, 0.08333334, 0.08333333, 0.08333333, 0.08333337, 0.0833333, 0.0833333, 0.0833333, 0.0833333, 0.0833333, 0.0833333, 0.0833333000000001, 0.0833333000000001, 0.0833333999999999, 0.0833333000000001, 0.0833333000000001, 0.0833333999999999, 0.0833333000000001, 0.0833333000000001, 0.0833333999999999, 0.0833333000000001, 0.0833333000000001, 0.0833330000000001, 0.0833330000000001), 76:77); .Internal(psort(argv[[1]], argv[[2]]))[argv[[2]]]
+[1] 0.05 0.05
+
+##com.oracle.truffle.r.test.builtins.TestBuiltin_psort.testpsort5#
+#argv <- list(c(-3.35281542033775, -3.57533122743112, -3.23282496934355, -3.3903449466851, -3.39757437954971, -3.36251831175626, -3.22932468384763, -3.22295685034786, -3.21402130636699, -3.11638102275539, -3.09226646401048, -3.21757818016328, -3.0862187014408, -3.08484132891786), 7:8); .Internal(psort(argv[[1]], argv[[2]]))[argv[[2]]]
+[1] -3.229325 -3.222957
+
+##com.oracle.truffle.r.test.builtins.TestBuiltin_psort.testpsort6#
+#argv <- list(c(FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, TRUE, FALSE, FALSE, FALSE, TRUE, TRUE, FALSE, FALSE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, TRUE, TRUE, FALSE, TRUE, TRUE, FALSE, FALSE, FALSE, FALSE, TRUE, TRUE, FALSE, FALSE, TRUE, TRUE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, TRUE, FALSE, FALSE, FALSE, FALSE, TRUE, TRUE, FALSE, FALSE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, TRUE, TRUE, TRUE), c(66L, 195L)); .Internal(psort(argv[[1]], argv[[2]]))[argv[[2]]]
+[1] FALSE FALSE
 
 ##com.oracle.truffle.r.test.builtins.TestBuiltin_psort.testpsort7#
-#argv <- list(c(1, 2, 2, 3, 3, 4, 4, 5), 1:8); .Internal(psort(argv[[1]], argv[[2]]))
+#argv <- list(c(1, 2, 2, 3, 3, 4, 4, 5), 1:8); .Internal(psort(argv[[1]], argv[[2]]))[argv[[2]]]
 [1] 1 2 2 3 3 4 4 5
 
 ##com.oracle.truffle.r.test.builtins.TestBuiltin_psort.testpsort8#
-#argv <- list(27:28, 1:2); .Internal(psort(argv[[1]], argv[[2]]))
+#argv <- list(27:28, 1:2); .Internal(psort(argv[[1]], argv[[2]]))[argv[[2]]]
 [1] 27 28
 
 ##com.oracle.truffle.r.test.builtins.TestBuiltin_psort.testpsort9#
-#argv <- list(c(-Inf, -Inf, Inf, Inf), 1:4); .Internal(psort(argv[[1]], argv[[2]]))
+#argv <- list(c(-Inf, -Inf, Inf, Inf), 1:4); .Internal(psort(argv[[1]], argv[[2]]))[argv[[2]]]
 [1] -Inf -Inf  Inf  Inf
 
 ##com.oracle.truffle.r.test.builtins.TestBuiltin_pushBackLength.testpushBackLength1#
@@ -45237,7 +45240,7 @@ Error: only atomic vectors can be sorted
 #argv <- list(list(list(), NULL), 1, list()); .Internal(putconst(argv[[1]], argv[[2]], argv[[3]]))
 [1] 0
 
-##com.oracle.truffle.r.test.builtins.TestBuiltin_qr.testQr#Ignored.Unknown#
+##com.oracle.truffle.r.test.builtins.TestBuiltin_qr.testQr#Ignored.ImplementationError#
 # { x <- qr(cbind(1:10,2:11), LAPACK=TRUE) ; round( qr.coef(x, 1:10), digits=5 ) }
 [1] 1 0
 
@@ -45277,7 +45280,7 @@ attr(,"class")
 #{ round( qr(matrix(1:6,nrow=2), LAPACK=FALSE)$qraux, digits=5 ) }
 [1] 1.44721 0.89443 1.78885
 
-##com.oracle.truffle.r.test.builtins.TestBuiltin_qr.testQr#Ignored.Unknown#
+##com.oracle.truffle.r.test.builtins.TestBuiltin_qr.testQr#Ignored.ImplementationError#
 #{ round( qr(matrix(1:6,nrow=2), LAPACK=TRUE)$qr, digits=5) }
          [,1]     [,2]     [,3]
 [1,] -7.81025 -2.17663 -4.99344
@@ -45301,7 +45304,7 @@ attr(,"class")
 #{ x <- qr(c(3,1,2), LAPACK=FALSE) ; round( qr.coef(x, c(1,3,2)), digits=5 ) }
 [1] 0.71429
 
-##com.oracle.truffle.r.test.builtins.TestBuiltin_qr.testQr#Ignored.Unknown#
+##com.oracle.truffle.r.test.builtins.TestBuiltin_qr.testQr#Ignored.ImplementationError#
 #{ x <- qr(c(3,1,2), LAPACK=TRUE) ; round( qr.coef(x, c(1,3,2)), digits=5 ) }
 [1] 0.71429
 
@@ -45317,11 +45320,11 @@ Error in qr.coef(x, 1:2) : right-hand side should have 10 not 2 rows
 #{ x <- qr(t(cbind(1:10,2:11)), LAPACK=FALSE) ; qr.coef(x, 1:2) }
  [1]  1  0 NA NA NA NA NA NA NA NA
 
-##com.oracle.truffle.r.test.builtins.TestBuiltin_qr.testQr#Ignored.Unknown#
+##com.oracle.truffle.r.test.builtins.TestBuiltin_qr.testQr#Ignored.ImplementationError#
 #{ x <- qr(t(cbind(1:10,2:11)), LAPACK=TRUE) ; qr.coef(x, 1:2) }
  [1]  1 NA NA NA NA NA NA NA NA  0
 
-##com.oracle.truffle.r.test.builtins.TestBuiltin_qr.testqr1#Ignored.Unknown#
+##com.oracle.truffle.r.test.builtins.TestBuiltin_qr.testqr1#Ignored.Unimplemented#
 #argv <- list(structure(list(qr = structure(c(-2.99896066496855+0i, 0.0864255261791181+0i, -0.13772470327145+0i, -0.49098351645158+0i, 0.249389337649224+0i, 1.17331892183982+0i, -1.54960102684918+0i, -0.573648421141553+0i, 0.376760682628698+0i, 0.412090084647403+0i, 0.603959683330493+0i, -0.0216928335770876+0i, -1.2469936242596+0i, 0.224366164923213+0i, 0.341798188737913+0i, 1.04294423444024+0i, 0.270564951504877+0i, -0.315381666175534+0i, 0.787566751532822+0i, 0.229154517629245+0i, -2.25109940279642+0i, 0.530750192641659+0i, -0.0977755443891602+0i, 0.6614171819615+0i, -0.0856949989622426+0i), .Dim = c(5L, 5L), .Dimnames = list(c('1', '2', '3', '4', '5'), c('c', 'a', 'd', 'b', 'e'))), rank = 5L, qraux = c(1.50410169966891+0i, 1.21888836143069+0i, 1.71355205288103+0i, 1.90021623833265+0i, 0+0i), pivot = c(3L, 1L, 4L, 2L, 5L)), .Names = c('qr', 'rank', 'qraux', 'pivot'), class = 'qr'), structure(1:5, .Dim = c(5L, 1L))); .Internal(qr_coef_cmplx(argv[[1]], argv[[2]]))
              [,1]
 [1,] -7.390881+0i
@@ -45330,7 +45333,7 @@ Error in qr.coef(x, 1:2) : right-hand side should have 10 not 2 rows
 [4,] -7.034826+0i
 [5,]  9.866288+0i
 
-##com.oracle.truffle.r.test.builtins.TestBuiltin_qr.testqr2#Ignored.Unknown#
+##com.oracle.truffle.r.test.builtins.TestBuiltin_qr.testqr2#Ignored.Unimplemented#
 #argv <- list(structure(list(qr = structure(c(-2.79657712283236, 0.0791500442336917, 0.123755637403102, 0.089607462331441, 0.175462651449591, 0.0695565565709435, 0.129006956605315, 0.206583197284758, 0.0227114114395308, 0.235970456809858, 0.0914077988155571, 0.226297607634113, 0.0934594628258066, 0.0899795540097744, 0.12841549388179, 0.240520185730483, 0.233009950431413, 0.105133974880502, 0.2095512974465, 0.258964862210899, -2.07025325833148, -1.85301582498188, 0.139094572499947, 0.342556683478902, -0.102024562608463, 0.360699451256097, 0.315324737973941, 0.0873752715112826, 0.2823485467872, -0.239863332146733, -0.00369181667619238, -0.172536775168022, 0.229736826805589, 0.0852501914884386, 0.230310089401495, -0.0314168397035678, 0.0849707357385819, 0.365804687920591, -0.0536336269418447, 0.0845797169641211, -2.03746531175251, -0.489461063366758, -1.40644653583967, -0.00873041883181913, 0.0708276075409328, 0.153420226417602, -0.370069917481653, -0.112816417432651, 0.240125650075004, 0.138426195987046, 0.128552669396225, 0.217325815608225, -0.0223361051263949, -0.0526633296159945, -0.296094517820351, -0.327346352864029, -0.249917267465335, -0.0672115093838751, 0.0654426021596298, -0.240131194574062, -2.06587739268838, -0.339470951293598, -0.49608488205654, 1.14277258876071, 0.201196269542128, 0.0348254315928563, 0.145314253550005, 0.131380830586619, -0.387015716398766, 0.283849139598354, -0.0827284627849877, 0.132994279479374, -0.113393410148955, 0.0518736136418599, -0.422882666833989, -0.141635274746576, -0.181291088091223, 0.196913259592121, -0.0460107390352923, 0.15597817986415), .Dim = c(20L, 4L)), rank = 4L, qraux = c(1.32642615746455, 1.10105053486773, 1.21513331337829, 1.21397558590595), pivot = c(4L, 1L, 3L, 2L)), .Names = c('qr', 'rank', 'qraux', 'pivot'), useLAPACK = TRUE, class = 'qr'), structure(c(0.434659484773874, 0.712514678714797, 0.399994368897751, 0.325352151878178, 0.757087148027495, 0.202692255144939, 0.711121222469956, 0.121691921027377, 0.245488513959572, 0.14330437942408, 0.239629415096715, 0.0589343772735447, 0.642288258532062, 0.876269212691113, 0.778914677444845, 0.79730882588774, 0.455274453619495, 0.410084082046524, 0.810870242770761, 0.604933290276676, 0.654723928077146, 0.353197271935642, 0.270260145887733, 0.99268406117335, 0.633493264438584, 0.213208135217428, 0.129372348077595, 0.478118034312502, 0.924074469832703, 0.59876096714288, 0.976170694921166, 0.731792511884123, 0.356726912083104, 0.431473690550774, 0.148211560677737, 0.0130775754805654, 0.715566066093743, 0.103184235747904, 0.446284348610789, 0.640101045137271, 1.00298403897323, 0.272296643047594, 0.67556063386146, 0.151371688628569, 0.340151631063782, 0.431371175684035, 0.0309030100004748, 0.457057784032077, 0.880189609760418, 0.426803491590545, 0.543544612638652, 0.655281779309735, 0.526419038954191, 0.231530745956115, 0.877417415869422, 0.686553374305367, 0.847202921006829, 0.115471200458705, 0.751486539305188, 0.432544381567277, 0.682788078673184, 0.601541217649356, 0.238868677755818, 0.258165926672518, 0.729309623362496, 0.452570831403136, 0.175126768415794, 0.746698269620538, 0.104987640399486, 0.864544949028641, 0.614644971676171, 0.557159538846463, 0.328777319053188, 0.453131445450708, 0.500440972624347, 0.180866361130029, 0.529630602803081, 0.0752757457084954, 0.277755932649598, 0.212699519237503, 0.0904899418726564, 0.0829104807786643, 0.140637623313814, 0.186663761837408, 0.0510252129565924, 0.195122500695288, 0.189470667047426, 0.14745507678017, 0.160610442608595, 0.0259712139610201, 0.0604781195987016, 0.0592939835228026, 0.157146221613511, 0.0842694476991892, 0.187063216743991, 0.126278517944738, 0.175293296081945, 0.202698964001611, 0.104955473728478, 0.1719400214497, 0.293730155099183, 0.19126010988839, 0.886450943304226, 0.503339485730976, 0.877057543024421, 0.189193622441962, 0.758103052387014, 0.724498892668635, 0.943724818294868, 0.547646587016061, 0.711743867723271, 0.388905099825934, 0.100873126182705, 0.927302088588476, 0.283232500310987, 0.59057315881364, 0.110360604943708, 0.840507032116875, 0.317963684443384, 0.782851336989552, 0.267508207354695, 0.218645284883678, 0.516796836396679, 0.268950592027977, 0.181168327340856, 0.518576137488708, 0.562782935798168, 0.129156854469329, 0.256367604015395, 0.717935275984928, 0.961409936426207, 0.100140846567228, 0.763222689507529, 0.947966354666278, 0.818634688388556, 0.308292330708355, 0.649579460499808, 0.953355451114476, 0.953732650028542, 0.339979203417897), .Dim = c(20L, 7L)), TRUE); .Internal(qr_qy_real(argv[[1]], argv[[2]], argv[[3]]))
               [,1]         [,2]          [,3]         [,4]          [,5]
  [1,] -1.972274623 -1.991283109 -2.2538538845 -1.879764918 -4.966857e-01
@@ -45399,7 +45402,7 @@ Error: only atomic vectors can be sorted
 #argv <- list(c(-Inf, -Inf, -Inf, -Inf, -Inf, 0, 1, 2, 3, 4, Inf, Inf, Inf, Inf), FALSE); .Internal(qsort(argv[[1]], argv[[2]]))
  [1] -Inf -Inf -Inf -Inf -Inf    0    1    2    3    4  Inf  Inf  Inf  Inf
 
-##com.oracle.truffle.r.test.builtins.TestBuiltin_qsort.testqsort12#Ignored.Unknown#
+##com.oracle.truffle.r.test.builtins.TestBuiltin_qsort.testqsort12#Ignored.ReferenceError#
 #argv <- list(FALSE, FALSE); .Internal(qsort(argv[[1]], argv[[2]]))
 [1] FALSE
 
@@ -45422,7 +45425,7 @@ Error: only atomic vectors can be sorted
 #argv <- list(numeric(0), FALSE); .Internal(qsort(argv[[1]], argv[[2]]))
 numeric(0)
 
-##com.oracle.truffle.r.test.builtins.TestBuiltin_qsort.testqsort4#Ignored.Unknown#
+##com.oracle.truffle.r.test.builtins.TestBuiltin_qsort.testqsort4#Ignored.ReferenceError#
 #argv <- list(c(1.64819754690779, 0.502718643389684, 0.845467412356198, 0.467247395729231, -0.402055063696625, 0.923526703253396, -0.0080556407117813, 1.03378423761425, -0.799126981726699, 1.00423302095334, -0.311973356192691, -0.88614958536232, -1.9222548962705, 1.61970074406333, 0.519269904664384, -0.055849931834021, 0.696417610118512), TRUE); .Internal(qsort(argv[[1]], argv[[2]]))
 $x
  [1] -1.922254896 -0.886149585 -0.799126982 -0.402055064 -0.311973356
@@ -45434,7 +45437,7 @@ $ix
  [1] 13 12  9  5 11 16  7  4  2 15 17  3  6 10  8 14  1
 
 
-##com.oracle.truffle.r.test.builtins.TestBuiltin_qsort.testqsort5#Ignored.Unknown#
+##com.oracle.truffle.r.test.builtins.TestBuiltin_qsort.testqsort5#Ignored.ReferenceError#
 #argv <- list(c(1L, 7L, 11L, 12L, 13L, 19L, 25L, 3L, 8L), TRUE); .Internal(qsort(argv[[1]], argv[[2]]))
 $x
 [1]  1  3  7  8 11 12 13 19 25
@@ -47024,18 +47027,22 @@ structure(integer(0), .Dim = c(3L, 0L), .Dimnames = list(NULL,
 [1,]    38     38
 [2,]     2      2
 
-##com.oracle.truffle.r.test.builtins.TestBuiltin_rcond.testrcond1#Ignored.Unknown#
+##com.oracle.truffle.r.test.builtins.TestBuiltin_rcond.testrcond1#Ignored.Unimplemented#
 #argv <- structure(list(x = structure(c(FALSE, TRUE, FALSE, TRUE,     TRUE, FALSE, TRUE, TRUE, TRUE, FALSE, TRUE, FALSE, TRUE,     TRUE, FALSE, TRUE, FALSE, FALSE, FALSE, TRUE, TRUE, TRUE,     TRUE, TRUE, TRUE), .Dim = c(5L, 5L))), .Names = 'x');do.call('rcond', argv)
 [1] 0
 
-##com.oracle.truffle.r.test.builtins.TestBuiltin_rcond.testrcond2#Ignored.Unknown#
+##com.oracle.truffle.r.test.builtins.TestBuiltin_rcond.testrcond2#Ignored.Unimplemented#
 #argv <- structure(list(x = structure(c(0.483017750550061 + (0+0i),     0.399143285583705 + (0+0i), 0.0162145779468119 + (0+0i),     0.125083255348727 + (0+0i), 0.0706489166477695 + (0+0i),     0.504917626501992 + (0+0i), 0.327679358422756 + (0+0i), 0.411779605317861 +         (0+0i), 0.202413034392521 + (0+0i), 0.307096319855191 +         (0+0i), 0.642031987197697 + (0+0i), 0.276873307069764 +         (0+0i), 0.103556007146835 + (0+0i), 0.256002754438668 +         (0+0i), 0.179779380792752 + (0+0i), 0.247455857461318 +         (0+0i), 0.215011228807271 + (0+0i), 0.493673762306571 +         (0+0i), 0.653446026844904 + (0+0i), 0.573559894575737 +         (0+0i), 0.863887825980783 + (0+0i), 0.637789903208613 +         (0+0i), 0.0137805955018848 + (0+0i), 0.529164811130613 +         (0+0i), 0.271472703316249 + (0+0i)), .Dim = c(5L, 5L))),     .Names = 'x');do.call('rcond', argv)
 [1] 5.327333e-18
 
-##com.oracle.truffle.r.test.builtins.TestBuiltin_readChar.testreadChar1#Ignored.Unknown#
+##com.oracle.truffle.r.test.builtins.TestBuiltin_readChar.testreadChar1#Ignored.ImplementationError#
 #argv <- structure(list(con = as.raw(c(65, 66, 67, 68, 69, 70,     71, 72, 73, 74)), nchars = c(3, 3, 0, 3, 3, 3)), .Names = c('con',     'nchars'));do.call('readChar', argv)
 [1] "ABC" "DEF" ""    "GHI" "J"
 
+##com.oracle.truffle.r.test.builtins.TestBuiltin_readChar.testreadChar1#Ignored.ImplementationError#
+#readChar(as.raw(c(65,66,67)), nchars=3);
+[1] "ABC"
+
 ##com.oracle.truffle.r.test.builtins.TestBuiltin_regexec.testregexec1#Ignored.Unknown#
 #argv <- list('^(([^:]+)://)?([^:/]+)(:([0-9]+))?(/.*)', 'http://stat.umn.edu:80/xyz', FALSE, FALSE, FALSE); .Internal(regexec(argv[[1]], argv[[2]], argv[[3]], argv[[4]], argv[[5]]))
 [[1]]
@@ -47046,7 +47053,7 @@ attr(,"useBytes")
 [1] TRUE
 
 
-##com.oracle.truffle.r.test.builtins.TestBuiltin_regexpr.testRegExpr#Ignored.Unknown#
+##com.oracle.truffle.r.test.builtins.TestBuiltin_regexpr.testRegExpr#Ignored.ImplementationError#
 #regexpr("(a)[^a]\\1", c("andrea apart", "amadeus", NA))
 [1]  6  1 NA
 attr(,"match.length")
@@ -47210,11 +47217,11 @@ attr(,"match.length")
 attr(,"useBytes")
 [1] TRUE
 
-##com.oracle.truffle.r.test.builtins.TestBuiltin_regexpr.testregexpr12#Ignored.Unknown#
+##com.oracle.truffle.r.test.builtins.TestBuiltin_regexpr.testregexpr12#Output.IgnoreErrorMessage#
 #argv <- structure(list(pattern = '\d', text = c('1', 'B', '3')),     .Names = c('pattern', 'text'));do.call('regexpr', argv)
 Error: '\d' is an unrecognized escape in character string starting "'\d"
 
-##com.oracle.truffle.r.test.builtins.TestBuiltin_regexpr.testregexpr13#Ignored.Unknown#
+##com.oracle.truffle.r.test.builtins.TestBuiltin_regexpr.testregexpr13#Ignored.ImplementationError#
 #argv <- structure(list(pattern = '[a-z]', text = NA), .Names = c('pattern',     'text'));do.call('regexpr', argv)
 [1] NA
 attr(,"match.length")
@@ -47222,7 +47229,15 @@ attr(,"match.length")
 attr(,"useBytes")
 [1] TRUE
 
-##com.oracle.truffle.r.test.builtins.TestBuiltin_regexpr.testregexpr2#Ignored.Unknown#
+##com.oracle.truffle.r.test.builtins.TestBuiltin_regexpr.testregexpr13#Ignored.ImplementationError#
+#regexpr('a', NA)
+[1] NA
+attr(,"match.length")
+[1] NA
+attr(,"useBytes")
+[1] TRUE
+
+##com.oracle.truffle.r.test.builtins.TestBuiltin_regexpr.testregexpr2#Ignored.ImplementationError#
 #argv <- list('éè', '«Latin-1 accented chars»: éè øØ å<Å æ<Æ é éè', FALSE, FALSE, TRUE, TRUE); .Internal(regexpr(argv[[1]], argv[[2]], argv[[3]], argv[[4]], argv[[5]], argv[[6]]))
 [1] 29
 attr(,"match.length")
@@ -47795,7 +47810,7 @@ logical(0)
 [1] "                  " "                "
 
 
-##com.oracle.truffle.r.test.builtins.TestBuiltin_rep.testrep9#Ignored.Unknown#
+##com.oracle.truffle.r.test.builtins.TestBuiltin_rep.testrep9#Ignored.ReferenceError#
 #argv <- list(structure(1:4, .Label = c('A', 'B', 'C', 'D'), class = 'factor', .Names = c('a', 'b', 'c', 'd')), 10); .Internal(rep_len(argv[[1]], argv[[2]]))
  [1] A B C D A B C D A B
 Levels: A B C D
@@ -48327,7 +48342,7 @@ Error in rmultinom(1, 1, NULL) : no positive probabilities
 #{ round(1.1234+1i, 3.1+1i); }
 [1] 1.123+1i
 
-##com.oracle.truffle.r.test.builtins.TestBuiltin_round.testRound#Ignored.Unknown#
+##com.oracle.truffle.r.test.builtins.TestBuiltin_round.testRound#Ignored.ImplementationError#
 #{ round(1.123456,digit=2.8) }
 [1] 1.123
 
@@ -63717,7 +63732,7 @@ Error in sin() : 0 arguments passed to 'sin' which requires 1
  [97]   0.9675728-0.3686073i   1.8890839-0.0612472i  -0.2785120-0.6319604i
 [100]  -1.5303405-0.7681922i
 
-##com.oracle.truffle.r.test.builtins.TestBuiltin_sin.testsin7#Ignored.Unknown#
+##com.oracle.truffle.r.test.builtins.TestBuiltin_sin.testsin7#Output.MissingWarning#
 #argv <- list(Inf);sin(argv[[1]]);
 [1] NaN
 Warning message:
@@ -64309,7 +64324,7 @@ $`42`
 [1] 2
 
 
-##com.oracle.truffle.r.test.builtins.TestBuiltin_split.testSplitWithNames#Ignored.Unimplemented#
+##com.oracle.truffle.r.test.builtins.TestBuiltin_split.testSplitWithNames#
 #{ split(list(q=1, w=2L, e='x', r=T), as.factor(c('a', 'b', 'a')); }
 Error: unexpected ';' in "{ split(list(q=1, w=2L, e='x', r=T), as.factor(c('a', 'b', 'a'));"
 
@@ -66426,7 +66441,7 @@ Error: invalid 'pattern' argument
 #{ sub(pattern = 'a*', replacement = 'x', x = 'ÄaÄ', perl = TRUE) }
 [1] "xÄaÄ"
 
-##com.oracle.truffle.r.test.builtins.TestBuiltin_sub.testSub#Ignored.Unknown#
+##com.oracle.truffle.r.test.builtins.TestBuiltin_sub.testSub#Ignored.ImplementationError#
 #{ sub(pattern = 'Ä*', replacement = 'x', x = 'aÄÄÄÄÄb', perl = TRUE) }
 [1] "xaÄÄÄÄÄb"
 
@@ -66476,7 +66491,7 @@ Suggests
 [577] "4" "4" "4" "2" "4" "2" "3" "4" "1" "3" "1" NA  "4" "1" "2" "2" "1" "4"
 [595] "3" "3" "4" "1" "1" "3"
 
-##com.oracle.truffle.r.test.builtins.TestBuiltin_sub.testsub12#Ignored.Unknown#
+##com.oracle.truffle.r.test.builtins.TestBuiltin_sub.testsub12#Output.IgnoreWhitespace#
 #argv <- list('.* : ', '', structure('Error in rnorm(2, c(1, NA)) : (converted from warning) NAs produced\n', class = 'try-error', condition = structure(list(message = '(converted from warning) NAs produced', call = quote(rnorm(2, c(1, NA)))), .Names = c('message', 'call'), class = c('simpleError', 'error', 'condition'))), FALSE, FALSE, FALSE, FALSE); .Internal(sub(argv[[1]], argv[[2]], argv[[3]], argv[[4]], argv[[5]], argv[[6]], argv[[7]]))
 [1] "(converted from warning) NAs produced\n"
 attr(,"class")
@@ -66484,7 +66499,7 @@ attr(,"class")
 attr(,"condition")
 <simpleError in rnorm(2, c(1, NA)): (converted from warning) NAs produced>
 
-##com.oracle.truffle.r.test.builtins.TestBuiltin_sub.testsub13#Ignored.Unknown#
+##com.oracle.truffle.r.test.builtins.TestBuiltin_sub.testsub13#Output.IgnoreWhitespace#
 #argv <- list('.* : ', '', structure('Error in rexp(2, numeric()) : (converted from warning) NAs produced\n', class = 'try-error', condition = structure(list(message = '(converted from warning) NAs produced', call = quote(rexp(2, numeric()))), .Names = c('message', 'call'), class = c('simpleError', 'error', 'condition'))), FALSE, FALSE, FALSE, FALSE); .Internal(sub(argv[[1]], argv[[2]], argv[[3]], argv[[4]], argv[[5]], argv[[6]], argv[[7]]))
 [1] "(converted from warning) NAs produced\n"
 attr(,"class")
@@ -66492,7 +66507,7 @@ attr(,"class")
 attr(,"condition")
 <simpleError in rexp(2, numeric()): (converted from warning) NAs produced>
 
-##com.oracle.truffle.r.test.builtins.TestBuiltin_sub.testsub14#Ignored.Unknown#
+##com.oracle.truffle.r.test.builtins.TestBuiltin_sub.testsub14#Output.IgnoreWhitespace#
 #argv <- list('.* : ', '', structure('Error in rnorm(2, numeric()) : (converted from warning) NAs produced\n', class = 'try-error', condition = structure(list(message = '(converted from warning) NAs produced', call = quote(rnorm(2, numeric()))), .Names = c('message', 'call'), class = c('simpleError', 'error', 'condition'))), FALSE, FALSE, FALSE, FALSE); .Internal(sub(argv[[1]], argv[[2]], argv[[3]], argv[[4]], argv[[5]], argv[[6]], argv[[7]]))
 [1] "(converted from warning) NAs produced\n"
 attr(,"class")
@@ -66500,7 +66515,7 @@ attr(,"class")
 attr(,"condition")
 <simpleError in rnorm(2, numeric()): (converted from warning) NAs produced>
 
-##com.oracle.truffle.r.test.builtins.TestBuiltin_sub.testsub15#Ignored.Unknown#
+##com.oracle.truffle.r.test.builtins.TestBuiltin_sub.testsub15#Output.IgnoreWhitespace#
 #argv <- list('.* : ', '', structure('Error in rnorm(1, sd = Inf) : (converted from warning) NAs produced\n', class = 'try-error', condition = structure(list(message = '(converted from warning) NAs produced', call = quote(rnorm(1, sd = Inf))), .Names = c('message', 'call'), class = c('simpleError', 'error', 'condition'))), FALSE, FALSE, FALSE, FALSE); .Internal(sub(argv[[1]], argv[[2]], argv[[3]], argv[[4]], argv[[5]], argv[[6]], argv[[7]]))
 [1] "(converted from warning) NAs produced\n"
 attr(,"class")
@@ -67789,7 +67804,7 @@ character(0)
 #argv <- list(c('        ', '        '), 1L, c(4L, -16L)); .Internal(substr(argv[[1]], argv[[2]], argv[[3]]))
 [1] "    " ""
 
-##com.oracle.truffle.r.test.builtins.TestBuiltin_substr.testsubstr3#Ignored.Unknown#
+##com.oracle.truffle.r.test.builtins.TestBuiltin_substr.testsubstr3#Ignored.ImplementationError#
 #argv <- list(structure(c('as.formula', 'coef', 'makepredictcall', 'na.fail', 'predict'), .Names = c('as.formula', 'coef', 'makepredictcall', 'na.fail', 'predict')), 1L, 6L); .Internal(substr(argv[[1]], argv[[2]], argv[[3]]))
      as.formula            coef makepredictcall         na.fail         predict
        "as.for"          "coef"        "makepr"        "na.fai"        "predic"
@@ -67798,7 +67813,7 @@ character(0)
 #argv <- list(character(0), 7L, 1000000L); .Internal(substr(argv[[1]], argv[[2]], argv[[3]]))
 character(0)
 
-##com.oracle.truffle.r.test.builtins.TestBuiltin_substr.testsubstr5#Ignored.Unknown#
+##com.oracle.truffle.r.test.builtins.TestBuiltin_substr.testsubstr5#Ignored.ReferenceError#
 #argv <- list(structure('to be supported).', Rd_tag = 'TEXT'), 17L, 17L); .Internal(substr(argv[[1]], argv[[2]], argv[[3]]))
 [1] "."
 attr(,"Rd_tag")
@@ -67812,7 +67827,7 @@ character(0)
 #argv <- list('', 1L, 2L); .Internal(substr(argv[[1]], argv[[2]], argv[[3]]))
 [1] ""
 
-##com.oracle.truffle.r.test.builtins.TestBuiltin_substr.testsubstr8#Ignored.Unknown#
+##com.oracle.truffle.r.test.builtins.TestBuiltin_substr.testsubstr8#Ignored.ImplementationError#
 #argv <- list(structure(c('model.frame', 'predict', 'residuals'), .Names = c('model.frame', 'predict', 'residuals')), 1L, 6L); .Internal(substr(argv[[1]], argv[[2]], argv[[3]]))
 model.frame     predict   residuals
    "model."    "predic"    "residu"
@@ -68274,7 +68289,7 @@ Error in sum(as.raw(42), as.raw(7)) : invalid 'type' (raw) of argument
 #argv <- list(1073741824L, 1073741824L, 0);sum(argv[[1]],argv[[2]],argv[[3]]);
 [1] 2147483648
 
-##com.oracle.truffle.r.test.builtins.TestBuiltin_sum.testsum16#Ignored.Unknown#
+##com.oracle.truffle.r.test.builtins.TestBuiltin_sum.testsum16#Output.IgnoreCase#
 #argv <- list(1073741824L, 1073741824L);sum(argv[[1]],argv[[2]]);
 [1] NA
 Warning message:
@@ -69094,7 +69109,7 @@ Error in tan() : 0 arguments passed to 'tan' which requires 1
 [91] 1.28636938 1.31326370 1.34087383 1.36923448 1.39838259 1.42835749
 [97] 1.45920113 1.49095827 1.52367674
 
-##com.oracle.truffle.r.test.builtins.TestBuiltin_tan.testtan3#Ignored.Unknown#
+##com.oracle.truffle.r.test.builtins.TestBuiltin_tan.testtan3#Output.IgnoreWarningMessage#
 #argv <- list(Inf);tan(argv[[1]]);
 [1] NaN
 Warning message:
@@ -69124,7 +69139,7 @@ In tan(argv[[1]]) : NaNs produced
  [96] -7.265425e-01 -5.497547e-01 -3.959280e-01 -2.567564e-01 -1.263294e-01
 [101]  3.307784e-15
 
-##com.oracle.truffle.r.test.builtins.TestBuiltin_tan.testtan5#Ignored.Unknown#
+##com.oracle.truffle.r.test.builtins.TestBuiltin_tan.testtan5#Ignored.ImplementationError#
 #argv <- list(1+1000i);tan(argv[[1]]);
 [1] 0+1i
 
@@ -70092,14 +70107,14 @@ tracemem[0x7ff2cd448c90 -> 0x7ff2cd448ae0]:
 tracemem[0x7f818486bc90 -> 0x7f818486bae0]:
 tracemem[0x7f818486bc90 -> 0x7f818486ba50]:
 
-##com.oracle.truffle.r.test.builtins.TestBuiltin_trigamma.testtrigamma1#Ignored.Unknown#
+##com.oracle.truffle.r.test.builtins.TestBuiltin_trigamma.testtrigamma1#Ignored.Unimplemented#
 #argv <- list(structure(c(9.16602362697115, 1.16602362697115, 3.16602362697115, 6.16602362697115, 6.16602362697115, 2.16602362697115, 8.16602362697115, 1.16602362697115, 7.16602362697115, 19.1660236269712, 2.16602362697115), .Names = c('1', '2', '3', '4', '5', '6', '7', '8', '9', '10', '11')));trigamma(argv[[1]]);
          1          2          3          4          5          6          7
 0.11526572 1.31953765 0.37088896 0.17603737 0.17603737 0.58403321 0.13026184
          8          9         10         11
 1.31953765 0.14973532 0.05356047 0.58403321
 
-##com.oracle.truffle.r.test.builtins.TestBuiltin_trigamma.testtrigamma2#Ignored.Unknown#
+##com.oracle.truffle.r.test.builtins.TestBuiltin_trigamma.testtrigamma2#Ignored.Unimplemented#
 #argv <- list(structure(c(3.23454845691922, 12.2345484569192, 15.2345484569192, 6.23454845691922, 6.23454845691922, 14.2345484569192, 21.2345484569192, 23.2345484569192, 7.23454845691922, 7.23454845691922, 16.2345484569192, 8.23454845691922, 15.2345484569192, 7.23454845691922, 33.2345484569192, 54.2345484569192, 58.2345484569192, 15.2345484569192, 17.2345484569192, 17.2345484569192, 18.2345484569192, 41.2345484569192, 44.2345484569192, 47.2345484569192, 9.23454845691922, 24.2345484569192, 24.2345484569192, 29.2345484569192, 35.2345484569192, 37.2345484569192, 39.2345484569192, 4.23454845691922, 6.23454845691922, 12.2345484569192, 25.2345484569192, 46.2345484569192, 6.23454845691922, 7.23454845691922, 7.23454845691922, 10.2345484569192, 14.2345484569192, 24.2345484569192, 26.2345484569192, 33.2345484569192, 54.2345484569192, 55.2345484569192, 6.23454845691922, 6.23454845691922, 12.2345484569192, 18.2345484569192, 20.2345484569192, 9.23454845691922, 14.2345484569192, 15.2345484569192, 21.2345484569192, 48.2345484569192, 49.2345484569192, 61.2345484569192, 82.2345484569192, 3.23454845691922, 1.23454845691922, 3.23454845691922, 4.23454845691922, 6.23454845691922, 11.2345484569192, 15.2345484569192, 22.2345484569192, 37.2345484569192, 41.2345484569192, 7.23454845691922, 18.2345484569192, 68.2345484569192, 1.23454845691922, 1.23454845691922, 3.23454845691922, 8.23454845691922, 12.2345484569192, 13.2345484569192, 1.23454845691922, 1.23454845691922, 6.23454845691922, 6.23454845691922, 6.23454845691922, 12.2345484569192, 18.2345484569192, 4.23454845691922, 5.23454845691922, 23.2345484569192, 31.2345484569192, 37.2345484569192, 9.23454845691922, 1.23454845691922, 2.23454845691922, 6.23454845691922, 8.23454845691922, 17.2345484569192, 28.2345484569192, 1.23454845691922, 31.2345484569192, 11.2345484569192, 15.2345484569192, 28.2345484569192, 42.2345484569192, 70.2345484569192, 26.2345484569192, 11.2345484569192, 12.2345484569192, 21.2345484569192, 34.2345484569192, 6.23454845691922, 8.23454845691922, 1.23454845691922, 2.23454845691922, 6.23454845691922, 6.23454845691922, 6.23454845691922, 6.23454845691922, 8.23454845691922, 12.2345484569192, 16.2345484569192, 6.23454845691922, 15.2345484569192, 7.23454845691922, 7.23454845691922, 8.23454845691922, 29.2345484569192, 1.23454845691922, 6.23454845691922, 15.2345484569192, 3.23454845691922, 3.23454845691922, 4.23454845691922, 9.23454845691922, 11.2345484569192, 13.2345484569192, 2.23454845691922, 2.23454845691922, 10.2345484569192, 23.2345484569192, 4.23454845691922, 4.23454845691922, 6.23454845691922, 16.2345484569192, 19.2345484569192, 23.2345484569192, 38.2345484569192), .Names = c('1', '2', '3', '4', '5', '6', '7', '8', '9', '10', '11', '12', '13', '14', '15', '16', '17', '18', '19', '20', '21', '22', '23', '24', '25', '26', '27', '28', '29', '30', '31', '32', '33', '34', '35', '36', '37', '38', '39', '40', '41', '42', '43', '44', '45', '46', '47', '48', '49', '50', '51', '52', '53', '54', '55', '56', '57', '58', '59', '60', '61', '62', '63', '64', '65', '66', '67', '68', '69', '70', '71', '72', '73', '74', '75', '76', '77', '78', '79', '80', '81', '82', '83', '84', '85', '86', '87', '88', '89', '90', '91', '92', '93', '94', '95', '96', '97', '98', '99', '100', '101', '102', '103', '104', '105', '106', '107', '108', '109', '110', '111', '112', '113', '114', '115', '116', '117', '118', '119', '120', '121', '122', '123', '124', '125', '126', '127', '128', '129', '130', '131', '132', '133', '134', '135', '136', '137', '138', '139', '140', '141', '142', '143', '144', '145', '146')));trigamma(argv[[1]]);
          1          2          3          4          5          6          7
 0.36178937 0.08516701 0.06784170 0.17394434 0.17394434 0.07277699 0.04821934
@@ -70144,11 +70159,11 @@ tracemem[0x7f818486bc90 -> 0x7f818486ba50]:
        141        142        143        144        145        146
 0.26620812 0.17394434 0.06353305 0.05336466 0.04397883 0.02649936
 
-##com.oracle.truffle.r.test.builtins.TestBuiltin_trigamma.testtrigamma3#Ignored.Unknown#
+##com.oracle.truffle.r.test.builtins.TestBuiltin_trigamma.testtrigamma3#Ignored.Unimplemented#
 #argv <- list(c(1e+30, 1e+60, 1e+90, 1e+120, 1e+150, 1e+180, 1e+210, 1e+240, 1e+270, 1e+300));trigamma(argv[[1]]);
  [1]  1e-30  1e-60  1e-90 1e-120 1e-150 1e-180 1e-210 1e-240 1e-270 1e-300
 
-##com.oracle.truffle.r.test.builtins.TestBuiltin_trigamma.testtrigamma4#Ignored.Unknown#
+##com.oracle.truffle.r.test.builtins.TestBuiltin_trigamma.testtrigamma4#Ignored.Unimplemented#
 #argv <- list(c(-100, -3, -2, -1, 0, 1, 2, -99.9, -7.7, -3, -2.9, -2.8, -2.7, -2.6, -2.5, -2.4, -2.3, -2.2, -2.1, -2, -1.9, -1.8, -1.7, -1.6, -1.5, -1.4, -1.3, -1.2, -1.1, -1, -0.9, -0.8, -0.7, -0.6, -0.5, -0.4, -0.3, -0.2, -0.0999999999999996, 0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1, 1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 1.7, 1.8, 1.9, 2, 2.1, 2.2, 2.3, 2.4, 2.5, 2.6, 2.7, 2.8, 2.9, 3, 5.1, 77));trigamma(argv[[1]]);
  [1]          Inf          Inf          Inf          Inf          Inf
  [6]   1.64493407   0.64493407 103.34587903  14.95761284          Inf
@@ -70503,7 +70518,7 @@ c d
 attr(,"class")
 [1] "omit"
 
-##com.oracle.truffle.r.test.builtins.TestBuiltin_unclass.testunclass12#Ignored.Unknown#
+##com.oracle.truffle.r.test.builtins.TestBuiltin_unclass.testunclass12#Ignored.ReferenceError#
 #argv <- list(structure(list(`log(x)` = c(0, 0.693147180559945, 1.09861228866811, 1.38629436111989, 1.6094379124341, 1.79175946922805, 1.94591014905531, 2.07944154167984, 2.19722457733622, 2.30258509299405, 2.39789527279837, 2.484906649788, 2.56494935746154, 2.63905732961526, 2.70805020110221, 2.77258872223978, 2.83321334405622, 2.89037175789616, 2.94443897916644, 2.99573227355399, 3.04452243772342, 3.09104245335832, 3.13549421592915, 3.17805383034795, 3.2188758248682, 3.25809653802148, 3.29583686600433, 3.3322045101752, 3.36729582998647, 3.40119738166216, 3.43398720448515, 3.46573590279973, 3.49650756146648, 3.52636052461616, 3.55534806148941, 3.58351893845611, 3.61091791264422, 3.63758615972639, 3.66356164612965, 3.68887945411394, 3.71357206670431, 3.73766961828337, 3.76120011569356, 3.78418963391826, 3.80666248977032, 3.8286413964891, 3.85014760171006, 3.87120101090789, 3.89182029811063, 3.91202300542815, 3.93182563272433, 3.95124371858143, 3.97029191355212, 3.98898404656427, 4.00733318523247, 4.02535169073515, 4.04305126783455, 4.06044301054642, 4.07753744390572, 4.0943445622221, 4.11087386417331, 4.12713438504509, 4.14313472639153, 4.15888308335967, 4.17438726989564, 4.18965474202643, 4.20469261939097, 4.21950770517611, 4.23410650459726, 4.24849524204936, 4.26267987704132, 4.27666611901606, 4.29045944114839, 4.30406509320417, 4.31748811353631, 4.33073334028633, 4.34380542185368, 4.35670882668959, 4.36944785246702, 4.38202663467388, 4.39444915467244, 4.40671924726425, 4.4188406077966, 4.43081679884331, 4.44265125649032, 4.45434729625351, 4.46590811865458, 4.47733681447821, 4.48863636973214, 4.49980967033027, 4.51085950651685, 4.52178857704904, 4.53259949315326, 4.54329478227, 4.55387689160054, 4.56434819146784, 4.57471097850338, 4.58496747867057, 4.59511985013459, 4.60517018598809), `log(z)` = c(2.39789527279837, 2.484906649788, 2.56494935746154, 2.63905732961526, 2.70805020110221, 2.77258872223978, 2.83321334405622, 2.89037175789616, 2.94443897916644, 2.99573227355399, 3.04452243772342, 3.09104245335832, 3.13549421592915, 3.17805383034795, 3.2188758248682, 3.25809653802148, 3.29583686600433, 3.3322045101752, 3.36729582998647, 3.40119738166216, 3.43398720448515, 3.46573590279973, 3.49650756146648, 3.52636052461616, 3.55534806148941, 3.58351893845611, 3.61091791264422, 3.63758615972639, 3.66356164612965, 3.68887945411394, 3.71357206670431, 3.73766961828337, 3.76120011569356, 3.78418963391826, 3.80666248977032, 3.8286413964891, 3.85014760171006, 3.87120101090789, 3.89182029811063, 3.91202300542815, 3.93182563272433, 3.95124371858143, 3.97029191355212, 3.98898404656427, 4.00733318523247, 4.02535169073515, 4.04305126783455, 4.06044301054642, 4.07753744390572, 4.0943445622221, 4.11087386417331, 4.12713438504509, 4.14313472639153, 4.15888308335967, 4.17438726989564, 4.18965474202643, 4.20469261939097, 4.21950770517611, 4.23410650459726, 4.24849524204936, 4.26267987704132, 4.27666611901606, 4.29045944114839, 4.30406509320417, 4.31748811353631, 4.33073334028633, 4.34380542185368, 4.35670882668959, 4.36944785246702, 4.38202663467388, 4.39444915467244, 4.40671924726425, 4.4188406077966, 4.43081679884331, 4.44265125649032, 4.45434729625351, 4.46590811865458, 4.47733681447821, 4.48863636973214, 4.49980967033027, 4.51085950651685, 4.52178857704904, 4.53259949315326, 4.54329478227, 4.55387689160054, 4.56434819146784, 4.57471097850338, 4.58496747867057, 4.59511985013459, 4.60517018598809, 4.61512051684126, 4.62497281328427, 4.63472898822964, 4.64439089914137, 4.65396035015752, 4.66343909411207, 4.67282883446191, 4.68213122712422, 4.69134788222914, 4.70048036579242)), .Names = c('log(x)', 'log(z)'), row.names = c(NA, 100L), terms = quote(~log(x) + log(z))));unclass(argv[[1]]);
 $`log(x)`
   [1] 0.0000000 0.6931472 1.0986123 1.3862944 1.6094379 1.7917595 1.9459101
@@ -70694,7 +70709,7 @@ $a
 attr(,"row.names")
 [1] 3 1 2
 
-##com.oracle.truffle.r.test.builtins.TestBuiltin_unclass.testunclass2#Ignored.Unknown#
+##com.oracle.truffle.r.test.builtins.TestBuiltin_unclass.testunclass2#Output.IgnoreWhitespace#
 #argv <- list(structure(list(Employed = c(60.323, 61.122, 60.171, 61.187, 63.221, 63.639, 64.989, 63.761, 66.019, 67.857, 68.169, 66.513, 68.655, 69.564, 69.331, 70.551), GNP.deflator = c(83, 88.5, 88.2, 89.5, 96.2, 98.1, 99, 100, 101.2, 104.6, 108.4, 110.8, 112.6, 114.2, 115.7, 116.9), GNP = c(234.289, 259.426, 258.054, 284.599, 328.975, 346.999, 365.385, 363.112, 397.469, 419.18, 442.769, 444.546, 482.704, 502.601, 518.173, 554.894), Unemployed = c(235.6, 232.5, 368.2, 335.1, 209.9, 193.2, 187, 357.8, 290.4, 282.2, 293.6, 468.1, 381.3, 393.1, 480.6, 400.7), Armed.Forces = c(159, 145.6, 161.6, 165, 309.9, 359.4, 354.7, 335, 304.8, 285.7, 279.8, 263.7, 255.2, 251.4, 257.2, 282.7), Population = c(107.608, 108.632, 109.773, 110.929, 112.075, 113.27, 115.094, 116.219, 117.388, 118.734, 120.445, 121.95, 123.366, 125.368, 127.852, 130.081), Year = 1947:1962), .Names = c('Employed', 'GNP.deflator', 'GNP', 'Unemployed', 'Armed.Forces', 'Population', 'Year'), terms = quote(Employed ~ GNP.deflator + GNP + Unemployed +     Armed.Forces + Population + Year), row.names = 1947:1962));unclass(argv[[1]]);
 $Employed
  [1] 60.323 61.122 60.171 61.187 63.221 63.639 64.989 63.761 66.019 67.857
@@ -70813,7 +70828,7 @@ y ~ a + b:c + d + e + e:d
  "3rd Qu.:49.25  " NA
  "Max.   :70.00  " NA
 
-##com.oracle.truffle.r.test.builtins.TestBuiltin_unclass.testunclass25#Ignored.Unknown#
+##com.oracle.truffle.r.test.builtins.TestBuiltin_unclass.testunclass25#Ignored.ReferenceError#
 #argv <- list(structure(list(srcfile = '/home/lzhao/tmp/RtmpYl9n1I/R.INSTALL2aa24b6697e5/MASS/R/negbin.R', frow = 135L, lrow = 137L), .Names = c('srcfile', 'frow', 'lrow'), row.names = c(NA, -1L)));unclass(argv[[1]]);
 $srcfile
 [1] "/home/lzhao/tmp/RtmpYl9n1I/R.INSTALL2aa24b6697e5/MASS/R/negbin.R"
@@ -70908,7 +70923,7 @@ Levels: no yes
 attr(,"row.names")
 [1] 7
 
-##com.oracle.truffle.r.test.builtins.TestBuiltin_unclass.testunclass3#Ignored.Unknown#
+##com.oracle.truffle.r.test.builtins.TestBuiltin_unclass.testunclass3#Ignored.ReferenceError#
 #argv <- list(structure(list(x = c(TRUE, FALSE, TRUE, FALSE, TRUE, FALSE, TRUE, FALSE, TRUE, FALSE)), .Names = 'x', row.names = c(NA, 10L)));unclass(argv[[1]]);
 $x
  [1]  TRUE FALSE  TRUE FALSE  TRUE FALSE  TRUE FALSE  TRUE FALSE
@@ -70916,7 +70931,7 @@ $x
 attr(,"row.names")
  [1]  1  2  3  4  5  6  7  8  9 10
 
-##com.oracle.truffle.r.test.builtins.TestBuiltin_unclass.testunclass31#Ignored.Unknown#
+##com.oracle.truffle.r.test.builtins.TestBuiltin_unclass.testunclass31#Ignored.ReferenceError#
 #argv <- list(structure(list(), .Names = character(0), row.names = c(NA, -10L), terms = quote(~0)));unclass(argv[[1]]);
 named list()
 attr(,"row.names")
@@ -70934,7 +70949,7 @@ breaks ~ (wool + tension)^2
    1    2 <NA>
    1    2    1
 
-##com.oracle.truffle.r.test.builtins.TestBuiltin_unclass.testunclass34#Ignored.Unknown#
+##com.oracle.truffle.r.test.builtins.TestBuiltin_unclass.testunclass34#Ignored.ReferenceError#
 #argv <- list(structure(list(`cbind(A, B, C, D)` = structure(c(0.696706709347165, 0.362357754476673, -0.0291995223012888, 0.696706709347165, 0.696706709347165, -0.0291995223012888, 0.696706709347165, -0.0291995223012888, 0.362357754476673, 0.696706709347165, -0.0291995223012888, 0.362357754476673, -0.416146836547142, 0.362357754476673, 0.696706709347165, 0.696706709347165, 0.362357754476673, -0.416146836547142, -0.0291995223012888, -0.416146836547142, 0.696706709347165, -0.416146836547142, 0.362357754476673, -0.0291995223012888, 0.717356090899523, 0.932039085967226, 0.999573603041505, 0.717356090899523, 0.717356090899523, 0.999573603041505, 0.717356090899523, 0.999573603041505, 0.932039085967226, 0.717356090899523, 0.999573603041505, 0.932039085967226, 0.909297426825682, 0.932039085967226, 0.717356090899523, 0.717356090899523, 0.932039085967226, 0.909297426825682, 0.999573603041505, 0.909297426825682, 0.717356090899523, 0.909297426825682, 0.932039085967226, 0.999573603041505, -0.0291995223012888, -0.737393715541246, -0.998294775794753, -0.0291995223012888, -0.0291995223012888, -0.998294775794753, -0.0291995223012888, -0.998294775794753, -0.737393715541246, -0.0291995223012888, -0.998294775794753, -0.737393715541246, -0.653643620863612, -0.737393715541246, -0.0291995223012888, -0.0291995223012888, -0.737393715541246, -0.653643620863612, -0.998294775794753, -0.653643620863612, -0.0291995223012888, -0.653643620863612, -0.737393715541246, -0.998294775794753, 0.999573603041505, 0.67546318055115, -0.0583741434275801, 0.999573603041505, 0.999573603041505, -0.0583741434275801, 0.999573603041505, -0.0583741434275801, 0.67546318055115, 0.999573603041505, -0.0583741434275801, 0.67546318055115, -0.756802495307928, 0.67546318055115, 0.999573603041505, 0.999573603041505, 0.67546318055115, -0.756802495307928, -0.0583741434275801, -0.756802495307928, 0.999573603041505, -0.756802495307928, 0.67546318055115, -0.0583741434275801), .Dim = c(24L, 4L), .Dimnames = list(NULL, c('A', 'B', 'C', 'D'))), groups = structure(c(1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L), .Label = c('1', '2', '3'), class = 'factor')), .Names = c('cbind(A, B, C, D)', 'groups'), terms = quote(cbind(A, B, C, D) ~ groups), row.names = c(NA, 24L)));unclass(argv[[1]]);
 $`cbind(A, B, C, D)`
                 A         B           C           D
@@ -70988,7 +71003,7 @@ attr(,"terms")
       Min.    1st Qu.     Median       Mean    3rd Qu.       Max.
  2.671e+03  6.026e+77 3.161e+152 3.501e+299 2.409e+227 1.529e+302
 
-##com.oracle.truffle.r.test.builtins.TestBuiltin_unclass.testunclass4#Ignored.Unknown#
+##com.oracle.truffle.r.test.builtins.TestBuiltin_unclass.testunclass4#Ignored.ReferenceError#
 #argv <- list(structure(list(X1.10 = 1:10, z = structure(list(x = 1:10, yyy = 11:20), .Names = c('x', 'yyy'), row.names = c(NA, -10L), class = 'data.frame')), .Names = c('X1.10', 'z'), row.names = c(NA, -10L)));unclass(argv[[1]]);
 $X1.10
  [1]  1  2  3  4  5  6  7  8  9 10
@@ -71067,7 +71082,7 @@ Levels: abc def
 attr(,"row.names")
 [1] "1" "2" "3"
 
-##com.oracle.truffle.r.test.builtins.TestBuiltin_unclass.testunclass8#Ignored.Unknown#
+##com.oracle.truffle.r.test.builtins.TestBuiltin_unclass.testunclass8#Ignored.ReferenceError#
 #argv <- list(structure(list(`cbind(w = weight, w2 = weight^2)` = structure(c(4.17, 5.58, 5.18, 6.11, 4.5, 4.61, 5.17, 4.53, 5.33, 5.14, 4.81, 4.17, 4.41, 3.59, 5.87, 3.83, 6.03, 4.89, 4.32, 4.69, 17.3889, 31.1364, 26.8324, 37.3321, 20.25, 21.2521, 26.7289, 20.5209, 28.4089, 26.4196, 23.1361, 17.3889, 19.4481, 12.8881, 34.4569, 14.6689, 36.3609, 23.9121, 18.6624, 21.9961), .Dim = c(20L, 2L), .Dimnames = list(NULL, c('w', 'w2'))), group = structure(c(1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L), .Label = c('Ctl', 'Trt'), class = 'factor')), .Names = c('cbind(w = weight, w2 = weight^2)', 'group'), terms = quote(cbind(w = weight, w2 = weight^2) ~ group), row.names = c(NA, 20L)));unclass(argv[[1]]);
 $`cbind(w = weight, w2 = weight^2)`
          w      w2
@@ -71112,7 +71127,7 @@ attr(,"row.names")
  "3rd Qu.: 7.75  " "3rd Qu.: 7.75    3rd Qu.:17.75  "
  "Max.   :10.00  " "Max.   :10.00    Max.   :20.00  "
 
-##com.oracle.truffle.r.test.builtins.TestBuiltin_unique.testUnique#Ignored.Unknown#
+##com.oracle.truffle.r.test.builtins.TestBuiltin_unique.testUnique#Ignored.ReferenceError#
 #{ unique(c(1,2,1), incomparables=function() 42) }
 Error in unique.default(c(1, 2, 1), incomparables = function() 42) :
   cannot coerce type 'closure' to vector of type 'double'
@@ -71187,7 +71202,7 @@ NULL
 #argv <- list(structure(c(1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4), .Tsp = c(1945, 1974.75, 4), class = 'ts'), FALSE, FALSE, NA); .Internal(unique(argv[[1]], argv[[2]], argv[[3]], argv[[4]]))
 [1] 1 2 3 4
 
-##com.oracle.truffle.r.test.builtins.TestBuiltin_unique.testunique2#Ignored.Unknown#
+##com.oracle.truffle.r.test.builtins.TestBuiltin_unique.testunique2#Ignored.ImplementationError#
 #argv <- list(c('a', 'b', 'c', 'c', 'b', 'a', 'NA', 'd', 'd', NA), FALSE, FALSE, NA); .Internal(unique(argv[[1]], argv[[2]], argv[[3]], argv[[4]]))
 [1] "a"  "b"  "c"  "NA" "d"  NA
 
@@ -73356,7 +73371,7 @@ attr(,"id")
 #argv <- list(list());xtfrm(argv[[1]]);
 integer(0)
 
-##com.oracle.truffle.r.test.builtins.TestBuiltin_xtfrm.testxtfrm5#Ignored.Unknown#
+##com.oracle.truffle.r.test.builtins.TestBuiltin_xtfrm.testxtfrm5#Ignored.ImplementationError#
 #argv <- list(NULL);xtfrm(argv[[1]]);
 integer(0)
 Warning message:
@@ -74713,7 +74728,7 @@ $vectors
 #{ r <- eigen(matrix(c(1,2,3,4), nrow=2), only.values=FALSE); round( r$values, digits=5 ) }
 [1]  5.37228 -0.37228
 
-##com.oracle.truffle.r.test.builtins.TestMiscBuiltins.testEigen#Ignored.Unknown#
+##com.oracle.truffle.r.test.builtins.TestMiscBuiltins.testEigen#
 #{ r <- eigen(matrix(c(1,2,3,4), nrow=2), only.values=FALSE); round( r$vectors, digits=5 ) }
          [,1]     [,2]
 [1,] -0.56577 -0.90938
@@ -77713,7 +77728,7 @@ Error in f() : fred
 [1] "Hello"
 [1] 1
 
-##com.oracle.truffle.r.test.library.base.TestConditionHandling.testTryCatch#Ignored.Unknown#
+##com.oracle.truffle.r.test.library.base.TestConditionHandling.testTryCatch#Ignored.ImplementationError#
 #{ tryCatch(stop("fred"), error = function(e) e, finally = print("Hello"))}
 [1] "Hello"
 <simpleError in doTryCatch(return(expr), name, parentenv, handler): fred>
@@ -78639,7 +78654,7 @@ Error in rm("foo", envir = baseenv()) :
 #{ x <- 1; ls(globalenv()) }
 [1] "x"
 
-##com.oracle.truffle.r.test.library.base.TestEnvironments.testEnvironmentAssignLocked#Ignored.Unknown#Output.IgnoreErrorContext#
+##com.oracle.truffle.r.test.library.base.TestEnvironments.testEnvironmentAssignLocked#Ignored.Unimplemented#Output.IgnoreErrorContext#
 #{ x <- 1; lockBinding("x", globalenv()); x <- 1 }
 Error: cannot change value of locked binding for 'x'
 
@@ -79387,103 +79402,103 @@ Error in fun(1:100) : could not find function "makeCluster"
 #{ 3L %/% 2L }
 [1] 1
 
-##com.oracle.truffle.r.test.library.base.TestSimpleArithmetic.testIntegerOverflow#Ignored.Unknown#Output.IgnoreWarningContext#
+##com.oracle.truffle.r.test.library.base.TestSimpleArithmetic.testIntegerOverflow#Ignored.ImplementationError#Output.IgnoreWarningContext#
 #{ 1:3 + 2147483647L }
 [1] NA NA NA
 Warning message:
 In 1:3 + 2147483647L : NAs produced by integer overflow
 
-##com.oracle.truffle.r.test.library.base.TestSimpleArithmetic.testIntegerOverflow#Ignored.Unknown#Output.IgnoreWarningContext#
+##com.oracle.truffle.r.test.library.base.TestSimpleArithmetic.testIntegerOverflow#Ignored.ImplementationError#Output.IgnoreWarningContext#
 #{ 1:3 + c(2147483647L,2147483647L,2147483647L) }
 [1] NA NA NA
 Warning message:
 In 1:3 + c(2147483647L, 2147483647L, 2147483647L) :
   NAs produced by integer overflow
 
-##com.oracle.truffle.r.test.library.base.TestSimpleArithmetic.testIntegerOverflow#Ignored.Unknown#Output.IgnoreWarningContext#
+##com.oracle.truffle.r.test.library.base.TestSimpleArithmetic.testIntegerOverflow#Ignored.ImplementationError#Output.IgnoreWarningContext#
 #{ 1:4 + c(2147483647L,2147483647L) }
 [1] NA NA NA NA
 Warning message:
 In 1:4 + c(2147483647L, 2147483647L) : NAs produced by integer overflow
 
-##com.oracle.truffle.r.test.library.base.TestSimpleArithmetic.testIntegerOverflow#Ignored.Unknown#Output.IgnoreWarningContext#
+##com.oracle.truffle.r.test.library.base.TestSimpleArithmetic.testIntegerOverflow#Ignored.ImplementationError#Output.IgnoreWarningContext#
 #{ 2147483647L + 1:3 }
 [1] NA NA NA
 Warning message:
 In 2147483647L + 1:3 : NAs produced by integer overflow
 
-##com.oracle.truffle.r.test.library.base.TestSimpleArithmetic.testIntegerOverflow#Ignored.Unknown#Output.IgnoreWarningContext#
+##com.oracle.truffle.r.test.library.base.TestSimpleArithmetic.testIntegerOverflow#Ignored.ImplementationError#Output.IgnoreWarningContext#
 #{ 2147483647L + c(1L,2L,3L) }
 [1] NA NA NA
 Warning message:
 In 2147483647L + c(1L, 2L, 3L) : NAs produced by integer overflow
 
-##com.oracle.truffle.r.test.library.base.TestSimpleArithmetic.testIntegerOverflow#Ignored.Unknown#Output.IgnoreWarningContext#
+##com.oracle.truffle.r.test.library.base.TestSimpleArithmetic.testIntegerOverflow#Ignored.ImplementationError#Output.IgnoreWarningContext#
 #{ c(1L,2L,3L) + 2147483647L }
 [1] NA NA NA
 Warning message:
 In c(1L, 2L, 3L) + 2147483647L : NAs produced by integer overflow
 
-##com.oracle.truffle.r.test.library.base.TestSimpleArithmetic.testIntegerOverflow#Ignored.Unknown#Output.IgnoreWarningContext#
+##com.oracle.truffle.r.test.library.base.TestSimpleArithmetic.testIntegerOverflow#Ignored.ImplementationError#Output.IgnoreWarningContext#
 #{ c(1L,2L,3L) + c(2147483647L,2147483647L,2147483647L) }
 [1] NA NA NA
 Warning message:
 In c(1L, 2L, 3L) + c(2147483647L, 2147483647L, 2147483647L) :
   NAs produced by integer overflow
 
-##com.oracle.truffle.r.test.library.base.TestSimpleArithmetic.testIntegerOverflow#Ignored.Unknown#Output.IgnoreWarningContext#
+##com.oracle.truffle.r.test.library.base.TestSimpleArithmetic.testIntegerOverflow#Ignored.ImplementationError#Output.IgnoreWarningContext#
 #{ c(1L,2L,3L,4L) + c(2147483647L,2147483647L) }
 [1] NA NA NA NA
 Warning message:
 In c(1L, 2L, 3L, 4L) + c(2147483647L, 2147483647L) :
   NAs produced by integer overflow
 
-##com.oracle.truffle.r.test.library.base.TestSimpleArithmetic.testIntegerOverflow#Ignored.Unknown#Output.IgnoreWarningContext#
+##com.oracle.truffle.r.test.library.base.TestSimpleArithmetic.testIntegerOverflow#Ignored.ImplementationError#Output.IgnoreWarningContext#
 #{ c(2147483647L,2147483647L) + 1:4 }
 [1] NA NA NA NA
 Warning message:
 In c(2147483647L, 2147483647L) + 1:4 : NAs produced by integer overflow
 
-##com.oracle.truffle.r.test.library.base.TestSimpleArithmetic.testIntegerOverflow#Ignored.Unknown#Output.IgnoreWarningContext#
+##com.oracle.truffle.r.test.library.base.TestSimpleArithmetic.testIntegerOverflow#Ignored.ImplementationError#Output.IgnoreWarningContext#
 #{ c(2147483647L,2147483647L) + c(1L,2L,3L,4L) }
 [1] NA NA NA NA
 Warning message:
 In c(2147483647L, 2147483647L) + c(1L, 2L, 3L, 4L) :
   NAs produced by integer overflow
 
-##com.oracle.truffle.r.test.library.base.TestSimpleArithmetic.testIntegerOverflow#Ignored.Unknown#Output.IgnoreWarningContext#
+##com.oracle.truffle.r.test.library.base.TestSimpleArithmetic.testIntegerOverflow#Ignored.ImplementationError#Output.IgnoreWarningContext#
 #{ c(2147483647L,2147483647L,2147483647L) + 1:3 }
 [1] NA NA NA
 Warning message:
 In c(2147483647L, 2147483647L, 2147483647L) + 1:3 :
   NAs produced by integer overflow
 
-##com.oracle.truffle.r.test.library.base.TestSimpleArithmetic.testIntegerOverflow#Ignored.Unknown#Output.IgnoreWarningContext#
+##com.oracle.truffle.r.test.library.base.TestSimpleArithmetic.testIntegerOverflow#Ignored.ImplementationError#Output.IgnoreWarningContext#
 #{ c(2147483647L,2147483647L,2147483647L) + c(1L,2L,3L) }
 [1] NA NA NA
 Warning message:
 In c(2147483647L, 2147483647L, 2147483647L) + c(1L, 2L, 3L) :
   NAs produced by integer overflow
 
-##com.oracle.truffle.r.test.library.base.TestSimpleArithmetic.testIntegerOverflow#Ignored.Unknown#Output.IgnoreWarningContext#
+##com.oracle.truffle.r.test.library.base.TestSimpleArithmetic.testIntegerOverflow#Output.MissingWarning#
 #{ x <- -2147483647L ; x - 1L }
 [1] NA
 Warning message:
 In x - 1L : NAs produced by integer overflow
 
-##com.oracle.truffle.r.test.library.base.TestSimpleArithmetic.testIntegerOverflow#Ignored.Unknown#Output.IgnoreWarningContext#
+##com.oracle.truffle.r.test.library.base.TestSimpleArithmetic.testIntegerOverflow#Output.MissingWarning#
 #{ x <- -2147483647L ; x - 2L }
 [1] NA
 Warning message:
 In x - 2L : NAs produced by integer overflow
 
-##com.oracle.truffle.r.test.library.base.TestSimpleArithmetic.testIntegerOverflow#Ignored.Unknown#Output.IgnoreWarningContext#
+##com.oracle.truffle.r.test.library.base.TestSimpleArithmetic.testIntegerOverflow#Output.MissingWarning#
 #{ x <- 2147483647L ; x * x }
 [1] NA
 Warning message:
 In x * x : NAs produced by integer overflow
 
-##com.oracle.truffle.r.test.library.base.TestSimpleArithmetic.testIntegerOverflow#Ignored.Unknown#Output.IgnoreWarningContext#
+##com.oracle.truffle.r.test.library.base.TestSimpleArithmetic.testIntegerOverflow#Output.MissingWarning#
 #{ x <- 2147483647L ; x + 1L }
 [1] NA
 Warning message:
@@ -80530,7 +80545,7 @@ raw(0)
 #{ 1000000000L*1000000000 }
 [1] 1e+18
 
-##com.oracle.truffle.r.test.library.base.TestSimpleArithmetic.testScalarsReal#Ignored.Unknown#
+##com.oracle.truffle.r.test.library.base.TestSimpleArithmetic.testScalarsReal#Output.MissingWarning#
 #{ 1000000000L*1000000000L }
 [1] NA
 Warning message:
@@ -85770,15 +85785,15 @@ Error: no loop for break/next, jumping to top level
 #{ while (1 < NA) { 1 } }
 Error in while (1 < NA) { : missing value where TRUE/FALSE needed
 
-##com.oracle.truffle.r.test.library.base.TestSimpleLoop.testLoopsErrorsIgnore#Ignored.Unknown#Output.IgnoreErrorContext#
+##com.oracle.truffle.r.test.library.base.TestSimpleLoop.testLoopsErrorsIgnore#Output.IgnoreErrorMessage#
 #{ l <- function(s) { for(i in s) { x <- i } ; x } ; l(1:3) ; s <- function(){} ; l(s) ; x }
 Error in for (i in s) { : invalid for() loop sequence
 
-##com.oracle.truffle.r.test.library.base.TestSimpleLoop.testLoopsErrorsIgnore#Ignored.Unknown#Output.IgnoreErrorContext#
+##com.oracle.truffle.r.test.library.base.TestSimpleLoop.testLoopsErrorsIgnore#Output.IgnoreErrorMessage#
 #{ l <- quote(for(i in s) { x <- i }) ; s <- 1:3 ; eval(l) ; s <- function(){} ; eval(l) ; x }
 Error in for (i in s) { : invalid for() loop sequence
 
-##com.oracle.truffle.r.test.library.base.TestSimpleLoop.testLoopsErrorsIgnore#Ignored.Unknown#Output.IgnoreErrorContext#
+##com.oracle.truffle.r.test.library.base.TestSimpleLoop.testLoopsErrorsIgnore#Output.IgnoreErrorMessage#
 #{ l <- quote({ for(i in s) { x <- i } ; x }) ; f <- function(s) { eval(l) } ; f(1:3) ; s <- function(){} ; f(s) ; x }
 Error in eval(expr, envir, enclos) : object 'x' not found
 
@@ -120603,7 +120618,7 @@ Error in z[[list()]] :
 Error in z[[list()]] <- 42 :
   attempt to select less than one element in OneIndex
 
-##com.oracle.truffle.r.test.library.base.TestSimpleVectors.testListIndex#Ignored.Unknown#Output.IgnoreErrorContext#
+##com.oracle.truffle.r.test.library.base.TestSimpleVectors.testListIndex#Output.IgnoreErrorMessage#
 #{ z<-1:4; z[[list()]]<-NULL }
 Error in z[[list()]] <- NULL :
   attempt to select less than one element in OneIndex
@@ -124696,7 +124711,7 @@ Error in x[[0]] <- c(5) :
 #{ x <- NULL; x[[1]] <- c(); x; }
 NULL
 
-##com.oracle.truffle.r.test.library.base.TestSimpleVectors.testNullUpdate#Ignored.Unknown#
+##com.oracle.truffle.r.test.library.base.TestSimpleVectors.testNullUpdate#Ignored.Unimplemented#
 #{ x <- NULL; x[[1]] <- c(1,5); x; }
 [[1]]
 [1] 1 5
@@ -131118,6 +131133,229 @@ NULL
 NULL
 
 
+##com.oracle.truffle.r.test.library.fastr.TestJavaInterop.testInteroptNew#
+#if (length(grep("FastR", R.Version()$version.string)) != 1) { 'a' } else { tc <- .fastr.java.class('java.lang.Character'); t <- .fastr.interop.new(tc, .fastr.interop.toChar(97)); t }
+[1] "a"
+
+##com.oracle.truffle.r.test.library.fastr.TestJavaInterop.testInteroptNew#
+#if (length(grep("FastR", R.Version()$version.string)) != 1) { 'abc' } else { tc <- .fastr.java.class('java.lang.String'); t <- .fastr.interop.new(tc, 'abc'); t }
+[1] "abc"
+
+##com.oracle.truffle.r.test.library.fastr.TestJavaInterop.testInteroptNew#
+#if (length(grep("FastR", R.Version()$version.string)) != 1) { 'truffle.object' } else { tc <- .fastr.java.class('com.oracle.truffle.r.test.library.fastr.TestJavaInterop$TestNullClass'); t <- .fastr.interop.new(tc, NULL); class(t) }
+[1] "truffle.object"
+
+##com.oracle.truffle.r.test.library.fastr.TestJavaInterop.testInteroptNew#
+#if (length(grep("FastR", R.Version()$version.string)) != 1) { 1 } else { tc <- .fastr.java.class('java.lang.Byte'); t <- .fastr.interop.new(tc, .fastr.interop.toByte(1)); t }
+[1] 1
+
+##com.oracle.truffle.r.test.library.fastr.TestJavaInterop.testInteroptNew#
+#if (length(grep("FastR", R.Version()$version.string)) != 1) { 1 } else { tc <- .fastr.java.class('java.lang.Integer'); t <- .fastr.interop.new(tc, 1L); t }
+[1] 1
+
+##com.oracle.truffle.r.test.library.fastr.TestJavaInterop.testInteroptNew#
+#if (length(grep("FastR", R.Version()$version.string)) != 1) { 1 } else { tc <- .fastr.java.class('java.lang.Long'); t <- .fastr.interop.new(tc, .fastr.interop.toLong(1)); t }
+[1] 1
+
+##com.oracle.truffle.r.test.library.fastr.TestJavaInterop.testInteroptNew#
+#if (length(grep("FastR", R.Version()$version.string)) != 1) { 1 } else { tc <- .fastr.java.class('java.lang.Short'); t <- .fastr.interop.new(tc, .fastr.interop.toShort(1)); t }
+[1] 1
+
+##com.oracle.truffle.r.test.library.fastr.TestJavaInterop.testInteroptNew#
+#if (length(grep("FastR", R.Version()$version.string)) != 1) { 1.1 } else { tc <- .fastr.java.class('java.lang.Double'); t <- .fastr.interop.new(tc, 1.1); t }
+[1] 1.1
+
+##com.oracle.truffle.r.test.library.fastr.TestJavaInterop.testInteroptNew#
+#if (length(grep("FastR", R.Version()$version.string)) != 1) { 1.1 } else { tc <- .fastr.java.class('java.lang.Float'); t <- .fastr.interop.new(tc, .fastr.interop.toFloat(1.1)); t }
+[1] 1.1
+
+##com.oracle.truffle.r.test.library.fastr.TestJavaInterop.testInteroptNew#
+#if (length(grep("FastR", R.Version()$version.string)) != 1) { TRUE } else { tc <- .fastr.java.class('java.lang.Boolean'); t <- .fastr.interop.new(tc, TRUE); t }
+[1] TRUE
+
+##com.oracle.truffle.r.test.library.fastr.TestJavaInterop.testInteroptNew#
+#if (length(grep("FastR", R.Version()$version.string)) != 1) { TRUE } else { tc <- .fastr.java.class('java/lang/Boolean'); t <- new(tc, TRUE); t }
+[1] TRUE
+
+##com.oracle.truffle.r.test.library.fastr.TestJavaInterop.testIsXXXForForeignObject#
+#if (length(grep("FastR", R.Version()$version.string)) != 1) { FALSE } else { to <- .fastr.interop.new(.fastr.java.class('com.oracle.truffle.r.test.library.fastr.TestJavaInterop$TestClass')); is.array(to) }
+[1] FALSE
+
+##com.oracle.truffle.r.test.library.fastr.TestJavaInterop.testIsXXXForForeignObject#
+#if (length(grep("FastR", R.Version()$version.string)) != 1) { FALSE } else { to <- .fastr.interop.new(.fastr.java.class('com.oracle.truffle.r.test.library.fastr.TestJavaInterop$TestClass')); is.atomic(to) }
+[1] FALSE
+
+##com.oracle.truffle.r.test.library.fastr.TestJavaInterop.testIsXXXForForeignObject#
+#if (length(grep("FastR", R.Version()$version.string)) != 1) { FALSE } else { to <- .fastr.interop.new(.fastr.java.class('com.oracle.truffle.r.test.library.fastr.TestJavaInterop$TestClass')); is.call(to) }
+[1] FALSE
+
+##com.oracle.truffle.r.test.library.fastr.TestJavaInterop.testIsXXXForForeignObject#
+#if (length(grep("FastR", R.Version()$version.string)) != 1) { FALSE } else { to <- .fastr.interop.new(.fastr.java.class('com.oracle.truffle.r.test.library.fastr.TestJavaInterop$TestClass')); is.character(to) }
+[1] FALSE
+
+##com.oracle.truffle.r.test.library.fastr.TestJavaInterop.testIsXXXForForeignObject#
+#if (length(grep("FastR", R.Version()$version.string)) != 1) { FALSE } else { to <- .fastr.interop.new(.fastr.java.class('com.oracle.truffle.r.test.library.fastr.TestJavaInterop$TestClass')); is.complex(to) }
+[1] FALSE
+
+##com.oracle.truffle.r.test.library.fastr.TestJavaInterop.testIsXXXForForeignObject#
+#if (length(grep("FastR", R.Version()$version.string)) != 1) { FALSE } else { to <- .fastr.interop.new(.fastr.java.class('com.oracle.truffle.r.test.library.fastr.TestJavaInterop$TestClass')); is.data.frame(to) }
+[1] FALSE
+
+##com.oracle.truffle.r.test.library.fastr.TestJavaInterop.testIsXXXForForeignObject#
+#if (length(grep("FastR", R.Version()$version.string)) != 1) { FALSE } else { to <- .fastr.interop.new(.fastr.java.class('com.oracle.truffle.r.test.library.fastr.TestJavaInterop$TestClass')); is.double(to) }
+[1] FALSE
+
+##com.oracle.truffle.r.test.library.fastr.TestJavaInterop.testIsXXXForForeignObject#
+#if (length(grep("FastR", R.Version()$version.string)) != 1) { FALSE } else { to <- .fastr.interop.new(.fastr.java.class('com.oracle.truffle.r.test.library.fastr.TestJavaInterop$TestClass')); is.environment(to) }
+[1] FALSE
+
+##com.oracle.truffle.r.test.library.fastr.TestJavaInterop.testIsXXXForForeignObject#
+#if (length(grep("FastR", R.Version()$version.string)) != 1) { FALSE } else { to <- .fastr.interop.new(.fastr.java.class('com.oracle.truffle.r.test.library.fastr.TestJavaInterop$TestClass')); is.expression(to) }
+[1] FALSE
+
+##com.oracle.truffle.r.test.library.fastr.TestJavaInterop.testIsXXXForForeignObject#
+#if (length(grep("FastR", R.Version()$version.string)) != 1) { FALSE } else { to <- .fastr.interop.new(.fastr.java.class('com.oracle.truffle.r.test.library.fastr.TestJavaInterop$TestClass')); is.factor(to) }
+[1] FALSE
+
+##com.oracle.truffle.r.test.library.fastr.TestJavaInterop.testIsXXXForForeignObject#
+#if (length(grep("FastR", R.Version()$version.string)) != 1) { FALSE } else { to <- .fastr.interop.new(.fastr.java.class('com.oracle.truffle.r.test.library.fastr.TestJavaInterop$TestClass')); is.function(to) }
+[1] FALSE
+
+##com.oracle.truffle.r.test.library.fastr.TestJavaInterop.testIsXXXForForeignObject#
+#if (length(grep("FastR", R.Version()$version.string)) != 1) { FALSE } else { to <- .fastr.interop.new(.fastr.java.class('com.oracle.truffle.r.test.library.fastr.TestJavaInterop$TestClass')); is.integer(to) }
+[1] FALSE
+
+##com.oracle.truffle.r.test.library.fastr.TestJavaInterop.testIsXXXForForeignObject#
+#if (length(grep("FastR", R.Version()$version.string)) != 1) { FALSE } else { to <- .fastr.interop.new(.fastr.java.class('com.oracle.truffle.r.test.library.fastr.TestJavaInterop$TestClass')); is.language(to) }
+[1] FALSE
+
+##com.oracle.truffle.r.test.library.fastr.TestJavaInterop.testIsXXXForForeignObject#
+#if (length(grep("FastR", R.Version()$version.string)) != 1) { FALSE } else { to <- .fastr.interop.new(.fastr.java.class('com.oracle.truffle.r.test.library.fastr.TestJavaInterop$TestClass')); is.logical(to) }
+[1] FALSE
+
+##com.oracle.truffle.r.test.library.fastr.TestJavaInterop.testIsXXXForForeignObject#
+#if (length(grep("FastR", R.Version()$version.string)) != 1) { FALSE } else { to <- .fastr.interop.new(.fastr.java.class('com.oracle.truffle.r.test.library.fastr.TestJavaInterop$TestClass')); is.matrix(to) }
+[1] FALSE
+
+##com.oracle.truffle.r.test.library.fastr.TestJavaInterop.testIsXXXForForeignObject#
+#if (length(grep("FastR", R.Version()$version.string)) != 1) { FALSE } else { to <- .fastr.interop.new(.fastr.java.class('com.oracle.truffle.r.test.library.fastr.TestJavaInterop$TestClass')); is.mts(to) }
+[1] FALSE
+
+##com.oracle.truffle.r.test.library.fastr.TestJavaInterop.testIsXXXForForeignObject#
+#if (length(grep("FastR", R.Version()$version.string)) != 1) { FALSE } else { to <- .fastr.interop.new(.fastr.java.class('com.oracle.truffle.r.test.library.fastr.TestJavaInterop$TestClass')); is.na(to) }
+[1] FALSE
+
+##com.oracle.truffle.r.test.library.fastr.TestJavaInterop.testIsXXXForForeignObject#
+#if (length(grep("FastR", R.Version()$version.string)) != 1) { FALSE } else { to <- .fastr.interop.new(.fastr.java.class('com.oracle.truffle.r.test.library.fastr.TestJavaInterop$TestClass')); is.name(to) }
+[1] FALSE
+
+##com.oracle.truffle.r.test.library.fastr.TestJavaInterop.testIsXXXForForeignObject#
+#if (length(grep("FastR", R.Version()$version.string)) != 1) { FALSE } else { to <- .fastr.interop.new(.fastr.java.class('com.oracle.truffle.r.test.library.fastr.TestJavaInterop$TestClass')); is.null(to) }
+[1] FALSE
+
+##com.oracle.truffle.r.test.library.fastr.TestJavaInterop.testIsXXXForForeignObject#
+#if (length(grep("FastR", R.Version()$version.string)) != 1) { FALSE } else { to <- .fastr.interop.new(.fastr.java.class('com.oracle.truffle.r.test.library.fastr.TestJavaInterop$TestClass')); is.numeric(to) }
+[1] FALSE
+
+##com.oracle.truffle.r.test.library.fastr.TestJavaInterop.testIsXXXForForeignObject#
+#if (length(grep("FastR", R.Version()$version.string)) != 1) { FALSE } else { to <- .fastr.interop.new(.fastr.java.class('com.oracle.truffle.r.test.library.fastr.TestJavaInterop$TestClass')); is.numeric.Date(to) }
+[1] FALSE
+
+##com.oracle.truffle.r.test.library.fastr.TestJavaInterop.testIsXXXForForeignObject#
+#if (length(grep("FastR", R.Version()$version.string)) != 1) { FALSE } else { to <- .fastr.interop.new(.fastr.java.class('com.oracle.truffle.r.test.library.fastr.TestJavaInterop$TestClass')); is.numeric.POSIXt(to) }
+[1] FALSE
+
+##com.oracle.truffle.r.test.library.fastr.TestJavaInterop.testIsXXXForForeignObject#
+#if (length(grep("FastR", R.Version()$version.string)) != 1) { FALSE } else { to <- .fastr.interop.new(.fastr.java.class('com.oracle.truffle.r.test.library.fastr.TestJavaInterop$TestClass')); is.numeric.difftime(to) }
+[1] FALSE
+
+##com.oracle.truffle.r.test.library.fastr.TestJavaInterop.testIsXXXForForeignObject#
+#if (length(grep("FastR", R.Version()$version.string)) != 1) { FALSE } else { to <- .fastr.interop.new(.fastr.java.class('com.oracle.truffle.r.test.library.fastr.TestJavaInterop$TestClass')); is.numeric_version(to) }
+[1] FALSE
+
+##com.oracle.truffle.r.test.library.fastr.TestJavaInterop.testIsXXXForForeignObject#
+#if (length(grep("FastR", R.Version()$version.string)) != 1) { FALSE } else { to <- .fastr.interop.new(.fastr.java.class('com.oracle.truffle.r.test.library.fastr.TestJavaInterop$TestClass')); is.object(to) }
+[1] FALSE
+
+##com.oracle.truffle.r.test.library.fastr.TestJavaInterop.testIsXXXForForeignObject#
+#if (length(grep("FastR", R.Version()$version.string)) != 1) { FALSE } else { to <- .fastr.interop.new(.fastr.java.class('com.oracle.truffle.r.test.library.fastr.TestJavaInterop$TestClass')); is.ordered(to) }
+[1] FALSE
+
+##com.oracle.truffle.r.test.library.fastr.TestJavaInterop.testIsXXXForForeignObject#
+#if (length(grep("FastR", R.Version()$version.string)) != 1) { FALSE } else { to <- .fastr.interop.new(.fastr.java.class('com.oracle.truffle.r.test.library.fastr.TestJavaInterop$TestClass')); is.package_version(to) }
+[1] FALSE
+
+##com.oracle.truffle.r.test.library.fastr.TestJavaInterop.testIsXXXForForeignObject#
+#if (length(grep("FastR", R.Version()$version.string)) != 1) { FALSE } else { to <- .fastr.interop.new(.fastr.java.class('com.oracle.truffle.r.test.library.fastr.TestJavaInterop$TestClass')); is.pairlist(to) }
+[1] FALSE
+
+##com.oracle.truffle.r.test.library.fastr.TestJavaInterop.testIsXXXForForeignObject#
+#if (length(grep("FastR", R.Version()$version.string)) != 1) { FALSE } else { to <- .fastr.interop.new(.fastr.java.class('com.oracle.truffle.r.test.library.fastr.TestJavaInterop$TestClass')); is.primitive(to) }
+[1] FALSE
+
+##com.oracle.truffle.r.test.library.fastr.TestJavaInterop.testIsXXXForForeignObject#
+#if (length(grep("FastR", R.Version()$version.string)) != 1) { FALSE } else { to <- .fastr.interop.new(.fastr.java.class('com.oracle.truffle.r.test.library.fastr.TestJavaInterop$TestClass')); is.qr(to) }
+[1] FALSE
+
+##com.oracle.truffle.r.test.library.fastr.TestJavaInterop.testIsXXXForForeignObject#
+#if (length(grep("FastR", R.Version()$version.string)) != 1) { FALSE } else { to <- .fastr.interop.new(.fastr.java.class('com.oracle.truffle.r.test.library.fastr.TestJavaInterop$TestClass')); is.raster(to) }
+[1] FALSE
+
+##com.oracle.truffle.r.test.library.fastr.TestJavaInterop.testIsXXXForForeignObject#
+#if (length(grep("FastR", R.Version()$version.string)) != 1) { FALSE } else { to <- .fastr.interop.new(.fastr.java.class('com.oracle.truffle.r.test.library.fastr.TestJavaInterop$TestClass')); is.raw(to) }
+[1] FALSE
+
+##com.oracle.truffle.r.test.library.fastr.TestJavaInterop.testIsXXXForForeignObject#
+#if (length(grep("FastR", R.Version()$version.string)) != 1) { FALSE } else { to <- .fastr.interop.new(.fastr.java.class('com.oracle.truffle.r.test.library.fastr.TestJavaInterop$TestClass')); is.recursive(to) }
+[1] FALSE
+
+##com.oracle.truffle.r.test.library.fastr.TestJavaInterop.testIsXXXForForeignObject#
+#if (length(grep("FastR", R.Version()$version.string)) != 1) { FALSE } else { to <- .fastr.interop.new(.fastr.java.class('com.oracle.truffle.r.test.library.fastr.TestJavaInterop$TestClass')); is.relistable(to) }
+[1] FALSE
+
+##com.oracle.truffle.r.test.library.fastr.TestJavaInterop.testIsXXXForForeignObject#
+#if (length(grep("FastR", R.Version()$version.string)) != 1) { FALSE } else { to <- .fastr.interop.new(.fastr.java.class('com.oracle.truffle.r.test.library.fastr.TestJavaInterop$TestClass')); is.stepfun(to) }
+[1] FALSE
+
+##com.oracle.truffle.r.test.library.fastr.TestJavaInterop.testIsXXXForForeignObject#
+#if (length(grep("FastR", R.Version()$version.string)) != 1) { FALSE } else { to <- .fastr.interop.new(.fastr.java.class('com.oracle.truffle.r.test.library.fastr.TestJavaInterop$TestClass')); is.symbol(to) }
+[1] FALSE
+
+##com.oracle.truffle.r.test.library.fastr.TestJavaInterop.testIsXXXForForeignObject#
+#if (length(grep("FastR", R.Version()$version.string)) != 1) { FALSE } else { to <- .fastr.interop.new(.fastr.java.class('com.oracle.truffle.r.test.library.fastr.TestJavaInterop$TestClass')); is.table(to) }
+[1] FALSE
+
+##com.oracle.truffle.r.test.library.fastr.TestJavaInterop.testIsXXXForForeignObject#
+#if (length(grep("FastR", R.Version()$version.string)) != 1) { FALSE } else { to <- .fastr.interop.new(.fastr.java.class('com.oracle.truffle.r.test.library.fastr.TestJavaInterop$TestClass')); is.ts(to) }
+[1] FALSE
+
+##com.oracle.truffle.r.test.library.fastr.TestJavaInterop.testIsXXXForForeignObject#
+#if (length(grep("FastR", R.Version()$version.string)) != 1) { FALSE } else { to <- .fastr.interop.new(.fastr.java.class('com.oracle.truffle.r.test.library.fastr.TestJavaInterop$TestClass')); is.tskernel(to) }
+[1] FALSE
+
+##com.oracle.truffle.r.test.library.fastr.TestJavaInterop.testIsXXXForForeignObject#
+#if (length(grep("FastR", R.Version()$version.string)) != 1) { FALSE } else { to <- .fastr.interop.new(.fastr.java.class('com.oracle.truffle.r.test.library.fastr.TestJavaInterop$TestClass')); is.unsorted(to) }
+[1] FALSE
+
+##com.oracle.truffle.r.test.library.fastr.TestJavaInterop.testIsXXXForForeignObject#
+#if (length(grep("FastR", R.Version()$version.string)) != 1) { FALSE } else { to <- .fastr.interop.new(.fastr.java.class('com.oracle.truffle.r.test.library.fastr.TestJavaInterop$TestClass')); is.vector(to) }
+[1] FALSE
+
+##com.oracle.truffle.r.test.library.fastr.TestJavaInterop.testIsXXXForForeignObject#
+#if (length(grep("FastR", R.Version()$version.string)) != 1) { cat('Error in is.finite(to) : ', '<<<NEWLINE>>>', '  default method not implemented for type \'external object\'<<<NEWLINE>>>', sep='') } else { to <- .fastr.interop.new(.fastr.java.class('com.oracle.truffle.r.test.library.fastr.TestJavaInterop$TestClass')); is.finite(to) }
+Error in is.finite(to) :
+  default method not implemented for type 'external object'
+
+##com.oracle.truffle.r.test.library.fastr.TestJavaInterop.testIsXXXForForeignObject#
+#if (length(grep("FastR", R.Version()$version.string)) != 1) { cat('Error in is.infinite(to) : ', '<<<NEWLINE>>>', '  default method not implemented for type \'external object\'<<<NEWLINE>>>', sep='') } else { to <- .fastr.interop.new(.fastr.java.class('com.oracle.truffle.r.test.library.fastr.TestJavaInterop$TestClass')); is.infinite(to) }
+Error in is.infinite(to) :
+  default method not implemented for type 'external object'
+
+##com.oracle.truffle.r.test.library.fastr.TestJavaInterop.testIsXXXForForeignObject#
+#if (length(grep("FastR", R.Version()$version.string)) != 1) { cat('Error in is.nan(to) : ', '<<<NEWLINE>>>', '  default method not implemented for type \'external object\'<<<NEWLINE>>>', sep='') } else { to <- .fastr.interop.new(.fastr.java.class('com.oracle.truffle.r.test.library.fastr.TestJavaInterop$TestClass')); is.nan(to) }
+Error in is.nan(to) :
+  default method not implemented for type 'external object'
+
 ##com.oracle.truffle.r.test.library.fastr.TestJavaInterop.testMethods#
 #if (length(grep("FastR", R.Version()$version.string)) != 1) { "a string" } else { tc <- .fastr.java.class('com.oracle.truffle.r.test.library.fastr.TestJavaInterop$TestClass'); t <- .fastr.interop.new(tc); t$methodStaticStringObject() }
 [1] "a string"
@@ -131282,77 +131520,67 @@ NULL
 [external object]
 [1] 1 2 3
 
-##com.oracle.truffle.r.test.library.fastr.TestJavaInterop.testNamesForJavaObject#
+##com.oracle.truffle.r.test.library.fastr.TestJavaInterop.testNamesForForeignObject#
 #if (length(grep("FastR", R.Version()$version.string)) != 1) { NULL } else { cl <- .fastr.java.class('java.util.Collections'); em<-cl$EMPTY_MAP; names(em) }
 NULL
 
-##com.oracle.truffle.r.test.library.fastr.TestJavaInterop.testNamesForJavaObject#
+##com.oracle.truffle.r.test.library.fastr.TestJavaInterop.testNamesForForeignObject#
 #if (length(grep("FastR", R.Version()$version.string)) != 1) { NULL } else { tc <- .fastr.java.class('com.oracle.truffle.r.test.library.fastr.TestJavaInterop$TestNamesClass'); names(tc$staticField) }
 NULL
 
-##com.oracle.truffle.r.test.library.fastr.TestJavaInterop.testNamesForJavaObject#
+##com.oracle.truffle.r.test.library.fastr.TestJavaInterop.testNamesForForeignObject#
 #if (length(grep("FastR", R.Version()$version.string)) != 1) { NULL } else { tc <- .fastr.java.class('com.oracle.truffle.r.test.library.fastr.TestJavaInterop$TestNamesClass'); names(tc$staticMethod) }
 NULL
 
-##com.oracle.truffle.r.test.library.fastr.TestJavaInterop.testNamesForJavaObject#
+##com.oracle.truffle.r.test.library.fastr.TestJavaInterop.testNamesForForeignObject#
 #if (length(grep("FastR", R.Version()$version.string)) != 1) { NULL } else { tc <- .fastr.java.class('com.oracle.truffle.r.test.library.fastr.TestJavaInterop$TestNamesClassNoMembers'); t <- .fastr.interop.new(tc); names(t) }
 NULL
 
-##com.oracle.truffle.r.test.library.fastr.TestJavaInterop.testNamesForJavaObject#
+##com.oracle.truffle.r.test.library.fastr.TestJavaInterop.testNamesForForeignObject#
 #if (length(grep("FastR", R.Version()$version.string)) != 1) { NULL } else { tc <- .fastr.java.class('com.oracle.truffle.r.test.library.fastr.TestJavaInterop$TestNamesClassNoPublicMembers'); t <- .fastr.interop.new(tc); names(t) }
 NULL
 
-##com.oracle.truffle.r.test.library.fastr.TestJavaInterop.testNamesForJavaObject#
+##com.oracle.truffle.r.test.library.fastr.TestJavaInterop.testNamesForForeignObject#
 #if (length(grep("FastR", R.Version()$version.string)) != 1) { c('field', 'method', 'staticField', 'staticMethod') } else { tc <- .fastr.java.class('com.oracle.truffle.r.test.library.fastr.TestJavaInterop$TestNamesClass'); t <- .fastr.interop.new(tc); sort(names(t)) }
 [1] "field"        "method"       "staticField"  "staticMethod"
 
-##com.oracle.truffle.r.test.library.fastr.TestJavaInterop.testNamesForJavaObject#
+##com.oracle.truffle.r.test.library.fastr.TestJavaInterop.testNamesForForeignObject#
 #if (length(grep("FastR", R.Version()$version.string)) != 1) { c('one', 'two') } else { tc <- .fastr.java.class('com.oracle.truffle.r.test.library.fastr.TestJavaInterop$TestNamesClassMap'); t <- .fastr.interop.new(tc); sort(names(t$m())) }
 [1] "one" "two"
 
-##com.oracle.truffle.r.test.library.fastr.TestJavaInterop.testNamesForJavaObject#
+##com.oracle.truffle.r.test.library.fastr.TestJavaInterop.testNamesForForeignObject#
 #if (length(grep("FastR", R.Version()$version.string)) != 1) { c('staticField', 'staticMethod') } else { tc <- .fastr.java.class('com.oracle.truffle.r.test.library.fastr.TestJavaInterop$TestNamesClass'); sort(names(tc)) }
 [1] "staticField"  "staticMethod"
 
-##com.oracle.truffle.r.test.library.fastr.TestJavaInterop.testNew#
-#if (length(grep("FastR", R.Version()$version.string)) != 1) { 'a' } else { tc <- .fastr.java.class('java.lang.Character'); t <- .fastr.interop.new(tc, .fastr.interop.toChar(97)); t }
-[1] "a"
-
-##com.oracle.truffle.r.test.library.fastr.TestJavaInterop.testNew#
-#if (length(grep("FastR", R.Version()$version.string)) != 1) { 'abc' } else { tc <- .fastr.java.class('java.lang.String'); t <- .fastr.interop.new(tc, 'abc'); t }
-[1] "abc"
-
-##com.oracle.truffle.r.test.library.fastr.TestJavaInterop.testNew#
-#if (length(grep("FastR", R.Version()$version.string)) != 1) { 'truffle.object' } else { tc <- .fastr.java.class('com.oracle.truffle.r.test.library.fastr.TestJavaInterop$TestNullClass'); t <- .fastr.interop.new(tc, NULL); class(t) }
-[1] "truffle.object"
-
-##com.oracle.truffle.r.test.library.fastr.TestJavaInterop.testNew#
-#if (length(grep("FastR", R.Version()$version.string)) != 1) { 1 } else { tc <- .fastr.java.class('java.lang.Byte'); t <- .fastr.interop.new(tc, .fastr.interop.toByte(1)); t }
-[1] 1
+##com.oracle.truffle.r.test.library.fastr.TestJavaInterop.testNewWithJavaClass#
+#if (length(grep("FastR", R.Version()$version.string)) != 1) { 2147483647 } else { tc <- .fastr.java.class('com.oracle.truffle.r.test.library.fastr.TestJavaInterop$TestClass'); to <- new(tc); to$fieldInteger }
+[1] 2147483647
 
-##com.oracle.truffle.r.test.library.fastr.TestJavaInterop.testNew#
-#if (length(grep("FastR", R.Version()$version.string)) != 1) { 1 } else { tc <- .fastr.java.class('java.lang.Integer'); t <- .fastr.interop.new(tc, 1L); t }
-[1] 1
+##com.oracle.truffle.r.test.library.fastr.TestJavaInterop.testNewWithJavaClass#
+#if (length(grep("FastR", R.Version()$version.string)) != 1) { 2147483647 } else { to <- new('com.oracle.truffle.r.test.library.fastr.TestJavaInterop$TestClass'); to$fieldStaticInteger }
+[1] 2147483647
 
-##com.oracle.truffle.r.test.library.fastr.TestJavaInterop.testNew#
-#if (length(grep("FastR", R.Version()$version.string)) != 1) { 1 } else { tc <- .fastr.java.class('java.lang.Long'); t <- .fastr.interop.new(tc, .fastr.interop.toLong(1)); t }
-[1] 1
+##com.oracle.truffle.r.test.library.fastr.TestJavaInterop.testNewWithJavaClass#
+#if (length(grep("FastR", R.Version()$version.string)) != 1) { TRUE } else { tc <- .fastr.java.class('java.lang.Boolean'); to <- new(tc, TRUE); to }
+[1] TRUE
 
-##com.oracle.truffle.r.test.library.fastr.TestJavaInterop.testNew#
-#if (length(grep("FastR", R.Version()$version.string)) != 1) { 1 } else { tc <- .fastr.java.class('java.lang.Short'); t <- .fastr.interop.new(tc, .fastr.interop.toShort(1)); t }
-[1] 1
+##com.oracle.truffle.r.test.library.fastr.TestJavaInterop.testNewWithJavaClass#
+#if (length(grep("FastR", R.Version()$version.string)) != 1) { TRUE } else { to <- new('java.lang.Boolean', TRUE); to }
+[1] TRUE
 
-##com.oracle.truffle.r.test.library.fastr.TestJavaInterop.testNew#
-#if (length(grep("FastR", R.Version()$version.string)) != 1) { 1.1 } else { tc <- .fastr.java.class('java.lang.Double'); t <- .fastr.interop.new(tc, 1.1); t }
-[1] 1.1
+##com.oracle.truffle.r.test.library.fastr.TestJavaInterop.testNewWithJavaClass#
+#if (length(grep("FastR", R.Version()$version.string)) != 1) { TRUE } else { to <- new('java/lang/Boolean', TRUE); to }
+[1] TRUE
 
-##com.oracle.truffle.r.test.library.fastr.TestJavaInterop.testNew#
-#if (length(grep("FastR", R.Version()$version.string)) != 1) { 1.1 } else { tc <- .fastr.java.class('java.lang.Float'); t <- .fastr.interop.new(tc, .fastr.interop.toFloat(1.1)); t }
-[1] 1.1
+##com.oracle.truffle.r.test.library.fastr.TestJavaInterop.testNewWithJavaClass#
+#if (length(grep("FastR", R.Version()$version.string)) != 1) { cat('Error in .fastr.interop.new(Class, ...) : ', '<<<NEWLINE>>>', '  error during Java object instantiation<<<NEWLINE>>>', sep='') } else { to <- new('com.oracle.truffle.r.test.library.fastr.TestJavaInterop$TestClass'); new(to) }
+Error in .fastr.interop.new(Class, ...) :
+  error during Java object instantiation
 
-##com.oracle.truffle.r.test.library.fastr.TestJavaInterop.testNew#
-#if (length(grep("FastR", R.Version()$version.string)) != 1) { TRUE } else { tc <- .fastr.java.class('java.lang.Boolean'); t <- .fastr.interop.new(tc, TRUE); t }
-[1] TRUE
+##com.oracle.truffle.r.test.library.fastr.TestJavaInterop.testNewWithJavaClass#
+#if (length(grep("FastR", R.Version()$version.string)) != 1) { cat('Error in getClass(Class, where = topenv(parent.frame())) : ', '<<<NEWLINE>>>', '  “__bogus_class_name__” is not a defined class<<<NEWLINE>>>', sep='') } else { to <- new('__bogus_class_name__'); }
+Error in getClass(Class, where = topenv(parent.frame())) :
+  “__bogus_class_name__” is not a defined class
 
 ##com.oracle.truffle.r.test.library.fastr.TestJavaInterop.testNonPrimitiveParameter#
 #if (length(grep("FastR", R.Version()$version.string)) != 1) { TRUE } else { tc <- .fastr.java.class('com.oracle.truffle.r.test.library.fastr.TestJavaInterop$TestClass'); t <- .fastr.interop.new(tc); t$equals(t) }
@@ -138110,6 +138338,12 @@ Error in rbinom("aa", 10, 0.5) : invalid arguments
 In addition: Warning message:
 In rbinom("aa", 10, 0.5) : NAs introduced by coercion
 
+##com.oracle.truffle.r.test.library.stats.TestExternal_rbinom.testRbinom#
+#set.seed(42); rbinom(1, 2, 3)
+[1] NA
+Warning message:
+In rbinom(1, 2, 3) : NAs produced
+
 ##com.oracle.truffle.r.test.library.stats.TestExternal_rbinom.testRbinom#
 #set.seed(42); rbinom(10, 10, 0.5)
  [1] 7 7 4 7 6 5 6 3 6 6
@@ -141176,7 +141410,7 @@ B    5    8    4    7    6    2    6
 [2,]    2    0    0    1    0
 [3,]    1    2    3    2    3
 
-##com.oracle.truffle.r.test.library.stats.TestSplineFunctions.basicSplineCoef#Ignored.WrongCaller#
+##com.oracle.truffle.r.test.library.stats.TestSplineFunctions.basicSplineCoef#
 #.Call(stats:::C_SplineCoef, 'abc', c(1:5), c(1:5))
 $method
 [1] NA
@@ -141603,7 +141837,7 @@ $d
 [1] 0 0 0 0 0
 
 
-##com.oracle.truffle.r.test.library.stats.TestSplineFunctions.basicSplineCoef#Ignored.WrongCaller#
+##com.oracle.truffle.r.test.library.stats.TestSplineFunctions.basicSplineCoef#
 #.Call(stats:::C_SplineCoef, c('a'), c(1), c(1))
 $method
 [1] NA
diff --git a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/TestBase.java b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/TestBase.java
index 6fa10c3bd8c69b28d712e5a989b84171be46d764..e52b7226f056a3623ab659264c67f766e4ef41a5 100644
--- a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/TestBase.java
+++ b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/TestBase.java
@@ -64,6 +64,16 @@ import com.oracle.truffle.r.test.generate.TestOutputManager;
 public class TestBase {
 
     public static final boolean ProcessFailedTests = Boolean.getBoolean("ProcessFailedTests");
+    /**
+     * When {@link #ProcessFailedTests} is set to true this flag further limits the tests executed
+     * to those with {@link Ignored#Unknown} flag.
+     */
+    public static final boolean IgnoredUnknownOnlyTests = Boolean.getBoolean("IgnoredUnknownOnlyTests");
+    /**
+     * When {@link #ProcessFailedTests} is set to true show the same results like for regular tests
+     * (normally just statistical info would be shown).
+     */
+    public static final boolean ShowFailedTestsResults = Boolean.getBoolean("ShowFailedTestsResults");
 
     /**
      * See {@link com.oracle.truffle.r.test.builtins.TestTestBase} for examples.
@@ -73,8 +83,10 @@ public class TestBase {
         IgnoreErrorContext, // the error context is ignored (e.g., "a+b" vs. "a + b")
         IgnoreErrorMessage, // the actual error message is ignored
         IgnoreWarningContext, // the warning context is ignored
+        IgnoreWarningMessage, // the warning message is ignored
         MayIgnoreErrorContext, // like IgnoreErrorContext, but no warning if the messages match
         MayIgnoreWarningContext,
+        MissingWarning, // Test output is correct but a warning msg is missing in FastR output
         ContainsReferences, // replaces references in form of 0xbcdef1 for numbers
         IgnoreWhitespace, // removes all whitespace from the whole output
         IgnoreCase, // ignores upper/lower case differences
@@ -97,7 +109,6 @@ public class TestBase {
         ImplementationError("tests that fail because of bugs in other parts of the runtime"),
         ReferenceError("tests that fail because of faulty behavior in the reference implementation that we don't want to emulate"),
         SideEffects("tests that are ignored because they would interfere with other tests"),
-        MissingWarning("tests that fail because of missing warnings"),
         MissingBuiltin("tests that fail because of missing builtins"),
         Unimplemented("tests that fail because of missing functionality");
 
@@ -469,12 +480,12 @@ public class TestBase {
     }
 
     // support testing of FastR-only functionality (equivalent GNU R output provided separately)
-    protected void assertEvalFastR(TestTrait trait1, String input, String gnuROutput) {
-        evalAndCompare(getAssertEvalFastR(gnuROutput, input), trait1);
+    protected boolean assertEvalFastR(TestTrait trait1, String input, String gnuROutput) {
+        return evalAndCompare(getAssertEvalFastR(gnuROutput, input), trait1);
     }
 
-    protected void assertEvalFastR(String input, String gnuROutput) {
-        evalAndCompare(getAssertEvalFastR(gnuROutput, input));
+    protected boolean assertEvalFastR(String input, String gnuROutput) {
+        return evalAndCompare(getAssertEvalFastR(gnuROutput, input));
     }
 
     private static String[] getAssertEvalFastR(String gnuROutput, String input) {
@@ -552,7 +563,7 @@ public class TestBase {
     }
 
     private static void microTestFailed() {
-        if (!ProcessFailedTests) {
+        if (!ProcessFailedTests || ShowFailedTestsResults) {
             System.err.printf("%nMicro-test failure: %s%n", getTestContext());
             System.err.printf("%16s %s%n", "Expression:", microTestInfo.expression);
             System.err.printf("%16s %s", "Expected output:", microTestInfo.expectedOutput);
@@ -603,7 +614,8 @@ public class TestBase {
             output.addAll(Arrays.asList(TestTrait.collect(traits, Output.class)));
             context.addAll(Arrays.asList(TestTrait.collect(traits, Context.class)));
             containsError = (!FULL_COMPARE_ERRORS && (output.contains(Output.IgnoreErrorContext) || output.contains(Output.ImprovedErrorContext) || output.contains(Output.IgnoreErrorMessage)));
-            isIgnored = ignored.size() > 0 ^ (ProcessFailedTests && !(ignored.contains(Ignored.Unstable) || ignored.contains(Ignored.SideEffects)));
+            isIgnored = ignored.size() > 0 ^ (ProcessFailedTests && (!IgnoredUnknownOnlyTests || (IgnoredUnknownOnlyTests && ignored.contains(Ignored.Unknown))) &&
+                            !(ignored.contains(Ignored.Unstable) || ignored.contains(Ignored.SideEffects)));
             assert !output.contains(Output.IgnoreWhitespace) || output.size() == 1 : "IgnoreWhitespace trait does not work with any other Output trait";
 
         }
@@ -628,15 +640,16 @@ public class TestBase {
         }
     }
 
-    private void evalAndCompare(String[] inputs, TestTrait... traitsList) {
+    private boolean evalAndCompare(String[] inputs, TestTrait... traitsList) {
         WhiteList[] whiteLists = TestTrait.collect(traitsList, WhiteList.class);
         TestTraitsSet traits = new TestTraitsSet(traitsList);
         ContextInfo contextInfo = traits.context.contains(Context.NonShared) ? fastROutputManager.fastRSession.createContextInfo(ContextKind.SHARE_NOTHING) : null;
         int index = 1;
         boolean allOk = true;
+        boolean skipFastREval = traits.isIgnored || generatingExpected();
         for (String input : inputs) {
             String expected = expectedEval(input, traitsList);
-            if (traits.isIgnored || generatingExpected()) {
+            if (skipFastREval) {
                 ignoredInputCount++;
             } else {
                 String result = fastREval(input, contextInfo, traits.context.contains(Context.LongTimeout));
@@ -683,6 +696,7 @@ public class TestBase {
         } else {
             failedTestCount++;
         }
+        return !skipFastREval;
     }
 
     private static class CheckResult {
@@ -707,14 +721,22 @@ public class TestBase {
             if (traits.containsError && !traits.output.contains(Output.IgnoreErrorMessage)) {
                 System.out.println("unexpected correct error message: " + getTestContext());
             }
-            if (traits.output.contains(Output.IgnoreWarningContext)) {
+            if (traits.output.contains(Output.IgnoreWarningContext) || traits.output.contains(Output.IgnoreWarningMessage)) {
                 System.out.println("unexpected correct warning message: " + getTestContext());
             }
         } else {
-            if (traits.output.contains(Output.IgnoreWarningContext) || (traits.output.contains(Output.MayIgnoreWarningContext) && expected.contains(WARNING))) {
+            if (traits.output.contains(Output.MissingWarning)) {
+                boolean expectedContainsWarning = expected.contains(WARNING);
+                if (!expectedContainsWarning) {
+                    System.out.println("unexpected missing warning message:" + getTestContext());
+                }
+                ok = expectedContainsWarning && !result.contains(WARNING);
+                expected = getOutputWithoutWarning(expected);
+            } else if (traits.output.contains(Output.IgnoreWarningContext) || traits.output.contains(Output.IgnoreWarningMessage) ||
+                            (traits.output.contains(Output.MayIgnoreWarningContext) && expected.contains(WARNING))) {
                 String resultWarning = getWarningMessage(result);
                 String expectedWarning = getWarningMessage(expected);
-                ok = resultWarning.equals(expectedWarning);
+                ok = resultWarning.equals(expectedWarning) || traits.output.contains(Output.IgnoreWarningMessage);
                 result = getOutputWithoutWarning(result);
                 expected = getOutputWithoutWarning(expected);
             } else {
@@ -905,7 +927,7 @@ public class TestBase {
             Integer count = exceptionCounts.get(clazz);
             exceptionCounts.put(clazz, count == null ? 1 : count + 1);
             result = e.toString();
-            if (!ProcessFailedTests) {
+            if (!ProcessFailedTests || ShowFailedTestsResults) {
                 e.printStackTrace();
             }
         }
diff --git a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/TestRBase.java b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/TestRBase.java
index 69a51571c41f298b060439b7061e463ee4d54dc4..6d4317791a4276e61b257c0661251ce5059fe22a 100644
--- a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/TestRBase.java
+++ b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/TestRBase.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2016, 2017, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -84,7 +84,15 @@ public class TestRBase extends TestBase {
                         } else if (l.contains("IgnoreWarningContext")) {
                             testTrait = Output.IgnoreWarningContext;
                         } else if (l.contains("Ignored")) {
-                            testTrait = Ignored.Unknown;
+                            for (Ignored ignoredType : Ignored.values()) {
+                                if (l.contains("Ignored." + ignoredType.name())) {
+                                    testTrait = ignoredType;
+                                    break;
+                                }
+                            }
+                            if (testTrait == null) {
+                                testTrait = Ignored.Unknown; // Retain old way for compatibility
+                            }
                         }
                     }
                 }
diff --git a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_ISOdatetime.java b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_ISOdatetime.java
index 82c91d658c6a64bd5040657dce3c25d47efe0e89..58e8f1224fcdfee9d7b1ccd490d336cbd40fc406 100644
--- a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_ISOdatetime.java
+++ b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_ISOdatetime.java
@@ -4,7 +4,7 @@
  * http://www.gnu.org/licenses/gpl-2.0.html
  *
  * Copyright (c) 2014, Purdue University
- * Copyright (c) 2014, 2016, Oracle and/or its affiliates
+ * Copyright (c) 2014, 2017, Oracle and/or its affiliates
  *
  * All rights reserved.
  */
@@ -20,14 +20,17 @@ public class TestBuiltin_ISOdatetime extends TestBase {
 
     @Test
     public void testISOdatetime1() {
-        assertEval(Ignored.Unknown,
+        // FIXME FastR returns NA
+        assertEval(Ignored.ImplementationError,
                         "argv <- structure(list(year = 1970, month = 1, day = 1, hour = 0,     min = 0, sec = 0, tz = 'GMT'), .Names = c('year', 'month',     'day', 'hour', 'min', 'sec', 'tz'));" +
                                         "do.call('ISOdatetime', argv)");
     }
 
     @Test
     public void testISOdatetime2() {
-        assertEval(Ignored.Unknown, "argv <- structure(list(year = 2002, month = 6, day = 24, hour = 0,     min = 0, sec = 10), .Names = c('year', 'month', 'day', 'hour',     'min', 'sec'));" +
-                        "do.call('ISOdatetime', argv)");
+        // FIXME FastR returns NA
+        assertEval(Ignored.ImplementationError,
+                        "argv <- structure(list(year = 2002, month = 6, day = 24, hour = 0,     min = 0, sec = 10), .Names = c('year', 'month', 'day', 'hour',     'min', 'sec'));" +
+                                        "do.call('ISOdatetime', argv)");
     }
 }
diff --git a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_La.java b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_La.java
index 62d41240e2cc18d44aaec3a0c5e5a8ca13c12736..bedd0f6b53227c781598001fa35e63bb4713b65e 100644
--- a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_La.java
+++ b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_La.java
@@ -19,7 +19,9 @@ public class TestBuiltin_La extends TestBase {
 
     @Test
     public void testLa1() {
-        assertEval(Ignored.Unknown,
+        // FIXME numerical results are almost all different
+        // and FastR output misses "(Intercept) Rail2 Rail3 ..." heading
+        assertEval(Ignored.ImplementationError,
                         "argv <- list(structure(c(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0), .Dim = c(18L, 7L), .Dimnames = list(c('1', '2', '3', '4', '5', '6', '7', '8', '9', '10', '11', '12', '13', '14', '15', '16', '17', '18'), c('(Intercept)', 'Rail2', 'Rail5', 'Rail1', 'Rail6', 'Rail3', 'Rail4')))); .Internal(La_qr(argv[[1]]))");
     }
 
@@ -40,7 +42,8 @@ public class TestBuiltin_La extends TestBase {
 
     @Test
     public void testLa4() {
-        assertEval(Ignored.Unknown,
+        // FIXME RInternalError: not implemented: .Internal La_svd
+        assertEval(Ignored.Unimplemented,
                         "argv <- list('S', structure(c(1, 0, 0, 0, 0, 1.4142135623731, 0, 0, 0, 0, 1.73205080756888, 0, 0, 0, 0, 2), .Dim = c(4L, 4L), Dimnames = list(character(0), character(0))), c(2, 1.73205080756888, 1.4142135623731, 1), structure(c(0, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 0), .Dim = c(4L, 4L)), structure(c(0, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 0), .Dim = c(4L, 4L))); .Internal(La_svd(argv[[1]], argv[[2]], argv[[3]], argv[[4]], argv[[5]]))");
     }
 
@@ -51,18 +54,21 @@ public class TestBuiltin_La extends TestBase {
 
     @Test
     public void testLa6() {
-        assertEval(Ignored.Unknown,
+        // FIXME RInternalError: not implemented: .Internal La_svd
+        assertEval(Ignored.Unimplemented,
                         "argv <- list('S', structure(c(FALSE, TRUE, FALSE, TRUE, TRUE, FALSE, TRUE, TRUE, TRUE, FALSE, TRUE, FALSE, TRUE, TRUE, FALSE, TRUE, FALSE, FALSE, FALSE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE), .Dim = c(5L, 5L)), c(3.37916576339493, 1.53572230863579, 1.41421356237309, 0.472012430194285, 3.04287016253022e-18), structure(c(-0.38209344041777, -0.441911867608196, -0.441911867608196, -0.563415484445979, -0.38209344041777, -0.594200765232569, 0.307687929858406, 0.307687929858405, 0.32327569786942, -0.594200765232566, 0.499999999999999, -0.5, 0.500000000000001, 7.42461647718073e-16, -0.500000000000001, 0.0304967766615352, 0.45830343560406, 0.458303435604061, -0.760299819185526, 0.0304967766615352, -0.5, -0.5, 0.5, -1.11022302462516e-16, 0.5), .Dim = c(5L, 5L)), structure(c(-0.41058086214689, 0.0239384830763564, -0.707106781186547, -0.575195883735897, 0, -0.428282990831553, 0.611211774620929, 9.15933995315754e-16, 0.331150287627506, 0.577350269189626, -0.41058086214689, 0.0239384830763538, 0.707106781186548, -0.575195883735897, 5.55111512312578e-17, -0.226146609649533, -0.773838814336698, -1.55431223447522e-15, 0.129220226886747, 0.577350269189625, -0.654429600481086, -0.162627039715767, -5.27355936696949e-16, 0.460370514514253, -0.577350269189626), .Dim = c(5L, 5L))); .Internal(La_svd(argv[[1]], argv[[2]], argv[[3]], argv[[4]], argv[[5]]))");
     }
 
     @Test
     public void testLa7() {
-        assertEval(Ignored.Unknown, "argv <- list(structure(c(1, 1, 3, 3), .Dim = c(2L, 2L)), 'O'); .Internal(La_dgecon(argv[[1]], argv[[2]]))");
+        // FIXME RInternalError: not implemented: .Internal La_dgecon
+        assertEval(Ignored.Unimplemented, "argv <- list(structure(c(1, 1, 3, 3), .Dim = c(2L, 2L)), 'O'); .Internal(La_dgecon(argv[[1]], argv[[2]]))");
     }
 
     @Test
     public void testLa8() {
-        assertEval(Ignored.Unknown,
+        // FIXME RInternalError: not implemented: .Internal La_svd
+        assertEval(Ignored.Unimplemented,
                         "argv <- list('N', structure(c(-4, 0, 0, 0, 0, 0, 0, -406.725, 41.7955066364795, 0, 0, 0, 0, 0, -1550.79375, 381.717151319926, 49.8228991342168, 0, 0, 0, 0, -1277.325, 224.617432123818, -31.1858918860748, -282.060212912726, 0, 0, 0, -1042.675, 125.261805546114, -29.9849484767744, 164.425554254677, -170.353263600129, 0, 0, -469.696, 26.3795103523805, 4.19691803785862, -3.18974110831568, 0.0462484557378925, 1.46320172717486, 0, -7818, 18.2758880432689, 1.77525956575195, -1.45298766739792, -0.449176219307484, -0.281900648530911, -0.669305080560524), .Dim = c(7L, 7L), .Dimnames = list(c('1947', '1948', '1949', '1950', '1951', '1952', '1953'), c('(Intercept)', 'GNP.deflator', 'GNP', 'Unemployed', 'Armed.Forces', 'Population', 'Year'))), c(8164.12940108939, 457.24498274114, 324.584423503013, 134.312174464868, 4.95553195929945, 1.41954832076337, 0.000342370904183799), structure(0, .Dim = c(1L, 1L)), structure(0, .Dim = c(1L, 1L))); .Internal(La_svd(argv[[1]], argv[[2]], argv[[3]], argv[[4]], argv[[5]]))");
     }
 
diff --git a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_acosh.java b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_acosh.java
index 123f2d9bf9ad59f3691bc8fe052b7c7cc281759d..bb4bdca22600ef5fccebccc35f6f90e897b9e9f9 100644
--- a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_acosh.java
+++ b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_acosh.java
@@ -4,7 +4,7 @@
  * http://www.gnu.org/licenses/gpl-2.0.html
  *
  * Copyright (c) 2014, Purdue University
- * Copyright (c) 2014, 2016, Oracle and/or its affiliates
+ * Copyright (c) 2014, 2017, Oracle and/or its affiliates
  *
  * All rights reserved.
  */
@@ -19,7 +19,10 @@ public class TestBuiltin_acosh extends TestBase {
 
     @Test
     public void testacosh1() {
-        assertEval(Ignored.Unknown, "argv <- list(FALSE);acosh(argv[[1]]);");
+        // FIXME missing warning:
+        // Warning message:
+        // In acosh(argv[[1]]) : NaNs produced
+        assertEval(Output.MissingWarning, "argv <- list(FALSE);acosh(argv[[1]]);");
     }
 
     @Test
diff --git a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_agrep.java b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_agrep.java
index 6783dd4542a4eee573c233e2539b279928a70a65..e8fb56be9845788a1566dcdad90d445142759a96 100644
--- a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_agrep.java
+++ b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_agrep.java
@@ -24,19 +24,24 @@ public class TestBuiltin_agrep extends TestBase {
 
     @Test
     public void testagrep3() {
-        assertEval(Ignored.Unknown,
+        // FIXME: GnuR seems to be right, 1 edit necessary for first string of x
+        // and when deletions set to 0 then only second string of x should pass.
+        // TODO verify expected algorithm behavior according to input args values
+        assertEval(Ignored.ImplementationError,
                         "argv <- list('lasy', c(' 1 lazy 2', '1 lasy 2'), FALSE, FALSE, c(1L, 1L, 1L), structure(c(NA, 0.1, 0.1, 0, 0.1), .Names = c('cost', 'insertions', 'deletions', 'substitutions', 'all')), FALSE, TRUE); .Internal(agrep(argv[[1]], argv[[2]], argv[[3]], argv[[4]], argv[[5]], argv[[6]], argv[[7]], argv[[8]]))");
     }
 
     @Test
     public void testagrep4() {
-        assertEval(Ignored.Unknown,
+        // FIXME not yet implemented: value == true
+        assertEval(Ignored.Unimplemented,
                         "argv <- list('laysy', c('1 lazy', '1', '1 LAZY'), FALSE, TRUE, c(1L, 1L, 1L), c(2, NA, NA, NA, NA), FALSE, TRUE); .Internal(agrep(argv[[1]], argv[[2]], argv[[3]], argv[[4]], argv[[5]], argv[[6]], argv[[7]], argv[[8]]))");
     }
 
     @Test
     public void testagrep5() {
-        assertEval(Ignored.Unknown,
+        // FIXME not yet implemented: ignoreCase == true
+        assertEval(Ignored.Unimplemented,
                         "argv <- list('laysy', c('1 lazy', '1', '1 LAZY'), TRUE, FALSE, c(1L, 1L, 1L), c(2, NA, NA, NA, NA), FALSE, TRUE); .Internal(agrep(argv[[1]], argv[[2]], argv[[3]], argv[[4]], argv[[5]], argv[[6]], argv[[7]], argv[[8]]))");
     }
 
diff --git a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_anyDuplicated.java b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_anyDuplicated.java
index 4459a88831f0cda841576e8e6e45931c7019b20a..c341da371c863d86f83700e7f625222080c9d22e 100644
--- a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_anyDuplicated.java
+++ b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_anyDuplicated.java
@@ -99,7 +99,8 @@ public class TestBuiltin_anyDuplicated extends TestBase {
 
     @Test
     public void testanyDuplicated18() {
-        assertEval(Ignored.Unknown,
+        // FIXME RInternalError: java.lang.ArrayIndexOutOfBoundsException: 0
+        assertEval(Ignored.ImplementationError,
                         "argv <- structure(list(x = structure(c(3, 2, 7, 2, 6, 2, 7, 2),     .Dim = c(4L, 2L), .Dimnames = list(c('A', 'B', 'C', 'D'),         c('M', 'F'))), MARGIN = 0), .Names = c('x', 'MARGIN'));" +
                                         "do.call('anyDuplicated', argv)");
     }
diff --git a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_anyDuplicatedmatrix.java b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_anyDuplicatedmatrix.java
index b2fcc0c0373702224fecbdd72dc49134aaceda18..431b920e047a30de4e9b6c8d9852d7ece22d202f 100644
--- a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_anyDuplicatedmatrix.java
+++ b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_anyDuplicatedmatrix.java
@@ -4,7 +4,7 @@
  * http://www.gnu.org/licenses/gpl-2.0.html
  *
  * Copyright (c) 2014, Purdue University
- * Copyright (c) 2014, 2016, Oracle and/or its affiliates
+ * Copyright (c) 2014, 2017, Oracle and/or its affiliates
  *
  * All rights reserved.
  */
@@ -20,7 +20,8 @@ public class TestBuiltin_anyDuplicatedmatrix extends TestBase {
 
     @Test
     public void testanyDuplicatedmatrix1() {
-        assertEval(Ignored.Unknown,
+        // FIXME RInternalError: java.lang.ArrayIndexOutOfBoundsException: 0
+        assertEval(Ignored.ImplementationError,
                         "argv <- structure(list(x = structure(c(3, 2, 7, 2, 6, 2, 7, 2),     .Dim = c(4L, 2L), .Dimnames = list(c('A', 'B', 'C', 'D'),         c('M', 'F'))), MARGIN = 0), .Names = c('x', 'MARGIN'));" +
                                         "do.call('anyDuplicated.matrix', argv)");
     }
diff --git a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_aperm.java b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_aperm.java
index 9bd788df9e25b5e4f3680b76a72e6adde86d5bb5..6974bfef2a476fabd8c526c36d7333b646685999 100644
--- a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_aperm.java
+++ b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_aperm.java
@@ -19,7 +19,8 @@ public class TestBuiltin_aperm extends TestBase {
 
     @Test
     public void testaperm1() {
-        assertEval(Ignored.Unknown,
+        // FIXME .Dimnames not transposed
+        assertEval(Ignored.ImplementationError,
                         "argv <- list(structure(c(FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE), .Dim = c(5L, 14L), .Dimnames = list(c('#ifdef', '\\\\Sexpr', 'build', 'install', 'render'), NULL)), c(2L, 1L), TRUE); .Internal(aperm(argv[[1]], argv[[2]], argv[[3]]))");
     }
 
@@ -35,19 +36,22 @@ public class TestBuiltin_aperm extends TestBase {
 
     @Test
     public void testaperm4() {
-        assertEval(Ignored.Unknown,
+        // FIXME .Dimnames not transposed
+        assertEval(Ignored.ImplementationError,
                         "argv <- list(structure(c(0L, 0L, 0L, 1L, 0L, 1L, 1L, 1L), .Dim = c(1L, 8L), .Dimnames = list('strata(enum)', c('rx', 'size', 'number', 'strata(enum)', 'cluster(id)', 'rx:strata(enum)', 'size:strata(enum)', 'number:strata(enum)'))), 1:2, TRUE); .Internal(aperm(argv[[1]], argv[[2]], argv[[3]]))");
     }
 
     @Test
     public void testaperm5() {
-        assertEval(Ignored.Unknown,
+        // FIXME .Dimnames not transposed
+        assertEval(Ignored.ImplementationError,
                         "argv <- list(structure(c(9.2319289524956, -0.470372045488369, 186.857050189827), .Dim = c(1L, 3L), .Dimnames = list('118', c('age', 'sex', 'meal.cal'))), 1:2, TRUE); .Internal(aperm(argv[[1]], argv[[2]], argv[[3]]))");
     }
 
     @Test
     public void testaperm6() {
-        assertEval(Ignored.Unknown,
+        // FIXME .Dimnames not transposed
+        assertEval(Ignored.ImplementationError,
                         "argv <- list(structure(c(414L, 439L, 382L, 388L, 383L, 364L, 364L, 363L, 349L, 371L, 102L, 388L, 388L, 363L, 367L, 365L, 382L, 362L, 373L, 385L, 376L, 360L, 306L, 160L, 316L, 316L, 315L, 357L, 360L, 347L, 353L, 308L, 327L, 329L, 343L, 251L, 318L, 304L, 316L, 335L, 365L, 336L, 350L, 356L, 339L, 301L, 330L, 300L, 300L, 312L, 334L, 270L, 347L, 293L, 303L, 337L, 287L, 293L, 293L, 318L, 359L, 351L, 322L, 343L, 269L, 286L, 286L, 273L, 297L, 273L, 273L, 273L, 294L, 303L, 281L, 273L, 255L, 269L, 270L, 270L, 276L, 264L, 245L, 261L, 270L, 273L, 306L, 274L, 279L, 278L, 278L, 284L, 276L, 265L, 294L, 277L, 259L, 287L, 263L, 240L, 217L, 271L, 252L, 331L, 255L, 271L, 254L, 185L, 213L, 210L, 203L, 288L, 269L, 269L, 91L, 91L, 192L, 199L, 195L, 198L, 207L, 200L, 197L, 243L, 203L, 197L, 227L, 227L, 219L, 8L, NA, NA, 246L, NA, 292L, NA, 294L, NA, 19L, 373L, NA, 211L, 82L, NA, 334L, 18L, NA, 280L, NA, NA, NA, NA, 146L, NA, NA, NA, 267L, 206L, 175L, NA, NA, NA, NA, 118L, NA, NA, NA, NA, 274L, NA, NA, 187L, NA, 6L, NA, NA, 146L, 304L, NA, 52L, 67L, NA, 265L, NA, 91L, NA, NA, NA, 318L, 57L, 226L, 65L, NA, 264L, NA, NA, NA, 236L, NA, 207L, NA, NA, NA, NA, NA, NA, 23L, NA, NA, NA, NA, NA, NA, 113L, 99L, NA, NA, 14L, NA, NA, NA, NA, NA, NA, NA, 4L, NA, 167L, NA, NA, NA, NA, NA, NA, NA, NA, NA, 165L, NA, NA, NA, NA, NA, NA, NA, NA, 11L, NA, NA, 168L, NA, NA, 120L, NA, 104L, NA, 373L, 26L, NA, NA, 253L, NA, NA, NA, NA, NA, NA, NA, NA, 260L, 114L, NA, 370L, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 280L, NA, NA, NA, NA, 240L, NA, NA, NA, NA, 361L, NA, NA, NA, NA, NA, NA, NA, 188L, NA, NA, 65L, 248L, NA, NA, NA, 121L, NA, NA, NA, NA, 121L, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 306L, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 159L, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 22L, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 152L, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 265L, 337L, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 255L, 250L, NA, NA, NA, 203L, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 213L, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 169L, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 241L, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 269L, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 284L, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 249L, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 307L, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 322L, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 350L, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA), .Dim = c(128L, 8L), .Dimnames = list(    NULL, c('futime', 'e1', 'e2', 'e3', 'e4', 'e5', 'e6', 'e7'))), c(2L, 1L), TRUE); .Internal(aperm(argv[[1]], argv[[2]], argv[[3]]))");
     }
 
@@ -58,7 +62,8 @@ public class TestBuiltin_aperm extends TestBase {
 
     @Test
     public void testaperm8() {
-        assertEval(Ignored.Unknown,
+        // FIXME .Dimnames not transposed
+        assertEval(Ignored.ImplementationError,
                         "argv <- list(structure(c(544.790381900886, 398.486952468991, 440.879079007027, 273.26068924187, -165.547292067734, -289.908895455829, -336.563851641157, -433.491123254512, -446.830170210184, -229.698549757081, 7.43503106965538, 237.187718724823, 544.790381900886, 398.486952468991, 440.879079007027, 273.26068924187, -165.547292067734, -289.908895455829, -336.563851641157, -433.491123254512, -446.830170210184, -229.698549757081, 7.43503106965538, 237.187718724823, 544.790381900886, 398.486952468991, 440.879079007027, 273.26068924187, -165.547292067734, -289.908895455829, -336.563851641157, -433.491123254512, -446.830170210184, -229.698549757081, 7.43503106965538, 237.187718724823, 544.790381900886, 398.486952468991, 440.879079007027, 273.26068924187, -165.547292067734, -289.908895455829, -336.563851641157, -433.491123254512, -446.830170210184, -229.698549757081, 7.43503106965538, 237.187718724823, 544.790381900886, 398.486952468991, 440.879079007027, 273.26068924187, -165.547292067734, -289.908895455829, -336.563851641157, -433.491123254512, -446.830170210184, -229.698549757081, 7.43503106965538, 237.187718724823, 544.790381900886, 398.486952468991, 440.879079007027, 273.26068924187, -165.547292067734, -289.908895455829, -336.563851641157, -433.491123254512, -446.830170210184, -229.698549757081, 7.43503106965538, 237.187718724823, 1539.44739946315, 1548.66655077773, 1557.88570209231, 1566.45228027983, 1575.01885846735, 1583.14083472285, 1591.26281097836, 1599.26100149451, 1607.25919201066, 1611.39689466313, 1615.5345973156, 1612.61129444623, 1609.68799157686, 1603.44643859537, 1597.20488561388, 1588.73002343463, 1580.25516125537, 1570.86127478964, 1561.46738832392, 1549.89535441445, 1538.32332050498, 1524.62526591843, 1510.92721133189, 1499.65830819836, 1488.38940506483, 1479.31388700637, 1470.23836894792, 1460.03887936132, 1449.83938977473, 1441.27547309544, 1432.71155641615, 1432.51830671501, 1432.32505701387, 1433.15763708544, 1433.99021715701, 1434.96142536256, 1435.9326335681, 1435.47421580154, 1435.01579803498, 1433.4368629411, 1431.85792784722, 1430.85617066215, 1429.85441347709, 1432.59097206397, 1435.32753065085, 1440.49425642708, 1445.66098220331, 1448.76676550395, 1451.87254880459, 1452.9163236715, 1453.96009853841, 1454.6961768366, 1455.43225513478, 1452.22362902495, 1449.01500291512, 1442.43484036078, 1435.85467780644, 1426.50159512644, 1417.14851244644, 1409.58997614642, 1402.0314398464, 1397.59624058751, 1393.16104132862, 1386.64426440334, 1380.12748747807, 1371.71107833433, 1363.2946691906, 1354.59002807904, 1345.88538696748, 1336.94914699242, 1328.01290701735, 1318.64960669271, 49.7622186359663, -84.1535032467218, -121.764781099341, 37.2870304782966, 82.528433600382, -44.2319392670254, 25.3010406627996, -34.7698782399993, 48.5709781995188, 110.301655093951, -1.96962838525201, -3.7990131710535, -51.4783734777507, 135.066608935635, 114.916035379091, -28.990712676497, -11.7078691876363, 7.04762066618673, -38.9035366827579, 16.5957688400649, -38.4931502947952, 52.0732838386475, 26.6377575984557, 329.153973076816, -13.1797869657194, 872.199160524634, 371.882552045056, -254.299568603192, -95.2920977069916, 8.63342236039193, 16.852295225008, -29.0271834604991, 13.5051131963112, 4.54091267164154, 25.5747517733375, 386.850855912621, 259.276984531009, -199.961168270532, -153.894877042003, 94.302447817031, -20.3106357794875, 21.0527247936745, -6.29056183593116, 13.9001511905426, -29.4973604406664, -31.7957066699985, -224.096013272965, -30.9544842287708, 22.3370692945275, 432.596723859509, 47.1608224545594, -304.956866078466, 50.1150369329559, 24.6852664308792, -14.4511512739648, -4.94371710626865, -19.024507596255, -56.8030453693573, -314.583543516094, 165.222305128756, 316.17817825271, 23.9168069434991, 11.9598796643579, -128.904953645213, 0.419804589665318, -6.80218287850425, 29.2691824505584, 53.9010951754703, 40.9447832426993, -26.2505972353374, -41.4479380870087, -214.837325417531, 2134, 1863, 1877, 1877, 1492, 1249, 1280, 1131, 1209, 1492, 1621, 1846, 2103, 2137, 2153, 1833, 1403, 1288, 1186, 1133, 1053, 1347, 1545, 2066, 2020, 2750, 2283, 1479, 1189, 1160, 1113, 970, 999, 1208, 1467, 2059, 2240, 1634, 1722, 1801, 1246, 1162, 1087, 1013, 959, 1179, 1229, 1655, 2019, 2284, 1942, 1423, 1340, 1187, 1098, 1004, 970, 1140, 1110, 1812, 2263, 1820, 1846, 1531, 1215, 1075, 1056, 975, 940, 1081, 1294, 1341), .Dim = c(72L, 4L), .Dimnames = list(NULL, c('STL.seasonal', 'STL.trend', 'STL.remainder', 'data')), .Tsp = c(1974, 1979.91666666667, 12), class = c('mts', 'ts', 'matrix')), 1:2, TRUE); .Internal(aperm(argv[[1]], argv[[2]], argv[[3]]))");
     }
 
@@ -69,7 +74,8 @@ public class TestBuiltin_aperm extends TestBase {
 
     @Test
     public void testaperm10() {
-        assertEval(Ignored.Unknown,
+        // FIXME Attrs not transposed (as described in aperm docs)
+        assertEval(Ignored.ImplementationError,
                         "argv <- list(structure(c(32, 53, 10, 3, 11, 50, 10, 30, 10, 25, 7, 5, 3, 15, 7, 8, 36, 66, 16, 4, 9, 34, 7, 64, 5, 29, 7, 5, 2, 14, 7, 8), .Dim = c(4L, 4L, 2L), .Dimnames = structure(list(Hair = c('Black', 'Brown', 'Red', 'Blond'), Eye = c('Brown', 'Blue', 'Hazel', 'Green'), Sex = c('Male', 'Female')), .Names = c('Hair', 'Eye', 'Sex')), class = 'table'), c(3L, 1L, 2L), TRUE); .Internal(aperm(argv[[1]], argv[[2]], argv[[3]]))");
     }
 
@@ -85,7 +91,8 @@ public class TestBuiltin_aperm extends TestBase {
 
     @Test
     public void testaperm13() {
-        assertEval(Ignored.Unknown,
+        // FIXME .Dimnames not transposed
+        assertEval(Ignored.ImplementationError,
                         "argv <- list(structure(c('    Null deviance:', 'Residual deviance:', '3.118557', '0.012672', ' on', ' on', '8', '7', ' degrees of freedom\\n', ' degrees of freedom\\n'), .Dim = c(2L, 5L), .Dimnames = list(c('null.deviance', 'deviance'), NULL)), c(2L, 1L), TRUE); .Internal(aperm(argv[[1]], argv[[2]], argv[[3]]))");
     }
 
@@ -96,7 +103,8 @@ public class TestBuiltin_aperm extends TestBase {
 
     @Test
     public void testaperm15() {
-        assertEval(Ignored.Unknown,
+        // FIXME .Dimnames not transposed
+        assertEval(Ignored.ImplementationError,
                         "argv <- list(structure(c(FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE), .Dim = c(5L, 20L), .Dimnames = list(c('#ifdef', '\\\\Sexpr', 'build', 'install', 'render'), NULL)), c(2L, 1L), TRUE); .Internal(aperm(argv[[1]], argv[[2]], argv[[3]]))");
     }
 
@@ -117,25 +125,29 @@ public class TestBuiltin_aperm extends TestBase {
 
     @Test
     public void testaperm19() {
-        assertEval(Ignored.Unknown,
+        // FIXME .Dimnames not transposed
+        assertEval(Ignored.ImplementationError,
                         "argv <- list(structure(c(4, 8, 12, 16, 20, 24, 28, 32, 36, 40, 44, 48, 4000, 8000, 12000, 16000, 20000, 24000, 28000, 32000, 36000, 40000, 44000, 48000, 8, 16, 24, 32, 40, 48, 56, 64, 72, 80, 88, 96, 8000, 16000, 24000, 32000, 40000, 48000, 56000, 64000, 72000, 80000, 88000, 96000, 12, 24, 36, 48, 60, 72, 84, 96, 108, 120, 132, 144, 12000, 24000, 36000, 48000, 60000, 72000, 84000, 96000, 108000, 120000, 132000, 144000, 16, 32, 48, 64, 80, 96, 112, 128, 144, 160, 176, 192, 16000, 32000, 48000, 64000, 80000, 96000, 112000, 128000, 144000, 160000, 176000, 192000, 20, 40, 60, 80, 100, 120, 140, 160, 180, 200, 220, 240, 20000, 40000, 60000, 80000, 1e+05, 120000, 140000, 160000, 180000, 2e+05, 220000, 240000, 24, 48, 72, 96, 120, 144, 168, 192, 216, 240, 264, 288, 24000, 48000, 72000, 96000, 120000, 144000, 168000, 192000, 216000, 240000, 264000, 288000, 28, 56, 84, 112, 140, 168, 196, 224, 252, 280, 308, 336, 28000, 56000, 84000, 112000, 140000, 168000, 196000, 224000, 252000, 280000, 308000, 336000, 32, 64, 96, 128, 160, 192, 224, 256, 288, 320, 352, 384, 32000, 64000, 96000, 128000, 160000, 192000, 224000, 256000, 288000, 320000, 352000, 384000, 36, 72, 108, 144, 180, 216, 252, 288, 324, 360, 396, 432, 36000, 72000, 108000, 144000, 180000, 216000, 252000, 288000, 324000, 360000, 396000, 432000, 40, 80, 120, 160, 200, 240, 280, 320, 360, 400, 440, 480, 40000, 80000, 120000, 160000, 2e+05, 240000, 280000, 320000, 360000, 4e+05, 440000, 480000, 44, 88, 132, 176, 220, 264, 308, 352, 396, 440, 484, 528, 44000, 88000, 132000, 176000, 220000, 264000, 308000, 352000, 396000, 440000, 484000, 528000, 48, 96, 144, 192, 240, 288, 336, 384, 432, 480, 528, 576, 48000, 96000, 144000, 192000, 240000, 288000, 336000, 384000, 432000, 480000, 528000, 576000, 52, 104, 156, 208, 260, 312, 364, 416, 468, 520, 572, 624, 52000, 104000, 156000, 208000, 260000, 312000, 364000, 416000, 468000, 520000, 572000, 624000, 56, 112, 168, 224, 280, 336, 392, 448, 504, 560, 616, 672, 56000, 112000, 168000, 224000, 280000, 336000, 392000, 448000, 504000, 560000, 616000, 672000, 60, 120, 180, 240, 300, 360, 420, 480, 540, 600, 660, 720, 60000, 120000, 180000, 240000, 3e+05, 360000, 420000, 480000, 540000, 6e+05, 660000, 720000, 64, 128, 192, 256, 320, 384, 448, 512, 576, 640, 704, 768, 64000, 128000, 192000, 256000, 320000, 384000, 448000, 512000, 576000, 640000, 704000, 768000, 68, 136, 204, 272, 340, 408, 476, 544, 612, 680, 748, 816, 68000, 136000, 204000, 272000, 340000, 408000, 476000, 544000, 612000, 680000, 748000, 816000, 72, 144, 216, 288, 360, 432, 504, 576, 648, 720, 792, 864, 72000, 144000, 216000, 288000, 360000, 432000, 504000, 576000, 648000, 720000, 792000, 864000, 76, 152, 228, 304, 380, 456, 532, 608, 684, 760, 836, 912, 76000, 152000, 228000, 304000, 380000, 456000, 532000, 608000, 684000, 760000, 836000, 912000, 80, 160, 240, 320, 400, 480, 560, 640, 720, 800, 880, 960, 80000, 160000, 240000, 320000, 4e+05, 480000, 560000, 640000, 720000, 8e+05, 880000, 960000, 84, 168, 252, 336, 420, 504, 588, 672, 756, 840, 924, 1008, 84000, 168000, 252000, 336000, 420000, 504000, 588000, 672000, 756000, 840000, 924000, 1008000, 88, 176, 264, 352, 440, 528, 616, 704, 792, 880, 968, 1056, 88000, 176000, 264000, 352000, 440000, 528000, 616000, 704000, 792000, 880000, 968000, 1056000, 92, 184, 276, 368, 460, 552, 644, 736, 828, 920, 1012, 1104, 92000, 184000, 276000, 368000, 460000, 552000, 644000, 736000, 828000, 920000, 1012000, 1104000, 96, 192, 288, 384, 480, 576, 672, 768, 864, 960, 1056, 1152, 96000, 192000, 288000, 384000, 480000, 576000, 672000, 768000, 864000, 960000, 1056000, 1152000), .Dim = c(3L, 4L, 2L, 3L, 4L, 2L), .Dimnames = list(c('A', 'B', 'C'), c('D', 'E', 'F', 'G'), c('frequentist', 'bayesian'), NULL, NULL, c('happy', 'sad'))), c(4L, 1L, 5L, 2L, 6L, 3L), TRUE); .Internal(aperm(argv[[1]], argv[[2]], argv[[3]]))");
     }
 
     @Test
     public void testaperm20() {
-        assertEval(Ignored.Unknown,
+        // FIXME .Dimnames not transposed
+        assertEval(Ignored.ImplementationError,
                         "argv <- list(structure(1:24, .Dim = c(4L, 6L), .Dimnames = structure(list(happy = c('a', 'b', 'c', 'd'), sad = c('A', 'B', 'C', 'D', 'E', 'F')), .Names = c('happy', 'sad'))), c(2, 1), TRUE); .Internal(aperm(argv[[1]], argv[[2]], argv[[3]]))");
     }
 
     @Test
     public void testaperm21() {
-        assertEval(Ignored.Unknown,
+        // FIXME .Dimnames not applied
+        assertEval(Ignored.ImplementationError,
                         "argv <- list(structure(1:120, .Dim = 2:5, .Dimnames = list(NULL, c('a', 'b', 'c'), NULL, c('V5', 'V6', 'V7', 'V8', 'V9'))), 1:4, TRUE); .Internal(aperm(argv[[1]], argv[[2]], argv[[3]]))");
     }
 
     @Test
     public void testaperm22() {
-        assertEval(Ignored.Unknown,
+        // FIXME .Dimnames not transposed
+        assertEval(Ignored.ImplementationError,
                         "argv <- list(structure(c('    Null deviance:', 'Residual deviance:', '67.5316', ' 4.5512', ' on', ' on', '9', '7', ' degrees of freedom\\n', ' degrees of freedom\\n'), .Dim = c(2L, 5L), .Dimnames = list(c('null.deviance', 'deviance'), NULL)), c(2L, 1L), TRUE); .Internal(aperm(argv[[1]], argv[[2]], argv[[3]]))");
     }
 
@@ -146,19 +158,22 @@ public class TestBuiltin_aperm extends TestBase {
 
     @Test
     public void testaperm24() {
-        assertEval(Ignored.Unknown,
+        // FIXME .Dimnames not transposed
+        assertEval(Ignored.ImplementationError,
                         "argv <- list(structure(c(3, 3, 3, 3, 3, 3, 3, 3, 4, 3, 2, 1, 2, 3, 4, 5), .Dim = c(8L, 2L), .Dimnames = list(c('a', 'b', 'c', 'd', 'e', 'f', 'g', 'h'), c('x1', 'x2'))), c(2L, 1L), TRUE); .Internal(aperm(argv[[1]], argv[[2]], argv[[3]]))");
     }
 
     @Test
     public void testaperm25() {
-        assertEval(Ignored.Unknown,
+        // FIXME .Dimnames not applied
+        assertEval(Ignored.ImplementationError,
                         "argv <- list(structure(c(0, 1.23517986278748, 1.95771376416406, 2.47035972557496, 2.86799882564536, 3.19289362695154, 3.46758826742286, 3.70553958836244, 3.91542752832811, 4.10317868843284, 4.27302027203108, 4.42807348973901, 4.57070862330685, 4.70276813021034, 4.82571258980942, 4.94071945114991, 5.04875179140451, 5.15060739111559, 5.2469545231864, 5.33835855122032, 5.42530203158692, 5.50820013481856, 5.58741263619316, 5.66325335252649, 5.73599765129073, 5.80588848609433, 5.87314129249217, 5.93794799299782, 6.00048029898585, 6.0608924525969, 6.11932351888589, 6.17589931393739, 6.23073403619514, 6.28393165419199, 6.33558709306823, 6.38578725390307, 6.43461189335533, 6.48213438597388, 6.52842238747091, 6.5735384140078, 6.61754034994095, 6.6604818943744, 6.70241295516147, 6.74337999760604, 6.78342635397348, 6.82259249898064, 6.86091629565604, 6.89843321531397, 6.93517653484573, 6.97117751407821, 7.00646555556857, 7.04106834888181, 7.07501200112497, 7.10832115527965, 7.14101909767645, 7.1731278557853, 7.20466828735046, 7.23566016177333, 7.26612223453848, 7.29607231538438, 7.3255273308395, 7.35450338167337, 7.38301579575098, 7.41107917672487, 7.43870744895221, 7.46591389898262, 7.49271121392624, 7.51911151697947, 7.54512640035722, 7.57076695585571, 7.59604380324749, 7.62096711669055, 7.64554664931599, 7.66979175614282, 7.69371141545478, 7.71731424876136, 7.74060853945395, 7.76360225025839, 7.78630303957574, 7.80871827679528, 7.83085505665623, 7.85272021272842, 7.87432033007586, 7.89566175716188, 7.91675061704988, 7.93759281794895, 7.95819406314991, 7.97855986039352, 7.99869553070936, 8.01860621676096, 8.03829689072971, 8.05777236176812, 8.07703728304995, 8.09609615844352, 8.11495334883177, 8.13361307810145, 8.15207943882202, 8.17035639763321, 8.1884478003592, 8.20635737686569, 5.76558893216369, 5.5342688729893, 5.69366159038267, 6.17674775070929, 6.08762735966107, 6.68653280779044, 6.70253591217234, 6.32938323618963, 6.81735284786279, 6.64835766778347, 6.91213030655848, 7.1496842781073, 7.25682341590407, 7.46164094256645, 7.37149913131863, 7.56470707593246, 7.71334191900841, 7.71375128844693, 7.82793409372511, 7.90749319121623, 7.96255733207686, 8.11381187364273, 8.21211505208663, 8.18427543602736, 8.29133399017863, 8.31295002652197, 8.345677476918, 8.39053879616249, 8.40857122007675, 8.48086068897741, 8.7064475146364, 8.66563269607315, 8.79435721712053, 8.7996087849725, 8.82443395257555, 8.91314507957224, 8.8999544270272, 8.96760168103462, 8.93548690078514, 9.01332239000153, 9.07083338712431, 9.15422051683385, 9.20109302097792, 9.2062218972166, 9.31170984199071, 9.30909253379462, 9.35447695163181, 9.45333740615033, 9.41458248768079, 9.46983861007334, 9.51652628670815, 9.5301888386762, 9.59497468213833, 9.61268143770055, 9.64141492393412, 9.68857453461133, 9.77580537125637, 9.79816256416163, 9.79128849346381, 9.80699184934282, 9.91833626833319, 9.95487179604373, 9.88086373278725, 9.93505313047982, 9.97034080826287, 9.97752630228797, 10.1165750634827, 10.0977558023188, 10.1414502841663, 10.129071787117, 10.166774063688, 10.1792762662323, 10.2172491181904, 10.2670710204409, 10.2742314938915, 10.287876622612, 10.3447249333494, 10.4075370351282, 10.3465199067119, 10.4404223214255, 10.422301774768, 10.4739543513507, 10.5314461891317, 10.4813429169605, 10.5097541699286, 10.5389544549716, 10.5752633644781, 10.6133054015308, 10.6776080133421, 10.6266190058322, 10.6657950921482, 10.7067723709738, 10.7424707425861, 10.7418659657784, 10.7335163259687, 10.780101845273, 10.8334343829096, 10.8616735406708, 10.8535694508523, 10.8900668188725), .Dim = c(100L, 2L), .Dimnames = list(c('1', '2', '3', '4', '5', '6', '7', '8', '9', '10', '11', '12', '13', '14', '15', '16', '17', '18', '19', '20', '21', '22', '23', '24', '25', '26', '27', '28', '29', '30', '31', '32', '33', '34', '35', '36', '37', '38', '39', '40', '41', '42', '43', '44', '45', '46', '47', '48', '49', '50', '51', '52', '53', '54', '55', '56', '57', '58', '59', '60', '61', '62', '63', '64', '65', '66', '67', '68', '69', '70', '71', '72', '73', '74', '75', '76', '77', '78', '79', '80', '81', '82', '83', '84', '85', '86', '87', '88', '89', '90', '91', '92', '93', '94', '95', '96', '97', '98', '99', '100'), c('log(x)', 'log(z)'))), 1:2, TRUE); .Internal(aperm(argv[[1]], argv[[2]], argv[[3]]))");
     }
 
     @Test
     public void testaperm27() {
-        assertEval(Ignored.Unknown,
+        // FIXME .Dimnames not transposed
+        assertEval(Ignored.ImplementationError,
                         "argv <- structure(list(a = structure(c(0.124248979591837, 0.266432653061224,     0.404342857142857, 0.0992163265306122, 0.0851836734693878,     0.0937632653061225, 0.0163551020408163, 0.182897959183673,     0.303289795918367, 0.010330612244898, 0.0557795918367347,     0.0490938775510204, 0.0992163265306122, 0.0851836734693878,     0.0937632653061225, 0.143689795918367, 0.098469387755102,     0.104004081632653, 0.0116979591836735, 0.0826530612244898,     0.0713795918367347, 0.00929795918367347, 0.0412040816326531,     0.0476285714285714, 0.0163551020408163, 0.182897959183673,     0.303289795918367, 0.0116979591836735, 0.0826530612244898,     0.0713795918367347, 0.0301591836734694, 0.220816326530612,     0.304587755102041, 0.00606938775510204, 0.0731020408163265,     0.0488244897959184, 0.010330612244898, 0.0557795918367347,     0.0490938775510204, 0.00929795918367347, 0.0412040816326531,     0.0476285714285714, 0.00606938775510204, 0.0731020408163265,     0.0488244897959184, 0.0111061224489796, 0.0391061224489796,     0.0754326530612245), .Dim = c(3L, 4L, 4L), .Dimnames = structure(list(Species = c('setosa',     'versicolor', 'virginica'), c('Sepal.Length', 'Sepal.Width',     'Petal.Length', 'Petal.Width'), c('Sepal.Length', 'Sepal.Width',     'Petal.Length', 'Petal.Width')), .Names = c('Species', '',     ''))), perm = c(2, 3, 1)), .Names = c('a', 'perm'));" +
                                         "do.call('aperm', argv)");
     }
diff --git a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_aregexec.java b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_aregexec.java
index 2e2ac183107a6bf867a537da780c516a0bc17eb6..f5323b554c9a7da776a06bcd7e03e209e093404d 100644
--- a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_aregexec.java
+++ b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_aregexec.java
@@ -4,7 +4,7 @@
  * http://www.gnu.org/licenses/gpl-2.0.html
  *
  * Copyright (c) 2014, Purdue University
- * Copyright (c) 2014, 2016, Oracle and/or its affiliates
+ * Copyright (c) 2014, 2017, Oracle and/or its affiliates
  *
  * All rights reserved.
  */
@@ -19,13 +19,16 @@ public class TestBuiltin_aregexec extends TestBase {
 
     @Test
     public void testaregexec1() {
-        assertEval(Ignored.Unknown,
+        // FIXME
+        // FastR output: com.oracle.truffle.r.runtime.RInternalError: not implemented: .Internal
+        // aregexec
+        assertEval(Ignored.Unimplemented,
                         "argv <- list('FALSE', 'FALSE', c(0.1, NA, NA, NA, NA), c(1L, 1L, 1L), FALSE, FALSE, FALSE); .Internal(aregexec(argv[[1]], argv[[2]], argv[[3]], argv[[4]], argv[[5]], argv[[6]], argv[[7]]))");
     }
 
     @Test
     public void testaregexec2() {
-        assertEval(Ignored.Unknown,
+        assertEval(Ignored.Unimplemented,
                         "argv <- list('(lay)(sy)', c('1 lazy', '1', '1 LAZY'), c(2, NA, NA, NA, NA), c(1L, 1L, 1L), FALSE, FALSE, FALSE); .Internal(aregexec(argv[[1]], argv[[2]], argv[[3]], argv[[4]], argv[[5]], argv[[6]], argv[[7]]))");
     }
 }
diff --git a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_ascomplex.java b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_ascomplex.java
index 7f63eca369365b415e2d414f107f1e5e6cd2f87f..b7a010a802caba243ba8657deaad7826c0e023cc 100644
--- a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_ascomplex.java
+++ b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_ascomplex.java
@@ -29,7 +29,8 @@ public class TestBuiltin_ascomplex extends TestBase {
 
     @Test
     public void testascomplex3() {
-        assertEval(Ignored.Unknown, "argv <- list(' ');as.complex(argv[[1]]);");
+        // FastR: extra warning: NAs introduced by coercion
+        assertEval(Output.IgnoreWarningMessage, "argv <- list(' ');as.complex(argv[[1]]);");
     }
 
     @Test
@@ -93,8 +94,9 @@ public class TestBuiltin_ascomplex extends TestBase {
 
         assertEval("{ as.complex(\"1e10+5i\") }");
         assertEval("{ as.complex(\"-.1e10+5i\") }");
-        assertEval(Ignored.Unknown, "{ as.complex(\"1e-2+3i\") }");
-        assertEval(Ignored.Unknown, "{ as.complex(\"+.1e+2-3i\") }");
+        // FIXME FastR unable to properly interpret x+yi (reports NA and warning instead)
+        assertEval(Ignored.ImplementationError, "{ as.complex(\"1e-2+3i\") }");
+        assertEval(Ignored.ImplementationError, "{ as.complex(\"+.1e+2-3i\") }");
 
         assertEval("{ as.complex(list(42)) }");
         assertEval(Output.IgnoreErrorContext, "{ as.complex(list(NULL)) }");
diff --git a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_asdifftime.java b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_asdifftime.java
index 0aaff44737e11b92355cb6092db2b85eebc4598b..a39cfdb313564626ebc3c07980bd738a3e2c475a 100644
--- a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_asdifftime.java
+++ b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_asdifftime.java
@@ -4,7 +4,7 @@
  * http://www.gnu.org/licenses/gpl-2.0.html
  *
  * Copyright (c) 2014, Purdue University
- * Copyright (c) 2014, 2016, Oracle and/or its affiliates
+ * Copyright (c) 2014, 2017, Oracle and/or its affiliates
  *
  * All rights reserved.
  */
@@ -20,11 +20,13 @@ public class TestBuiltin_asdifftime extends TestBase {
 
     @Test
     public void testasdifftime1() {
-        assertEval(Ignored.Unknown, "argv <- structure(list(tim = c('0:3:20', '11:23:15')), .Names = 'tim');do.call('as.difftime', argv)");
+        // FIXME RInternalError: should not reach here
+        assertEval(Ignored.ImplementationError, "argv <- structure(list(tim = c('0:3:20', '11:23:15')), .Names = 'tim');do.call('as.difftime', argv)");
     }
 
     @Test
     public void testasdifftime2() {
-        assertEval(Ignored.Unknown, "argv <- structure(list(tim = c('3:20', '23:15', '2:'), format = '%H:%M'),     .Names = c('tim', 'format'));do.call('as.difftime', argv)");
+        // FIXME RInternalError: should not reach here
+        assertEval(Ignored.ImplementationError, "argv <- structure(list(tim = c('3:20', '23:15', '2:'), format = '%H:%M'),     .Names = c('tim', 'format'));do.call('as.difftime', argv)");
     }
 }
diff --git a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_asdouble.java b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_asdouble.java
index 8cdead0a43f3d7edb5e26074b8dbc3bba59d6328..26624d73a5a4740709d366033340ca864aa05215 100644
--- a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_asdouble.java
+++ b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_asdouble.java
@@ -29,7 +29,8 @@ public class TestBuiltin_asdouble extends TestBase {
 
     @Test
     public void testasdouble3() {
-        assertEval(Ignored.Unknown, "argv <- list(structure(4, tzone = 'GMT', units = 'days', class = 'difftime'), units = 'secs');as.double(argv[[1]],argv[[2]]);");
+        // FIXME FastR outputs 4 (does not handle specially difftime class)
+        assertEval(Ignored.ImplementationError, "argv <- list(structure(4, tzone = 'GMT', units = 'days', class = 'difftime'), units = 'secs');as.double(argv[[1]],argv[[2]]);");
     }
 
     @Test
@@ -94,7 +95,8 @@ public class TestBuiltin_asdouble extends TestBase {
 
     @Test
     public void testasdouble16() {
-        assertEval(Ignored.Unknown, "argv <- list(structure(28, units = 'days', class = 'difftime'), units = 'secs');as.double(argv[[1]],argv[[2]]);");
+        // FIXME FastR outputs 28 i.e. does not handle specially difftime class
+        assertEval(Ignored.ImplementationError, "argv <- list(structure(28, units = 'days', class = 'difftime'), units = 'secs');as.double(argv[[1]],argv[[2]]);");
     }
 
     @Test
@@ -109,7 +111,8 @@ public class TestBuiltin_asdouble extends TestBase {
 
     @Test
     public void testasdouble19() {
-        assertEval(Ignored.Unknown, "argv <- list(structure(180.958333333333, units = 'days', class = 'difftime'), units = 'secs');as.double(argv[[1]],argv[[2]]);");
+        // FIXME FastR outputs 180.9583 (does not handle specially difftime class)
+        assertEval(Ignored.ImplementationError, "argv <- list(structure(180.958333333333, units = 'days', class = 'difftime'), units = 'secs');as.double(argv[[1]],argv[[2]]);");
     }
 
     @Test
diff --git a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_asmatrix.java b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_asmatrix.java
index 54beac54cc3789b523f4f2b2b8b5832661234a1d..c309948ee3e21f721b0e009da320699eae989429 100644
--- a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_asmatrix.java
+++ b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_asmatrix.java
@@ -76,8 +76,8 @@ public class TestBuiltin_asmatrix extends TestBase {
         assertEval("{ matrix(c(NaN,4+5i,2+0i,5+10i)) } ");
 
         // FIXME missing warning
-        assertEval(Ignored.Unknown, Output.IgnoreWarningContext, "{ matrix(c(1,2,3,4),3,2) }");
-        assertEval(Ignored.Unknown, Output.IgnoreWarningContext, "{ matrix(1:4,3,2) }");
+        assertEval(Output.MissingWarning, "{ matrix(c(1,2,3,4),3,2) }");
+        assertEval(Output.MissingWarning, "{ matrix(1:4,3,2) }");
 
         assertEval("{ x<-matrix(integer(), ncol=2) }");
         assertEval("{ x<-matrix(integer(), nrow=2) }");
diff --git a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_attr.java b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_attr.java
index 47cd7772639c768c751213aef48511a7198a6dfa..5401630e8b04458d5445d39ca65b886d0894db88 100644
--- a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_attr.java
+++ b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_attr.java
@@ -4,7 +4,7 @@
  * http://www.gnu.org/licenses/gpl-2.0.html
  *
  * Copyright (c) 2014, Purdue University
- * Copyright (c) 2014, 2016, Oracle and/or its affiliates
+ * Copyright (c) 2014, 2017, Oracle and/or its affiliates
  *
  * All rights reserved.
  */
@@ -59,7 +59,7 @@ public class TestBuiltin_attr extends TestBase {
 
     @Test
     public void testattr10() {
-        assertEval(Ignored.Unknown,
+        assertEval(Output.IgnoreWhitespace,
                         "argv <- list(structure(list(Employed = c(60.323, 61.122, 60.171, 61.187, 63.221, 63.639, 64.989, 63.761, 66.019, 67.857, 68.169, 66.513, 68.655, 69.564, 69.331, 70.551), GNP.deflator = c(83, 88.5, 88.2, 89.5, 96.2, 98.1, 99, 100, 101.2, 104.6, 108.4, 110.8, 112.6, 114.2, 115.7, 116.9), GNP = c(234.289, 259.426, 258.054, 284.599, 328.975, 346.999, 365.385, 363.112, 397.469, 419.18, 442.769, 444.546, 482.704, 502.601, 518.173, 554.894), Unemployed = c(235.6, 232.5, 368.2, 335.1, 209.9, 193.2, 187, 357.8, 290.4, 282.2, 293.6, 468.1, 381.3, 393.1, 480.6, 400.7), Armed.Forces = c(159, 145.6, 161.6, 165, 309.9, 359.4, 354.7, 335, 304.8, 285.7, 279.8, 263.7, 255.2, 251.4, 257.2, 282.7), Population = c(107.608, 108.632, 109.773, 110.929, 112.075, 113.27, 115.094, 116.219, 117.388, 118.734, 120.445, 121.95, 123.366, 125.368, 127.852, 130.081), Year = 1947:1962), .Names = c('Employed', 'GNP.deflator', 'GNP', 'Unemployed', 'Armed.Forces', 'Population', 'Year'), terms = quote(Employed ~ GNP.deflator + GNP + Unemployed +     Armed.Forces + Population + Year), row.names = 1947:1962, class = 'data.frame'), 'terms');attr(argv[[1]],argv[[2]]);");
     }
 
diff --git a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_attributes.java b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_attributes.java
index bb630284a63131d608ab5c00fb595a43780b3874..af13a6708d2465a36ad8d63b0cd1408130038d9c 100644
--- a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_attributes.java
+++ b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_attributes.java
@@ -4,7 +4,7 @@
  * http://www.gnu.org/licenses/gpl-2.0.html
  *
  * Copyright (c) 2012-2014, Purdue University
- * Copyright (c) 2013, 2016, Oracle and/or its affiliates
+ * Copyright (c) 2013, 2017, Oracle and/or its affiliates
  *
  * All rights reserved.
  */
@@ -129,7 +129,8 @@ public class TestBuiltin_attributes extends TestBase {
 
     @Test
     public void testattributes23() {
-        assertEval(Ignored.Unknown,
+        // FIXME several differences in output
+        assertEval(Ignored.ImplementationError,
                         "argv <- list(structure(list(), .Names = character(0), arguments = structure('object', simpleOnly = TRUE), signatures = list(), generic = structure(function (object) standardGeneric('show'), generic = structure('show', package = 'methods'), package = 'methods', group = list(), valueClass = character(0), signature = structure('object', simpleOnly = TRUE), default = structure(function (object) showDefault(object, FALSE), target = structure('ANY', class = structure('signature', package = 'methods'), .Names = 'object', package = 'methods'), defined = structure('ANY', class = structure('signature', package = 'methods'), .Names = 'object', package = 'methods'), generic = structure('show', package = 'methods'), class = structure('derivedDefaultMethod', package = 'methods')), skeleton = quote((function (object) showDefault(object, FALSE))(object)), class = structure('standardGeneric', package = 'methods')), class = structure('listOfMethods', package = 'methods')));attributes(argv[[1]]);");
     }
 
diff --git a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_backsolve.java b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_backsolve.java
index 54925ece2d7d81038c1cb2966a8a406a8a0cd230..7a04dcd58492d64d46aa12a059f8885ba24fef26 100644
--- a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_backsolve.java
+++ b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_backsolve.java
@@ -4,7 +4,7 @@
  * http://www.gnu.org/licenses/gpl-2.0.html
  *
  * Copyright (c) 2014, Purdue University
- * Copyright (c) 2014, 2016, Oracle and/or its affiliates
+ * Copyright (c) 2014, 2017, Oracle and/or its affiliates
  *
  * All rights reserved.
  */
@@ -19,19 +19,22 @@ public class TestBuiltin_backsolve extends TestBase {
 
     @Test
     public void testbacksolve1() {
-        assertEval(Ignored.Unknown,
+        // FIXME RInternalError: not implemented: .Internal backsolve
+        assertEval(Ignored.Unimplemented,
                         "argv <- list(structure(c(-2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -0.0421675318334475, 0, -2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -0.0421675318334475, 0, 0, -2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -0.445407110781343, 0, 0, 0, -1.73205080756888, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -0.510819156714975, 0, 0, 0, 0, -1.73205080756888, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -0.510819156714975, 0, 0, 0, 0, 0, -1.73205080756888, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -0.510819156714975, 0, 0, 0, 0, 0, 0, -1.4142135623731, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -0.0592753100948471, 0, 0, 0, 0, 0, 0, 0, -1.4142135623731, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -0.428419619610855, 0, 0, 0, 0, 0, 0, 0, 0, -1.4142135623731, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -0.252201198430086, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1.4142135623731, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -0.428419619610855, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1.73205080756888, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -0.510819156714975, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1.4142135623731, 0, 0, 0, 0, 0, 0, 0, 0, 0, -0.0592753100948472, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1.4142135623731, 0, 0, 0, 0, 0, 0, 0, 0, -0.0592753100948472, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1.4142135623731, 0, 0, 0, 0, 0, 0, 0, -0.252201198430086, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1.4142135623731, 0, 0, 0, 0, 0, 0, -0.252201198430086, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -2, 0, 0, 0, 0, 0, -0.0421675318334475, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -2, 0, 0, 0, 0, -0.0421675318334475, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1.73205080756888, 0, 0, 0, -0.0486697428190666, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1.73205080756888, 0, 0, -0.0486697428190666, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1.73205080756888, 0, -0.0486697428190666, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1.73205080756888, -0.0486697428190666, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -0.935285871700694), .Dim = c(22L, 22L), .Dimnames = list(c('StripS01', 'StripS02', 'StripS03', 'StripS04', 'StripS05', 'StripS06', 'StripS07', 'StripS08', 'StripS09', 'StripS10', 'StripS11', 'StripS12', 'StripS13', 'StripS14', 'StripS15', 'StripS16', 'StripS17', 'StripS18', 'StripS19', 'StripS20', 'StripS21', ''), c('3', '4', '5', '6', '9', '10', '11', '12', '13', '14', '15', '16', '19', '20', '21', '25', '26', '27', '31', '32', '33', '39'))), structure(c(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.00019677474442243), .Dim = c(22L, 1L)), 22L, FALSE, FALSE); .Internal(backsolve(argv[[1]], argv[[2]], argv[[3]], argv[[4]], argv[[5]]))");
     }
 
     @Test
     public void testbacksolve2() {
-        assertEval(Ignored.Unknown,
+        // FIXME RInternalError: not implemented: .Internal backsolve
+        assertEval(Ignored.Unimplemented,
                         "argv <- list(structure(c(-2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -0.0421590411210753, 0, -2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -0.0421590411210753, 0, 0, -2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -0.445373554228914, 0, 0, 0, -1.73205080756888, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -0.510781706167877, 0, 0, 0, 0, -1.73205080756888, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -0.510781706167877, 0, 0, 0, 0, 0, -1.73205080756888, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -0.510781706167877, 0, 0, 0, 0, 0, 0, -1.4142135623731, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -0.0592635069735823, 0, 0, 0, 0, 0, 0, 0, -1.4142135623731, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -0.428392065749892, 0, 0, 0, 0, 0, 0, 0, 0, -1.4142135623731, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -0.252172670570357, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1.4142135623731, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -0.428392065749892, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1.73205080756888, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -0.510781706167877, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1.4142135623731, 0, 0, 0, 0, 0, 0, 0, 0, 0, -0.0592635069735823, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1.4142135623731, 0, 0, 0, 0, 0, 0, 0, 0, -0.0592635069735823, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1.4142135623731, 0, 0, 0, 0, 0, 0, 0, -0.252172670570357, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1.4142135623731, 0, 0, 0, 0, 0, 0, -0.252172670570357, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -2, 0, 0, 0, 0, 0, -0.0421590411210753, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -2, 0, 0, 0, 0, -0.0421590411210753, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1.73205080756888, 0, 0, 0, -0.0486599542810648, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1.73205080756888, 0, 0, -0.0486599542810647, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1.73205080756888, 0, -0.0486599542810648, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1.73205080756888, -0.0486599542810648, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -0.935253697073914), .Dim = c(22L, 22L), .Dimnames = list(c('StripS01', 'StripS02', 'StripS03', 'StripS04', 'StripS05', 'StripS06', 'StripS07', 'StripS08', 'StripS09', 'StripS10', 'StripS11', 'StripS12', 'StripS13', 'StripS14', 'StripS15', 'StripS16', 'StripS17', 'StripS18', 'StripS19', 'StripS20', 'StripS21', ''), c('3', '4', '5', '6', '9', '10', '11', '12', '13', '14', '15', '16', '19', '20', '21', '25', '26', '27', '31', '32', '33', '39'))), structure(c(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1.20033559004316e-05), .Dim = c(22L, 1L)), 22L, FALSE, FALSE); .Internal(backsolve(argv[[1]], argv[[2]], argv[[3]], argv[[4]], argv[[5]]))");
     }
 
     @Test
     public void testbacksolve3() {
-        assertEval(Ignored.Unknown,
+        // FIXME RInternalError: not implemented: .Internal backsolve
+        assertEval(Ignored.Unimplemented,
                         "argv <- list(structure(c(-0.91092349872819, -1.26769315823132, 0, -1.11965595698793), .Dim = c(2L, 2L)), structure(c(-0.000210872744086474, 0.000210873298561107), .Dim = c(2L, 1L)), 2L, FALSE, FALSE); .Internal(backsolve(argv[[1]], argv[[2]], argv[[3]], argv[[4]], argv[[5]]))");
     }
 }
diff --git a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_besselI.java b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_besselI.java
index 5fb3ece26f59c3a3fa6de335419dc43da5bd3ec2..78c36a510bcfe77ce15ab91e894b434a507e8d31 100644
--- a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_besselI.java
+++ b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_besselI.java
@@ -4,7 +4,7 @@
  * http://www.gnu.org/licenses/gpl-2.0.html
  *
  * Copyright (c) 2014, Purdue University
- * Copyright (c) 2014, 2016, Oracle and/or its affiliates
+ * Copyright (c) 2014, 2017, Oracle and/or its affiliates
  *
  * All rights reserved.
  */
@@ -19,11 +19,13 @@ public class TestBuiltin_besselI extends TestBase {
 
     @Test
     public void testbesselI1() {
-        assertEval(Ignored.Unknown, "argv <- list(FALSE, FALSE, 1); .Internal(besselI(argv[[1]], argv[[2]], argv[[3]]))");
+        // FIXME RInternalError: not implemented: .Internal besselI
+        assertEval(Ignored.Unimplemented, "argv <- list(FALSE, FALSE, 1); .Internal(besselI(argv[[1]], argv[[2]], argv[[3]]))");
     }
 
     @Test
     public void testbesselI2() {
-        assertEval(Ignored.Unknown, "argv <- list(logical(0), logical(0), 1); .Internal(besselI(argv[[1]], argv[[2]], argv[[3]]))");
+        // FIXME RInternalError: not implemented: .Internal besselI
+        assertEval(Ignored.Unimplemented, "argv <- list(logical(0), logical(0), 1); .Internal(besselI(argv[[1]], argv[[2]], argv[[3]]))");
     }
 }
diff --git a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_besselJ.java b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_besselJ.java
index 240913e1bd156f4eb18d385b615d9adf00393529..99066038882ec2c121685ebf7f3cc9f64d080315 100644
--- a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_besselJ.java
+++ b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_besselJ.java
@@ -4,7 +4,7 @@
  * http://www.gnu.org/licenses/gpl-2.0.html
  *
  * Copyright (c) 2014, Purdue University
- * Copyright (c) 2014, 2016, Oracle and/or its affiliates
+ * Copyright (c) 2014, 2017, Oracle and/or its affiliates
  *
  * All rights reserved.
  */
@@ -19,17 +19,20 @@ public class TestBuiltin_besselJ extends TestBase {
 
     @Test
     public void testbesselJ1() {
-        assertEval(Ignored.Unknown, "argv <- list(logical(0), logical(0)); .Internal(besselJ(argv[[1]], argv[[2]]))");
+        // FIXME RInternalError: not implemented: .Internal besselJ
+        assertEval(Ignored.Unimplemented, "argv <- list(logical(0), logical(0)); .Internal(besselJ(argv[[1]], argv[[2]]))");
     }
 
     @Test
     public void testbesselJ2() {
-        assertEval(Ignored.Unknown, "argv <- list(FALSE, FALSE); .Internal(besselJ(argv[[1]], argv[[2]]))");
+        // FIXME RInternalError: not implemented: .Internal besselJ
+        assertEval(Ignored.Unimplemented, "argv <- list(FALSE, FALSE); .Internal(besselJ(argv[[1]], argv[[2]]))");
     }
 
     @Test
     public void testbesselJ3() {
-        assertEval(Ignored.Unknown,
+        // FIXME RInternalError: not implemented: .Internal besselJ
+        assertEval(Ignored.Unimplemented,
                         "argv <- list(c(9.5367431640625e-07, 1.9073486328125e-06, 3.814697265625e-06, 7.62939453125e-06, 1.52587890625e-05, 3.0517578125e-05, 6.103515625e-05, 0.0001220703125, 0.000244140625, 0.00048828125, 0.0009765625, 0.001953125, 0.00390625, 0.0078125, 0.015625, 0.03125, 0.0625, 0.125, 0.25, 0.5, 1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024), 2.5); .Internal(besselJ(argv[[1]], argv[[2]]))");
     }
 }
diff --git a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_besselK.java b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_besselK.java
index 255718599cedb06978e35aa46bc2b20e48c2e342..100011e36518feecab0b1ad9b94ebd459db83bfc 100644
--- a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_besselK.java
+++ b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_besselK.java
@@ -4,7 +4,7 @@
  * http://www.gnu.org/licenses/gpl-2.0.html
  *
  * Copyright (c) 2014, Purdue University
- * Copyright (c) 2014, 2016, Oracle and/or its affiliates
+ * Copyright (c) 2014, 2017, Oracle and/or its affiliates
  *
  * All rights reserved.
  */
@@ -19,23 +19,27 @@ public class TestBuiltin_besselK extends TestBase {
 
     @Test
     public void testbesselK1() {
-        assertEval(Ignored.Unknown, "argv <- list(FALSE, FALSE, 1); .Internal(besselK(argv[[1]], argv[[2]], argv[[3]]))");
+        // FIXME RInternalError: not implemented: .Internal besselK
+        assertEval(Ignored.Unimplemented, "argv <- list(FALSE, FALSE, 1); .Internal(besselK(argv[[1]], argv[[2]], argv[[3]]))");
     }
 
     @Test
     public void testbesselK2() {
-        assertEval(Ignored.Unknown, "argv <- list(logical(0), logical(0), 1); .Internal(besselK(argv[[1]], argv[[2]], argv[[3]]))");
+        // FIXME RInternalError: not implemented: .Internal besselK
+        assertEval(Ignored.Unimplemented, "argv <- list(logical(0), logical(0), 1); .Internal(besselK(argv[[1]], argv[[2]], argv[[3]]))");
     }
 
     @Test
     public void testbesselK3() {
-        assertEval(Ignored.Unknown,
+        // FIXME RInternalError: not implemented: .Internal besselK
+        assertEval(Ignored.Unimplemented,
                         "argv <- list(c(9.5367431640625e-07, 1.9073486328125e-06, 3.814697265625e-06, 7.62939453125e-06, 1.52587890625e-05, 3.0517578125e-05, 6.103515625e-05, 0.0001220703125, 0.000244140625, 0.00048828125, 0.0009765625, 0.001953125, 0.00390625, 0.0078125, 0.015625, 0.03125, 0.0625, 0.125, 0.25, 0.5, 1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024), 3, 1); .Internal(besselK(argv[[1]], argv[[2]], argv[[3]]))");
     }
 
     @Test
     public void testbesselK4() {
-        assertEval(Ignored.Unknown,
+        // FIXME RInternalError: not implemented: .Internal besselK
+        assertEval(Ignored.Unimplemented,
                         "argv <- list(c(9.5367431640625e-07, 1.9073486328125e-06, 3.814697265625e-06, 7.62939453125e-06, 1.52587890625e-05, 3.0517578125e-05, 6.103515625e-05, 0.0001220703125, 0.000244140625, 0.00048828125, 0.0009765625, 0.001953125, 0.00390625, 0.0078125, 0.015625, 0.03125, 0.0625, 0.125, 0.25, 0.5, 1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024), 3.5, 1); .Internal(besselK(argv[[1]], argv[[2]], argv[[3]]))");
     }
 }
diff --git a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_besselY.java b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_besselY.java
index 76584cd255d1a643f5acbdce315d2c0280488eb9..4d751a26ec85afcd01c92f411f925338bcfe7519 100644
--- a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_besselY.java
+++ b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_besselY.java
@@ -4,7 +4,7 @@
  * http://www.gnu.org/licenses/gpl-2.0.html
  *
  * Copyright (c) 2014, Purdue University
- * Copyright (c) 2014, 2016, Oracle and/or its affiliates
+ * Copyright (c) 2014, 2017, Oracle and/or its affiliates
  *
  * All rights reserved.
  */
@@ -19,24 +19,28 @@ public class TestBuiltin_besselY extends TestBase {
 
     @Test
     public void testbesselY1() {
-        assertEval(Ignored.Unknown,
+        // FIXME RInternalError: not implemented: .Internal besselY
+        assertEval(Ignored.Unimplemented,
                         "argv <- list(c(9.5367431640625e-07, 1.9073486328125e-06, 3.814697265625e-06, 7.62939453125e-06, 1.52587890625e-05, 3.0517578125e-05, 6.103515625e-05, 0.0001220703125, 0.000244140625, 0.00048828125, 0.0009765625, 0.001953125, 0.00390625, 0.0078125, 0.015625, 0.03125, 0.0625, 0.125, 0.25, 0.5, 1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024), 20.5); .Internal(besselY(argv[[1]], argv[[2]]))");
     }
 
     @Test
     public void testbesselY2() {
-        assertEval(Ignored.Unknown,
+        // FIXME RInternalError: not implemented: .Internal besselY
+        assertEval(Ignored.Unimplemented,
                         "argv <- list(2, c(3, 8.94, 14.88, 20.82, 26.76, 32.7, 38.64, 44.58, 50.52, 56.46, 62.4, 68.34, 74.28, 80.22, 86.16, 92.1, 98.04, 103.98, 109.92, 115.86, 121.8, 127.74, 133.68, 139.62, 145.56, 151.5, 157.44, 163.38, 169.32, 175.26, 181.2, 187.14, 193.08, 199.02, 204.96, 210.9, 216.84, 222.78, 228.72, 234.66, 240.6, 246.54, 252.48, 258.42, 264.36, 270.3, 276.24, 282.18, 288.12, 294.06, 300)); .Internal(besselY(argv[[1]], argv[[2]]))");
     }
 
     @Test
     public void testbesselY3() {
-        assertEval(Ignored.Unknown,
+        // FIXME RInternalError: not implemented: .Internal besselY
+        assertEval(Ignored.Unimplemented,
                         "argv <- list(c(0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1, 1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 1.7, 1.8, 1.9, 2, 2.1, 2.2, 2.3, 2.4, 2.5, 2.6, 2.7, 2.8, 2.9, 3, 3.1, 3.2, 3.3, 3.4, 3.5, 3.6, 3.7, 3.8, 3.9, 4, 4.1, 4.2, 4.3, 4.4, 4.5, 4.6, 4.7, 4.8, 4.9, 5, 5.1, 5.2, 5.3, 5.4, 5.5, 5.6, 5.7, 5.8, 5.9, 6, 6.1, 6.2, 6.3, 6.4, 6.5, 6.6, 6.7, 6.8, 6.9, 7, 7.1, 7.2, 7.3, 7.4, 7.5, 7.6, 7.7, 7.8, 7.9, 8, 8.1, 8.2, 8.3, 8.4, 8.5, 8.6, 8.7, 8.8, 8.9, 9, 9.1, 9.2, 9.3, 9.4, 9.5, 9.6, 9.7, 9.8, 9.9, 10), -0.2); .Internal(besselY(argv[[1]], argv[[2]]))");
     }
 
     @Test
     public void testbesselY4() {
-        assertEval(Ignored.Unknown, "argv <- list(logical(0), logical(0)); .Internal(besselY(argv[[1]], argv[[2]]))");
+        // FIXME RInternalError: not implemented: .Internal besselY
+        assertEval(Ignored.Unimplemented, "argv <- list(logical(0), logical(0)); .Internal(besselY(argv[[1]], argv[[2]]))");
     }
 }
diff --git a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_beta.java b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_beta.java
index 3fc9483289c3eba870dd113b04fd0b40a1c23245..5492217c58bceb96bc3f2d6e81e8e6c232cd1570 100644
--- a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_beta.java
+++ b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_beta.java
@@ -4,7 +4,7 @@
  * http://www.gnu.org/licenses/gpl-2.0.html
  *
  * Copyright (c) 2014, Purdue University
- * Copyright (c) 2014, 2016, Oracle and/or its affiliates
+ * Copyright (c) 2014, 2017, Oracle and/or its affiliates
  *
  * All rights reserved.
  */
@@ -19,21 +19,25 @@ public class TestBuiltin_beta extends TestBase {
 
     @Test
     public void testbeta1() {
-        assertEval(Ignored.Unknown, "argv <- list(FALSE, FALSE); .Internal(beta(argv[[1]], argv[[2]]))");
+        // FIXME RInternalError: not implemented: .Internal beta
+        assertEval(Ignored.Unimplemented, "argv <- list(FALSE, FALSE); .Internal(beta(argv[[1]], argv[[2]]))");
     }
 
     @Test
     public void testbeta2() {
-        assertEval(Ignored.Unknown, "argv <- list(logical(0), logical(0)); .Internal(beta(argv[[1]], argv[[2]]))");
+        // FIXME RInternalError: not implemented: .Internal beta
+        assertEval(Ignored.Unimplemented, "argv <- list(logical(0), logical(0)); .Internal(beta(argv[[1]], argv[[2]]))");
     }
 
     @Test
     public void testbeta4() {
-        assertEval(Ignored.Unknown, "argv <- structure(list(a = 0.01, b = 171), .Names = c('a', 'b'));do.call('beta', argv)");
+        // FIXME RInternalError: not implemented: .Internal beta
+        assertEval(Ignored.Unimplemented, "argv <- structure(list(a = 0.01, b = 171), .Names = c('a', 'b'));do.call('beta', argv)");
     }
 
     @Test
     public void testbeta5() {
-        assertEval(Ignored.Unknown, "argv <- structure(list(a = 1e-200, b = 1e-200), .Names = c('a',     'b'));do.call('beta', argv)");
+        // FIXME RInternalError: not implemented: .Internal beta
+        assertEval(Ignored.Unimplemented, "argv <- structure(list(a = 1e-200, b = 1e-200), .Names = c('a',     'b'));do.call('beta', argv)");
     }
 }
diff --git a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_bindtextdomain.java b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_bindtextdomain.java
index 7053de9de63e69570ad498a220f2560154f1336b..cd828767b8020cc87b6227ae7114013254a6bee5 100644
--- a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_bindtextdomain.java
+++ b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_bindtextdomain.java
@@ -4,7 +4,7 @@
  * http://www.gnu.org/licenses/gpl-2.0.html
  *
  * Copyright (c) 2014, Purdue University
- * Copyright (c) 2014, 2016, Oracle and/or its affiliates
+ * Copyright (c) 2014, 2017, Oracle and/or its affiliates
  *
  * All rights reserved.
  */
@@ -19,11 +19,11 @@ public class TestBuiltin_bindtextdomain extends TestBase {
 
     @Test
     public void testbindtextdomain1() {
-        assertEval(Ignored.Unknown, "argv <- list('splines', '/home/roman/r-instrumented/library/translations'); .Internal(bindtextdomain(argv[[1]], argv[[2]]))");
+        assertEval(Ignored.MissingBuiltin, "argv <- list('splines', '/home/roman/r-instrumented/library/translations'); .Internal(bindtextdomain(argv[[1]], argv[[2]]))");
     }
 
     @Test
     public void testbindtextdomain2() {
-        assertEval(Ignored.Unknown, "argv <- list('utils', '/home/lzhao/hg/r-instrumented/library/translations'); .Internal(bindtextdomain(argv[[1]], argv[[2]]))");
+        assertEval(Ignored.MissingBuiltin, "argv <- list('utils', '/home/lzhao/hg/r-instrumented/library/translations'); .Internal(bindtextdomain(argv[[1]], argv[[2]]))");
     }
 }
diff --git a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_bitwiseShiftR.java b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_bitwiseShiftR.java
index 0f441d89da75e23997520e9e2f493ab1385b30ab..5066ea349408fb373d9b2c160ed1d6215cdf418d 100644
--- a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_bitwiseShiftR.java
+++ b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_bitwiseShiftR.java
@@ -33,6 +33,6 @@ public class TestBuiltin_bitwiseShiftR extends TestBase {
         assertEval("{ bitwShiftR(c(3,2,4), c(3+3i)) }");
 
         // No warning message printed for NAs produced by coercion
-        assertEval(Ignored.Unknown, "{ bitwShiftR(c(1,2,3,4), c(\"Hello\")) }");
+        assertEval(Output.IgnoreWarningMessage, "{ bitwShiftR(c(1,2,3,4), c(\"Hello\")) }");
     }
 }
diff --git a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_c.java b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_c.java
index a44f9d2c3a2f18db8ff09c2c8efc16e082edae85..99bfa6460b0b1ecef9cc6496604026b2028ba8f1 100644
--- a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_c.java
+++ b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_c.java
@@ -86,7 +86,11 @@ public class TestBuiltin_c extends TestBase {
 
     @Test
     public void testc14() {
-        assertEval(Ignored.Unknown,
+        // FIXME FastR does not honor setting options(digits=ndecimaldigits)
+        // First test is a simplified problem on which the second test would fail too (besides that
+        // it should work fine)
+        assertEval(Ignored.OutputFormatting, "options(digits=4);c(0.12345678912345,0.123)");
+        assertEval(Ignored.OutputFormatting,
                         "argv <- list(`Grand mean` = structure(103.87323943662, class = 'mtable'), structure(list(N = structure(c(78.7365206866197, 98.5088731171753, 113.842206450509, 123.008873117175), .Dim = 4L, .Dimnames = structure(list(N = c('0.0cwt', '0.2cwt', '0.4cwt', '0.6cwt')), .Names = 'N'), class = 'mtable'), `V:N` = structure(c(79.5323303457107, 86.1989970123773, 69.7732394366197, 98.0323303457106, 108.032330345711, 89.1989970123773, 114.198997012377, 116.698997012377, 110.365663679044, 124.365663679044, 126.365663679044, 118.032330345711), .Dim = 3:4, .Dimnames = structure(list(V = c('Golden.rain', 'Marvellous', 'Victory'), N = c('0.0cwt', '0.2cwt', '0.4cwt', '0.6cwt')), .Names = c('V', 'N')), class = 'mtable')), .Names = c('N', 'V:N')));c(argv[[1]],argv[[2]]);");
     }
 
@@ -302,7 +306,9 @@ public class TestBuiltin_c extends TestBase {
 
     @Test
     public void testc57() {
-        assertEval(Ignored.Unknown,
+        // FIXME FastR produces slightly different output for class = 'bibentry' than GnuR
+        // It should be decided which output is the best
+        assertEval(Ignored.ImplementationError,
                         "argv <- list(structure(list(structure(list(title = 'boot: Bootstrap R (S-PLUS) Functions', author = structure(list(structure(list(given = 'Angelo', family = 'Canty', role = 'aut', email = NULL, comment = 'S original'), .Names = c('given', 'family', 'role', 'email', 'comment')), structure(list(given = c('Brian', 'D.'), family = 'Ripley', role = c('aut', 'trl', 'cre'), email = 'ripley@stats.ox.ac.uk', comment = 'R port, author of parallel support'), .Names = c('given', 'family', 'role', 'email', 'comment'))), class = 'person'),     year = '2012', note = 'R package version 1.3-4', url = 'http://CRAN.R-project.org/package=boot'), .Names = c('title', 'author', 'year', 'note', 'url'), bibtype = 'Manual', key = 'boot-package')), class = 'bibentry'), structure(list(structure(list(title = 'Bootstrap Methods and Their Applications', author = structure(list(structure(list(given = c('Anthony', 'C.'), family = 'Davison', role = 'aut', email = NULL, comment = NULL), .Names = c('given', 'family', 'role', 'email', 'comment')), structure(list(    given = c('David', 'V.'), family = 'Hinkley', role = 'aut', email = NULL, comment = NULL), .Names = c('given', 'family', 'role', 'email', 'comment'))), class = 'person'), year = '1997', publisher = 'Cambridge University Press', address = 'Cambridge', isbn = '0-521-57391-2', url = 'http://statwww.epfl.ch/davison/BMA/'), .Names = c('title', 'author', 'year', 'publisher', 'address', 'isbn', 'url'), bibtype = 'Book', key = 'boot-book')), class = 'bibentry'));c(argv[[1]],argv[[2]]);");
     }
 
@@ -323,7 +329,11 @@ public class TestBuiltin_c extends TestBase {
 
     @Test
     public void testc61() {
-        assertEval(Ignored.Unknown, "argv <- list(structure(list(`ANY#ANY` = .Primitive('==')), .Names = 'ANY#ANY'), list());c(argv[[1]],argv[[2]]);");
+        // FIXME: FastR does not name the args for primitives so the following gives
+        // "function(null,null)" and "function(null)" while GnuR gives
+        // "function (e1, e2)" and "function (x)"
+        assertEval(Ignored.OutputFormatting, ".Primitive('==');.Primitive('!');");
+        assertEval(Ignored.OutputFormatting, "argv <- list(structure(list(`ANY#ANY` = .Primitive('==')), .Names = 'ANY#ANY'), list());c(argv[[1]],argv[[2]]);");
     }
 
     @Test
@@ -388,7 +398,10 @@ public class TestBuiltin_c extends TestBase {
 
     @Test
     public void testc74() {
-        assertEval(Ignored.Unknown,
+        // FIXME the contained "formatNum = function (x, ...) format(x, ..."
+        // is output without newline before 'format' in FastR
+        // and with newline before 'format' in GnuR
+        assertEval(Ignored.OutputFormatting,
                         "argv <- list(structure(list(object = c('time', 'status')), .Names = 'object'), structure(list(max.level = NA, vec.len = 4, digits.d = 3, nchar.max = 128, give.attr = TRUE, give.head = TRUE, width = 80L, envir = NULL, strict.width = 'no', formatNum = function (x, ...) format(x, trim = TRUE, drop0trailing = TRUE, ...), list.len = 99), .Names = c('max.level', 'vec.len', 'digits.d', 'nchar.max', 'give.attr', 'give.head', 'width', 'envir', 'strict.width', 'formatNum', 'list.len')), structure(list(give.length = TRUE, nest.lev = 2, indent.str = '  .. ..'), .Names = c('give.length', 'nest.lev', 'indent.str')));c(argv[[1]],argv[[2]],argv[[3]]);");
     }
 
diff --git a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_cbind.java b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_cbind.java
index d675297dfde60ea95f8c542ac019a3b20c5f6fd6..82d71854d968bd8b5b0084273e5fe17026599329 100644
--- a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_cbind.java
+++ b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_cbind.java
@@ -38,7 +38,9 @@ public class TestBuiltin_cbind extends TestBase {
 
     @Test
     public void testcbind4() {
-        assertEval(Ignored.Unknown,
+        // FastR gives longer output of "structure(c(3, 2, 2,..." but gives
+        // wider output of the structure (258 columns indent) which is less readable
+        assertEval(Ignored.OutputFormatting,
                         "argv <- list(structure(list(Sepal.Length = c(5.1, 4.9, 4.7, 4.6,     5, 5.4, 4.6, 5, 4.4, 4.9, 5.4, 4.8, 4.8, 4.3, 5.8, 5.7, 5.4,     5.1, 5.7, 5.1, 5.4, 5.1, 4.6, 5.1, 4.8, 5, 5, 5.2, 5.2, 4.7,     4.8, 5.4, 5.2, 5.5, 4.9, 5, 5.5, 4.9, 4.4, 5.1, 5, 4.5, 4.4,     5, 5.1, 4.8, 5.1, 4.6, 5.3, 5, 7, 6.4, 6.9, 5.5, 6.5, 5.7,     6.3, 4.9, 6.6, 5.2, 5, 5.9, 6, 6.1, 5.6, 6.7, 5.6, 5.8, 6.2,     5.6, 5.9, 6.1, 6.3, 6.1, 6.4, 6.6, 6.8, 6.7, 6, 5.7, 5.5,     5.5, 5.8, 6, 5.4, 6, 6.7, 6.3, 5.6, 5.5, 5.5, 6.1, 5.8, 5,     5.6, 5.7, 5.7, 6.2, 5.1, 5.7, 6.3, 5.8, 7.1, 6.3, 6.5, 7.6,     4.9, 7.3, 6.7, 7.2, 6.5, 6.4, 6.8, 5.7, 5.8, 6.4, 6.5, 7.7,     7.7, 6, 6.9, 5.6, 7.7, 6.3, 6.7, 7.2, 6.2, 6.1, 6.4, 7.2,     7.4, 7.9, 6.4, 6.3, 6.1, 7.7, 6.3, 6.4, 6, 6.9, 6.7, 6.9,     5.8, 6.8, 6.7, 6.7, 6.3, 6.5, 6.2, 5.9), Sepal.Width = c(4,     3, 3, 3, 4, 4, 3, 3, 3, 3, 4, 3, 3, 3, 4, 4, 4, 4, 4, 4,     3, 4, 4, 3, 3, 3, 3, 4, 3, 3, 3, 3, 4, 4, 3, 3, 4, 4, 3,     3, 4, 2, 3, 4, 4, 3, 4, 3, 4, 3, 3, 3, 3, 2, 3, 3, 3, 2,     3, 3, 2, 3, 2, 3, 3, 3, 3, 3, 2, 2, 3, 3, 2, 3, 3, 3, 3,     3, 3, 3, 2, 2, 3, 3, 3, 3, 3, 2, 3, 2, 3, 3, 3, 2, 3, 3,     3, 3, 2, 3, 3, 3, 3, 3, 3, 3, 2, 3, 2, 4, 3, 3, 3, 2, 3,     3, 3, 4, 3, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 3, 3,     3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 2, 3, 3, 3), Petal.Length = c(1.4,     1.4, 1.3, 1.5, 1.4, 1.7, 1.4, 1.5, 1.4, 1.5, 1.5, 1.6, 1.4,     1.1, 1.2, 1.5, 1.3, 1.4, 1.7, 1.5, 1.7, 1.5, 1, 1.7, 1.9,     1.6, 1.6, 1.5, 1.4, 1.6, 1.6, 1.5, 1.5, 1.4, 1.5, 1.2, 1.3,     1.4, 1.3, 1.5, 1.3, 1.3, 1.3, 1.6, 1.9, 1.4, 1.6, 1.4, 1.5,     1.4, 4.7, 4.5, 4.9, 4, 4.6, 4.5, 4.7, 3.3, 4.6, 3.9, 3.5,     4.2, 4, 4.7, 3.6, 4.4, 4.5, 4.1, 4.5, 3.9, 4.8, 4, 4.9, 4.7,     4.3, 4.4, 4.8, 5, 4.5, 3.5, 3.8, 3.7, 3.9, 5.1, 4.5, 4.5,     4.7, 4.4, 4.1, 4, 4.4, 4.6, 4, 3.3, 4.2, 4.2, 4.2, 4.3, 3,     4.1, 6, 5.1, 5.9, 5.6, 5.8, 6.6, 4.5, 6.3, 5.8, 6.1, 5.1,     5.3, 5.5, 5, 5.1, 5.3, 5.5, 6.7, 6.9, 5, 5.7, 4.9, 6.7, 4.9,     5.7, 6, 4.8, 4.9, 5.6, 5.8, 6.1, 6.4, 5.6, 5.1, 5.6, 6.1,     5.6, 5.5, 4.8, 5.4, 5.6, 5.1, 5.1, 5.9, 5.7, 5.2, 5, 5.2,     5.4, 5.1), Petal.Width = c(0.2, 0.2, 0.2, 0.2, 0.2, 0.4,     0.3, 0.2, 0.2, 0.1, 0.2, 0.2, 0.1, 0.1, 0.2, 0.4, 0.4, 0.3,     0.3, 0.3, 0.2, 0.4, 0.2, 0.5, 0.2, 0.2, 0.4, 0.2, 0.2, 0.2,     0.2, 0.4, 0.1, 0.2, 0.2, 0.2, 0.2, 0.1, 0.2, 0.2, 0.3, 0.3,     0.2, 0.6, 0.4, 0.3, 0.2, 0.2, 0.2, 0.2, 1.4, 1.5, 1.5, 1.3,     1.5, 1.3, 1.6, 1, 1.3, 1.4, 1, 1.5, 1, 1.4, 1.3, 1.4, 1.5,     1, 1.5, 1.1, 1.8, 1.3, 1.5, 1.2, 1.3, 1.4, 1.4, 1.7, 1.5,     1, 1.1, 1, 1.2, 1.6, 1.5, 1.6, 1.5, 1.3, 1.3, 1.3, 1.2, 1.4,     1.2, 1, 1.3, 1.2, 1.3, 1.3, 1.1, 1.3, 2.5, 1.9, 2.1, 1.8,     2.2, 2.1, 1.7, 1.8, 1.8, 2.5, 2, 1.9, 2.1, 2, 2.4, 2.3, 1.8,     2.2, 2.3, 1.5, 2.3, 2, 2, 1.8, 2.1, 1.8, 1.8, 1.8, 2.1, 1.6,     1.9, 2, 2.2, 1.5, 1.4, 2.3, 2.4, 1.8, 1.8, 2.1, 2.4, 2.3,     1.9, 2.3, 2.5, 2.3, 1.9, 2, 2.3, 1.8), Species = structure(c(1L,     1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,     1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,     1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,     1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L,     2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L,     2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L,     2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 3L, 3L, 3L, 3L, 3L, 3L,     3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L,     3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L,     3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L),     .Label = c('setosa', 'versicolor', 'virginica'), class = 'factor')),     .Names = c('Sepal.Length', 'Sepal.Width', 'Petal.Length',         'Petal.Width', 'Species'), row.names = c(NA, -150L),     class = 'data.frame'), structure(c(3, 2, 2, 2, 3, 3, 2, 2,     2, 2, 3, 2, 2, 2, 3, 3, 3, 3, 3, 3, 2, 3, 3, 2, 2, 2, 2,     3, 2, 2, 2, 2, 3, 3, 2, 2, 3, 3, 2, 2, 3, 1, 2, 3, 3, 2,     3, 2, 3, 2, 2, 2, 2, 1, 2, 2, 2, 1, 2, 2, 1, 2, 1, 2, 2,     2, 2, 2, 1, 1, 2, 2, 1, 2, 2, 2, 2, 2, 2, 2, 1, 1, 2, 2,     2, 2, 2, 1, 2, 1, 2, 2, 2, 1, 2, 2, 2, 2, 1, 2, 2, 2, 2,     2, 2, 2, 1, 2, 1, 3, 2, 2, 2, 1, 2, 2, 2, 3, 2, 1, 2, 2,     2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2,     2, 2, 2, 2, 2, 1, 2, 2, 2), .Names = c('4', '3', '3', '3',     '4', '4', '3', '3', '3', '3', '4', '3', '3', '3', '4', '4',     '4', '4', '4', '4', '3', '4', '4', '3', '3', '3', '3', '4',     '3', '3', '3', '3', '4', '4', '3', '3', '4', '4', '3', '3',     '4', '2', '3', '4', '4', '3', '4', '3', '4', '3', '3', '3',     '3', '2', '3', '3', '3', '2', '3', '3', '2', '3', '2', '3',     '3', '3', '3', '3', '2', '2', '3', '3', '2', '3', '3', '3',     '3', '3', '3', '3', '2', '2', '3', '3', '3', '3', '3', '2',     '3', '2', '3', '3', '3', '2', '3', '3', '3', '3', '2', '3',     '3', '3', '3', '3', '3', '3', '2', '3', '2', '4', '3', '3',     '3', '2', '3', '3', '3', '4', '3', '2', '3', '3', '3', '3',     '3', '3', '3', '3', '3', '3', '3', '4', '3', '3', '3', '3',     '3', '3', '3', '3', '3', '3', '3', '3', '3', '3', '2', '3',     '3', '3')));" +
                                         "do.call('cbind', argv)");
     }
diff --git a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_chartr.java b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_chartr.java
index 5174298f6c1667163cc76353b5e3a64686fd1071..ea22fa45534af46ada63cf56eca3fbe11cb9fdfa 100644
--- a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_chartr.java
+++ b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_chartr.java
@@ -4,7 +4,7 @@
  * http://www.gnu.org/licenses/gpl-2.0.html
  *
  * Copyright (c) 2014, Purdue University
- * Copyright (c) 2014, 2016, Oracle and/or its affiliates
+ * Copyright (c) 2014, 2017, Oracle and/or its affiliates
  *
  * All rights reserved.
  */
@@ -19,26 +19,26 @@ public class TestBuiltin_chartr extends TestBase {
 
     @Test
     public void testchartr1() {
-        assertEval(Ignored.Unknown, "argv <- list('.', '.', c('0.02', '0.06', '0.11', '0.22', '0.56', '1.1')); .Internal(chartr(argv[[1]], argv[[2]], argv[[3]]))");
+        assertEval(Ignored.Unimplemented, "argv <- list('.', '.', c('0.02', '0.06', '0.11', '0.22', '0.56', '1.1')); .Internal(chartr(argv[[1]], argv[[2]], argv[[3]]))");
     }
 
     @Test
     public void testchartr2() {
-        assertEval(Ignored.Unknown, "argv <- list('iXs', 'why', 'MiXeD cAsE 123'); .Internal(chartr(argv[[1]], argv[[2]], argv[[3]]))");
+        assertEval(Ignored.Unimplemented, "argv <- list('iXs', 'why', 'MiXeD cAsE 123'); .Internal(chartr(argv[[1]], argv[[2]], argv[[3]]))");
     }
 
     @Test
     public void testchartr3() {
-        assertEval(Ignored.Unknown, "argv <- list('a-cX', 'D-Fw', 'MiXeD cAsE 123'); .Internal(chartr(argv[[1]], argv[[2]], argv[[3]]))");
+        assertEval(Ignored.Unimplemented, "argv <- list('a-cX', 'D-Fw', 'MiXeD cAsE 123'); .Internal(chartr(argv[[1]], argv[[2]], argv[[3]]))");
     }
 
     @Test
     public void testchartr4() {
-        assertEval(Ignored.Unknown, "argv <- list('.', '.', character(0)); .Internal(chartr(argv[[1]], argv[[2]], argv[[3]]))");
+        assertEval(Ignored.Unimplemented, "argv <- list('.', '.', character(0)); .Internal(chartr(argv[[1]], argv[[2]], argv[[3]]))");
     }
 
     @Test
     public void testchartr6() {
-        assertEval(Ignored.Unknown, "argv <- structure(list(old = 'NA', new = 'na', x = c('NA', NA,     'BANANA')), .Names = c('old', 'new', 'x'));do.call('chartr', argv)");
+        assertEval(Ignored.Unimplemented, "argv <- structure(list(old = 'NA', new = 'na', x = c('NA', NA,     'BANANA')), .Names = c('old', 'new', 'x'));do.call('chartr', argv)");
     }
 }
diff --git a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_classassign.java b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_classassign.java
index 28e7365e5ad2e4c0eb0e083f59c6d931092d5b3d..a0b45bf63d574b4da1493cc0143992448abfaad5 100644
--- a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_classassign.java
+++ b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_classassign.java
@@ -19,13 +19,15 @@ public class TestBuiltin_classassign extends TestBase {
 
     @Test
     public void testclassassign1() {
-        assertEval(Ignored.Unknown,
+        // GnuR: extra newline before '.Ignored' and several 'attr(,"class")'
+        assertEval(Ignored.OutputFormatting,
                         "argv <- list(structure(function (x, mode = 'any') .Internal(as.vector(x, mode)), target = structure('ANY', class = structure('signature', package = 'methods'), .Names = 'x', package = 'methods'), defined = structure('ANY', class = structure('signature', package = 'methods'), .Names = 'x', package = 'methods'), generic = character(0), class = structure('MethodDefinition', package = 'methods')), value = structure('MethodDefinition', package = 'methods'));`class<-`(argv[[1]],argv[[2]]);");
     }
 
     @Test
     public void testclassassign2() {
-        assertEval(Ignored.Unknown,
+        // GnuR: An extra "c0" in output
+        assertEval(Ignored.OutputFormatting,
                         "argv <- list(structure(list(c0 = structure(integer(0), .Label = character(0), class = 'factor')), .Names = 'c0', row.names = character(0), class = structure('integer(0)', .Names = 'c0')), structure(list(c0 = structure(integer(0), .Label = character(0), class = 'factor')), .Names = 'c0', row.names = character(0), class = structure('integer(0)', .Names = 'c0')));`class<-`(argv[[1]],argv[[2]]);");
     }
 
@@ -41,7 +43,8 @@ public class TestBuiltin_classassign extends TestBase {
 
     @Test
     public void testclassassign5() {
-        assertEval(Ignored.Unknown,
+        // GnuR: extra 'attr(,"class")'
+        assertEval(Ignored.OutputFormatting,
                         "argv <- list(structure(character(0), .Names = character(0), package = character(0), class = structure('signature', package = 'methods')), value = structure('signature', package = 'methods'));`class<-`(argv[[1]],argv[[2]]);");
     }
 
@@ -62,19 +65,22 @@ public class TestBuiltin_classassign extends TestBase {
 
     @Test
     public void testclassassign9() {
-        assertEval(Ignored.Unknown,
+        // GnuR: extra 'attr(,"class")'
+        assertEval(Ignored.OutputFormatting,
                         "argv <- list(structure(c(1, 0, 0, 0, 1, 0, 0, 0, 1), .Dim = c(3L, 3L), class = structure('mmat2', package = '.GlobalEnv')), value = structure('mmat2', package = '.GlobalEnv'));`class<-`(argv[[1]],argv[[2]]);");
     }
 
     @Test
     public void testclassassign10() {
-        assertEval(Ignored.Unknown,
+        // FastR: extra newline after date
+        assertEval(Output.IgnoreWhitespace,
                         "argv <- list(structure(c('o', 'p', 'v', 'i', 'r', 'w', 'b', 'm', 'f', 's'), date = structure(1224086400, class = c('POSIXct', 'POSIXt'), tzone = ''), class = 'stamped'), value = 'stamped');`class<-`(argv[[1]],argv[[2]]);");
     }
 
     @Test
     public void testclassassign11() {
-        assertEval(Ignored.Unknown,
+        // GnuR: extra output of 3.141... and attr(,"class")
+        assertEval(Ignored.OutputFormatting,
                         "argv <- list(structure(3.14159265358979, class = structure('3.14159265358979', class = 'testit')), structure(3.14159265358979, class = structure('3.14159265358979', class = 'testit')));`class<-`(argv[[1]],argv[[2]]);");
     }
 
@@ -85,13 +91,15 @@ public class TestBuiltin_classassign extends TestBase {
 
     @Test
     public void testclassassign13() {
-        assertEval(Ignored.Unknown,
+        // GnuR: extra 'attr(,"class")'
+        assertEval(Ignored.OutputFormatting,
                         "argv <- list(structure(function (qr, y, k = qr$rank) standardGeneric('qr.fitted'), target = structure('ANY', class = structure('signature', package = 'methods'), .Names = 'qr', package = 'methods'), defined = structure('ANY', class = structure('signature', package = 'methods'), .Names = 'qr', package = 'methods'), generic = character(0), class = structure('MethodDefinition', package = 'methods')), value = structure('MethodDefinition', package = 'methods'));`class<-`(argv[[1]],argv[[2]]);");
     }
 
     @Test
     public void testclassassign14() {
-        assertEval(Ignored.Unknown,
+        // GnuR: extra 'attr(,"class")'
+        assertEval(Ignored.OutputFormatting,
                         "argv <- list(structure(function (x = 1, nrow, ncol) standardGeneric('diag'), target = structure('ANY', class = structure('signature', package = 'methods'), .Names = 'x', package = 'methods'), defined = structure('ANY', class = structure('signature', package = 'methods'), .Names = 'x', package = 'methods'), generic = character(0), class = structure('MethodDefinition', package = 'methods')), value = structure('MethodDefinition', package = 'methods'));`class<-`(argv[[1]],argv[[2]]);");
     }
 
@@ -102,25 +110,29 @@ public class TestBuiltin_classassign extends TestBase {
 
     @Test
     public void testclassassign16() {
-        assertEval(Ignored.Unknown,
+        // GnuR: extra 'attr(,"class")'
+        assertEval(Ignored.OutputFormatting,
                         "argv <- list(structure(function (x, y, ...) standardGeneric('plot'), target = structure('ANY', class = structure('signature', package = 'methods'), .Names = 'x', package = 'methods'), defined = structure('ANY', class = structure('signature', package = 'methods'), .Names = 'x', package = 'methods'), generic = character(0), class = structure('MethodDefinition', package = 'methods')), value = structure('MethodDefinition', package = 'methods'));`class<-`(argv[[1]],argv[[2]]);");
     }
 
     @Test
     public void testclassassign17() {
-        assertEval(Ignored.Unknown,
+        // GnuR: extra 'attr(,"class")'
+        assertEval(Ignored.OutputFormatting,
                         "argv <- list(structure(function (x, logarithm = TRUE, ...) UseMethod('determinant'), target = structure('ANY', class = structure('signature', package = 'methods'), .Names = 'x', package = 'methods'), defined = structure('ANY', class = structure('signature', package = 'methods'), .Names = 'x', package = 'methods'), generic = character(0), class = structure('MethodDefinition', package = 'methods')), value = structure('MethodDefinition', package = 'methods'));`class<-`(argv[[1]],argv[[2]]);");
     }
 
     @Test
     public void testclassassign18() {
-        assertEval(Ignored.Unknown,
+        // GnuR: extra 'attr(,"class")'
+        assertEval(Ignored.OutputFormatting,
                         "argv <- list(structure(function (x, y = NULL) .Internal(crossprod(x, y)), target = structure('ANY', class = structure('signature', package = 'methods'), .Names = 'x', package = 'methods'), defined = structure('ANY', class = structure('signature', package = 'methods'), .Names = 'x', package = 'methods'), generic = character(0), class = structure('MethodDefinition', package = 'methods')), value = structure('MethodDefinition', package = 'methods'));`class<-`(argv[[1]],argv[[2]]);");
     }
 
     @Test
     public void testclassassign19() {
-        assertEval(Ignored.Unknown,
+        // GnuR: extra 'attr(,"class")'
+        assertEval(Ignored.OutputFormatting,
                         "argv <- list(structure(function (obj, force = FALSE) standardGeneric('unname'), target = structure('ANY', class = structure('signature', package = 'methods'), .Names = 'obj', package = 'methods'), defined = structure('ANY', class = structure('signature', package = 'methods'), .Names = 'obj', package = 'methods'), generic = character(0), class = structure('MethodDefinition', package = 'methods')), value = structure('MethodDefinition', package = 'methods'));`class<-`(argv[[1]],argv[[2]]);");
     }
 
diff --git a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_colMeans.java b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_colMeans.java
index 25ae251a816d2125cae289712f6b4ae3a8685e58..9ea4a30bba638b7d3415be19ecc921ff3929f5a6 100644
--- a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_colMeans.java
+++ b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_colMeans.java
@@ -4,7 +4,7 @@
  * http://www.gnu.org/licenses/gpl-2.0.html
  *
  * Copyright (c) 2012-2014, Purdue University
- * Copyright (c) 2013, 2016, Oracle and/or its affiliates
+ * Copyright (c) 2013, 2017, Oracle and/or its affiliates
  *
  * All rights reserved.
  */
@@ -64,7 +64,10 @@ public class TestBuiltin_colMeans extends TestBase {
 
     @Test
     public void testcolMeans10() {
-        assertEval(Ignored.Unknown,
+        // FIXME Not sure if it's rounding error or ImplementationError
+        // Expected output: [1] -2.929138e-14
+        // FastR output: [1] -2.892034e-14
+        assertEval(Ignored.ImplementationError,
                         "argv <- list(structure(c(NA, 30.6929824561403, 25.6929824561403, 18.6929824561403, 6.69298245614035, -6.30701754385965, -13.3070175438597, -24.3070175438597, -21.3070175438597, 3.69298245614035, -2.30701754385965, -1.30701754385965, -20.3070175438597, -17.3070175438597, NA, NA, 12.6929824561403, 0.692982456140349, 0.692982456140349, -5.30701754385965, -11.3070175438597, -19.3070175438597, -10.3070175438597, -17.3070175438597, -20.3070175438597, -32.3070175438597, -24.3070175438597, -33.3070175438597, -31.3070175438597, -24.3070175438597, NA, -24.3070175438597, 2.69298245614035, 17.6929824561403, 18.6929824561403, 3.69298245614035, 14.6929824561403, 4.69298245614035, 14.6929824561403, 0.692982456140349, 14.6929824561403, 11.6929824561403, 22.6929824561403, 16.6929824561403, 19.6929824561403, 14.6929824561403, 10.6929824561403, 18.6929824561403, 22.6929824561403, 5.69298245614035, 6.69298245614035, 0.692982456140349, 3.69298245614035, -7.30701754385965, -8.30701754385965, -4.30701754385965, 0.692982456140349, 5.69298245614035, 4.69298245614035, 9.69298245614035, 14.6929824561403, 5.69298245614035, 4.69298245614035, 0.692982456140349, 15.6929824561403, 26.6929824561403, 14.6929824561403, 21.6929824561403, 22.6929824561403, 14.6929824561403, 5.69298245614035, 17.6929824561403, 19.6929824561403, 7.69298245614035, 5.69298245614035, 0.692982456140349, 23.6929824561403, 16.6929824561403, 12.6929824561403, 12.6929824561403, 14.6929824561403, 7.69298245614035, 12.6929824561403, 5.69298245614035, 6.69298245614035, -10.3070175438597, -0.307017543859651, -12.3070175438597, -12.3070175438597, -4.30701754385965, -18.3070175438597, -10.3070175438597, -20.3070175438597, -7.30701754385965, -21.3070175438597, -12.3070175438597, 2.69298245614035, 8.69298245614035, 8.69298245614035, -0.307017543859651, 9.69298245614035, -3.30701754385965, 4.69298245614035, -4.30701754385965, -5.30701754385965, -8.30701754385965, -2.30701754385965, -7.30701754385965, -7.30701754385965, 4.69298245614035, NA, NA, 11.6929824561403, -12.3070175438597, -16.3070175438597, -29.3070175438597, -28.3070175438597, -31.3070175438597, -32.3070175438597, -32.3070175438597), .Dim = c(120L, 1L), '`scaled:center`' = 56.3070175438597, .Dimnames = list(NULL, 'Series 1'), .Tsp = c(1, 120, 1), class = 'ts'), 120, 1, TRUE); .Internal(colMeans(argv[[1]], argv[[2]], argv[[3]], argv[[4]]))");
     }
 
diff --git a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_copyDFattr.java b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_copyDFattr.java
index fa5d0bd6d6a24d3564afe1ae31be9de78ca0f93e..eab5145ae376887c17bb8c306b7c4e2645a03f1a 100644
--- a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_copyDFattr.java
+++ b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_copyDFattr.java
@@ -59,7 +59,8 @@ public class TestBuiltin_copyDFattr extends TestBase {
 
     @Test
     public void testcopyDFattr9() {
-        assertEval(Ignored.Unknown,
+        // FIXME RInternalError: java.lang.ArrayIndexOutOfBoundsException: 0
+        assertEval(Ignored.ImplementationError,
                         "argv <- list(structure(list(Version = c('2.11.0', '2.11.0', '2.11.0', '2.11.0', '2.11.0', '2.11.0', '2.11.0', '2.11.0', '2.11.0'), Date = c(NA_character_, NA_character_, NA_character_, NA_character_, NA_character_, NA_character_, NA_character_, NA_character_, NA_character_), Category = c('BUG FIXES', 'BUG FIXES', 'BUG FIXES', 'BUG FIXES', 'BUG FIXES', 'BUG FIXES', 'BUG FIXES', 'BUG FIXES', 'BUG FIXES'), Text = c('Using with(), eval() etc with a list with some unnamed elements now\\n works.  (PR#14035)', 'cor(A, B) where A is n x 1 and B a 1-dimensional array segfaulted or\\n gave an internal error.  (The case cor(B, A) was PR#7116.)', 'cut.POSIXt() applied to a start value after the DST transition on a\\n DST-change day could give the wrong time for argument breaks in\\n units of days or longer.  (PR#14208)', 'do_par() UNPROTECTed too early (PR#14214)', 'Subassignment x[[....]] <- y didn\\'t check for a zero-length right\\n hand side, and inserted a rubbish value.  (PR#14217)', 'Extreme tail behavior of, pbeta() {and hence pf()}, e.g., pbeta(x,\\n 3, 2200, lower.tail=FALSE, log.p=TRUE) now returns finite values\\n instead of jumping to -Inf too early.  (PR#14230).', 'read.fwf() misread multi-line records when n was specified.\\n (PR#14241)', 'gzcon( <textConnection> ), an error, no longer damages the\\n connection (in a way to have it segfault).  (PR#14237)', 'If xy[z].coords (used internally by many graphics functions) are\\n given a list as x, they now check that the list has suitable names\\n and give a more informative error message.  (PR#13936)')), .Names = c('Version', 'Date', 'Category', 'Text'), bad = c(FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE), package = 'R', row.names = c(1473L, 1483L, 1484L, 1485L, 1486L, 1493L, 1499L, 1503L, 1505L), class = c('news_db_from_Rd', 'news_db', 'data.frame')), structure(list(Version = NULL, Date = NULL, Category = NULL, Text = NULL), .Names = c('Version', 'Date', 'Category', 'Text'), bad = c(FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE), package = 'R', row.names = c(1473L, 1483L, 1484L, 1485L, 1486L, 1493L, 1499L, 1503L, 1505L), class = c('news_db_from_Rd', 'news_db', 'data.frame'))); .Internal(copyDFattr(argv[[1]], argv[[2]]))");
     }
 
@@ -81,7 +82,8 @@ public class TestBuiltin_copyDFattr extends TestBase {
 
     @Test
     public void testcopyDFattr13() {
-        assertEval(Ignored.Unknown,
+        // GnuR extra attr(,"class") in output - not sure if appropriate
+        assertEval(Ignored.ReferenceError,
                         "argv <- list(structure(list(x = 1:10, y = c(-0.626453810742332, 0.183643324222082, -0.835628612410047, 1.59528080213779, 0.329507771815361, -0.820468384118015, 0.487429052428485, 0.738324705129217, 0.575781351653492, -0.305388387156356), z = structure(c(9L, 3L, 6L, 2L, 10L, 5L, 1L, 4L, 8L, 7L), .Label = c('a', 'c', 'f', 'h', 'i', 'p', 'v', 'x', 'y', 'z'), class = 'factor')), .Names = c('x', 'y', 'z'), row.names = c(NA, 10L), .S3Class = 'data.frame', timestamps = structure(1386392033.84327, class = c('POSIXct', 'POSIXt')), class = structure('myFrame', package = '.GlobalEnv')), structure(list(x = NULL, y = NULL, z = NULL), .Names = c('x', 'y', 'z'), row.names = c(NA, 10L), .S3Class = 'data.frame', timestamps = structure(1386392033.84327, class = c('POSIXct', 'POSIXt')), class = structure('myFrame', package = '.GlobalEnv'))); .Internal(copyDFattr(argv[[1]], argv[[2]]))");
     }
 
diff --git a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_cospi.java b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_cospi.java
index 1559f7c4f3c135ea293b52de74335bd17ca44060..22f4fbe2f12818057a7abe0054038cb199250cb7 100644
--- a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_cospi.java
+++ b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_cospi.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013, 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2017, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -62,7 +62,8 @@ public class TestBuiltin_cospi extends TestBase {
 
     @Test
     public void testcos7() {
-        assertEval(Ignored.Unknown, "argv <- list(Inf);cospi(argv[[1]]);");
+        // Missing warning: In cospi(argv[[1]]) : NaNs produced
+        assertEval(Output.MissingWarning, "argv <- list(Inf);cospi(argv[[1]]);");
     }
 
     @Test
diff --git a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_crossprod.java b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_crossprod.java
index 74a1c7a8e1c20bb7bdfa5d8849aa3a8ea159f4a5..07cbdc0b4b73033d48b57d03fa4e3739162269c3 100644
--- a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_crossprod.java
+++ b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_crossprod.java
@@ -24,7 +24,9 @@ public class TestBuiltin_crossprod extends TestBase {
 
     @Test
     public void testcrossprod2() {
-        assertEval(Ignored.Unknown, "argv <- list(numeric(0), numeric(0)); .Internal(crossprod(argv[[1]], argv[[2]]))");
+        // FIXME NullPointerException at
+        // com.oracle.truffle.r.nodes.builtin.base.MatMult.left0Dim(MatMult.java:119)
+        assertEval(Ignored.ImplementationError, "argv <- list(numeric(0), numeric(0)); .Internal(crossprod(argv[[1]], argv[[2]]))");
     }
 
     @Test
@@ -54,7 +56,8 @@ public class TestBuiltin_crossprod extends TestBase {
 
     @Test
     public void testcrossprod8() {
-        assertEval(Ignored.Unknown,
+        // FIXME FastR ignores .Dimnames (docs say to keep them)
+        assertEval(Ignored.ImplementationError,
                         "argv <- list(structure(c(-0.0972759604917099, -0.0972759604917099, -0.197781705719934, -0.197781705719934, -0.258476920906799, -0.258476920906799, -0.31681058743414, -0.31681058743414, -0.36711291168933, -0.36711291168933, -0.386611727075222, -0.386611727075222, -0.339690730499459, -0.33969073049946, -0.392353467475584, -0.392353467475584, -0.277328754578855, -0.277328754578855, -0.062581948827679, -0.062581948827679, 0.204605005658209, 0.204605005658209, 0.32860008733551, 0.32860008733551, 0.504748197638673, 0.504748197638673, 0.0398546163039329, 0.039854616303933, -0.269613788250837, -0.269613788250837, -0.312096598983548, -0.312096598983548, 0.0190548270250438, 0.0190548270250438, 0.270521530002251, 0.270521530002251), .Dim = c(12L, 3L)), structure(c(-2.82631170793264, -2.82631170793264, -3.89457420977924, -3.89457420977924, -3.62818861156626, -3.62818861156626, -2.72530862462141, -2.72530862462141, -1.437640468988, -1.437640468988, -0.811701520293695, -0.811701520293695, 14291.543903102, 14291.543903102, 13346.8386233407, 13346.8386233407, 8863.44390274002, 8863.44390274002, 4080.15117667984, 4080.15117667984, 979.818149952962, 979.818149952962, 296.593928028368, 296.593928028368), .Dim = c(12L, 2L), .Dimnames = list(NULL, c('Vm', 'K')))); .Internal(crossprod(argv[[1]], argv[[2]]))");
     }
 
@@ -68,7 +71,8 @@ public class TestBuiltin_crossprod extends TestBase {
         assertEval("{ crossprod(c(1,NA,2), matrix(1:6, ncol=2)) }");
         assertEval("{ x <- matrix(c(NaN,2,3,4,5,NA), nrow=3); crossprod(x) }");
 
-        assertEval(Ignored.Unknown, "{ x <- matrix(c(NaN,2+3i,3,4+1i,5,NA), nrow=3); crossprod(x) }");
+        // FIXME Number at [2][2] position of resulting matrix differs
+        assertEval(Ignored.ImplementationError, "{ x <- matrix(c(NaN,2+3i,3,4+1i,5,NA), nrow=3); crossprod(x) }");
 
         assertEval(Output.ImprovedErrorContext, "{ crossprod('asdf', matrix(1:6, ncol=2)) }");
     }
diff --git a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_cumsum.java b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_cumsum.java
index 92b68c48857b5db42a25b7fb000acdfd0226a46b..cee940d99ed89219bd8ec43a0c114b25be6d8ad6 100644
--- a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_cumsum.java
+++ b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_cumsum.java
@@ -111,9 +111,9 @@ public class TestBuiltin_cumsum extends TestBase {
         assertEval("{ cumsum(rep(1e308, 3) ) }");
         assertEval("{ cumsum(c(1e308, 1e308, NA, 1, 2)) }");
         // FIXME missing warning
-        assertEval(Ignored.Unknown, "{ cumsum(c(2000000000L, 2000000000L)) }");
+        assertEval(Output.MissingWarning, "{ cumsum(c(2000000000L, 2000000000L)) }");
         // FIXME missing warning
-        assertEval(Ignored.Unknown, "{ cumsum(c(-2147483647L, -1L)) }");
+        assertEval(Output.MissingWarning, "{ cumsum(c(-2147483647L, -1L)) }");
 
         assertEval("values <- c(1,2,NaN,1, NA); cumsum(values); cumsum(as.integer(values))");
         assertEval("values <- c(1,2,NA,1, NaN); cumsum(values); cumsum(as.integer(values))");
diff --git a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_date.java b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_date.java
index 2e5cb8a4f5ee9ee58a0e107abeac83898e2f0025..8698b629ba7f7cf19dce2c02b2997d2a287d6ec5 100644
--- a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_date.java
+++ b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_date.java
@@ -4,7 +4,7 @@
  * http://www.gnu.org/licenses/gpl-2.0.html
  *
  * Copyright (c) 2012-2014, Purdue University
- * Copyright (c) 2013, 2016, Oracle and/or its affiliates
+ * Copyright (c) 2013, 2017, Oracle and/or its affiliates
  *
  * All rights reserved.
  */
@@ -20,6 +20,7 @@ public class TestBuiltin_date extends TestBase {
     @Test
     public void testDate() {
         // Date at real time differs by milliseconds.
-        assertEval(Ignored.Unknown, "{date()}");
+        // Here the output would always differ since the GnuR test outputs are pre-generated
+        assertEval(Ignored.OutputFormatting, "{date()}");
     }
 }
diff --git a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_dfltWarn.java b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_dfltWarn.java
index d21234fe96471e13a6cebad04372079b44f6e35b..06811da2dda85e08e973df3686131cd1116be013 100644
--- a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_dfltWarn.java
+++ b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_dfltWarn.java
@@ -70,8 +70,7 @@ public class TestBuiltin_dfltWarn extends TestBase {
 
     @Test
     public void testdfltWarn11() {
-        assertEval(Ignored.Unknown,
-                        "argv <- list('Invalid file name(s) for R code in ./myTst/R:\\n  file55711ba85492\\n are now renamed to z<name>.R', quote(package.skeleton('myTst', code_files = tmp))); .Internal(.dfltWarn(argv[[1]], argv[[2]]))");
+        assertEval("argv <- list('Invalid file name(s) for R code in ./myTst/R:\\n  file55711ba85492\\n are now renamed to z<name>.R', quote(package.skeleton('myTst', code_files = tmp))); .Internal(.dfltWarn(argv[[1]], argv[[2]]))");
     }
 
     @Test
diff --git a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_dimassign.java b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_dimassign.java
index 539ebde4556625483a39e3ecf70c3350fc65e12c..f453a15ed638cf8f3d02e0664ea6a76095c0767f 100644
--- a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_dimassign.java
+++ b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_dimassign.java
@@ -54,7 +54,8 @@ public class TestBuiltin_dimassign extends TestBase {
 
     @Test
     public void testdimassign8() {
-        assertEval(Ignored.Unknown, "argv <- list(NULL, NULL);`dim<-`(argv[[1]],argv[[2]]);");
+        // FIXME Missing specialization in UpdateDimNode
+        assertEval(Ignored.Unimplemented, "argv <- list(NULL, NULL);`dim<-`(argv[[1]],argv[[2]]);");
     }
 
     @Test
diff --git a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_dir.java b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_dir.java
index 1d1d017705733c674caf5a7edebaaf2bd897f10b..ae7e5d9c4f8d6c185e88c9d1e4ae948a9bffa03b 100644
--- a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_dir.java
+++ b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_dir.java
@@ -4,7 +4,7 @@
  * http://www.gnu.org/licenses/gpl-2.0.html
  *
  * Copyright (c) 2014, Purdue University
- * Copyright (c) 2014, 2016, Oracle and/or its affiliates
+ * Copyright (c) 2014, 2017, Oracle and/or its affiliates
  *
  * All rights reserved.
  */
@@ -20,6 +20,6 @@ public class TestBuiltin_dir extends TestBase {
 
     @Test
     public void testdir1() {
-        assertEval(Ignored.Unknown, "argv <- structure(list(path = '.', pattern = 'myTst_.*tar\\.gz$'),     .Names = c('path', 'pattern'));do.call('dir', argv)");
+        assertEval(Ignored.Unknown, "argv <- structure(list(path = '.', pattern = 'myTst_.*tar[.]gz$'),     .Names = c('path', 'pattern'));do.call('dir', argv)");
     }
 }
diff --git a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_docall.java b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_docall.java
index 73fbac9e68fd11f22099a70addf59940d87cd915..c0003b48744895d87218edb6e67044f4c97b3992 100644
--- a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_docall.java
+++ b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_docall.java
@@ -4,7 +4,7 @@
  * http://www.gnu.org/licenses/gpl-2.0.html
  *
  * Copyright (c) 2012-2014, Purdue University
- * Copyright (c) 2013, 2016, Oracle and/or its affiliates
+ * Copyright (c) 2013, 2017, Oracle and/or its affiliates
  *
  * All rights reserved.
  */
@@ -31,5 +31,17 @@ public class TestBuiltin_docall extends TestBase {
         assertEval("v1 <- as.numeric_version('3.0.0'); v2 <- as.numeric_version('3.1.0'); do.call('<', list(quote(v1), quote(v2)))");
         assertEval(Output.IgnoreErrorContext, "typeof(do.call(function(x) x, list(as.symbol('foo'))))");
         assertEval("typeof(do.call(function(x) x, list(as.symbol('foo')), quote=TRUE))");
+
+        assertEval("{ foo <- function() ls(parent.frame()); bar <- function(a,b,c) do.call('foo', list()); bar(a=1,b=2,c=3); }");
+        assertEval("{ foo <- function() ls(parent.frame()); bar <- function(a,b,c) do.call('foo', list(), envir=globalenv()); bar(a=1,b=2,c=3) }");
+        assertEval("{ foo <- function(a,b)  list(a=a,b=b); e <- new.env(); assign('a', 2); assign('b', 3); a<-0; b<-1; do.call('foo', list(a,b), env=e); }");
+        assertEval("{ foo <- function(a,b)  list(a=a,b=b); e <- new.env(); assign('a', 2); assign('b', 3); a<-0; b<-1; do.call('foo', list(a=as.name('a'),as.name('b')), env=e) }");
+        assertEval("{ foo <- function(a,b,c) { cat('foo called.'); list(a=a,b=b,c=c); }; side <- function() { cat('side effect!'); 42 }; do.call('foo', list(parse(text='side()')[[1]], 0, 0)); }");
+
+        assertEval("{ e <- new.env(); assign('a', 42, e); a <- 1; foo <- function(x) force(x); do.call('foo', list(as.name('a')), envir=e); }");
+        assertEval("{ e <- new.env(); assign('a', 42, e); a <- 1; foo <- function(x) force(x); do.call('foo', list(as.name('a')), envir=e, quote=T); }");
+        assertEval("{ e <- new.env(); assign('foo', function() 42, e); foo <- function(x) 1; do.call('foo', list(), envir=e); }");
+        assertEval("{ e <- new.env(); assign('foo', 42, e); foo <- function(x) 1; do.call('foo', list(), envir=e); }");
+        assertEval("{ do.call('+', list(data.frame(1), data.frame(2)), envir = new.env()); do.call('assign', list('a',2,new.env()), envir = new.env()); }");
     }
 }
diff --git a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_findInterval.java b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_findInterval.java
index 93109d139f3d63a80b4bd7a9810cdedc7b85d0a8..e726596d445fe8d08f199571f6cafc1c5f766b56 100644
--- a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_findInterval.java
+++ b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_findInterval.java
@@ -4,7 +4,7 @@
  * http://www.gnu.org/licenses/gpl-2.0.html
  *
  * Copyright (c) 2014, Purdue University
- * Copyright (c) 2014, 2016, Oracle and/or its affiliates
+ * Copyright (c) 2014, 2017, Oracle and/or its affiliates
  *
  * All rights reserved.
  */
@@ -19,23 +19,27 @@ public class TestBuiltin_findInterval extends TestBase {
 
     @Test
     public void testfindInterval1() {
-        assertEval(Ignored.Unknown,
+        // FIXME RInternalError: not implemented: .Internal findInterval
+        assertEval(Ignored.Unimplemented,
                         "argv <- list(c(1, 2, 3, 4, 5, 6, 7, 8, 9), c(3, 3.25, 3.5, 3.75, 4, 4.25, 4.5, 4.75, 5, 5.25, 5.5, 5.75, 6), FALSE, FALSE); .Internal(findInterval(argv[[1]], argv[[2]], argv[[3]], argv[[4]]))");
     }
 
     @Test
     public void testfindInterval2() {
-        assertEval(Ignored.Unknown, "argv <- list(NA_real_, NA_real_, FALSE, FALSE); .Internal(findInterval(argv[[1]], argv[[2]], argv[[3]], argv[[4]]))");
+        // FIXME RInternalError: not implemented: .Internal findInterval
+        assertEval(Ignored.Unimplemented, "argv <- list(NA_real_, NA_real_, FALSE, FALSE); .Internal(findInterval(argv[[1]], argv[[2]], argv[[3]], argv[[4]]))");
     }
 
     @Test
     public void testfindInterval3() {
-        assertEval(Ignored.Unknown, "argv <- list(numeric(0), numeric(0), FALSE, FALSE); .Internal(findInterval(argv[[1]], argv[[2]], argv[[3]], argv[[4]]))");
+        // FIXME RInternalError: not implemented: .Internal findInterval
+        assertEval(Ignored.Unimplemented, "argv <- list(numeric(0), numeric(0), FALSE, FALSE); .Internal(findInterval(argv[[1]], argv[[2]], argv[[3]], argv[[4]]))");
     }
 
     @Test
     public void testfindInterval4() {
-        assertEval(Ignored.Unknown,
+        // FIXME RInternalError: not implemented: .Internal findInterval
+        assertEval(Ignored.Unimplemented,
                         "argv <- list(c(5, 10, 15), c(2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18), FALSE, FALSE); .Internal(findInterval(argv[[1]], argv[[2]], argv[[3]], argv[[4]]))");
     }
 }
diff --git a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_formatC.java b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_formatC.java
index b1f03422323a890898866bd9ffc934c2d517c674..23276863358730e81aaf2c0afdfbdc7958683694 100644
--- a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_formatC.java
+++ b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_formatC.java
@@ -19,24 +19,28 @@ public class TestBuiltin_formatC extends TestBase {
 
     @Test
     public void testformatC1() {
-        assertEval(Ignored.Unknown,
+        // FIXME FastR: the third arg "1" is output into 6 characters instead of 10
+        assertEval(Ignored.ImplementationError,
                         "argv <- list(c(3.14159265358979, 3.1415926535898, 1), 'double', 10, 4L, 'g', '', c(12L, 12L, 12L)); .Internal(formatC(argv[[1]], argv[[2]], argv[[3]], argv[[4]], argv[[5]], argv[[6]], argv[[7]]))");
     }
 
     @Test
     public void testformatC2() {
-        assertEval(Ignored.Unknown, "argv <- list(1, 'double', 8, 5, 'g', '-', 13); .Internal(formatC(argv[[1]], argv[[2]], argv[[3]], argv[[4]], argv[[5]], argv[[6]], argv[[7]]))");
+        // FIXME FastR: "1" is output like "1.0000" IMHO mode='g' should output just "1"
+        assertEval(Ignored.ImplementationError, "argv <- list(1, 'double', 8, 5, 'g', '-', 13); .Internal(formatC(argv[[1]], argv[[2]], argv[[3]], argv[[4]], argv[[5]], argv[[6]], argv[[7]]))");
     }
 
     @Test
     public void testformatC3() {
-        assertEval(Ignored.Unknown,
+        // FIXME Similar problem to testformatC1
+        assertEval(Ignored.ImplementationError,
                         "argv <- list(structure(c(1.5, 13.3414265412268, 1e-15, 8, 1, 500, 28), .Dim = c(7L, 1L), .Dimnames = list(c('m.ship.expon.', 'objective', 'tolerance', 'iterations', 'converged', 'maxit', 'n'), ' ')), 'double', 8L, 7L, 'g', '', c(15L, 15L, 15L, 15L, 15L, 15L, 15L)); .Internal(formatC(argv[[1]], argv[[2]], argv[[3]], argv[[4]], argv[[5]], argv[[6]], argv[[7]]))");
     }
 
     @Test
     public void testformatC4() {
-        assertEval(Ignored.Unknown,
+        // FIXME Similar problem to testformatC2
+        assertEval(Ignored.ImplementationError,
                         "argv <- list(c(1000, 1e+07, 1), 'double', 5, 4L, 'g', '', c(12L, 12L, 12L)); .Internal(formatC(argv[[1]], argv[[2]], argv[[3]], argv[[4]], argv[[5]], argv[[6]], argv[[7]]))");
     }
 
@@ -62,7 +66,8 @@ public class TestBuiltin_formatC extends TestBase {
 
     @Test
     public void testformatC9() {
-        assertEval(Ignored.Unknown,
+        // FIXME java.util.FormatFlagsConversionMismatchException: Conversion = g, Flags = #
+        assertEval(Ignored.ImplementationError,
                         "argv <- list(c(0.0599, 0.00599, 0.000599, 5.99e-05, 5.99e-06, 5.99e-07), 'double', 3, -2, 'fg', '#', c(10, 11, 12, 13, 14, 15)); .Internal(formatC(argv[[1]], argv[[2]], argv[[3]], argv[[4]], argv[[5]], argv[[6]], argv[[7]]))");
     }
 
@@ -88,7 +93,8 @@ public class TestBuiltin_formatC extends TestBase {
 
     @Test
     public void testformatC14() {
-        assertEval(Ignored.Unknown,
+        // GnuR does not round up xyz.5 to xyz+1 although it does e.g. xyz.75 to xyz+1
+        assertEval(Ignored.ReferenceError,
                         "argv <- list(structure(c(1962.25, 1962.5, 1962.75, 1963, 1963.25, 1963.5, 1963.75, 1964, 1964.25, 1964.5, 1964.75, 1965, 1965.25, 1965.5, 1965.75, 1966, 1966.25, 1966.5, 1966.75, 1967, 1967.25, 1967.5, 1967.75, 1968, 1968.25, 1968.5, 1968.75, 1969, 1969.25, 1969.5, 1969.75, 1970, 1970.25, 1970.5, 1970.75, 1971, 1971.25, 1971.5, 1971.75), .Tsp = c(1962.25, 1971.75, 4), class = 'ts'), 'double', 1, 4L, 'g', '', c(12L, 12L, 12L, 12L, 12L, 12L, 12L, 12L, 12L, 12L, 12L, 12L, 12L, 12L, 12L, 12L, 12L, 12L, 12L, 12L, 12L, 12L, 12L, 12L, 12L, 12L, 12L, 12L, 12L, 12L, 12L, 12L, 12L, 12L, 12L, 12L, 12L, 12L, 12L)); .Internal(formatC(argv[[1]], argv[[2]], argv[[3]], argv[[4]], argv[[5]], argv[[6]], argv[[7]]))");
     }
 }
diff --git a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_gamma.java b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_gamma.java
index f8d55fed542c996a76280563d055c25c01ef4a16..5f024ba694c048f9f3866a5866703e92d255ba73 100644
--- a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_gamma.java
+++ b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_gamma.java
@@ -29,7 +29,8 @@ public class TestBuiltin_gamma extends TestBase {
 
     @Test
     public void testgamma3() {
-        assertEval(Ignored.Unknown, "argv <- list(structure(numeric(0), .Dim = c(0L, 0L)));gamma(argv[[1]]);");
+        // FIXME RInternalError: not implemented: .Internal beta
+        assertEval(Ignored.Unimplemented, "argv <- list(structure(numeric(0), .Dim = c(0L, 0L)));gamma(argv[[1]]);");
     }
 
     @Test
diff --git a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_gcinfo.java b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_gcinfo.java
index 503a3c359ae78ef28b9fb91a4317a116e6e36458..77f17bb5b748ed07554022fa3aa348facb7fae6e 100644
--- a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_gcinfo.java
+++ b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_gcinfo.java
@@ -4,7 +4,7 @@
  * http://www.gnu.org/licenses/gpl-2.0.html
  *
  * Copyright (c) 2014, Purdue University
- * Copyright (c) 2014, 2016, Oracle and/or its affiliates
+ * Copyright (c) 2014, 2017, Oracle and/or its affiliates
  *
  * All rights reserved.
  */
@@ -19,11 +19,13 @@ public class TestBuiltin_gcinfo extends TestBase {
 
     @Test
     public void testgcinfo1() {
-        assertEval(Ignored.Unknown, "argv <- list(list()); .Internal(gcinfo(argv[[1]]))");
+        // FIXME com.oracle.truffle.r.runtime.RInternalError: not implemented: .Internal gcinfo
+        assertEval(Ignored.Unimplemented, "argv <- list(list()); .Internal(gcinfo(argv[[1]]))");
     }
 
     @Test
     public void testgcinfo2() {
-        assertEval(Ignored.Unknown, "argv <- list(FALSE); .Internal(gcinfo(argv[[1]]))");
+        // FIXME com.oracle.truffle.r.runtime.RInternalError: not implemented: .Internal gcinfo
+        assertEval(Ignored.Unimplemented, "argv <- list(FALSE); .Internal(gcinfo(argv[[1]]))");
     }
 }
diff --git a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_growconst.java b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_growconst.java
index 3534db888148517597d6ef153248400e30199c88..f2fae494fcdb53f6727283abf79547d00d35dfbe 100644
--- a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_growconst.java
+++ b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_growconst.java
@@ -4,7 +4,7 @@
  * http://www.gnu.org/licenses/gpl-2.0.html
  *
  * Copyright (c) 2014, Purdue University
- * Copyright (c) 2014, 2016, Oracle and/or its affiliates
+ * Copyright (c) 2014, 2017, Oracle and/or its affiliates
  *
  * All rights reserved.
  */
@@ -19,6 +19,7 @@ public class TestBuiltin_growconst extends TestBase {
 
     @Test
     public void testgrowconst1() {
-        assertEval(Ignored.Unknown, "argv <- list(list(list())); .Internal(growconst(argv[[1]]))");
+        // FIXME RInternalError: not implemented: .Internal growconst
+        assertEval(Ignored.Unimplemented, "argv <- list(list(list())); .Internal(growconst(argv[[1]]))");
     }
 }
diff --git a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_iconv.java b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_iconv.java
index c05827b501e3e65d7d967e785de15f6affd22345..91ccd99c4a2cc3e073874a733e50c99b7db8f5fe 100644
--- a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_iconv.java
+++ b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_iconv.java
@@ -4,7 +4,7 @@
  * http://www.gnu.org/licenses/gpl-2.0.html
  *
  * Copyright (c) 2014, Purdue University
- * Copyright (c) 2014, 2016, Oracle and/or its affiliates
+ * Copyright (c) 2014, 2017, Oracle and/or its affiliates
  *
  * All rights reserved.
  */
@@ -24,7 +24,10 @@ public class TestBuiltin_iconv extends TestBase {
 
     @Test
     public void testiconv2() {
-        assertEval(Ignored.Unknown, "argv <- list('façile'   , 'latin1', 'ASCII', NA_character_, TRUE, FALSE); .Internal(iconv(argv[[1]], argv[[2]], argv[[3]], argv[[4]], argv[[5]], argv[[6]]))");
+        // FIXME ç is not an ASCII char (although it's an extended ASCII char wit code==135)
+        // and NA_character_ replacement leads to whole output to become NA
+        assertEval(Ignored.ImplementationError,
+                        "argv <- list('façile'   , 'latin1', 'ASCII', NA_character_, TRUE, FALSE); .Internal(iconv(argv[[1]], argv[[2]], argv[[3]], argv[[4]], argv[[5]], argv[[6]]))");
     }
 
     @Test
@@ -44,23 +47,32 @@ public class TestBuiltin_iconv extends TestBase {
 
     @Test
     public void testiconv6() {
-        assertEval(Ignored.Unknown, "argv <- list(list(), 'latin1', 'ASCII', NA_character_, TRUE, FALSE); .Internal(iconv(argv[[1]], argv[[2]], argv[[3]], argv[[4]], argv[[5]], argv[[6]]))");
+        // FIXME According to GnuR docs x parm can be a list with NULLs or raws
+        // btw current impl of IConv does not honor 'sub', 'mark' and 'toRaw' params at all
+        assertEval(Ignored.ImplementationError,
+                        "argv <- list(list(), 'latin1', 'ASCII', NA_character_, TRUE, FALSE); .Internal(iconv(argv[[1]], argv[[2]], argv[[3]], argv[[4]], argv[[5]], argv[[6]]))");
     }
 
     @Test
     public void testiconv7() {
-        assertEval(Ignored.Unknown, "argv <- list('façile'   , 'latin1', 'ASCII', '', TRUE, FALSE); .Internal(iconv(argv[[1]], argv[[2]], argv[[3]], argv[[4]], argv[[5]], argv[[6]]))");
+        // FIXME ç is not an ASCII char (although it's an extended ASCII char wit code==135)
+        // so GnuR elimination of ç character is correct.
+        assertEval(Ignored.ImplementationError, "argv <- list('façile'   , 'latin1', 'ASCII', '', TRUE, FALSE); .Internal(iconv(argv[[1]], argv[[2]], argv[[3]], argv[[4]], argv[[5]], argv[[6]]))");
     }
 
     @Test
     public void testiconv8() {
-        assertEval(Ignored.Unknown,
+        // FIXME FastR does not carry extra Rd_tag attr in its output
+        // which is required according to iconv() GnuR docs.
+        assertEval(Ignored.ImplementationError,
                         "argv <- list(structure('Prediction matrix for soap film smooth', Rd_tag = 'TEXT'), 'UTF-8', 'ASCII', NA_character_, FALSE, FALSE); .Internal(iconv(argv[[1]], argv[[2]], argv[[3]], argv[[4]], argv[[5]], argv[[6]]))");
     }
 
     @Test
     public void testiconv9() {
-        assertEval(Ignored.Unknown,
+        // FIXME FastR does not carry extra .Names attr in its output
+        // which is required according to iconv() GnuR docs.
+        assertEval(Ignored.ImplementationError,
                         "argv <- list(structure(c('Q.1 Opinion of presidents job performance', 'Q.1 Opinion of presidents job performance', 'Q.1 Opinion of presidents job performance', 'Q.1 Opinion of presidents job performance', 'Q.1 Opinion of presidents job performance', 'Q.1 Opinion of presidents job performance', 'Q.1 Opinion of presidents job performance', 'Q.1 Opinion of presidents job performance', 'Q.1 Opinion of presidents job performance', 'Q.1 Opinion of presidents job performance'), .Names = c('Q1_MISSING_NONE', 'Q1_MISSING_1', 'Q1_MISSING_2', 'Q1_MISSING_3', 'Q1_MISSING_RANGE', 'Q1_MISSING_LOW', 'Q1_MISSING_HIGH', 'Q1_MISSING_RANGE_1', 'Q1_MISSING_LOW_1', 'Q1_MISSING_HIGH_1')), 'latin1', '', NA_character_, TRUE, FALSE); .Internal(iconv(argv[[1]], argv[[2]], argv[[3]], argv[[4]], argv[[5]], argv[[6]]))");
     }
 
diff --git a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_isnumeric.java b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_isnumeric.java
index f98cfa3f2f0be840bd88b52f5c708ed6e3b06f1d..d7ee33c14408e64ce9000fb56f46c0b1c4be32b3 100644
--- a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_isnumeric.java
+++ b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_isnumeric.java
@@ -24,7 +24,8 @@ public class TestBuiltin_isnumeric extends TestBase {
 
     @Test
     public void testisnumeric2() {
-        assertEval(Ignored.Unknown,
+        // FIXME according to ?is.numeric the 'Date' class should return FALSE from is.numeric()
+        assertEval(Ignored.ImplementationError,
                         "argv <- list(structure(c(12784, 12874, 12965, 13057, 13149, 13239, 13330, 13422, 13514, 13604, 13695, 13787, 13879, 13970, 14061, 14153, 14245, 14335), class = 'Date'));is.numeric(argv[[1]]);");
     }
 
@@ -85,7 +86,9 @@ public class TestBuiltin_isnumeric extends TestBase {
 
     @Test
     public void testisnumeric14() {
-        assertEval(Ignored.Unknown,
+        // FIXME according to ?is.numeric the 'POSIXt' class should return FALSE from is.numeric()
+        assertEval(Ignored.ImplementationError, "is.numeric(structure(1L, class = c('POSIXct', 'POSIXt')))");
+        assertEval(Ignored.ImplementationError,
                         "argv <- list(structure(c(1386439154.20645, 1386469154.20645, 1386499154.20645, 1386529154.20645, 1386559154.20645, 1386589154.20645, 1386619154.20645, 1386649154.20645, 1386679154.20645, 1386709154.20645, 1386739154.20645, 1386769154.20645, 1386799154.20645, 1386829154.20645, 1386859154.20645, 1386889154.20645, 1386919154.20645, 1386949154.20645, 1386979154.20645, 1387009154.20645, 1387039154.20645, 1387069154.20645, 1387099154.20645, 1387129154.20645, 1387159154.20645, 1387189154.20645, 1387219154.20645, 1387249154.20645, 1387279154.20645, 1387309154.20645, 1387339154.20645, 1387369154.20645, 1387399154.20645, 1387429154.20645), class = c('POSIXct', 'POSIXt')));is.numeric(argv[[1]]);");
     }
 
@@ -121,7 +124,8 @@ public class TestBuiltin_isnumeric extends TestBase {
 
     @Test
     public void testisnumeric21() {
-        assertEval(Ignored.Unknown, "argv <- list(structure(16146, class = 'Date'));is.numeric(argv[[1]]);");
+        // FIXME according to ?is.numeric the 'Date' class should return FALSE from is.numeric()
+        assertEval(Ignored.ImplementationError, "argv <- list(structure(16146, class = 'Date'));is.numeric(argv[[1]]);");
     }
 
     @Test
@@ -131,6 +135,7 @@ public class TestBuiltin_isnumeric extends TestBase {
 
     @Test
     public void testisnumeric24() {
-        assertEval(Ignored.Unknown, "argv <- list(structure(16352, class = 'Date'));do.call('is.numeric', argv)");
+        // FIXME according to ?is.numeric the 'Date' class should return FALSE from is.numeric()
+        assertEval(Ignored.ImplementationError, "argv <- list(structure(16352, class = 'Date'));do.call('is.numeric', argv)");
     }
 }
diff --git a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_isunsorted.java b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_isunsorted.java
index 52fa1f06fbfdd44d2eb020184990b3c84df312bc..95d36ad6f5239aad82716b0fda7f7cb4130bfb62 100644
--- a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_isunsorted.java
+++ b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_isunsorted.java
@@ -49,7 +49,11 @@ public class TestBuiltin_isunsorted extends TestBase {
 
     @Test
     public void testisunsorted7() {
-        assertEval(Ignored.Unknown,
+        // FIXME we should fix it since ?is.unsorted says: "All objects of length 0 or 1 are
+        // sorted."
+        // Expected output: [1] FALSE
+        // FastR output: [1] NA
+        assertEval(Ignored.ImplementationError,
                         "argv <- list(structure(list(c0 = structure(integer(0), .Label = character(0), class = 'factor')), .Names = 'c0', row.names = character(0), class = structure('integer(0)', .Names = 'c0')), FALSE); .Internal(is.unsorted(argv[[1]], argv[[2]]))");
     }
 
@@ -82,8 +86,15 @@ public class TestBuiltin_isunsorted extends TestBase {
 
     @Test
     public void testisunsorted14() {
-        assertEval(Ignored.Unknown, "argv <- structure(list(x = structure(list(x = 3:4, y = 1:2),     .Names = c('x', 'y'), row.names = c(NA, -2L), class = 'data.frame')),     .Names = 'x');" +
-                        "do.call('is.unsorted', argv)");
+        // FIXME decide whether we want to fix this since the ?is.unsorted says:
+        // "This function is designed for objects with one-dimensional
+        // indices, as described above. Data frames, matrices and other
+        // arrays may give surprising results."
+        // Expected output: [1] TRUE
+        // FastR output: [1] NA
+        assertEval(Ignored.ImplementationError,
+                        "argv <- structure(list(x = structure(list(x = 3:4, y = 1:2),     .Names = c('x', 'y'), row.names = c(NA, -2L), class = 'data.frame')),     .Names = 'x');" +
+                                        "do.call('is.unsorted', argv)");
     }
 
     @Test
diff --git a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_lbeta.java b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_lbeta.java
index cca7f0f64e88ebe2c4ff4c3a6ac0242484c8ccb3..6248c5a82e07931f8a49e858d6dbf29ed4e4ef5e 100644
--- a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_lbeta.java
+++ b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_lbeta.java
@@ -4,7 +4,7 @@
  * http://www.gnu.org/licenses/gpl-2.0.html
  *
  * Copyright (c) 2014, Purdue University
- * Copyright (c) 2014, 2016, Oracle and/or its affiliates
+ * Copyright (c) 2014, 2017, Oracle and/or its affiliates
  *
  * All rights reserved.
  */
@@ -19,6 +19,6 @@ public class TestBuiltin_lbeta extends TestBase {
 
     @Test
     public void testlbeta1() {
-        assertEval(Ignored.Unknown, "argv <- list(FALSE, FALSE); .Internal(lbeta(argv[[1]], argv[[2]]))");
+        assertEval(Ignored.Unimplemented, "argv <- list(FALSE, FALSE); .Internal(lbeta(argv[[1]], argv[[2]]))");
     }
 }
diff --git a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_lgamma.java b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_lgamma.java
index 144683f6528eb0416e073f015e903d5cb76727fa..72dcf3d5baaa6c8556895dcccbc5151a8d4e6296 100644
--- a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_lgamma.java
+++ b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_lgamma.java
@@ -19,12 +19,14 @@ public class TestBuiltin_lgamma extends TestBase {
 
     @Test
     public void testlgamma1() {
-        assertEval(Ignored.Unknown, "argv <- list(structure(c(2, 1, 1, 1, 3, 1, 1, 1, 4), .Dim = c(3L, 3L)));lgamma(argv[[1]]);");
+        // FastR: all numbers on a single line and last number has one extra digit
+        assertEval(Ignored.OutputFormatting, "argv <- list(structure(c(2, 1, 1, 1, 3, 1, 1, 1, 4), .Dim = c(3L, 3L)));lgamma(argv[[1]]);");
     }
 
     @Test
     public void testlgamma2() {
-        assertEval(Ignored.Unknown,
+        // FastR: both incorrect output numbers and missing column/row headers
+        assertEval(Ignored.ImplementationError,
                         "argv <- list(structure(c(2, 3, 2, 1, 4, 4, 7, 2, 11, 11, 15, 10, 7, 8, 13, 12), .Dim = c(4L, 4L), .Dimnames = structure(list(income = c('< 15k', '15-25k', '25-40k', '> 40k'), satisfaction = c('VeryD', 'LittleD', 'ModerateS', 'VeryS')), .Names = c('income', 'satisfaction'))));lgamma(argv[[1]]);");
     }
 
@@ -50,6 +52,7 @@ public class TestBuiltin_lgamma extends TestBase {
 
     @Test
     public void testlgamma7() {
+        // FastR: missing column headers 1 till 42
         assertEval(Ignored.Unknown,
                         "argv <- list(structure(c(11.4065045686104, 9.40650456861037, 8.40650456861037, 11.4065045686104, 9.40650456861037, 6.40650456861036, 15.4065045686104, 9.40650456861037, 9.40650456861037, 8.40650456861037, 6.40650456861036, 7.40650456861036, 8.40650456861037, 7.40650456861036, 9.40650456861037, 13.4065045686104, 10.4065045686104, 11.4065045686104, 14.4065045686104, 10.4065045686104, 16.4065045686104, 10.4065045686104, 7.40650456861036, 9.40650456861037, 7.40650456861036, 13.4065045686104, 17.4065045686104, 4.40650456861036, 10.4065045686104, 5.40650456861036, 6.40650456861036, 4.40650456861036, 5.40650456861036, 4.40650456861036, 4.40650456861036, 8.40650456861037, 9.40650456861037, 5.40650456861036, 9.40650456861037, 7.40650456861036, 7.40650456861036, 8.40650456861037), .Names = c('1', '2', '3', '4', '5', '6', '7', '8', '9', '10', '11', '12', '13', '14', '15', '16', '17', '18', '19', '20', '21', '22', '23', '24', '25', '26', '27', '28', '29', '30', '31', '32', '33', '34', '35', '36', '37', '38', '39', '40', '41', '42')));lgamma(argv[[1]]);");
     }
diff --git a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_lm.java b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_lm.java
index 1761b0e1166ffd9fb0fc823ec25a9a9daba7c57b..231f5200d27e063cecd6fd93e522f08cbf02c920 100644
--- a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_lm.java
+++ b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_lm.java
@@ -71,7 +71,8 @@ public class TestBuiltin_lm extends TestBase {
 
     @Test
     public void test() {
-        assertEval(Ignored.Unknown,
+        // FIXME test causes StackOverflow
+        assertEval(Ignored.ImplementationError,
                         "require(stats); lm(data = structure(list(y = c(43, 63, 71, 61, 81, 43, 58, 71, 72, 67, 64, 67, 69, 68, 77, 81, 74, 65, 65, 50, 50, 64, 53, 40, 63, 66, 82), x1 = c(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1), x2 = c(51, 64, 70, 63, 78, 55, 67, 75, 82, 61, 53, 60, 62, 83, 77, 90, 85, 60, 70, 58, 40, 61, 66, 37, 54, 77, 82), x3 = c(30, 51, 68, 45, 56, 49, 42, 50, 72, 45, 53, 47, 57, 83, 54, 50, 64, 65, 46, 68, 33, 52, 52, 42, 42, 66, 39), x4 = c(47, 45, 48, 39, 57, 69, 66, 50, 59, 45, 72, 50, 59, 44, 75, 39, 45, 62, 47, 74, 75, 67, 47, 58, 54, 66, 62), x5 = c(61, 63, 76, 54, 71, 54, 66, 70, 71, 62, 58, 59, 55, 59, 79, 60, 79, 55, 75, 64, 43, 66, 63, 50, 66, 88, 64), x6 = c(92, 73, 86, 84, 83, 49, 68, 66, 83, 80, 67, 74, 63, 77, 77, 54, 79, 80, 85, 78, 64, 80, 80, 57, 75, 76, 78), x7 = c(45, 47, 48, 35, 47, 34, 35, 41, 31, 41, 34, 41, 25, 35, 46, 36, 63, 60, 46, 52, 33, 41, 37, 49, 33, 72, 39)), .Names = c('y', 'x1', 'x2', 'x3', 'x4', 'x5', 'x6', 'x7'), row.names = c('1', '2', '3', '4', '5', '6', '7', '8', '9', '10', '11', '12', '13', '14', '15', '16', '17', '18', '19', '20', '21', '22', '23', '24', '25', '26', '30'), class = 'data.frame'), formula = y ~ . + 0)");
     }
 }
diff --git a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_matrix.java b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_matrix.java
index e6957f67d0fc32a920ca0c1b248a1e05cde65ba9..5881b9f0dd95043991b81132e365d08853df5f4f 100644
--- a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_matrix.java
+++ b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_matrix.java
@@ -4,7 +4,7 @@
  * http://www.gnu.org/licenses/gpl-2.0.html
  *
  * Copyright (c) 2014, Purdue University
- * Copyright (c) 2014, 2016, Oracle and/or its affiliates
+ * Copyright (c) 2014, 2017, Oracle and/or its affiliates
  *
  * All rights reserved.
  */
@@ -79,7 +79,16 @@ public class TestBuiltin_matrix extends TestBase {
 
     @Test
     public void testmatrix13() {
-        assertEval(Ignored.Unknown, "argv <- list(c(0, 0, 0, 0), 4L, 0L, FALSE, NULL, FALSE, FALSE); .Internal(matrix(argv[[1]], argv[[2]], argv[[3]], argv[[4]], argv[[5]], argv[[6]], argv[[7]]))");
+        assertEval("matrix(1:4, 2, 1)");
+        // Missing warning in FastR; GnuR ouptputs:
+        // Warning message:
+        // In matrix(1:4, 4, 0) : data length exceeds size of matrix
+        // IMHO more a ReferenceError since e.g. "matrix(1:4, 2, 1)" gives no warning about extra
+        // two elements
+        // but for 0 columns the warning is given by GnuR
+        assertEval(Output.MissingWarning, "matrix(1:4, 4, 0)");
+        assertEval(Output.MissingWarning,
+                        "argv <- list(c(0, 0, 0, 0), 4L, 0L, FALSE, NULL, FALSE, FALSE); .Internal(matrix(argv[[1]], argv[[2]], argv[[3]], argv[[4]], argv[[5]], argv[[6]], argv[[7]]))");
     }
 
     @Test
@@ -194,13 +203,15 @@ public class TestBuiltin_matrix extends TestBase {
 
     @Test
     public void testmatrix36() {
-        assertEval(Ignored.Unknown,
-                        "argv <- list(c(0, 0, 0, 0, 0, 0, 4.94065645841247e-324, 0, 0, 0, 0, 0), structure(12L, .Names = '1'), 1L, FALSE, NULL, FALSE, FALSE); .Internal(matrix(argv[[1]], argv[[2]], argv[[3]], argv[[4]], argv[[5]], argv[[6]], argv[[7]]))");
+        assertEval("argv <- list(c(0, 0, 0, 0, 0, 0, 4.94065645841247e-324, 0, 0, 0, 0, 0), structure(12L, .Names = '1'), 1L, FALSE, NULL, FALSE, FALSE); .Internal(matrix(argv[[1]], argv[[2]], argv[[3]], argv[[4]], argv[[5]], argv[[6]], argv[[7]]))");
     }
 
     @Test
     public void testmatrix37() {
-        assertEval(Ignored.Unknown, "argv <- list(1:7, 3, 4, FALSE, NULL, FALSE, FALSE); .Internal(matrix(argv[[1]], argv[[2]], argv[[3]], argv[[4]], argv[[5]], argv[[6]], argv[[7]]))");
+        // FIXME Missing warning in FastR:
+        // Warning message:
+        // data length [7] is not a sub-multiple or multiple of the number of rows [3]
+        assertEval(Output.MissingWarning, "argv <- list(1:7, 3, 4, FALSE, NULL, FALSE, FALSE); .Internal(matrix(argv[[1]], argv[[2]], argv[[3]], argv[[4]], argv[[5]], argv[[6]], argv[[7]]))");
     }
 
     @Test
@@ -210,7 +221,9 @@ public class TestBuiltin_matrix extends TestBase {
 
     @Test
     public void testmatrix39() {
-        assertEval(Ignored.Unknown,
+        // Warning message:
+        // data length [44] is not a sub-multiple or multiple of the number of columns [5]
+        assertEval(Output.MissingWarning,
                         "argv <- list(c(-1, 4, 4, 9, 5, 1, 4, 8, 8, 2, 6, 0, 2, 3, 8, 8, 4, 4, 2, 3, 4, 0, -1, 7, 2, 4, 2, 3, 5, 6, 6, 5, 4, 3, 7, -1, 3, 1, -1, 2, 32, 1, 4, 4), 2L, 5L, FALSE, NULL, FALSE, FALSE); .Internal(matrix(argv[[1]], argv[[2]], argv[[3]], argv[[4]], argv[[5]], argv[[6]], argv[[7]]))");
     }
 
diff --git a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_memDecompress.java b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_memDecompress.java
index 677277945c9dbed0eb402ae1b634d3065a297d77..7222ae1a2c3d60fb29d82ea6dfcacc9361f9aade 100644
--- a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_memDecompress.java
+++ b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_memDecompress.java
@@ -4,7 +4,7 @@
  * http://www.gnu.org/licenses/gpl-2.0.html
  *
  * Copyright (c) 2014, Purdue University
- * Copyright (c) 2014, 2016, Oracle and/or its affiliates
+ * Copyright (c) 2014, 2017, Oracle and/or its affiliates
  *
  * All rights reserved.
  */
@@ -20,7 +20,9 @@ public class TestBuiltin_memDecompress extends TestBase {
 
     @Test
     public void testmemDecompress1() {
-        assertEval(Ignored.Unknown,
+        // FIXME
+        // com.oracle.truffle.r.runtime.RInternalError: not implemented: .Internal memDecompress
+        assertEval(Ignored.Unimplemented,
                         "argv <- structure(list(from = as.raw(c(253, 55, 122, 88, 90,     0, 0, 1, 105, 34, 222, 54, 2, 0, 33, 1, 28, 0, 0, 0, 16,     207, 88, 204, 224, 7, 207, 0, 28, 93, 0, 24, 140, 130, 182,     196, 17, 52, 92, 78, 225, 221, 115, 179, 63, 98, 20, 119,     183, 90, 101, 43, 5, 112, 179, 75, 69, 222, 0, 0, 155, 136,     185, 16, 0, 1, 52, 208, 15, 0, 0, 0, 105, 254, 40, 141, 62,     48, 13, 139, 2, 0, 0, 0, 0, 1, 89, 90)), type = 'xz', asChar = TRUE),     .Names = c('from', 'type', 'asChar'));" +
                                         "do.call('memDecompress', argv)");
     }
diff --git a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_min.java b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_min.java
index c8c5ab5a200d2b5772ecd340b6527f238a8f9a47..442c0c3a6cba894475d95ca9f1dcf50a9103ba87 100644
--- a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_min.java
+++ b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_min.java
@@ -173,11 +173,17 @@ public class TestBuiltin_min extends TestBase {
         assertEval("{ min(\"42\", as.character(NA), \"7\", na.rm=TRUE) }");
         assertEval("{ min(\"42\", as.character(NA), \"7\", na.rm=FALSE) }");
 
-        assertEval(Ignored.Unknown, Output.IgnoreWarningContext, "{ min(integer(0)) }");
-        assertEval(Ignored.Unknown, Output.IgnoreWarningContext, "{ min(integer()) }");
+        // FIXME
+        // Expected output: [1] Inf
+        // FastR output: [1] 2147483647
+        assertEval(Ignored.ImplementationError, Output.IgnoreWarningContext, "{ min(integer(0)) }");
+        assertEval(Ignored.ImplementationError, Output.IgnoreWarningContext, "{ min(integer()) }");
         assertEval("{ min(as.double(NA), na.rm=TRUE) }");
-        assertEval(Ignored.Unknown, Output.IgnoreWarningContext, "{ min(as.integer(NA), na.rm=TRUE) }");
-        assertEval(Ignored.Unknown, Output.IgnoreWarningContext, "{ min(as.integer(NA), as.integer(NA), na.rm=TRUE) }");
+        // FIXME
+        // Expected output: [1] Inf
+        // FastR output: [1] 2147483647
+        assertEval(Ignored.ImplementationError, Output.IgnoreWarningContext, "{ min(as.integer(NA), na.rm=TRUE) }");
+        assertEval(Ignored.ImplementationError, Output.IgnoreWarningContext, "{ min(as.integer(NA), as.integer(NA), na.rm=TRUE) }");
 
         assertEval("min(c(1,NA,2), na.rm=NA)");
     }
diff --git a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_oldClassassign.java b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_oldClassassign.java
index 7a21c2b7611f4c51db69de545cc9e559fada054b..a971a63a5d66142a2a4ade582716af32d1750dce 100644
--- a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_oldClassassign.java
+++ b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_oldClassassign.java
@@ -4,7 +4,7 @@
  * http://www.gnu.org/licenses/gpl-2.0.html
  *
  * Copyright (c) 2012-2014, Purdue University
- * Copyright (c) 2013, 2016, Oracle and/or its affiliates
+ * Copyright (c) 2013, 2017, Oracle and/or its affiliates
  *
  * All rights reserved.
  */
@@ -23,7 +23,9 @@ public class TestBuiltin_oldClassassign extends TestBase {
 
     @Test
     public void testoldClassassign2() {
-        assertEval(Ignored.Unknown, "argv <- list(NULL, NULL);`oldClass<-`(argv[[1]],argv[[2]]);");
+        // FIXME UnsupportedSpecializationException: Unexpected values provided for oldClass<-: [],
+        // []
+        assertEval(Ignored.ImplementationError, "argv <- list(NULL, NULL);`oldClass<-`(argv[[1]],argv[[2]]);");
     }
 
     @Test
diff --git a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_options.java b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_options.java
index 894d7da3d6b0504510621d341e513a8b62e3abbb..56452811e63d7ed88fd07b0df14c9ee90b3d83bb 100644
--- a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_options.java
+++ b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_options.java
@@ -39,7 +39,15 @@ public class TestBuiltin_options extends TestBase {
 
     @Test
     public void testoptions5() {
-        assertEval(Ignored.Unknown, "argv <- list(NULL); .Internal(options(argv[[1]]))");
+        // FIXME RInternalError: should not reach here
+        assertEval(Ignored.Unimplemented, "options(list(NULL));");
+        assertEval("options(NA);");
+        // IMHO ReferenceError since NULL makes little sense as parameter value
+        // here just like NA which outputs 'invalid argument' both in GnuR and FastR.
+        // Expected output:
+        // FastR output: Error in options(NULL) : invalid argument
+        assertEval(Ignored.ReferenceError, "options(NULL);");
+        assertEval(Ignored.ReferenceError, "argv <- list(NULL); .Internal(options(argv[[1]]))");
     }
 
     @Test
diff --git a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_parse.java b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_parse.java
index 62df5804911e76c34d4d27ceab29b143a06716da..dad626ba6f9aca1290a105575883e2420cd2fcea 100644
--- a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_parse.java
+++ b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_parse.java
@@ -20,12 +20,16 @@ public class TestBuiltin_parse extends TestBase {
 
     @Test
     public void testSource() {
-        assertEval(Ignored.Unknown, "{ source(\"test/r/simple/data/tree2/setx.r\") ; x }");
-        assertEval(Ignored.Unknown, "{ source(\"test/r/simple/data/tree2/setx.r\", local=TRUE) ; x }");
-        assertEval(Ignored.Unknown, "{ x <- 1; f <- function() { source(\"test/r/simple/data/tree2/setx.r\", local=TRUE) ; x } ; c(f(), x) }");
-        assertEval(Ignored.Unknown, "{ x <- 1; f <- function() { source(\"test/r/simple/data/tree2/setx.r\", local=FALSE) ; x } ; c(f(), x) }");
-        assertEval(Ignored.Unknown, "{ x <- 1; f <- function() { source(\"test/r/simple/data/tree2/incx.r\", local=FALSE) ; x } ; c(f(), x) }");
-        assertEval(Ignored.Unknown, "{ x <- 1; f <- function() { source(\"test/r/simple/data/tree2/incx.r\", local=TRUE) ; x } ; c(f(), x) }");
+        // FIXME
+        // FastR repeats file name twice in the warning in this way:
+        // cannot open file 'test/r/simple/data/tree2/setx.r': test/r/simple/data/tree2/setx.r (No
+        // such file or directory)
+        assertEval(Output.IgnoreWarningMessage, "{ source(\"test/r/simple/data/tree2/setx.r\") ; x }");
+        assertEval(Output.IgnoreWarningMessage, "{ source(\"test/r/simple/data/tree2/setx.r\", local=TRUE) ; x }");
+        assertEval(Output.IgnoreWarningMessage, "{ x <- 1; f <- function() { source(\"test/r/simple/data/tree2/setx.r\", local=TRUE) ; x } ; c(f(), x) }");
+        assertEval(Output.IgnoreWarningMessage, "{ x <- 1; f <- function() { source(\"test/r/simple/data/tree2/setx.r\", local=FALSE) ; x } ; c(f(), x) }");
+        assertEval(Output.IgnoreWarningMessage, "{ x <- 1; f <- function() { source(\"test/r/simple/data/tree2/incx.r\", local=FALSE) ; x } ; c(f(), x) }");
+        assertEval(Output.IgnoreWarningMessage, "{ x <- 1; f <- function() { source(\"test/r/simple/data/tree2/incx.r\", local=TRUE) ; x } ; c(f(), x) }");
     }
 
     @Test
diff --git a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_paste0.java b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_paste0.java
index 7dd6948249a78347641496703f081c03aff43b0a..85f5157879cc2ed0ae5d067ad6148f2a4c5157a3 100644
--- a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_paste0.java
+++ b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_paste0.java
@@ -4,7 +4,7 @@
  * http://www.gnu.org/licenses/gpl-2.0.html
  *
  * Copyright (c) 2014, Purdue University
- * Copyright (c) 2014, 2016, Oracle and/or its affiliates
+ * Copyright (c) 2014, 2017, Oracle and/or its affiliates
  *
  * All rights reserved.
  */
@@ -59,7 +59,10 @@ public class TestBuiltin_paste0 extends TestBase {
 
     @Test
     public void testpaste011() {
-        assertEval(Ignored.Unknown, "argv <- list(list(character(0), character(0), character(0)), NULL); .Internal(paste0(argv[[1]], argv[[2]]))");
+        // FIXME:
+        // FastR output: '[1] ""'
+        // GnuR output: 'character(0)'
+        assertEval(Ignored.ImplementationError, "argv <- list(list(character(0), character(0), character(0)), NULL); .Internal(paste0(argv[[1]], argv[[2]]))");
     }
 
     @Test
diff --git a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_prmatrix.java b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_prmatrix.java
index 370345c6a5e352d25cf0dba105ae49a7ee987c40..f48635af59c462e9a0643b712eef8f9edc2ee273 100644
--- a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_prmatrix.java
+++ b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_prmatrix.java
@@ -4,7 +4,7 @@
  * http://www.gnu.org/licenses/gpl-2.0.html
  *
  * Copyright (c) 2014, Purdue University
- * Copyright (c) 2014, 2016, Oracle and/or its affiliates
+ * Copyright (c) 2014, 2017, Oracle and/or its affiliates
  *
  * All rights reserved.
  */
@@ -19,49 +19,57 @@ public class TestBuiltin_prmatrix extends TestBase {
 
     @Test
     public void testprmatrix1() {
-        assertEval(Ignored.Unknown,
+        // FIXME RInternalError: not implemented: .Internal prmatrix
+        assertEval(Ignored.Unimplemented,
                         "argv <- list(structure(c(1, 6, 9, 6, 4, 1, 1, 2, 1, 0.305397625390859, 0.00170825768891124, 8.51556634078892e-12, 0.64987756971621, 0.0197968749793939, 5.28672163823767e-10, 0.00471555351643001, 2.33367394341443e-13, 1.21630438148624e-64, 1, 1, 1), .Dim = c(3L, 7L), .Dimnames = list(NULL, c('time', 'n.risk', 'n.event', 'survival', 'std.err', 'lower 95% CI', 'upper 95% CI'))), c('', '', ''), c('time', 'n.risk', 'n.event', 'survival', 'std.err', 'lower 95% CI', 'upper 95% CI'), TRUE, FALSE, NULL); .Internal(prmatrix(argv[[1]], argv[[2]], argv[[3]], argv[[4]], argv[[5]], argv[[6]]))");
     }
 
     @Test
     public void testprmatrix2() {
-        assertEval(Ignored.Unknown,
+        // FIXME RInternalError: not implemented: .Internal prmatrix
+        assertEval(Ignored.Unimplemented,
                         "argv <- list(structure(FALSE, .Dim = c(1L, 1L)), NULL, NULL, TRUE, FALSE, NULL); .Internal(prmatrix(argv[[1]], argv[[2]], argv[[3]], argv[[4]], argv[[5]], argv[[6]]))");
     }
 
     @Test
     public void testprmatrix3() {
-        assertEval(Ignored.Unknown,
+        // FIXME RInternalError: not implemented: .Internal prmatrix
+        assertEval(Ignored.Unimplemented,
                         "argv <- list(structure(c(1, 2, 3, 4, 5, 8, 11, 12, 15, 17, 22, 23, 21, 19, 17, 16, 14, 12, 8, 6, 4, 3, 2, 1, 2, 2, 1, 2, 2, 4, 2, 2, 1, 1, 1, 1, 0.904761904761905, 0.80952380952381, 0.761904761904762, 0.666666666666667, 0.571428571428571, 0.380952380952381, 0.285714285714286, 0.19047619047619, 0.142857142857143, 0.0952380952380952, 0.0476190476190476, 0, 0.0640564484890047, 0.0856890867468988, 0.0929428640903365, 0.102868899974728, 0.107989849431208, 0.105971169574131, 0.0985807941917649, 0.0856890867468988, 0.0763603548321212, 0.0640564484890047, 0.0464714320451682, NaN, 0.670045882235034, 0.568905059924173, 0.519391415328429, 0.425350435565247, 0.337976953859493, 0.183066548820394, 0.116561326436765, 0.0594817013611753, 0.0356573551906667, 0.016259260212247, 0.00332446304253118, NA, 0.975294149038113, 0.923888828559295, 0.893257109782487, 0.82504400879734, 0.749240709943216, 0.577788677745831, 0.481819648009025, 0.37743489058515, 0.321161574680869, 0.261249981968687, 0.197044905698946, NA), .Dim = c(12L, 7L), .Dimnames = list(NULL, c('time', 'n.risk', 'n.event', 'survival', 'std.err', 'lower 95% CI', 'upper 95% CI'))), c('', '', '', '', '', '', '', '', '', '', '', ''), c('time', 'n.risk', 'n.event', 'survival', 'std.err', 'lower 95% CI', 'upper 95% CI'), TRUE, FALSE, NULL); .Internal(prmatrix(argv[[1]], argv[[2]], argv[[3]], argv[[4]], argv[[5]], argv[[6]]))");
     }
 
     @Test
     public void testprmatrix4() {
-        assertEval(Ignored.Unknown,
+        // FIXME RInternalError: not implemented: .Internal prmatrix
+        assertEval(Ignored.Unimplemented,
                         "argv <- list(structure(c(952L, 3622L, 202L, 406L), .Dim = c(2L, 2L), .Dimnames = list(c('subcohort', 'cohort'), c('1', '2'))), c('subcohort', 'cohort'), c('1', '2'), FALSE, FALSE, NULL); .Internal(prmatrix(argv[[1]], argv[[2]], argv[[3]], argv[[4]], argv[[5]], argv[[6]]))");
     }
 
     @Test
     public void testprmatrix5() {
-        assertEval(Ignored.Unknown,
+        // FIXME RInternalError: not implemented: .Internal prmatrix
+        assertEval(Ignored.Unimplemented,
                         "argv <- list(structure(c(-1.89646294299258, 1.16675019914746, -8.10054918052941, -5.02922966334328, -0.332284173685658, -0.370285767776029, -0.422218802914528, 0.27824687717147, NA, 0.150098588668891, 3.21153879975245, 0.000303372486059531, 0.00654384959664698, 0.717283460804982, 0.690536969224971, 0.655590578569862, 1.32081223535046, NA, 1.38078223740269, 0.565646487676971, 0.698724423746393, 0.770086232143856, 0.0568682431416458, 0.116409970657657, 0.0584328435912827, 0.0510212342180821, 0, -1.37346997348395, 2.06268442316178, -11.5933390979754, -6.53073571948212, -5.84305326362929, -3.1808767383421, -7.22571035337252, 5.45355049590036, NA, 0.17, 0.039, 0, 6.5e-11, 5.1e-09, 0.0015, 5e-13, 4.9e-08, NA), .Dim = c(9L, 5L), .Dimnames = list(c('toccfarm', 'toccoperatives', 'toccprofessional', 'toccsales', 'tocccraftsmen:education', 'toccfarm:education', 'toccoperatives:education', 'toccprofessional:education', 'toccsales:education'), c('coef', 'exp(coef)', 'se(coef)', 'z', 'p'))), c('toccfarm', 'toccoperatives', 'toccprofessional', 'toccsales', 'tocccraftsmen:education', 'toccfarm:education', 'toccoperatives:education', 'toccprofessional:education', 'toccsales:education'), c('coef', 'exp(coef)', 'se(coef)', 'z', 'p'), TRUE, FALSE, NULL); .Internal(prmatrix(argv[[1]], argv[[2]], argv[[3]], argv[[4]], argv[[5]], argv[[6]]))");
     }
 
     @Test
     public void testprmatrix6() {
-        assertEval(Ignored.Unknown,
+        // FIXME RInternalError: not implemented: .Internal prmatrix
+        assertEval(Ignored.Unimplemented,
                         "argv <- list(structure(c('splines-package', 'as.polySpline', 'asVector', 'backSpline', 'bs', 'interpSpline', 'ns', 'periodicSpline', 'polySpline', 'predict.bs', 'predict.bSpline', 'predict.nbSpline', 'predict.npolySpline', 'predict.ns', 'predict.pbSpline', 'predict.ppolySpline', 'spline.des', 'splineDesign', 'splineKnots', 'splineOrder', 'splines', 'xyVector', 'splines-package', 'polySpline', 'asVector', 'backSpline', 'bs', 'interpSpline', 'ns', 'periodicSpline', 'polySpline', 'predict.bs', 'predict.bSpline', 'predict.bSpline', 'predict.bSpline', 'predict.bs', 'predict.bSpline', 'predict.bSpline', 'splineDesign', 'splineDesign', 'splineKnots', 'splineOrder', 'splines-package', 'xyVector'), .Dim = c(22L, 2L)), NULL, c('Column 1', 'Column 2', 'Column 3'), FALSE, TRUE, NULL); .Internal(prmatrix(argv[[1]], argv[[2]], argv[[3]], argv[[4]], argv[[5]], argv[[6]]))");
     }
 
     @Test
     public void testprmatrix7() {
-        assertEval(Ignored.Unknown,
+        // FIXME RInternalError: not implemented: .Internal prmatrix
+        assertEval(Ignored.Unimplemented,
                         "argv <- list(structure(c(' 0.228763', '-0.000666', '', '0.08909', '0.00426', '', '0.08899', '0.00426', '', '6.59', '0.02', '6.02', '1.00', '1.00', '3.06', '0.01', '0.88', '0.12'), .Dim = c(3L, 6L), .Dimnames = list(c('male', 'tt(agechf), linear', 'tt(agechf), nonlin'), c('coef', 'se(coef)', 'se2', 'Chisq', 'DF', 'p'))), c('male', 'tt(agechf), linear', 'tt(agechf), nonlin'), c('coef', 'se(coef)', 'se2', 'Chisq', 'DF', 'p'), FALSE, FALSE, NULL); .Internal(prmatrix(argv[[1]], argv[[2]], argv[[3]], argv[[4]], argv[[5]], argv[[6]]))");
     }
 
     @Test
     public void testprmatrix8() {
-        assertEval(Ignored.Unknown,
+        // FIXME RInternalError: not implemented: .Internal prmatrix
+        assertEval(Ignored.Unimplemented,
                         "argv <- list(structure(c(' 0.00561', '-1.65487', '', '0.012', '0.483', '', '0.00872', '0.38527', '', ' 0.22', '11.74', '20.33', ' 1.0', ' 1.0', '13.9', '0.64000', '0.00061', '0.12000'), .Dim = c(3L, 6L), .Dimnames = list(c('age', 'sex', 'frailty(id, dist = \\\'t\\\', c'), c('coef', 'se(coef)', 'se2', 'Chisq', 'DF', 'p'))), c('age', 'sex', 'frailty(id, dist = \\\'t\\\', c'), c('coef', 'se(coef)', 'se2', 'Chisq', 'DF', 'p'), FALSE, FALSE, NULL); .Internal(prmatrix(argv[[1]], argv[[2]], argv[[3]], argv[[4]], argv[[5]], argv[[6]]))");
     }
 }
diff --git a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_psigamma.java b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_psigamma.java
index 9ff14d898c24f971405c481f456a51fbc34c0740..8c7a7b06e81e5d014c2b0dcf563d559728597e1e 100644
--- a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_psigamma.java
+++ b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_psigamma.java
@@ -4,7 +4,7 @@
  * http://www.gnu.org/licenses/gpl-2.0.html
  *
  * Copyright (c) 2014, Purdue University
- * Copyright (c) 2014, 2016, Oracle and/or its affiliates
+ * Copyright (c) 2014, 2017, Oracle and/or its affiliates
  *
  * All rights reserved.
  */
@@ -19,23 +19,23 @@ public class TestBuiltin_psigamma extends TestBase {
 
     @Test
     public void testpsigamma1() {
-        assertEval(Ignored.Unknown,
+        assertEval(Ignored.Unimplemented,
                         "argv <- list(c(-100, -3, -2, -1, 0, 1, 2, -99.9, -7.7, -3, -2.9, -2.8, -2.7, -2.6, -2.5, -2.4, -2.3, -2.2, -2.1, -2, -1.9, -1.8, -1.7, -1.6, -1.5, -1.4, -1.3, -1.2, -1.1, -1, -0.9, -0.8, -0.7, -0.6, -0.5, -0.4, -0.3, -0.2, -0.0999999999999996, 0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1, 1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 1.7, 1.8, 1.9, 2, 2.1, 2.2, 2.3, 2.4, 2.5, 2.6, 2.7, 2.8, 2.9, 3, 5.1, 77), 1); .Internal(psigamma(argv[[1]], argv[[2]]))");
     }
 
     @Test
     public void testpsigamma2() {
-        assertEval(Ignored.Unknown, "argv <- list(c(1e+30, 1e+45, 1e+60, 1e+75, 1e+90), 2); .Internal(psigamma(argv[[1]], argv[[2]]))");
+        assertEval(Ignored.Unimplemented, "argv <- list(c(1e+30, 1e+45, 1e+60, 1e+75, 1e+90), 2); .Internal(psigamma(argv[[1]], argv[[2]]))");
     }
 
     @Test
     public void testpsigamma3() {
-        assertEval(Ignored.Unknown, "argv <- list(c(1e+20, 1e+30, 1e+40, 1e+50, 1e+60), 5); .Internal(psigamma(argv[[1]], argv[[2]]))");
+        assertEval(Ignored.Unimplemented, "argv <- list(c(1e+20, 1e+30, 1e+40, 1e+50, 1e+60), 5); .Internal(psigamma(argv[[1]], argv[[2]]))");
     }
 
     @Test
     public void testpsigamma4() {
-        assertEval(Ignored.Unknown,
+        assertEval(Ignored.Unimplemented,
                         "argv <- list(c(-100, -3, -2, -1, 0, 1, 2, -99.9, -7.7, -3, -2.9, -2.8, -2.7, -2.6, -2.5, -2.4, -2.3, -2.2, -2.1, -2, -1.9, -1.8, -1.7, -1.6, -1.5, -1.4, -1.3, -1.2, -1.1, -1, -0.9, -0.8, -0.7, -0.6, -0.5, -0.4, -0.3, -0.2, -0.0999999999999996, 0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1, 1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 1.7, 1.8, 1.9, 2, 2.1, 2.2, 2.3, 2.4, 2.5, 2.6, 2.7, 2.8, 2.9, 3, 5.1, 77), 0); .Internal(psigamma(argv[[1]], argv[[2]]))");
     }
 }
diff --git a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_psort.java b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_psort.java
index ae148fb1ac5690446df385b2f86cdd75e0446a02..6150dfc0a8e170dd116e8fc6c792a2c0bb80fa9d 100644
--- a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_psort.java
+++ b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_psort.java
@@ -19,78 +19,76 @@ public class TestBuiltin_psort extends TestBase {
 
     @Test
     public void testpsort1() {
-        assertEval("argv <- list(7:8, 1:2); .Internal(psort(argv[[1]], argv[[2]]))");
+        // Second arg is a vector of indices in the resulting sorted vector where the elements must
+        // much a fully sorted vector.
+        // So only compare the required indices (rest of the vector can be unsorted and it can
+        // possibly differ between GnuR and FastR).
+        assertEval("argv <- list(7:8, 1:2); .Internal(psort(argv[[1]], argv[[2]]))[argv[[2]]]");
     }
 
     @Test
     public void testpsort2() {
-        assertEval(Ignored.Unknown,
-                        "argv <- list(c(0.0499999999999972, 0.300000000000004, 1.1, 0.0500000000000007, 0, 0.25, 1, 2.15, 1.95, 2.09999999999999, 1.95, 2.04999999999999, 2.59999999999999, 2.59999999999999, 2.6, 4.25, 3.45, 2.65000000000001, 3.49999999999999, 3.75000000000001, 2.75, 3.05, 2.8, 4.45, 3.35, 7.7, 14.2), 14L); .Internal(psort(argv[[1]], argv[[2]]))");
+        assertEval("argv <- list(c(0.0499999999999972, 0.300000000000004, 1.1, 0.0500000000000007, 0, 0.25, 1, 2.15, 1.95, 2.09999999999999, 1.95, 2.04999999999999, 2.59999999999999, 2.59999999999999, 2.6, 4.25, 3.45, 2.65000000000001, 3.49999999999999, 3.75000000000001, 2.75, 3.05, 2.8, 4.45, 3.35, 7.7, 14.2), 14L); .Internal(psort(argv[[1]], argv[[2]]))[argv[[2]]]");
     }
 
     @Test
     public void testpsort3() {
-        assertEval(Ignored.Unknown,
-                        "argv <- list(c(4.23272528138341e-16, 5.68989300120393e-16, 0.0499999999999982, 3.05311331771918e-16, 0.049999999999999, 0.0499999999999994, 3.05311331771918e-16, 0.0499999999999994, 0.100000000000001, 0.0999999999999994, 0.0999999999999994, 0.0500000000000006, 0.15, 0.15, 0.100000000000001, 0.0499999999999997, 0.150000000000001, 0.0999999999999995, 0.0999999999999993, 0.100000000000001, 0.0999999999999994, 0.100000000000001, 0.250000000000001, 0.250000000000001, 0.299999999999999, 0.199999999999999, 0.200000000000001, 0.3, 0.25, 0.199999999999999, 0.199999999999999, 0.150000000000001, 0.200000000000001, 0.199999999999998, 0.249999999999999, 0.199999999999999, 0.3, 0.350000000000001, 0.35, 0.300000000000001, 0.3, 0.350000000000002, 0.35, 0.35, 0.300000000000001, 0.350000000000001, 0.399999999999999, 0.4, 0.349999999999999, 0.350000000000001, 0.400000000000001, 0.300000000000001, 0.400000000000001, 0.449999999999999, 0.45, 0.450000000000001, 0.45, 0.450000000000001, 1.05, 0.7, 0.6, 1, 0.500000000000001, 0.5, 0.699999999999999, 1.05, 0.850000000000001, 0.650000000000001, 0.750000000000001, 0.75, 1, 0.699999999999999, 0.749999999999999, 1.05, 0.549999999999999, 0.500000000000001, 0.7, 0.8, 0.500000000000001, 0.650000000000001, 0.700000000000001, 0.599999999999999, 0.9, 0.75, 0.949999999999999, 0.899999999999999, 0.550000000000001, 1, 1.05, 1.05, 0.600000000000001, 0.6, 1.05, 0.749999999999999, 0.949999999999999, 1.1, 2.15, 1.45, 1.3, 2.1, 4.85, 3.7, 2.05, 1.2, 1.4, 1.3, 1.2, 1.85), 54:55); .Internal(psort(argv[[1]], argv[[2]]))");
+        assertEval("argv <- list(c(4.23272528138341e-16, 5.68989300120393e-16, 0.0499999999999982, 3.05311331771918e-16, 0.049999999999999, 0.0499999999999994, 3.05311331771918e-16, 0.0499999999999994, 0.100000000000001, 0.0999999999999994, 0.0999999999999994, 0.0500000000000006, 0.15, 0.15, 0.100000000000001, 0.0499999999999997, 0.150000000000001, 0.0999999999999995, 0.0999999999999993, 0.100000000000001, 0.0999999999999994, 0.100000000000001, 0.250000000000001, 0.250000000000001, 0.299999999999999, 0.199999999999999, 0.200000000000001, 0.3, 0.25, 0.199999999999999, 0.199999999999999, 0.150000000000001, 0.200000000000001, 0.199999999999998, 0.249999999999999, 0.199999999999999, 0.3, 0.350000000000001, 0.35, 0.300000000000001, 0.3, 0.350000000000002, 0.35, 0.35, 0.300000000000001, 0.350000000000001, 0.399999999999999, 0.4, 0.349999999999999, 0.350000000000001, 0.400000000000001, 0.300000000000001, 0.400000000000001, 0.449999999999999, 0.45, 0.450000000000001, 0.45, 0.450000000000001, 1.05, 0.7, 0.6, 1, 0.500000000000001, 0.5, 0.699999999999999, 1.05, 0.850000000000001, 0.650000000000001, 0.750000000000001, 0.75, 1, 0.699999999999999, 0.749999999999999, 1.05, 0.549999999999999, 0.500000000000001, 0.7, 0.8, 0.500000000000001, 0.650000000000001, 0.700000000000001, 0.599999999999999, 0.9, 0.75, 0.949999999999999, 0.899999999999999, 0.550000000000001, 1, 1.05, 1.05, 0.600000000000001, 0.6, 1.05, 0.749999999999999, 0.949999999999999, 1.1, 2.15, 1.45, 1.3, 2.1, 4.85, 3.7, 2.05, 1.2, 1.4, 1.3, 1.2, 1.85), 54:55); .Internal(psort(argv[[1]], argv[[2]]))[argv[[2]]]");
     }
 
     @Test
     public void testpsort4() {
-        assertEval(Ignored.Unknown,
-                        "argv <- list(c(0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.0499999999999998, 0.05, 0.05, 0.05, 0.0499999999999999, 0.05, 0.0499999999999999, 0.05, 0.0499999999999999, 0.0499999999999999, 0.05, 0.0499999999999999, 0.0499999999999999, 0.05, 0.05, 0.0499999999999998, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.0499999999999999, 0.05, 0.05, 0.05, 0.0499999999999999, 0.0499999999999999, 0.0499999999999999, 0.05, 0.05, 0.0499999999999999, 0.05, 0.0499999999999999, 0.05, 0.05, 0.05, 0.0499999999999998, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.0555556, 0.05555554, 0.05555556, 0.05555556, 0.05555554, 0.0555556, 0.0555555, 0.0555556, 0.0555555, 0.0555556, 0.0555555, 0.0555556, 0.0555556, 0.0555555, 0.0555555999999999, 0.0555555000000001, 0.0555555999999999, 0.0555555000000001, 0.0555555999999999, 0.0555555, 0.0555556, 0.0555559999999999, 0.055555, 0.0555559999999999, 0.0526315, 0.05263162, 0.05263158, 0.05263158, 0.05263162, 0.0526315, 0.0526316, 0.0526316, 0.0526316, 0.0526316, 0.0526315, 0.0526316, 0.0526316, 0.0526316, 0.0526316, 0.0526315000000001, 0.0526316, 0.0526315999999999, 0.0526316, 0.0526315000000001, 0.0526316, 0.0526316, 0.052632, 0.0526310000000001, 0.0526319999999998, 0.08333333, 0.08333333, 0.08333334, 0.08333333, 0.08333333, 0.08333337, 0.0833333, 0.0833333, 0.0833333, 0.0833333, 0.0833333, 0.0833333, 0.0833333000000001, 0.0833333000000001, 0.0833333999999999, 0.0833333000000001, 0.0833333000000001, 0.0833333999999999, 0.0833333000000001, 0.0833333000000001, 0.0833333999999999, 0.0833333000000001, 0.0833333000000001, 0.0833330000000001, 0.0833330000000001), 76:77); .Internal(psort(argv[[1]], argv[[2]]))");
+        assertEval("argv <- list(c(0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.0499999999999998, 0.05, 0.05, 0.05, 0.0499999999999999, 0.05, 0.0499999999999999, 0.05, 0.0499999999999999, 0.0499999999999999, 0.05, 0.0499999999999999, 0.0499999999999999, 0.05, 0.05, 0.0499999999999998, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.0499999999999999, 0.05, 0.05, 0.05, 0.0499999999999999, 0.0499999999999999, 0.0499999999999999, 0.05, 0.05, 0.0499999999999999, 0.05, 0.0499999999999999, 0.05, 0.05, 0.05, 0.0499999999999998, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.0555556, 0.05555554, 0.05555556, 0.05555556, 0.05555554, 0.0555556, 0.0555555, 0.0555556, 0.0555555, 0.0555556, 0.0555555, 0.0555556, 0.0555556, 0.0555555, 0.0555555999999999, 0.0555555000000001, 0.0555555999999999, 0.0555555000000001, 0.0555555999999999, 0.0555555, 0.0555556, 0.0555559999999999, 0.055555, 0.0555559999999999, 0.0526315, 0.05263162, 0.05263158, 0.05263158, 0.05263162, 0.0526315, 0.0526316, 0.0526316, 0.0526316, 0.0526316, 0.0526315, 0.0526316, 0.0526316, 0.0526316, 0.0526316, 0.0526315000000001, 0.0526316, 0.0526315999999999, 0.0526316, 0.0526315000000001, 0.0526316, 0.0526316, 0.052632, 0.0526310000000001, 0.0526319999999998, 0.08333333, 0.08333333, 0.08333334, 0.08333333, 0.08333333, 0.08333337, 0.0833333, 0.0833333, 0.0833333, 0.0833333, 0.0833333, 0.0833333, 0.0833333000000001, 0.0833333000000001, 0.0833333999999999, 0.0833333000000001, 0.0833333000000001, 0.0833333999999999, 0.0833333000000001, 0.0833333000000001, 0.0833333999999999, 0.0833333000000001, 0.0833333000000001, 0.0833330000000001, 0.0833330000000001), 76:77); .Internal(psort(argv[[1]], argv[[2]]))[argv[[2]]]");
     }
 
     @Test
     public void testpsort5() {
-        assertEval(Ignored.Unknown,
-                        "argv <- list(c(-3.35281542033775, -3.57533122743112, -3.23282496934355, -3.3903449466851, -3.39757437954971, -3.36251831175626, -3.22932468384763, -3.22295685034786, -3.21402130636699, -3.11638102275539, -3.09226646401048, -3.21757818016328, -3.0862187014408, -3.08484132891786), 7:8); .Internal(psort(argv[[1]], argv[[2]]))");
+        assertEval("argv <- list(c(-3.35281542033775, -3.57533122743112, -3.23282496934355, -3.3903449466851, -3.39757437954971, -3.36251831175626, -3.22932468384763, -3.22295685034786, -3.21402130636699, -3.11638102275539, -3.09226646401048, -3.21757818016328, -3.0862187014408, -3.08484132891786), 7:8); .Internal(psort(argv[[1]], argv[[2]]))[argv[[2]]]");
     }
 
     @Test
     public void testpsort6() {
-        assertEval(Ignored.Unknown,
-                        "argv <- list(c(FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, TRUE, FALSE, FALSE, FALSE, TRUE, TRUE, FALSE, FALSE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, TRUE, TRUE, FALSE, TRUE, TRUE, FALSE, FALSE, FALSE, FALSE, TRUE, TRUE, FALSE, FALSE, TRUE, TRUE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, TRUE, FALSE, FALSE, FALSE, FALSE, TRUE, TRUE, FALSE, FALSE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, TRUE, TRUE, TRUE), c(66L, 195L)); .Internal(psort(argv[[1]], argv[[2]]))");
+        assertEval("argv <- list(c(FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, TRUE, FALSE, FALSE, FALSE, TRUE, TRUE, FALSE, FALSE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, TRUE, TRUE, FALSE, TRUE, TRUE, FALSE, FALSE, FALSE, FALSE, TRUE, TRUE, FALSE, FALSE, TRUE, TRUE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, TRUE, FALSE, FALSE, FALSE, FALSE, TRUE, TRUE, FALSE, FALSE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, TRUE, TRUE, TRUE), c(66L, 195L)); .Internal(psort(argv[[1]], argv[[2]]))[argv[[2]]]");
     }
 
     @Test
     public void testpsort7() {
-        assertEval("argv <- list(c(1, 2, 2, 3, 3, 4, 4, 5), 1:8); .Internal(psort(argv[[1]], argv[[2]]))");
+        assertEval("argv <- list(c(1, 2, 2, 3, 3, 4, 4, 5), 1:8); .Internal(psort(argv[[1]], argv[[2]]))[argv[[2]]]");
     }
 
     @Test
     public void testpsort8() {
-        assertEval("argv <- list(27:28, 1:2); .Internal(psort(argv[[1]], argv[[2]]))");
+        assertEval("argv <- list(27:28, 1:2); .Internal(psort(argv[[1]], argv[[2]]))[argv[[2]]]");
     }
 
     @Test
     public void testpsort9() {
-        assertEval("argv <- list(c(-Inf, -Inf, Inf, Inf), 1:4); .Internal(psort(argv[[1]], argv[[2]]))");
+        assertEval("argv <- list(c(-Inf, -Inf, Inf, Inf), 1:4); .Internal(psort(argv[[1]], argv[[2]]))[argv[[2]]]");
     }
 
     @Test
     public void testpsort10() {
-        assertEval("argv <- list(c(-1.05715266611575, -0.873306430909872, -0.548705796690786, -0.288240908441576, -0.0649703574297026, 0.224762433374997, 0.3255545927283, 0.4813346401898, 0.530823516045489, 1.2699009772491), c(1L, 3L, 4L, 5L, 6L, 7L, 8L, 10L)); .Internal(psort(argv[[1]], argv[[2]]))");
+        assertEval("argv <- list(c(-1.05715266611575, -0.873306430909872, -0.548705796690786, -0.288240908441576, -0.0649703574297026, 0.224762433374997, 0.3255545927283, 0.4813346401898, 0.530823516045489, 1.2699009772491), c(1L, 3L, 4L, 5L, 6L, 7L, 8L, 10L)); .Internal(psort(argv[[1]], argv[[2]]))[argv[[2]]]");
     }
 
     @Test
     public void testpsort11() {
-        assertEval("argv <- list(c(-1.05715266611575, -0.873306430909873, -0.548705796690787, -0.288240908441577, -0.0649703574297025, 0.224762433374994, 0.3255545927283, 0.481334640189799, 0.530823516045488, 1.2699009772491), c(1L, 3L, 4L, 5L, 6L, 7L, 8L, 10L)); .Internal(psort(argv[[1]], argv[[2]]))");
+        assertEval("argv <- list(c(-1.05715266611575, -0.873306430909873, -0.548705796690787, -0.288240908441577, -0.0649703574297025, 0.224762433374994, 0.3255545927283, 0.481334640189799, 0.530823516045488, 1.2699009772491), c(1L, 3L, 4L, 5L, 6L, 7L, 8L, 10L)); .Internal(psort(argv[[1]], argv[[2]]))[argv[[2]]]");
     }
 
     @Test
     public void testpsort12() {
-        assertEval("argv <- list(c(-Inf, -Inf, -Inf, -Inf, -Inf, -Inf, -Inf, -Inf, -Inf, -Inf, -Inf, -Inf, -Inf, -Inf, -Inf, -Inf, -Inf, -Inf, -Inf, -Inf, -Inf, -Inf, -4.17369555651928e+302, -2.72671165723473e+289, -2.21240023126594e+276, -2.24780296109123e+263, -2.88514442494869e+250, -4.72336572671053e+237, -9.96611412047338e+224, -2.74100158340596e+212, -9.94902790498679e+199, -4.83110332887119e+187, -3.18582547396557e+175, -2.90089508183654e+163, -3.71562599613334e+151, -6.83535188151783e+139, -1.84898368353639e+128, -7.55412056676629e+116, -4.80716085942859e+105, -4.9383857330861e+94, -8.54170618068872e+83, -2.61556777274611e+73, -1.5069799345972e+63, -1.76183826972506e+53, -4.60125024792566e+43, -3.04622557026196e+34, -6.08456909882282e+25, -473300382255715392, -21650982809.6744, -12820.0784261145, -1.12778377684043), c(1L, 13L, 14L, 26L, 38L, 39L, 51L)); .Internal(psort(argv[[1]], argv[[2]]))");
+        assertEval("argv <- list(c(-Inf, -Inf, -Inf, -Inf, -Inf, -Inf, -Inf, -Inf, -Inf, -Inf, -Inf, -Inf, -Inf, -Inf, -Inf, -Inf, -Inf, -Inf, -Inf, -Inf, -Inf, -Inf, -4.17369555651928e+302, -2.72671165723473e+289, -2.21240023126594e+276, -2.24780296109123e+263, -2.88514442494869e+250, -4.72336572671053e+237, -9.96611412047338e+224, -2.74100158340596e+212, -9.94902790498679e+199, -4.83110332887119e+187, -3.18582547396557e+175, -2.90089508183654e+163, -3.71562599613334e+151, -6.83535188151783e+139, -1.84898368353639e+128, -7.55412056676629e+116, -4.80716085942859e+105, -4.9383857330861e+94, -8.54170618068872e+83, -2.61556777274611e+73, -1.5069799345972e+63, -1.76183826972506e+53, -4.60125024792566e+43, -3.04622557026196e+34, -6.08456909882282e+25, -473300382255715392, -21650982809.6744, -12820.0784261145, -1.12778377684043), c(1L, 13L, 14L, 26L, 38L, 39L, 51L)); .Internal(psort(argv[[1]], argv[[2]]))[argv[[2]]]");
     }
 
     @Test
     public void testpsort13() {
-        assertEval(Ignored.Unknown,
-                        "argv <- list(c(0.5, 0.6, 1.2, 1.3, 1.6, 5.8, 6.2, 3.7, 5.1, 5, 4, 4, 5.3, 1.4, 6.6, 3.8, 2.6, 3.2, 2.9, 6.8, 10.6, 7.6, 9.3, 8, 10, 10, 8, 10.5, 10.5, 9.7, 9.7, 9.4, 8.9, 8.8, 8, 10.1, 8.5, 9.1, 7.5, 7.4, 7.5, 7.6, 8.4, 8.5, 10.8, 11.1, 12, 12, 18, 17.7, 16, 15, 14, 12.9, 12.7, 12.6, 17.9, 12.1, 17.7, 16.1, 13, 17.3, 17, 16.7, 13, 15.7, 19, 16, 17, 12, 12.2, 12.8, 14.6, 14.9, 17.6, 21, 20.5, 19.6, 20.2, 20.8, 21.1, 21.9, 20.5, 19.2, 22.5, 22, 23.2, 23, 22, 22, 23.4, 23.4, 23.5, 29, 26, 25, 28.5, 25.4, 29, 24.2, 23.9, 24.6, 25.7, 25.3, 28.6, 26.5, 29, 37.8, 30.9, 42, 31, 38.5, 41.4, 43.6, 46.7, 37.4, 45, 35.9, 36.1, 32, 44.4, 40.3, 30, 31, 32, 32.7, 36, 43.5, 33.1, 32.9, 36.3, 38.9, 30, 46.1, 45, 47.1, 47.7, 187, 147, 130, 49.2, 62, 141, 122, 105, 62, 64, 123, 112, 105, 63.6, 60, 49, 66, 87, 56.9, 60.7, 61.4, 156, 62, 64, 82, 88, 48.3, 109, 107, 85, 91, 148, 145, 53.1, 50, 92.2, 224, 293, 300, 211, 200, 197, 203, 359, 370), c(1L, 46L, 47L, 91L, 92L, 136L, 137L, 182L)); .Internal(psort(argv[[1]], argv[[2]]))");
+        assertEval("argv <- list(c(0.5, 0.6, 1.2, 1.3, 1.6, 5.8, 6.2, 3.7, 5.1, 5, 4, 4, 5.3, 1.4, 6.6, 3.8, 2.6, 3.2, 2.9, 6.8, 10.6, 7.6, 9.3, 8, 10, 10, 8, 10.5, 10.5, 9.7, 9.7, 9.4, 8.9, 8.8, 8, 10.1, 8.5, 9.1, 7.5, 7.4, 7.5, 7.6, 8.4, 8.5, 10.8, 11.1, 12, 12, 18, 17.7, 16, 15, 14, 12.9, 12.7, 12.6, 17.9, 12.1, 17.7, 16.1, 13, 17.3, 17, 16.7, 13, 15.7, 19, 16, 17, 12, 12.2, 12.8, 14.6, 14.9, 17.6, 21, 20.5, 19.6, 20.2, 20.8, 21.1, 21.9, 20.5, 19.2, 22.5, 22, 23.2, 23, 22, 22, 23.4, 23.4, 23.5, 29, 26, 25, 28.5, 25.4, 29, 24.2, 23.9, 24.6, 25.7, 25.3, 28.6, 26.5, 29, 37.8, 30.9, 42, 31, 38.5, 41.4, 43.6, 46.7, 37.4, 45, 35.9, 36.1, 32, 44.4, 40.3, 30, 31, 32, 32.7, 36, 43.5, 33.1, 32.9, 36.3, 38.9, 30, 46.1, 45, 47.1, 47.7, 187, 147, 130, 49.2, 62, 141, 122, 105, 62, 64, 123, 112, 105, 63.6, 60, 49, 66, 87, 56.9, 60.7, 61.4, 156, 62, 64, 82, 88, 48.3, 109, 107, 85, 91, 148, 145, 53.1, 50, 92.2, 224, 293, 300, 211, 200, 197, 203, 359, 370), c(1L, 46L, 47L, 91L, 92L, 136L, 137L, 182L)); .Internal(psort(argv[[1]], argv[[2]]))[argv[[2]]]");
     }
 
     @Test
     public void testpsort14() {
-        assertEval("argv <- list(c(-1.36919169254062, -0.667819876370237, -0.253162069270378, -0.0834190388782434, -0.00786394222146348, 0.0246733498130512, 0.0730305465518564, 0.0881443844426084, 0.170711734013213, 0.552921941721332), c(1L, 3L, 4L, 5L, 6L, 7L, 8L, 10L)); .Internal(psort(argv[[1]], argv[[2]]))");
+        assertEval("argv <- list(c(-1.36919169254062, -0.667819876370237, -0.253162069270378, -0.0834190388782434, -0.00786394222146348, 0.0246733498130512, 0.0730305465518564, 0.0881443844426084, 0.170711734013213, 0.552921941721332), c(1L, 3L, 4L, 5L, 6L, 7L, 8L, 10L)); .Internal(psort(argv[[1]], argv[[2]]))[argv[[2]]]");
     }
 
     @Test
diff --git a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_qr.java b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_qr.java
index 397aa78e82d932bdeac49e10adb8ba784e70900b..c176d24ca4d06e443beac0829ae8e2411b5e565f 100644
--- a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_qr.java
+++ b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_qr.java
@@ -19,13 +19,15 @@ public class TestBuiltin_qr extends TestBase {
 
     @Test
     public void testqr1() {
-        assertEval(Ignored.Unknown,
+        // FIXME RInternalError: not implemented: .Internal qr_coef_cmplx
+        assertEval(Ignored.Unimplemented,
                         "argv <- list(structure(list(qr = structure(c(-2.99896066496855+0i, 0.0864255261791181+0i, -0.13772470327145+0i, -0.49098351645158+0i, 0.249389337649224+0i, 1.17331892183982+0i, -1.54960102684918+0i, -0.573648421141553+0i, 0.376760682628698+0i, 0.412090084647403+0i, 0.603959683330493+0i, -0.0216928335770876+0i, -1.2469936242596+0i, 0.224366164923213+0i, 0.341798188737913+0i, 1.04294423444024+0i, 0.270564951504877+0i, -0.315381666175534+0i, 0.787566751532822+0i, 0.229154517629245+0i, -2.25109940279642+0i, 0.530750192641659+0i, -0.0977755443891602+0i, 0.6614171819615+0i, -0.0856949989622426+0i), .Dim = c(5L, 5L), .Dimnames = list(c('1', '2', '3', '4', '5'), c('c', 'a', 'd', 'b', 'e'))), rank = 5L, qraux = c(1.50410169966891+0i, 1.21888836143069+0i, 1.71355205288103+0i, 1.90021623833265+0i, 0+0i), pivot = c(3L, 1L, 4L, 2L, 5L)), .Names = c('qr', 'rank', 'qraux', 'pivot'), class = 'qr'), structure(1:5, .Dim = c(5L, 1L))); .Internal(qr_coef_cmplx(argv[[1]], argv[[2]]))");
     }
 
     @Test
     public void testqr2() {
-        assertEval(Ignored.Unknown,
+        // FIXME RInternalError: not implemented: .Internal qr_qy_real
+        assertEval(Ignored.Unimplemented,
                         "argv <- list(structure(list(qr = structure(c(-2.79657712283236, 0.0791500442336917, 0.123755637403102, 0.089607462331441, 0.175462651449591, 0.0695565565709435, 0.129006956605315, 0.206583197284758, 0.0227114114395308, 0.235970456809858, 0.0914077988155571, 0.226297607634113, 0.0934594628258066, 0.0899795540097744, 0.12841549388179, 0.240520185730483, 0.233009950431413, 0.105133974880502, 0.2095512974465, 0.258964862210899, -2.07025325833148, -1.85301582498188, 0.139094572499947, 0.342556683478902, -0.102024562608463, 0.360699451256097, 0.315324737973941, 0.0873752715112826, 0.2823485467872, -0.239863332146733, -0.00369181667619238, -0.172536775168022, 0.229736826805589, 0.0852501914884386, 0.230310089401495, -0.0314168397035678, 0.0849707357385819, 0.365804687920591, -0.0536336269418447, 0.0845797169641211, -2.03746531175251, -0.489461063366758, -1.40644653583967, -0.00873041883181913, 0.0708276075409328, 0.153420226417602, -0.370069917481653, -0.112816417432651, 0.240125650075004, 0.138426195987046, 0.128552669396225, 0.217325815608225, -0.0223361051263949, -0.0526633296159945, -0.296094517820351, -0.327346352864029, -0.249917267465335, -0.0672115093838751, 0.0654426021596298, -0.240131194574062, -2.06587739268838, -0.339470951293598, -0.49608488205654, 1.14277258876071, 0.201196269542128, 0.0348254315928563, 0.145314253550005, 0.131380830586619, -0.387015716398766, 0.283849139598354, -0.0827284627849877, 0.132994279479374, -0.113393410148955, 0.0518736136418599, -0.422882666833989, -0.141635274746576, -0.181291088091223, 0.196913259592121, -0.0460107390352923, 0.15597817986415), .Dim = c(20L, 4L)), rank = 4L, qraux = c(1.32642615746455, 1.10105053486773, 1.21513331337829, 1.21397558590595), pivot = c(4L, 1L, 3L, 2L)), .Names = c('qr', 'rank', 'qraux', 'pivot'), useLAPACK = TRUE, class = 'qr'), structure(c(0.434659484773874, 0.712514678714797, 0.399994368897751, 0.325352151878178, 0.757087148027495, 0.202692255144939, 0.711121222469956, 0.121691921027377, 0.245488513959572, 0.14330437942408, 0.239629415096715, 0.0589343772735447, 0.642288258532062, 0.876269212691113, 0.778914677444845, 0.79730882588774, 0.455274453619495, 0.410084082046524, 0.810870242770761, 0.604933290276676, 0.654723928077146, 0.353197271935642, 0.270260145887733, 0.99268406117335, 0.633493264438584, 0.213208135217428, 0.129372348077595, 0.478118034312502, 0.924074469832703, 0.59876096714288, 0.976170694921166, 0.731792511884123, 0.356726912083104, 0.431473690550774, 0.148211560677737, 0.0130775754805654, 0.715566066093743, 0.103184235747904, 0.446284348610789, 0.640101045137271, 1.00298403897323, 0.272296643047594, 0.67556063386146, 0.151371688628569, 0.340151631063782, 0.431371175684035, 0.0309030100004748, 0.457057784032077, 0.880189609760418, 0.426803491590545, 0.543544612638652, 0.655281779309735, 0.526419038954191, 0.231530745956115, 0.877417415869422, 0.686553374305367, 0.847202921006829, 0.115471200458705, 0.751486539305188, 0.432544381567277, 0.682788078673184, 0.601541217649356, 0.238868677755818, 0.258165926672518, 0.729309623362496, 0.452570831403136, 0.175126768415794, 0.746698269620538, 0.104987640399486, 0.864544949028641, 0.614644971676171, 0.557159538846463, 0.328777319053188, 0.453131445450708, 0.500440972624347, 0.180866361130029, 0.529630602803081, 0.0752757457084954, 0.277755932649598, 0.212699519237503, 0.0904899418726564, 0.0829104807786643, 0.140637623313814, 0.186663761837408, 0.0510252129565924, 0.195122500695288, 0.189470667047426, 0.14745507678017, 0.160610442608595, 0.0259712139610201, 0.0604781195987016, 0.0592939835228026, 0.157146221613511, 0.0842694476991892, 0.187063216743991, 0.126278517944738, 0.175293296081945, 0.202698964001611, 0.104955473728478, 0.1719400214497, 0.293730155099183, 0.19126010988839, 0.886450943304226, 0.503339485730976, 0.877057543024421, 0.189193622441962, 0.758103052387014, 0.724498892668635, 0.943724818294868, 0.547646587016061, 0.711743867723271, 0.388905099825934, 0.100873126182705, 0.927302088588476, 0.283232500310987, 0.59057315881364, 0.110360604943708, 0.840507032116875, 0.317963684443384, 0.782851336989552, 0.267508207354695, 0.218645284883678, 0.516796836396679, 0.268950592027977, 0.181168327340856, 0.518576137488708, 0.562782935798168, 0.129156854469329, 0.256367604015395, 0.717935275984928, 0.961409936426207, 0.100140846567228, 0.763222689507529, 0.947966354666278, 0.818634688388556, 0.308292330708355, 0.649579460499808, 0.953355451114476, 0.953732650028542, 0.339979203417897), .Dim = c(20L, 7L)), TRUE); .Internal(qr_qy_real(argv[[1]], argv[[2]], argv[[3]]))");
     }
 
@@ -39,14 +41,22 @@ public class TestBuiltin_qr extends TestBase {
         assertEval("{ m <- matrix(c(1,0,0,0,1,0,0,0,1),nrow=3) ; x <- qr(m, LAPACK=FALSE) ; qr.coef(x, 1:3) }");
         assertEval("{ x <- qr(cbind(1:3,2:4), LAPACK=FALSE) ; round( qr.coef(x, 1:3), digits=5 ) }");
 
-        assertEval(Ignored.Unknown, "{ x <- qr(t(cbind(1:10,2:11)), LAPACK=TRUE) ; qr.coef(x, 1:2) }");
+        // FIXME
+        // Expected output: [1] 1 NA NA NA NA NA NA NA NA 0
+        // FastR output: Error in coef[qr$pivot, ] <- .Internal(qr_coef_real(qr, y))[ix, ] :
+        // number of items to replace is not a multiple of replacement length
+        // Documentation of qr.coef() does not specify error conditions so I assume
+        // that FastR shoul probably adhere to the GnuR behavior here.
+        assertEval(Ignored.ImplementationError, "{ x <- qr(t(cbind(1:10,2:11)), LAPACK=TRUE) ; qr.coef(x, 1:2) }");
         assertEval("{ qr(10, LAPACK=TRUE) }");
-        assertEval(Ignored.Unknown, "{ round( qr(matrix(1:6,nrow=2), LAPACK=TRUE)$qr, digits=5) }");
+        // FIXME numeric output values differ
+        assertEval(Ignored.ImplementationError, "{ round( qr(matrix(1:6,nrow=2), LAPACK=TRUE)$qr, digits=5) }");
 
         // qr.coef
         assertEval("{ x <- qr(cbind(1:10,2:11), LAPACK=TRUE) ; qr.coef(x, 1:2) }");
-        assertEval(Ignored.Unknown, " { x <- qr(cbind(1:10,2:11), LAPACK=TRUE) ; round( qr.coef(x, 1:10), digits=5 ) }");
-        assertEval(Ignored.Unknown, "{ x <- qr(c(3,1,2), LAPACK=TRUE) ; round( qr.coef(x, c(1,3,2)), digits=5 ) }");
+        // FIXME subscript out of bounds - is this appropriate in this case??
+        assertEval(Ignored.ImplementationError, " { x <- qr(cbind(1:10,2:11), LAPACK=TRUE) ; round( qr.coef(x, 1:10), digits=5 ) }");
+        assertEval(Ignored.ImplementationError, "{ x <- qr(c(3,1,2), LAPACK=TRUE) ; round( qr.coef(x, c(1,3,2)), digits=5 ) }");
         // FIXME: GNU-R will print negative zero as zero
         assertEval("{ x <- qr(t(cbind(1:10,2:11)), LAPACK=FALSE) ; qr.coef(x, 1:2) }");
         assertEval("{ x <- qr(c(3,1,2), LAPACK=FALSE) ; round( qr.coef(x, c(1,3,2)), digits=5 ) }");
diff --git a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_qsort.java b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_qsort.java
index f9676194a0c36444ae1e35dd50404f5285463bd7..49a8ed57bf001857b5a76ff9cc46bea7d0312134 100644
--- a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_qsort.java
+++ b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_qsort.java
@@ -34,13 +34,19 @@ public class TestBuiltin_qsort extends TestBase {
 
     @Test
     public void testqsort4() {
-        assertEval(Ignored.Unknown,
+        // FastR returns double vector ordered according to the second "decreasing" argument.
+        // GnuR returns "list" with sorted double vector in "x" and element indices in "ix"
+        // GnuR ignores second argument "decreasing" and it always sorts in ascending order.
+        assertEval(Ignored.ReferenceError,
                         "argv <- list(c(1.64819754690779, 0.502718643389684, 0.845467412356198, 0.467247395729231, -0.402055063696625, 0.923526703253396, -0.0080556407117813, 1.03378423761425, -0.799126981726699, 1.00423302095334, -0.311973356192691, -0.88614958536232, -1.9222548962705, 1.61970074406333, 0.519269904664384, -0.055849931834021, 0.696417610118512), TRUE); .Internal(qsort(argv[[1]], argv[[2]]))");
     }
 
     @Test
     public void testqsort5() {
-        assertEval(Ignored.Unknown, "argv <- list(c(1L, 7L, 11L, 12L, 13L, 19L, 25L, 3L, 8L), TRUE); .Internal(qsort(argv[[1]], argv[[2]]))");
+        // FastR returns double vector ordered according to the second "decreasing" argument.
+        // GnuR returns "list" with sorted double vector in "x" and element indices in "ix"
+        // GnuR ignores second argument "decreasing" and it always sorts in ascending order.
+        assertEval(Ignored.ReferenceError, "argv <- list(c(1L, 7L, 11L, 12L, 13L, 19L, 25L, 3L, 8L), TRUE); .Internal(qsort(argv[[1]], argv[[2]]))");
     }
 
     @Test
@@ -75,7 +81,10 @@ public class TestBuiltin_qsort extends TestBase {
 
     @Test
     public void testqsort12() {
-        assertEval(Ignored.Unknown, "argv <- list(FALSE, FALSE); .Internal(qsort(argv[[1]], argv[[2]]))");
+        // FIXME:
+        // FastR refuses to sort logical vector with "Error: argument is not a numeric vector"
+        // GnuR outputs "[1] FALSE"
+        assertEval(Ignored.ReferenceError, "argv <- list(FALSE, FALSE); .Internal(qsort(argv[[1]], argv[[2]]))");
     }
 
     @Test
diff --git a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_rcond.java b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_rcond.java
index 066ead4009ed6ce446bf914b5441b5e5eaab18d5..68c0bf5a03c6a563209946c67488ccf51ad3710b 100644
--- a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_rcond.java
+++ b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_rcond.java
@@ -4,7 +4,7 @@
  * http://www.gnu.org/licenses/gpl-2.0.html
  *
  * Copyright (c) 2014, Purdue University
- * Copyright (c) 2014, 2016, Oracle and/or its affiliates
+ * Copyright (c) 2014, 2017, Oracle and/or its affiliates
  *
  * All rights reserved.
  */
@@ -20,14 +20,16 @@ public class TestBuiltin_rcond extends TestBase {
 
     @Test
     public void testrcond1() {
-        assertEval(Ignored.Unknown,
+        // FIXME RInternalError: not implemented: .Internal La_dgecon
+        assertEval(Ignored.Unimplemented,
                         "argv <- structure(list(x = structure(c(FALSE, TRUE, FALSE, TRUE,     TRUE, FALSE, TRUE, TRUE, TRUE, FALSE, TRUE, FALSE, TRUE,     TRUE, FALSE, TRUE, FALSE, FALSE, FALSE, TRUE, TRUE, TRUE,     TRUE, TRUE, TRUE), .Dim = c(5L, 5L))), .Names = 'x');" +
                                         "do.call('rcond', argv)");
     }
 
     @Test
     public void testrcond2() {
-        assertEval(Ignored.Unknown,
+        // FIXME RInternalError: not implemented: .Internal La_zgecon
+        assertEval(Ignored.Unimplemented,
                         "argv <- structure(list(x = structure(c(0.483017750550061 + (0+0i),     0.399143285583705 + (0+0i), 0.0162145779468119 + (0+0i),     0.125083255348727 + (0+0i), 0.0706489166477695 + (0+0i),     0.504917626501992 + (0+0i), 0.327679358422756 + (0+0i), 0.411779605317861 +         (0+0i), 0.202413034392521 + (0+0i), 0.307096319855191 +         (0+0i), 0.642031987197697 + (0+0i), 0.276873307069764 +         (0+0i), 0.103556007146835 + (0+0i), 0.256002754438668 +         (0+0i), 0.179779380792752 + (0+0i), 0.247455857461318 +         (0+0i), 0.215011228807271 + (0+0i), 0.493673762306571 +         (0+0i), 0.653446026844904 + (0+0i), 0.573559894575737 +         (0+0i), 0.863887825980783 + (0+0i), 0.637789903208613 +         (0+0i), 0.0137805955018848 + (0+0i), 0.529164811130613 +         (0+0i), 0.271472703316249 + (0+0i)), .Dim = c(5L, 5L))),     .Names = 'x');" +
                                         "do.call('rcond', argv)");
     }
diff --git a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_readChar.java b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_readChar.java
index e8fb5383832d4a31e83de6158c534e7fd3dbaeb2..763d41b41cbb77445aa37d121c93945a886e777b 100644
--- a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_readChar.java
+++ b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_readChar.java
@@ -4,7 +4,7 @@
  * http://www.gnu.org/licenses/gpl-2.0.html
  *
  * Copyright (c) 2014, Purdue University
- * Copyright (c) 2014, 2016, Oracle and/or its affiliates
+ * Copyright (c) 2014, 2017, Oracle and/or its affiliates
  *
  * All rights reserved.
  */
@@ -20,7 +20,10 @@ public class TestBuiltin_readChar extends TestBase {
 
     @Test
     public void testreadChar1() {
-        assertEval(Ignored.Unknown, "argv <- structure(list(con = as.raw(c(65, 66, 67, 68, 69, 70,     71, 72, 73, 74)), nchars = c(3, 3, 0, 3, 3, 3)), .Names = c('con',     'nchars'));" +
+        // FIXME raw character vector as first argument seems to be unsupported:
+        // Error in readChar(as.raw(c(65, 66, 67)), nchars = 3) : invalid connection
+        assertEval(Ignored.ImplementationError, "readChar(as.raw(c(65,66,67)), nchars=3);");
+        assertEval(Ignored.ImplementationError, "argv <- structure(list(con = as.raw(c(65, 66, 67, 68, 69, 70,     71, 72, 73, 74)), nchars = c(3, 3, 0, 3, 3, 3)), .Names = c('con',     'nchars'));" +
                         "do.call('readChar', argv)");
     }
 }
diff --git a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_regexpr.java b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_regexpr.java
index f7d7efa0cd53e55154dfb388d983d6108999c396..a4ed9501b845b8a1d136c6dc81d157fb66f2d481 100644
--- a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_regexpr.java
+++ b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_regexpr.java
@@ -4,7 +4,7 @@
  * http://www.gnu.org/licenses/gpl-2.0.html
  *
  * Copyright (c) 2012-2014, Purdue University
- * Copyright (c) 2013, 2016, Oracle and/or its affiliates
+ * Copyright (c) 2013, 2017, Oracle and/or its affiliates
  *
  * All rights reserved.
  */
@@ -24,7 +24,8 @@ public class TestBuiltin_regexpr extends TestBase {
 
     @Test
     public void testregexpr2() {
-        assertEval(Ignored.Unknown,
+        // FIXME FastR ignores useBytes == TRUE (then resulting index must be expressed in bytes)
+        assertEval(Ignored.ImplementationError,
                         "argv <- list('éè', '«Latin-1 accented chars»: éè øØ å<Å æ<Æ é éè', FALSE, FALSE, TRUE, TRUE); .Internal(regexpr(argv[[1]], argv[[2]], argv[[3]], argv[[4]], argv[[5]], argv[[6]]))");
     }
 
@@ -70,19 +71,28 @@ public class TestBuiltin_regexpr extends TestBase {
 
     @Test
     public void testregexpr12() {
-        assertEval(Ignored.Unknown, "argv <- structure(list(pattern = '\\d', text = c('1', 'B', '3')),     .Names = c('pattern', 'text'));do.call('regexpr', argv)");
+        // Expected output: Error: '\d' is an unrecognized escape in character string starting "'\d"
+        // FastR output: Error: unexpected 'd' in "argv <- structure(list(pattern = '\d"
+        assertEval(Output.IgnoreErrorMessage, "argv <- structure(list(pattern = '\\d', text = c('1', 'B', '3')),     .Names = c('pattern', 'text'));do.call('regexpr', argv)");
     }
 
     @Test
     public void testregexpr13() {
-        assertEval(Ignored.Unknown, "argv <- structure(list(pattern = '[a-z]', text = NA), .Names = c('pattern',     'text'));do.call('regexpr', argv)");
+        // FIXME according to ?regexpr the GnuR is correct and NA should be returned
+        // Expected output: [1] NA
+        // FastR output: [1] -1
+        assertEval(Ignored.ImplementationError, "regexpr('a', NA)");
+        assertEval(Ignored.ImplementationError, "argv <- structure(list(pattern = '[a-z]', text = NA), .Names = c('pattern',     'text'));do.call('regexpr', argv)");
     }
 
     @Test
     public void testRegExpr() {
         assertEval("regexpr(\"e\",c(\"arm\",\"foot\",\"lefroo\", \"bafoobar\"))");
         // NOTE: this is without attributes
-        assertEval(Ignored.Unknown, "regexpr(\"(a)[^a]\\\\1\", c(\"andrea apart\", \"amadeus\", NA))");
+        // FIXME NA should be the match for NA (not -1)
+        // Expected output: [1] 6 1 NA
+        // FastR output: [1] 6 1 -1
+        assertEval(Ignored.ImplementationError, "regexpr(\"(a)[^a]\\\\1\", c(\"andrea apart\", \"amadeus\", NA))");
 
         assertEval("{ regexpr(\"aaa\", \"bbbaaaccc\", fixed=TRUE)  }");
         assertEval("{ regexpr(\"aaa\", c(\"bbbaaaccc\", \"haaah\"), fixed=TRUE) }");
diff --git a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_rep.java b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_rep.java
index df9b448fc350c061c00b4067050b32ad0d61c264..f40826faf1a65e0cb55d9de0457e58dbbfdcae4f 100644
--- a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_rep.java
+++ b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_rep.java
@@ -59,7 +59,10 @@ public class TestBuiltin_rep extends TestBase {
 
     @Test
     public void testrep9() {
-        assertEval(Ignored.Unknown, "argv <- list(structure(1:4, .Label = c('A', 'B', 'C', 'D'), class = 'factor', .Names = c('a', 'b', 'c', 'd')), 10); .Internal(rep_len(argv[[1]], argv[[2]]))");
+        // GnuR returns [1] A B C D A B C D A B
+        // which is incorrect (those are just labels); btw rep() behaves correctly
+        assertEval(Ignored.ReferenceError,
+                        "argv <- list(structure(1:4, .Label = c('A', 'B', 'C', 'D'), class = 'factor', .Names = c('a', 'b', 'c', 'd')), 10); .Internal(rep_len(argv[[1]], argv[[2]]))");
     }
 
     @Test
diff --git a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_round.java b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_round.java
index ca06cd1db769155a7350fb0106f79e861e9ca35f..1101dc9b129c1b46fa0d40ad1ca5fa7bc23745c4 100644
--- a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_round.java
+++ b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_round.java
@@ -48,7 +48,9 @@ public class TestBuiltin_round extends TestBase {
         assertEval("{ round(c(0,0.2,NaN,0.6,NA,1)) }");
         assertEval("{ round(as.complex(c(0,0.2,NaN,0.6,NA,1))) }");
 
-        assertEval(Ignored.Unknown, "{ round(1.123456,digit=2.8) }");
+        // FIXME: we need to decide whether 2.8 means three digits (GnuR) or two (FastR) when
+        // calling round()
+        assertEval(Ignored.ImplementationError, "{ round(1.123456,digit=2.8) }");
 
         assertEval("{ typeof(round(42L)); }");
         assertEval("{ typeof(round(TRUE)); }");
diff --git a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_sin.java b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_sin.java
index 6a2d7e76bd248a24e00ffca929d7390f587c3b6c..5fb590de050474801403e5560858ed1cdac43d69 100644
--- a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_sin.java
+++ b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_sin.java
@@ -4,7 +4,7 @@
  * http://www.gnu.org/licenses/gpl-2.0.html
  *
  * Copyright (c) 2012-2014, Purdue University
- * Copyright (c) 2013, 2016, Oracle and/or its affiliates
+ * Copyright (c) 2013, 2017, Oracle and/or its affiliates
  *
  * All rights reserved.
  */
@@ -49,7 +49,9 @@ public class TestBuiltin_sin extends TestBase {
 
     @Test
     public void testsin7() {
-        assertEval(Ignored.Unknown, "argv <- list(Inf);sin(argv[[1]]);");
+        // FIXME Warning message:
+        // In sin(argv[[1]]) : NaNs produced
+        assertEval(Output.MissingWarning, "argv <- list(Inf);sin(argv[[1]]);");
     }
 
     @Test
diff --git a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_sub.java b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_sub.java
index 3d15a80d4d8bda9cf722062d4aa988ec8c5b73a8..79ac5f153443783fb40127cbed696bd8c954de66 100644
--- a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_sub.java
+++ b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_sub.java
@@ -74,25 +74,29 @@ public class TestBuiltin_sub extends TestBase {
 
     @Test
     public void testsub12() {
-        assertEval(Ignored.Unknown,
+        // FIXME trailing whitespace in output in FastR
+        assertEval(Output.IgnoreWhitespace,
                         "argv <- list('.* : ', '', structure('Error in rnorm(2, c(1, NA)) : (converted from warning) NAs produced\\n', class = 'try-error', condition = structure(list(message = '(converted from warning) NAs produced', call = quote(rnorm(2, c(1, NA)))), .Names = c('message', 'call'), class = c('simpleError', 'error', 'condition'))), FALSE, FALSE, FALSE, FALSE); .Internal(sub(argv[[1]], argv[[2]], argv[[3]], argv[[4]], argv[[5]], argv[[6]], argv[[7]]))");
     }
 
     @Test
     public void testsub13() {
-        assertEval(Ignored.Unknown,
+        // FIXME trailing whitespace in output in FastR
+        assertEval(Output.IgnoreWhitespace,
                         "argv <- list('.* : ', '', structure('Error in rexp(2, numeric()) : (converted from warning) NAs produced\\n', class = 'try-error', condition = structure(list(message = '(converted from warning) NAs produced', call = quote(rexp(2, numeric()))), .Names = c('message', 'call'), class = c('simpleError', 'error', 'condition'))), FALSE, FALSE, FALSE, FALSE); .Internal(sub(argv[[1]], argv[[2]], argv[[3]], argv[[4]], argv[[5]], argv[[6]], argv[[7]]))");
     }
 
     @Test
     public void testsub14() {
-        assertEval(Ignored.Unknown,
+        // FIXME trailing whitespace in output in FastR
+        assertEval(Output.IgnoreWhitespace,
                         "argv <- list('.* : ', '', structure('Error in rnorm(2, numeric()) : (converted from warning) NAs produced\\n', class = 'try-error', condition = structure(list(message = '(converted from warning) NAs produced', call = quote(rnorm(2, numeric()))), .Names = c('message', 'call'), class = c('simpleError', 'error', 'condition'))), FALSE, FALSE, FALSE, FALSE); .Internal(sub(argv[[1]], argv[[2]], argv[[3]], argv[[4]], argv[[5]], argv[[6]], argv[[7]]))");
     }
 
     @Test
     public void testsub15() {
-        assertEval(Ignored.Unknown,
+        // FIXME trailing whitespace in output in FastR
+        assertEval(Output.IgnoreWhitespace,
                         "argv <- list('.* : ', '', structure('Error in rnorm(1, sd = Inf) : (converted from warning) NAs produced\\n', class = 'try-error', condition = structure(list(message = '(converted from warning) NAs produced', call = quote(rnorm(1, sd = Inf))), .Names = c('message', 'call'), class = c('simpleError', 'error', 'condition'))), FALSE, FALSE, FALSE, FALSE); .Internal(sub(argv[[1]], argv[[2]], argv[[3]], argv[[4]], argv[[5]], argv[[6]], argv[[7]]))");
     }
 
@@ -151,8 +155,9 @@ public class TestBuiltin_sub extends TestBase {
         assertEval("{ sub(pattern = 'a*', replacement = 'x', x = 'ÄaÄ', perl = TRUE) }");
         assertEval("{ sub(pattern = 'a*', replacement = 'x', x = 'ÄaaaaÄ', perl = TRUE) }");
 
+        // FIXME
         // Expected output: [1] "xaÄÄÄÄÄb"
         // FastR output: [1] "axÄÄÄÄb"
-        assertEval(Ignored.Unknown, "{ sub(pattern = 'Ä*', replacement = 'x', x = 'aÄÄÄÄÄb', perl = TRUE) }");
+        assertEval(Ignored.ImplementationError, "{ sub(pattern = 'Ä*', replacement = 'x', x = 'aÄÄÄÄÄb', perl = TRUE) }");
     }
 }
diff --git a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_substr.java b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_substr.java
index 4a5cff4415a1e82a2f5cb56f8740de80eb885b84..3942c970d887d28a85bb8200d35d96f4ec238753 100644
--- a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_substr.java
+++ b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_substr.java
@@ -29,7 +29,8 @@ public class TestBuiltin_substr extends TestBase {
 
     @Test
     public void testsubstr3() {
-        assertEval(Ignored.Unknown,
+        // FIXME: We do not treat .Names as column headers while GnuR does
+        assertEval(Ignored.ImplementationError,
                         "argv <- list(structure(c('as.formula', 'coef', 'makepredictcall', 'na.fail', 'predict'), .Names = c('as.formula', 'coef', 'makepredictcall', 'na.fail', 'predict')), 1L, 6L); .Internal(substr(argv[[1]], argv[[2]], argv[[3]]))");
     }
 
@@ -40,7 +41,11 @@ public class TestBuiltin_substr extends TestBase {
 
     @Test
     public void testsubstr5() {
-        assertEval(Ignored.Unknown, "argv <- list(structure('to be supported).', Rd_tag = 'TEXT'), 17L, 17L); .Internal(substr(argv[[1]], argv[[2]], argv[[3]]))");
+        // FIXME: GnuR outputs all params to structure(...) as result of substr() i.e. here:
+        // attr(,"Rd_tag")
+        // [1] "TEXT"
+        // IMHO superfluous => ReferenceError
+        assertEval(Ignored.ReferenceError, "argv <- list(structure('to be supported).', Rd_tag = 'TEXT'), 17L, 17L); .Internal(substr(argv[[1]], argv[[2]], argv[[3]]))");
     }
 
     @Test
@@ -55,7 +60,8 @@ public class TestBuiltin_substr extends TestBase {
 
     @Test
     public void testsubstr8() {
-        assertEval(Ignored.Unknown,
+        // FIXME: We do not treat .Names as column headers while GnuR does
+        assertEval(Ignored.ImplementationError,
                         "argv <- list(structure(c('model.frame', 'predict', 'residuals'), .Names = c('model.frame', 'predict', 'residuals')), 1L, 6L); .Internal(substr(argv[[1]], argv[[2]], argv[[3]]))");
     }
 
diff --git a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_sum.java b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_sum.java
index 6fb525be17e257368a45066fa77be511dcce92c1..d3481533138d04bcb637be2297b45ea25e0eb8a6 100644
--- a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_sum.java
+++ b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_sum.java
@@ -94,7 +94,8 @@ public class TestBuiltin_sum extends TestBase {
 
     @Test
     public void testsum16() {
-        assertEval(Ignored.Unknown, "argv <- list(1073741824L, 1073741824L);sum(argv[[1]],argv[[2]]);");
+        // FIXME Case difference GnuR: "Integer overflow" vs "integer overflow" in FastR
+        assertEval(Output.IgnoreCase, "argv <- list(1073741824L, 1073741824L);sum(argv[[1]],argv[[2]]);");
     }
 
     @Test
diff --git a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_tan.java b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_tan.java
index dc11349099fb86f92ab57d673f6eca2d0c95febd..6797b95c9e78ff39016a1c0d1c1be7e2e93169c3 100644
--- a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_tan.java
+++ b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_tan.java
@@ -4,7 +4,7 @@
  * http://www.gnu.org/licenses/gpl-2.0.html
  *
  * Copyright (c) 2012-2014, Purdue University
- * Copyright (c) 2013, 2016, Oracle and/or its affiliates
+ * Copyright (c) 2013, 2017, Oracle and/or its affiliates
  *
  * All rights reserved.
  */
@@ -29,7 +29,8 @@ public class TestBuiltin_tan extends TestBase {
 
     @Test
     public void testtan3() {
-        assertEval(Ignored.Unknown, "argv <- list(Inf);tan(argv[[1]]);");
+        // Extra warning in GnuR: "In tan(argv[[1]]) : NaNs produced"
+        assertEval(Output.IgnoreWarningMessage, "argv <- list(Inf);tan(argv[[1]]);");
     }
 
     @Test
@@ -39,7 +40,8 @@ public class TestBuiltin_tan extends TestBase {
 
     @Test
     public void testtan5() {
-        assertEval(Ignored.Unknown, "argv <- list(1+1000i);tan(argv[[1]]);");
+        // FIXME FastR seems unable to compute the complex tan() output: NaN+NaNi
+        assertEval(Ignored.ImplementationError, "argv <- list(1+1000i);tan(argv[[1]]);");
     }
 
     @Test
diff --git a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_trigamma.java b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_trigamma.java
index 5df73a7c4070a8a046bee20289f32f8110dc4ab6..c097de77362e662e5d4384dffbe347b233b97978 100644
--- a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_trigamma.java
+++ b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_trigamma.java
@@ -4,7 +4,7 @@
  * http://www.gnu.org/licenses/gpl-2.0.html
  *
  * Copyright (c) 2014, Purdue University
- * Copyright (c) 2014, 2016, Oracle and/or its affiliates
+ * Copyright (c) 2014, 2017, Oracle and/or its affiliates
  *
  * All rights reserved.
  */
@@ -19,24 +19,28 @@ public class TestBuiltin_trigamma extends TestBase {
 
     @Test
     public void testtrigamma1() {
-        assertEval(Ignored.Unknown,
+        // FIXME implement
+        assertEval(Ignored.Unimplemented,
                         "argv <- list(structure(c(9.16602362697115, 1.16602362697115, 3.16602362697115, 6.16602362697115, 6.16602362697115, 2.16602362697115, 8.16602362697115, 1.16602362697115, 7.16602362697115, 19.1660236269712, 2.16602362697115), .Names = c('1', '2', '3', '4', '5', '6', '7', '8', '9', '10', '11')));trigamma(argv[[1]]);");
     }
 
     @Test
     public void testtrigamma2() {
-        assertEval(Ignored.Unknown,
+        // FIXME implement
+        assertEval(Ignored.Unimplemented,
                         "argv <- list(structure(c(3.23454845691922, 12.2345484569192, 15.2345484569192, 6.23454845691922, 6.23454845691922, 14.2345484569192, 21.2345484569192, 23.2345484569192, 7.23454845691922, 7.23454845691922, 16.2345484569192, 8.23454845691922, 15.2345484569192, 7.23454845691922, 33.2345484569192, 54.2345484569192, 58.2345484569192, 15.2345484569192, 17.2345484569192, 17.2345484569192, 18.2345484569192, 41.2345484569192, 44.2345484569192, 47.2345484569192, 9.23454845691922, 24.2345484569192, 24.2345484569192, 29.2345484569192, 35.2345484569192, 37.2345484569192, 39.2345484569192, 4.23454845691922, 6.23454845691922, 12.2345484569192, 25.2345484569192, 46.2345484569192, 6.23454845691922, 7.23454845691922, 7.23454845691922, 10.2345484569192, 14.2345484569192, 24.2345484569192, 26.2345484569192, 33.2345484569192, 54.2345484569192, 55.2345484569192, 6.23454845691922, 6.23454845691922, 12.2345484569192, 18.2345484569192, 20.2345484569192, 9.23454845691922, 14.2345484569192, 15.2345484569192, 21.2345484569192, 48.2345484569192, 49.2345484569192, 61.2345484569192, 82.2345484569192, 3.23454845691922, 1.23454845691922, 3.23454845691922, 4.23454845691922, 6.23454845691922, 11.2345484569192, 15.2345484569192, 22.2345484569192, 37.2345484569192, 41.2345484569192, 7.23454845691922, 18.2345484569192, 68.2345484569192, 1.23454845691922, 1.23454845691922, 3.23454845691922, 8.23454845691922, 12.2345484569192, 13.2345484569192, 1.23454845691922, 1.23454845691922, 6.23454845691922, 6.23454845691922, 6.23454845691922, 12.2345484569192, 18.2345484569192, 4.23454845691922, 5.23454845691922, 23.2345484569192, 31.2345484569192, 37.2345484569192, 9.23454845691922, 1.23454845691922, 2.23454845691922, 6.23454845691922, 8.23454845691922, 17.2345484569192, 28.2345484569192, 1.23454845691922, 31.2345484569192, 11.2345484569192, 15.2345484569192, 28.2345484569192, 42.2345484569192, 70.2345484569192, 26.2345484569192, 11.2345484569192, 12.2345484569192, 21.2345484569192, 34.2345484569192, 6.23454845691922, 8.23454845691922, 1.23454845691922, 2.23454845691922, 6.23454845691922, 6.23454845691922, 6.23454845691922, 6.23454845691922, 8.23454845691922, 12.2345484569192, 16.2345484569192, 6.23454845691922, 15.2345484569192, 7.23454845691922, 7.23454845691922, 8.23454845691922, 29.2345484569192, 1.23454845691922, 6.23454845691922, 15.2345484569192, 3.23454845691922, 3.23454845691922, 4.23454845691922, 9.23454845691922, 11.2345484569192, 13.2345484569192, 2.23454845691922, 2.23454845691922, 10.2345484569192, 23.2345484569192, 4.23454845691922, 4.23454845691922, 6.23454845691922, 16.2345484569192, 19.2345484569192, 23.2345484569192, 38.2345484569192), .Names = c('1', '2', '3', '4', '5', '6', '7', '8', '9', '10', '11', '12', '13', '14', '15', '16', '17', '18', '19', '20', '21', '22', '23', '24', '25', '26', '27', '28', '29', '30', '31', '32', '33', '34', '35', '36', '37', '38', '39', '40', '41', '42', '43', '44', '45', '46', '47', '48', '49', '50', '51', '52', '53', '54', '55', '56', '57', '58', '59', '60', '61', '62', '63', '64', '65', '66', '67', '68', '69', '70', '71', '72', '73', '74', '75', '76', '77', '78', '79', '80', '81', '82', '83', '84', '85', '86', '87', '88', '89', '90', '91', '92', '93', '94', '95', '96', '97', '98', '99', '100', '101', '102', '103', '104', '105', '106', '107', '108', '109', '110', '111', '112', '113', '114', '115', '116', '117', '118', '119', '120', '121', '122', '123', '124', '125', '126', '127', '128', '129', '130', '131', '132', '133', '134', '135', '136', '137', '138', '139', '140', '141', '142', '143', '144', '145', '146')));trigamma(argv[[1]]);");
     }
 
     @Test
     public void testtrigamma3() {
-        assertEval(Ignored.Unknown, "argv <- list(c(1e+30, 1e+60, 1e+90, 1e+120, 1e+150, 1e+180, 1e+210, 1e+240, 1e+270, 1e+300));trigamma(argv[[1]]);");
+        // FIXME implement
+        assertEval(Ignored.Unimplemented, "argv <- list(c(1e+30, 1e+60, 1e+90, 1e+120, 1e+150, 1e+180, 1e+210, 1e+240, 1e+270, 1e+300));trigamma(argv[[1]]);");
     }
 
     @Test
     public void testtrigamma4() {
-        assertEval(Ignored.Unknown,
+        // FIXME implement
+        assertEval(Ignored.Unimplemented,
                         "argv <- list(c(-100, -3, -2, -1, 0, 1, 2, -99.9, -7.7, -3, -2.9, -2.8, -2.7, -2.6, -2.5, -2.4, -2.3, -2.2, -2.1, -2, -1.9, -1.8, -1.7, -1.6, -1.5, -1.4, -1.3, -1.2, -1.1, -1, -0.9, -0.8, -0.7, -0.6, -0.5, -0.4, -0.3, -0.2, -0.0999999999999996, 0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1, 1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 1.7, 1.8, 1.9, 2, 2.1, 2.2, 2.3, 2.4, 2.5, 2.6, 2.7, 2.8, 2.9, 3, 5.1, 77));trigamma(argv[[1]]);");
     }
 }
diff --git a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_unclass.java b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_unclass.java
index 6e9d92e306be8a904207a20fbe5f905ffb6d8f37..6eca4ee894894ec8f51fbe5eb52e46aa2a6c8dfe 100644
--- a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_unclass.java
+++ b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_unclass.java
@@ -24,18 +24,23 @@ public class TestBuiltin_unclass extends TestBase {
 
     @Test
     public void testunclass2() {
-        assertEval(Ignored.Unknown,
+        // FIXME "Year" printed on a new line it probably should be on the same line with quote()
+        assertEval(Output.IgnoreWhitespace,
                         "argv <- list(structure(list(Employed = c(60.323, 61.122, 60.171, 61.187, 63.221, 63.639, 64.989, 63.761, 66.019, 67.857, 68.169, 66.513, 68.655, 69.564, 69.331, 70.551), GNP.deflator = c(83, 88.5, 88.2, 89.5, 96.2, 98.1, 99, 100, 101.2, 104.6, 108.4, 110.8, 112.6, 114.2, 115.7, 116.9), GNP = c(234.289, 259.426, 258.054, 284.599, 328.975, 346.999, 365.385, 363.112, 397.469, 419.18, 442.769, 444.546, 482.704, 502.601, 518.173, 554.894), Unemployed = c(235.6, 232.5, 368.2, 335.1, 209.9, 193.2, 187, 357.8, 290.4, 282.2, 293.6, 468.1, 381.3, 393.1, 480.6, 400.7), Armed.Forces = c(159, 145.6, 161.6, 165, 309.9, 359.4, 354.7, 335, 304.8, 285.7, 279.8, 263.7, 255.2, 251.4, 257.2, 282.7), Population = c(107.608, 108.632, 109.773, 110.929, 112.075, 113.27, 115.094, 116.219, 117.388, 118.734, 120.445, 121.95, 123.366, 125.368, 127.852, 130.081), Year = 1947:1962), .Names = c('Employed', 'GNP.deflator', 'GNP', 'Unemployed', 'Armed.Forces', 'Population', 'Year'), terms = quote(Employed ~ GNP.deflator + GNP + Unemployed +     Armed.Forces + Population + Year), row.names = 1947:1962));unclass(argv[[1]]);");
     }
 
     @Test
     public void testunclass3() {
-        assertEval(Ignored.Unknown, "argv <- list(structure(list(x = c(TRUE, FALSE, TRUE, FALSE, TRUE, FALSE, TRUE, FALSE, TRUE, FALSE)), .Names = 'x', row.names = c(NA, 10L)));unclass(argv[[1]]);");
+        // GnuR does not retain row.names vector and substitutes it with 1L:10L
+        // Probably GnuR error since for row.names=c(NA, 9L, 10L) GnuR retains the row.names vector
+        // as is
+        assertEval(Ignored.ReferenceError,
+                        "argv <- list(structure(list(x = c(TRUE, FALSE, TRUE, FALSE, TRUE, FALSE, TRUE, FALSE, TRUE, FALSE)), .Names = 'x', row.names = c(NA, 10L)));unclass(argv[[1]]);");
     }
 
     @Test
     public void testunclass4() {
-        assertEval(Ignored.Unknown,
+        assertEval(Ignored.ReferenceError, // similar problem with row.names like above
                         "argv <- list(structure(list(X1.10 = 1:10, z = structure(list(x = 1:10, yyy = 11:20), .Names = c('x', 'yyy'), row.names = c(NA, -10L), class = 'data.frame')), .Names = c('X1.10', 'z'), row.names = c(NA, -10L)));unclass(argv[[1]]);");
     }
 
@@ -56,7 +61,7 @@ public class TestBuiltin_unclass extends TestBase {
 
     @Test
     public void testunclass8() {
-        assertEval(Ignored.Unknown,
+        assertEval(Ignored.ReferenceError, // similar problem with row.names like above
                         "argv <- list(structure(list(`cbind(w = weight, w2 = weight^2)` = structure(c(4.17, 5.58, 5.18, 6.11, 4.5, 4.61, 5.17, 4.53, 5.33, 5.14, 4.81, 4.17, 4.41, 3.59, 5.87, 3.83, 6.03, 4.89, 4.32, 4.69, 17.3889, 31.1364, 26.8324, 37.3321, 20.25, 21.2521, 26.7289, 20.5209, 28.4089, 26.4196, 23.1361, 17.3889, 19.4481, 12.8881, 34.4569, 14.6689, 36.3609, 23.9121, 18.6624, 21.9961), .Dim = c(20L, 2L), .Dimnames = list(NULL, c('w', 'w2'))), group = structure(c(1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L), .Label = c('Ctl', 'Trt'), class = 'factor')), .Names = c('cbind(w = weight, w2 = weight^2)', 'group'), terms = quote(cbind(w = weight, w2 = weight^2) ~ group), row.names = c(NA, 20L)));unclass(argv[[1]]);");
     }
 
@@ -78,7 +83,7 @@ public class TestBuiltin_unclass extends TestBase {
 
     @Test
     public void testunclass12() {
-        assertEval(Ignored.Unknown,
+        assertEval(Ignored.ReferenceError, // similar problem with row.names like above
                         "argv <- list(structure(list(`log(x)` = c(0, 0.693147180559945, 1.09861228866811, 1.38629436111989, 1.6094379124341, 1.79175946922805, 1.94591014905531, 2.07944154167984, 2.19722457733622, 2.30258509299405, 2.39789527279837, 2.484906649788, 2.56494935746154, 2.63905732961526, 2.70805020110221, 2.77258872223978, 2.83321334405622, 2.89037175789616, 2.94443897916644, 2.99573227355399, 3.04452243772342, 3.09104245335832, 3.13549421592915, 3.17805383034795, 3.2188758248682, 3.25809653802148, 3.29583686600433, 3.3322045101752, 3.36729582998647, 3.40119738166216, 3.43398720448515, 3.46573590279973, 3.49650756146648, 3.52636052461616, 3.55534806148941, 3.58351893845611, 3.61091791264422, 3.63758615972639, 3.66356164612965, 3.68887945411394, 3.71357206670431, 3.73766961828337, 3.76120011569356, 3.78418963391826, 3.80666248977032, 3.8286413964891, 3.85014760171006, 3.87120101090789, 3.89182029811063, 3.91202300542815, 3.93182563272433, 3.95124371858143, 3.97029191355212, 3.98898404656427, 4.00733318523247, 4.02535169073515, 4.04305126783455, 4.06044301054642, 4.07753744390572, 4.0943445622221, 4.11087386417331, 4.12713438504509, 4.14313472639153, 4.15888308335967, 4.17438726989564, 4.18965474202643, 4.20469261939097, 4.21950770517611, 4.23410650459726, 4.24849524204936, 4.26267987704132, 4.27666611901606, 4.29045944114839, 4.30406509320417, 4.31748811353631, 4.33073334028633, 4.34380542185368, 4.35670882668959, 4.36944785246702, 4.38202663467388, 4.39444915467244, 4.40671924726425, 4.4188406077966, 4.43081679884331, 4.44265125649032, 4.45434729625351, 4.46590811865458, 4.47733681447821, 4.48863636973214, 4.49980967033027, 4.51085950651685, 4.52178857704904, 4.53259949315326, 4.54329478227, 4.55387689160054, 4.56434819146784, 4.57471097850338, 4.58496747867057, 4.59511985013459, 4.60517018598809), `log(z)` = c(2.39789527279837, 2.484906649788, 2.56494935746154, 2.63905732961526, 2.70805020110221, 2.77258872223978, 2.83321334405622, 2.89037175789616, 2.94443897916644, 2.99573227355399, 3.04452243772342, 3.09104245335832, 3.13549421592915, 3.17805383034795, 3.2188758248682, 3.25809653802148, 3.29583686600433, 3.3322045101752, 3.36729582998647, 3.40119738166216, 3.43398720448515, 3.46573590279973, 3.49650756146648, 3.52636052461616, 3.55534806148941, 3.58351893845611, 3.61091791264422, 3.63758615972639, 3.66356164612965, 3.68887945411394, 3.71357206670431, 3.73766961828337, 3.76120011569356, 3.78418963391826, 3.80666248977032, 3.8286413964891, 3.85014760171006, 3.87120101090789, 3.89182029811063, 3.91202300542815, 3.93182563272433, 3.95124371858143, 3.97029191355212, 3.98898404656427, 4.00733318523247, 4.02535169073515, 4.04305126783455, 4.06044301054642, 4.07753744390572, 4.0943445622221, 4.11087386417331, 4.12713438504509, 4.14313472639153, 4.15888308335967, 4.17438726989564, 4.18965474202643, 4.20469261939097, 4.21950770517611, 4.23410650459726, 4.24849524204936, 4.26267987704132, 4.27666611901606, 4.29045944114839, 4.30406509320417, 4.31748811353631, 4.33073334028633, 4.34380542185368, 4.35670882668959, 4.36944785246702, 4.38202663467388, 4.39444915467244, 4.40671924726425, 4.4188406077966, 4.43081679884331, 4.44265125649032, 4.45434729625351, 4.46590811865458, 4.47733681447821, 4.48863636973214, 4.49980967033027, 4.51085950651685, 4.52178857704904, 4.53259949315326, 4.54329478227, 4.55387689160054, 4.56434819146784, 4.57471097850338, 4.58496747867057, 4.59511985013459, 4.60517018598809, 4.61512051684126, 4.62497281328427, 4.63472898822964, 4.64439089914137, 4.65396035015752, 4.66343909411207, 4.67282883446191, 4.68213122712422, 4.69134788222914, 4.70048036579242)), .Names = c('log(x)', 'log(z)'), row.names = c(NA, 100L), terms = quote(~log(x) + log(z))));unclass(argv[[1]]);");
     }
 
@@ -144,7 +149,9 @@ public class TestBuiltin_unclass extends TestBase {
 
     @Test
     public void testunclass25() {
-        assertEval(Ignored.Unknown,
+        // GnuR does not retain row.names vector and substitutes it with 1L while FastR keeps c(NA,
+        // -1L)
+        assertEval(Ignored.ReferenceError,
                         "argv <- list(structure(list(srcfile = '/home/lzhao/tmp/RtmpYl9n1I/R.INSTALL2aa24b6697e5/MASS/R/negbin.R', frow = 135L, lrow = 137L), .Names = c('srcfile', 'frow', 'lrow'), row.names = c(NA, -1L)));unclass(argv[[1]]);");
     }
 
@@ -170,7 +177,9 @@ public class TestBuiltin_unclass extends TestBase {
 
     @Test
     public void testunclass31() {
-        assertEval(Ignored.Unknown, "argv <- list(structure(list(), .Names = character(0), row.names = c(NA, -10L), terms = quote(~0)));unclass(argv[[1]]);");
+        // GnuR does not retain row.names vector and substitutes it with 1L:10L while FastR keeps
+        // c(NA, -10L)
+        assertEval(Ignored.ReferenceError, "argv <- list(structure(list(), .Names = character(0), row.names = c(NA, -10L), terms = quote(~0)));unclass(argv[[1]]);");
     }
 
     @Test
@@ -185,7 +194,9 @@ public class TestBuiltin_unclass extends TestBase {
 
     @Test
     public void testunclass34() {
-        assertEval(Ignored.Unknown,
+        // GnuR does not retain row.names vector and substitutes it with 1L:24L while FastR keeps
+        // c(NA, 24L)
+        assertEval(Ignored.ReferenceError,
                         "argv <- list(structure(list(`cbind(A, B, C, D)` = structure(c(0.696706709347165, 0.362357754476673, -0.0291995223012888, 0.696706709347165, 0.696706709347165, -0.0291995223012888, 0.696706709347165, -0.0291995223012888, 0.362357754476673, 0.696706709347165, -0.0291995223012888, 0.362357754476673, -0.416146836547142, 0.362357754476673, 0.696706709347165, 0.696706709347165, 0.362357754476673, -0.416146836547142, -0.0291995223012888, -0.416146836547142, 0.696706709347165, -0.416146836547142, 0.362357754476673, -0.0291995223012888, 0.717356090899523, 0.932039085967226, 0.999573603041505, 0.717356090899523, 0.717356090899523, 0.999573603041505, 0.717356090899523, 0.999573603041505, 0.932039085967226, 0.717356090899523, 0.999573603041505, 0.932039085967226, 0.909297426825682, 0.932039085967226, 0.717356090899523, 0.717356090899523, 0.932039085967226, 0.909297426825682, 0.999573603041505, 0.909297426825682, 0.717356090899523, 0.909297426825682, 0.932039085967226, 0.999573603041505, -0.0291995223012888, -0.737393715541246, -0.998294775794753, -0.0291995223012888, -0.0291995223012888, -0.998294775794753, -0.0291995223012888, -0.998294775794753, -0.737393715541246, -0.0291995223012888, -0.998294775794753, -0.737393715541246, -0.653643620863612, -0.737393715541246, -0.0291995223012888, -0.0291995223012888, -0.737393715541246, -0.653643620863612, -0.998294775794753, -0.653643620863612, -0.0291995223012888, -0.653643620863612, -0.737393715541246, -0.998294775794753, 0.999573603041505, 0.67546318055115, -0.0583741434275801, 0.999573603041505, 0.999573603041505, -0.0583741434275801, 0.999573603041505, -0.0583741434275801, 0.67546318055115, 0.999573603041505, -0.0583741434275801, 0.67546318055115, -0.756802495307928, 0.67546318055115, 0.999573603041505, 0.999573603041505, 0.67546318055115, -0.756802495307928, -0.0583741434275801, -0.756802495307928, 0.999573603041505, -0.756802495307928, 0.67546318055115, -0.0583741434275801), .Dim = c(24L, 4L), .Dimnames = list(NULL, c('A', 'B', 'C', 'D'))), groups = structure(c(1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L), .Label = c('1', '2', '3'), class = 'factor')), .Names = c('cbind(A, B, C, D)', 'groups'), terms = quote(cbind(A, B, C, D) ~ groups), row.names = c(NA, 24L)));unclass(argv[[1]]);");
     }
 
diff --git a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_unique.java b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_unique.java
index 6cb78ee8079cfc34ee6077585d3d4f6b4c6c8537..d990d1c239ab17efd170416b2321c2f77144a1dc 100644
--- a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_unique.java
+++ b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_unique.java
@@ -4,7 +4,7 @@
  * http://www.gnu.org/licenses/gpl-2.0.html
  *
  * Copyright (c) 2012-2014, Purdue University
- * Copyright (c) 2013, 2016, Oracle and/or its affiliates
+ * Copyright (c) 2013, 2017, Oracle and/or its affiliates
  *
  * All rights reserved.
  */
@@ -24,8 +24,8 @@ public class TestBuiltin_unique extends TestBase {
 
     @Test
     public void testunique2() {
-        // FIXME NA's are being considered duplicates
-        assertEval(Ignored.Unknown, "argv <- list(c('a', 'b', 'c', 'c', 'b', 'a', 'NA', 'd', 'd', NA), FALSE, FALSE, NA); .Internal(unique(argv[[1]], argv[[2]], argv[[3]], argv[[4]]))");
+        // FIXME FastR wrongly considers 'NA' and NA equal
+        assertEval(Ignored.ImplementationError, "argv <- list(c('a', 'b', 'c', 'c', 'b', 'a', 'NA', 'd', 'd', NA), FALSE, FALSE, NA); .Internal(unique(argv[[1]], argv[[2]], argv[[3]], argv[[4]]))");
     }
 
     @Test
@@ -188,7 +188,9 @@ public class TestBuiltin_unique extends TestBase {
 
         assertEval("{ x<-quote(f(7, 42)); unique(x) }");
         assertEval("{ x<-function() 42; unique(x) }");
-        assertEval(Ignored.Unknown, "{ unique(c(1,2,1), incomparables=function() 42) }");
+        // FastR msg "invalid 'incomparables' argument"
+        // seems a bit better than GnuR's "cannot coerce type 'closure' to vector of type 'double'"
+        assertEval(Ignored.ReferenceError, "{ unique(c(1,2,1), incomparables=function() 42) }");
 
     }
 }
diff --git a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_xtfrm.java b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_xtfrm.java
index ac501a592bb192ff88a35a979cf18589c14103eb..5d8a63676e6cda894844b90ed38b40daa63393d0 100644
--- a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_xtfrm.java
+++ b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_xtfrm.java
@@ -4,7 +4,7 @@
  * http://www.gnu.org/licenses/gpl-2.0.html
  *
  * Copyright (c) 2014, Purdue University
- * Copyright (c) 2014, 2016, Oracle and/or its affiliates
+ * Copyright (c) 2014, 2017, Oracle and/or its affiliates
  *
  * All rights reserved.
  */
@@ -39,7 +39,10 @@ public class TestBuiltin_xtfrm extends TestBase {
 
     @Test
     public void testxtfrm5() {
-        assertEval(Ignored.Unknown, "argv <- list(NULL);xtfrm(argv[[1]]);");
+        // FIXME: looks like we do not handle RNull properly in rank()
+        // FastR output: Error in rank(x, ties.method = "min", na.last = "keep") :
+        // unimplemented type 'RNull'
+        assertEval(Ignored.ImplementationError, "argv <- list(NULL);xtfrm(argv[[1]]);");
     }
 
     @Test
diff --git a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/generate/FastRSession.java b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/generate/FastRSession.java
index ca61843663b6891e0e6bfea2f7358a2495c30ee8..6f213a4cefec5593582bcc8e8f176261cd83dd20 100644
--- a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/generate/FastRSession.java
+++ b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/generate/FastRSession.java
@@ -231,7 +231,7 @@ public final class FastRSession implements RSession {
         } catch (RError e) {
             // nothing to do
         } catch (Throwable t) {
-            if (!TestBase.ProcessFailedTests) {
+            if (!TestBase.ProcessFailedTests || TestBase.ShowFailedTestsResults) {
                 if (t instanceof RInternalError) {
                     RInternalError.reportError(t);
                 }
diff --git a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/library/base/TestConditionHandling.java b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/library/base/TestConditionHandling.java
index c2c416bad75f8e020b1eb20d5e8591bfcfaa132b..bafe789b1f0c79c3df1f66ff23cf74008bb65861 100644
--- a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/library/base/TestConditionHandling.java
+++ b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/library/base/TestConditionHandling.java
@@ -40,7 +40,13 @@ public class TestConditionHandling extends TestRBase {
         assertEval("{ e <- simpleError(\"test error\"); f <- function() { tryCatch(1, finally = print(\"Hello\")); stop(e)}; f() }");
         assertEval(Output.IgnoreErrorContext, "{ tryCatch(stop(\"fred\"), finally = print(\"Hello\")) }");
         assertEval("{ e <- simpleError(\"test error\"); tryCatch(stop(e), error = function(e) e, finally = print(\"Hello\"))}");
-        assertEval(Ignored.Unknown, "{ tryCatch(stop(\"fred\"), error = function(e) e, finally = print(\"Hello\"))}");
+        // FIXME missing "in doTryCatch(return(expr), name, parentenv, handler)"
+        // in FastR error description
+        // Expected output: [1] "Hello"
+        // <simpleError in doTryCatch(return(expr), name, parentenv, handler): fred>
+        // FastR output: [1] "Hello"
+        // <simpleError: fred>
+        assertEval(Ignored.ImplementationError, "{ tryCatch(stop(\"fred\"), error = function(e) e, finally = print(\"Hello\"))}");
         assertEval("{ f <- function() { tryCatch(1, error = function(e) print(\"Hello\")); stop(\"fred\")}; f() }");
         assertEval("{ f <- function() { tryCatch(stop(\"fred\"), error = function(e) print(\"Hello\"))}; f() }");
         assertEval("{ tryCatch(stop(\"xyz\"), error=function(e) { cat(\"<error>\");123L }, finally=function() { cat(\"<finally>\")}) }");
diff --git a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/library/base/TestEnvironments.java b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/library/base/TestEnvironments.java
index 31bbd86d488af757a81cc21e81cce170db3c3cf0..1f2f9713d5eda8af8729943f9336c0f680c3aa87 100644
--- a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/library/base/TestEnvironments.java
+++ b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/library/base/TestEnvironments.java
@@ -267,7 +267,8 @@ public class TestEnvironments extends TestBase {
 
     @Test
     public void testEnvironmentAssignLocked() {
-        assertEval(Ignored.Unknown, Output.IgnoreErrorContext, "{ x <- 1; lockBinding(\"x\", globalenv()); x <- 1 }");
+        // FIXME: No error when writing to locked variable
+        assertEval(Ignored.Unimplemented, Output.IgnoreErrorContext, "{ x <- 1; lockBinding(\"x\", globalenv()); x <- 1 }");
     }
 
     @Test
diff --git a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/library/base/TestSimpleArithmetic.java b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/library/base/TestSimpleArithmetic.java
index 59bec36ada508d1cdba82db2c227ed96aa648861..20b93a746d038a224badc35a2722d22b3fa11e8a 100644
--- a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/library/base/TestSimpleArithmetic.java
+++ b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/library/base/TestSimpleArithmetic.java
@@ -34,7 +34,7 @@ public class TestSimpleArithmetic extends TestBase {
 
         assertEval("{ 1000000000*100000000000 }");
         assertEval("{ 1000000000L*1000000000 }");
-        assertEval(Ignored.Unknown, "{ 1000000000L*1000000000L }"); // FIXME missing warning
+        assertEval(Output.MissingWarning, "{ 1000000000L*1000000000L }"); // FIXME missing warning
     }
 
     @Test
@@ -709,22 +709,22 @@ public class TestSimpleArithmetic extends TestBase {
 
     @Test
     public void testIntegerOverflow() {
-        assertEval(Ignored.Unknown, Output.IgnoreWarningContext, "{ x <- 2147483647L ; x + 1L }");
-        assertEval(Ignored.Unknown, Output.IgnoreWarningContext, "{ x <- 2147483647L ; x * x }");
-        assertEval(Ignored.Unknown, Output.IgnoreWarningContext, "{ x <- -2147483647L ; x - 2L }");
-        assertEval(Ignored.Unknown, Output.IgnoreWarningContext, "{ x <- -2147483647L ; x - 1L }");
-        assertEval(Ignored.Unknown, Output.IgnoreWarningContext, "{ 2147483647L + 1:3 }");
-        assertEval(Ignored.Unknown, Output.IgnoreWarningContext, "{ 2147483647L + c(1L,2L,3L) }");
-        assertEval(Ignored.Unknown, Output.IgnoreWarningContext, "{ 1:3 + 2147483647L }");
-        assertEval(Ignored.Unknown, Output.IgnoreWarningContext, "{ c(1L,2L,3L) + 2147483647L }");
-        assertEval(Ignored.Unknown, Output.IgnoreWarningContext, "{ 1:3 + c(2147483647L,2147483647L,2147483647L) }");
-        assertEval(Ignored.Unknown, Output.IgnoreWarningContext, "{ c(2147483647L,2147483647L,2147483647L) + 1:3 }");
-        assertEval(Ignored.Unknown, Output.IgnoreWarningContext, "{ c(1L,2L,3L) + c(2147483647L,2147483647L,2147483647L) }");
-        assertEval(Ignored.Unknown, Output.IgnoreWarningContext, "{ c(2147483647L,2147483647L,2147483647L) + c(1L,2L,3L) }");
-        assertEval(Ignored.Unknown, Output.IgnoreWarningContext, "{ 1:4 + c(2147483647L,2147483647L) }");
-        assertEval(Ignored.Unknown, Output.IgnoreWarningContext, "{ c(2147483647L,2147483647L) + 1:4 }");
-        assertEval(Ignored.Unknown, Output.IgnoreWarningContext, "{ c(1L,2L,3L,4L) + c(2147483647L,2147483647L) }");
-        assertEval(Ignored.Unknown, Output.IgnoreWarningContext, "{ c(2147483647L,2147483647L) + c(1L,2L,3L,4L) }");
+        assertEval(Output.MissingWarning, "{ x <- 2147483647L ; x + 1L }");
+        assertEval(Output.MissingWarning, "{ x <- 2147483647L ; x * x }");
+        assertEval(Output.MissingWarning, "{ x <- -2147483647L ; x - 2L }");
+        assertEval(Output.MissingWarning, "{ x <- -2147483647L ; x - 1L }");
+        assertEval(Ignored.ImplementationError, Output.IgnoreWarningContext, "{ 2147483647L + 1:3 }");
+        assertEval(Ignored.ImplementationError, Output.IgnoreWarningContext, "{ 2147483647L + c(1L,2L,3L) }");
+        assertEval(Ignored.ImplementationError, Output.IgnoreWarningContext, "{ 1:3 + 2147483647L }");
+        assertEval(Ignored.ImplementationError, Output.IgnoreWarningContext, "{ c(1L,2L,3L) + 2147483647L }");
+        assertEval(Ignored.ImplementationError, Output.IgnoreWarningContext, "{ 1:3 + c(2147483647L,2147483647L,2147483647L) }");
+        assertEval(Ignored.ImplementationError, Output.IgnoreWarningContext, "{ c(2147483647L,2147483647L,2147483647L) + 1:3 }");
+        assertEval(Ignored.ImplementationError, Output.IgnoreWarningContext, "{ c(1L,2L,3L) + c(2147483647L,2147483647L,2147483647L) }");
+        assertEval(Ignored.ImplementationError, Output.IgnoreWarningContext, "{ c(2147483647L,2147483647L,2147483647L) + c(1L,2L,3L) }");
+        assertEval(Ignored.ImplementationError, Output.IgnoreWarningContext, "{ 1:4 + c(2147483647L,2147483647L) }");
+        assertEval(Ignored.ImplementationError, Output.IgnoreWarningContext, "{ c(2147483647L,2147483647L) + 1:4 }");
+        assertEval(Ignored.ImplementationError, Output.IgnoreWarningContext, "{ c(1L,2L,3L,4L) + c(2147483647L,2147483647L) }");
+        assertEval(Ignored.ImplementationError, Output.IgnoreWarningContext, "{ c(2147483647L,2147483647L) + c(1L,2L,3L,4L) }");
     }
 
     @Test
diff --git a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/library/base/TestSimpleLoop.java b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/library/base/TestSimpleLoop.java
index 2c34e86d420894383b06e50a313d8a9baa3faa0f..31f442dec07398d8448bdbbe0ffc03c7e62507b9 100644
--- a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/library/base/TestSimpleLoop.java
+++ b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/library/base/TestSimpleLoop.java
@@ -61,9 +61,12 @@ public class TestSimpleLoop extends TestBase {
 
     @Test
     public void testLoopsErrorsIgnore() {
-        assertEval(Ignored.Unknown, Output.IgnoreErrorContext, "{ l <- quote(for(i in s) { x <- i }) ; s <- 1:3 ; eval(l) ; s <- function(){} ; eval(l) ; x }");
-        assertEval(Ignored.Unknown, Output.IgnoreErrorContext, "{ l <- function(s) { for(i in s) { x <- i } ; x } ; l(1:3) ; s <- function(){} ; l(s) ; x }");
-        assertEval(Ignored.Unknown, Output.IgnoreErrorContext, "{ l <- quote({ for(i in s) { x <- i } ; x }) ; f <- function(s) { eval(l) } ; f(1:3) ; s <- function(){} ; f(s) ; x }");
+        // FIXME: A strange-looking error: "Error in
+        // `*anonymous-FOR_RANGE-2119`[[`*anonymous-FOR_INDEX-2118`]] :
+        // object of type 'closure' is not subsettable"
+        assertEval(Output.IgnoreErrorMessage, "{ l <- quote(for(i in s) { x <- i }) ; s <- 1:3 ; eval(l) ; s <- function(){} ; eval(l) ; x }");
+        assertEval(Output.IgnoreErrorMessage, "{ l <- function(s) { for(i in s) { x <- i } ; x } ; l(1:3) ; s <- function(){} ; l(s) ; x }");
+        assertEval(Output.IgnoreErrorMessage, "{ l <- quote({ for(i in s) { x <- i } ; x }) ; f <- function(s) { eval(l) } ; f(1:3) ; s <- function(){} ; f(s) ; x }");
     }
 
     @Test
diff --git a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/library/base/TestSimpleVectors.java b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/library/base/TestSimpleVectors.java
index 60ee20a4efe1edc0bf42bcdaa0f7de9c424638ed..4e95a79254c9b05192b6beecbf72e31b2b77f024 100644
--- a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/library/base/TestSimpleVectors.java
+++ b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/library/base/TestSimpleVectors.java
@@ -1008,7 +1008,7 @@ public class TestSimpleVectors extends TestBase {
         assertEval("{ x<-list(1,2,3,4); dim(x)<-c(2,2); x[[list(1), 1]] }");
         assertEval(Output.IgnoreErrorMessage, "{ x<-list(1,2,3,4); dim(x)<-c(2,2); x[[list(1,2), 1]] }");
 
-        assertEval(Ignored.Unknown, Output.IgnoreErrorContext, "{ z<-1:4; z[[list()]]<-NULL }");
+        assertEval(Output.IgnoreErrorMessage, "{ z<-1:4; z[[list()]]<-NULL }");
     }
 
     @Test
@@ -2186,7 +2186,7 @@ public class TestSimpleVectors extends TestBase {
         assertEval(Output.IgnoreErrorMessage, "{ x <- NULL; x[[c(1,0)]] <- c(1,5); x; }");
         assertEval(Output.IgnoreErrorMessage, "{ x <- NULL; x[[c(1,2)]] <- c(1,5); x; }");
 
-        assertEval(Ignored.Unknown, "{ x <- NULL; x[[1]] <- c(1,5); x; }");
+        assertEval(Ignored.Unimplemented, "{ x <- NULL; x[[1]] <- c(1,5); x; }");
     }
 
     @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 4296cd975d7f5f4ce129f80438c5e621cba937ac..557545ba6e3be4cf0ae958db0bcbc3b97d03b1f3 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
@@ -22,6 +22,7 @@
  */
 package com.oracle.truffle.r.test.library.fastr;
 
+import com.oracle.truffle.r.nodes.builtin.fastr.FastRInterop;
 import com.oracle.truffle.r.runtime.RType;
 import org.junit.Test;
 
@@ -33,11 +34,17 @@ import java.lang.reflect.Method;
 import java.util.HashMap;
 import java.util.Map;
 import org.junit.Assert;
+import org.junit.Before;
 
 public class TestJavaInterop extends TestBase {
 
     private static final String TEST_CLASS = TestClass.class.getName();
 
+    @Before
+    public void testInit() {
+        FastRInterop.testingMode();
+    }
+
     @Test
     public void testToByte() {
         assertEvalFastR("v <- .fastr.interop.toByte(1L); v;", "1");
@@ -191,8 +198,9 @@ public class TestJavaInterop extends TestBase {
     }
 
     @Test
-    public void testNew() {
+    public void testInteroptNew() {
         assertEvalFastR("tc <- .fastr.java.class('" + Boolean.class.getName() + "'); t <- .fastr.interop.new(tc, TRUE); t", "TRUE");
+        assertEvalFastR("tc <- .fastr.java.class('java/lang/Boolean'); t <- new(tc, TRUE); t", "TRUE");
         assertEvalFastR("tc <- .fastr.java.class('" + Byte.class.getName() + "'); t <- .fastr.interop.new(tc, .fastr.interop.toByte(1)); t", "1");
         assertEvalFastR("tc <- .fastr.java.class('" + Character.class.getName() + "'); t <- .fastr.interop.new(tc, .fastr.interop.toChar(97)); t", "'a'");
         assertEvalFastR("tc <- .fastr.java.class('" + Double.class.getName() + "'); t <- .fastr.interop.new(tc, 1.1); t", "1.1");
@@ -204,6 +212,20 @@ public class TestJavaInterop extends TestBase {
         assertEvalFastR("tc <- .fastr.java.class('" + TestNullClass.class.getName() + "'); t <- .fastr.interop.new(tc, NULL); class(t)", "'" + RType.TruffleObject.getName() + "'");
     }
 
+    @Test
+    public void testNewWithJavaClass() {
+        assertEvalFastR("tc <- .fastr.java.class('" + Boolean.class.getName() + "'); to <- new(tc, TRUE); to", "TRUE");
+        assertEvalFastR("tc <- .fastr.java.class('" + TEST_CLASS + "'); to <- new(tc); to$fieldInteger", getRValue(Integer.MAX_VALUE));
+
+        assertEvalFastR("to <- new('" + Boolean.class.getName() + "', TRUE); to", "TRUE");
+        assertEvalFastR("to <- new('java/lang/Boolean', TRUE); to", "TRUE");
+        assertEvalFastR("to <- new('" + TEST_CLASS + "'); to$fieldStaticInteger", getRValue(Integer.MAX_VALUE));
+
+        assertEvalFastR("to <- new('" + TEST_CLASS + "'); new(to)", "cat('Error in .fastr.interop.new(Class, ...) : ', '\n', '  error during Java object instantiation\n', sep='')");
+
+        assertEvalFastR("to <- new('__bogus_class_name__');", "cat('Error in getClass(Class, where = topenv(parent.frame())) : ', '\n', '  “__bogus_class_name__” is not a defined class\n', sep='')");
+    }
+
     @Test
     public void testCombineInteropTypes() {
         assertEvalFastR("class(c(.fastr.interop.toByte(123)))", "'interopt.byte'");
@@ -329,7 +351,7 @@ public class TestJavaInterop extends TestBase {
     }
 
     @Test
-    public void testNamesForJavaObject() {
+    public void testNamesForForeignObject() {
         assertEvalFastR("tc <- .fastr.java.class('" + TestNamesClassNoMembers.class.getName() + "'); t <- .fastr.interop.new(tc); names(t)", "NULL");
         assertEvalFastR("tc <- .fastr.java.class('" + TestNamesClassNoPublicMembers.class.getName() + "'); t <- .fastr.interop.new(tc); names(t)", "NULL");
         assertEvalFastR("tc <- .fastr.java.class('" + TestNamesClass.class.getName() + "'); sort(names(tc))", "c('staticField', 'staticMethod')");
@@ -340,6 +362,63 @@ public class TestJavaInterop extends TestBase {
         assertEvalFastR("tc <- .fastr.java.class('" + TestNamesClassMap.class.getName() + "'); t <- .fastr.interop.new(tc); sort(names(t$m()))", "c('one', 'two')");
     }
 
+    @Test
+    public void testIsXXXForForeignObject() {
+        // missing: is.element, is.empty.model, is.leaf, is.loaded, is.na.data.frame,
+        // is.na.numeric_version, is.na.POSIXlt
+
+        assertPassingForeighObjectToFunction("is.array", "FALSE");
+        assertPassingForeighObjectToFunction("is.atomic", "FALSE");
+        assertPassingForeighObjectToFunction("is.call", "FALSE");
+        assertPassingForeighObjectToFunction("is.character", "FALSE");
+        assertPassingForeighObjectToFunction("is.complex", "FALSE");
+        assertPassingForeighObjectToFunction("is.data.frame", "FALSE");
+        assertPassingForeighObjectToFunction("is.double", "FALSE");
+        assertPassingForeighObjectToFunction("is.environment", "FALSE");
+        assertPassingForeighObjectToFunction("is.expression", "FALSE");
+        assertPassingForeighObjectToFunction("is.factor", "FALSE");
+        assertPassingForeighObjectToFunction("is.function", "FALSE");
+        assertPassingForeighObjectToFunction("is.integer", "FALSE");
+        assertPassingForeighObjectToFunction("is.language", "FALSE");
+        assertPassingForeighObjectToFunction("is.logical", "FALSE");
+        assertPassingForeighObjectToFunction("is.matrix", "FALSE");
+        assertPassingForeighObjectToFunction("is.mts", "FALSE");
+        assertPassingForeighObjectToFunction("is.na", "FALSE");
+        assertPassingForeighObjectToFunction("is.name", "FALSE");
+        assertPassingForeighObjectToFunction("is.null", "FALSE");
+        assertPassingForeighObjectToFunction("is.numeric", "FALSE");
+        assertPassingForeighObjectToFunction("is.numeric.Date", "FALSE");
+        assertPassingForeighObjectToFunction("is.numeric.difftime", "FALSE");
+        assertPassingForeighObjectToFunction("is.numeric.POSIXt", "FALSE");
+        assertPassingForeighObjectToFunction("is.numeric_version", "FALSE");
+        assertPassingForeighObjectToFunction("is.object", "FALSE");
+        assertPassingForeighObjectToFunction("is.ordered", "FALSE");
+        assertPassingForeighObjectToFunction("is.package_version", "FALSE");
+        assertPassingForeighObjectToFunction("is.pairlist", "FALSE");
+        assertPassingForeighObjectToFunction("is.primitive", "FALSE");
+        assertPassingForeighObjectToFunction("is.qr", "FALSE");
+        assertPassingForeighObjectToFunction("is.raster", "FALSE");
+        assertPassingForeighObjectToFunction("is.raw", "FALSE");
+        assertPassingForeighObjectToFunction("is.recursive", "FALSE");
+        assertPassingForeighObjectToFunction("is.relistable", "FALSE");
+        assertPassingForeighObjectToFunction("is.stepfun", "FALSE");
+        assertPassingForeighObjectToFunction("is.symbol", "FALSE");
+        assertPassingForeighObjectToFunction("is.table", "FALSE");
+        assertPassingForeighObjectToFunction("is.ts", "FALSE");
+        assertPassingForeighObjectToFunction("is.tskernel", "FALSE");
+        assertPassingForeighObjectToFunction("is.unsorted", "FALSE");
+        assertPassingForeighObjectToFunction("is.vector", "FALSE");
+
+        assertPassingForeighObjectToFunction("is.nan", "cat('Error in is.nan(to) : ', '\n', '  default method not implemented for type \\'external object\\'\n', sep='')");
+        assertPassingForeighObjectToFunction("is.finite", "cat('Error in is.finite(to) : ', '\n', '  default method not implemented for type \\'external object\\'\n', sep='')");
+        assertPassingForeighObjectToFunction("is.infinite", "cat('Error in is.infinite(to) : ', '\n', '  default method not implemented for type \\'external object\\'\n', sep='')");
+
+    }
+
+    private void assertPassingForeighObjectToFunction(String function, String expectedOutput) {
+        assertEvalFastR("to <- .fastr.interop.new(.fastr.java.class('" + TEST_CLASS + "')); " + function + "(to)", expectedOutput);
+    }
+
     @Test
     public void testAttributes() {
         assertEvalFastR("to <- .fastr.interop.new(.fastr.java.class('" + TEST_CLASS + "')); attributes(to)", "NULL");
@@ -347,6 +426,15 @@ public class TestJavaInterop extends TestBase {
         assertEvalFastR("to <- .fastr.interop.new(.fastr.java.class('" + TEST_CLASS + "')); attr(to, which = 'a')", "cat('Error in attr(to, which = \"a\") : external object cannot be attributed\n')");
     }
 
+    public void testIdentical() {
+        assertEvalFastR("b1 <- .fastr.interop.toByte(1); identical(b1, b1)", "TRUE");
+        assertEvalFastR("b1 <- .fastr.interop.toByte(1); b2 <- .fastr.interop.toByte(1); identical(b1, b2)", "FALSE");
+        assertEvalFastR("b1 <- .fastr.interop.toByte(1); s1 <- .fastr.interop.toShort(1); identical(b1, s1)", "FALSE");
+
+        assertEvalFastR("al <- .fastr.interop.new(.fastr.java.class('java.util.ArrayList')); identical(t, t)", "TRUE");
+        assertEvalFastR("ll <- .fastr.interop.new(.fastr.java.class('java.util.LinkedList')); al <- .fastr.interop.new(.fastr.java.class('java.util.ArrayList')); identical(al, ll)", "FALSE");
+    }
+
     private String getRValue(Object value) {
         if (value == null) {
             return "NULL";
@@ -436,24 +524,24 @@ public class TestJavaInterop extends TestBase {
 
     public static class TestClass {
 
-        public static boolean fieldStaticBoolean;
-        public static byte fieldStaticByte;
-        public static char fieldStaticChar;
-        public static short fieldStaticShort;
-        public static int fieldStaticInteger;
-        public static long fieldStaticLong;
-        public static double fieldStaticDouble;
-        public static float fieldStaticFloat;
-
-        public static Boolean fieldStaticBooleanObject;
-        public static Byte fieldStaticByteObject;
-        public static Character fieldStaticCharObject;
-        public static Short fieldStaticShortObject;
-        public static Integer fieldStaticIntegerObject;
-        public static Long fieldStaticLongObject;
-        public static Double fieldStaticDoubleObject;
-        public static Float fieldStaticFloatObject;
-        public static String fieldStaticStringObject;
+        public static boolean fieldStaticBoolean = true;
+        public static byte fieldStaticByte = Byte.MAX_VALUE;
+        public static char fieldStaticChar = 'a';
+        public static short fieldStaticShort = Short.MAX_VALUE;
+        public static int fieldStaticInteger = Integer.MAX_VALUE;
+        public static long fieldStaticLong = Long.MAX_VALUE;
+        public static double fieldStaticDouble = Double.MAX_VALUE;
+        public static float fieldStaticFloat = Float.MAX_VALUE;
+
+        public static Boolean fieldStaticBooleanObject = fieldStaticBoolean;
+        public static Byte fieldStaticByteObject = fieldStaticByte;
+        public static Character fieldStaticCharObject = fieldStaticChar;
+        public static Short fieldStaticShortObject = fieldStaticShort;
+        public static Integer fieldStaticIntegerObject = fieldStaticInteger;
+        public static Long fieldStaticLongObject = fieldStaticLong;
+        public static Double fieldStaticDoubleObject = fieldStaticDouble;
+        public static Float fieldStaticFloatObject = fieldStaticFloat;
+        public static String fieldStaticStringObject = "a string";
 
         public boolean fieldBoolean;
         public byte fieldByte;
diff --git a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/library/stats/TestExternal_rbinom.java b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/library/stats/TestExternal_rbinom.java
index 74edb90098582d5d455debbf565fd715f0b4b791..e4b346612af670838d4aa652b65c0b368db3f576 100644
--- a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/library/stats/TestExternal_rbinom.java
+++ b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/library/stats/TestExternal_rbinom.java
@@ -36,5 +36,6 @@ public class TestExternal_rbinom extends TestBase {
         assertEval("set.seed(42); rbinom(10, 2:10, c(0.1, 0.5, 0.9))");
         assertEval("set.seed(42); rbinom(1:10, 2:10, c(0.1, 0.5, 0.9))");
         assertEval("set.seed(42); rbinom(c(1,2), 11:12, c(0.1, 0.5, 0.9))");
+        assertEval("set.seed(42); rbinom(1, 2, 3)");
     }
 }
diff --git a/mx.fastr/suite.py b/mx.fastr/suite.py
index ddabdaab2423e8fc9d4d0a98fa99fa0d92c7286c..b6c15400151768f64dae88ead2e9cb4863da44c4 100644
--- a/mx.fastr/suite.py
+++ b/mx.fastr/suite.py
@@ -29,7 +29,7 @@ suite = {
             {
                "name" : "truffle",
                "subdir" : True,
-               "version" : "538d97d5e696be8a0f882cf970e70689674651c2",
+               "version" : "49be77b996566438b7be1f2bf9717b9b9f1c90c1",
                "urls" : [
                     {"url" : "https://github.com/graalvm/graal", "kind" : "git"},
                     {"url" : "https://curio.ssw.jku.at/nexus/content/repositories/snapshots", "kind" : "binary"},