changeset 22179:ee9ae440f1eb

Testing behavior of invoke when calling asTruffleFunction
author Jaroslav Tulach <jaroslav.tulach@oracle.com>
date Tue, 22 Sep 2015 14:02:13 +0200
parents f8f790fc01da
children 5e5b38579bda
files mx.truffle/suite.py truffle/com.oracle.truffle.api.interop.java.test/src/com/oracle/truffle/api/interop/java/test/JavaFunctionTest.java truffle/com.oracle.truffle.api.vm/src/com/oracle/truffle/api/vm/PolyglotEngine.java
diffstat 3 files changed, 55 insertions(+), 5 deletions(-) [+]
line wrap: on
line diff
--- a/mx.truffle/suite.py	Tue Sep 22 13:33:44 2015 +0200
+++ b/mx.truffle/suite.py	Tue Sep 22 14:02:13 2015 +0200
@@ -127,7 +127,7 @@
       "subDir" : "truffle",
       "sourceDirs" : ["src"],
       "dependencies" : [
-        "com.oracle.truffle.api.interop.java",
+        "com.oracle.truffle.api.vm",
         "mx:JUNIT"
       ],
       "checkstyle" : "com.oracle.truffle.api",
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/truffle/com.oracle.truffle.api.interop.java.test/src/com/oracle/truffle/api/interop/java/test/JavaFunctionTest.java	Tue Sep 22 14:02:13 2015 +0200
@@ -0,0 +1,48 @@
+/*
+ * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.  Oracle designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Oracle in the LICENSE file that accompanied this code.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+package com.oracle.truffle.api.interop.java.test;
+
+import com.oracle.truffle.api.interop.java.JavaInterop;
+import com.oracle.truffle.api.vm.PolyglotEngine;
+import java.io.IOException;
+import static org.junit.Assert.assertTrue;
+import org.junit.Test;
+
+public class JavaFunctionTest {
+    @Test
+    public void invokeRunnable() throws IOException {
+        final boolean[] called = {false};
+
+        PolyglotEngine engine = PolyglotEngine.buildNew().globalSymbol("test", JavaInterop.asTruffleFunction(Runnable.class, new Runnable() {
+            @Override
+            public void run() {
+                called[0] = true;
+            }
+        })).build();
+        engine.findGlobalSymbol("test").invoke(null);
+
+        assertTrue("Runnable has been called", called[0]);
+    }
+}
--- a/truffle/com.oracle.truffle.api.vm/src/com/oracle/truffle/api/vm/PolyglotEngine.java	Tue Sep 22 13:33:44 2015 +0200
+++ b/truffle/com.oracle.truffle.api.vm/src/com/oracle/truffle/api/vm/PolyglotEngine.java	Tue Sep 22 14:02:13 2015 +0200
@@ -721,10 +721,12 @@
                     debugger = fillIn[0];
                 }
                 List<Object> arr = new ArrayList<>();
-                if (thiz == null && language != null) {
-                    Object global = SPI.languageGlobal(SPI.findLanguage(PolyglotEngine.this, language.getClass()));
-                    if (global != null) {
-                        arr.add(global);
+                if (thiz == null) {
+                    if (language != null) {
+                        Object global = SPI.languageGlobal(SPI.findLanguage(PolyglotEngine.this, language.getClass()));
+                        if (global != null) {
+                            arr.add(global);
+                        }
                     }
                 } else {
                     arr.add(thiz);