From 22664e389d9acf794421aecef657875defd342e3 Mon Sep 17 00:00:00 2001 From: Mick Jordan <mick.jordan@oracle.com> Date: Tue, 5 Jul 2016 12:46:44 -0700 Subject: [PATCH] Convert boolean passed via interop to R logical, enable related TCK test Propagate ThreadDeath (Truffle KillException) exception --- .../src/com/oracle/truffle/r/engine/REngine.java | 2 +- .../truffle/r/nodes/function/FunctionDefinitionNode.java | 2 +- .../com/oracle/truffle/r/nodes/function/RCallNode.java | 8 +++++++- .../src/com/oracle/truffle/r/test/tck/FastRTckTest.java | 6 +----- 4 files changed, 10 insertions(+), 8 deletions(-) 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 d63e651d5e..ac718bfb97 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 f386817df8..2eea675418 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 6e91a6fa3f..abf165f517 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 d490cae3a4..1d7b1a9464 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 } } -- GitLab