From 27456f17548949afb8a5e4b6fcf422059ebbdec3 Mon Sep 17 00:00:00 2001 From: Lukas Stadler <lukas.stadler@oracle.com> Date: Fri, 15 Jul 2016 10:11:16 +0200 Subject: [PATCH] fix gettext builtin (remove remnants from SUBSTITUTE implementation) --- .../truffle/r/nodes/builtin/base/GetText.java | 64 ++++--------------- .../truffle/r/test/ExpectedTestOutput.test | 8 +++ .../r/test/builtins/TestBuiltin_gettext.java | 8 ++- 3 files changed, 27 insertions(+), 53 deletions(-) diff --git a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/GetText.java b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/GetText.java index a10b07fcea..6c760541d6 100644 --- a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/GetText.java +++ b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/GetText.java @@ -24,69 +24,29 @@ package com.oracle.truffle.r.nodes.builtin.base; import static com.oracle.truffle.r.runtime.RBuiltinKind.INTERNAL; -import java.util.Arrays; - -import com.oracle.truffle.api.CompilerDirectives; import com.oracle.truffle.api.dsl.Specialization; +import com.oracle.truffle.r.nodes.builtin.CastBuilder; 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.CastToVectorNode; -import com.oracle.truffle.r.nodes.unary.CastToVectorNodeGen; import com.oracle.truffle.r.runtime.RBuiltin; -import com.oracle.truffle.r.runtime.Utils; -import com.oracle.truffle.r.runtime.data.RArgsValuesAndNames; -import com.oracle.truffle.r.runtime.data.RDataFactory; import com.oracle.truffle.r.runtime.data.RNull; -import com.oracle.truffle.r.runtime.data.RStringVector; -import com.oracle.truffle.r.runtime.ops.na.NACheck; +import com.oracle.truffle.r.runtime.data.model.RAbstractStringVector; -@SuppressWarnings("unused") -@RBuiltin(name = "gettext", kind = INTERNAL, parameterNames = {"...", "domain"}) +@RBuiltin(name = "gettext", kind = INTERNAL, parameterNames = {"domain", "args"}) public abstract class GetText extends RBuiltinNode { - @Child private CastToVectorNode castVector; - @Child private CastStringNode castString; - - private final NACheck elementNACheck = NACheck.create(); - - private Object castString(Object operand) { - if (castString == null) { - CompilerDirectives.transferToInterpreterAndInvalidate(); - castString = insert(CastStringNodeGen.create(false, true, false, false)); - } - return castString.execute(operand); + @Override + protected void createCasts(CastBuilder casts) { + casts.arg("domain").asStringVector().findFirst(""); + casts.arg("args").asStringVector(); } - private Object castVector(Object value) { - if (castVector == null) { - CompilerDirectives.transferToInterpreterAndInvalidate(); - castVector = insert(CastToVectorNodeGen.create(false)); - } - return castVector.execute(value); + @Specialization + protected RAbstractStringVector getText(@SuppressWarnings("unused") String domain, RAbstractStringVector texts) { + return texts; } @Specialization - protected RStringVector getText(RArgsValuesAndNames varargs, Object domain) { - Object[] argValues = varargs.getArguments(); - String[] a = new String[0]; - int aLength = 0; - int index = 0; - for (int i = 0; i < argValues.length; i++) { - Object v = castVector(argValues[i]); - if (v != RNull.instance) { - RStringVector vector = (RStringVector) castString(v); - elementNACheck.enable(vector); - aLength += vector.getLength(); - a = Utils.resizeArray(a, Math.max(aLength, a.length * 2)); - for (int j = 0; j < vector.getLength(); j++) { - a[index] = vector.getDataAt(j); - elementNACheck.check(a[index]); - index++; - } - } - } - - return RDataFactory.createStringVector(a.length == aLength ? a : Arrays.copyOf(a, aLength), elementNACheck.neverSeenNA()); + protected RNull getText(@SuppressWarnings("unused") String domain, RNull texts) { + return texts; } } 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 d0cf9c52f5..38817e3019 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 @@ -20410,6 +20410,14 @@ list() [1] FALSE +##com.oracle.truffle.r.test.builtins.TestBuiltin_gettext.testgettext +#gettext('Loading required package: %s') +[1] "Loading required package: %s" + +##com.oracle.truffle.r.test.builtins.TestBuiltin_gettext.testgettext +#gettext(domain='foo', 'bar') +[1] "bar" + ##com.oracle.truffle.r.test.builtins.TestBuiltin_gettext.testgettext1 #argv <- list(NULL, 'Loading required package: %s'); .Internal(gettext(argv[[1]], argv[[2]])) [1] "Loading required package: %s" diff --git a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_gettext.java b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_gettext.java index acaf7cf063..dd9e60ad11 100644 --- a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_gettext.java +++ b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_gettext.java @@ -44,6 +44,12 @@ public class TestBuiltin_gettext extends TestBase { @Test public void testgettext6() { - assertEval(Ignored.Unknown, "argv <- list(NULL, NULL); .Internal(gettext(argv[[1]], argv[[2]]))"); + assertEval("argv <- list(NULL, NULL); .Internal(gettext(argv[[1]], argv[[2]]))"); + } + + @Test + public void testgettext() { + assertEval("gettext('Loading required package: %s')"); + assertEval("gettext(domain='foo', 'bar')"); } } -- GitLab