Hi,

thanks for reporting this. I filed a JBS issue[0] and I have a PR[0] to fix it 
put up. It’ll go into the next Nashorn release.

Thanks,
  Attila.

[0] https://bugs.openjdk.java.net/browse/JDK-8258787
[1] https://github.com/openjdk/nashorn/pull/11

> On 2020. Nov 23., at 17:20, Rony G. Flatscher <rony.flatsc...@wu.ac.at> wrote:
> 
> Hi there,
> 
> the NashornScriptEngineFactory.getOutputStatement() does not create a valid 
> String from the
> toDisplay argument. As a result it is not possible to create correct 
> Javascript statements that
> output strings created with that method (Nashorn creates an exception when 
> running a statement it
> created itself).
> 
> The input string toDisplay:
> 
>    ~~~
>    'hello world', this is "ECMAScript" speaking!
>    ~~~
> 
> The current getOutputStatement(toDisplay) returns the syntaxtically wrong 
> output statement (will
> cause an exception):
> 
>    ~~~
>    print('hello world', this is "ECMAScript" speaking!)
>    ~~~
> 
> The following git diff would apply double-quotes and escape double-quotes, if 
> they are part of the
> supplied toDisplay argument:
> 
>    ~~~
>    
> G:\dev\openjfx\nashorn\src\org.openjdk.nashorn\share\classes\org\openjdk\nashorn\api\scripting>git
>  diff
>    diff --git 
> a/src/org.openjdk.nashorn/share/classes/org/openjdk/nashorn/api/scripting/NashornScriptEngineFactory.java
>  
> b/src/org.openjdk.nashorn/share/classes/org/openjdk/nashorn/api/scripting/NashornScriptEngineFactory.java
>    index 8dc8895a..59d5d60b 100644
>    --- 
> a/src/org.openjdk.nashorn/share/classes/org/openjdk/nashorn/api/scripting/NashornScriptEngineFactory.java
>    +++ 
> b/src/org.openjdk.nashorn/share/classes/org/openjdk/nashorn/api/scripting/NashornScriptEngineFactory.java
>    @@ -104,7 +104,7 @@ public final class NashornScriptEngineFactory 
> implements ScriptEngineFactory {
> 
>         @Override
>         public String getOutputStatement(final String toDisplay) {
>    -        return "print(" + toDisplay + ")";
>    +        return "print(\"" + toDisplay.replace("\"","\\\"") + "\")";
>         }
> 
>         @Override
>    ~~~
> 
> The corrected getOutputStatement(toDisplay) with the change returns:
> 
>    ~~~
>    print("'hello world', this is \"ECMAScript\" speaking!")
>    ~~~
> 
> Please advise how to best proceed in order to fix this long standing bug.
> 
> ---rony
> 
> P.S.: If you want you can take that code directly as I signed the Oracle 
> Contributor Agreement and
> submitted changes in the OpenJFX project in the past.
> 
> 
> On 15.11.2020 18:25, Attila Szegedi wrote:
>> Hi y’all,
>> 
>> openjdk/nashorn repo is up and its main branch is populated with the initial 
>> copy of Nashorn as it existed in JDK 14. I added a fix for wrong/missing 
>> licenses for two files (agreed with Oracle) and an initial project README on 
>> top of it.
>> 
>> An even better news is that I have the initial standalone Nashorn 15.0.0 PR 
>> up ready for review. It is at:
>> 
>> <https://github.com/openjdk/nashorn/pull/3>
>> 
>> 
>> The PR describes the steps to build the artifacts. I’d like to encourage 
>> everyone here to try it out and report back with your experiences, and to 
>> also give an earnest review of the PR. If it works out okay, we could merge 
>> this into main in the next few days and then I can get the artifacts 
>> published into Maven Central!
>> 
>> Attila.
>> 
>>> On 2020. Oct 25., at 18:07, Attila Szegedi <szege...@gmail.com> wrote:
>>> 
>>> Hi y’all,
>>> 
>>> trying to get into the habit of making these weekly updates until I have 
>>> something else to show.
>>> 
>>> * With Remi’s, Sundar’s and Mandy’s help I fixed anonymous code loading. 
>>> We’ll be using the sun.misc.Unsafe for now, with hope to transition to 
>>> Lookup.defineHiddenClass somewhere down the line.
>>> 
>>> * I started using Ivy as the dependency manager in our build.xml, and right 
>>> now I also have an Ant task that builds all the artifacts for Maven 
>>> publication. 
>>> 
>>> The first version of Maven artifacts (jar, javadoc, sources, Maven pom 
>>> file) is basically ready to go. All we’re waiting for is for Oracle to 
>>> create the openjdk/nashorn repository and approve its initial contents. I 
>>> started the relevant conversation about it 12 days ago… it is going slower 
>>> than I hoped for.
>>> 
>>> What do you all think of the version number? Nashorn never had its own 
>>> separate version number, but I’m thinking we could start the standalone 
>>> version at 15. I don’t expect we’ll remain in lockstep with OpenJDK (so 
>>> it’ll remain at 15 significantly longer), but it might be a good strategy 
>>> to at least retroactively be able to talk about it without confusion, e.g. 
>>> “Nashorn 11” is Nashorn-as-in-Java-11 and “Nashorn 14” is 
>>> Nashorn-as-in-Java-14. And “Nashorn 15” is then quite naturally the first 
>>> standalone version.
>>> 
>>> Attila.
>>> 
>>>> On 2020. Oct 19., at 17:16, Attila Szegedi <szege...@gmail.com> wrote:
>>>> 
>>>> Hi y’all,
>>>> 
>>>> a quick update with regard of what’s been happening since the last post.
>>>> 
>>>> * I’m talking with folks at Oracle about setting up the openjdk/nashorn 
>>>> repo. We’re hashing out what the initial content of the repo should be.
>>>> 
>>>> * The licensing for the standalone Nashorn is confirmed to be 
>>>> GPLv2+Classpath exception.
>>>> 
>>>> * In anticipation of getting a public repo, I’ve been not sitting idle, 
>>>> but rather I’m working in a private repo to get ahead with the necessary 
>>>> adaptations. I have a version now that passes the internal test suite 
>>>> (with an asterisk) and passes the whole test262[0] suite (no asterisk 
>>>> there, it all passes.)
>>>> 
>>>> * I still need to figure out the minimal descriptive pom.xml (dependencies 
>>>> etc., no build information) in order to be able to produce Maven 
>>>> artifacts. Right now, Nashorn’s build and test process is highly 
>>>> customized set of Ant build.xml files, so it can’t just be converted to 
>>>> “vanilla” Maven or Gradle. It’s a long term goal though (to switch it from 
>>>> our custom Ant build.xml to either one of these.) Initially, it might make 
>>>> sense to use Apache Ivy within our Ant build to handle both dependencies 
>>>> and publication.
>>>> 
>>>> As for test suite asterisks:
>>>> 
>>>> * For now, I moved all the jjs related tests into “currently failing” 
>>>> directory as I did not have time to figure out how to build jjs. We can 
>>>> sort out later if/when/how we want to resurrect jjs.
>>>> 
>>>> * sandbox/nashorninternals.js test is moved to “currently failing” too. 
>>>> I’m pretty sure that what it’s been testing is no longer relevant. Tests 
>>>> artificially are restricted from accessing internal Nashorn internal 
>>>> packages and this is validated. Unfortunately, keeping Nashorn internals 
>>>> in the list of access-checked packages causes lots of issues for Nashorn 
>>>> itself in the tests, so I removed internal packages from the access-check 
>>>> list. I separately kept a test package that’s used to assert scripts can’t 
>>>> access such packages, and it works fine.
>>>> 
>>>> * for now, I disabled anonymous code loading. It’s a funny one. Nashorn 
>>>> has a feature called “anonymous code loading” that it uses for somewhat 
>>>> lighter-weight loading of code as it compiles JavaScript functions 
>>>> one-by-one into bytecode classes. Unfortunately, it uses 
>>>> Unsafe.defineAnonymousClass for that, and outside of JDK it can’t access 
>>>> Unsafe. So I switched to a new API,  luckily available from Java 15, 
>>>> MethodHandles.Lookup.defineHiddenClass. It seems to work as it should, 
>>>> except with it, eval’d expressions no longer report “<eval>” as their 
>>>> script name and anonymous functions no longer report “<anonymous>” but 
>>>> rather their callers names, script names, and line numbers are reported. 
>>>> It’s quite maddening, and if I can’t get to the bottom of it in reasonable 
>>>> amount of time, I’ll just keep anonymous code loading switched off for 
>>>> initial release. There’s not many drawbacks to it, maybe a bit higher 
>>>> memory utilization if you don’t use optimistic types. With optimistic 
>>>> types, it would preclude obsolete code versions from clearing up from 
>>>> memory when functions are repeatedly recompiled until the whole script 
>>>> gets unloaded.
>>>> 
>>>> Attila.
>>>> 
>>>> [0] https://github.com/tc39/test262/tree/es5-tests
>>>> 
>>>>> On 2020. Oct 11., at 9:28, Attila Szegedi <szege...@gmail.com> wrote:
>>>>> 
>>>>> Folks,
>>>>> 
>>>>> some good news for y'all (presumably you're on this mailing list because 
>>>>> you are interested in Nashorn.)
>>>>> 
>>>>> Since Nashorn's removal from JDK starting with Java 15, numerous people 
>>>>> have realized that they, in fact, rely on it. To remedy the situation, 
>>>>> Nashorn will continue as a standalone project within the OpenJDK 
>>>>> organization.
>>>>> 
>>>>> You might ask, "But isn't Nashorn officially dead?", to which the answer 
>>>>> is: no, it isn’t. The project’s product is merely no longer shipped as 
>>>>> part of the JDK project. The Nashorn project in OpenJDK organization is 
>>>>> still live[1], along with all of its resources including the mailing list 
>>>>> this message is posted on. It was merely not active for a while, until 
>>>>> now.
>>>>> 
>>>>> What does this mean in practical terms? The following will happen or are 
>>>>> happening:
>>>>> 
>>>>> * Project communication will continue on this mailing list 
>>>>> (<nashorn-dev@openjdk.java.net>).
>>>>> 
>>>>> * A GitHub project openjdk/nashorn will be set up. It will be populated 
>>>>> by a clone of the openjdk/jdk14u repo that has been filtered for  
>>>>> Nashorn-only commits. (Thanks, git-filter-repo[2], you are awesome!) 
>>>>> There will be no synchronization back to jdk14u afterwards, it won't act 
>>>>> as an upstream. openjdk/nashorn proceeds independently from that point on.
>>>>> 
>>>>> * The project will change the module and package names as it can't keep 
>>>>> living within the top-level "jdk." package. In accordance with other 
>>>>> independently-developed OpenJDK projects, it will transition to module 
>>>>> and package names within the "org.openjdk." package. Fortunately for 
>>>>> Nashorn, it is mostly used through the "javax.script.*" APIs so people 
>>>>> that use it through those APIs won't have to adapt their code. Creating 
>>>>> the engine by name as described in Nashorn’s last (JDK 14) API docs[3] 
>>>>> will continue to work. People that used to use the Nashorn-specific API 
>>>>> (typically, AbstractJSObject and ScriptObjectMirror) will need to adapt 
>>>>> their code for new package names, though.
>>>>> 
>>>>> * Project artifacts (in plain English: JAR file to be used with Maven 
>>>>> etc.) will be published on SonaType under the "org.openjdk" organization, 
>>>>> again similar to other independently-developed OpenJDK projects.
>>>>> 
>>>>> The goal for the initial release is to ship a standalone Nashorn with 
>>>>> identical functionality to that in JDK 14, with the only changes being:
>>>>> 
>>>>> * reversing of deprecation and “scheduled for removal” notices,
>>>>> * enacting the package and module name changes,
>>>>> * replacing or removing dependencies on various jdk.internal.* packages 
>>>>> since those are no longer exported from JDK modules to the Nashorn module.
>>>>> 
>>>>> It is possible for expediency that we will decide to ship Nashorn as a 
>>>>> library first, and separately ship the initial version of the jjs shell 
>>>>> sometime later.
>>>>> 
>>>>> I’m personally undertaking these initial tasks. I will let you know here 
>>>>> on the list about the progress, and once the repo is set up the work will 
>>>>> also start appearing on a branch.
>>>>> 
>>>>> There are some other aspects of the project that need to be worked out: 
>>>>> contribution and review guidelines, publication location of the 
>>>>> accompanying documentation (that will no longer be part of the JDK 
>>>>> documentation) and so on. I will post discussion-initiating e-mails for 
>>>>> these as well as time comes and will absolutely welcome feedback on them, 
>>>>> just as I welcome feedback on this plan too.
>>>>> 
>>>>> Attila.
>>>>> 
>>>>> --
>>>>> [1] https://openjdk.java.net/projects/nashorn/
>>>>> [2] https://github.com/newren/git-filter-repo
>>>>> [3] 
>>>>> https://docs.oracle.com/en/java/javase/14/docs/api/jdk.scripting.nashorn/module-summary.html
> 

Reply via email to