diff --git a/truffle/src/com.oracle.truffle.api.test/src/com/oracle/truffle/api/test/host/GR39979.java b/truffle/src/com.oracle.truffle.api.test/src/com/oracle/truffle/api/test/host/GR39979.java index d2b381240ac..9588f4da8ab 100644 --- a/truffle/src/com.oracle.truffle.api.test/src/com/oracle/truffle/api/test/host/GR39979.java +++ b/truffle/src/com.oracle.truffle.api.test/src/com/oracle/truffle/api/test/host/GR39979.java @@ -40,6 +40,7 @@ */ package com.oracle.truffle.api.test.host; +import java.util.Arrays; import java.util.function.Function; import org.graalvm.polyglot.Context; @@ -65,6 +66,15 @@ public Object[] call(Function fn) { }; } + @SuppressWarnings({"static-method", "rawtypes", "unchecked"}) + @HostAccess.Export + public Object[] callRaw(Function fn) { + return new Object[]{ + fn.apply(null), + fn.apply(0), + }; + } + @SuppressWarnings("static-method") @HostAccess.Export public Object callVarArgs(Function fn) { @@ -93,6 +103,17 @@ public void testPolyglotFunctionVarArgs() { } } + @Test + public void testPolyglotFunctionRaw() { + try (Context context = Context.newBuilder().build()) { + Value applyTest = context.asValue(new ApplyTest()); + Value expectSingleArgument = context.asValue(new ExpectSingleArgument()); + + Value result = applyTest.invokeMember("callRaw", expectSingleArgument); + Assert.assertArrayEquals(new Object[]{null, 0}, result.as(Object[].class)); + } + } + @ExportLibrary(InteropLibrary.class) static final class ExpectSingleArgument implements TruffleObject { @SuppressWarnings("static-method") @@ -104,7 +125,7 @@ boolean isExecutable() { @SuppressWarnings("static-method") @ExportMessage Object execute(Object[] args) { - Assert.assertEquals(1, args.length); + Assert.assertEquals(Arrays.toString(args), 1, args.length); return args[0]; } } @@ -120,7 +141,7 @@ boolean isExecutable() { @SuppressWarnings("static-method") @ExportMessage Object execute(Object[] args) { - Assert.assertEquals(0, args.length); + Assert.assertEquals(Arrays.toString(args), 0, args.length); return args.length; } } diff --git a/truffle/src/com.oracle.truffle.polyglot/src/com/oracle/truffle/polyglot/PolyglotExecuteNode.java b/truffle/src/com.oracle.truffle.polyglot/src/com/oracle/truffle/polyglot/PolyglotExecuteNode.java index 9e0d7c5014e..de2eb47c738 100644 --- a/truffle/src/com.oracle.truffle.polyglot/src/com/oracle/truffle/polyglot/PolyglotExecuteNode.java +++ b/truffle/src/com.oracle.truffle.polyglot/src/com/oracle/truffle/polyglot/PolyglotExecuteNode.java @@ -80,9 +80,7 @@ public final Object execute(PolyglotLanguageContext languageContext, Object func argsArray = (Object[]) functionArgsObject; } } else { - if (paramType == null && functionArgsObject == null) { - argsArray = EMPTY; - } else if (paramType == null && functionArgsObject instanceof Object[]) { + if (paramType == null && functionArgsObject instanceof Object[]) { argsArray = (Object[]) functionArgsObject; } else { argsArray = new Object[]{functionArgsObject};