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 d63e651d5e6ddbd0fb26ba59321e2d93a9a2c136..ac718bfb9723a82f426dbe3f4bbb2041d2f30ca3 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 @@ -323,7 +323,7 @@ final class REngine implements Engine, Engine.Timings { return lastValue; } catch (ReturnException ex) { return ex.getResult(); - } catch (DebugExitException | BrowserQuitException e) { + } catch (DebugExitException | BrowserQuitException | ThreadDeath e) { throw e; } catch (RError e) { // TODO normal error reporting is done by the runtime diff --git a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/function/FunctionDefinitionNode.java b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/function/FunctionDefinitionNode.java index f386817df8f1e374cd40894ba116d4b2bf8bddeb..2eea675418c357a52b173477a0eedfc7c2d0bc92 100644 --- a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/function/FunctionDefinitionNode.java +++ b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/function/FunctionDefinitionNode.java @@ -280,7 +280,7 @@ public final class FunctionDefinitionNode extends RRootNode implements RSyntaxNo } catch (RError e) { CompilerDirectives.transferToInterpreter(); throw e; - } catch (DebugExitException | BrowserQuitException e) { + } catch (DebugExitException | BrowserQuitException | ThreadDeath e) { /* * These relate to the debugging support. exitHandlers must be suppressed and the * exceptions must pass through unchanged; they are not errors 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 6e91a6fa3f683e5af26614f81cab5f9f6400d1fc..abf165f5173daffc76b6f5562cd85340f9fd122d 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 @@ -490,7 +490,13 @@ public abstract class RCallNode extends RCallBaseNode implements RSyntaxNode, RS foreignCallArgCount = argumentsArray.length; } try { - return ForeignAccess.execute(foreignCall, frame, function, argumentsArray); + Object result = ForeignAccess.execute(foreignCall, frame, function, argumentsArray); + if (result instanceof Boolean) { + // convert to R logical + // TODO byte/short convert to int? + result = RRuntime.asLogical((boolean) result); + } + return result; } catch (Throwable e) { errorProfile.enter(); throw RError.error(this, RError.Message.GENERIC, "Foreign function failed: " + e.getMessage() != null ? e.getMessage() : e.toString()); diff --git a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/tck/FastRTckTest.java b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/tck/FastRTckTest.java index d490cae3a476d0eee8f761b900f97ad3b2d1dc94..1d7b1a94649819cc14d27ee000f1564ff769cb9c 100644 --- a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/tck/FastRTckTest.java +++ b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/tck/FastRTckTest.java @@ -362,14 +362,10 @@ public class FastRTckTest extends TruffleTCK { return firstName + '*' + secondName; } - @Override - public void timeOutTest() throws Exception { - // TODO We cannot execute this owing to Tck uing Boolean for truth values - } - @Override public void testRootNodeName() throws Exception { // TODO We cannot implement this due to halting in the runtime startup + // Fixed in upcoming Truffle } }