From 365d2ee915001b38fe955bf3920f1cb393557a2c Mon Sep 17 00:00:00 2001 From: Lukas Stadler <lukas.stadler@oracle.com> Date: Tue, 11 Oct 2016 10:17:48 +0200 Subject: [PATCH] do not allow bultins to return "null" --- .../com/oracle/truffle/r/nodes/builtin/base/CacheClass.java | 2 +- .../oracle/truffle/r/nodes/builtin/base/PrintFunctions.java | 2 +- .../oracle/truffle/r/nodes/builtin/base/ShortRowNames.java | 4 ++++ .../src/com/oracle/truffle/r/nodes/function/RCallNode.java | 1 + 4 files changed, 7 insertions(+), 2 deletions(-) diff --git a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/CacheClass.java b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/CacheClass.java index 2d78a5d73a..9c0d5bd0f0 100644 --- a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/CacheClass.java +++ b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/CacheClass.java @@ -42,6 +42,6 @@ public abstract class CacheClass extends RBuiltinNode { @Specialization protected RAbstractStringVector getClass(String cl, RAbstractStringVector ext) { RContext.getInstance().putS4Extends(cl, ext.materialize()); - return null; + return ext; } } 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 e998608271..40de6fe166 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 @@ -98,7 +98,7 @@ public class PrintFunctions { } else { printDefault(frame, showFunction, digits, quote, naPrint, printGap, right, max, useSource, noOpt); } - return null; + return o; } protected boolean isS4(Object o) { diff --git a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/ShortRowNames.java b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/ShortRowNames.java index b057268ae0..e318c352f9 100644 --- a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/ShortRowNames.java +++ b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/ShortRowNames.java @@ -76,6 +76,10 @@ public abstract class ShortRowNames extends RBuiltinNode { rowNames = type == 1 ? n : Math.abs(n); } + if (rowNames == null) { + return RNull.instance; + } + return rowNames; } 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 de186c6978..2d93bf54c8 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 @@ -986,6 +986,7 @@ public abstract class RCallNode extends RCallBaseNode implements RSyntaxNode, RS @Override public Object execute(VirtualFrame frame, RFunction currentFunction, RArgsValuesAndNames orderedArguments, S3Args s3Args) { Object result = builtin.executeBuiltin(frame, castArguments(frame, orderedArguments.getArguments())); + assert result != null : "builtins cannot return 'null': " + builtinDescriptor.getName(); visibility.execute(frame, builtinDescriptor.getVisibility()); return result; } -- GitLab