diff --git a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/BasePackage.java b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/BasePackage.java index dfc372a3ed7589e2c18b15a986297e123783fa2e..d2e5d9d34c0b329ab543eb9054bc81ba50ae0105 100644 --- a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/BasePackage.java +++ b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/BasePackage.java @@ -411,6 +411,7 @@ public class BasePackage extends RBuiltinPackage { add(FastRInterop.IsExecutable.class, FastRInteropFactory.IsExecutableNodeGen::create); add(FastRInterop.IsExternal.class, FastRInteropFactory.IsExternalNodeGen::create); add(FastRInterop.JavaClass.class, FastRInteropFactory.JavaClassNodeGen::create); + add(FastRInterop.JavaClassName.class, FastRInteropFactory.JavaClassNameNodeGen::create); add(FastRInterop.IsForeignArray.class, FastRInteropFactory.IsForeignArrayNodeGen::create); add(FastRInterop.NewJavaArray.class, FastRInteropFactory.NewJavaArrayNodeGen::create); add(FastRInterop.ToJavaArray.class, FastRInteropFactory.ToJavaArrayNodeGen::create); diff --git a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/fastr/FastRInterop.java b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/fastr/FastRInterop.java index cf862e64f56335547546cf4c5c894476f8c05cbd..16a1f126f59ea7f2313610a9edb4016918203278 100644 --- a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/fastr/FastRInterop.java +++ b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/fastr/FastRInterop.java @@ -456,6 +456,35 @@ public class FastRInterop { } } + @ImportStatic({RRuntime.class}) + @RBuiltin(name = ".fastr.java.className", visibility = ON, kind = PRIMITIVE, parameterNames = {"class"}, behavior = COMPLEX) + public abstract static class JavaClassName extends RBuiltinNode.Arg1 { + + static { + Casts.noCasts(JavaClassName.class); + } + + @Specialization(guards = {"isJavaObject(obj)"}) + @TruffleBoundary + public Object javaClassName(TruffleObject obj) { + Object o = JavaInterop.asJavaObject(Object.class, obj); + if (o == null) { + return RNull.instance; + } + return o.getClass().getName(); + } + + protected boolean isJavaObject(TruffleObject obj) { + return JavaInterop.isJavaObject(obj); + } + + @Fallback + public String javaClassName(@SuppressWarnings("unused") Object obj) { + throw error(RError.Message.GENERIC, "unsupported type"); + } + + } + @ImportStatic({Message.class, RRuntime.class}) @RBuiltin(name = ".fastr.interop.isArray", visibility = ON, kind = PRIMITIVE, parameterNames = {"obj"}, behavior = COMPLEX) public abstract static class IsForeignArray extends RBuiltinNode.Arg1 { @@ -489,21 +518,22 @@ public class FastRInterop { @Specialization @TruffleBoundary public Object newArray(String clazz, int length) { - try { - // TODO new via ForeignAccess - return JavaInterop.asTruffleObject(Array.newInstance(Class.forName(clazz), length)); - } catch (ClassNotFoundException e) { - throw error(RError.Message.GENERIC, "error while accessing Java class: " + e.getMessage()); - } + return JavaInterop.asTruffleObject(Array.newInstance(getClazz(clazz), length)); } @Specialization @TruffleBoundary public Object newArray(String clazz, RAbstractIntVector dim) { + int[] dima = new int[dim.getLength()]; + for (int i = 0; i < dima.length; i++) { + dima[i] = dim.getDataAt(i); + } + return JavaInterop.asTruffleObject(Array.newInstance(getClazz(clazz), dima)); + } + + private Class<?> getClazz(String className) throws RError { try { - int[] dima = new int[dim.getLength()]; - // TODO new via ForeignAccess - return JavaInterop.asTruffleObject(Array.newInstance(Class.forName(clazz), dima)); + return classForName(className); } catch (ClassNotFoundException e) { throw error(RError.Message.GENERIC, "error while accessing Java class: " + e.getMessage()); } @@ -607,38 +637,6 @@ public class FastRInterop { return R2ForeignNodeGen.create(); } - private Class<?> getClazz(String className) throws RError { - if (className.equals(Byte.TYPE.getName())) { - return Byte.TYPE; - } - if (className.equals(Boolean.TYPE.getName())) { - return Boolean.TYPE; - } - if (className.equals(Character.TYPE.getName())) { - return Character.TYPE; - } - if (className.equals(Double.TYPE.getName())) { - return Double.TYPE; - } - if (className.equals(Float.TYPE.getName())) { - return Float.TYPE; - } - if (className.equals(Integer.TYPE.getName())) { - return Integer.TYPE; - } - if (className.equals(Long.TYPE.getName())) { - return Long.TYPE; - } - if (className.equals(Short.TYPE.getName())) { - return Short.TYPE; - } - try { - return Class.forName(className); - } catch (ClassNotFoundException e) { - throw error(RError.Message.GENERIC, "error while accessing Java class: " + e.getMessage()); - } - } - private static int[] getDim(boolean flat, RAbstractVector vec) { int[] dims; if (flat) { @@ -673,7 +671,7 @@ public class FastRInterop { @TruffleBoundary public Object toArray(TruffleObject obj, @SuppressWarnings("unused") RMissing missing, @SuppressWarnings("unused") boolean flat, @Cached("WRITE.createNode()") Node write) { - if (JavaInterop.isJavaObject(Object.class, obj)) { + if (JavaInterop.isJavaObject(obj)) { if (JavaInterop.isArray(obj)) { // TODO should return copy? return obj; @@ -698,6 +696,14 @@ public class FastRInterop { throw error(RError.Message.GENERIC, "unsupported type"); } + private Class<?> getClazz(String className) throws RError { + try { + return classForName(className); + } catch (ClassNotFoundException e) { + throw error(RError.Message.GENERIC, "error while accessing Java class: " + e.getMessage()); + } + } + } @ImportStatic({Message.class, RRuntime.class}) @@ -793,4 +799,32 @@ public class FastRInterop { return RRuntime.LOGICAL_FALSE; } } + + private static Class<?> classForName(String className) throws ClassNotFoundException { + if (className.equals(Byte.TYPE.getName())) { + return Byte.TYPE; + } + if (className.equals(Boolean.TYPE.getName())) { + return Boolean.TYPE; + } + if (className.equals(Character.TYPE.getName())) { + return Character.TYPE; + } + if (className.equals(Double.TYPE.getName())) { + return Double.TYPE; + } + if (className.equals(Float.TYPE.getName())) { + return Float.TYPE; + } + if (className.equals(Integer.TYPE.getName())) { + return Integer.TYPE; + } + if (className.equals(Long.TYPE.getName())) { + return Long.TYPE; + } + if (className.equals(Short.TYPE.getName())) { + return Short.TYPE; + } + return Class.forName(className); + } } 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 c92d40e833503d3bcc33aac8b09e65cb5267d05f..855f7a4f5b1b688cad7304c617382f06ae0fed96 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 @@ -132679,6 +132679,22 @@ NULL NULL +##com.oracle.truffle.r.test.library.fastr.TestJavaInterop.testGetClass# +#if (length(grep("FastR", R.Version()$version.string)) != 1) { 'com.oracle.truffle.r.test.library.fastr.TestJavaInterop$TestClass' } else { to <- .fastr.interop.new(.fastr.java.class('com.oracle.truffle.r.test.library.fastr.TestJavaInterop$TestClass'));.fastr.java.className(to) } +[1] "com.oracle.truffle.r.test.library.fastr.TestJavaInterop$TestClass" + +##com.oracle.truffle.r.test.library.fastr.TestJavaInterop.testGetClass# +#if (length(grep("FastR", R.Version()$version.string)) != 1) { cat('Error in .fastr.java.className(1) : unsupported type', '<<<NEWLINE>>>') } else { .fastr.java.className(1) } +Error in .fastr.java.className(1) : unsupported type + +##com.oracle.truffle.r.test.library.fastr.TestJavaInterop.testGetClass# +#if (length(grep("FastR", R.Version()$version.string)) != 1) { cat('Error in .fastr.java.className(NULL) : unsupported type', '<<<NEWLINE>>>') } else { .fastr.java.className(NULL) } +Error in .fastr.java.className(NULL) : unsupported type + +##com.oracle.truffle.r.test.library.fastr.TestJavaInterop.testGetClass# +#if (length(grep("FastR", R.Version()$version.string)) != 1) { cat('Error in .fastr.java.className(to$methodReturnsNull()) : unsupported type', '<<<NEWLINE>>>') } else { to <- .fastr.interop.new(.fastr.java.class('com.oracle.truffle.r.test.library.fastr.TestJavaInterop$TestClass'));.fastr.java.className(to$methodReturnsNull()) } +Error in .fastr.java.className(to$methodReturnsNull()) : unsupported type + ##com.oracle.truffle.r.test.library.fastr.TestJavaInterop.testIdentical# #if (length(grep("FastR", R.Version()$version.string)) != 1) { FALSE } else { b1 <- .fastr.interop.toByte(1); b2 <- .fastr.interop.toByte(1); identical(b1, b2) } [1] FALSE @@ -133189,6 +133205,510 @@ NULL #if (length(grep("FastR", R.Version()$version.string)) != 1) { c('staticField', 'staticMethod') } else { tc <- .fastr.java.class('com.oracle.truffle.r.test.library.fastr.TestJavaInterop$TestNamesClass'); sort(names(tc)) } [1] "staticField" "staticMethod" +##com.oracle.truffle.r.test.library.fastr.TestJavaInterop.testNewArray# +#if (length(grep("FastR", R.Version()$version.string)) != 1) { '[B' } else { a <- .fastr.java.newArray('byte', 10L); .fastr.java.className(a); } +[1] "[B" + +##com.oracle.truffle.r.test.library.fastr.TestJavaInterop.testNewArray# +#if (length(grep("FastR", R.Version()$version.string)) != 1) { '[C' } else { a <- .fastr.java.newArray('char', 10L); .fastr.java.className(a); } +[1] "[C" + +##com.oracle.truffle.r.test.library.fastr.TestJavaInterop.testNewArray# +#if (length(grep("FastR", R.Version()$version.string)) != 1) { '[D' } else { a <- .fastr.java.newArray('double', 10L); .fastr.java.className(a); } +[1] "[D" + +##com.oracle.truffle.r.test.library.fastr.TestJavaInterop.testNewArray# +#if (length(grep("FastR", R.Version()$version.string)) != 1) { '[F' } else { a <- .fastr.java.newArray('float', 10L); .fastr.java.className(a); } +[1] "[F" + +##com.oracle.truffle.r.test.library.fastr.TestJavaInterop.testNewArray# +#if (length(grep("FastR", R.Version()$version.string)) != 1) { '[I' } else { a <- .fastr.java.newArray('int', 10L); .fastr.java.className(a); } +[1] "[I" + +##com.oracle.truffle.r.test.library.fastr.TestJavaInterop.testNewArray# +#if (length(grep("FastR", R.Version()$version.string)) != 1) { '[J' } else { a <- .fastr.java.newArray('long', 10L); .fastr.java.className(a); } +[1] "[J" + +##com.oracle.truffle.r.test.library.fastr.TestJavaInterop.testNewArray# +#if (length(grep("FastR", R.Version()$version.string)) != 1) { '[Lcom.oracle.truffle.r.test.library.fastr.TestJavaInterop$TestClass;' } else { a <- .fastr.java.newArray('com.oracle.truffle.r.test.library.fastr.TestJavaInterop$TestClass', 10L); .fastr.java.className(a); } +[1] "[Lcom.oracle.truffle.r.test.library.fastr.TestJavaInterop$TestClass;" + +##com.oracle.truffle.r.test.library.fastr.TestJavaInterop.testNewArray# +#if (length(grep("FastR", R.Version()$version.string)) != 1) { '[Ljava.lang.Boolean;' } else { a <- .fastr.java.newArray('java.lang.Boolean', 10L); .fastr.java.className(a); } +[1] "[Ljava.lang.Boolean;" + +##com.oracle.truffle.r.test.library.fastr.TestJavaInterop.testNewArray# +#if (length(grep("FastR", R.Version()$version.string)) != 1) { '[Ljava.lang.Byte;' } else { a <- .fastr.java.newArray('java.lang.Byte', 10L); .fastr.java.className(a); } +[1] "[Ljava.lang.Byte;" + +##com.oracle.truffle.r.test.library.fastr.TestJavaInterop.testNewArray# +#if (length(grep("FastR", R.Version()$version.string)) != 1) { '[Ljava.lang.Character;' } else { a <- .fastr.java.newArray('java.lang.Character', 10L); .fastr.java.className(a); } +[1] "[Ljava.lang.Character;" + +##com.oracle.truffle.r.test.library.fastr.TestJavaInterop.testNewArray# +#if (length(grep("FastR", R.Version()$version.string)) != 1) { '[Ljava.lang.Double;' } else { a <- .fastr.java.newArray('java.lang.Double', 10L); .fastr.java.className(a); } +[1] "[Ljava.lang.Double;" + +##com.oracle.truffle.r.test.library.fastr.TestJavaInterop.testNewArray# +#if (length(grep("FastR", R.Version()$version.string)) != 1) { '[Ljava.lang.Float;' } else { a <- .fastr.java.newArray('java.lang.Float', 10L); .fastr.java.className(a); } +[1] "[Ljava.lang.Float;" + +##com.oracle.truffle.r.test.library.fastr.TestJavaInterop.testNewArray# +#if (length(grep("FastR", R.Version()$version.string)) != 1) { '[Ljava.lang.Integer;' } else { a <- .fastr.java.newArray('java.lang.Integer', 10L); .fastr.java.className(a); } +[1] "[Ljava.lang.Integer;" + +##com.oracle.truffle.r.test.library.fastr.TestJavaInterop.testNewArray# +#if (length(grep("FastR", R.Version()$version.string)) != 1) { '[Ljava.lang.Long;' } else { a <- .fastr.java.newArray('java.lang.Long', 10L); .fastr.java.className(a); } +[1] "[Ljava.lang.Long;" + +##com.oracle.truffle.r.test.library.fastr.TestJavaInterop.testNewArray# +#if (length(grep("FastR", R.Version()$version.string)) != 1) { '[Ljava.lang.Short;' } else { a <- .fastr.java.newArray('java.lang.Short', 10L); .fastr.java.className(a); } +[1] "[Ljava.lang.Short;" + +##com.oracle.truffle.r.test.library.fastr.TestJavaInterop.testNewArray# +#if (length(grep("FastR", R.Version()$version.string)) != 1) { '[Ljava.lang.String;' } else { a <- .fastr.java.newArray('java.lang.String', 10L); .fastr.java.className(a); } +[1] "[Ljava.lang.String;" + +##com.oracle.truffle.r.test.library.fastr.TestJavaInterop.testNewArray# +#if (length(grep("FastR", R.Version()$version.string)) != 1) { '[S' } else { a <- .fastr.java.newArray('short', 10L); .fastr.java.className(a); } +[1] "[S" + +##com.oracle.truffle.r.test.library.fastr.TestJavaInterop.testNewArray# +#if (length(grep("FastR", R.Version()$version.string)) != 1) { '[Z' } else { a <- .fastr.java.newArray('boolean', 10L); .fastr.java.className(a); } +[1] "[Z" + +##com.oracle.truffle.r.test.library.fastr.TestJavaInterop.testNewArray# +#if (length(grep("FastR", R.Version()$version.string)) != 1) { '[[B' } else { a <- .fastr.java.newArray('byte', c(2L, 3L)); .fastr.java.className(a); } +[1] "[[B" + +##com.oracle.truffle.r.test.library.fastr.TestJavaInterop.testNewArray# +#if (length(grep("FastR", R.Version()$version.string)) != 1) { '[[C' } else { a <- .fastr.java.newArray('char', c(2L, 3L)); .fastr.java.className(a); } +[1] "[[C" + +##com.oracle.truffle.r.test.library.fastr.TestJavaInterop.testNewArray# +#if (length(grep("FastR", R.Version()$version.string)) != 1) { '[[D' } else { a <- .fastr.java.newArray('double', c(2L, 3L)); .fastr.java.className(a); } +[1] "[[D" + +##com.oracle.truffle.r.test.library.fastr.TestJavaInterop.testNewArray# +#if (length(grep("FastR", R.Version()$version.string)) != 1) { '[[F' } else { a <- .fastr.java.newArray('float', c(2L, 3L)); .fastr.java.className(a); } +[1] "[[F" + +##com.oracle.truffle.r.test.library.fastr.TestJavaInterop.testNewArray# +#if (length(grep("FastR", R.Version()$version.string)) != 1) { '[[I' } else { a <- .fastr.java.newArray('int', c(2L, 3L)); .fastr.java.className(a); } +[1] "[[I" + +##com.oracle.truffle.r.test.library.fastr.TestJavaInterop.testNewArray# +#if (length(grep("FastR", R.Version()$version.string)) != 1) { '[[J' } else { a <- .fastr.java.newArray('long', c(2L, 3L)); .fastr.java.className(a); } +[1] "[[J" + +##com.oracle.truffle.r.test.library.fastr.TestJavaInterop.testNewArray# +#if (length(grep("FastR", R.Version()$version.string)) != 1) { '[[Lcom.oracle.truffle.r.test.library.fastr.TestJavaInterop$TestClass;' } else { a <- .fastr.java.newArray('com.oracle.truffle.r.test.library.fastr.TestJavaInterop$TestClass', c(2L, 3L)); .fastr.java.className(a); } +[1] "[[Lcom.oracle.truffle.r.test.library.fastr.TestJavaInterop$TestClass;" + +##com.oracle.truffle.r.test.library.fastr.TestJavaInterop.testNewArray# +#if (length(grep("FastR", R.Version()$version.string)) != 1) { '[[Ljava.lang.Boolean;' } else { a <- .fastr.java.newArray('java.lang.Boolean', c(2L, 3L)); .fastr.java.className(a); } +[1] "[[Ljava.lang.Boolean;" + +##com.oracle.truffle.r.test.library.fastr.TestJavaInterop.testNewArray# +#if (length(grep("FastR", R.Version()$version.string)) != 1) { '[[Ljava.lang.Byte;' } else { a <- .fastr.java.newArray('java.lang.Byte', c(2L, 3L)); .fastr.java.className(a); } +[1] "[[Ljava.lang.Byte;" + +##com.oracle.truffle.r.test.library.fastr.TestJavaInterop.testNewArray# +#if (length(grep("FastR", R.Version()$version.string)) != 1) { '[[Ljava.lang.Character;' } else { a <- .fastr.java.newArray('java.lang.Character', c(2L, 3L)); .fastr.java.className(a); } +[1] "[[Ljava.lang.Character;" + +##com.oracle.truffle.r.test.library.fastr.TestJavaInterop.testNewArray# +#if (length(grep("FastR", R.Version()$version.string)) != 1) { '[[Ljava.lang.Double;' } else { a <- .fastr.java.newArray('java.lang.Double', c(2L, 3L)); .fastr.java.className(a); } +[1] "[[Ljava.lang.Double;" + +##com.oracle.truffle.r.test.library.fastr.TestJavaInterop.testNewArray# +#if (length(grep("FastR", R.Version()$version.string)) != 1) { '[[Ljava.lang.Float;' } else { a <- .fastr.java.newArray('java.lang.Float', c(2L, 3L)); .fastr.java.className(a); } +[1] "[[Ljava.lang.Float;" + +##com.oracle.truffle.r.test.library.fastr.TestJavaInterop.testNewArray# +#if (length(grep("FastR", R.Version()$version.string)) != 1) { '[[Ljava.lang.Integer;' } else { a <- .fastr.java.newArray('java.lang.Integer', c(2L, 3L)); .fastr.java.className(a); } +[1] "[[Ljava.lang.Integer;" + +##com.oracle.truffle.r.test.library.fastr.TestJavaInterop.testNewArray# +#if (length(grep("FastR", R.Version()$version.string)) != 1) { '[[Ljava.lang.Long;' } else { a <- .fastr.java.newArray('java.lang.Long', c(2L, 3L)); .fastr.java.className(a); } +[1] "[[Ljava.lang.Long;" + +##com.oracle.truffle.r.test.library.fastr.TestJavaInterop.testNewArray# +#if (length(grep("FastR", R.Version()$version.string)) != 1) { '[[Ljava.lang.Short;' } else { a <- .fastr.java.newArray('java.lang.Short', c(2L, 3L)); .fastr.java.className(a); } +[1] "[[Ljava.lang.Short;" + +##com.oracle.truffle.r.test.library.fastr.TestJavaInterop.testNewArray# +#if (length(grep("FastR", R.Version()$version.string)) != 1) { '[[Ljava.lang.String;' } else { a <- .fastr.java.newArray('java.lang.String', c(2L, 3L)); .fastr.java.className(a); } +[1] "[[Ljava.lang.String;" + +##com.oracle.truffle.r.test.library.fastr.TestJavaInterop.testNewArray# +#if (length(grep("FastR", R.Version()$version.string)) != 1) { '[[S' } else { a <- .fastr.java.newArray('short', c(2L, 3L)); .fastr.java.className(a); } +[1] "[[S" + +##com.oracle.truffle.r.test.library.fastr.TestJavaInterop.testNewArray# +#if (length(grep("FastR", R.Version()$version.string)) != 1) { '[[Z' } else { a <- .fastr.java.newArray('boolean', c(2L, 3L)); .fastr.java.className(a); } +[1] "[[Z" + +##com.oracle.truffle.r.test.library.fastr.TestJavaInterop.testNewArray# +#if (length(grep("FastR", R.Version()$version.string)) != 1) { 10L } else { a <- .fastr.java.newArray('boolean', 10L); length(a); } +[1] 10 + +##com.oracle.truffle.r.test.library.fastr.TestJavaInterop.testNewArray# +#if (length(grep("FastR", R.Version()$version.string)) != 1) { 10L } else { a <- .fastr.java.newArray('byte', 10L); length(a); } +[1] 10 + +##com.oracle.truffle.r.test.library.fastr.TestJavaInterop.testNewArray# +#if (length(grep("FastR", R.Version()$version.string)) != 1) { 10L } else { a <- .fastr.java.newArray('char', 10L); length(a); } +[1] 10 + +##com.oracle.truffle.r.test.library.fastr.TestJavaInterop.testNewArray# +#if (length(grep("FastR", R.Version()$version.string)) != 1) { 10L } else { a <- .fastr.java.newArray('com.oracle.truffle.r.test.library.fastr.TestJavaInterop$TestClass', 10L); length(a); } +[1] 10 + +##com.oracle.truffle.r.test.library.fastr.TestJavaInterop.testNewArray# +#if (length(grep("FastR", R.Version()$version.string)) != 1) { 10L } else { a <- .fastr.java.newArray('double', 10L); length(a); } +[1] 10 + +##com.oracle.truffle.r.test.library.fastr.TestJavaInterop.testNewArray# +#if (length(grep("FastR", R.Version()$version.string)) != 1) { 10L } else { a <- .fastr.java.newArray('float', 10L); length(a); } +[1] 10 + +##com.oracle.truffle.r.test.library.fastr.TestJavaInterop.testNewArray# +#if (length(grep("FastR", R.Version()$version.string)) != 1) { 10L } else { a <- .fastr.java.newArray('int', 10L); length(a); } +[1] 10 + +##com.oracle.truffle.r.test.library.fastr.TestJavaInterop.testNewArray# +#if (length(grep("FastR", R.Version()$version.string)) != 1) { 10L } else { a <- .fastr.java.newArray('java.lang.Boolean', 10L); length(a); } +[1] 10 + +##com.oracle.truffle.r.test.library.fastr.TestJavaInterop.testNewArray# +#if (length(grep("FastR", R.Version()$version.string)) != 1) { 10L } else { a <- .fastr.java.newArray('java.lang.Byte', 10L); length(a); } +[1] 10 + +##com.oracle.truffle.r.test.library.fastr.TestJavaInterop.testNewArray# +#if (length(grep("FastR", R.Version()$version.string)) != 1) { 10L } else { a <- .fastr.java.newArray('java.lang.Character', 10L); length(a); } +[1] 10 + +##com.oracle.truffle.r.test.library.fastr.TestJavaInterop.testNewArray# +#if (length(grep("FastR", R.Version()$version.string)) != 1) { 10L } else { a <- .fastr.java.newArray('java.lang.Double', 10L); length(a); } +[1] 10 + +##com.oracle.truffle.r.test.library.fastr.TestJavaInterop.testNewArray# +#if (length(grep("FastR", R.Version()$version.string)) != 1) { 10L } else { a <- .fastr.java.newArray('java.lang.Float', 10L); length(a); } +[1] 10 + +##com.oracle.truffle.r.test.library.fastr.TestJavaInterop.testNewArray# +#if (length(grep("FastR", R.Version()$version.string)) != 1) { 10L } else { a <- .fastr.java.newArray('java.lang.Integer', 10L); length(a); } +[1] 10 + +##com.oracle.truffle.r.test.library.fastr.TestJavaInterop.testNewArray# +#if (length(grep("FastR", R.Version()$version.string)) != 1) { 10L } else { a <- .fastr.java.newArray('java.lang.Long', 10L); length(a); } +[1] 10 + +##com.oracle.truffle.r.test.library.fastr.TestJavaInterop.testNewArray# +#if (length(grep("FastR", R.Version()$version.string)) != 1) { 10L } else { a <- .fastr.java.newArray('java.lang.Short', 10L); length(a); } +[1] 10 + +##com.oracle.truffle.r.test.library.fastr.TestJavaInterop.testNewArray# +#if (length(grep("FastR", R.Version()$version.string)) != 1) { 10L } else { a <- .fastr.java.newArray('java.lang.String', 10L); length(a); } +[1] 10 + +##com.oracle.truffle.r.test.library.fastr.TestJavaInterop.testNewArray# +#if (length(grep("FastR", R.Version()$version.string)) != 1) { 10L } else { a <- .fastr.java.newArray('long', 10L); length(a); } +[1] 10 + +##com.oracle.truffle.r.test.library.fastr.TestJavaInterop.testNewArray# +#if (length(grep("FastR", R.Version()$version.string)) != 1) { 10L } else { a <- .fastr.java.newArray('short', 10L); length(a); } +[1] 10 + +##com.oracle.truffle.r.test.library.fastr.TestJavaInterop.testNewArray# +#if (length(grep("FastR", R.Version()$version.string)) != 1) { 2L } else { a <- .fastr.java.newArray('boolean', c(2L, 3L)); length(a); } +[1] 2 + +##com.oracle.truffle.r.test.library.fastr.TestJavaInterop.testNewArray# +#if (length(grep("FastR", R.Version()$version.string)) != 1) { 2L } else { a <- .fastr.java.newArray('byte', c(2L, 3L)); length(a); } +[1] 2 + +##com.oracle.truffle.r.test.library.fastr.TestJavaInterop.testNewArray# +#if (length(grep("FastR", R.Version()$version.string)) != 1) { 2L } else { a <- .fastr.java.newArray('char', c(2L, 3L)); length(a); } +[1] 2 + +##com.oracle.truffle.r.test.library.fastr.TestJavaInterop.testNewArray# +#if (length(grep("FastR", R.Version()$version.string)) != 1) { 2L } else { a <- .fastr.java.newArray('com.oracle.truffle.r.test.library.fastr.TestJavaInterop$TestClass', c(2L, 3L)); length(a); } +[1] 2 + +##com.oracle.truffle.r.test.library.fastr.TestJavaInterop.testNewArray# +#if (length(grep("FastR", R.Version()$version.string)) != 1) { 2L } else { a <- .fastr.java.newArray('double', c(2L, 3L)); length(a); } +[1] 2 + +##com.oracle.truffle.r.test.library.fastr.TestJavaInterop.testNewArray# +#if (length(grep("FastR", R.Version()$version.string)) != 1) { 2L } else { a <- .fastr.java.newArray('float', c(2L, 3L)); length(a); } +[1] 2 + +##com.oracle.truffle.r.test.library.fastr.TestJavaInterop.testNewArray# +#if (length(grep("FastR", R.Version()$version.string)) != 1) { 2L } else { a <- .fastr.java.newArray('int', c(2L, 3L)); length(a); } +[1] 2 + +##com.oracle.truffle.r.test.library.fastr.TestJavaInterop.testNewArray# +#if (length(grep("FastR", R.Version()$version.string)) != 1) { 2L } else { a <- .fastr.java.newArray('java.lang.Boolean', c(2L, 3L)); length(a); } +[1] 2 + +##com.oracle.truffle.r.test.library.fastr.TestJavaInterop.testNewArray# +#if (length(grep("FastR", R.Version()$version.string)) != 1) { 2L } else { a <- .fastr.java.newArray('java.lang.Byte', c(2L, 3L)); length(a); } +[1] 2 + +##com.oracle.truffle.r.test.library.fastr.TestJavaInterop.testNewArray# +#if (length(grep("FastR", R.Version()$version.string)) != 1) { 2L } else { a <- .fastr.java.newArray('java.lang.Character', c(2L, 3L)); length(a); } +[1] 2 + +##com.oracle.truffle.r.test.library.fastr.TestJavaInterop.testNewArray# +#if (length(grep("FastR", R.Version()$version.string)) != 1) { 2L } else { a <- .fastr.java.newArray('java.lang.Double', c(2L, 3L)); length(a); } +[1] 2 + +##com.oracle.truffle.r.test.library.fastr.TestJavaInterop.testNewArray# +#if (length(grep("FastR", R.Version()$version.string)) != 1) { 2L } else { a <- .fastr.java.newArray('java.lang.Float', c(2L, 3L)); length(a); } +[1] 2 + +##com.oracle.truffle.r.test.library.fastr.TestJavaInterop.testNewArray# +#if (length(grep("FastR", R.Version()$version.string)) != 1) { 2L } else { a <- .fastr.java.newArray('java.lang.Integer', c(2L, 3L)); length(a); } +[1] 2 + +##com.oracle.truffle.r.test.library.fastr.TestJavaInterop.testNewArray# +#if (length(grep("FastR", R.Version()$version.string)) != 1) { 2L } else { a <- .fastr.java.newArray('java.lang.Long', c(2L, 3L)); length(a); } +[1] 2 + +##com.oracle.truffle.r.test.library.fastr.TestJavaInterop.testNewArray# +#if (length(grep("FastR", R.Version()$version.string)) != 1) { 2L } else { a <- .fastr.java.newArray('java.lang.Short', c(2L, 3L)); length(a); } +[1] 2 + +##com.oracle.truffle.r.test.library.fastr.TestJavaInterop.testNewArray# +#if (length(grep("FastR", R.Version()$version.string)) != 1) { 2L } else { a <- .fastr.java.newArray('java.lang.String', c(2L, 3L)); length(a); } +[1] 2 + +##com.oracle.truffle.r.test.library.fastr.TestJavaInterop.testNewArray# +#if (length(grep("FastR", R.Version()$version.string)) != 1) { 2L } else { a <- .fastr.java.newArray('long', c(2L, 3L)); length(a); } +[1] 2 + +##com.oracle.truffle.r.test.library.fastr.TestJavaInterop.testNewArray# +#if (length(grep("FastR", R.Version()$version.string)) != 1) { 2L } else { a <- .fastr.java.newArray('short', c(2L, 3L)); length(a); } +[1] 2 + +##com.oracle.truffle.r.test.library.fastr.TestJavaInterop.testNewArray# +#if (length(grep("FastR", R.Version()$version.string)) != 1) { 3L } else { a <- .fastr.java.newArray('boolean', c(2L, 3L)); length(a[1]); } +[1] 3 + +##com.oracle.truffle.r.test.library.fastr.TestJavaInterop.testNewArray# +#if (length(grep("FastR", R.Version()$version.string)) != 1) { 3L } else { a <- .fastr.java.newArray('byte', c(2L, 3L)); length(a[1]); } +[1] 3 + +##com.oracle.truffle.r.test.library.fastr.TestJavaInterop.testNewArray# +#if (length(grep("FastR", R.Version()$version.string)) != 1) { 3L } else { a <- .fastr.java.newArray('char', c(2L, 3L)); length(a[1]); } +[1] 3 + +##com.oracle.truffle.r.test.library.fastr.TestJavaInterop.testNewArray# +#if (length(grep("FastR", R.Version()$version.string)) != 1) { 3L } else { a <- .fastr.java.newArray('com.oracle.truffle.r.test.library.fastr.TestJavaInterop$TestClass', c(2L, 3L)); length(a[1]); } +[1] 3 + +##com.oracle.truffle.r.test.library.fastr.TestJavaInterop.testNewArray# +#if (length(grep("FastR", R.Version()$version.string)) != 1) { 3L } else { a <- .fastr.java.newArray('double', c(2L, 3L)); length(a[1]); } +[1] 3 + +##com.oracle.truffle.r.test.library.fastr.TestJavaInterop.testNewArray# +#if (length(grep("FastR", R.Version()$version.string)) != 1) { 3L } else { a <- .fastr.java.newArray('float', c(2L, 3L)); length(a[1]); } +[1] 3 + +##com.oracle.truffle.r.test.library.fastr.TestJavaInterop.testNewArray# +#if (length(grep("FastR", R.Version()$version.string)) != 1) { 3L } else { a <- .fastr.java.newArray('int', c(2L, 3L)); length(a[1]); } +[1] 3 + +##com.oracle.truffle.r.test.library.fastr.TestJavaInterop.testNewArray# +#if (length(grep("FastR", R.Version()$version.string)) != 1) { 3L } else { a <- .fastr.java.newArray('java.lang.Boolean', c(2L, 3L)); length(a[1]); } +[1] 3 + +##com.oracle.truffle.r.test.library.fastr.TestJavaInterop.testNewArray# +#if (length(grep("FastR", R.Version()$version.string)) != 1) { 3L } else { a <- .fastr.java.newArray('java.lang.Byte', c(2L, 3L)); length(a[1]); } +[1] 3 + +##com.oracle.truffle.r.test.library.fastr.TestJavaInterop.testNewArray# +#if (length(grep("FastR", R.Version()$version.string)) != 1) { 3L } else { a <- .fastr.java.newArray('java.lang.Character', c(2L, 3L)); length(a[1]); } +[1] 3 + +##com.oracle.truffle.r.test.library.fastr.TestJavaInterop.testNewArray# +#if (length(grep("FastR", R.Version()$version.string)) != 1) { 3L } else { a <- .fastr.java.newArray('java.lang.Double', c(2L, 3L)); length(a[1]); } +[1] 3 + +##com.oracle.truffle.r.test.library.fastr.TestJavaInterop.testNewArray# +#if (length(grep("FastR", R.Version()$version.string)) != 1) { 3L } else { a <- .fastr.java.newArray('java.lang.Float', c(2L, 3L)); length(a[1]); } +[1] 3 + +##com.oracle.truffle.r.test.library.fastr.TestJavaInterop.testNewArray# +#if (length(grep("FastR", R.Version()$version.string)) != 1) { 3L } else { a <- .fastr.java.newArray('java.lang.Integer', c(2L, 3L)); length(a[1]); } +[1] 3 + +##com.oracle.truffle.r.test.library.fastr.TestJavaInterop.testNewArray# +#if (length(grep("FastR", R.Version()$version.string)) != 1) { 3L } else { a <- .fastr.java.newArray('java.lang.Long', c(2L, 3L)); length(a[1]); } +[1] 3 + +##com.oracle.truffle.r.test.library.fastr.TestJavaInterop.testNewArray# +#if (length(grep("FastR", R.Version()$version.string)) != 1) { 3L } else { a <- .fastr.java.newArray('java.lang.Short', c(2L, 3L)); length(a[1]); } +[1] 3 + +##com.oracle.truffle.r.test.library.fastr.TestJavaInterop.testNewArray# +#if (length(grep("FastR", R.Version()$version.string)) != 1) { 3L } else { a <- .fastr.java.newArray('java.lang.String', c(2L, 3L)); length(a[1]); } +[1] 3 + +##com.oracle.truffle.r.test.library.fastr.TestJavaInterop.testNewArray# +#if (length(grep("FastR", R.Version()$version.string)) != 1) { 3L } else { a <- .fastr.java.newArray('long', c(2L, 3L)); length(a[1]); } +[1] 3 + +##com.oracle.truffle.r.test.library.fastr.TestJavaInterop.testNewArray# +#if (length(grep("FastR", R.Version()$version.string)) != 1) { 3L } else { a <- .fastr.java.newArray('short', c(2L, 3L)); length(a[1]); } +[1] 3 + +##com.oracle.truffle.r.test.library.fastr.TestJavaInterop.testNewArray# +#if (length(grep("FastR", R.Version()$version.string)) != 1) { TRUE } else { a <- .fastr.java.newArray('boolean', 10L); .fastr.interop.isArray(a); } +[1] TRUE + +##com.oracle.truffle.r.test.library.fastr.TestJavaInterop.testNewArray# +#if (length(grep("FastR", R.Version()$version.string)) != 1) { TRUE } else { a <- .fastr.java.newArray('boolean', c(2L, 3L)); .fastr.interop.isArray(a); } +[1] TRUE + +##com.oracle.truffle.r.test.library.fastr.TestJavaInterop.testNewArray# +#if (length(grep("FastR", R.Version()$version.string)) != 1) { TRUE } else { a <- .fastr.java.newArray('byte', 10L); .fastr.interop.isArray(a); } +[1] TRUE + +##com.oracle.truffle.r.test.library.fastr.TestJavaInterop.testNewArray# +#if (length(grep("FastR", R.Version()$version.string)) != 1) { TRUE } else { a <- .fastr.java.newArray('byte', c(2L, 3L)); .fastr.interop.isArray(a); } +[1] TRUE + +##com.oracle.truffle.r.test.library.fastr.TestJavaInterop.testNewArray# +#if (length(grep("FastR", R.Version()$version.string)) != 1) { TRUE } else { a <- .fastr.java.newArray('char', 10L); .fastr.interop.isArray(a); } +[1] TRUE + +##com.oracle.truffle.r.test.library.fastr.TestJavaInterop.testNewArray# +#if (length(grep("FastR", R.Version()$version.string)) != 1) { TRUE } else { a <- .fastr.java.newArray('char', c(2L, 3L)); .fastr.interop.isArray(a); } +[1] TRUE + +##com.oracle.truffle.r.test.library.fastr.TestJavaInterop.testNewArray# +#if (length(grep("FastR", R.Version()$version.string)) != 1) { TRUE } else { a <- .fastr.java.newArray('com.oracle.truffle.r.test.library.fastr.TestJavaInterop$TestClass', 10L); .fastr.interop.isArray(a); } +[1] TRUE + +##com.oracle.truffle.r.test.library.fastr.TestJavaInterop.testNewArray# +#if (length(grep("FastR", R.Version()$version.string)) != 1) { TRUE } else { a <- .fastr.java.newArray('com.oracle.truffle.r.test.library.fastr.TestJavaInterop$TestClass', c(2L, 3L)); .fastr.interop.isArray(a); } +[1] TRUE + +##com.oracle.truffle.r.test.library.fastr.TestJavaInterop.testNewArray# +#if (length(grep("FastR", R.Version()$version.string)) != 1) { TRUE } else { a <- .fastr.java.newArray('double', 10L); .fastr.interop.isArray(a); } +[1] TRUE + +##com.oracle.truffle.r.test.library.fastr.TestJavaInterop.testNewArray# +#if (length(grep("FastR", R.Version()$version.string)) != 1) { TRUE } else { a <- .fastr.java.newArray('double', c(2L, 3L)); .fastr.interop.isArray(a); } +[1] TRUE + +##com.oracle.truffle.r.test.library.fastr.TestJavaInterop.testNewArray# +#if (length(grep("FastR", R.Version()$version.string)) != 1) { TRUE } else { a <- .fastr.java.newArray('float', 10L); .fastr.interop.isArray(a); } +[1] TRUE + +##com.oracle.truffle.r.test.library.fastr.TestJavaInterop.testNewArray# +#if (length(grep("FastR", R.Version()$version.string)) != 1) { TRUE } else { a <- .fastr.java.newArray('float', c(2L, 3L)); .fastr.interop.isArray(a); } +[1] TRUE + +##com.oracle.truffle.r.test.library.fastr.TestJavaInterop.testNewArray# +#if (length(grep("FastR", R.Version()$version.string)) != 1) { TRUE } else { a <- .fastr.java.newArray('int', 10L); .fastr.interop.isArray(a); } +[1] TRUE + +##com.oracle.truffle.r.test.library.fastr.TestJavaInterop.testNewArray# +#if (length(grep("FastR", R.Version()$version.string)) != 1) { TRUE } else { a <- .fastr.java.newArray('int', c(2L, 3L)); .fastr.interop.isArray(a); } +[1] TRUE + +##com.oracle.truffle.r.test.library.fastr.TestJavaInterop.testNewArray# +#if (length(grep("FastR", R.Version()$version.string)) != 1) { TRUE } else { a <- .fastr.java.newArray('java.lang.Boolean', 10L); .fastr.interop.isArray(a); } +[1] TRUE + +##com.oracle.truffle.r.test.library.fastr.TestJavaInterop.testNewArray# +#if (length(grep("FastR", R.Version()$version.string)) != 1) { TRUE } else { a <- .fastr.java.newArray('java.lang.Boolean', c(2L, 3L)); .fastr.interop.isArray(a); } +[1] TRUE + +##com.oracle.truffle.r.test.library.fastr.TestJavaInterop.testNewArray# +#if (length(grep("FastR", R.Version()$version.string)) != 1) { TRUE } else { a <- .fastr.java.newArray('java.lang.Byte', 10L); .fastr.interop.isArray(a); } +[1] TRUE + +##com.oracle.truffle.r.test.library.fastr.TestJavaInterop.testNewArray# +#if (length(grep("FastR", R.Version()$version.string)) != 1) { TRUE } else { a <- .fastr.java.newArray('java.lang.Byte', c(2L, 3L)); .fastr.interop.isArray(a); } +[1] TRUE + +##com.oracle.truffle.r.test.library.fastr.TestJavaInterop.testNewArray# +#if (length(grep("FastR", R.Version()$version.string)) != 1) { TRUE } else { a <- .fastr.java.newArray('java.lang.Character', 10L); .fastr.interop.isArray(a); } +[1] TRUE + +##com.oracle.truffle.r.test.library.fastr.TestJavaInterop.testNewArray# +#if (length(grep("FastR", R.Version()$version.string)) != 1) { TRUE } else { a <- .fastr.java.newArray('java.lang.Character', c(2L, 3L)); .fastr.interop.isArray(a); } +[1] TRUE + +##com.oracle.truffle.r.test.library.fastr.TestJavaInterop.testNewArray# +#if (length(grep("FastR", R.Version()$version.string)) != 1) { TRUE } else { a <- .fastr.java.newArray('java.lang.Double', 10L); .fastr.interop.isArray(a); } +[1] TRUE + +##com.oracle.truffle.r.test.library.fastr.TestJavaInterop.testNewArray# +#if (length(grep("FastR", R.Version()$version.string)) != 1) { TRUE } else { a <- .fastr.java.newArray('java.lang.Double', c(2L, 3L)); .fastr.interop.isArray(a); } +[1] TRUE + +##com.oracle.truffle.r.test.library.fastr.TestJavaInterop.testNewArray# +#if (length(grep("FastR", R.Version()$version.string)) != 1) { TRUE } else { a <- .fastr.java.newArray('java.lang.Float', 10L); .fastr.interop.isArray(a); } +[1] TRUE + +##com.oracle.truffle.r.test.library.fastr.TestJavaInterop.testNewArray# +#if (length(grep("FastR", R.Version()$version.string)) != 1) { TRUE } else { a <- .fastr.java.newArray('java.lang.Float', c(2L, 3L)); .fastr.interop.isArray(a); } +[1] TRUE + +##com.oracle.truffle.r.test.library.fastr.TestJavaInterop.testNewArray# +#if (length(grep("FastR", R.Version()$version.string)) != 1) { TRUE } else { a <- .fastr.java.newArray('java.lang.Integer', 10L); .fastr.interop.isArray(a); } +[1] TRUE + +##com.oracle.truffle.r.test.library.fastr.TestJavaInterop.testNewArray# +#if (length(grep("FastR", R.Version()$version.string)) != 1) { TRUE } else { a <- .fastr.java.newArray('java.lang.Integer', c(2L, 3L)); .fastr.interop.isArray(a); } +[1] TRUE + +##com.oracle.truffle.r.test.library.fastr.TestJavaInterop.testNewArray# +#if (length(grep("FastR", R.Version()$version.string)) != 1) { TRUE } else { a <- .fastr.java.newArray('java.lang.Long', 10L); .fastr.interop.isArray(a); } +[1] TRUE + +##com.oracle.truffle.r.test.library.fastr.TestJavaInterop.testNewArray# +#if (length(grep("FastR", R.Version()$version.string)) != 1) { TRUE } else { a <- .fastr.java.newArray('java.lang.Long', c(2L, 3L)); .fastr.interop.isArray(a); } +[1] TRUE + +##com.oracle.truffle.r.test.library.fastr.TestJavaInterop.testNewArray# +#if (length(grep("FastR", R.Version()$version.string)) != 1) { TRUE } else { a <- .fastr.java.newArray('java.lang.Short', 10L); .fastr.interop.isArray(a); } +[1] TRUE + +##com.oracle.truffle.r.test.library.fastr.TestJavaInterop.testNewArray# +#if (length(grep("FastR", R.Version()$version.string)) != 1) { TRUE } else { a <- .fastr.java.newArray('java.lang.Short', c(2L, 3L)); .fastr.interop.isArray(a); } +[1] TRUE + +##com.oracle.truffle.r.test.library.fastr.TestJavaInterop.testNewArray# +#if (length(grep("FastR", R.Version()$version.string)) != 1) { TRUE } else { a <- .fastr.java.newArray('java.lang.String', 10L); .fastr.interop.isArray(a); } +[1] TRUE + +##com.oracle.truffle.r.test.library.fastr.TestJavaInterop.testNewArray# +#if (length(grep("FastR", R.Version()$version.string)) != 1) { TRUE } else { a <- .fastr.java.newArray('java.lang.String', c(2L, 3L)); .fastr.interop.isArray(a); } +[1] TRUE + +##com.oracle.truffle.r.test.library.fastr.TestJavaInterop.testNewArray# +#if (length(grep("FastR", R.Version()$version.string)) != 1) { TRUE } else { a <- .fastr.java.newArray('long', 10L); .fastr.interop.isArray(a); } +[1] TRUE + +##com.oracle.truffle.r.test.library.fastr.TestJavaInterop.testNewArray# +#if (length(grep("FastR", R.Version()$version.string)) != 1) { TRUE } else { a <- .fastr.java.newArray('long', c(2L, 3L)); .fastr.interop.isArray(a); } +[1] TRUE + +##com.oracle.truffle.r.test.library.fastr.TestJavaInterop.testNewArray# +#if (length(grep("FastR", R.Version()$version.string)) != 1) { TRUE } else { a <- .fastr.java.newArray('short', 10L); .fastr.interop.isArray(a); } +[1] TRUE + +##com.oracle.truffle.r.test.library.fastr.TestJavaInterop.testNewArray# +#if (length(grep("FastR", R.Version()$version.string)) != 1) { TRUE } else { a <- .fastr.java.newArray('short', c(2L, 3L)); .fastr.interop.isArray(a); } +[1] TRUE + ##com.oracle.truffle.r.test.library.fastr.TestJavaInterop.testNewWithJavaClass# #if (length(grep("FastR", R.Version()$version.string)) != 1) { 2147483647 } else { tc <- .fastr.java.class('com.oracle.truffle.r.test.library.fastr.TestJavaInterop$TestClass'); to <- new(tc); to$fieldInteger } [1] 2147483647 diff --git a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/library/fastr/TestJavaInterop.java b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/library/fastr/TestJavaInterop.java index 9dcd1dcb7a2b132989bac30db739fa627e2e5de9..07314e25fe1a8a2d7c6ea2bbe74895decffbee4e 100644 --- a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/library/fastr/TestJavaInterop.java +++ b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/library/fastr/TestJavaInterop.java @@ -176,6 +176,50 @@ public class TestJavaInterop extends TestBase { assertEvalFastR(Ignored.Unimplemented, "a <- .fastr.java.toArray(1L,,F); a;", getRValue(new int[]{1})); } + @Test + public void testNewArray() { + testNewArray("java.lang.Boolean"); + testNewArray("java.lang.Byte"); + testNewArray("java.lang.Character"); + testNewArray("java.lang.Double"); + testNewArray("java.lang.Float"); + testNewArray("java.lang.Integer"); + testNewArray("java.lang.Long"); + testNewArray("java.lang.Short"); + testNewArray("java.lang.String"); + + testNewArray("boolean"); + testNewArray("byte"); + testNewArray("char"); + testNewArray("double"); + testNewArray("float"); + testNewArray("int"); + testNewArray("long"); + testNewArray("short"); + + testNewArray("com.oracle.truffle.r.test.library.fastr.TestJavaInterop$TestClass"); + } + + public void testNewArray(String className) { + assertEvalFastR("a <- .fastr.java.newArray('" + className + "', 10L); .fastr.interop.isArray(a);", "TRUE"); + assertEvalFastR("a <- .fastr.java.newArray('" + className + "', 10L); length(a);", "10L"); + assertEvalFastR("a <- .fastr.java.newArray('" + className + "', 10L); .fastr.java.className(a);", toArrayClassName(className, 1)); + + assertEvalFastR("a <- .fastr.java.newArray('" + className + "', c(2L, 3L)); .fastr.interop.isArray(a);", "TRUE"); + assertEvalFastR("a <- .fastr.java.newArray('" + className + "', c(2L, 3L)); length(a);", "2L"); + assertEvalFastR("a <- .fastr.java.newArray('" + className + "', c(2L, 3L)); length(a[1]);", "3L"); + assertEvalFastR("a <- .fastr.java.newArray('" + className + "', c(2L, 3L)); .fastr.java.className(a);", toArrayClassName(className, 2)); + } + + @Test + public void testGetClass() { + assertEvalFastR(CREATE_TRUFFLE_OBJECT + ".fastr.java.className(to)", "'com.oracle.truffle.r.test.library.fastr.TestJavaInterop$TestClass'"); + + assertEvalFastR(CREATE_TRUFFLE_OBJECT + ".fastr.java.className(to$methodReturnsNull())", "cat('Error in .fastr.java.className(to$methodReturnsNull()) : unsupported type', '\n')"); + assertEvalFastR(".fastr.java.className(NULL)", "cat('Error in .fastr.java.className(NULL) : unsupported type', '\n')"); + assertEvalFastR(".fastr.java.className(1)", "cat('Error in .fastr.java.className(1) : unsupported type', '\n')"); + } + @Test public void testFromArray() { testFromArray("fieldStaticBooleanArray", "logical"); @@ -764,6 +808,46 @@ public class TestJavaInterop extends TestBase { return ""; } + private String toArrayClassName(String className, int dims) { + StringBuilder sb = new StringBuilder(); + sb.append("'"); + for (int i = 0; i < dims; i++) { + sb.append("["); + } + switch (className) { + case "boolean": + sb.append("Z"); + break; + case "byte": + sb.append("B"); + break; + case "char": + sb.append("C"); + break; + case "double": + sb.append("D"); + break; + case "float": + sb.append("F"); + break; + case "int": + sb.append("I"); + break; + case "long": + sb.append("J"); + break; + case "short": + sb.append("S"); + break; + default: + sb.append('L'); + sb.append(className); + sb.append(';'); + } + sb.append('\''); + return sb.toString(); + } + public static class TestNamesClass { public Object field; public static Object staticField;