From 5c48ec84cbe0e58c6a02797bea3b20fe3555a543 Mon Sep 17 00:00:00 2001
From: stepan <stepan.sindelar@oracle.com>
Date: Fri, 20 Jan 2017 14:27:28 +0100
Subject: [PATCH] Sprintf: handle '%g' with integer argument

---
 .../com/oracle/truffle/r/nodes/builtin/base/Sprintf.java    | 6 +++++-
 .../src/com/oracle/truffle/r/test/ExpectedTestOutput.test   | 4 ++++
 .../oracle/truffle/r/test/builtins/TestBuiltin_sprintf.java | 1 +
 3 files changed, 10 insertions(+), 1 deletion(-)

diff --git a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/Sprintf.java b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/Sprintf.java
index c40704dc7a..a18ee23a79 100644
--- a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/Sprintf.java
+++ b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/Sprintf.java
@@ -337,7 +337,11 @@ public abstract class Sprintf extends RBuiltinNode {
                 }
                 conversions[fi.numArg - 1] = fi.conversion;
             }
-            sb.append(fi.conversion);
+            char conversion = fi.conversion;
+            if (conversion == 'g' && args[fi.numArg - 1] instanceof Integer) {
+                conversion = 'd';
+            }
+            sb.append(conversion);
             i = fi.nextChar;
         }
 
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 b69fe6363c..ced94c6968 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
@@ -60049,6 +60049,10 @@ character(0)
 #{ sprintf("foo") }
 [1] "foo"
 
+##com.oracle.truffle.r.test.builtins.TestBuiltin_sprintf.testSprintf#
+#{ sprintf('plot_%02g', 3L) }
+[1] "plot_03"
+
 ##com.oracle.truffle.r.test.builtins.TestBuiltin_sprintf.testSprintf#
 #{ sprintf(c("foo %f %d", "bar %f %d"), 7, 42L) }
 [1] "foo 7.000000 42" "bar 7.000000 42"
diff --git a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_sprintf.java b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_sprintf.java
index 7a95cae934..d48f6c25f0 100644
--- a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_sprintf.java
+++ b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_sprintf.java
@@ -146,5 +146,6 @@ public class TestBuiltin_sprintf extends TestBase {
         assertEval("{ sprintf(c(\"foo %f %d\", \"bar %f %d\"), 7, 42L) }");
         assertEval("{ sprintf(c(\"foo %f %d\", \"bar %f %d\"), c(7,1), c(42L, 2L)) }");
         assertEval("{ sprintf(\"%.3g\", 1.234) }");
+        assertEval("{ sprintf('plot_%02g', 3L) }");
     }
 }
-- 
GitLab