Nashorn comment nodes in the syntax tree

Emilian Bold emilian.bold at gmail.com
Wed Aug 3 08:15:04 UTC 2016


>
> Also, please note that jdk.nashorn.internal.* packages are not APIs and
> therefore please avoid using those. Please use nashorn parser API
> defined by JEP 236 [ http://openjdk.java.net/jeps/236 ]


I cannot use JEP 236 yet because it's only part of Java 9 and it's not
being backported to JDK 8 (why??).

And I cannot use Java 9 because it hasn't been released yet.  Even if it
would be, no company would instantly pick it up, especially with the big
changes/breakages introduced by modules.

So my only choice is to use JDK 8 with jdk.nashorn.internal.* while trying
to keep an eye and maintain future compatibility with the JEP 236 Tree API.

Yes, comments are swallowed (by design). But, I initially though that
> disturbs line & column number info. [i.e., position of various trees].
> i.e., that was the bug you reported. That does not seem to be the case.


Could you tell me which classes produce the correct offsets in JDK 9
compared to JDK 8?

I have executed my test with Java 9 using the jdk.nashorn.internal.*
packages and the test still fails. Actually, it seems to me with JDK 9
functionNode.getStart() == functionNode.getFinish() so I'm not certain
where the offsets are stored now.



--emi

On Fri, Jul 22, 2016 at 10:38 AM, Sundararajan Athijegannathan <
sundararajan.athijegannathan at oracle.com> wrote:

> Hi,
>
> Yes, comments are swallowed (by design). But, I initially though that
> disturbs line & column number info. [i.e., position of various trees].
> i.e., that was the bug you reported. That does not seem to be the case.
>
> I wrote a simple sample and checked with jjs in jdk9 build. You can
> check start and end line/column numbers of subtrees (function,
> expression statement) are correct.
>
> Also, please note that jdk.nashorn.internal.* packages are not APIs and
> therefore please avoid using those. Please use nashorn parser API
> defined by JEP 236 [ http://openjdk.java.net/jeps/236 ]
>
> #-scripting needed
>
> var Parser = Java.type("jdk.nashorn.api.tree.Parser")
> var p = Parser.create();
> var cu = p.parse("t.js", <<EOF
> /* start script comment */
>
>   function hello(){
>  return 'world';
> }
>
> //some comment
>     hello();
> EOF, print);
>
> var src = cu.sourceElements;
> var itr = src.iterator();
> var lm = cu.lineMap;
> while (itr.hasNext()) {
>    var tree = itr.next();
>    var start = tree.startPosition;
>    var end = tree.endPosition;
>    print(tree.kind,
>      lm.getLineNumber(start),
>      lm.getColumnNumber(start),
>      lm.getLineNumber(end),
>      lm.getColumnNumber(end));
> }
>
>
> Output:
>
> FUNCTION 3 2 5 1
> EXPRESSION_STATEMENT 8 4 8 11
>
> PS. please check line & column w.r.t beginning of test script parsed.
> i.e., the heredoc starting point.
>
> -Sundar
>
>


More information about the nashorn-dev mailing list