Open
Description
The following JS code works in Google Chrome:
console.log("########### Direct call in JS #############")
console.log("window.document.createElement:", window.document.createElement("p"));
console.log("document.createElement.apply:", window.document.createElement.apply(window.document, ["p"]));
console.log("########################")
console.log("\n")
console.log("########## Call via Bind/Call ##############")
var boundCall = Object.bind.apply(Object.call, [Object.bind, Object.call]);
var boundCall2 = boundCall.apply(window, [Object.bind]);
var createElementMethod = boundCall2.apply(window, [document.createElement, window.document]);
console.log(createElementMethod("p"));
console.log(createElementMethod.apply(window.document, ["p"]));
console.log("########################")
But when I use GraaJS v20.2.0 with proxy Document objec: https://github.com/REASY/graalvm-js-bind-issue/blob/8402fbb326125db62414a4348ed63cbc70fee6f6/src/main/java/com/examples/graalvm/blink/Document.java#L9t to execute that code https://github.com/REASY/graalvm-js-bind-issue/blob/main/src/main/scala/com/examples/graalvm/BindExample.scala#L20-L23, I get the exception org.graalvm.polyglot.PolyglotException: TypeError: com.examples.graalvm.blink.Document$1@103441bb is not a function
:
########### Direct call in JS #############
hasMember: createElement
hasMember: createElement
getMember: createElement
execute(). Received [p]
window.document.createElement: bar
hasMember: createElement
getMember: createElement
execute(). Received [p]
document.createElement.apply: bar
########################
########## Call via Bind/Call ##############
hasMember: createElement
getMember: createElement
[error] (run-main-0) org.graalvm.polyglot.PolyglotException: TypeError: com.examples.graalvm.blink.Document$1@103441bb is not a function
[error] org.graalvm.polyglot.PolyglotException: TypeError: com.examples.graalvm.blink.Document$1@103441bb is not a function
[error] at <js>.:program(bind_example.js:9)
[error] at org.graalvm.polyglot.Context.eval(Context.java:345)
[error] at com.examples.graalvm.BindExample$.execute(BindExample.scala:23)
[error] at com.examples.graalvm.BindExample$.main(BindExample.scala:29)
[error] at com.examples.graalvm.BindExample.main(BindExample.scala)
[error] at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
[error] at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
[error] at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
[error] at java.lang.reflect.Method.invoke(Method.java:498)
[error] stack trace is suppressed; run last Compile / bgRunMain for the full output
[error] Nonzero exit code: 1
[error] (Compile / runMain) Nonzero exit code: 1
[error] Total time: 1 s, completed Oct 6, 2020 12:13:39 AM
- allowAllAccess = true
- allowExperimentalOptions = true
- js.experimental-foreign-object-prototype = true
GraalVM version: 20.2.0
JVM: Oracle JDK 1.8.0_251
Repo: https://github.com/REASY/graalvm-js-bind-issue