Excellent, that appears to work. Thanks both!
On Fri, Dec 15, 2017 at 7:19 AM, Sundararajan Athijegannathan < sundararajan.athijegannat...@oracle.com> wrote: > Adding to what Hannes said. In case if you cannot modify existing code, > you can also pass options to nashorn engine via System property > "nashorn.args" - all nashorn engines created in the process will be > initialized with those options. > > For example: > > java -Dnashorn.args="-ot=false" Main > > See also: https://wiki.openjdk.java.net/display/Nashorn/Nashorn+jsr223 > +engine+notes > > -Sundar > > > On 15/12/17, 6:10 PM, Hannes Wallnöfer wrote: > >> Hi Nils, >> >> Thanks for the code. Unfortunately you hit a bug in optimistic types, >> which is enabled by default in JDK 9. I’ve filed an issue for it and have a >> fix for it. >> >> https://bugs.openjdk.java.net/browse/JDK-8193508 >> >> The good news is that it is quite easy to work around this bug by >> disabling optimistic types. The way to do this is to use the >> NashornScriptEngineFactory class to create the script engine: >> >> import jdk.nashorn.api.scripting.NashornScriptEngineFactory; >> >> ... >> ScriptEngine engine = new NashornScriptEngineFactory().g >> etScriptEngine("-ot=false"); >> >> Hannes >> >> >> Am 06.12.2017 um 22:30 schrieb Nils Kilden-Pedersen<nil...@gmail.com>: >>> >>> Hannes, >>> >>> I've sent an email with zip file attachment. >>> >>> Just letting you know in a separate email, in case it ends up being >>> blocked. >>> >>> Nils >>> >>> On Wed, Dec 6, 2017 at 2:19 PM, Hannes Wallnöfer<hannes.wallnoefer@or >>> acle.com> wrote: >>> That would be https://bugs.openjdk.java.net/ but you need an OpenJDK >>> account to file a bug. >>> >>> Alternatively, if you can send me something reproduce the bug (could be >>> a small snippet of code) I can file it for you. >>> >>> Hannes >>> >>> >>> Am 06.12.2017 um 16:15 schrieb Nils Kilden-Pedersen<nil...@gmail.com>: >>>> >>>> What's the right place to file a bug? >>>> >>>> On Mon, Dec 4, 2017 at 9:56 AM, Nils Kilden-Pedersen<nil...@gmail.com> >>>> wrote: >>>> >>>> Thanks for bringing this up. It made me realize that my post was >>>>> incomplete. >>>>> >>>>> These are the steps I take: >>>>> >>>>> 1. Initial step: Call engine.compile with the CS compiler source + >>>>> CoffeeScript.compile(coffeeCode, {runtime: 'none'}); which returns >>>>> CompiledScript that is retained and re-used. This works fine, also >>>>> on >>>>> JDK 9.0.1. >>>>> 2. For subsequent Coffeescript -> Javascript transpilation, I then >>>>> call engine.createBindings() >>>>> 3. Then bindings.put("coffeeCode", csCode) to associate the CS code >>>>> with the JS variable coffeeCode mentioned in initial step >>>>> 4. Call CompiledScript.eval(bindings). This is the step that fails >>>>> in >>>>> 9.0.1. >>>>> >>>>> I’m open to better ways to achieve this, if it’s inefficient or plain >>>>> wrong. >>>>> >>>>> >>>>> On Mon, Dec 4, 2017 at 8:47 AM, Hannes Wallnöfer< >>>>> hannes.wallnoe...@oracle.com> wrote: >>>>> >>>>> Hi Nils, >>>>>> >>>>>> Are you just evaluating the script files you linked in your first >>>>>> message, or trying to do some further processing? >>>>>> >>>>>> Using the jjs tool from JDK 9.0.1 I see no errors running both >>>>>> versions >>>>>> of CoffeeScript. >>>>>> >>>>>> Hannes >>>>>> >>>>>> Am 03.12.2017 um 21:08 schrieb Nils Kilden-Pedersen<nil...@gmail.com >>>>>>> >: >>>>>>> >>>>>>> Ok, the minified vs non-minified may not be identical. I cannot find >>>>>>> the >>>>>>> default parameters in the minified version, so perhaps those are >>>>>>> >>>>>> removed. >>>>>> >>>>>>> What does remain however, is that I can compile minified cs2 >>>>>>> <http://coffeescript.org/v2/browser-compiler/coffeescript.js> on >>>>>>> JDK >>>>>>> >>>>>> 8_144, >>>>>> >>>>>>> but not on 9.0.1. >>>>>>> >>>>>>> >>>>>>> On Sun, Dec 3, 2017 at 1:39 PM, Nils Kilden-Pedersen<nilskp@gmail.c >>>>>>> om> >>>>>>> wrote: >>>>>>> >>>>>>> Further testing with the un-minified code (cs2 >>>>>>>> <https://unpkg.com/coffeescript@2.0.3/lib/coffeescript/browser.js>, >>>>>>>> >>>>>>> cs1 >>>>>> >>>>>>> <https://unpkg.com/coffeescript@1.12.7/lib/coffee-script/browser.js >>>>>>>> >) >>>>>>>> reveals the true problems in JDK 9.0.1 >>>>>>>> >>>>>>>> In cs2, it’s ES6 syntax (default args), which (unexpectedly for me >>>>>>>> at >>>>>>>> least), works in JDK 8: >>>>>>>> >>>>>>>> <eval>:46:45 Expected , but found = >>>>>>>> CoffeeScript.eval = function(code, options = {}) { >>>>>>>> ^ in<eval> at line >>>>>>>> number >>>>>>>> >>>>>>> 46 at column number 45 >>>>>> >>>>>>> And in cs1 it’s require that’s unresolved (also works in JDK 8): >>>>>>>> >>>>>>>> ReferenceError: "require" is not defined in<eval> at line number 7 >>>>>>>> >>>>>>>> >>>>>>>> >>>>>>>> On Sun, Dec 3, 2017 at 11:02 AM, Nils Kilden-Pedersen< >>>>>>>> >>>>>>> nil...@gmail.com> >>>>>> >>>>>>> wrote: >>>>>>>> >>>>>>>> I just switched to the Java 9.0.1 runtime, and Nashorn now fails to >>>>>>>>> >>>>>>>> parse >>>>>> >>>>>>> the Coffeescript compiler, which worked fine in Java 8_144. >>>>>>>>> >>>>>>>>> Coffeescript 2 compiler: http://coffeescript.org/v2/bro >>>>>>>>> wser-compiler/coffeescript.js >>>>>>>>> >>>>>>>>> v1 also fails: http://coffeescript.org/v1/bro >>>>>>>>> wser-compiler/coffee-script.js >>>>>>>>> >>>>>>>>> Exception is: >>>>>>>>> >>>>>>>>> javax.script.ScriptException: SyntaxError: unexpected in<eval> at >>>>>>>>> >>>>>>>> line number 39 at column number 249736 >>>>>> >>>>>>> at jdk.scripting.nashorn/jdk.nashorn.api.scripting.NashornScrip >>>>>>>>> >>>>>>>> tEngine.throwAsScriptException(NashornScriptEngine.java:469) >>>>>> >>>>>>> at jdk.scripting.nashorn/jdk.nashorn.api.scripting.NashornScrip >>>>>>>>> >>>>>>>> tEngine.evalImpl(NashornScriptEngine.java:425) >>>>>> >>>>>>> at jdk.scripting.nashorn/jdk.nashorn.api.scripting.NashornScrip >>>>>>>>> >>>>>>>> tEngine.access$300(NashornScriptEngine.java:72) >>>>>> >>>>>>> at jdk.scripting.nashorn/jdk.nashorn.api.scripting.NashornScrip >>>>>>>>> >>>>>>>> tEngine$3.eval(NashornScriptEngine.java:513) >>>>>> >>>>>>> at java.scripting/javax.script.CompiledScript.eval(CompiledScri >>>>>>>>> >>>>>>>> pt.java:92) >>>>>> >>>>>>> at scuff.js.CoffeeScriptCompiler.compile(CoffeeScriptCompiler.s >>>>>>>>> >>>>>>>> cala:115) >>>>>> >>>>>>> at scuff.js.TestCoffeeScriptCompiler.cs2(TestCoffeeScriptCompil >>>>>>>>> >>>>>>>> er.scala:114) >>>>>> >>>>>>> at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invo >>>>>>>>> ke0(Native >>>>>>>>> >>>>>>>> Method) >>>>>> >>>>>>> at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invo >>>>>>>>> >>>>>>>> ke(NativeMethodAccessorImpl.java:62) >>>>>> >>>>>>> at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl. >>>>>>>>> >>>>>>>> invoke(DelegatingMethodAccessorImpl.java:43) >>>>>> >>>>>>> at java.base/java.lang.reflect.Method.invoke(Method.java:564) >>>>>>>>> at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall( >>>>>>>>> >>>>>>>> FrameworkMethod.java:50) >>>>>> >>>>>>> at org.junit.internal.runners.model.ReflectiveCallable.run(Refl >>>>>>>>> >>>>>>>> ectiveCallable.java:12) >>>>>> >>>>>>> at org.junit.runners.model.FrameworkMethod.invokeExplosively(Fr >>>>>>>>> >>>>>>>> ameworkMethod.java:47) >>>>>> >>>>>>> at org.junit.internal.runners.statements.InvokeMethod.evaluate( >>>>>>>>> >>>>>>>> InvokeMethod.java:17) >>>>>> >>>>>>> at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325) >>>>>>>>> at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit >>>>>>>>> >>>>>>>> 4ClassRunner.java:78) >>>>>> >>>>>>> at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit >>>>>>>>> >>>>>>>> 4ClassRunner.java:57) >>>>>> >>>>>>> at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290) >>>>>>>>> at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71) >>>>>>>>> at org.junit.runners.ParentRunner.runChildren(ParentRunner. >>>>>>>>> java:288) >>>>>>>>> at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58) >>>>>>>>> at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java: >>>>>>>>> 268) >>>>>>>>> at org.junit.runners.ParentRunner.run(ParentRunner.java:363) >>>>>>>>> at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference. >>>>>>>>> >>>>>>>> run(JUnit4TestReference.java:86) >>>>>> >>>>>>> at org.eclipse.jdt.internal.junit.runner.TestExecution.run( >>>>>>>>> >>>>>>>> TestExecution.java:38) >>>>>> >>>>>>> at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTe >>>>>>>>> >>>>>>>> sts(RemoteTestRunner.java:539) >>>>>> >>>>>>> at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTe >>>>>>>>> >>>>>>>> sts(RemoteTestRunner.java:761) >>>>>> >>>>>>> at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run( >>>>>>>>> >>>>>>>> RemoteTestRunner.java:461) >>>>>> >>>>>>> at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main( >>>>>>>>> >>>>>>>> RemoteTestRunner.java:207) >>>>>> >>>>>>> Caused by:<eval>:39:249736 SyntaxError: unexpected >>>>>>>>> at jdk.scripting.nashorn/jdk.nashorn.internal.objects.NativeErr >>>>>>>>> >>>>>>>> or.initException(NativeError.java:135) >>>>>> >>>>>>> at jdk.scripting.nashorn/jdk.nashorn.internal.objects.NativeSyn >>>>>>>>> >>>>>>>> taxError.<init>(NativeSyntaxError.java:73) >>>>>> >>>>>>> at jdk.scripting.nashorn/jdk.nashorn.internal.objects.NativeSyn >>>>>>>>> >>>>>>>> taxError.<init>(NativeSyntaxError.java:77) >>>>>> >>>>>>> at jdk.scripting.nashorn/jdk.nashorn.internal.objects.NativeSyn >>>>>>>>> >>>>>>>> taxError.constructor(NativeSyntaxError.java:98) >>>>>> >>>>>>> at jdk.scripting.nashorn.scripts/jdk.nashorn.internal.scripts.S >>>>>>>>> >>>>>>>> cript$Recompilation$2368$6956AA$\^eval\_.L:39-1#a#L:39-1#L: >>>>>> 39#throwSyntaxError(<eval>:39) >>>>>> >>>>>>> at jdk.scripting.nashorn.scripts/jdk.nashorn.internal.scripts.S >>>>>>>>> >>>>>>>> cript$Recompilation$2364$253073AA$\^eval\_$cu1$restOf.L:39- >>>>>> 1#a#L:39-8#L:39#parseError(<eval>:39) >>>>>> >>>>>>> at jdk.scripting.nashorn.scripts/jdk.nashorn.internal.scripts.S >>>>>>>>> >>>>>>>> cript$Recompilation$2359$\^eval\_$cu1$restOf.L:39-1#a#L:39- >>>>>> 4#o#parse(<eval>:39) >>>>>> >>>>>>> at jdk.scripting.nashorn.scripts/jdk.nashorn.internal.scripts.S >>>>>>>>> >>>>>>>> cript$Recompilation$2343$\^eval\_$cu1$restOf.L:39-1#a#L:39- >>>>>> 8#L:39#p(<eval>:39) >>>>>> >>>>>>> at jdk.scripting.nashorn.scripts/jdk.nashorn.internal.scripts.S >>>>>>>>> >>>>>>>> cript$Recompilation$2056$250675AA$\^eval\_.L:39-1#a#L:39-8# >>>>>> L:39#T#L:39(<eval>:39) >>>>>> >>>>>>> at jdk.scripting.nashorn.scripts/jdk.nashorn.internal.scripts.S >>>>>>>>> >>>>>>>> cript$Recompilation$1572$\^eval\_.:program(<eval>:41) >>>>>> >>>>>>> at jdk.scripting.nashorn/jdk.nashorn.internal.runtime.ScriptFun >>>>>>>>> >>>>>>>> ctionData.invoke(ScriptFunctionData.java:652) >>>>>> >>>>>>> at jdk.scripting.nashorn/jdk.nashorn.internal.runtime.ScriptFun >>>>>>>>> >>>>>>>> ction.invoke(ScriptFunction.java:513) >>>>>> >>>>>>> at jdk.scripting.nashorn/jdk.nashorn.internal.runtime.ScriptRun >>>>>>>>> >>>>>>>> time.apply(ScriptRuntime.java:517) >>>>>> >>>>>>> at jdk.scripting.nashorn/jdk.nashorn.api.scripting.NashornScrip >>>>>>>>> >>>>>>>> tEngine.evalImpl(NashornScriptEngine.java:420) >>>>>> >>>>>>> ... 28 more >>>>>>>>> >>>>>>>>> >>>>>>>>> >>>>>>>>> >>>>>>>> >>>>>> >>>