From 0ca10ed76c827e1ccadf615248994315073b02b7 Mon Sep 17 00:00:00 2001 From: stepan <stepan.sindelar@oracle.com> Date: Fri, 5 Jan 2018 11:33:21 +0100 Subject: [PATCH] Make sure TAG RFFI function always return RSymbol or RNull --- .../truffle/r/ffi/impl/nodes/AttributesAccessNodes.java | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/com.oracle.truffle.r.ffi.impl/src/com/oracle/truffle/r/ffi/impl/nodes/AttributesAccessNodes.java b/com.oracle.truffle.r.ffi.impl/src/com/oracle/truffle/r/ffi/impl/nodes/AttributesAccessNodes.java index 7f3ba16ac6..19f9d9ea72 100644 --- a/com.oracle.truffle.r.ffi.impl/src/com/oracle/truffle/r/ffi/impl/nodes/AttributesAccessNodes.java +++ b/com.oracle.truffle.r.ffi.impl/src/com/oracle/truffle/r/ffi/impl/nodes/AttributesAccessNodes.java @@ -48,6 +48,7 @@ import com.oracle.truffle.r.runtime.RRuntime; import com.oracle.truffle.r.runtime.data.RArgsValuesAndNames; import com.oracle.truffle.r.runtime.data.RAttributable; import com.oracle.truffle.r.runtime.data.RAttributeStorage; +import com.oracle.truffle.r.runtime.data.RDataFactory; import com.oracle.truffle.r.runtime.data.RExternalPtr; import com.oracle.truffle.r.runtime.data.RList; import com.oracle.truffle.r.runtime.data.RNull; @@ -116,14 +117,16 @@ public final class AttributesAccessNodes { @Specialization public Object doPairlist(RPairList obj) { - return obj.getTag(); + Object result = obj.getTag(); + assert result instanceof RSymbol || result == RNull.instance; + return result; } @Specialization public Object doArgs(RArgsValuesAndNames obj) { ArgumentsSignature signature = obj.getSignature(); if (signature.getLength() > 0 && signature.getName(0) != null) { - return signature.getName(0); + return RDataFactory.createSymbol(signature.getName(0)); } return RNull.instance; } @@ -138,7 +141,7 @@ public final class AttributesAccessNodes { @Cached("create()") GetNamesAttributeNode getNamesAttributeNode) { RStringVector names = getNamesAttributeNode.getNames(obj); if (names != null && names.getLength() > 0) { - return names.getDataAt(0); + return RDataFactory.createSymbol(names.getDataAt(0)); } return RNull.instance; } -- GitLab