8149929: Nashorn Parser API needs to be updated for ES6
Reviewed-by: mhaupt, hannesw
--- a/nashorn/make/project.properties Wed Jul 05 21:57:11 2017 +0200
+++ b/nashorn/make/project.properties Tue Jul 12 21:18:13 2016 +0530
@@ -35,7 +35,9 @@
javac.source=1.9
javac.target=1.9
-javadoc.option=-tag "implSpec:a:Implementation Requirements:"
+javadoc.option=\
+ -tag "implSpec:a:Implementation Requirements:"\
+ -tag "implNote:a:Implementation Note:"
# nashorn version information
nashorn.version=0.1
--- a/nashorn/samples/prettyprinter.js Wed Jul 05 21:57:11 2017 +0200
+++ b/nashorn/samples/prettyprinter.js Tue Jul 12 21:18:13 2016 +0530
@@ -209,7 +209,7 @@
}
print("function ");
if (func.name) {
- print(func.name);
+ print(func.name.name);
}
printFunctionBody(func, extra, end);
if (funcDecl) {
@@ -608,7 +608,7 @@
visitVariable: function(node, extra) {
indent();
- print("var " + node.name);
+ print("var " + node.binding.name);
var init = node.initializer;
if (init) {
print(" = ");
--- a/nashorn/src/jdk.scripting.nashorn.shell/share/classes/jdk/nashorn/tools/jjs/NashornCompleter.java Wed Jul 05 21:57:11 2017 +0200
+++ b/nashorn/src/jdk.scripting.nashorn.shell/share/classes/jdk/nashorn/tools/jjs/NashornCompleter.java Tue Jul 12 21:18:13 2016 +0530
@@ -439,6 +439,10 @@
args.add("-strict");
}
+ if (env._es6) {
+ args.add("--language=es6");
+ }
+
return Parser.create(args.toArray(new String[0]));
}
}
--- a/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/api/tree/CatchTree.java Wed Jul 05 21:57:11 2017 +0200
+++ b/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/api/tree/CatchTree.java Tue Jul 12 21:18:13 2016 +0530
@@ -38,11 +38,11 @@
*/
public interface CatchTree extends Tree {
/**
- * Returns the catch parameter identifier of the exception caught.
+ * Returns the catch parameter identifier or parameter binding pattern of the exception caught.
*
- * @return the catch parameter identifier
+ * @return the catch parameter identifier or parameter binding pattern
*/
- IdentifierTree getParameter();
+ ExpressionTree getParameter();
/**
* Returns the code block of this catch block.
--- a/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/api/tree/CatchTreeImpl.java Wed Jul 05 21:57:11 2017 +0200
+++ b/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/api/tree/CatchTreeImpl.java Tue Jul 12 21:18:13 2016 +0530
@@ -28,12 +28,12 @@
import jdk.nashorn.internal.ir.CatchNode;
final class CatchTreeImpl extends TreeImpl implements CatchTree {
- private final IdentifierTree param;
+ private final ExpressionTree param;
private final BlockTree block;
private final ExpressionTree condition;
CatchTreeImpl(final CatchNode node,
- final IdentifierTree param,
+ final ExpressionTree param,
final BlockTree block,
final ExpressionTree condition) {
super(node);
@@ -48,7 +48,7 @@
}
@Override
- public IdentifierTree getParameter() {
+ public ExpressionTree getParameter() {
return param;
}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/api/tree/ClassDeclarationTree.java Tue Jul 12 21:18:13 2016 +0530
@@ -0,0 +1,63 @@
+/*
+ * Copyright (c) 2016, 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 jdk.nashorn.api.tree;
+
+import java.util.List;
+
+/**
+ * A tree node that represents a <a href="http://www.ecma-international.org/ecma-262/6.0/#sec-class-definitions">class declaration</a>.
+ *
+ * @since 9
+ */
+public interface ClassDeclarationTree extends StatementTree {
+
+ /**
+ * Class identifier.
+ *
+ * @return the class identifier
+ */
+ IdentifierTree getName();
+
+ /**
+ * The expression of the {@code extends} clause. Optional.
+ *
+ * @return the class heritage
+ */
+ ExpressionTree getClassHeritage();
+
+ /**
+ * Get the constructor method definition.
+ *
+ * @return the constructor
+ */
+ PropertyTree getConstructor();
+
+ /**
+ * Get other property definitions except for the constructor.
+ *
+ * @return the class elements
+ */
+ List<? extends PropertyTree> getClassElements();
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/api/tree/ClassDeclarationTreeImpl.java Tue Jul 12 21:18:13 2016 +0530
@@ -0,0 +1,77 @@
+/*
+ * Copyright (c) 2016, 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 jdk.nashorn.api.tree;
+
+import java.util.List;
+import jdk.nashorn.internal.ir.VarNode;
+
+final class ClassDeclarationTreeImpl extends StatementTreeImpl implements ClassDeclarationTree {
+
+ private final IdentifierTree name;
+ private final ExpressionTree classHeritage;
+ private final PropertyTree constructor;
+ private final List<? extends PropertyTree> classElements;
+
+ ClassDeclarationTreeImpl(final VarNode node, final IdentifierTree name,
+ final ExpressionTree classHeritage, final PropertyTree constructor,
+ final List<? extends PropertyTree> classElements) {
+ super(node);
+ this.name = name;
+ this.classHeritage = classHeritage;
+ this.constructor = constructor;
+ this.classElements = classElements;
+ }
+
+ @Override
+ public Tree.Kind getKind() {
+ return Tree.Kind.CLASS;
+ }
+
+ @Override
+ public IdentifierTree getName() {
+ return name;
+ }
+
+ @Override
+ public ExpressionTree getClassHeritage() {
+ return classHeritage;
+ }
+
+ @Override
+ public PropertyTree getConstructor() {
+ return constructor;
+ }
+
+ @Override
+ public List<? extends PropertyTree> getClassElements() {
+ return classElements;
+ }
+
+ @Override
+ public <R,D> R accept(final TreeVisitor<R,D> visitor, final D data) {
+ return visitor.visitClassDeclaration(this, data);
+ }
+}
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/api/tree/ClassExpressionTree.java Tue Jul 12 21:18:13 2016 +0530
@@ -0,0 +1,63 @@
+/*
+ * Copyright (c) 2016, 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 jdk.nashorn.api.tree;
+
+import java.util.List;
+
+/**
+ * A tree node that represents a <a href="http://www.ecma-international.org/ecma-262/6.0/#sec-class-definitions">class expression</a>.
+ *
+ * @since 9
+ */
+public interface ClassExpressionTree extends ExpressionTree {
+ /**
+ * Class identifier. Optional.
+ *
+ * @return the class identifier
+ */
+ IdentifierTree getName();
+
+ /**
+ * The expression of the {@code extends} clause. Optional.
+ *
+ * @return the class heritage
+ */
+ ExpressionTree getClassHeritage();
+
+ /**
+ * Get the constructor method definition.
+ *
+ * @return the constructor
+ */
+ PropertyTree getConstructor();
+
+ /**
+ * Get other property definitions except for the constructor.
+ *
+ * @return the class elements
+ */
+ List<? extends PropertyTree> getClassElements();
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/api/tree/ClassExpressionTreeImpl.java Tue Jul 12 21:18:13 2016 +0530
@@ -0,0 +1,76 @@
+/*
+ * Copyright (c) 2016, 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 jdk.nashorn.api.tree;
+
+import java.util.List;
+import jdk.nashorn.internal.ir.ClassNode;
+
+final class ClassExpressionTreeImpl extends ExpressionTreeImpl implements ClassExpressionTree {
+
+ private final IdentifierTree name;
+ private final ExpressionTree classHeritage;
+ private final PropertyTree constructor;
+ private final List<? extends PropertyTree> classElements;
+
+ ClassExpressionTreeImpl(final ClassNode cn, final IdentifierTree name,
+ final ExpressionTree classHeritage, final PropertyTree constructor,
+ final List<? extends PropertyTree> classElements) {
+ super(cn);
+ this.name = name;
+ this.classHeritage = classHeritage;
+ this.constructor = constructor;
+ this.classElements = classElements;
+ }
+
+ @Override
+ public Kind getKind() {
+ return Kind.CLASS_EXPRESSION;
+ }
+
+ @Override
+ public IdentifierTree getName() {
+ return name;
+ }
+
+ @Override
+ public ExpressionTree getClassHeritage() {
+ return classHeritage;
+ }
+
+ @Override
+ public PropertyTree getConstructor() {
+ return constructor;
+ }
+
+ @Override
+ public List<? extends PropertyTree> getClassElements() {
+ return classElements;
+ }
+
+ @Override
+ public <R,D> R accept(final TreeVisitor<R,D> visitor, final D data) {
+ return visitor.visitClassExpression(this, data);
+ }
+}
--- a/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/api/tree/CompilationUnitTree.java Wed Jul 05 21:57:11 2017 +0200
+++ b/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/api/tree/CompilationUnitTree.java Tue Jul 12 21:18:13 2016 +0530
@@ -62,4 +62,12 @@
* @return the line map for this compilation unit
*/
LineMap getLineMap();
+
+ /**
+ * Return the {@link ModuleTree} associated with this compilation unit. This is null,
+ * if there is no module information from this compilation unit.
+ *
+ * @return the Module info or null
+ */
+ ModuleTree getModule();
}
--- a/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/api/tree/CompilationUnitTreeImpl.java Wed Jul 05 21:57:11 2017 +0200
+++ b/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/api/tree/CompilationUnitTreeImpl.java Tue Jul 12 21:18:13 2016 +0530
@@ -32,13 +32,18 @@
implements CompilationUnitTree {
private final FunctionNode funcNode;
private final List<? extends Tree> elements;
+ private final ModuleTree module;
CompilationUnitTreeImpl(final FunctionNode node,
- final List<? extends Tree> elements) {
+ final List<? extends Tree> elements,
+ final ModuleTree module) {
super(node);
this.funcNode = node;
- assert funcNode.getKind() == FunctionNode.Kind.SCRIPT : "script function expected";
+ assert funcNode.getKind() == FunctionNode.Kind.SCRIPT ||
+ funcNode.getKind() == FunctionNode.Kind.MODULE :
+ "script or module function expected";
this.elements = elements;
+ this.module = module;
}
@Override
@@ -67,6 +72,11 @@
}
@Override
+ public ModuleTree getModule() {
+ return module;
+ }
+
+ @Override
public <R,D> R accept(final TreeVisitor<R,D> visitor, final D data) {
return visitor.visitCompilationUnit(this, data);
}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/api/tree/DestructuringDeclTreeImpl.java Tue Jul 12 21:18:13 2016 +0530
@@ -0,0 +1,77 @@
+/*
+ * Copyright (c) 2016, 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 jdk.nashorn.api.tree;
+
+import jdk.nashorn.internal.ir.ExpressionStatement;
+import jdk.nashorn.internal.parser.TokenType;
+
+// This implementation of VariableTree represents a destructuring declaration
+final class DestructuringDeclTreeImpl extends StatementTreeImpl
+ implements VariableTree {
+
+ private final TokenType declType;
+ private final ExpressionTree lhs;
+ private final ExpressionTree init;
+
+ DestructuringDeclTreeImpl(ExpressionStatement exprStat, final ExpressionTree lhs, final ExpressionTree init) {
+ super(exprStat);
+ assert exprStat.destructuringDeclarationType() != null : "expecting a destructuring decl. statement";
+
+ this.declType = exprStat.destructuringDeclarationType();
+ this.lhs = lhs;
+ this.init = init;
+ }
+
+ @Override
+ public Kind getKind() {
+ return Kind.VARIABLE;
+ }
+
+ @Override
+ public ExpressionTree getBinding() {
+ return lhs;
+ }
+
+ @Override
+ public ExpressionTree getInitializer() {
+ return init;
+ }
+
+ @Override
+ public boolean isConst() {
+ return declType == TokenType.CONST;
+ }
+
+ @Override
+ public boolean isLet() {
+ return declType == TokenType.LET;
+ }
+
+ @Override
+ public <R,D> R accept(final TreeVisitor<R,D> visitor, final D data) {
+ return visitor.visitVariable(this, data);
+ }
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/api/tree/ExportEntryTree.java Tue Jul 12 21:18:13 2016 +0530
@@ -0,0 +1,60 @@
+/*
+ * Copyright (c) 2016, 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 jdk.nashorn.api.tree;
+
+import java.util.List;
+
+/**
+ * A Tree node for export entry in <a href="http://www.ecma-international.org/ecma-262/6.0/#sec-modules">Module information</a>.
+ */
+public interface ExportEntryTree extends Tree {
+ /**
+ * Returns the entry's export name.
+ *
+ * @return the export name
+ */
+ public IdentifierTree getExportName();
+
+ /**
+ * Returns the entry's module request.
+ *
+ * @return the module request
+ */
+ public IdentifierTree getModuleRequest();
+
+ /**
+ * Returns the entry's import name.
+ *
+ * @return the import name
+ */
+ public IdentifierTree getImportName();
+
+ /**
+ * Returns the entry's local name.
+ *
+ * @return the local name
+ */
+ public IdentifierTree getLocalName();
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/api/tree/ExportEntryTreeImpl.java Tue Jul 12 21:18:13 2016 +0530
@@ -0,0 +1,109 @@
+/*
+ * Copyright (c) 2016, 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 jdk.nashorn.api.tree;
+
+import java.util.List;
+import java.util.stream.Collectors;
+import jdk.nashorn.internal.ir.FunctionNode;
+import jdk.nashorn.internal.ir.IdentNode;
+import jdk.nashorn.internal.ir.Module;
+import static jdk.nashorn.api.tree.ModuleTreeImpl.identOrNull;
+
+final class ExportEntryTreeImpl extends TreeImpl implements ExportEntryTree {
+ private final long startPos, endPos;
+ private final IdentifierTree exportName;
+ private final IdentifierTree moduleRequest;
+ private final IdentifierTree importName;
+ private final IdentifierTree localName;
+
+ private ExportEntryTreeImpl(final long startPos, final long endPos,
+ IdentifierTree exportName,
+ IdentifierTree moduleRequest,
+ IdentifierTree importName,
+ IdentifierTree localName) {
+ super(null); // no underlying Node!
+ this.startPos = startPos;
+ this.endPos = endPos;
+ this.exportName = exportName;
+ this.moduleRequest = moduleRequest;
+ this.importName = importName;
+ this.localName = localName;
+ }
+
+ private static ExportEntryTreeImpl createExportEntry(Module.ExportEntry entry) {
+ return new ExportEntryTreeImpl(entry.getStartPosition(),
+ entry.getEndPosition(),
+ identOrNull(entry.getExportName()),
+ identOrNull(entry.getModuleRequest()),
+ identOrNull(entry.getImportName()),
+ identOrNull(entry.getLocalName()));
+ }
+
+ static List<ExportEntryTreeImpl> createExportList(List<Module.ExportEntry> exportList) {
+ return exportList.stream().
+ map(ExportEntryTreeImpl::createExportEntry).
+ collect(Collectors.toList());
+ }
+
+ @Override
+ public Kind getKind() {
+ return Tree.Kind.EXPORT_ENTRY;
+ }
+
+ @Override
+ public <R,D> R accept(final TreeVisitor<R,D> visitor, final D data) {
+ return visitor.visitExportEntry(this, data);
+ }
+
+ @Override
+ public long getStartPosition() {
+ return startPos;
+ }
+
+ @Override
+ public long getEndPosition() {
+ return endPos;
+ }
+
+ @Override
+ public IdentifierTree getExportName() {
+ return exportName;
+ }
+
+ @Override
+ public IdentifierTree getModuleRequest() {
+ return moduleRequest;
+ }
+
+ @Override
+ public IdentifierTree getImportName() {
+ return importName;
+ }
+
+ @Override
+ public IdentifierTree getLocalName() {
+ return localName;
+ }
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/api/tree/ForOfLoopTree.java Tue Jul 12 21:18:13 2016 +0530
@@ -0,0 +1,62 @@
+/*
+ * Copyright (c) 2016, 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 jdk.nashorn.api.tree;
+
+/**
+ * A tree node for <a href="http://www.ecma-international.org/ecma-262/6.0/#sec-for-in-and-for-of-statements">for..of statement</a>.
+ *
+ * For example:
+ * <pre>
+ * for ( <em>variable</em> of <em>expression</em> )
+ * <em>statement</em>
+ * </pre>
+ *
+ * @since 9
+ */
+public interface ForOfLoopTree extends LoopTree {
+ /**
+ * The for..in left hand side expression.
+ *
+ * @return the left hand side expression
+ */
+ ExpressionTree getVariable();
+
+ /**
+ * The object or array being whose properties are iterated.
+ *
+ * @return the object or array expression being iterated
+ */
+ ExpressionTree getExpression();
+
+ /**
+ * The statement contained in this for..in statement.
+ *
+ * @return the statement
+ */
+ @Override
+ StatementTree getStatement();
+}
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/api/tree/ForOfLoopTreeImpl.java Tue Jul 12 21:18:13 2016 +0530
@@ -0,0 +1,69 @@
+/*
+ * Copyright (c) 2016, 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 jdk.nashorn.api.tree;
+
+import jdk.nashorn.internal.ir.ForNode;
+
+final class ForOfLoopTreeImpl extends StatementTreeImpl implements ForOfLoopTree {
+ private final ExpressionTree lhsExpr;
+ private final ExpressionTree expr;
+ private final StatementTree stat;
+
+ ForOfLoopTreeImpl(final ForNode node,
+ final ExpressionTree lhsExpr,
+ final ExpressionTree expr,
+ final StatementTree stat) {
+ super(node);
+ assert node.isForIn() : "for ..in expected";
+ this.lhsExpr = lhsExpr;
+ this.expr = expr;
+ this.stat = stat;
+ }
+
+ @Override
+ public Kind getKind() {
+ return Kind.FOR_IN_LOOP;
+ }
+
+ @Override
+ public ExpressionTree getVariable() {
+ return lhsExpr;
+ }
+
+ @Override
+ public ExpressionTree getExpression() {
+ return expr;
+ }
+
+ @Override
+ public StatementTree getStatement() {
+ return stat;
+ }
+
+ @Override
+ public <R,D> R accept(final TreeVisitor<R,D> visitor, final D data) {
+ return visitor.visitForOfLoop(this, data);
+ }
+}
--- a/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/api/tree/FunctionDeclarationTree.java Wed Jul 05 21:57:11 2017 +0200
+++ b/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/api/tree/FunctionDeclarationTree.java Tue Jul 12 21:18:13 2016 +0530
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2016, 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
@@ -28,7 +28,7 @@
import java.util.List;
/**
- * A tree node for a function declaration.
+ * A tree node for a <a href="http://www.ecma-international.org/ecma-262/6.0/#sec-function-definitions">function declaration</a>.
*
* For example:
* <pre>
@@ -37,6 +37,12 @@
* <em>body</em>
* </pre>
*
+ * <pre>
+ * <em>function*</em> <em>name</em>
+ * ( <em>parameters</em> )
+ * <em>body</em>
+ * </pre>
+ *
* @since 9
*/
public interface FunctionDeclarationTree extends StatementTree {
@@ -45,7 +51,7 @@
*
* @return name the function declared
*/
- String getName();
+ IdentifierTree getName();
/**
* Returns the parameters of this function.
@@ -67,4 +73,11 @@
* @return true if this function is strict
*/
boolean isStrict();
+
+ /**
+ * Is this a generator function?
+ *
+ * @return true if this is a generator function
+ */
+ boolean isGenerator();
}
--- a/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/api/tree/FunctionDeclarationTreeImpl.java Wed Jul 05 21:57:11 2017 +0200
+++ b/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/api/tree/FunctionDeclarationTreeImpl.java Tue Jul 12 21:18:13 2016 +0530
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2016, 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
@@ -32,7 +32,7 @@
final class FunctionDeclarationTreeImpl extends StatementTreeImpl
implements FunctionDeclarationTree {
private final FunctionNode funcNode;
- private final String funcName;
+ private final IdentifierTree funcName;
private final List<? extends ExpressionTree> params;
private final BlockTree body;
@@ -43,7 +43,7 @@
assert node.getInit() instanceof FunctionNode : "function expected";
funcNode = (FunctionNode)node.getInit();
assert funcNode.isDeclared() : "function declaration expected";
- funcName = funcNode.isAnonymous()? null : node.getName().getName();
+ funcName = funcNode.isAnonymous()? null : new IdentifierTreeImpl(node.getName());
this.params = params;
this.body = body;
}
@@ -54,7 +54,7 @@
}
@Override
- public String getName() {
+ public IdentifierTree getName() {
return funcName;
}
@@ -74,6 +74,11 @@
}
@Override
+ public boolean isGenerator() {
+ return funcNode.getKind() == FunctionNode.Kind.GENERATOR;
+ }
+
+ @Override
public <R,D> R accept(final TreeVisitor<R,D> visitor, final D data) {
return visitor.visitFunctionDeclaration(this, data);
}
--- a/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/api/tree/FunctionExpressionTree.java Wed Jul 05 21:57:11 2017 +0200
+++ b/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/api/tree/FunctionExpressionTree.java Tue Jul 12 21:18:13 2016 +0530
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2016, 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
@@ -28,7 +28,7 @@
import java.util.List;
/**
- * A tree node for a function expression.
+ * A tree node for <a href="http://www.ecma-international.org/ecma-262/6.0/#sec-function-defining-expressions">function expressions</a> including <a href="http://www.ecma-international.org/ecma-262/6.0/#sec-arrow-function-definitions">arrow functions</a>.
*
* For example:
* <pre>
@@ -37,6 +37,10 @@
* <em>body</em>
* </pre>
*
+ * <pre>
+ * <em>var</em> func = <em>(x) => x+1</em>
+ * </pre>
+ *
* @since 9
*/
public interface FunctionExpressionTree extends ExpressionTree {
@@ -45,7 +49,7 @@
*
* @return name the function declared
*/
- String getName();
+ IdentifierTree getName();
/**
* Returns the parameters of this function.
@@ -55,11 +59,13 @@
List<? extends ExpressionTree> getParameters();
/**
- * Returns the body of code of this function.
+ * Returns the body of this function. This may be a {@link BlockTree} when this
+ * function has a block body. This is an {@link ExpressionTree} when the function body
+ * is a concise expression as in an expression arrow, or in an expression closure.
*
- * @return the body of code
+ * @return the body of this function
*/
- BlockTree getBody();
+ Tree getBody();
/**
* Is this a strict function?
@@ -67,4 +73,18 @@
* @return true if this function is strict
*/
boolean isStrict();
+
+ /**
+ * Is this a arrow function?
+ *
+ * @return true if this is a arrow function
+ */
+ boolean isArrow();
+
+ /**
+ * Is this a generator function?
+ *
+ * @return true if this is a generator function
+ */
+ boolean isGenerator();
}
--- a/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/api/tree/FunctionExpressionTreeImpl.java Wed Jul 05 21:57:11 2017 +0200
+++ b/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/api/tree/FunctionExpressionTreeImpl.java Tue Jul 12 21:18:13 2016 +0530
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2016, 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
@@ -31,9 +31,9 @@
final class FunctionExpressionTreeImpl extends ExpressionTreeImpl
implements FunctionExpressionTree {
private final FunctionNode funcNode;
- private final String funcName;
+ private final IdentifierTree funcName;
private final List<? extends ExpressionTree> params;
- private final BlockTree body;
+ private final Tree body;
FunctionExpressionTreeImpl(final FunctionNode node,
final List<? extends ExpressionTree> params,
@@ -46,11 +46,17 @@
if (node.isAnonymous() || kind == FunctionNode.Kind.GETTER || kind == FunctionNode.Kind.SETTER) {
funcName = null;
} else {
- funcName = node.getIdent().getName();
+ funcName = new IdentifierTreeImpl(node.getIdent());
}
this.params = params;
- this.body = body;
+ if (node.getFlag(FunctionNode.HAS_EXPRESSION_BODY)) {
+ StatementTree first = body.getStatements().get(0);
+ assert first instanceof ReturnTree : "consise func. expression should have a return statement";
+ this.body = ((ReturnTree)first).getExpression();
+ } else {
+ this.body = body;
+ }
}
@Override
@@ -59,7 +65,7 @@
}
@Override
- public String getName() {
+ public IdentifierTree getName() {
return funcName;
}
@@ -69,7 +75,7 @@
}
@Override
- public BlockTree getBody() {
+ public Tree getBody() {
return body;
}
@@ -79,6 +85,16 @@
}
@Override
+ public boolean isArrow() {
+ return funcNode.getKind() == FunctionNode.Kind.ARROW;
+ }
+
+ @Override
+ public boolean isGenerator() {
+ return funcNode.getKind() == FunctionNode.Kind.GENERATOR;
+ }
+
+ @Override
public <R,D> R accept(final TreeVisitor<R,D> visitor, final D data) {
return visitor.visitFunctionExpression(this, data);
}
--- a/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/api/tree/IRTranslator.java Wed Jul 05 21:57:11 2017 +0200
+++ b/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/api/tree/IRTranslator.java Tue Jul 12 21:18:13 2016 +0530
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2016, 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
@@ -27,6 +27,7 @@
import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;
+import java.util.Map;
import jdk.nashorn.internal.ir.AccessNode;
import jdk.nashorn.internal.ir.BinaryNode;
import jdk.nashorn.internal.ir.Block;
@@ -35,6 +36,7 @@
import jdk.nashorn.internal.ir.CallNode;
import jdk.nashorn.internal.ir.CaseNode;
import jdk.nashorn.internal.ir.CatchNode;
+import jdk.nashorn.internal.ir.ClassNode;
import jdk.nashorn.internal.ir.ContinueNode;
import jdk.nashorn.internal.ir.DebuggerNode;
import jdk.nashorn.internal.ir.EmptyNode;
@@ -56,6 +58,7 @@
import jdk.nashorn.internal.ir.SplitNode;
import jdk.nashorn.internal.ir.Statement;
import jdk.nashorn.internal.ir.SwitchNode;
+import jdk.nashorn.internal.ir.TemplateLiteral;
import jdk.nashorn.internal.ir.TernaryNode;
import jdk.nashorn.internal.ir.ThrowNode;
import jdk.nashorn.internal.ir.TryNode;
@@ -87,11 +90,14 @@
return null;
}
- assert (node.getKind() == FunctionNode.Kind.SCRIPT) : "script function expected";
+ assert node.getKind() == FunctionNode.Kind.SCRIPT ||
+ node.getKind() == FunctionNode.Kind.MODULE :
+ "script or module function expected";
final Block body = node.getBody();
return new CompilationUnitTreeImpl(node,
- translateStats(body != null? getOrderedStatements(body.getStatements()) : null));
+ translateStats(body != null? getOrderedStatements(body.getStatements()) : null),
+ translateModule(node));
}
@Override
@@ -184,8 +190,15 @@
@Override
public boolean enterExpressionStatement(final ExpressionStatement expressionStatement) {
- curStat = new ExpressionStatementTreeImpl(expressionStatement,
+ if (expressionStatement.destructuringDeclarationType() != null) {
+ ExpressionTree expr = translateExpr(expressionStatement.getExpression());
+ assert expr instanceof AssignmentTree : "destructuring decl. statement does not have assignment";
+ AssignmentTree assign = (AssignmentTree)expr;
+ curStat = new DestructuringDeclTreeImpl(expressionStatement, assign.getVariable(), assign.getExpression());
+ } else {
+ curStat = new ExpressionStatementTreeImpl(expressionStatement,
translateExpr(expressionStatement.getExpression()));
+ }
return false;
}
@@ -209,6 +222,11 @@
translateExpr(forNode.getInit()),
translateExpr(forNode.getModify()),
translateBlock(forNode.getBody()));
+ } else if (forNode.isForOf()) {
+ curStat = new ForOfLoopTreeImpl(forNode,
+ translateExpr(forNode.getInit()),
+ translateExpr(forNode.getModify()),
+ translateBlock(forNode.getBody()));
} else {
curStat = new ForLoopTreeImpl(forNode,
translateExpr(forNode.getInit()),
@@ -224,8 +242,7 @@
public boolean enterFunctionNode(final FunctionNode functionNode) {
assert !functionNode.isDeclared() || functionNode.isAnonymous() : "should not reach here for function declaration";
- final List<? extends ExpressionTree> paramTrees
- = translateExprs(functionNode.getParameters());
+ final List<? extends ExpressionTree> paramTrees = translateParameters(functionNode);
final BlockTree blockTree = (BlockTree) translateBlock(functionNode.getBody(), true);
curExpr = new FunctionExpressionTreeImpl(functionNode, paramTrees, blockTree);
@@ -291,14 +308,7 @@
@Override
public boolean enterObjectNode(final ObjectNode objectNode) {
final List<PropertyNode> propNodes = objectNode.getElements();
- final List<PropertyTreeImpl> propTrees = new ArrayList<>(propNodes.size());
- for (final PropertyNode propNode : propNodes) {
- propTrees.add(new PropertyTreeImpl(propNode,
- translateExpr(propNode.getKey()),
- translateExpr(propNode.getValue()),
- (FunctionExpressionTree) translateExpr(propNode.getGetter()),
- (FunctionExpressionTree) translateExpr(propNode.getSetter())));
- }
+ final List<? extends PropertyTree> propTrees = translateProperties(propNodes);
curExpr = new ObjectLiteralTreeImpl(objectNode, propTrees);
return false;
}
@@ -347,6 +357,12 @@
}
@Override
+ public boolean enterTemplateLiteral(final TemplateLiteral templateLiteral) {
+ curExpr = new TemplateLiteralTreeImpl(templateLiteral, translateExprs(templateLiteral.getExpressions()));
+ return false;
+ }
+
+ @Override
public boolean enterTernaryNode(final TernaryNode ternaryNode) {
curExpr = new ConditionalExpressionTreeImpl(ternaryNode,
translateExpr(ternaryNode.getTest()),
@@ -386,6 +402,14 @@
if (unaryNode.isTokenType(TokenType.NEW)) {
curExpr = new NewTreeImpl(unaryNode,
translateExpr(unaryNode.getExpression()));
+ } else if (unaryNode.isTokenType(TokenType.YIELD) ||
+ unaryNode.isTokenType(TokenType.YIELD_STAR)) {
+ curExpr = new YieldTreeImpl(unaryNode,
+ translateExpr(unaryNode.getExpression()));
+ } else if (unaryNode.isTokenType(TokenType.SPREAD_ARGUMENT) ||
+ unaryNode.isTokenType(TokenType.SPREAD_ARRAY)) {
+ curExpr = new SpreadTreeImpl(unaryNode,
+ translateExpr(unaryNode.getExpression()));
} else {
curExpr = new UnaryTreeImpl(unaryNode,
translateExpr(unaryNode.getExpression()));
@@ -399,12 +423,19 @@
if (initNode instanceof FunctionNode && ((FunctionNode)initNode).isDeclared()) {
final FunctionNode funcNode = (FunctionNode) initNode;
- final List<? extends ExpressionTree> paramTrees
- = translateExprs(funcNode.getParameters());
+ final List<? extends ExpressionTree> paramTrees = translateParameters(funcNode);
final BlockTree blockTree = (BlockTree) translateBlock(funcNode.getBody(), true);
curStat = new FunctionDeclarationTreeImpl(varNode, paramTrees, blockTree);
+ } else if (initNode instanceof ClassNode && ((ClassNode)initNode).isStatement()) {
+ final ClassNode classNode = (ClassNode) initNode;
+
+ curStat = new ClassDeclarationTreeImpl(varNode,
+ translateIdent(classNode.getIdent()),
+ translateExpr(classNode.getClassHeritage()),
+ translateProperty(classNode.getConstructor()),
+ translateProperties(classNode.getClassElements()));
} else {
- curStat = new VariableTreeImpl(varNode, translateExpr(initNode));
+ curStat = new VariableTreeImpl(varNode, translateIdent(varNode.getName()), translateExpr(initNode));
}
return false;
@@ -433,6 +464,25 @@
return false;
}
+ /**
+ * Callback for entering a ClassNode
+ *
+ * @param classNode the node
+ * @return true if traversal should continue and node children be traversed, false otherwise
+ */
+ @Override
+ public boolean enterClassNode(final ClassNode classNode) {
+ assert !classNode.isStatement(): "should not reach here for class declaration";
+
+ curExpr = new ClassExpressionTreeImpl(classNode,
+ translateIdent(classNode.getIdent()),
+ translateExpr(classNode.getClassHeritage()),
+ translateProperty(classNode.getConstructor()),
+ translateProperties(classNode.getClassElements()));
+
+ return false;
+ }
+
private StatementTree translateBlock(final Block blockNode) {
return translateBlock(blockNode, false);
}
@@ -493,6 +543,24 @@
return statTrees;
}
+ private List<? extends ExpressionTree> translateParameters(final FunctionNode func) {
+ Map<IdentNode, Expression> paramExprs = func.getParameterExpressions();
+ if (paramExprs != null) {
+ List<IdentNode> params = func.getParameters();
+ final List<ExpressionTreeImpl> exprTrees = new ArrayList<>(params.size());
+ for (final IdentNode ident : params) {
+ Expression expr = paramExprs.containsKey(ident)? paramExprs.get(ident) : ident;
+ curExpr = null;
+ expr.accept(this);
+ assert curExpr != null;
+ exprTrees.add(curExpr);
+ }
+ return exprTrees;
+ } else {
+ return translateExprs(func.getParameters());
+ }
+ }
+
private List<? extends ExpressionTree> translateExprs(final List<? extends Expression> exprs) {
if (exprs == null) {
return null;
@@ -532,4 +600,25 @@
private static IdentifierTree translateIdent(final IdentNode ident) {
return new IdentifierTreeImpl(ident);
}
+
+ private List<? extends PropertyTree> translateProperties(final List<PropertyNode> propNodes) {
+ final List<PropertyTree> propTrees = new ArrayList<>(propNodes.size());
+ for (final PropertyNode propNode : propNodes) {
+ propTrees.add(translateProperty(propNode));
+ }
+ return propTrees;
+ }
+
+ private PropertyTree translateProperty(final PropertyNode propNode) {
+ return new PropertyTreeImpl(propNode,
+ translateExpr(propNode.getKey()),
+ translateExpr(propNode.getValue()),
+ (FunctionExpressionTree) translateExpr(propNode.getGetter()),
+ (FunctionExpressionTree) translateExpr(propNode.getSetter()));
+ }
+
+ private ModuleTree translateModule(final FunctionNode func) {
+ return func.getKind() == FunctionNode.Kind.MODULE?
+ ModuleTreeImpl.create(func) : null;
+ }
}
--- a/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/api/tree/IdentifierTree.java Wed Jul 05 21:57:11 2017 +0200
+++ b/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/api/tree/IdentifierTree.java Tue Jul 12 21:18:13 2016 +0530
@@ -42,4 +42,46 @@
* @return the name of this identifier
*/
String getName();
+
+ /**
+ * Is this a rest parameter for a function or rest elements of an array?
+ *
+ * @return true if this is a rest parameter
+ */
+ boolean isRestParameter();
+
+ /**
+ * Is this super identifier?
+ *
+ * @return true if this is super identifier
+ */
+ boolean isSuper();
+
+ /**
+ * Is this 'this' identifier?
+ *
+ * @return true if this is 'this' identifier
+ */
+ boolean isThis();
+
+ /**
+ * Is this "*" used in module export entry?
+ *
+ * @return true if this "*" used in module export entry?
+ */
+ boolean isStar();
+
+ /**
+ * Is this "default" used in module export entry?
+ *
+ * @return true if this 'default' used in module export entry?
+ */
+ boolean isDefault();
+
+ /**
+ * Is this "*default*" used in module export entry?
+ *
+ * @return true if this '*default*' used in module export entry?
+ */
+ boolean isStarDefaultStar();
}
--- a/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/api/tree/IdentifierTreeImpl.java Wed Jul 05 21:57:11 2017 +0200
+++ b/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/api/tree/IdentifierTreeImpl.java Tue Jul 12 21:18:13 2016 +0530
@@ -27,6 +27,7 @@
package jdk.nashorn.api.tree;
import jdk.nashorn.internal.ir.IdentNode;
+import jdk.nashorn.internal.ir.Module;
final class IdentifierTreeImpl extends ExpressionTreeImpl implements IdentifierTree {
private final String name;
@@ -47,6 +48,37 @@
}
@Override
+ public boolean isRestParameter() {
+ return ((IdentNode)node).isRestParameter();
+ }
+
+ @Override
+ public boolean isSuper() {
+ final IdentNode ident = (IdentNode)node;
+ return ident.isDirectSuper() || "super".equals(ident.getName());
+ }
+
+ @Override
+ public boolean isThis() {
+ return "this".equals(((IdentNode)node).getName());
+ }
+
+ @Override
+ public boolean isStar() {
+ return Module.STAR_NAME.equals(((IdentNode)node).getName());
+ }
+
+ @Override
+ public boolean isDefault() {
+ return Module.DEFAULT_NAME.equals(((IdentNode)node).getName());
+ }
+
+ @Override
+ public boolean isStarDefaultStar() {
+ return Module.DEFAULT_EXPORT_BINDING_NAME.equals(((IdentNode)node).getName());
+ }
+
+ @Override
public <R,D> R accept(final TreeVisitor<R,D> visitor, final D data) {
return visitor.visitIdentifier(this, data);
}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/api/tree/ImportEntryTree.java Tue Jul 12 21:18:13 2016 +0530
@@ -0,0 +1,53 @@
+/*
+ * Copyright (c) 2016, 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 jdk.nashorn.api.tree;
+
+import java.util.List;
+
+/**
+ * A Tree node for import entry of <a href="http://www.ecma-international.org/ecma-262/6.0/#sec-modules">Module information</a>.
+ */
+public interface ImportEntryTree extends Tree {
+ /**
+ * Returns the entry's module request.
+ *
+ * @return the module request
+ */
+ public IdentifierTree getModuleRequest();
+
+ /**
+ * Returns the entry's import name.
+ *
+ * @return the import name
+ */
+ public IdentifierTree getImportName();
+
+ /**
+ * Returns the entry's local name.
+ *
+ * @return the local name
+ */
+ public IdentifierTree getLocalName();
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/api/tree/ImportEntryTreeImpl.java Tue Jul 12 21:18:13 2016 +0530
@@ -0,0 +1,100 @@
+/*
+ * Copyright (c) 2016, 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 jdk.nashorn.api.tree;
+
+import java.util.List;
+import java.util.stream.Collectors;
+import jdk.nashorn.internal.ir.FunctionNode;
+import jdk.nashorn.internal.ir.IdentNode;
+import jdk.nashorn.internal.ir.Module;
+import static jdk.nashorn.api.tree.ModuleTreeImpl.identOrNull;
+
+final class ImportEntryTreeImpl extends TreeImpl implements ImportEntryTree {
+ private final long startPos, endPos;
+ private final IdentifierTree moduleRequest;
+ private final IdentifierTree importName;
+ private final IdentifierTree localName;
+
+ private ImportEntryTreeImpl(final long startPos, final long endPos,
+ IdentifierTree moduleRequest,
+ IdentifierTree importName,
+ IdentifierTree localName) {
+ super(null); // No underlying Node!
+ this.startPos = startPos;
+ this.endPos = endPos;
+ this.moduleRequest = moduleRequest;
+ this.importName = importName;
+ this.localName = localName;
+ }
+
+ private static ImportEntryTreeImpl createImportEntry(Module.ImportEntry entry) {
+ return new ImportEntryTreeImpl(entry.getStartPosition(),
+ entry.getEndPosition(),
+ identOrNull(entry.getModuleRequest()),
+ identOrNull(entry.getImportName()),
+ identOrNull(entry.getLocalName()));
+ }
+
+ static List<ImportEntryTreeImpl> createImportList(List<Module.ImportEntry> importList) {
+ return importList.stream().
+ map(ImportEntryTreeImpl::createImportEntry).
+ collect(Collectors.toList());
+ }
+
+ @Override
+ public Kind getKind() {
+ return Tree.Kind.IMPORT_ENTRY;
+ }
+
+ @Override
+ public <R,D> R accept(final TreeVisitor<R,D> visitor, final D data) {
+ return visitor.visitImportEntry(this, data);
+ }
+
+ @Override
+ public long getStartPosition() {
+ return startPos;
+ }
+
+ @Override
+ public long getEndPosition() {
+ return endPos;
+ }
+
+ @Override
+ public IdentifierTree getModuleRequest() {
+ return moduleRequest;
+ }
+
+ @Override
+ public IdentifierTree getImportName() {
+ return importName;
+ }
+
+ @Override
+ public IdentifierTree getLocalName() {
+ return localName;
+ }
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/api/tree/ModuleTree.java Tue Jul 12 21:18:13 2016 +0530
@@ -0,0 +1,60 @@
+/*
+ * Copyright (c) 2016, 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 jdk.nashorn.api.tree;
+
+import java.util.List;
+
+/**
+ * A Tree node for <a href="http://www.ecma-international.org/ecma-262/6.0/#sec-modules">Module information</a>.
+ */
+public interface ModuleTree extends Tree {
+ /**
+ * Returns the list of import entries.
+ *
+ * @return the import entries
+ */
+ public List<? extends ImportEntryTree> getImportEntries();
+
+ /**
+ * Returns the list of local export entries.
+ *
+ * @return the local export entries
+ */
+ public List<? extends ExportEntryTree> getLocalExportEntries();
+
+ /**
+ * Returns the list of indirect export entries.
+ *
+ * @return the indirect export entries
+ */
+ public List<? extends ExportEntryTree> getIndirectExportEntries();
+
+ /**
+ * Returns the list of star export entries.
+ *
+ * @return the star export entries
+ */
+ public List<? extends ExportEntryTree> getStarExportEntries();
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/api/tree/ModuleTreeImpl.java Tue Jul 12 21:18:13 2016 +0530
@@ -0,0 +1,99 @@
+/*
+ * Copyright (c) 2016, 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 jdk.nashorn.api.tree;
+
+import java.util.List;
+import java.util.stream.Collectors;
+import jdk.nashorn.internal.ir.FunctionNode;
+import jdk.nashorn.internal.ir.IdentNode;
+import jdk.nashorn.internal.ir.Module;
+import static jdk.nashorn.api.tree.ExportEntryTreeImpl.createExportList;
+import static jdk.nashorn.api.tree.ImportEntryTreeImpl.createImportList;
+
+final class ModuleTreeImpl extends TreeImpl implements ModuleTree {
+
+ private final Module mod;
+ private final List<? extends ImportEntryTree> imports;
+ private final List<? extends ExportEntryTree> localExports;
+ private final List<? extends ExportEntryTree> indirectExports;
+ private final List<? extends ExportEntryTree> starExports;
+
+ private ModuleTreeImpl(final FunctionNode func,
+ final List<? extends ImportEntryTree> imports,
+ final List<? extends ExportEntryTree> localExports,
+ final List<? extends ExportEntryTree> indirectExports,
+ final List<? extends ExportEntryTree> starExports) {
+ super(func);
+ assert func.getKind() == FunctionNode.Kind.MODULE : "module function node expected";
+ this.mod = func.getModule();
+ this.imports = imports;
+ this.localExports = localExports;
+ this.indirectExports = indirectExports;
+ this.starExports = starExports;
+ }
+
+ static ModuleTreeImpl create(final FunctionNode func) {
+ final Module mod = func.getModule();
+ return new ModuleTreeImpl(func,
+ createImportList(mod.getImportEntries()),
+ createExportList(mod.getLocalExportEntries()),
+ createExportList(mod.getIndirectExportEntries()),
+ createExportList(mod.getStarExportEntries()));
+ }
+
+ @Override
+ public Kind getKind() {
+ return Tree.Kind.MODULE;
+ }
+
+ @Override
+ public List<? extends ImportEntryTree> getImportEntries() {
+ return imports;
+ }
+
+ @Override
+ public List<? extends ExportEntryTree> getLocalExportEntries() {
+ return localExports;
+ }
+
+ @Override
+ public List<? extends ExportEntryTree> getIndirectExportEntries() {
+ return indirectExports;
+ }
+
+ @Override
+ public List<? extends ExportEntryTree> getStarExportEntries() {
+ return starExports;
+ }
+
+ @Override
+ public <R,D> R accept(final TreeVisitor<R,D> visitor, final D data) {
+ return visitor.visitModule(this, data);
+ }
+
+ static IdentifierTree identOrNull(final IdentNode node) {
+ return node != null? new IdentifierTreeImpl(node) : null;
+ }
+}
--- a/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/api/tree/Parser.java Wed Jul 05 21:57:11 2017 +0200
+++ b/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/api/tree/Parser.java Tue Jul 12 21:18:13 2016 +0530
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2016, 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
@@ -130,6 +130,8 @@
* <dt>"--no-syntax-extensions" or "-nse"</dt><dd>disable ECMAScript syntax extensions</dd>
* <dt>"-scripting"</dt><dd>enable scripting mode extensions</dd>
* <dt>"-strict"</dt><dd>enable ECMAScript strict mode</dd>
+ * <dt>"--language=es6"</dt><dd>enable ECMAScript 6 parsing mode</dd>
+ * <dt>"--es6-module"</dt><dd>enable ECMAScript 6 module parsing mode. This option implies --language=es6</dd>
* </dl>
*
* @throws NullPointerException if options array or any of its element is null
@@ -148,6 +150,8 @@
case "-nse":
case "-scripting":
case "-strict":
+ case "--language=es6":
+ case "--es6-module":
break;
default:
throw new IllegalArgumentException(opt);
--- a/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/api/tree/ParserImpl.java Wed Jul 05 21:57:11 2017 +0200
+++ b/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/api/tree/ParserImpl.java Tue Jul 12 21:18:13 2016 +0530
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2016, 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
@@ -22,7 +22,6 @@
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
-
package jdk.nashorn.api.tree;
import java.io.File;
@@ -31,6 +30,7 @@
import java.io.Reader;
import java.net.URL;
import java.nio.file.Path;
+import java.util.Arrays;
import java.util.Map;
import java.util.Objects;
import jdk.nashorn.api.scripting.NashornException;
@@ -47,51 +47,94 @@
final class ParserImpl implements Parser {
private final ScriptEnvironment env;
+ private final boolean moduleMode;
ParserImpl(final String... args) throws IllegalArgumentException {
- Objects.requireNonNull(args);
- Options options = new Options("nashorn");
- options.process(args);
- this.env = new ScriptEnvironment(options,
- new PrintWriter(System.out), new PrintWriter(System.err));
+ Objects.requireNonNull(args);
+
+ // handle the parser specific "--es6-module" option
+ boolean seenModuleOption = false;
+ for (int idx = 0; idx < args.length; idx++) {
+ final String opt = args[idx];
+ if (opt.equals("--es6-module")) {
+ seenModuleOption = true;
+ /*
+ * Nashorn parser does not understand parser API specific
+ * option. This option implies --language=es6. So, we change
+ * the option to --language=es6. Note that if user specified
+ * --language=es6 explicitly, that is okay. Nashorn tolerates
+ * repeated options!
+ */
+ args[idx] = "--language=es6";
+ break;
+ }
+ }
+ this.moduleMode = seenModuleOption;
+
+ // append "--parse-only to signal to the Nashorn that it
+ // is being used in "parse only" mode.
+ String[] newArgs = Arrays.copyOf(args, args.length + 1, String[].class);
+ newArgs[args.length] = "--parse-only";
+ Options options = new Options("nashorn");
+ options.process(newArgs);
+ this.env = new ScriptEnvironment(options,
+ new PrintWriter(System.out), new PrintWriter(System.err));
}
@Override
public CompilationUnitTree parse(final File file, final DiagnosticListener listener) throws IOException, NashornException {
+ if (moduleMode) {
+ return parseModule(file, listener);
+ }
final Source src = Source.sourceFor(Objects.requireNonNull(file).getName(), file);
return translate(makeParser(src, listener).parse());
}
@Override
public CompilationUnitTree parse(final Path path, final DiagnosticListener listener) throws IOException, NashornException {
+ if (moduleMode) {
+ return parseModule(path, listener);
+ }
final Source src = Source.sourceFor(Objects.requireNonNull(path).toString(), path);
return translate(makeParser(src, listener).parse());
}
@Override
public CompilationUnitTree parse(final URL url, final DiagnosticListener listener) throws IOException, NashornException {
+ if (moduleMode) {
+ return parseModule(url, listener);
+ }
final Source src = Source.sourceFor(url.toString(), url);
return translate(makeParser(src, listener).parse());
}
@Override
public CompilationUnitTree parse(final String name, final Reader reader, final DiagnosticListener listener) throws IOException, NashornException {
+ if (moduleMode) {
+ return parseModule(name, reader, listener);
+ }
final Source src = Source.sourceFor(Objects.requireNonNull(name), Objects.requireNonNull(reader));
return translate(makeParser(src, listener).parse());
}
@Override
public CompilationUnitTree parse(final String name, final String code, final DiagnosticListener listener) throws NashornException {
+ if (moduleMode) {
+ return parseModule(name, code, listener);
+ }
final Source src = Source.sourceFor(name, code);
return translate(makeParser(src, listener).parse());
}
@Override
public CompilationUnitTree parse(final ScriptObjectMirror scriptObj, final DiagnosticListener listener) throws NashornException {
- final Map<?,?> map = Objects.requireNonNull(scriptObj);
+ if (moduleMode) {
+ return parseModule(scriptObj, listener);
+ }
+ final Map<?, ?> map = Objects.requireNonNull(scriptObj);
if (map.containsKey("script") && map.containsKey("name")) {
final String script = JSType.toString(map.get("script"));
- final String name = JSType.toString(map.get("name"));
+ final String name = JSType.toString(map.get("name"));
final Source src = Source.sourceFor(name, script);
return translate(makeParser(src, listener).parse());
} else {
@@ -99,12 +142,55 @@
}
}
+ private CompilationUnitTree parseModule(File file, DiagnosticListener listener) throws IOException, NashornException {
+ final Source src = Source.sourceFor(Objects.requireNonNull(file).getName(), file);
+ return makeModule(src, listener);
+ }
+
+ private CompilationUnitTree parseModule(Path path, DiagnosticListener listener) throws IOException, NashornException {
+ final Source src = Source.sourceFor(Objects.requireNonNull(path).toString(), path);
+ return makeModule(src, listener);
+ }
+
+ private CompilationUnitTree parseModule(URL url, DiagnosticListener listener) throws IOException, NashornException {
+ final Source src = Source.sourceFor(url.toString(), url);
+ return makeModule(src, listener);
+ }
+
+ private CompilationUnitTree parseModule(String name, Reader reader, DiagnosticListener listener) throws IOException, NashornException {
+ final Source src = Source.sourceFor(Objects.requireNonNull(name), Objects.requireNonNull(reader));
+ return makeModule(src, listener);
+ }
+
+ private CompilationUnitTree parseModule(String name, String code, DiagnosticListener listener) throws NashornException {
+ final Source src = Source.sourceFor(name, code);
+ return makeModule(src, listener);
+ }
+
+ private CompilationUnitTree parseModule(ScriptObjectMirror scriptObj, DiagnosticListener listener) throws NashornException {
+ final Map<?, ?> map = Objects.requireNonNull(scriptObj);
+ if (map.containsKey("script") && map.containsKey("name")) {
+ final String script = JSType.toString(map.get("script"));
+ final String name = JSType.toString(map.get("name"));
+ final Source src = Source.sourceFor(name, script);
+ return makeModule(src, listener);
+ } else {
+ throw new IllegalArgumentException("can't find 'script' and 'name' properties");
+ }
+ }
+
+ private CompilationUnitTree makeModule(Source src, DiagnosticListener listener) {
+ final FunctionNode modFunc = makeParser(src, listener).parseModule(src.getName());
+ return new IRTranslator().translate(modFunc);
+ }
+
private jdk.nashorn.internal.parser.Parser makeParser(final Source source, final DiagnosticListener listener) {
- final ErrorManager errMgr = listener != null? new ListenerErrorManager(listener) : new Context.ThrowErrorManager();
+ final ErrorManager errMgr = listener != null ? new ListenerErrorManager(listener) : new Context.ThrowErrorManager();
return new jdk.nashorn.internal.parser.Parser(env, source, errMgr);
}
private static class ListenerErrorManager extends ErrorManager {
+
private final DiagnosticListener listener;
ListenerErrorManager(final DiagnosticListener listener) {
--- a/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/api/tree/PropertyTree.java Wed Jul 05 21:57:11 2017 +0200
+++ b/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/api/tree/PropertyTree.java Tue Jul 12 21:18:13 2016 +0530
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2016, 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
@@ -60,4 +60,18 @@
* @return the getter function of the property
*/
public FunctionExpressionTree getSetter();
+
+ /**
+ * Is this a class static property?
+ *
+ * @return true if this is a static property
+ */
+ public boolean isStatic();
+
+ /**
+ * Is this a computed property?
+ *
+ * @return true if this is a computed property
+ */
+ public boolean isComputed();
}
--- a/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/api/tree/PropertyTreeImpl.java Wed Jul 05 21:57:11 2017 +0200
+++ b/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/api/tree/PropertyTreeImpl.java Tue Jul 12 21:18:13 2016 +0530
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2016, 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
@@ -32,6 +32,8 @@
private final ExpressionTree value;
private final FunctionExpressionTree getter;
private final FunctionExpressionTree setter;
+ private final boolean isStatic, isComputed;
+
PropertyTreeImpl(final PropertyNode node,
final ExpressionTree key,
final ExpressionTree value,
@@ -42,6 +44,8 @@
this.value = value;
this.getter = getter;
this.setter = setter;
+ this.isStatic = node.isStatic();
+ this.isComputed = node.isComputed();
}
@Override
@@ -70,6 +74,16 @@
}
@Override
+ public boolean isStatic() {
+ return isStatic;
+ }
+
+ @Override
+ public boolean isComputed() {
+ return isComputed;
+ }
+
+ @Override
public <R,D> R accept(final TreeVisitor<R,D> visitor, final D data) {
return visitor.visitProperty(this, data);
}
--- a/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/api/tree/RegExpLiteralTree.java Wed Jul 05 21:57:11 2017 +0200
+++ b/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/api/tree/RegExpLiteralTree.java Tue Jul 12 21:18:13 2016 +0530
@@ -30,7 +30,7 @@
*
* @since 9
*/
-public interface RegExpLiteralTree extends Tree {
+public interface RegExpLiteralTree extends ExpressionTree {
/**
* Regular expression pattern to match.
*
--- a/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/api/tree/SimpleTreeVisitorES5_1.java Wed Jul 05 21:57:11 2017 +0200
+++ b/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/api/tree/SimpleTreeVisitorES5_1.java Tue Jul 12 21:18:13 2016 +0530
@@ -61,6 +61,45 @@
return null;
}
+ /**
+ * Visits a {@code ModuleTree} tree by calling {@code
+ * visitUnknown}.
+ *
+ * @param node {@inheritDoc}
+ * @param p {@inheritDoc}
+ * @return the result of {@code visitUnknown}
+ */
+ @Override
+ public R visitModule(ModuleTree node, P p) {
+ return visitUnknown(node, p);
+ }
+
+ /**
+ * Visits an {@code ExportEntryTree} tree by calling {@code
+ * visitUnknown}.
+ *
+ * @param node {@inheritDoc}
+ * @param p {@inheritDoc}
+ * @return the result of {@code visitUnknown}
+ */
+ @Override
+ public R visitExportEntry(ExportEntryTree node, P p) {
+ return visitUnknown(node, p);
+ }
+
+ /**
+ * Visits an {@code ImportEntryTree} tree by calling {@code
+ * visitUnknown}.
+ *
+ * @param node {@inheritDoc}
+ * @param p {@inheritDoc}
+ * @return the result of {@code visitUnknown}
+ */
+ @Override
+ public R visitImportEntry(ImportEntryTree node, P p) {
+ return visitUnknown(node, p);
+ }
+
@Override
public R visitBinary(final BinaryTree node, final P r) {
node.getLeftOperand().accept(this, r);
@@ -105,6 +144,32 @@
return null;
}
+ /**
+ * Visits a {@code ClassDeclarationTree} tree by calling {@code
+ * visitUnknown}.
+ *
+ * @param node {@inheritDoc}
+ * @param p {@inheritDoc}
+ * @return the result of {@code visitUnknown}
+ */
+ @Override
+ public R visitClassDeclaration(ClassDeclarationTree node, P p) {
+ return visitUnknown(node, p);
+ }
+
+ /**
+ * Visits a {@code ClassExpressionTree} tree by calling {@code
+ * visitUnknown}.
+ *
+ * @param node {@inheritDoc}
+ * @param p {@inheritDoc}
+ * @return the result of {@code visitUnknown}
+ */
+ @Override
+ public R visitClassExpression(ClassExpressionTree node, P p) {
+ return visitUnknown(node, p);
+ }
+
@Override
public R visitConditionalExpression(final ConditionalExpressionTree node, final P r) {
node.getCondition().accept(this, r);
@@ -173,6 +238,19 @@
return null;
}
+ /**
+ * Visits a {@code ForOfLoopTree} tree by calling {@code
+ * visitUnknown}.
+ *
+ * @param node {@inheritDoc}
+ * @param p {@inheritDoc}
+ * @return the result of {@code visitUnknown}
+ */
+ @Override
+ public R visitForOfLoop(ForOfLoopTree node, P p) {
+ return visitUnknown(node, p);
+ }
+
@Override
public R visitFunctionCall(final FunctionCallTree node, final P r) {
node.getFunctionSelect().accept(this, r);
@@ -305,11 +383,37 @@
return null;
}
+ /**
+ * Visits a {@code TemplateLiteralTree} tree by calling {@code
+ * visitUnknown}.
+ *
+ * @param node {@inheritDoc}
+ * @param p {@inheritDoc}
+ * @return the result of {@code visitUnknown}
+ */
+ @Override
+ public R visitTemplateLiteral(TemplateLiteralTree node, P p) {
+ return visitUnknown(node, p);
+ }
+
@Override
public R visitEmptyStatement(final EmptyStatementTree node, final P r) {
return null;
}
+ /**
+ * Visits a {@code SpreadTree} tree by calling {@code
+ * visitUnknown}.
+ *
+ * @param node {@inheritDoc}
+ * @param p {@inheritDoc}
+ * @return the result of {@code visitUnknown}
+ */
+ @Override
+ public R visitSpread(SpreadTree node, P p) {
+ return visitUnknown(node, p);
+ }
+
@Override
public R visitSwitch(final SwitchTree node, final P r) {
node.getExpression().accept(this, r);
@@ -382,9 +486,36 @@
return null;
}
+ /**
+ * Visits a {@code YieldTree} tree by calling {@code
+ * visitUnknown}.
+ *
+ * @param node {@inheritDoc}
+ * @param p {@inheritDoc}
+ * @return the result of {@code visitUnknown}
+ */
@Override
- public R visitUnknown(final Tree node, final P r) {
+ public R visitYield(YieldTree node, P p) {
+ return visitUnknown(node, p);
+ }
+
+ /**
+ * {@inheritDoc}
+ *
+ * @implSpec The default implementation of this method in {@code
+ * SimpleTreeVisitorES5_1} will always throw {@code
+ * UnknownTypeException}. This behavior is not required of a
+ * subclass.
+ *
+ * @param node {@inheritDoc}
+ * @param p {@inheritDoc}
+ * @return abnormal return by throwing exception always
+ * @throws UnknownTreeException
+ * a visitor implementation may optionally throw this exception
+ */
+ @Override
+ public R visitUnknown(final Tree node, final P p) {
// unknown in ECMAScript 5.1 edition
- throw new UnknownTreeException(node, r);
+ throw new UnknownTreeException(node, p);
}
}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/api/tree/SimpleTreeVisitorES6.java Tue Jul 12 21:18:13 2016 +0530
@@ -0,0 +1,226 @@
+/*
+ * Copyright (c) 2016, 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 jdk.nashorn.api.tree;
+
+import java.util.List;
+
+/**
+ * A simple implementation of the TreeVisitor for ECMAScript edition 6.
+ *
+ * <p>The visit methods corresponding to ES 6 language constructs walk the
+ * "components" of the given tree by calling accept method passing the
+ * current visitor and the additional parameter.
+ *
+ * <p>For constructs introduced in later versions, {@code visitUnknown}
+ * is called instead which throws {@link UnknownTreeException}.
+ *
+ * <p> Methods in this class may be overridden subject to their
+ * general contract. Note that annotating methods in concrete
+ * subclasses with {@link java.lang.Override @Override} will help
+ * ensure that methods are overridden as intended.
+ *
+ * @param <R> the return type of this visitor's methods. Use {@link
+ * Void} for visitors that do not need to return results.
+ * @param <P> the type of the additional parameter to this visitor's
+ * methods. Use {@code Void} for visitors that do not need an
+ * additional parameter.
+ */
+public class SimpleTreeVisitorES6<R, P> extends SimpleTreeVisitorES5_1<R, P> {
+ @Override
+ public R visitCompilationUnit(final CompilationUnitTree node, final P r) {
+ final ModuleTree mod = node.getModule();
+ if (mod != null) {
+ mod.accept(this, r);
+ }
+ return super.visitCompilationUnit(node, r);
+ }
+
+ /**
+ * Visit Module tree.
+ *
+ * @param node node being visited
+ * @param p extra parameter passed to the visitor
+ * @return value from the visitor
+ */
+ @Override
+ public R visitModule(ModuleTree node, P p) {
+ node.getImportEntries().forEach(e -> visitImportEntry(e, p));
+ node.getLocalExportEntries().forEach(e -> visitExportEntry(e, p));
+ node.getIndirectExportEntries().forEach(e -> visitExportEntry(e, p));
+ node.getStarExportEntries().forEach(e -> visitExportEntry(e, p));
+ return null;
+ }
+
+ /**
+ * Visit Module ExportEntry tree.
+ *
+ * @param node node being visited
+ * @param p extra parameter passed to the visitor
+ * @return value from the visitor
+ */
+ @Override
+ public R visitExportEntry(ExportEntryTree node, P p) {
+ return null;
+ }
+
+ /**
+ * Visit Module ImportEntry tree.
+ *
+ * @param node node being visited
+ * @param p extra parameter passed to the visitor
+ * @return value from the visitor
+ */
+ @Override
+ public R visitImportEntry(ImportEntryTree node, P p) {
+ return null;
+ }
+
+ /**
+ * Visit class statement tree.
+ *
+ * @param node node being visited
+ * @param p extra parameter passed to the visitor
+ * @return value from the visitor
+ */
+ @Override
+ public R visitClassDeclaration(ClassDeclarationTree node, P p) {
+ node.getName().accept(this, p);
+ final ExpressionTree heritage = node.getClassHeritage();
+ if (heritage != null) {
+ heritage.accept(this, p);
+ }
+ final PropertyTree constructor = node.getConstructor();
+ if (constructor != null) {
+ constructor.accept(this, p);
+ }
+ final List<? extends PropertyTree> elements = node.getClassElements();
+ if (elements != null) {
+ for (PropertyTree prop : elements) {
+ prop.accept(this, p);
+ }
+ }
+
+ return null;
+ }
+
+ /**
+ * Visit class expression tree.
+ *
+ * @param node node being visited
+ * @param p extra parameter passed to the visitor
+ * @return value from the visitor
+ */
+ @Override
+ public R visitClassExpression(ClassExpressionTree node, P p) {
+ node.getName().accept(this, p);
+ final ExpressionTree heritage = node.getClassHeritage();
+ if (heritage != null) {
+ heritage.accept(this, p);
+ }
+ final PropertyTree constructor = node.getConstructor();
+ if (constructor != null) {
+ constructor.accept(this, p);
+ }
+ final List<? extends PropertyTree> elements = node.getClassElements();
+ if (elements != null) {
+ for (PropertyTree prop : elements) {
+ prop.accept(this, p);
+ }
+ }
+
+ return null;
+ }
+
+ /**
+ * Visit for..of statement tree.
+ *
+ * @param node node being visited
+ * @param p extra parameter passed to the visitor
+ * @return value from the visitor
+ */
+ @Override
+ public R visitForOfLoop(final ForOfLoopTree node, final P p) {
+ node.getVariable().accept(this, p);
+ node.getExpression().accept(this, p);
+ final StatementTree stat = node.getStatement();
+ if (stat != null) {
+ stat.accept(this, p);
+ }
+ return null;
+ }
+
+ /**
+ * Visit 'yield' expression tree.
+ *
+ * @param node node being visited
+ * @param p extra parameter passed to the visitor
+ * @return value from the visitor
+ */
+ @Override
+ public R visitYield(YieldTree node, P p) {
+ node.getExpression().accept(this, p);
+ return null;
+ }
+
+ /**
+ * Visit 'spread' expression tree.
+ *
+ * @param node node being visited
+ * @param p extra parameter passed to the visitor
+ * @return value from the visitor
+ */
+ @Override
+ public R visitSpread(SpreadTree node, P p) {
+ node.getExpression().accept(this, p);
+ return null;
+ }
+
+ /**
+ * Visit template literal tree.
+ *
+ * @param node node being visited
+ * @param p extra parameter passed to the visitor
+ * @return value from the visitor
+ */
+ @Override
+ public R visitTemplateLiteral(TemplateLiteralTree node, P p) {
+ final List<? extends ExpressionTree> expressions = node.getExpressions();
+ for (ExpressionTree expr : expressions) {
+ expr.accept(this, p);
+ }
+ return null;
+ }
+
+ @Override
+ public R visitVariable(final VariableTree node, final P r) {
+ final ExpressionTree expr = node.getBinding();
+ if (expr != null) {
+ expr.accept(this, r);
+ }
+ super.visitVariable(node, r);
+ return null;
+ }
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/api/tree/SpreadTree.java Tue Jul 12 21:18:13 2016 +0530
@@ -0,0 +1,38 @@
+/*
+ * Copyright (c) 2016, 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 jdk.nashorn.api.tree;
+
+/**
+ * A tree node for spread operator in array elements, function call arguments.
+ */
+public interface SpreadTree extends ExpressionTree {
+ /**
+ * Returns the expression that is being spread.
+ *
+ * @return The expression that is being spread.
+ */
+ ExpressionTree getExpression();
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/api/tree/SpreadTreeImpl.java Tue Jul 12 21:18:13 2016 +0530
@@ -0,0 +1,53 @@
+/*
+ * Copyright (c) 2016, 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 jdk.nashorn.api.tree;
+
+import jdk.nashorn.internal.ir.Expression;
+
+final class SpreadTreeImpl extends ExpressionTreeImpl
+ implements SpreadTree {
+
+ private final ExpressionTree expr;
+
+ SpreadTreeImpl(final Expression exprNode, final ExpressionTree expr) {
+ super(exprNode);
+ this.expr = expr;
+ }
+
+ @Override
+ public Tree.Kind getKind() {
+ return Tree.Kind.SPREAD;
+ }
+
+ @Override
+ public ExpressionTree getExpression() {
+ return expr;
+ }
+
+ @Override
+ public <R,D> R accept(final TreeVisitor<R,D> visitor, final D data) {
+ return visitor.visitSpread(this, data);
+ }
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/api/tree/TemplateLiteralTree.java Tue Jul 12 21:18:13 2016 +0530
@@ -0,0 +1,48 @@
+/*
+ * Copyright (c) 2016, 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 jdk.nashorn.api.tree;
+
+import java.util.List;
+
+/**
+ * A tree node for <a href="http://www.ecma-international.org/ecma-262/6.0/#sec-template-literals">template literal strings</a>.
+ *
+ * For example:
+ * <pre>
+ * `This is a String with ${computed} values in it`
+ * </pre>
+ *
+ * @since 9
+ *
+ */
+public interface TemplateLiteralTree extends ExpressionTree {
+ /**
+ * Returns the list of expressions in this template string
+ *
+ * @return the list of expressions in this template string
+ */
+ List<? extends ExpressionTree> getExpressions();
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/api/tree/TemplateLiteralTreeImpl.java Tue Jul 12 21:18:13 2016 +0530
@@ -0,0 +1,56 @@
+/*
+ * Copyright (c) 2016, 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 jdk.nashorn.api.tree;
+
+import java.util.List;
+import jdk.nashorn.internal.ir.Expression;
+
+final class TemplateLiteralTreeImpl extends ExpressionTreeImpl
+ implements TemplateLiteralTree {
+
+ private final List<? extends ExpressionTree> expressions;
+
+ TemplateLiteralTreeImpl(Expression node, List<? extends ExpressionTree> expressions) {
+ super(node);
+ this.expressions = expressions;
+ }
+
+ @Override
+ public Kind getKind() {
+ return Kind.TEMPLATE_LITERAL;
+ }
+
+ @Override
+ public List<? extends ExpressionTree> getExpressions() {
+ return expressions;
+ }
+
+
+ @Override
+ public <R,D> R accept(final TreeVisitor<R,D> visitor, final D data) {
+ return visitor.visitTemplateLiteral(this, data);
+ }
+}
--- a/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/api/tree/Tree.java Wed Jul 05 21:57:11 2017 +0200
+++ b/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/api/tree/Tree.java Tue Jul 12 21:18:13 2016 +0530
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2016, 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
@@ -65,6 +65,16 @@
BREAK(BreakTree.class),
/**
+ * Used for instances of {@link ClassDeclarationTree}.
+ */
+ CLASS(ClassDeclarationTree.class),
+
+ /**
+ * Used for instances of {@link ClassExpressionTree}.
+ */
+ CLASS_EXPRESSION(ClassExpressionTree.class),
+
+ /**
* Used for instances of {@link CaseTree}.
*/
CASE(CaseTree.class),
@@ -150,6 +160,21 @@
LABELED_STATEMENT(LabeledStatementTree.class),
/**
+ * Used for instances of {@link ModuleTree}.
+ */
+ MODULE(ModuleTree.class),
+
+ /**
+ * Used for instances of {@link ExportEntryTree}.
+ */
+ EXPORT_ENTRY(ExportEntryTree.class),
+
+ /**
+ * Used for instances of {@link ImportEntryTree}.
+ */
+ IMPORT_ENTRY(ImportEntryTree.class),
+
+ /**
* Used for instances of {@link FunctionDeclarationTree}.
*/
FUNCTION(FunctionDeclarationTree.class),
@@ -185,6 +210,11 @@
REGEXP_LITERAL(RegExpLiteralTree.class),
/**
+ * Used for instances of {@link TemplateLiteralTree}.
+ */
+ TEMPLATE_LITERAL(TemplateLiteralTree.class),
+
+ /**
* Used for instances of {@link ReturnTree}.
*/
RETURN(ReturnTree.class),
@@ -286,7 +316,7 @@
/**
* Used for instances of {@link UnaryTree} representing logical
- * void operator {@code typeof}.
+ * void operator {@code void}.
*/
VOID(UnaryTree.class),
@@ -495,6 +525,18 @@
OR_ASSIGNMENT(CompoundAssignmentTree.class),
/**
+ * Used for instances of {@link SpreadTree} representing
+ * spread "operator" for arrays and function call arguments.
+ */
+ SPREAD(SpreadTree.class),
+
+ /**
+ * Used for instances of {@link YieldTree} representing (generator)
+ * yield expression {@code yield expr}.
+ */
+ YIELD(YieldTree.class),
+
+ /**
* Used for instances of {@link LiteralTree} representing
* a number literal expression of type {@code double}.
*/
--- a/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/api/tree/TreeImpl.java Wed Jul 05 21:57:11 2017 +0200
+++ b/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/api/tree/TreeImpl.java Tue Jul 12 21:18:13 2016 +0530
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2016, 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
@@ -137,10 +137,15 @@
return Kind.BITWISE_COMPLEMENT;
case DELETE:
return Kind.DELETE;
+ case SPREAD_ARRAY:
+ case SPREAD_ARGUMENT:
+ return Kind.SPREAD;
case TYPEOF:
return Kind.TYPEOF;
case VOID:
return Kind.VOID;
+ case YIELD:
+ return Kind.YIELD;
case IN:
return Kind.IN;
case INSTANCEOF:
--- a/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/api/tree/TreeVisitor.java Wed Jul 05 21:57:11 2017 +0200
+++ b/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/api/tree/TreeVisitor.java Tue Jul 12 21:18:13 2016 +0530
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2016, 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
@@ -118,6 +118,24 @@
R visitCatch(CatchTree node, P p);
/**
+ * Visit class statement tree.
+ *
+ * @param node node being visited
+ * @param p extra parameter passed to the visitor
+ * @return value from the visitor
+ */
+ R visitClassDeclaration(ClassDeclarationTree node, P p);
+
+ /**
+ * Visit class expression tree.
+ *
+ * @param node node being visited
+ * @param p extra parameter passed to the visitor
+ * @return value from the visitor
+ */
+ R visitClassExpression(ClassExpressionTree node, P p);
+
+ /**
* Visit conditional expression tree.
*
* @param node node being visited
@@ -190,6 +208,15 @@
R visitForInLoop(ForInLoopTree node, P p);
/**
+ * Visit for..of statement tree.
+ *
+ * @param node node being visited
+ * @param p extra parameter passed to the visitor
+ * @return value from the visitor
+ */
+ R visitForOfLoop(ForOfLoopTree node, P p);
+
+ /**
* Visit function call expression tree.
*
* @param node node being visited
@@ -216,7 +243,7 @@
*/
R visitFunctionExpression(FunctionExpressionTree node, P p);
- /**
+ /**
* Visit identifier tree.
*
* @param node node being visited
@@ -334,6 +361,15 @@
R visitRegExpLiteral(RegExpLiteralTree node, P p);
/**
+ * Visit template literal tree.
+ *
+ * @param node node being visited
+ * @param p extra parameter passed to the visitor
+ * @return value from the visitor
+ */
+ R visitTemplateLiteral(TemplateLiteralTree node, P p);
+
+ /**
* Visit an empty statement tree.
*
* @param node node being visited
@@ -343,6 +379,15 @@
R visitEmptyStatement(EmptyStatementTree node, P p);
/**
+ * Visit 'spread' expression tree.
+ *
+ * @param node node being visited
+ * @param p extra parameter passed to the visitor
+ * @return value from the visitor
+ */
+ R visitSpread(SpreadTree node, P p);
+
+ /**
* Visit 'switch' statement tree.
*
* @param node node being visited
@@ -370,6 +415,33 @@
R visitCompilationUnit(CompilationUnitTree node, P p);
/**
+ * Visit Module tree.
+ *
+ * @param node node being visited
+ * @param p extra parameter passed to the visitor
+ * @return value from the visitor
+ */
+ R visitModule(ModuleTree node, P p);
+
+ /**
+ * Visit Module ExportEntry tree.
+ *
+ * @param node node being visited
+ * @param p extra parameter passed to the visitor
+ * @return value from the visitor
+ */
+ R visitExportEntry(ExportEntryTree node, P p);
+
+ /**
+ * Visit Module ImportEntry tree.
+ *
+ * @param node node being visited
+ * @param p extra parameter passed to the visitor
+ * @return value from the visitor
+ */
+ R visitImportEntry(ImportEntryTree node, P p);
+
+ /**
* Visit 'try' statement tree.
*
* @param node node being visited
@@ -424,6 +496,15 @@
R visitWith(WithTree node, P p);
/**
+ * Visit 'yield' expression tree.
+ *
+ * @param node node being visited
+ * @param p extra parameter passed to the visitor
+ * @return value from the visitor
+ */
+ R visitYield(YieldTree node, P p);
+
+ /**
* Visit unknown expression/statement tree. This fallback will be
* called if new Tree subtypes are introduced in future. A specific
* implementation may throw {{@linkplain UnknownTreeException unknown tree exception}
--- a/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/api/tree/VariableTree.java Wed Jul 05 21:57:11 2017 +0200
+++ b/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/api/tree/VariableTree.java Tue Jul 12 21:18:13 2016 +0530
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2016, 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
@@ -26,22 +26,26 @@
package jdk.nashorn.api.tree;
/**
- * A tree node for a variable declaration.
+ * A tree node for a <a href="http://www.ecma-international.org/ecma-262/6.0/#sec-variable-statement">variable declaration statement</a>.
*
* For example:
* <pre>
- * <em>var</em> <em>name</em> <em>initializer</em> ;
+ * <em>var</em> <em>name</em> [ <em>initializer</em> ] ;
+ * <em>var</em> <em>binding_pattern</em> [ <em>initializer</em> ];
* </pre>
*
* @since 9
*/
public interface VariableTree extends StatementTree {
/**
- * Returns the name of this variable.
+ * Returns the binding of this declaration. This is an {@link IdentifierTree}
+ * for a binding identifier case (simple variable declaration).
+ * This is an {@link ObjectLiteralTree} or a {@link ArrayLiteralTree} for a
+ * destructuring declaration.
*
- * @return the name of this variable
+ * @return the binding expression of this declaration
*/
- String getName();
+ ExpressionTree getBinding();
/**
* Returns the initial value expression for this variable. This is
@@ -50,4 +54,18 @@
* @return the initial value expression
*/
ExpressionTree getInitializer();
+
+ /**
+ * Is this a const declaration?
+ *
+ * @return true if this is a const declaration
+ */
+ boolean isConst();
+
+ /**
+ * Is this a let declaration?
+ *
+ * @return true if this is a let declaration
+ */
+ boolean isLet();
}
--- a/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/api/tree/VariableTreeImpl.java Wed Jul 05 21:57:11 2017 +0200
+++ b/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/api/tree/VariableTreeImpl.java Tue Jul 12 21:18:13 2016 +0530
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2016, 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
@@ -28,12 +28,12 @@
import jdk.nashorn.internal.ir.VarNode;
final class VariableTreeImpl extends StatementTreeImpl implements VariableTree {
- private final String name;
+ private final IdentifierTree ident;
private final ExpressionTree init;
- VariableTreeImpl(final VarNode node, final ExpressionTree init) {
+ VariableTreeImpl(final VarNode node, final IdentifierTree ident, final ExpressionTree init) {
super(node);
- this.name = node.getName().getName();
+ this.ident = ident;
this.init = init;
}
@@ -43,8 +43,8 @@
}
@Override
- public String getName() {
- return name;
+ public ExpressionTree getBinding() {
+ return ident;
}
@Override
@@ -53,6 +53,16 @@
}
@Override
+ public boolean isConst() {
+ return ((VarNode)node).isConst();
+ }
+
+ @Override
+ public boolean isLet() {
+ return ((VarNode)node).isLet();
+ }
+
+ @Override
public <R,D> R accept(final TreeVisitor<R,D> visitor, final D data) {
return visitor.visitVariable(this, data);
}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/api/tree/YieldTree.java Tue Jul 12 21:18:13 2016 +0530
@@ -0,0 +1,66 @@
+/*
+ * Copyright (c) 2016, 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 jdk.nashorn.api.tree;
+
+/**
+ * A tree node for <a href="http://www.ecma-international.org/ecma-262/6.0/#sec-generator-function-definitions">yield expressions</a> used in generator functions.
+ *
+ * For example:
+ * <pre>
+ * <em>function*</em> id(){
+ * var index = 0;
+ * while(index < 10)
+ * <em>yield index++;</em>
+ * }
+ * </pre>
+ *
+ * @since 9
+ */
+public interface YieldTree extends ExpressionTree {
+ /**
+ * Returns the expression that is yielded.
+ *
+ * @return The expression that is yielded.
+ */
+ ExpressionTree getExpression();
+
+ /**
+ * Is this a yield * expression in a generator function?
+ *
+ * For example:
+ * <pre>
+ * function* id(){
+ * yield 1;
+ * <em>yield * anotherGeneratorFunc();</em>
+ * yield 10;
+ * }
+ * </pre>
+ *
+ *
+ * @return true if this is a yield * expression
+ */
+ boolean isStar();
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/api/tree/YieldTreeImpl.java Tue Jul 12 21:18:13 2016 +0530
@@ -0,0 +1,60 @@
+/*
+ * Copyright (c) 2016, 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 jdk.nashorn.api.tree;
+
+import jdk.nashorn.internal.ir.Expression;
+import jdk.nashorn.internal.ir.UnaryNode;
+import jdk.nashorn.internal.parser.TokenType;
+
+final class YieldTreeImpl extends ExpressionTreeImpl
+ implements YieldTree {
+
+ private final ExpressionTree expr;
+
+ YieldTreeImpl(final Expression exprNode, final ExpressionTree expr) {
+ super(exprNode);
+ this.expr = expr;
+ }
+
+ @Override
+ public Kind getKind() {
+ return Kind.YIELD;
+ }
+
+ @Override
+ public ExpressionTree getExpression() {
+ return expr;
+ }
+
+ @Override
+ public boolean isStar() {
+ return ((UnaryNode) node).isTokenType(TokenType.YIELD_STAR);
+ }
+
+ @Override
+ public <R,D> R accept(final TreeVisitor<R,D> visitor, final D data) {
+ return visitor.visitYield(this, data);
+ }
+}
--- a/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/internal/codegen/SplitIntoFunctions.java Wed Jul 05 21:57:11 2017 +0200
+++ b/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/internal/codegen/SplitIntoFunctions.java Tue Jul 12 21:18:13 2016 +0530
@@ -167,6 +167,7 @@
createIdent(name),
originalFn.getName() + "$" + name,
isProgram ? Collections.singletonList(createReturnParamIdent()) : Collections.<IdentNode>emptyList(),
+ null,
FunctionNode.Kind.NORMAL,
// We only need IS_SPLIT conservatively, in case it contains any array units so that we force
// the :callee's existence, to force :scope to never be in a slot lower than 2. This is actually
--- a/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/internal/ir/ClassNode.java Wed Jul 05 21:57:11 2017 +0200
+++ b/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/internal/ir/ClassNode.java Tue Jul 12 21:18:13 2016 +0530
@@ -42,6 +42,7 @@
private final PropertyNode constructor;
private final List<PropertyNode> classElements;
private final int line;
+ private final boolean isStatement;
/**
* Constructor.
@@ -53,15 +54,17 @@
* @param classHeritage class heritage
* @param constructor constructor
* @param classElements class elements
+ * @param isStatement is this a statement or an expression?
*/
public ClassNode(final int line, final long token, final int finish, final IdentNode ident, final Expression classHeritage, final PropertyNode constructor,
- final List<PropertyNode> classElements) {
+ final List<PropertyNode> classElements, final boolean isStatement) {
super(token, finish);
this.line = line;
this.ident = ident;
this.classHeritage = classHeritage;
this.constructor = constructor;
this.classElements = classElements;
+ this.isStatement = isStatement;
}
/**
@@ -101,6 +104,15 @@
}
/**
+ * Returns if this class was a statement or an expression
+ *
+ * @return true if this class was a statement
+ */
+ public boolean isStatement() {
+ return isStatement;
+ }
+
+ /**
* Returns the line number.
*
* @return the line number
--- a/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/internal/ir/ExpressionStatement.java Wed Jul 05 21:57:11 2017 +0200
+++ b/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/internal/ir/ExpressionStatement.java Tue Jul 12 21:18:13 2016 +0530
@@ -27,6 +27,7 @@
import jdk.nashorn.internal.ir.annotations.Immutable;
import jdk.nashorn.internal.ir.visitor.NodeVisitor;
+import jdk.nashorn.internal.parser.TokenType;
/**
* IR representation for executing bare expressions. Basically, an expression
@@ -39,6 +40,23 @@
/** Expression to execute. */
private final Expression expression;
+ private final TokenType destructuringDecl;
+
+ /**
+ * Constructor
+ *
+ * @param lineNumber line number
+ * @param token token
+ * @param finish finish
+ * @param expression the expression to execute
+ * @param destructuringDecl does this statement represent a destructuring declaration?
+ */
+ public ExpressionStatement(final int lineNumber, final long token, final int finish,
+ final Expression expression, final TokenType destructuringDecl) {
+ super(lineNumber, token, finish);
+ this.expression = expression;
+ this.destructuringDecl = destructuringDecl;
+ }
/**
* Constructor
@@ -49,13 +67,13 @@
* @param expression the expression to execute
*/
public ExpressionStatement(final int lineNumber, final long token, final int finish, final Expression expression) {
- super(lineNumber, token, finish);
- this.expression = expression;
+ this(lineNumber, token, finish, expression, null);
}
private ExpressionStatement(final ExpressionStatement expressionStatement, final Expression expression) {
super(expressionStatement);
this.expression = expression;
+ this.destructuringDecl = null;
}
@Override
@@ -81,6 +99,15 @@
}
/**
+ * Return declaration type if this expression statement is a destructuring declaration
+ *
+ * @return declaration type (LET, VAR, CONST) if destructuring declaration, null otherwise.
+ */
+ public TokenType destructuringDeclarationType() {
+ return destructuringDecl;
+ }
+
+ /**
* Reset the expression to be executed
* @param expression the expression
* @return new or same execute node
--- a/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/internal/ir/FunctionNode.java Wed Jul 05 21:57:11 2017 +0200
+++ b/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/internal/ir/FunctionNode.java Tue Jul 12 21:18:13 2016 +0530
@@ -35,6 +35,7 @@
import java.util.Collections;
import java.util.Iterator;
import java.util.List;
+import java.util.Map;
import jdk.nashorn.internal.codegen.CompileUnit;
import jdk.nashorn.internal.codegen.Compiler;
import jdk.nashorn.internal.codegen.CompilerConstants;
@@ -106,6 +107,9 @@
/** List of parameters. */
private final List<IdentNode> parameters;
+ /** Map of ES6 function parameter expressions. */
+ private final Map<IdentNode, Expression> parameterExpressions;
+
/** First token of function. **/
private final long firstToken;
@@ -242,6 +246,9 @@
/** Does this function use new.target? */
public static final int ES6_USES_NEW_TARGET = 1 << 25;
+ /** Does this function have expression as its body? */
+ public static final int HAS_EXPRESSION_BODY = 1 << 26;
+
/** Does this function or any nested functions contain an eval? */
private static final int HAS_DEEP_EVAL = HAS_EVAL | HAS_NESTED_EVAL;
@@ -306,6 +313,7 @@
* @param ident the identifier
* @param name the name of the function
* @param parameters parameter list
+ * @param paramExprs the ES6 function parameter expressions
* @param kind kind of function as in {@link FunctionNode.Kind}
* @param flags initial flags
* @param body body of the function
@@ -324,6 +332,7 @@
final IdentNode ident,
final String name,
final List<IdentNode> parameters,
+ final Map<IdentNode, Expression> paramExprs,
final FunctionNode.Kind kind,
final int flags,
final Block body,
@@ -338,6 +347,7 @@
this.name = name;
this.kind = kind;
this.parameters = parameters;
+ this.parameterExpressions = paramExprs;
this.firstToken = firstToken;
this.lastToken = lastToken;
this.namespace = namespace;
@@ -375,6 +385,7 @@
this.lastToken = lastToken;
this.body = body;
this.parameters = parameters;
+ this.parameterExpressions = functionNode.parameterExpressions;
this.thisProperties = thisProperties;
this.rootClass = rootClass;
this.source = source;
@@ -977,6 +988,15 @@
}
/**
+ * Get the ES6 style parameter expressions of this function. This may be null.
+ *
+ * @return a Map of parameter IdentNode to Expression node (for ES6 parameter expressions)
+ */
+ public Map<IdentNode, Expression> getParameterExpressions() {
+ return parameterExpressions;
+ }
+
+ /**
* Return the number of parameters to this function
* @return the number of parameters
*/
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/internal/ir/TemplateLiteral.java Tue Jul 12 21:18:13 2016 +0530
@@ -0,0 +1,77 @@
+/*
+ * Copyright (c) 2010, 2013, 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 jdk.nashorn.internal.ir;
+
+import java.util.Collections;
+import java.util.List;
+import jdk.nashorn.internal.codegen.types.Type;
+import jdk.nashorn.internal.ir.visitor.NodeVisitor;
+
+/**
+ * Represents ES6 template string expression. Note that this Node class is used
+ * only in "parse only" mode. In evaluation mode, Parser directly folds template
+ * literal as string concatenation. Parser API uses this node to represent ES6
+ * template literals "as is" rather than as a String concatenation.
+ */
+public final class TemplateLiteral extends Expression {
+ private static final long serialVersionUID = 1L;
+ private final List<Expression> exprs;
+
+ public TemplateLiteral(final List<Expression> exprs) {
+ super(exprs.get(0).getToken(), exprs.get(exprs.size() - 1).finish);
+ this.exprs = exprs;
+ }
+
+ @Override
+ public Type getType() {
+ return Type.STRING;
+ }
+
+ @Override
+ public Node accept(NodeVisitor<? extends LexicalContext> visitor) {
+ if (visitor.enterTemplateLiteral(this)) {
+ return visitor.leaveTemplateLiteral(this);
+ }
+
+ return this;
+ }
+
+ @Override
+ public void toString(StringBuilder sb, boolean printType) {
+ for (Expression expr : exprs) {
+ sb.append(expr);
+ }
+ }
+
+ /**
+ * The list of expressions that are part of this template literal.
+ *
+ * @return the list of expressions that are part of this template literal.
+ */
+ public List<Expression> getExpressions() {
+ return Collections.unmodifiableList(exprs);
+ }
+}
\ No newline at end of file
--- a/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/internal/ir/visitor/NodeVisitor.java Wed Jul 05 21:57:11 2017 +0200
+++ b/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/internal/ir/visitor/NodeVisitor.java Tue Jul 12 21:18:13 2016 +0530
@@ -59,6 +59,7 @@
import jdk.nashorn.internal.ir.SplitNode;
import jdk.nashorn.internal.ir.SplitReturn;
import jdk.nashorn.internal.ir.SwitchNode;
+import jdk.nashorn.internal.ir.TemplateLiteral;
import jdk.nashorn.internal.ir.TernaryNode;
import jdk.nashorn.internal.ir.ThrowNode;
import jdk.nashorn.internal.ir.TryNode;
@@ -738,6 +739,26 @@
}
/**
+ * Callback for entering a TemplateLiteral (used only in --parse-only mode)
+ *
+ * @param templateLiteral the node
+ * @return true if traversal should continue and node children be traversed, false otherwise
+ */
+ public boolean enterTemplateLiteral(final TemplateLiteral templateLiteral) {
+ return enterDefault(templateLiteral);
+ }
+
+ /**
+ * Callback for leaving a TemplateLiteral (used only in --parse-only mode)
+ *
+ * @param templateLiteral the node
+ * @return processed node, which will replace the original one, or the original node
+ */
+ public Node leaveTemplateLiteral(final TemplateLiteral templateLiteral) {
+ return leaveDefault(templateLiteral);
+ }
+
+ /**
* Callback for entering a TernaryNode
*
* @param ternaryNode the node
--- a/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/internal/parser/Parser.java Wed Jul 05 21:57:11 2017 +0200
+++ b/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/internal/parser/Parser.java Tue Jul 12 21:18:13 2016 +0530
@@ -127,6 +127,7 @@
import jdk.nashorn.internal.ir.RuntimeNode;
import jdk.nashorn.internal.ir.Statement;
import jdk.nashorn.internal.ir.SwitchNode;
+import jdk.nashorn.internal.ir.TemplateLiteral;
import jdk.nashorn.internal.ir.TernaryNode;
import jdk.nashorn.internal.ir.ThrowNode;
import jdk.nashorn.internal.ir.TryNode;
@@ -545,7 +546,7 @@
sb.append(ident.getName());
final String name = namespace.uniqueName(sb.toString());
- assert parentFunction != null || name.equals(PROGRAM.symbolName()) : "name = " + name;
+ assert parentFunction != null || kind == FunctionNode.Kind.MODULE || name.equals(PROGRAM.symbolName()) : "name = " + name;
int flags = 0;
if (isStrictMode) {
@@ -575,6 +576,7 @@
ident,
function.getName(),
parameters,
+ function.getParameterExpressions(),
kind,
function.getFlags(),
body,
@@ -623,19 +625,6 @@
}
/**
- * Get the statements in a case clause.
- */
- private List<Statement> caseStatementList() {
- final ParserContextBlockNode newBlock = newBlock();
- try {
- statementList();
- } finally {
- restoreBlock(newBlock);
- }
- return newBlock.getStatements();
- }
-
- /**
* Get all the statements generated by a single statement.
* @return Statements.
*/
@@ -855,17 +844,6 @@
});
}
- private static Expression newBinaryExpression(final long op, final Expression lhs, final Expression rhs) {
- final TokenType opType = Token.descType(op);
-
- // Build up node.
- if (BinaryNode.isLogical(opType)) {
- return new BinaryNode(op, new JoinPredecessorExpression(lhs), new JoinPredecessorExpression(rhs));
- }
- return new BinaryNode(op, lhs, rhs);
- }
-
-
/**
* Reduce increment/decrement to simpler operations.
* @param firstToken First token.
@@ -1268,7 +1246,7 @@
className = getIdent();
}
- return classTail(classLineNumber, classToken, className);
+ return classTail(classLineNumber, classToken, className, isStatement);
}
private static final class ClassElementKey {
@@ -1317,7 +1295,8 @@
* static MethodDefinition[?Yield]
* ;
*/
- private ClassNode classTail(final int classLineNumber, final long classToken, final IdentNode className) {
+ private ClassNode classTail(final int classLineNumber, final long classToken,
+ final IdentNode className, final boolean isStatement) {
final boolean oldStrictMode = isStrictMode;
isStrictMode = true;
try {
@@ -1399,7 +1378,7 @@
}
classElements.trimToSize();
- return new ClassNode(classLineNumber, classToken, finish, className, classHeritage, constructor, classElements);
+ return new ClassNode(classLineNumber, classToken, finish, className, classHeritage, constructor, classElements, isStatement);
} finally {
isStrictMode = oldStrictMode;
}
@@ -1601,6 +1580,9 @@
private List<Expression> variableDeclarationList(final TokenType varType, final boolean isStatement, final int sourceOrder) {
// VAR tested in caller.
assert varType == VAR || varType == LET || varType == CONST;
+ final int varLine = line;
+ final long varToken = token;
+
next();
final List<Expression> bindings = new ArrayList<>();
@@ -1613,9 +1595,6 @@
Expression missingAssignment = null;
while (true) {
- // Get starting token.
- final int varLine = line;
- final long varToken = token;
// Get name of var.
if (type == YIELD && inGeneratorFunction()) {
expect(IDENT);
@@ -1627,10 +1606,14 @@
if (isDestructuring) {
final int finalVarFlags = varFlags;
verifyDestructuringBindingPattern(binding, new Consumer<IdentNode>() {
+ @Override
public void accept(final IdentNode identNode) {
verifyIdent(identNode, contextString);
- final VarNode var = new VarNode(varLine, varToken, sourceOrder, identNode.getFinish(), identNode.setIsDeclaredHere(), null, finalVarFlags);
- appendStatement(var);
+ if (!env._parse_only) {
+ // don't bother adding a variable if we are just parsing!
+ final VarNode var = new VarNode(varLine, varToken, sourceOrder, identNode.getFinish(), identNode.setIsDeclaredHere(), null, finalVarFlags);
+ appendStatement(var);
+ }
}
});
}
@@ -1682,7 +1665,7 @@
assert init != null || !isStatement;
binding = init == null ? binding : verifyAssignment(Token.recast(varToken, ASSIGN), binding, init);
if (isStatement) {
- appendStatement(new ExpressionStatement(varLine, binding.getToken(), finish, binding));
+ appendStatement(new ExpressionStatement(varLine, binding.getToken(), finish, binding, varType));
} else if (init == null) {
if (missingAssignment == null) {
missingAssignment = binding;
@@ -1748,7 +1731,8 @@
* Verify destructuring variable declaration binding pattern and extract bound variable declarations.
*/
private void verifyDestructuringBindingPattern(final Expression pattern, final Consumer<IdentNode> identifierCallback) {
- assert pattern instanceof ObjectNode || pattern instanceof LiteralNode.ArrayLiteralNode;
+ assert (pattern instanceof BinaryNode && ((BinaryNode)pattern).isTokenType(ASSIGN)) ||
+ pattern instanceof ObjectNode || pattern instanceof LiteralNode.ArrayLiteralNode;
pattern.accept(new NodeVisitor<LexicalContext>(new LexicalContext()) {
@Override
public boolean enterLiteralNode(final LiteralNode<?> literalNode) {
@@ -1857,9 +1841,8 @@
// Get expression and add as statement.
final Expression expression = expression();
- ExpressionStatement expressionStatement = null;
if (expression != null) {
- expressionStatement = new ExpressionStatement(expressionLine, expressionToken, finish, expression);
+ ExpressionStatement expressionStatement = new ExpressionStatement(expressionLine, expressionToken, finish, expression);
appendStatement(expressionStatement);
} else {
expect(null);
@@ -2625,6 +2608,10 @@
final long catchToken = token;
next();
expect(LPAREN);
+
+ // FIXME: ES6 catch parameter can be a BindingIdentifier or a BindingPattern
+ // We need to generalize this here!
+ // http://www.ecma-international.org/ecma-262/6.0/
final IdentNode exception = getIdent();
// ECMA 12.4.1 strict mode restrictions
@@ -4021,12 +4008,18 @@
ParserContextFunctionNode currentFunction = lc.getCurrentFunction();
if (currentFunction != null) {
- // desugar to: param = (param === undefined) ? initializer : param;
- // possible alternative: if (param === undefined) param = initializer;
- BinaryNode test = new BinaryNode(Token.recast(paramToken, EQ_STRICT), ident, newUndefinedLiteral(paramToken, finish));
- TernaryNode value = new TernaryNode(Token.recast(paramToken, TERNARY), test, new JoinPredecessorExpression(initializer), new JoinPredecessorExpression(ident));
- BinaryNode assignment = new BinaryNode(Token.recast(paramToken, ASSIGN), ident, value);
- lc.getFunctionBody(currentFunction).appendStatement(new ExpressionStatement(paramLine, assignment.getToken(), assignment.getFinish(), assignment));
+ if (env._parse_only) {
+ // keep what is seen in source "as is" and save it as parameter expression
+ BinaryNode assignment = new BinaryNode(Token.recast(paramToken, ASSIGN), ident, initializer);
+ currentFunction.addParameterExpression(ident, assignment);
+ } else {
+ // desugar to: param = (param === undefined) ? initializer : param;
+ // possible alternative: if (param === undefined) param = initializer;
+ BinaryNode test = new BinaryNode(Token.recast(paramToken, EQ_STRICT), ident, newUndefinedLiteral(paramToken, finish));
+ TernaryNode value = new TernaryNode(Token.recast(paramToken, TERNARY), test, new JoinPredecessorExpression(initializer), new JoinPredecessorExpression(ident));
+ BinaryNode assignment = new BinaryNode(Token.recast(paramToken, ASSIGN), ident, value);
+ lc.getFunctionBody(currentFunction).appendStatement(new ExpressionStatement(paramLine, assignment.getToken(), assignment.getFinish(), assignment));
+ }
}
}
@@ -4050,16 +4043,31 @@
// binding pattern with initializer. desugar to: (param === undefined) ? initializer : param
Expression initializer = assignmentExpression(false);
- // TODO initializer must not contain yield expression if yield=true (i.e. this is generator function's parameter list)
- BinaryNode test = new BinaryNode(Token.recast(paramToken, EQ_STRICT), ident, newUndefinedLiteral(paramToken, finish));
- value = new TernaryNode(Token.recast(paramToken, TERNARY), test, new JoinPredecessorExpression(initializer), new JoinPredecessorExpression(ident));
+
+ if (env._parse_only) {
+ // we don't want the synthetic identifier in parse only mode
+ value = initializer;
+ } else {
+ // TODO initializer must not contain yield expression if yield=true (i.e. this is generator function's parameter list)
+ BinaryNode test = new BinaryNode(Token.recast(paramToken, EQ_STRICT), ident, newUndefinedLiteral(paramToken, finish));
+ value = new TernaryNode(Token.recast(paramToken, TERNARY), test, new JoinPredecessorExpression(initializer), new JoinPredecessorExpression(ident));
+ }
}
ParserContextFunctionNode currentFunction = lc.getCurrentFunction();
if (currentFunction != null) {
// destructuring assignment
BinaryNode assignment = new BinaryNode(Token.recast(paramToken, ASSIGN), pattern, value);
- lc.getFunctionBody(currentFunction).appendStatement(new ExpressionStatement(paramLine, assignment.getToken(), assignment.getFinish(), assignment));
+ if (env._parse_only) {
+ // in parse-only mode, represent source tree "as is"
+ if (ident.isDefaultParameter()) {
+ currentFunction.addParameterExpression(ident, assignment);
+ } else {
+ currentFunction.addParameterExpression(ident, pattern);
+ }
+ } else {
+ lc.getFunctionBody(currentFunction).appendStatement(new ExpressionStatement(paramLine, assignment.getToken(), assignment.getFinish(), assignment));
+ }
}
}
parameters.add(ident);
@@ -4077,7 +4085,9 @@
ParserContextFunctionNode currentFunction = lc.getCurrentFunction();
if (currentFunction != null) {
// declare function-scope variables for destructuring bindings
- lc.getFunctionBody(currentFunction).appendStatement(new VarNode(paramLine, Token.recast(paramToken, VAR), pattern.getFinish(), identNode, null));
+ if (!env._parse_only) {
+ lc.getFunctionBody(currentFunction).appendStatement(new VarNode(paramLine, Token.recast(paramToken, VAR), pattern.getFinish(), identNode, null));
+ }
// detect duplicate bounds names in parameter list
currentFunction.addParameterBinding(identNode);
currentFunction.setSimpleParameterList(false);
@@ -4136,6 +4146,7 @@
// the note below for reasoning on skipping happening before instead of after RBRACE for
// details).
if (parseBody) {
+ functionNode.setFlag(FunctionNode.HAS_EXPRESSION_BODY);
final ReturnNode returnNode = new ReturnNode(functionNode.getLineNumber(), expr.getToken(), lastFinish, expr);
appendStatement(returnNode);
}
@@ -4305,7 +4316,7 @@
}
private RuntimeNode referenceError(final Expression lhs, final Expression rhs, final boolean earlyError) {
- if (earlyError) {
+ if (env._parse_only || earlyError) {
throw error(JSErrorType.REFERENCE_ERROR, AbstractParser.message("invalid.lvalue"), lhs.getToken());
}
final ArrayList<Expression> args = new ArrayList<>();
@@ -4838,10 +4849,14 @@
ParserContextFunctionNode currentFunction = lc.getCurrentFunction();
if (currentFunction != null) {
- BinaryNode test = new BinaryNode(Token.recast(paramToken, EQ_STRICT), ident, newUndefinedLiteral(paramToken, finish));
- TernaryNode value = new TernaryNode(Token.recast(paramToken, TERNARY), test, new JoinPredecessorExpression(initializer), new JoinPredecessorExpression(ident));
- BinaryNode assignment = new BinaryNode(Token.recast(paramToken, ASSIGN), ident, value);
- lc.getFunctionBody(currentFunction).appendStatement(new ExpressionStatement(paramLine, assignment.getToken(), assignment.getFinish(), assignment));
+ if (env._parse_only) {
+ currentFunction.addParameterExpression(ident, param);
+ } else {
+ BinaryNode test = new BinaryNode(Token.recast(paramToken, EQ_STRICT), ident, newUndefinedLiteral(paramToken, finish));
+ TernaryNode value = new TernaryNode(Token.recast(paramToken, TERNARY), test, new JoinPredecessorExpression(initializer), new JoinPredecessorExpression(ident));
+ BinaryNode assignment = new BinaryNode(Token.recast(paramToken, ASSIGN), ident, value);
+ lc.getFunctionBody(currentFunction).appendStatement(new ExpressionStatement(paramLine, assignment.getToken(), assignment.getFinish(), assignment));
+ }
currentFunction.addParameterBinding(ident);
currentFunction.setSimpleParameterList(false);
@@ -4855,10 +4870,14 @@
ParserContextFunctionNode currentFunction = lc.getCurrentFunction();
if (currentFunction != null) {
- BinaryNode test = new BinaryNode(Token.recast(paramToken, EQ_STRICT), ident, newUndefinedLiteral(paramToken, finish));
- TernaryNode value = new TernaryNode(Token.recast(paramToken, TERNARY), test, new JoinPredecessorExpression(initializer), new JoinPredecessorExpression(ident));
- BinaryNode assignment = new BinaryNode(Token.recast(paramToken, ASSIGN), param, value);
- lc.getFunctionBody(currentFunction).appendStatement(new ExpressionStatement(paramLine, assignment.getToken(), assignment.getFinish(), assignment));
+ if (env._parse_only) {
+ currentFunction.addParameterExpression(ident, param);
+ } else {
+ BinaryNode test = new BinaryNode(Token.recast(paramToken, EQ_STRICT), ident, newUndefinedLiteral(paramToken, finish));
+ TernaryNode value = new TernaryNode(Token.recast(paramToken, TERNARY), test, new JoinPredecessorExpression(initializer), new JoinPredecessorExpression(ident));
+ BinaryNode assignment = new BinaryNode(Token.recast(paramToken, ASSIGN), param, value);
+ lc.getFunctionBody(currentFunction).appendStatement(new ExpressionStatement(paramLine, assignment.getToken(), assignment.getFinish(), assignment));
+ }
}
return ident;
}
@@ -4872,8 +4891,12 @@
ParserContextFunctionNode currentFunction = lc.getCurrentFunction();
if (currentFunction != null) {
- BinaryNode assignment = new BinaryNode(Token.recast(paramToken, ASSIGN), param, ident);
- lc.getFunctionBody(currentFunction).appendStatement(new ExpressionStatement(paramLine, assignment.getToken(), assignment.getFinish(), assignment));
+ if (env._parse_only) {
+ currentFunction.addParameterExpression(ident, param);
+ } else {
+ BinaryNode assignment = new BinaryNode(Token.recast(paramToken, ASSIGN), param, ident);
+ lc.getFunctionBody(currentFunction).appendStatement(new ExpressionStatement(paramLine, assignment.getToken(), assignment.getFinish(), assignment));
+ }
}
return ident;
}
@@ -4982,20 +5005,37 @@
return literal;
}
- Expression concat = literal;
- TokenType lastLiteralType;
- do {
- final Expression expression = expression();
- if (type != TEMPLATE_MIDDLE && type != TEMPLATE_TAIL) {
- throw error(AbstractParser.message("unterminated.template.expression"), token);
- }
- concat = new BinaryNode(Token.recast(lastLiteralToken, TokenType.ADD), concat, expression);
- lastLiteralType = type;
- lastLiteralToken = token;
- literal = getLiteral();
- concat = new BinaryNode(Token.recast(lastLiteralToken, TokenType.ADD), concat, literal);
- } while (lastLiteralType == TEMPLATE_MIDDLE);
- return concat;
+ if (env._parse_only) {
+ List<Expression> exprs = new ArrayList<>();
+ exprs.add(literal);
+ TokenType lastLiteralType;
+ do {
+ final Expression expression = expression();
+ if (type != TEMPLATE_MIDDLE && type != TEMPLATE_TAIL) {
+ throw error(AbstractParser.message("unterminated.template.expression"), token);
+ }
+ exprs.add(expression);
+ lastLiteralType = type;
+ literal = getLiteral();
+ exprs.add(literal);
+ } while (lastLiteralType == TEMPLATE_MIDDLE);
+ return new TemplateLiteral(exprs);
+ } else {
+ Expression concat = literal;
+ TokenType lastLiteralType;
+ do {
+ final Expression expression = expression();
+ if (type != TEMPLATE_MIDDLE && type != TEMPLATE_TAIL) {
+ throw error(AbstractParser.message("unterminated.template.expression"), token);
+ }
+ concat = new BinaryNode(Token.recast(lastLiteralToken, TokenType.ADD), concat, expression);
+ lastLiteralType = type;
+ lastLiteralToken = token;
+ literal = getLiteral();
+ concat = new BinaryNode(Token.recast(lastLiteralToken, TokenType.ADD), concat, literal);
+ } while (lastLiteralType == TEMPLATE_MIDDLE);
+ return concat;
+ }
}
/**
--- a/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/internal/parser/ParserContextFunctionNode.java Wed Jul 05 21:57:11 2017 +0200
+++ b/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/internal/parser/ParserContextFunctionNode.java Tue Jul 12 21:18:13 2016 +0530
@@ -24,9 +24,12 @@
*/
package jdk.nashorn.internal.parser;
+import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
+import java.util.Map;
import jdk.nashorn.internal.codegen.Namespace;
+import jdk.nashorn.internal.ir.Expression;
import jdk.nashorn.internal.ir.FunctionNode;
import jdk.nashorn.internal.ir.IdentNode;
import jdk.nashorn.internal.ir.Module;
@@ -70,6 +73,7 @@
private Module module;
private int debugFlags;
+ private Map<IdentNode, Expression> parameterExpressions;
/**
* @param token The token for the function
@@ -170,6 +174,22 @@
}
/**
+ * Return ES6 function parameter expressions
+ *
+ * @return ES6 function parameter expressions
+ */
+ public Map<IdentNode, Expression> getParameterExpressions() {
+ return parameterExpressions;
+ }
+
+ void addParameterExpression(IdentNode ident, Expression node) {
+ if (parameterExpressions == null) {
+ parameterExpressions = new HashMap<>();
+ }
+ parameterExpressions.put(ident, node);
+ }
+
+ /**
* Set last token
* @param token New last token
*/
--- a/nashorn/test/script/basic/JDK-8075207.js Wed Jul 05 21:57:11 2017 +0200
+++ b/nashorn/test/script/basic/JDK-8075207.js Tue Jul 12 21:18:13 2016 +0530
@@ -61,7 +61,7 @@
Assert.assertTrue(stats.get(2) instanceof VariableTree);
var print_hello = stats.get(1);
-Assert.assertEquals(print_hello.name, "print_hello");
+Assert.assertEquals(print_hello.name.name, "print_hello");
var print_hello_stats = print_hello.body.statements;
Assert.assertTrue(print_hello_stats.get(0) instanceof VariableTree);
Assert.assertTrue(print_hello_stats.get(1) instanceof ExpressionStatementTree);
--- a/nashorn/test/script/basic/JDK-8075448.js Wed Jul 05 21:57:11 2017 +0200
+++ b/nashorn/test/script/basic/JDK-8075448.js Tue Jul 12 21:18:13 2016 +0530
@@ -44,6 +44,6 @@
var stats = ast.sourceElements;
Assert.assertTrue(stats[0] instanceof VariableTree);
-Assert.assertEquals(stats[0].name, "i");
+Assert.assertEquals(stats[0].binding.name, "i");
Assert.assertTrue(stats[1] instanceof ForLoopTree);
--- a/nashorn/test/script/basic/es6/let-const-switch.js.EXPECTED Wed Jul 05 21:57:11 2017 +0200
+++ b/nashorn/test/script/basic/es6/let-const-switch.js.EXPECTED Tue Jul 12 21:18:13 2016 +0530
@@ -1,12 +1,12 @@
-1
-2
-0
-1
-2
-0
-SyntaxError: test/script/basic/es6/let-const-switch.js#34:8<eval>:1:25 Unsupported let declaration in unprotected switch statement
-switch (x) { case 0: let x = 1; }
- ^
-SyntaxError: test/script/basic/es6/let-const-switch.js#34:8<eval>:1:27 Unsupported const declaration in unprotected switch statement
-switch (x) { case 0: const x = 1; }
- ^
+1
+2
+0
+1
+2
+0
+SyntaxError: test/script/basic/es6/let-const-switch.js#34:8<eval>:1:21 Unsupported let declaration in unprotected switch statement
+switch (x) { case 0: let x = 1; }
+ ^
+SyntaxError: test/script/basic/es6/let-const-switch.js#34:8<eval>:1:21 Unsupported const declaration in unprotected switch statement
+switch (x) { case 0: const x = 1; }
+ ^
--- a/nashorn/test/script/nosecurity/parserapi.js Wed Jul 05 21:57:11 2017 +0200
+++ b/nashorn/test/script/nosecurity/parserapi.js Tue Jul 12 21:18:13 2016 +0530
@@ -62,6 +62,26 @@
var result = {};
for (var i in obj) {
var val = obj[i];
+ // skip these ES6 specific properties to reduce noise
+ // in the output - unless there were set to true
+ if (typeof(val) == 'boolean' && val == false) {
+ switch (i) {
+ case "computed":
+ case "static":
+ case "restParameter":
+ case "this":
+ case "super":
+ case "star":
+ case "default":
+ case "starDefaultStar":
+ case "arrow":
+ case "generator":
+ case "let":
+ case "const":
+ continue;
+ }
+ }
+
if (val instanceof Parser.Tree) {
result[i] = this.convert(val);
} else if (val instanceof Parser.List) {
--- a/nashorn/test/script/nosecurity/parserapi.js.EXPECTED Wed Jul 05 21:57:11 2017 +0200
+++ b/nashorn/test/script/nosecurity/parserapi.js.EXPECTED Tue Jul 12 21:18:13 2016 +0530
@@ -1,4 +1,4 @@
-[
+[
{
"endPosition": "1113",
"kind": "COMPILATION_UNIT",
@@ -6,8 +6,13 @@
{
"endPosition": "1123",
"kind": "VARIABLE",
- "name": "x",
- "startPosition": "1117",
+ "binding": {
+ "endPosition": "1118",
+ "kind": "IDENTIFIER",
+ "name": "x",
+ "startPosition": "1117"
+ },
+ "startPosition": "1113",
"initializer": {
"endPosition": "1123",
"kind": "ARRAY_LITERAL",
@@ -18,8 +23,13 @@
{
"endPosition": "1147",
"kind": "VARIABLE",
- "name": "y",
- "startPosition": "1129",
+ "binding": {
+ "endPosition": "1130",
+ "kind": "IDENTIFIER",
+ "name": "y",
+ "startPosition": "1129"
+ },
+ "startPosition": "1125",
"initializer": {
"endPosition": "1147",
"kind": "ARRAY_LITERAL",
@@ -55,8 +65,13 @@
{
"endPosition": "1165",
"kind": "VARIABLE",
- "name": "z",
- "startPosition": "1153",
+ "binding": {
+ "endPosition": "1154",
+ "kind": "IDENTIFIER",
+ "name": "z",
+ "startPosition": "1153"
+ },
+ "startPosition": "1149",
"initializer": {
"endPosition": "1165",
"kind": "ARRAY_LITERAL",
@@ -82,8 +97,13 @@
{
"endPosition": "1200",
"kind": "VARIABLE",
- "name": "k",
- "startPosition": "1171",
+ "binding": {
+ "endPosition": "1172",
+ "kind": "IDENTIFIER",
+ "name": "k",
+ "startPosition": "1171"
+ },
+ "startPosition": "1167",
"initializer": {
"endPosition": "1200",
"kind": "ARRAY_LITERAL",
@@ -132,8 +152,8 @@
"sourceName": "parsertests/array_literal.js",
"strict": "false",
"startPosition": "1113"
-}
-,
+}
+,
{
"endPosition": "1126",
"kind": "COMPILATION_UNIT",
@@ -406,8 +426,8 @@
"sourceName": "parsertests/assignmentExpr.js",
"strict": "false",
"startPosition": "1126"
-}
-,
+}
+,
{
"endPosition": "1116",
"kind": "COMPILATION_UNIT",
@@ -912,8 +932,8 @@
"sourceName": "parsertests/binaryExpr.js",
"strict": "false",
"startPosition": "1116"
-}
-,
+}
+,
{
"endPosition": "1117",
"kind": "COMPILATION_UNIT",
@@ -959,8 +979,8 @@
"sourceName": "parsertests/block.js",
"strict": "false",
"startPosition": "1117"
-}
-,
+}
+,
{
"endPosition": "1117",
"kind": "COMPILATION_UNIT",
@@ -1060,8 +1080,8 @@
"sourceName": "parsertests/breakStat.js",
"strict": "false",
"startPosition": "1117"
-}
-,
+}
+,
{
"endPosition": "1117",
"kind": "COMPILATION_UNIT",
@@ -1098,8 +1118,8 @@
"sourceName": "parsertests/condExpr.js",
"strict": "false",
"startPosition": "1117"
-}
-,
+}
+,
{
"endPosition": "1120",
"kind": "COMPILATION_UNIT",
@@ -1199,8 +1219,8 @@
"sourceName": "parsertests/continueStat.js",
"strict": "false",
"startPosition": "1120"
-}
-,
+}
+,
{
"endPosition": "1118",
"kind": "COMPILATION_UNIT",
@@ -1214,8 +1234,8 @@
"sourceName": "parsertests/debuggerStat.js",
"strict": "false",
"startPosition": "1118"
-}
-,
+}
+,
{
"endPosition": "1137",
"kind": "COMPILATION_UNIT",
@@ -1223,7 +1243,12 @@
{
"endPosition": "1172",
"kind": "FUNCTION",
- "name": "hello",
+ "name": {
+ "endPosition": "1151",
+ "kind": "IDENTIFIER",
+ "name": "hello",
+ "startPosition": "1146"
+ },
"body": {
"endPosition": "1170",
"kind": "BLOCK",
@@ -1262,7 +1287,12 @@
{
"endPosition": "1203",
"kind": "FUNCTION",
- "name": "hello",
+ "name": {
+ "endPosition": "1187",
+ "kind": "IDENTIFIER",
+ "name": "hello",
+ "startPosition": "1182"
+ },
"body": {
"endPosition": "1201",
"kind": "BLOCK",
@@ -1308,7 +1338,12 @@
{
"endPosition": "1240",
"kind": "FUNCTION",
- "name": "hello",
+ "name": {
+ "endPosition": "1218",
+ "kind": "IDENTIFIER",
+ "name": "hello",
+ "startPosition": "1213"
+ },
"body": {
"endPosition": "1238",
"kind": "BLOCK",
@@ -1366,8 +1401,13 @@
{
"endPosition": "1282",
"kind": "VARIABLE",
- "name": "hello",
- "startPosition": "1245",
+ "binding": {
+ "endPosition": "1250",
+ "kind": "IDENTIFIER",
+ "name": "hello",
+ "startPosition": "1245"
+ },
+ "startPosition": "1241",
"initializer": {
"endPosition": "1264",
"kind": "FUNCTION_EXPRESSION",
@@ -1410,12 +1450,22 @@
{
"endPosition": "1331",
"kind": "VARIABLE",
- "name": "hello",
- "startPosition": "1288",
+ "binding": {
+ "endPosition": "1293",
+ "kind": "IDENTIFIER",
+ "name": "hello",
+ "startPosition": "1288"
+ },
+ "startPosition": "1284",
"initializer": {
"endPosition": "1313",
"kind": "FUNCTION_EXPRESSION",
- "name": "hello",
+ "name": {
+ "endPosition": "1310",
+ "kind": "IDENTIFIER",
+ "name": "hello",
+ "startPosition": "1305"
+ },
"body": {
"endPosition": "1329",
"kind": "BLOCK",
@@ -1473,7 +1523,12 @@
{
"endPosition": "1380",
"kind": "FUNCTION",
- "name": "test",
+ "name": {
+ "endPosition": "1361",
+ "kind": "IDENTIFIER",
+ "name": "test",
+ "startPosition": "1357"
+ },
"body": {
"endPosition": "1377",
"kind": "BLOCK",
@@ -1500,8 +1555,8 @@
"sourceName": "parsertests/functions.js",
"strict": "false",
"startPosition": "1137"
-}
-,
+}
+,
{
"endPosition": "1114",
"kind": "COMPILATION_UNIT",
@@ -1604,8 +1659,8 @@
"sourceName": "parsertests/ifStat.js",
"strict": "false",
"startPosition": "1114"
-}
-,
+}
+,
{
"endPosition": "1113",
"kind": "COMPILATION_UNIT",
@@ -1668,8 +1723,8 @@
"sourceName": "parsertests/labelledStat.js",
"strict": "false",
"startPosition": "1113"
-}
-,
+}
+,
{
"endPosition": "1125",
"kind": "COMPILATION_UNIT",
@@ -2066,8 +2121,8 @@
"sourceName": "parsertests/lhsExpr.js",
"strict": "false",
"startPosition": "1125"
-}
-,
+}
+,
{
"endPosition": "1110",
"kind": "COMPILATION_UNIT",
@@ -2350,8 +2405,8 @@
"sourceName": "parsertests/loopStat.js",
"strict": "false",
"startPosition": "1110"
-}
-,
+}
+,
{
"endPosition": "1125",
"kind": "COMPILATION_UNIT",
@@ -2608,6 +2663,7 @@
"expression": {
"endPosition": "1272",
"kind": "IDENTIFIER",
+ "this": "true",
"name": "this",
"startPosition": "1268"
},
@@ -2650,6 +2706,7 @@
"expression": {
"endPosition": "1300",
"kind": "IDENTIFIER",
+ "this": "true",
"name": "this",
"startPosition": "1296"
},
@@ -2705,8 +2762,8 @@
"sourceName": "parsertests/objectLitExpr.js",
"strict": "false",
"startPosition": "1125"
-}
-,
+}
+,
{
"endPosition": "1118",
"kind": "COMPILATION_UNIT",
@@ -2781,8 +2838,8 @@
"sourceName": "parsertests/parenExpr.js",
"strict": "false",
"startPosition": "1118"
-}
-,
+}
+,
{
"endPosition": "1119",
"kind": "COMPILATION_UNIT",
@@ -2791,6 +2848,7 @@
"expression": {
"endPosition": "1123",
"kind": "IDENTIFIER",
+ "this": "true",
"name": "this",
"startPosition": "1119"
},
@@ -2995,8 +3053,8 @@
"sourceName": "parsertests/primaryExpr.js",
"strict": "false",
"startPosition": "1119"
-}
-,
+}
+,
{
"endPosition": "1114",
"kind": "COMPILATION_UNIT",
@@ -3004,8 +3062,13 @@
{
"endPosition": "1127",
"kind": "VARIABLE",
- "name": "x",
- "startPosition": "1118",
+ "binding": {
+ "endPosition": "1119",
+ "kind": "IDENTIFIER",
+ "name": "x",
+ "startPosition": "1118"
+ },
+ "startPosition": "1114",
"initializer": {
"endPosition": "1127",
"kind": "REGEXP_LITERAL",
@@ -3017,8 +3080,13 @@
{
"endPosition": "1143",
"kind": "VARIABLE",
- "name": "y",
- "startPosition": "1133",
+ "binding": {
+ "endPosition": "1134",
+ "kind": "IDENTIFIER",
+ "name": "y",
+ "startPosition": "1133"
+ },
+ "startPosition": "1129",
"initializer": {
"endPosition": "1143",
"kind": "REGEXP_LITERAL",
@@ -3030,8 +3098,13 @@
{
"endPosition": "1168",
"kind": "VARIABLE",
- "name": "z",
- "startPosition": "1149",
+ "binding": {
+ "endPosition": "1150",
+ "kind": "IDENTIFIER",
+ "name": "z",
+ "startPosition": "1149"
+ },
+ "startPosition": "1145",
"initializer": {
"endPosition": "1168",
"kind": "REGEXP_LITERAL",
@@ -3044,8 +3117,8 @@
"sourceName": "parsertests/regexp_literal.js",
"strict": "false",
"startPosition": "1114"
-}
-,
+}
+,
{
"endPosition": "1118",
"kind": "COMPILATION_UNIT",
@@ -3144,8 +3217,8 @@
"sourceName": "parsertests/returnStat.js",
"strict": "false",
"startPosition": "1118"
-}
-,
+}
+,
{
"endPosition": "1111",
"kind": "COMPILATION_UNIT",
@@ -3309,8 +3382,8 @@
"sourceName": "parsertests/switchStat.js",
"strict": "false",
"startPosition": "1111"
-}
-,
+}
+,
{
"endPosition": "1110",
"kind": "COMPILATION_UNIT",
@@ -3421,8 +3494,8 @@
"sourceName": "parsertests/throwStat.js",
"strict": "false",
"startPosition": "1110"
-}
-,
+}
+,
{
"endPosition": "1121",
"kind": "COMPILATION_UNIT",
@@ -3783,8 +3856,8 @@
"sourceName": "parsertests/tryCatchStat.js",
"strict": "false",
"startPosition": "1121"
-}
-,
+}
+,
{
"endPosition": "1115",
"kind": "COMPILATION_UNIT",
@@ -3969,8 +4042,8 @@
"sourceName": "parsertests/unaryExpr.js",
"strict": "false",
"startPosition": "1115"
-}
-,
+}
+,
{
"endPosition": "1122",
"kind": "COMPILATION_UNIT",
@@ -3989,7 +4062,12 @@
{
"endPosition": "1165",
"kind": "FUNCTION",
- "name": "f",
+ "name": {
+ "endPosition": "1146",
+ "kind": "IDENTIFIER",
+ "name": "f",
+ "startPosition": "1145"
+ },
"body": {
"endPosition": "1162",
"kind": "BLOCK",
@@ -4016,8 +4094,8 @@
"sourceName": "parsertests/useStrict.js",
"strict": "true",
"startPosition": "1122"
-}
-,
+}
+,
{
"endPosition": "1143",
"kind": "COMPILATION_UNIT",
@@ -4025,26 +4103,46 @@
{
"endPosition": "1148",
"kind": "VARIABLE",
- "name": "a",
- "startPosition": "1147"
+ "binding": {
+ "endPosition": "1148",
+ "kind": "IDENTIFIER",
+ "name": "a",
+ "startPosition": "1147"
+ },
+ "startPosition": "1143"
},
{
"endPosition": "1155",
"kind": "VARIABLE",
- "name": "a",
- "startPosition": "1154"
+ "binding": {
+ "endPosition": "1155",
+ "kind": "IDENTIFIER",
+ "name": "a",
+ "startPosition": "1154"
+ },
+ "startPosition": "1150"
},
{
"endPosition": "1158",
"kind": "VARIABLE",
- "name": "b",
- "startPosition": "1157"
+ "binding": {
+ "endPosition": "1158",
+ "kind": "IDENTIFIER",
+ "name": "b",
+ "startPosition": "1157"
+ },
+ "startPosition": "1150"
},
{
"endPosition": "1200",
"kind": "VARIABLE",
- "name": "a",
- "startPosition": "1190",
+ "binding": {
+ "endPosition": "1191",
+ "kind": "IDENTIFIER",
+ "name": "a",
+ "startPosition": "1190"
+ },
+ "startPosition": "1186",
"initializer": {
"endPosition": "1200",
"kind": "STRING_LITERAL",
@@ -4055,8 +4153,13 @@
{
"endPosition": "1212",
"kind": "VARIABLE",
- "name": "a",
- "startPosition": "1207",
+ "binding": {
+ "endPosition": "1208",
+ "kind": "IDENTIFIER",
+ "name": "a",
+ "startPosition": "1207"
+ },
+ "startPosition": "1203",
"initializer": {
"endPosition": "1212",
"kind": "NUMBER_LITERAL",
@@ -4067,8 +4170,13 @@
{
"endPosition": "1219",
"kind": "VARIABLE",
- "name": "b",
- "startPosition": "1214",
+ "binding": {
+ "endPosition": "1215",
+ "kind": "IDENTIFIER",
+ "name": "b",
+ "startPosition": "1214"
+ },
+ "startPosition": "1203",
"initializer": {
"endPosition": "1219",
"kind": "NUMBER_LITERAL",
@@ -4079,8 +4187,13 @@
{
"endPosition": "1226",
"kind": "VARIABLE",
- "name": "c",
- "startPosition": "1221",
+ "binding": {
+ "endPosition": "1222",
+ "kind": "IDENTIFIER",
+ "name": "c",
+ "startPosition": "1221"
+ },
+ "startPosition": "1203",
"initializer": {
"endPosition": "1226",
"kind": "NUMBER_LITERAL",
@@ -4092,8 +4205,8 @@
"sourceName": "parsertests/varDecl.js",
"strict": "false",
"startPosition": "1143"
-}
-,
+}
+,
{
"endPosition": "1111",
"kind": "COMPILATION_UNIT",
@@ -4142,8 +4255,8 @@
"sourceName": "parsertests/withStat.js",
"strict": "false",
"startPosition": "1111"
-}
-,
+}
+,
{
"fileName": "parsernegativetests/caseoutofswitch.js",
"code": "case (1090, 4)",
@@ -4152,8 +4265,8 @@
"position": "1090",
"message": "parsernegativetests/caseoutofswitch.js:29:0 Expected an operand but found case\ncase 23:\n^",
"lineNumber": "29"
-}
-,
+}
+,
{
"fileName": "parsernegativetests/caseoutofswitch.js",
"code": "default (1112, 7)",
@@ -4162,8 +4275,8 @@
"position": "1112",
"message": "parsernegativetests/caseoutofswitch.js:31:0 Expected an operand but found default\ndefault:\n^",
"lineNumber": "31"
-}
-,
+}
+,
{
"endPosition": "1090",
"kind": "COMPILATION_UNIT",
@@ -4240,8 +4353,8 @@
"sourceName": "parsernegativetests/caseoutofswitch.js",
"strict": "false",
"startPosition": "1090"
-}
-,
+}
+,
{
"fileName": "parsernegativetests/illegalbreak.js",
"code": "break (1090, 5)",
@@ -4250,8 +4363,8 @@
"position": "1090",
"message": "parsernegativetests/illegalbreak.js:29:0 Illegal break statement\nbreak;\n^",
"lineNumber": "29"
-}
-,
+}
+,
{
"fileName": "parsernegativetests/illegalbreak.js",
"code": "ident (1103, 3)",
@@ -4260,8 +4373,8 @@
"position": "1103",
"message": "parsernegativetests/illegalbreak.js:30:6 Undefined Label \"foo\"\nbreak foo;\n ^",
"lineNumber": "30"
-}
-,
+}
+,
{
"endPosition": "1090",
"kind": "COMPILATION_UNIT",
@@ -4290,8 +4403,8 @@
"sourceName": "parsernegativetests/illegalbreak.js",
"strict": "false",
"startPosition": "1090"
-}
-,
+}
+,
{
"fileName": "parsernegativetests/illegalcontinue.js",
"code": "continue (1090, 8)",
@@ -4300,8 +4413,8 @@
"position": "1090",
"message": "parsernegativetests/illegalcontinue.js:29:0 Illegal continue statement\ncontinue;\n^",
"lineNumber": "29"
-}
-,
+}
+,
{
"fileName": "parsernegativetests/illegalcontinue.js",
"code": "ident (1109, 3)",
@@ -4310,8 +4423,8 @@
"position": "1109",
"message": "parsernegativetests/illegalcontinue.js:30:9 Undefined Label \"foo\"\ncontinue foo;\n ^",
"lineNumber": "30"
-}
-,
+}
+,
{
"endPosition": "1090",
"kind": "COMPILATION_UNIT",
@@ -4340,8 +4453,8 @@
"sourceName": "parsernegativetests/illegalcontinue.js",
"strict": "false",
"startPosition": "1090"
-}
-,
+}
+,
{
"fileName": "parsernegativetests/illegallvalue.js",
"code": "decimal (1090, 2)",
@@ -4350,8 +4463,8 @@
"position": "1090",
"message": "parsernegativetests/illegallvalue.js:29:0 Invalid left hand side for assignment\n44 = 54;\n^",
"lineNumber": "29"
-}
-,
+}
+,
{
"fileName": "parsernegativetests/illegallvalue.js",
"code": "decimal (1099, 3)",
@@ -4360,8 +4473,8 @@
"position": "1099",
"message": "parsernegativetests/illegallvalue.js:30:0 Invalid left hand side for assignment\n233 += 33;\n^",
"lineNumber": "30"
-}
-,
+}
+,
{
"fileName": "parsernegativetests/illegallvalue.js",
"code": "decimal (1110, 4)",
@@ -4370,8 +4483,8 @@
"position": "1110",
"message": "parsernegativetests/illegallvalue.js:31:0 Invalid left hand side for assignment\n3423 -= 234;\n^",
"lineNumber": "31"
-}
-,
+}
+,
{
"endPosition": "1090",
"kind": "COMPILATION_UNIT",
@@ -4410,8 +4523,8 @@
"sourceName": "parsernegativetests/illegallvalue.js",
"strict": "false",
"startPosition": "1090"
-}
-,
+}
+,
{
"fileName": "parsernegativetests/illegaloperator.js",
"code": "* (1093, 1)",
@@ -4420,8 +4533,8 @@
"position": "1093",
"message": "parsernegativetests/illegaloperator.js:29:3 Expected an operand but found *\nx ** y\n ^",
"lineNumber": "29"
-}
-,
+}
+,
{
"endPosition": "1090",
"kind": "COMPILATION_UNIT",
@@ -4440,8 +4553,8 @@
"sourceName": "parsernegativetests/illegaloperator.js",
"strict": "false",
"startPosition": "1090"
-}
-,
+}
+,
{
"fileName": "parsernegativetests/keywordident.js",
"code": "var (1094, 3)",
@@ -4450,8 +4563,8 @@
"position": "1094",
"message": "parsernegativetests/keywordident.js:29:4 Expected ident but found var\nvar var = 23;\n ^",
"lineNumber": "29"
-}
-,
+}
+,
{
"endPosition": "1090",
"kind": "COMPILATION_UNIT",
@@ -4469,8 +4582,13 @@
{
"endPosition": "1115",
"kind": "VARIABLE",
- "name": "x",
- "startPosition": "1108",
+ "binding": {
+ "endPosition": "1109",
+ "kind": "IDENTIFIER",
+ "name": "x",
+ "startPosition": "1108"
+ },
+ "startPosition": "1104",
"initializer": {
"endPosition": "1115",
"kind": "NUMBER_LITERAL",
@@ -4482,8 +4600,8 @@
"sourceName": "parsernegativetests/keywordident.js",
"strict": "false",
"startPosition": "1090"
-}
-,
+}
+,
{
"fileName": "parsernegativetests/parenmissing.js",
"code": "; (1096, 1)",
@@ -4492,8 +4610,8 @@
"position": "1096",
"message": "parsernegativetests/parenmissing.js:29:6 Expected ) but found ;\n(1 + 2;\n ^",
"lineNumber": "29"
-}
-,
+}
+,
{
"fileName": "parsernegativetests/parenmissing.js",
"code": ") (1103, 1)",
@@ -4502,8 +4620,8 @@
"position": "1103",
"message": "parsernegativetests/parenmissing.js:30:5 Expected ; but found )\nx * y);\n ^",
"lineNumber": "30"
-}
-,
+}
+,
{
"endPosition": "1090",
"kind": "COMPILATION_UNIT",
@@ -4554,8 +4672,8 @@
"sourceName": "parsernegativetests/parenmissing.js",
"strict": "false",
"startPosition": "1090"
-}
-,
+}
+,
{
"fileName": "parsernegativetests/repeatedproperty.js",
"code": "ident (1111, 3)",
@@ -4564,8 +4682,8 @@
"position": "1111",
"message": "parsernegativetests/repeatedproperty.js:29:21 Property \"foo\" already defined\nvar obj = { foo: 34, get foo() { return 'hello' } };\n ^",
"lineNumber": "29"
-}
-,
+}
+,
{
"fileName": "parsernegativetests/repeatedproperty.js",
"code": "ident (1165, 3)",
@@ -4574,8 +4692,8 @@
"position": "1165",
"message": "parsernegativetests/repeatedproperty.js:30:22 Property \"foo\" already defined\nvar obj1 = { foo: 34, set foo(x) { } };\n ^",
"lineNumber": "30"
-}
-,
+}
+,
{
"fileName": "parsernegativetests/repeatedproperty.js",
"code": "ident (1205, 3)",
@@ -4584,8 +4702,8 @@
"position": "1205",
"message": "parsernegativetests/repeatedproperty.js:31:22 Property \"foo\" already defined\nvar obj2 = { foo: 34, set foo(x) { } };\n ^",
"lineNumber": "31"
-}
-,
+}
+,
{
"fileName": "parsernegativetests/repeatedproperty.js",
"code": "ident (1251, 3)",
@@ -4594,8 +4712,8 @@
"position": "1251",
"message": "parsernegativetests/repeatedproperty.js:32:28 Property \"bar\" already defined\nvar obj3 = { get bar() { }, get bar() {} };\n ^",
"lineNumber": "32"
-}
-,
+}
+,
{
"fileName": "parsernegativetests/repeatedproperty.js",
"code": "ident (1296, 3)",
@@ -4604,8 +4722,8 @@
"position": "1296",
"message": "parsernegativetests/repeatedproperty.js:33:29 Property \"bar\" already defined\nvar obj4 = { set bar(x) { }, set bar(x) {} };\n ^",
"lineNumber": "33"
-}
-,
+}
+,
{
"endPosition": "1090",
"kind": "COMPILATION_UNIT",
@@ -4664,8 +4782,8 @@
"sourceName": "parsernegativetests/repeatedproperty.js",
"strict": "false",
"startPosition": "1090"
-}
-,
+}
+,
{
"fileName": "parsernegativetests/strict_repeatedproperty.js",
"code": "ident (1126, 3)",
@@ -4674,8 +4792,8 @@
"position": "1126",
"message": "parsernegativetests/strict_repeatedproperty.js:31:21 Property \"foo\" already defined\nvar obj = { foo: 34, foo: 'hello' };\n ^",
"lineNumber": "31"
-}
-,
+}
+,
{
"endPosition": "1090",
"kind": "COMPILATION_UNIT",
@@ -4705,8 +4823,8 @@
"sourceName": "parsernegativetests/strict_repeatedproperty.js",
"strict": "true",
"startPosition": "1090"
-}
-,
+}
+,
{
"fileName": "parsernegativetests/strict_repeatparam.js",
"code": "ident (1122, 1)",
@@ -4715,8 +4833,8 @@
"position": "1122",
"message": "parsernegativetests/strict_repeatparam.js:31:17 strict mode function cannot have duplicate parameter name \"x\"\nfunction func(x, x) {}\n ^",
"lineNumber": "31"
-}
-,
+}
+,
{
"endPosition": "1090",
"kind": "COMPILATION_UNIT",
@@ -4746,8 +4864,8 @@
"sourceName": "parsernegativetests/strict_repeatparam.js",
"strict": "true",
"startPosition": "1090"
-}
-,
+}
+,
{
"fileName": "parsernegativetests/strict_with.js",
"code": "with (1105, 4)",
@@ -4756,8 +4874,8 @@
"position": "1105",
"message": "parsernegativetests/strict_with.js:31:0 \"with\" statement cannot be used in strict mode\nwith({}) {}\n^",
"lineNumber": "31"
-}
-,
+}
+,
{
"fileName": "parsernegativetests/strict_with.js",
"code": ") (1112, 1)",
@@ -4766,8 +4884,8 @@
"position": "1112",
"message": "parsernegativetests/strict_with.js:31:7 Expected ; but found )\nwith({}) {}\n ^",
"lineNumber": "31"
-}
-,
+}
+,
{
"endPosition": "1090",
"kind": "COMPILATION_UNIT",
@@ -4807,8 +4925,8 @@
"sourceName": "parsernegativetests/strict_with.js",
"strict": "true",
"startPosition": "1090"
-}
-,
+}
+,
{
"fileName": "parsernegativetests/toplevelreturn.js",
"code": "return (1090, 6)",
@@ -4817,8 +4935,8 @@
"position": "1090",
"message": "parsernegativetests/toplevelreturn.js:29:0 Invalid return statement\nreturn;\n^",
"lineNumber": "29"
-}
-,
+}
+,
{
"fileName": "parsernegativetests/toplevelreturn.js",
"code": "return (1098, 6)",
@@ -4827,8 +4945,8 @@
"position": "1098",
"message": "parsernegativetests/toplevelreturn.js:30:0 Invalid return statement\nreturn 23;\n^",
"lineNumber": "30"
-}
-,
+}
+,
{
"endPosition": "1090",
"kind": "COMPILATION_UNIT",
@@ -4857,8 +4975,8 @@
"sourceName": "parsernegativetests/toplevelreturn.js",
"strict": "false",
"startPosition": "1090"
-}
-,
+}
+,
{
"endPosition": "1136",
"kind": "COMPILATION_UNIT",
@@ -4866,7 +4984,12 @@
{
"endPosition": "1222",
"kind": "FUNCTION",
- "name": "Parser",
+ "name": {
+ "endPosition": "1151",
+ "kind": "IDENTIFIER",
+ "name": "Parser",
+ "startPosition": "1145"
+ },
"body": {
"endPosition": "1220",
"kind": "BLOCK",
@@ -4898,6 +5021,7 @@
"expression": {
"endPosition": "1193",
"kind": "IDENTIFIER",
+ "this": "true",
"name": "this",
"startPosition": "1189"
},
@@ -5165,8 +5289,13 @@
{
"endPosition": "1718",
"kind": "VARIABLE",
- "name": "tree",
- "startPosition": "1669",
+ "binding": {
+ "endPosition": "1673",
+ "kind": "IDENTIFIER",
+ "name": "tree",
+ "startPosition": "1669"
+ },
+ "startPosition": "1665",
"initializer": {
"endPosition": "1718",
"kind": "FUNCTION_INVOCATION",
@@ -5177,6 +5306,7 @@
"expression": {
"endPosition": "1680",
"kind": "IDENTIFIER",
+ "this": "true",
"name": "this",
"startPosition": "1676"
},
@@ -5272,6 +5402,7 @@
"expression": {
"endPosition": "1790",
"kind": "IDENTIFIER",
+ "this": "true",
"name": "this",
"startPosition": "1786"
},
@@ -5429,7 +5560,7 @@
"endPosition": "2016",
"kind": "FUNCTION_EXPRESSION",
"body": {
- "endPosition": "2994",
+ "endPosition": "3634",
"kind": "BLOCK",
"statements": [
{
@@ -5554,8 +5685,13 @@
{
"endPosition": "2169",
"kind": "VARIABLE",
- "name": "obj",
- "startPosition": "2132",
+ "binding": {
+ "endPosition": "2135",
+ "kind": "IDENTIFIER",
+ "name": "obj",
+ "startPosition": "2132"
+ },
+ "startPosition": "2128",
"initializer": {
"endPosition": "2169",
"kind": "FUNCTION_INVOCATION",
@@ -5591,8 +5727,13 @@
{
"endPosition": "2190",
"kind": "VARIABLE",
- "name": "result",
- "startPosition": "2179",
+ "binding": {
+ "endPosition": "2185",
+ "kind": "IDENTIFIER",
+ "name": "result",
+ "startPosition": "2179"
+ },
+ "startPosition": "2175",
"initializer": {
"endPosition": "2190",
"kind": "OBJECT_LITERAL",
@@ -5603,8 +5744,13 @@
{
"endPosition": "2206",
"kind": "VARIABLE",
- "name": "i",
- "startPosition": "2205"
+ "binding": {
+ "endPosition": "2206",
+ "kind": "IDENTIFIER",
+ "name": "i",
+ "startPosition": "2205"
+ },
+ "startPosition": "2201"
},
{
"expression": {
@@ -5613,7 +5759,7 @@
"name": "obj",
"startPosition": "2210"
},
- "endPosition": "2975",
+ "endPosition": "3615",
"kind": "FOR_IN_LOOP",
"forEach": "false",
"variable": {
@@ -5623,14 +5769,19 @@
"startPosition": "2205"
},
"statement": {
- "endPosition": "2975",
+ "endPosition": "3615",
"kind": "BLOCK",
"statements": [
{
"endPosition": "2241",
"kind": "VARIABLE",
- "name": "val",
- "startPosition": "2229",
+ "binding": {
+ "endPosition": "2232",
+ "kind": "IDENTIFIER",
+ "name": "val",
+ "startPosition": "2229"
+ },
+ "startPosition": "2225",
"initializer": {
"expression": {
"endPosition": "2238",
@@ -5652,605 +5803,836 @@
{
"condition": {
"leftOperand": {
- "endPosition": "2258",
+ "leftOperand": {
+ "expression": {
+ "endPosition": "2384",
+ "kind": "IDENTIFIER",
+ "name": "val",
+ "startPosition": "2381"
+ },
+ "endPosition": "2384",
+ "kind": "TYPEOF",
+ "startPosition": "2374"
+ },
+ "endPosition": "2397",
+ "kind": "EQUAL_TO",
+ "rightOperand": {
+ "endPosition": "2397",
+ "kind": "STRING_LITERAL",
+ "value": "boolean",
+ "startPosition": "2390"
+ },
+ "startPosition": "2374"
+ },
+ "endPosition": "2414",
+ "kind": "CONDITIONAL_AND",
+ "rightOperand": {
+ "leftOperand": {
+ "endPosition": "2405",
+ "kind": "IDENTIFIER",
+ "name": "val",
+ "startPosition": "2402"
+ },
+ "endPosition": "2414",
+ "kind": "EQUAL_TO",
+ "rightOperand": {
+ "endPosition": "2414",
+ "kind": "BOOLEAN_LITERAL",
+ "value": "false",
+ "startPosition": "2409"
+ },
+ "startPosition": "2402"
+ },
+ "startPosition": "2374"
+ },
+ "endPosition": "2881",
+ "kind": "IF",
+ "startPosition": "2370",
+ "thenStatement": {
+ "endPosition": "2881",
+ "kind": "BLOCK",
+ "statements": [
+ {
+ "cases": [
+ {
+ "expression": {
+ "endPosition": "2473",
+ "kind": "STRING_LITERAL",
+ "value": "computed",
+ "startPosition": "2465"
+ },
+ "endPosition": "2475",
+ "kind": "CASE",
+ "statements": [],
+ "startPosition": "2459"
+ },
+ {
+ "expression": {
+ "endPosition": "2504",
+ "kind": "STRING_LITERAL",
+ "value": "static",
+ "startPosition": "2498"
+ },
+ "endPosition": "2506",
+ "kind": "CASE",
+ "statements": [],
+ "startPosition": "2492"
+ },
+ {
+ "expression": {
+ "endPosition": "2542",
+ "kind": "STRING_LITERAL",
+ "value": "restParameter",
+ "startPosition": "2529"
+ },
+ "endPosition": "2544",
+ "kind": "CASE",
+ "statements": [],
+ "startPosition": "2523"
+ },
+ {
+ "expression": {
+ "endPosition": "2571",
+ "kind": "STRING_LITERAL",
+ "value": "this",
+ "startPosition": "2567"
+ },
+ "endPosition": "2573",
+ "kind": "CASE",
+ "statements": [],
+ "startPosition": "2561"
+ },
+ {
+ "expression": {
+ "endPosition": "2601",
+ "kind": "STRING_LITERAL",
+ "value": "super",
+ "startPosition": "2596"
+ },
+ "endPosition": "2603",
+ "kind": "CASE",
+ "statements": [],
+ "startPosition": "2590"
+ },
+ {
+ "expression": {
+ "endPosition": "2630",
+ "kind": "STRING_LITERAL",
+ "value": "star",
+ "startPosition": "2626"
+ },
+ "endPosition": "2632",
+ "kind": "CASE",
+ "statements": [],
+ "startPosition": "2620"
+ },
+ {
+ "expression": {
+ "endPosition": "2662",
+ "kind": "STRING_LITERAL",
+ "value": "default",
+ "startPosition": "2655"
+ },
+ "endPosition": "2664",
+ "kind": "CASE",
+ "statements": [],
+ "startPosition": "2649"
+ },
+ {
+ "expression": {
+ "endPosition": "2702",
+ "kind": "STRING_LITERAL",
+ "value": "starDefaultStar",
+ "startPosition": "2687"
+ },
+ "endPosition": "2704",
+ "kind": "CASE",
+ "statements": [],
+ "startPosition": "2681"
+ },
+ {
+ "expression": {
+ "endPosition": "2732",
+ "kind": "STRING_LITERAL",
+ "value": "arrow",
+ "startPosition": "2727"
+ },
+ "endPosition": "2734",
+ "kind": "CASE",
+ "statements": [],
+ "startPosition": "2721"
+ },
+ {
+ "expression": {
+ "endPosition": "2766",
+ "kind": "STRING_LITERAL",
+ "value": "generator",
+ "startPosition": "2757"
+ },
+ "endPosition": "2768",
+ "kind": "CASE",
+ "statements": [],
+ "startPosition": "2751"
+ },
+ {
+ "expression": {
+ "endPosition": "2794",
+ "kind": "STRING_LITERAL",
+ "value": "let",
+ "startPosition": "2791"
+ },
+ "endPosition": "2796",
+ "kind": "CASE",
+ "statements": [],
+ "startPosition": "2785"
+ },
+ {
+ "expression": {
+ "endPosition": "2824",
+ "kind": "STRING_LITERAL",
+ "value": "const",
+ "startPosition": "2819"
+ },
+ "endPosition": "2856",
+ "kind": "CASE",
+ "statements": [
+ {
+ "endPosition": "2856",
+ "kind": "CONTINUE",
+ "startPosition": "2847"
+ }
+ ],
+ "startPosition": "2813"
+ }
+ ],
+ "expression": {
+ "endPosition": "2439",
+ "kind": "IDENTIFIER",
+ "name": "i",
+ "startPosition": "2438"
+ },
+ "endPosition": "2871",
+ "kind": "SWITCH",
+ "startPosition": "2430"
+ }
+ ],
+ "startPosition": "2416"
+ }
+ },
+ {
+ "condition": {
+ "leftOperand": {
+ "endPosition": "2898",
"kind": "IDENTIFIER",
"name": "val",
- "startPosition": "2255"
+ "startPosition": "2895"
},
"expression": {
- "endPosition": "2258",
+ "endPosition": "2898",
"kind": "IDENTIFIER",
"name": "val",
- "startPosition": "2255"
+ "startPosition": "2895"
},
- "endPosition": "2281",
+ "endPosition": "2921",
"kind": "INSTANCE_OF",
"rightOperand": {
"identifier": "Tree",
"expression": {
- "endPosition": "2276",
+ "endPosition": "2916",
"kind": "IDENTIFIER",
"name": "Parser",
- "startPosition": "2270"
+ "startPosition": "2910"
},
- "endPosition": "2281",
+ "endPosition": "2921",
"kind": "MEMBER_SELECT",
- "startPosition": "2270"
+ "startPosition": "2910"
},
"type": {
"identifier": "Tree",
"expression": {
- "endPosition": "2276",
+ "endPosition": "2916",
"kind": "IDENTIFIER",
"name": "Parser",
- "startPosition": "2270"
+ "startPosition": "2910"
},
- "endPosition": "2281",
+ "endPosition": "2921",
"kind": "MEMBER_SELECT",
- "startPosition": "2270"
+ "startPosition": "2910"
},
- "startPosition": "2255"
+ "startPosition": "2895"
},
"elseStatement": {
"condition": {
"leftOperand": {
- "endPosition": "2350",
+ "endPosition": "2990",
"kind": "IDENTIFIER",
"name": "val",
- "startPosition": "2347"
+ "startPosition": "2987"
},
"expression": {
- "endPosition": "2350",
+ "endPosition": "2990",
"kind": "IDENTIFIER",
"name": "val",
- "startPosition": "2347"
+ "startPosition": "2987"
},
- "endPosition": "2373",
+ "endPosition": "3013",
"kind": "INSTANCE_OF",
"rightOperand": {
"identifier": "List",
"expression": {
- "endPosition": "2368",
+ "endPosition": "3008",
"kind": "IDENTIFIER",
"name": "Parser",
- "startPosition": "2362"
+ "startPosition": "3002"
},
- "endPosition": "2373",
+ "endPosition": "3013",
"kind": "MEMBER_SELECT",
- "startPosition": "2362"
+ "startPosition": "3002"
},
"type": {
"identifier": "List",
"expression": {
- "endPosition": "2368",
+ "endPosition": "3008",
"kind": "IDENTIFIER",
"name": "Parser",
- "startPosition": "2362"
+ "startPosition": "3002"
},
- "endPosition": "2373",
+ "endPosition": "3013",
"kind": "MEMBER_SELECT",
- "startPosition": "2362"
+ "startPosition": "3002"
},
- "startPosition": "2347"
+ "startPosition": "2987"
},
"elseStatement": {
- "endPosition": "2969",
+ "endPosition": "3609",
"kind": "BLOCK",
"statements": [
{
"cases": [
{
"expression": {
- "endPosition": "2625",
+ "endPosition": "3265",
"kind": "STRING_LITERAL",
"value": "number",
- "startPosition": "2619"
+ "startPosition": "3259"
},
- "endPosition": "2627",
+ "endPosition": "3267",
"kind": "CASE",
"statements": [],
- "startPosition": "2613"
+ "startPosition": "3253"
},
{
"expression": {
- "endPosition": "2656",
+ "endPosition": "3296",
"kind": "STRING_LITERAL",
"value": "string",
- "startPosition": "2650"
+ "startPosition": "3290"
},
- "endPosition": "2658",
+ "endPosition": "3298",
"kind": "CASE",
"statements": [],
- "startPosition": "2644"
+ "startPosition": "3284"
},
{
"expression": {
- "endPosition": "2688",
+ "endPosition": "3328",
"kind": "STRING_LITERAL",
"value": "boolean",
- "startPosition": "2681"
+ "startPosition": "3321"
},
- "endPosition": "2762",
+ "endPosition": "3402",
"kind": "CASE",
"statements": [
{
"expression": {
"expression": {
- "endPosition": "2734",
+ "endPosition": "3374",
"kind": "FUNCTION_INVOCATION",
"functionSelect": {
- "endPosition": "2729",
+ "endPosition": "3369",
"kind": "IDENTIFIER",
"name": "String",
- "startPosition": "2723"
+ "startPosition": "3363"
},
"arguments": [
{
- "endPosition": "2733",
+ "endPosition": "3373",
"kind": "IDENTIFIER",
"name": "val",
- "startPosition": "2730"
+ "startPosition": "3370"
}
],
- "startPosition": "2723"
+ "startPosition": "3363"
},
- "endPosition": "2734",
+ "endPosition": "3374",
"kind": "ASSIGNMENT",
"variable": {
"expression": {
- "endPosition": "2717",
+ "endPosition": "3357",
"kind": "IDENTIFIER",
"name": "result",
- "startPosition": "2711"
+ "startPosition": "3351"
},
- "endPosition": "2720",
+ "endPosition": "3360",
"kind": "ARRAY_ACCESS",
"index": {
- "endPosition": "2719",
+ "endPosition": "3359",
"kind": "IDENTIFIER",
"name": "i",
- "startPosition": "2718"
+ "startPosition": "3358"
},
- "startPosition": "2711"
+ "startPosition": "3351"
},
- "startPosition": "2711"
+ "startPosition": "3351"
},
- "endPosition": "2734",
+ "endPosition": "3374",
"kind": "EXPRESSION_STATEMENT",
- "startPosition": "2711"
+ "startPosition": "3351"
},
{
- "endPosition": "2762",
+ "endPosition": "3402",
"kind": "BREAK",
- "startPosition": "2756"
+ "startPosition": "3396"
}
],
- "startPosition": "2675"
+ "startPosition": "3315"
},
{
- "endPosition": "2945",
+ "endPosition": "3585",
"kind": "CASE",
"statements": [
{
"condition": {
"leftOperand": {
"leftOperand": {
- "endPosition": "2815",
+ "endPosition": "3455",
"kind": "IDENTIFIER",
"name": "val",
- "startPosition": "2812"
+ "startPosition": "3452"
},
"expression": {
- "endPosition": "2815",
+ "endPosition": "3455",
"kind": "IDENTIFIER",
"name": "val",
- "startPosition": "2812"
+ "startPosition": "3452"
},
- "endPosition": "2841",
+ "endPosition": "3481",
"kind": "INSTANCE_OF",
"rightOperand": {
"identifier": "Long",
"expression": {
"identifier": "lang",
"expression": {
- "endPosition": "2831",
+ "endPosition": "3471",
"kind": "IDENTIFIER",
"name": "java",
- "startPosition": "2827"
+ "startPosition": "3467"
},
- "endPosition": "2836",
+ "endPosition": "3476",
"kind": "MEMBER_SELECT",
- "startPosition": "2827"
+ "startPosition": "3467"
},
- "endPosition": "2841",
+ "endPosition": "3481",
"kind": "MEMBER_SELECT",
- "startPosition": "2827"
+ "startPosition": "3467"
},
"type": {
"identifier": "Long",
"expression": {
"identifier": "lang",
"expression": {
- "endPosition": "2831",
+ "endPosition": "3471",
"kind": "IDENTIFIER",
"name": "java",
- "startPosition": "2827"
+ "startPosition": "3467"
},
- "endPosition": "2836",
+ "endPosition": "3476",
"kind": "MEMBER_SELECT",
- "startPosition": "2827"
+ "startPosition": "3467"
},
- "endPosition": "2841",
+ "endPosition": "3481",
"kind": "MEMBER_SELECT",
- "startPosition": "2827"
+ "startPosition": "3467"
},
- "startPosition": "2812"
+ "startPosition": "3452"
},
- "endPosition": "2871",
+ "endPosition": "3511",
"kind": "CONDITIONAL_OR",
"rightOperand": {
"leftOperand": {
- "endPosition": "2848",
+ "endPosition": "3488",
"kind": "IDENTIFIER",
"name": "val",
- "startPosition": "2845"
+ "startPosition": "3485"
},
"expression": {
- "endPosition": "2848",
+ "endPosition": "3488",
"kind": "IDENTIFIER",
"name": "val",
- "startPosition": "2845"
+ "startPosition": "3485"
},
- "endPosition": "2871",
+ "endPosition": "3511",
"kind": "INSTANCE_OF",
"rightOperand": {
"identifier": "Enum",
"expression": {
- "endPosition": "2866",
+ "endPosition": "3506",
"kind": "IDENTIFIER",
"name": "Parser",
- "startPosition": "2860"
+ "startPosition": "3500"
},
- "endPosition": "2871",
+ "endPosition": "3511",
"kind": "MEMBER_SELECT",
- "startPosition": "2860"
+ "startPosition": "3500"
},
"type": {
"identifier": "Enum",
"expression": {
- "endPosition": "2866",
+ "endPosition": "3506",
"kind": "IDENTIFIER",
"name": "Parser",
- "startPosition": "2860"
+ "startPosition": "3500"
},
- "endPosition": "2871",
+ "endPosition": "3511",
"kind": "MEMBER_SELECT",
- "startPosition": "2860"
+ "startPosition": "3500"
},
- "startPosition": "2845"
+ "startPosition": "3485"
},
- "startPosition": "2812"
+ "startPosition": "3452"
},
- "endPosition": "2945",
+ "endPosition": "3585",
"kind": "IF",
- "startPosition": "2808",
+ "startPosition": "3448",
"thenStatement": {
- "endPosition": "2945",
+ "endPosition": "3585",
"kind": "BLOCK",
"statements": [
{
"expression": {
"expression": {
- "endPosition": "2922",
+ "endPosition": "3562",
"kind": "FUNCTION_INVOCATION",
"functionSelect": {
- "endPosition": "2917",
+ "endPosition": "3557",
"kind": "IDENTIFIER",
"name": "String",
- "startPosition": "2911"
+ "startPosition": "3551"
},
"arguments": [
{
- "endPosition": "2921",
+ "endPosition": "3561",
"kind": "IDENTIFIER",
"name": "val",
- "startPosition": "2918"
+ "startPosition": "3558"
}
],
- "startPosition": "2911"
+ "startPosition": "3551"
},
- "endPosition": "2922",
+ "endPosition": "3562",
"kind": "ASSIGNMENT",
"variable": {
"expression": {
- "endPosition": "2905",
+ "endPosition": "3545",
"kind": "IDENTIFIER",
"name": "result",
- "startPosition": "2899"
+ "startPosition": "3539"
},
- "endPosition": "2908",
+ "endPosition": "3548",
"kind": "ARRAY_ACCESS",
"index": {
- "endPosition": "2907",
+ "endPosition": "3547",
"kind": "IDENTIFIER",
"name": "i",
- "startPosition": "2906"
+ "startPosition": "3546"
},
- "startPosition": "2899"
+ "startPosition": "3539"
},
- "startPosition": "2899"
+ "startPosition": "3539"
},
- "endPosition": "2922",
+ "endPosition": "3562",
"kind": "EXPRESSION_STATEMENT",
- "startPosition": "2899"
+ "startPosition": "3539"
}
],
- "startPosition": "2873"
+ "startPosition": "3513"
}
}
],
- "startPosition": "2779"
+ "startPosition": "3419"
}
],
"expression": {
"expression": {
- "endPosition": "2593",
+ "endPosition": "3233",
"kind": "IDENTIFIER",
"name": "val",
- "startPosition": "2590"
+ "startPosition": "3230"
},
- "endPosition": "2593",
+ "endPosition": "3233",
"kind": "TYPEOF",
- "startPosition": "2583"
+ "startPosition": "3223"
},
- "endPosition": "2959",
+ "endPosition": "3599",
"kind": "SWITCH",
- "startPosition": "2575"
+ "startPosition": "3215"
}
],
- "startPosition": "2561"
+ "startPosition": "3201"
},
- "endPosition": "2969",
+ "endPosition": "3609",
"kind": "IF",
- "startPosition": "2343",
+ "startPosition": "2983",
"thenStatement": {
- "endPosition": "2555",
+ "endPosition": "3195",
"kind": "BLOCK",
"statements": [
{
- "endPosition": "2420",
+ "endPosition": "3060",
"kind": "VARIABLE",
- "name": "arr",
- "startPosition": "2393",
+ "binding": {
+ "endPosition": "3036",
+ "kind": "IDENTIFIER",
+ "name": "arr",
+ "startPosition": "3033"
+ },
+ "startPosition": "3029",
"initializer": {
"constructorExpression": {
- "endPosition": "2420",
+ "endPosition": "3060",
"kind": "FUNCTION_INVOCATION",
"functionSelect": {
- "endPosition": "2408",
+ "endPosition": "3048",
"kind": "IDENTIFIER",
"name": "Array",
- "startPosition": "2403"
+ "startPosition": "3043"
},
"arguments": [
{
- "endPosition": "2419",
+ "endPosition": "3059",
"kind": "FUNCTION_INVOCATION",
"functionSelect": {
"identifier": "size",
"expression": {
- "endPosition": "2412",
+ "endPosition": "3052",
"kind": "IDENTIFIER",
"name": "val",
- "startPosition": "2409"
+ "startPosition": "3049"
},
- "endPosition": "2417",
+ "endPosition": "3057",
"kind": "MEMBER_SELECT",
- "startPosition": "2409"
+ "startPosition": "3049"
},
"arguments": [],
- "startPosition": "2409"
+ "startPosition": "3049"
}
],
- "startPosition": "2403"
+ "startPosition": "3043"
},
- "endPosition": "2420",
+ "endPosition": "3060",
"kind": "NEW",
- "startPosition": "2399"
+ "startPosition": "3039"
}
},
{
- "endPosition": "2444",
+ "endPosition": "3084",
"kind": "VARIABLE",
- "name": "j",
- "startPosition": "2443"
+ "binding": {
+ "endPosition": "3084",
+ "kind": "IDENTIFIER",
+ "name": "j",
+ "startPosition": "3083"
+ },
+ "startPosition": "3079"
},
{
"expression": {
- "endPosition": "2451",
+ "endPosition": "3091",
"kind": "IDENTIFIER",
"name": "val",
- "startPosition": "2448"
+ "startPosition": "3088"
},
- "endPosition": "2515",
+ "endPosition": "3155",
"kind": "FOR_IN_LOOP",
"forEach": "false",
"variable": {
- "endPosition": "2444",
+ "endPosition": "3084",
"kind": "IDENTIFIER",
"name": "j",
- "startPosition": "2443"
+ "startPosition": "3083"
},
"statement": {
- "endPosition": "2515",
+ "endPosition": "3155",
"kind": "BLOCK",
"statements": [
{
"expression": {
"expression": {
- "endPosition": "2500",
+ "endPosition": "3140",
"kind": "FUNCTION_INVOCATION",
"functionSelect": {
"identifier": "convert",
"expression": {
- "endPosition": "2484",
+ "endPosition": "3124",
"kind": "IDENTIFIER",
+ "this": "true",
"name": "this",
- "startPosition": "2480"
+ "startPosition": "3120"
},
- "endPosition": "2492",
+ "endPosition": "3132",
"kind": "MEMBER_SELECT",
- "startPosition": "2480"
+ "startPosition": "3120"
},
"arguments": [
{
"expression": {
- "endPosition": "2496",
+ "endPosition": "3136",
"kind": "IDENTIFIER",
"name": "val",
- "startPosition": "2493"
+ "startPosition": "3133"
},
- "endPosition": "2499",
+ "endPosition": "3139",
"kind": "ARRAY_ACCESS",
"index": {
- "endPosition": "2498",
+ "endPosition": "3138",
"kind": "IDENTIFIER",
"name": "j",
- "startPosition": "2497"
+ "startPosition": "3137"
},
- "startPosition": "2493"
+ "startPosition": "3133"
}
],
- "startPosition": "2480"
+ "startPosition": "3120"
},
- "endPosition": "2500",
+ "endPosition": "3140",
"kind": "ASSIGNMENT",
"variable": {
"expression": {
- "endPosition": "2474",
+ "endPosition": "3114",
"kind": "IDENTIFIER",
"name": "arr",
- "startPosition": "2471"
+ "startPosition": "3111"
},
- "endPosition": "2477",
+ "endPosition": "3117",
"kind": "ARRAY_ACCESS",
"index": {
- "endPosition": "2476",
+ "endPosition": "3116",
"kind": "IDENTIFIER",
"name": "j",
- "startPosition": "2475"
+ "startPosition": "3115"
},
- "startPosition": "2471"
+ "startPosition": "3111"
},
- "startPosition": "2471"
+ "startPosition": "3111"
},
- "endPosition": "2500",
+ "endPosition": "3140",
"kind": "EXPRESSION_STATEMENT",
- "startPosition": "2471"
+ "startPosition": "3111"
}
],
- "startPosition": "2453"
+ "startPosition": "3093"
},
- "startPosition": "2434"
+ "startPosition": "3074"
},
{
"expression": {
"expression": {
- "endPosition": "2544",
+ "endPosition": "3184",
"kind": "IDENTIFIER",
"name": "arr",
- "startPosition": "2541"
+ "startPosition": "3181"
},
- "endPosition": "2544",
+ "endPosition": "3184",
"kind": "ASSIGNMENT",
"variable": {
"expression": {
- "endPosition": "2535",
+ "endPosition": "3175",
"kind": "IDENTIFIER",
"name": "result",
- "startPosition": "2529"
+ "startPosition": "3169"
},
- "endPosition": "2538",
+ "endPosition": "3178",
"kind": "ARRAY_ACCESS",
"index": {
- "endPosition": "2537",
+ "endPosition": "3177",
"kind": "IDENTIFIER",
"name": "i",
- "startPosition": "2536"
+ "startPosition": "3176"
},
- "startPosition": "2529"
+ "startPosition": "3169"
},
- "startPosition": "2529"
+ "startPosition": "3169"
},
- "endPosition": "2544",
+ "endPosition": "3184",
"kind": "EXPRESSION_STATEMENT",
- "startPosition": "2529"
+ "startPosition": "3169"
}
],
- "startPosition": "2375"
+ "startPosition": "3015"
}
},
- "endPosition": "2969",
+ "endPosition": "3609",
"kind": "IF",
- "startPosition": "2251",
+ "startPosition": "2891",
"thenStatement": {
- "endPosition": "2337",
+ "endPosition": "2977",
"kind": "BLOCK",
"statements": [
{
"expression": {
"expression": {
- "endPosition": "2326",
+ "endPosition": "2966",
"kind": "FUNCTION_INVOCATION",
"functionSelect": {
"identifier": "convert",
"expression": {
- "endPosition": "2313",
+ "endPosition": "2953",
"kind": "IDENTIFIER",
+ "this": "true",
"name": "this",
- "startPosition": "2309"
+ "startPosition": "2949"
},
- "endPosition": "2321",
+ "endPosition": "2961",
"kind": "MEMBER_SELECT",
- "startPosition": "2309"
+ "startPosition": "2949"
},
"arguments": [
{
- "endPosition": "2325",
+ "endPosition": "2965",
"kind": "IDENTIFIER",
"name": "val",
- "startPosition": "2322"
+ "startPosition": "2962"
}
],
- "startPosition": "2309"
+ "startPosition": "2949"
},
- "endPosition": "2326",
+ "endPosition": "2966",
"kind": "ASSIGNMENT",
"variable": {
"expression": {
- "endPosition": "2303",
+ "endPosition": "2943",
"kind": "IDENTIFIER",
"name": "result",
- "startPosition": "2297"
+ "startPosition": "2937"
},
- "endPosition": "2306",
+ "endPosition": "2946",
"kind": "ARRAY_ACCESS",
"index": {
- "endPosition": "2305",
+ "endPosition": "2945",
"kind": "IDENTIFIER",
"name": "i",
- "startPosition": "2304"
+ "startPosition": "2944"
},
- "startPosition": "2297"
+ "startPosition": "2937"
},
- "startPosition": "2297"
+ "startPosition": "2937"
},
- "endPosition": "2326",
+ "endPosition": "2966",
"kind": "EXPRESSION_STATEMENT",
- "startPosition": "2297"
+ "startPosition": "2937"
}
],
- "startPosition": "2283"
+ "startPosition": "2923"
}
}
],
@@ -6260,14 +6642,14 @@
},
{
"expression": {
- "endPosition": "2993",
+ "endPosition": "3633",
"kind": "IDENTIFIER",
"name": "result",
- "startPosition": "2987"
+ "startPosition": "3627"
},
- "endPosition": "2994",
+ "endPosition": "3634",
"kind": "RETURN",
- "startPosition": "2980"
+ "startPosition": "3620"
}
],
"startPosition": "2016"
@@ -6305,105 +6687,120 @@
},
"startPosition": "1974"
},
- "endPosition": "2996",
+ "endPosition": "3636",
"kind": "EXPRESSION_STATEMENT",
"startPosition": "1974"
},
{
- "endPosition": "3726",
+ "endPosition": "4366",
"kind": "FUNCTION",
- "name": "processFiles",
+ "name": {
+ "endPosition": "3659",
+ "kind": "IDENTIFIER",
+ "name": "processFiles",
+ "startPosition": "3647"
+ },
"body": {
- "endPosition": "3724",
+ "endPosition": "4364",
"kind": "BLOCK",
"statements": [
{
- "endPosition": "3070",
+ "endPosition": "3710",
"kind": "VARIABLE",
- "name": "File",
- "startPosition": "3038",
+ "binding": {
+ "endPosition": "3682",
+ "kind": "IDENTIFIER",
+ "name": "File",
+ "startPosition": "3678"
+ },
+ "startPosition": "3674",
"initializer": {
- "endPosition": "3070",
+ "endPosition": "3710",
"kind": "FUNCTION_INVOCATION",
"functionSelect": {
"identifier": "type",
"expression": {
- "endPosition": "3049",
+ "endPosition": "3689",
"kind": "IDENTIFIER",
"name": "Java",
- "startPosition": "3045"
+ "startPosition": "3685"
},
- "endPosition": "3054",
+ "endPosition": "3694",
"kind": "MEMBER_SELECT",
- "startPosition": "3045"
+ "startPosition": "3685"
},
"arguments": [
{
- "endPosition": "3068",
+ "endPosition": "3708",
"kind": "STRING_LITERAL",
"value": "java.io.File",
- "startPosition": "3056"
+ "startPosition": "3696"
}
],
- "startPosition": "3045"
+ "startPosition": "3685"
}
},
{
- "endPosition": "3126",
+ "endPosition": "3766",
"kind": "VARIABLE",
- "name": "files",
- "startPosition": "3080",
+ "binding": {
+ "endPosition": "3725",
+ "kind": "IDENTIFIER",
+ "name": "files",
+ "startPosition": "3720"
+ },
+ "startPosition": "3716",
"initializer": {
- "endPosition": "3126",
+ "endPosition": "3766",
"kind": "FUNCTION_INVOCATION",
"functionSelect": {
"identifier": "listFiles",
"expression": {
"constructorExpression": {
- "endPosition": "3114",
+ "endPosition": "3754",
"kind": "FUNCTION_INVOCATION",
"functionSelect": {
- "endPosition": "3096",
+ "endPosition": "3736",
"kind": "IDENTIFIER",
"name": "File",
- "startPosition": "3092"
+ "startPosition": "3732"
},
"arguments": [
{
"leftOperand": {
- "endPosition": "3104",
+ "endPosition": "3744",
"kind": "IDENTIFIER",
"name": "__DIR__",
- "startPosition": "3097"
+ "startPosition": "3737"
},
- "endPosition": "3113",
+ "endPosition": "3753",
"kind": "PLUS",
"rightOperand": {
- "endPosition": "3113",
+ "endPosition": "3753",
"kind": "IDENTIFIER",
"name": "subdir",
- "startPosition": "3107"
+ "startPosition": "3747"
},
- "startPosition": "3097"
+ "startPosition": "3737"
}
],
- "startPosition": "3092"
+ "startPosition": "3732"
},
- "endPosition": "3114",
+ "endPosition": "3754",
"kind": "NEW",
- "startPosition": "3088"
+ "startPosition": "3728"
},
- "endPosition": "3124",
+ "endPosition": "3764",
"kind": "MEMBER_SELECT",
- "startPosition": "3088"
+ "startPosition": "3728"
},
"arguments": [],
- "startPosition": "3088"
+ "startPosition": "3728"
}
},
{
"expression": {
- "endPosition": "3160",
+ "endPosition": "3800",
"kind": "FUNCTION_INVOCATION",
"functionSelect": {
"identifier": "sort",
@@ -6412,751 +6809,786 @@
"expression": {
"identifier": "util",
"expression": {
- "endPosition": "3136",
+ "endPosition": "3776",
"kind": "IDENTIFIER",
"name": "java",
- "startPosition": "3132"
+ "startPosition": "3772"
},
- "endPosition": "3141",
+ "endPosition": "3781",
"kind": "MEMBER_SELECT",
- "startPosition": "3132"
+ "startPosition": "3772"
},
- "endPosition": "3148",
+ "endPosition": "3788",
"kind": "MEMBER_SELECT",
- "startPosition": "3132"
+ "startPosition": "3772"
},
- "endPosition": "3153",
+ "endPosition": "3793",
"kind": "MEMBER_SELECT",
- "startPosition": "3132"
+ "startPosition": "3772"
},
"arguments": [
{
- "endPosition": "3159",
+ "endPosition": "3799",
"kind": "IDENTIFIER",
"name": "files",
- "startPosition": "3154"
+ "startPosition": "3794"
}
],
- "startPosition": "3132"
+ "startPosition": "3772"
},
- "endPosition": "3160",
+ "endPosition": "3800",
"kind": "EXPRESSION_STATEMENT",
- "startPosition": "3132"
+ "startPosition": "3772"
},
{
- "endPosition": "3184",
+ "endPosition": "3824",
"kind": "VARIABLE",
- "name": "file",
- "startPosition": "3180"
+ "binding": {
+ "endPosition": "3824",
+ "kind": "IDENTIFIER",
+ "name": "file",
+ "startPosition": "3820"
+ },
+ "startPosition": "3816"
},
{
"expression": {
- "endPosition": "3193",
+ "endPosition": "3833",
"kind": "IDENTIFIER",
"name": "files",
- "startPosition": "3188"
+ "startPosition": "3828"
},
- "endPosition": "3724",
+ "endPosition": "4364",
"kind": "FOR_IN_LOOP",
"forEach": "true",
"variable": {
- "endPosition": "3184",
+ "endPosition": "3824",
"kind": "IDENTIFIER",
"name": "file",
- "startPosition": "3180"
+ "startPosition": "3820"
},
"statement": {
- "endPosition": "3724",
+ "endPosition": "4364",
"kind": "BLOCK",
"statements": [
{
"condition": {
- "endPosition": "3234",
+ "endPosition": "3874",
"kind": "FUNCTION_INVOCATION",
"functionSelect": {
"identifier": "endsWith",
"expression": {
"identifier": "name",
"expression": {
- "endPosition": "3213",
+ "endPosition": "3853",
"kind": "IDENTIFIER",
"name": "file",
- "startPosition": "3209"
+ "startPosition": "3849"
},
- "endPosition": "3218",
+ "endPosition": "3858",
"kind": "MEMBER_SELECT",
- "startPosition": "3209"
+ "startPosition": "3849"
},
- "endPosition": "3227",
+ "endPosition": "3867",
"kind": "MEMBER_SELECT",
- "startPosition": "3209"
+ "startPosition": "3849"
},
"arguments": [
{
- "endPosition": "3232",
+ "endPosition": "3872",
"kind": "STRING_LITERAL",
"value": ".js",
- "startPosition": "3229"
+ "startPosition": "3869"
}
],
- "startPosition": "3209"
+ "startPosition": "3849"
},
- "endPosition": "3718",
+ "endPosition": "4358",
"kind": "IF",
- "startPosition": "3205",
+ "startPosition": "3845",
"thenStatement": {
- "endPosition": "3718",
+ "endPosition": "4358",
"kind": "BLOCK",
"statements": [
{
- "endPosition": "3278",
+ "endPosition": "3918",
"kind": "VARIABLE",
- "name": "script",
- "startPosition": "3254",
+ "binding": {
+ "endPosition": "3900",
+ "kind": "IDENTIFIER",
+ "name": "script",
+ "startPosition": "3894"
+ },
+ "startPosition": "3890",
"initializer": {
- "endPosition": "3278",
+ "endPosition": "3918",
"kind": "FUNCTION_INVOCATION",
"functionSelect": {
- "endPosition": "3272",
+ "endPosition": "3912",
"kind": "IDENTIFIER",
"name": "readFully",
- "startPosition": "3263"
+ "startPosition": "3903"
},
"arguments": [
{
- "endPosition": "3277",
+ "endPosition": "3917",
"kind": "IDENTIFIER",
"name": "file",
- "startPosition": "3273"
+ "startPosition": "3913"
}
],
- "startPosition": "3263"
+ "startPosition": "3903"
}
},
{
- "endPosition": "3317",
+ "endPosition": "3957",
"kind": "VARIABLE",
- "name": "parser",
- "startPosition": "3296",
+ "binding": {
+ "endPosition": "3942",
+ "kind": "IDENTIFIER",
+ "name": "parser",
+ "startPosition": "3936"
+ },
+ "startPosition": "3932",
"initializer": {
"constructorExpression": {
- "endPosition": "3317",
+ "endPosition": "3957",
"kind": "FUNCTION_INVOCATION",
"functionSelect": {
- "endPosition": "3315",
+ "endPosition": "3955",
"kind": "IDENTIFIER",
"name": "Parser",
- "startPosition": "3309"
+ "startPosition": "3949"
},
"arguments": [],
- "startPosition": "3309"
+ "startPosition": "3949"
},
- "endPosition": "3317",
+ "endPosition": "3957",
"kind": "NEW",
- "startPosition": "3305"
+ "startPosition": "3945"
}
},
{
- "endPosition": "3578",
+ "endPosition": "4218",
"kind": "VARIABLE",
- "name": "tree",
- "startPosition": "3335",
+ "binding": {
+ "endPosition": "3979",
+ "kind": "IDENTIFIER",
+ "name": "tree",
+ "startPosition": "3975"
+ },
+ "startPosition": "3971",
"initializer": {
- "endPosition": "3578",
+ "endPosition": "4218",
"kind": "FUNCTION_INVOCATION",
"functionSelect": {
"identifier": "parse",
"expression": {
- "endPosition": "3348",
+ "endPosition": "3988",
"kind": "IDENTIFIER",
"name": "parser",
- "startPosition": "3342"
+ "startPosition": "3982"
},
- "endPosition": "3354",
+ "endPosition": "3994",
"kind": "MEMBER_SELECT",
- "startPosition": "3342"
+ "startPosition": "3982"
},
"arguments": [
{
"leftOperand": {
"leftOperand": {
- "endPosition": "3361",
+ "endPosition": "4001",
"kind": "IDENTIFIER",
"name": "subdir",
- "startPosition": "3355"
+ "startPosition": "3995"
},
- "endPosition": "3366",
+ "endPosition": "4006",
"kind": "PLUS",
"rightOperand": {
- "endPosition": "3366",
+ "endPosition": "4006",
"kind": "STRING_LITERAL",
"value": "/",
- "startPosition": "3365"
+ "startPosition": "4005"
},
- "startPosition": "3355"
+ "startPosition": "3995"
},
- "endPosition": "3379",
+ "endPosition": "4019",
"kind": "PLUS",
"rightOperand": {
"identifier": "name",
"expression": {
- "endPosition": "3374",
+ "endPosition": "4014",
"kind": "IDENTIFIER",
"name": "file",
- "startPosition": "3370"
+ "startPosition": "4010"
},
- "endPosition": "3379",
+ "endPosition": "4019",
"kind": "MEMBER_SELECT",
- "startPosition": "3370"
+ "startPosition": "4010"
},
- "startPosition": "3355"
+ "startPosition": "3995"
},
{
- "endPosition": "3387",
+ "endPosition": "4027",
"kind": "IDENTIFIER",
"name": "script",
- "startPosition": "3381"
+ "startPosition": "4021"
},
{
- "endPosition": "3426",
+ "endPosition": "4066",
"kind": "FUNCTION_EXPRESSION",
"body": {
- "endPosition": "3559",
+ "endPosition": "4199",
"kind": "BLOCK",
"statements": [
{
"expression": {
- "endPosition": "3526",
+ "endPosition": "4166",
"kind": "FUNCTION_INVOCATION",
"functionSelect": {
- "endPosition": "3453",
+ "endPosition": "4093",
"kind": "IDENTIFIER",
"name": "print",
- "startPosition": "3448"
+ "startPosition": "4088"
},
"arguments": [
{
- "endPosition": "3525",
+ "endPosition": "4165",
"kind": "FUNCTION_INVOCATION",
"functionSelect": {
"identifier": "replace",
"expression": {
- "endPosition": "3505",
+ "endPosition": "4145",
"kind": "FUNCTION_INVOCATION",
"functionSelect": {
"identifier": "stringify",
"expression": {
- "endPosition": "3458",
+ "endPosition": "4098",
"kind": "IDENTIFIER",
"name": "JSON",
- "startPosition": "3454"
+ "startPosition": "4094"
},
- "endPosition": "3468",
+ "endPosition": "4108",
"kind": "MEMBER_SELECT",
- "startPosition": "3454"
+ "startPosition": "4094"
},
"arguments": [
{
- "endPosition": "3495",
+ "endPosition": "4135",
"kind": "FUNCTION_INVOCATION",
"functionSelect": {
"identifier": "convert",
"expression": {
- "endPosition": "3475",
+ "endPosition": "4115",
"kind": "IDENTIFIER",
"name": "parser",
- "startPosition": "3469"
+ "startPosition": "4109"
},
- "endPosition": "3483",
+ "endPosition": "4123",
"kind": "MEMBER_SELECT",
- "startPosition": "3469"
+ "startPosition": "4109"
},
"arguments": [
{
- "endPosition": "3494",
+ "endPosition": "4134",
"kind": "IDENTIFIER",
"name": "diagnostic",
- "startPosition": "3484"
+ "startPosition": "4124"
}
],
- "startPosition": "3469"
+ "startPosition": "4109"
},
{
- "endPosition": "3501",
+ "endPosition": "4141",
"kind": "NULL_LITERAL",
- "startPosition": "3497"
+ "startPosition": "4137"
},
{
- "endPosition": "3504",
+ "endPosition": "4144",
"kind": "NUMBER_LITERAL",
"value": "2",
- "startPosition": "3503"
+ "startPosition": "4143"
}
],
- "startPosition": "3454"
+ "startPosition": "4094"
},
- "endPosition": "3513",
+ "endPosition": "4153",
"kind": "MEMBER_SELECT",
- "startPosition": "3454"
+ "startPosition": "4094"
},
"arguments": [
{
- "endPosition": "3520",
+ "endPosition": "4160",
"kind": "REGEXP_LITERAL",
"options": "g",
"pattern": "\\\\r",
- "startPosition": "3514"
+ "startPosition": "4154"
},
{
- "endPosition": "3523",
+ "endPosition": "4163",
"kind": "STRING_LITERAL",
"value": "",
- "startPosition": "3523"
+ "startPosition": "4163"
}
],
- "startPosition": "3513"
+ "startPosition": "4153"
}
],
- "startPosition": "3448"
+ "startPosition": "4088"
},
- "endPosition": "3526",
+ "endPosition": "4166",
"kind": "EXPRESSION_STATEMENT",
- "startPosition": "3448"
+ "startPosition": "4088"
},
{
"expression": {
- "endPosition": "3558",
+ "endPosition": "4198",
"kind": "FUNCTION_INVOCATION",
"functionSelect": {
- "endPosition": "3553",
+ "endPosition": "4193",
"kind": "IDENTIFIER",
"name": "print",
- "startPosition": "3548"
+ "startPosition": "4188"
},
"arguments": [
{
- "endPosition": "3556",
+ "endPosition": "4196",
"kind": "STRING_LITERAL",
"value": ",",
- "startPosition": "3555"
+ "startPosition": "4195"
}
],
- "startPosition": "3548"
+ "startPosition": "4188"
},
- "endPosition": "3558",
+ "endPosition": "4198",
"kind": "EXPRESSION_STATEMENT",
- "startPosition": "3548"
+ "startPosition": "4188"
}
],
- "startPosition": "3426"
+ "startPosition": "4066"
},
"strict": "false",
- "startPosition": "3426",
+ "startPosition": "4066",
"parameters": [
{
- "endPosition": "3424",
+ "endPosition": "4064",
"kind": "IDENTIFIER",
"name": "diagnostic",
- "startPosition": "3414"
+ "startPosition": "4054"
}
]
}
],
- "startPosition": "3342"
+ "startPosition": "3982"
}
},
{
"condition": {
"leftOperand": {
- "endPosition": "3601",
+ "endPosition": "4241",
"kind": "IDENTIFIER",
"name": "tree",
- "startPosition": "3597"
+ "startPosition": "4237"
},
- "endPosition": "3609",
+ "endPosition": "4249",
"kind": "NOT_EQUAL_TO",
"rightOperand": {
- "endPosition": "3609",
+ "endPosition": "4249",
"kind": "NULL_LITERAL",
- "startPosition": "3605"
+ "startPosition": "4245"
},
- "startPosition": "3597"
+ "startPosition": "4237"
},
- "endPosition": "3708",
+ "endPosition": "4348",
"kind": "IF",
- "startPosition": "3593",
+ "startPosition": "4233",
"thenStatement": {
- "endPosition": "3708",
+ "endPosition": "4348",
"kind": "BLOCK",
"statements": [
{
"expression": {
- "endPosition": "3665",
+ "endPosition": "4305",
"kind": "FUNCTION_INVOCATION",
"functionSelect": {
- "endPosition": "3634",
+ "endPosition": "4274",
"kind": "IDENTIFIER",
"name": "print",
- "startPosition": "3629"
+ "startPosition": "4269"
},
"arguments": [
{
- "endPosition": "3664",
+ "endPosition": "4304",
"kind": "FUNCTION_INVOCATION",
"functionSelect": {
"identifier": "stringify",
"expression": {
- "endPosition": "3639",
+ "endPosition": "4279",
"kind": "IDENTIFIER",
"name": "JSON",
- "startPosition": "3635"
+ "startPosition": "4275"
},
- "endPosition": "3649",
+ "endPosition": "4289",
"kind": "MEMBER_SELECT",
- "startPosition": "3635"
+ "startPosition": "4275"
},
"arguments": [
{
- "endPosition": "3654",
+ "endPosition": "4294",
"kind": "IDENTIFIER",
"name": "tree",
- "startPosition": "3650"
+ "startPosition": "4290"
},
{
- "endPosition": "3660",
+ "endPosition": "4300",
"kind": "NULL_LITERAL",
- "startPosition": "3656"
+ "startPosition": "4296"
},
{
- "endPosition": "3663",
+ "endPosition": "4303",
"kind": "NUMBER_LITERAL",
"value": "2",
- "startPosition": "3662"
+ "startPosition": "4302"
}
],
- "startPosition": "3635"
+ "startPosition": "4275"
}
],
- "startPosition": "3629"
+ "startPosition": "4269"
},
- "endPosition": "3665",
+ "endPosition": "4305",
"kind": "EXPRESSION_STATEMENT",
- "startPosition": "3629"
+ "startPosition": "4269"
},
{
"expression": {
- "endPosition": "3693",
+ "endPosition": "4333",
"kind": "FUNCTION_INVOCATION",
"functionSelect": {
- "endPosition": "3688",
+ "endPosition": "4328",
"kind": "IDENTIFIER",
"name": "print",
- "startPosition": "3683"
+ "startPosition": "4323"
},
"arguments": [
{
- "endPosition": "3691",
+ "endPosition": "4331",
"kind": "STRING_LITERAL",
"value": ",",
- "startPosition": "3690"
+ "startPosition": "4330"
}
],
- "startPosition": "3683"
+ "startPosition": "4323"
},
- "endPosition": "3693",
+ "endPosition": "4333",
"kind": "EXPRESSION_STATEMENT",
- "startPosition": "3683"
+ "startPosition": "4323"
}
],
- "startPosition": "3611"
+ "startPosition": "4251"
}
}
],
- "startPosition": "3236"
+ "startPosition": "3876"
}
}
],
- "startPosition": "3195"
+ "startPosition": "3835"
},
- "startPosition": "3166"
+ "startPosition": "3806"
}
],
- "startPosition": "3028"
+ "startPosition": "3668"
},
"strict": "false",
- "startPosition": "2998",
+ "startPosition": "3638",
"parameters": [
{
- "endPosition": "3026",
+ "endPosition": "3666",
"kind": "IDENTIFIER",
"name": "subdir",
- "startPosition": "3020"
+ "startPosition": "3660"
}
]
},
{
- "endPosition": "4070",
+ "endPosition": "4710",
"kind": "FUNCTION",
- "name": "main",
+ "name": {
+ "endPosition": "4421",
+ "kind": "IDENTIFIER",
+ "name": "main",
+ "startPosition": "4417"
+ },
"body": {
- "endPosition": "4068",
+ "endPosition": "4708",
"kind": "BLOCK",
"statements": [
{
"expression": {
- "endPosition": "3800",
+ "endPosition": "4440",
"kind": "FUNCTION_INVOCATION",
"functionSelect": {
- "endPosition": "3795",
+ "endPosition": "4435",
"kind": "IDENTIFIER",
"name": "print",
- "startPosition": "3790"
+ "startPosition": "4430"
},
"arguments": [
{
- "endPosition": "3798",
+ "endPosition": "4438",
"kind": "STRING_LITERAL",
"value": "[",
- "startPosition": "3797"
+ "startPosition": "4437"
}
],
- "startPosition": "3790"
+ "startPosition": "4430"
},
- "endPosition": "3800",
+ "endPosition": "4440",
"kind": "EXPRESSION_STATEMENT",
- "startPosition": "3790"
+ "startPosition": "4430"
},
{
"expression": {
- "endPosition": "3834",
+ "endPosition": "4474",
"kind": "FUNCTION_INVOCATION",
"functionSelect": {
- "endPosition": "3819",
+ "endPosition": "4459",
"kind": "IDENTIFIER",
"name": "processFiles",
- "startPosition": "3807"
+ "startPosition": "4447"
},
"arguments": [
{
- "endPosition": "3832",
+ "endPosition": "4472",
"kind": "STRING_LITERAL",
"value": "parsertests",
- "startPosition": "3821"
+ "startPosition": "4461"
}
],
- "startPosition": "3807"
+ "startPosition": "4447"
},
- "endPosition": "3834",
+ "endPosition": "4474",
"kind": "EXPRESSION_STATEMENT",
- "startPosition": "3807"
+ "startPosition": "4447"
},
{
"expression": {
- "endPosition": "3875",
+ "endPosition": "4515",
"kind": "FUNCTION_INVOCATION",
"functionSelect": {
- "endPosition": "3852",
+ "endPosition": "4492",
"kind": "IDENTIFIER",
"name": "processFiles",
- "startPosition": "3840"
+ "startPosition": "4480"
},
"arguments": [
{
- "endPosition": "3873",
+ "endPosition": "4513",
"kind": "STRING_LITERAL",
"value": "parsernegativetests",
- "startPosition": "3854"
+ "startPosition": "4494"
}
],
- "startPosition": "3840"
+ "startPosition": "4480"
},
- "endPosition": "3875",
+ "endPosition": "4515",
"kind": "EXPRESSION_STATEMENT",
- "startPosition": "3840"
+ "startPosition": "4480"
},
{
- "endPosition": "3944",
+ "endPosition": "4584",
"kind": "VARIABLE",
- "name": "script",
- "startPosition": "3916",
+ "binding": {
+ "endPosition": "4562",
+ "kind": "IDENTIFIER",
+ "name": "script",
+ "startPosition": "4556"
+ },
+ "startPosition": "4552",
"initializer": {
- "endPosition": "3944",
+ "endPosition": "4584",
"kind": "FUNCTION_INVOCATION",
"functionSelect": {
- "endPosition": "3934",
+ "endPosition": "4574",
"kind": "IDENTIFIER",
"name": "readFully",
- "startPosition": "3925"
+ "startPosition": "4565"
},
"arguments": [
{
- "endPosition": "3943",
+ "endPosition": "4583",
"kind": "IDENTIFIER",
"name": "__FILE__",
- "startPosition": "3935"
+ "startPosition": "4575"
}
],
- "startPosition": "3925"
+ "startPosition": "4565"
}
},
{
- "endPosition": "4009",
+ "endPosition": "4649",
"kind": "VARIABLE",
- "name": "tree",
- "startPosition": "3954",
+ "binding": {
+ "endPosition": "4598",
+ "kind": "IDENTIFIER",
+ "name": "tree",
+ "startPosition": "4594"
+ },
+ "startPosition": "4590",
"initializer": {
- "endPosition": "4009",
+ "endPosition": "4649",
"kind": "FUNCTION_INVOCATION",
"functionSelect": {
"identifier": "parse",
"expression": {
"constructorExpression": {
- "endPosition": "3973",
+ "endPosition": "4613",
"kind": "FUNCTION_INVOCATION",
"functionSelect": {
- "endPosition": "3971",
+ "endPosition": "4611",
"kind": "IDENTIFIER",
"name": "Parser",
- "startPosition": "3965"
+ "startPosition": "4605"
},
"arguments": [],
- "startPosition": "3965"
+ "startPosition": "4605"
},
- "endPosition": "3973",
+ "endPosition": "4613",
"kind": "NEW",
- "startPosition": "3961"
+ "startPosition": "4601"
},
- "endPosition": "3979",
+ "endPosition": "4619",
"kind": "MEMBER_SELECT",
- "startPosition": "3961"
+ "startPosition": "4601"
},
"arguments": [
{
- "endPosition": "3993",
+ "endPosition": "4633",
"kind": "STRING_LITERAL",
"value": "parserapi.js",
- "startPosition": "3981"
+ "startPosition": "4621"
},
{
- "endPosition": "4002",
+ "endPosition": "4642",
"kind": "IDENTIFIER",
"name": "script",
- "startPosition": "3996"
+ "startPosition": "4636"
},
{
- "endPosition": "4008",
+ "endPosition": "4648",
"kind": "NULL_LITERAL",
- "startPosition": "4004"
+ "startPosition": "4644"
}
],
- "startPosition": "3961"
+ "startPosition": "4601"
}
},
{
"expression": {
- "endPosition": "4051",
+ "endPosition": "4691",
"kind": "FUNCTION_INVOCATION",
"functionSelect": {
- "endPosition": "4020",
+ "endPosition": "4660",
"kind": "IDENTIFIER",
"name": "print",
- "startPosition": "4015"
+ "startPosition": "4655"
},
"arguments": [
{
- "endPosition": "4050",
+ "endPosition": "4690",
"kind": "FUNCTION_INVOCATION",
"functionSelect": {
"identifier": "stringify",
"expression": {
- "endPosition": "4025",
+ "endPosition": "4665",
"kind": "IDENTIFIER",
"name": "JSON",
- "startPosition": "4021"
+ "startPosition": "4661"
},
- "endPosition": "4035",
+ "endPosition": "4675",
"kind": "MEMBER_SELECT",
- "startPosition": "4021"
+ "startPosition": "4661"
},
"arguments": [
{
- "endPosition": "4040",
+ "endPosition": "4680",
"kind": "IDENTIFIER",
"name": "tree",
- "startPosition": "4036"
+ "startPosition": "4676"
},
{
- "endPosition": "4046",
+ "endPosition": "4686",
"kind": "NULL_LITERAL",
- "startPosition": "4042"
+ "startPosition": "4682"
},
{
- "endPosition": "4049",
+ "endPosition": "4689",
"kind": "NUMBER_LITERAL",
"value": "2",
- "startPosition": "4048"
+ "startPosition": "4688"
}
],
- "startPosition": "4021"
+ "startPosition": "4661"
}
],
- "startPosition": "4015"
+ "startPosition": "4655"
},
- "endPosition": "4051",
+ "endPosition": "4691",
"kind": "EXPRESSION_STATEMENT",
- "startPosition": "4015"
+ "startPosition": "4655"
},
{
"expression": {
- "endPosition": "4067",
+ "endPosition": "4707",
"kind": "FUNCTION_INVOCATION",
"functionSelect": {
- "endPosition": "4062",
+ "endPosition": "4702",
"kind": "IDENTIFIER",
"name": "print",
- "startPosition": "4057"
+ "startPosition": "4697"
},
"arguments": [
{
- "endPosition": "4065",
+ "endPosition": "4705",
"kind": "STRING_LITERAL",
"value": "]",
- "startPosition": "4064"
+ "startPosition": "4704"
}
],
- "startPosition": "4057"
+ "startPosition": "4697"
},
- "endPosition": "4067",
+ "endPosition": "4707",
"kind": "EXPRESSION_STATEMENT",
- "startPosition": "4057"
+ "startPosition": "4697"
}
],
- "startPosition": "3784"
+ "startPosition": "4424"
},
"strict": "false",
- "startPosition": "3768",
+ "startPosition": "4408",
"parameters": []
},
{
"expression": {
- "endPosition": "4078",
+ "endPosition": "4718",
"kind": "FUNCTION_INVOCATION",
"functionSelect": {
- "endPosition": "4076",
+ "endPosition": "4716",
"kind": "IDENTIFIER",
"name": "main",
- "startPosition": "4072"
+ "startPosition": "4712"
},
"arguments": [],
- "startPosition": "4072"
- },
- "endPosition": "4078",
+ "startPosition": "4712"
+ },
+ "endPosition": "4718",
"kind": "EXPRESSION_STATEMENT",
- "startPosition": "4072"
+ "startPosition": "4712"
}
],
"sourceName": "parserapi.js",
"strict": "false",
"startPosition": "1136"
-}
-]
+}
+]
--- a/nashorn/test/script/nosecurity/parservisitor.js Wed Jul 05 21:57:11 2017 +0200
+++ b/nashorn/test/script/nosecurity/parservisitor.js Tue Jul 12 21:18:13 2016 +0530
@@ -202,7 +202,7 @@
parse("funcdecl.js", "function func() {}",
new (Java.extend(SimpleTreeVisitor))() {
visitFunctionDeclaration: function(fd) {
- print("in visitFunctionDeclaration " + fd.name);
+ print("in visitFunctionDeclaration " + fd.name.name);
}
});
@@ -361,7 +361,7 @@
parse("var.js", "var x = 34;",
new (Java.extend(SimpleTreeVisitor))() {
visitVariable: function(vn) {
- print("in visitVariable " + vn.name + " = " + vn.initializer.value);
+ print("in visitVariable " + vn.binding.name + " = " + vn.initializer.value);
}
});
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/nashorn/test/script/nosecurity/treeapi/arrow.js Tue Jul 12 21:18:13 2016 +0530
@@ -0,0 +1,49 @@
+/*
+ * Copyright (c) 2016, 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.
+ *
+ * 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.
+ */
+
+/**
+ * Tests to check representation of ES6 arrows.
+ *
+ * @test
+ * @option -scripting
+ * @run
+ */
+
+load(__DIR__ + "utils.js")
+
+var code = <<EOF
+
+var f = x=>x*2;
+[].map(v => v + 1);
+
+EOF
+
+parse("arrow.js", code, "--language=es6", new (Java.extend(visitor_es6, {
+ visitVariable : function (node, obj) {
+ obj.push(convert(node))
+ },
+ visitExpressionStatement : function (node, obj) {
+ obj.push(convert(node))
+ }
+})))
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/nashorn/test/script/nosecurity/treeapi/arrow.js.EXPECTED Tue Jul 12 21:18:13 2016 +0530
@@ -0,0 +1,103 @@
+[
+ {
+ "endPosition": "15",
+ "kind": "VARIABLE",
+ "binding": {
+ "endPosition": "6",
+ "kind": "IDENTIFIER",
+ "name": "f",
+ "startPosition": "5"
+ },
+ "startPosition": "1",
+ "initializer": {
+ "endPosition": "12",
+ "arrow": "true",
+ "kind": "FUNCTION_EXPRESSION",
+ "name": "null",
+ "body": {
+ "leftOperand": {
+ "endPosition": "13",
+ "kind": "IDENTIFIER",
+ "name": "x",
+ "startPosition": "12"
+ },
+ "endPosition": "15",
+ "kind": "MULTIPLY",
+ "rightOperand": {
+ "endPosition": "15",
+ "kind": "NUMBER_LITERAL",
+ "value": "2",
+ "startPosition": "14"
+ },
+ "startPosition": "12"
+ },
+ "strict": "false",
+ "startPosition": "12",
+ "parameters": [
+ {
+ "endPosition": "10",
+ "kind": "IDENTIFIER",
+ "name": "x",
+ "startPosition": "9"
+ }
+ ]
+ }
+ },
+ {
+ "expression": {
+ "endPosition": "35",
+ "kind": "FUNCTION_INVOCATION",
+ "functionSelect": {
+ "identifier": "map",
+ "expression": {
+ "endPosition": "19",
+ "kind": "ARRAY_LITERAL",
+ "elements": [],
+ "startPosition": "17"
+ },
+ "endPosition": "23",
+ "kind": "MEMBER_SELECT",
+ "startPosition": "17"
+ },
+ "arguments": [
+ {
+ "endPosition": "29",
+ "arrow": "true",
+ "kind": "FUNCTION_EXPRESSION",
+ "name": "null",
+ "body": {
+ "leftOperand": {
+ "endPosition": "30",
+ "kind": "IDENTIFIER",
+ "name": "v",
+ "startPosition": "29"
+ },
+ "endPosition": "34",
+ "kind": "PLUS",
+ "rightOperand": {
+ "endPosition": "34",
+ "kind": "NUMBER_LITERAL",
+ "value": "1",
+ "startPosition": "33"
+ },
+ "startPosition": "29"
+ },
+ "strict": "false",
+ "startPosition": "29",
+ "parameters": [
+ {
+ "endPosition": "25",
+ "kind": "IDENTIFIER",
+ "name": "v",
+ "startPosition": "24"
+ }
+ ]
+ }
+ ],
+ "startPosition": "17"
+ },
+ "endPosition": "35",
+ "kind": "EXPRESSION_STATEMENT",
+ "startPosition": "17"
+ }
+]
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/nashorn/test/script/nosecurity/treeapi/arrow_params.js Tue Jul 12 21:18:13 2016 +0530
@@ -0,0 +1,49 @@
+/*
+ * Copyright (c) 2016, 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.
+ *
+ * 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.
+ */
+
+/**
+ * Tests to check representation of ES6 arrow params.
+ *
+ * @test
+ * @option -scripting
+ * @run
+ */
+
+load(__DIR__ + "utils.js")
+
+var code = <<EOF
+
+var f1 = (x=2)=>x*3;
+var f2 = ({x, y})=>x*y;
+var f3 = ([x, y])=>x+y;
+var f4 = ({x, y}={y: 4, x: 5})=>x*y;
+var f5 = ([x, y]=[3, 6])=>x+y;
+
+EOF
+
+parse("arrow_params.js", code, "--language=es6", new (Java.extend(visitor_es6, {
+ visitVariable : function (node, obj) {
+ obj.push(convert(node))
+ }
+})))
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/nashorn/test/script/nosecurity/treeapi/arrow_params.js.EXPECTED Tue Jul 12 21:18:13 2016 +0530
@@ -0,0 +1,411 @@
+[
+ {
+ "endPosition": "20",
+ "kind": "VARIABLE",
+ "binding": {
+ "endPosition": "7",
+ "kind": "IDENTIFIER",
+ "name": "f1",
+ "startPosition": "5"
+ },
+ "startPosition": "1",
+ "initializer": {
+ "endPosition": "17",
+ "arrow": "true",
+ "kind": "FUNCTION_EXPRESSION",
+ "name": "null",
+ "body": {
+ "leftOperand": {
+ "endPosition": "18",
+ "kind": "IDENTIFIER",
+ "name": "x",
+ "startPosition": "17"
+ },
+ "endPosition": "20",
+ "kind": "MULTIPLY",
+ "rightOperand": {
+ "endPosition": "20",
+ "kind": "NUMBER_LITERAL",
+ "value": "3",
+ "startPosition": "19"
+ },
+ "startPosition": "17"
+ },
+ "strict": "false",
+ "startPosition": "17",
+ "parameters": [
+ {
+ "expression": {
+ "endPosition": "14",
+ "kind": "NUMBER_LITERAL",
+ "value": "2",
+ "startPosition": "13"
+ },
+ "endPosition": "14",
+ "kind": "ASSIGNMENT",
+ "variable": {
+ "endPosition": "12",
+ "kind": "IDENTIFIER",
+ "name": "x",
+ "startPosition": "11"
+ },
+ "startPosition": "11"
+ }
+ ]
+ }
+ },
+ {
+ "endPosition": "44",
+ "kind": "VARIABLE",
+ "binding": {
+ "endPosition": "28",
+ "kind": "IDENTIFIER",
+ "name": "f2",
+ "startPosition": "26"
+ },
+ "startPosition": "22",
+ "initializer": {
+ "endPosition": "41",
+ "arrow": "true",
+ "kind": "FUNCTION_EXPRESSION",
+ "name": "null",
+ "body": {
+ "leftOperand": {
+ "endPosition": "42",
+ "kind": "IDENTIFIER",
+ "name": "x",
+ "startPosition": "41"
+ },
+ "endPosition": "44",
+ "kind": "MULTIPLY",
+ "rightOperand": {
+ "endPosition": "44",
+ "kind": "IDENTIFIER",
+ "name": "y",
+ "startPosition": "43"
+ },
+ "startPosition": "41"
+ },
+ "strict": "false",
+ "startPosition": "41",
+ "parameters": [
+ {
+ "endPosition": "38",
+ "kind": "OBJECT_LITERAL",
+ "startPosition": "32",
+ "properties": [
+ {
+ "getter": "null",
+ "endPosition": "34",
+ "kind": "PROPERTY",
+ "setter": "null",
+ "value": {
+ "endPosition": "34",
+ "kind": "IDENTIFIER",
+ "name": "x",
+ "startPosition": "33"
+ },
+ "startPosition": "33",
+ "key": {
+ "endPosition": "34",
+ "kind": "IDENTIFIER",
+ "name": "x",
+ "startPosition": "33"
+ }
+ },
+ {
+ "getter": "null",
+ "endPosition": "37",
+ "kind": "PROPERTY",
+ "setter": "null",
+ "value": {
+ "endPosition": "37",
+ "kind": "IDENTIFIER",
+ "name": "y",
+ "startPosition": "36"
+ },
+ "startPosition": "36",
+ "key": {
+ "endPosition": "37",
+ "kind": "IDENTIFIER",
+ "name": "y",
+ "startPosition": "36"
+ }
+ }
+ ]
+ }
+ ]
+ }
+ },
+ {
+ "endPosition": "68",
+ "kind": "VARIABLE",
+ "binding": {
+ "endPosition": "52",
+ "kind": "IDENTIFIER",
+ "name": "f3",
+ "startPosition": "50"
+ },
+ "startPosition": "46",
+ "initializer": {
+ "endPosition": "65",
+ "arrow": "true",
+ "kind": "FUNCTION_EXPRESSION",
+ "name": "null",
+ "body": {
+ "leftOperand": {
+ "endPosition": "66",
+ "kind": "IDENTIFIER",
+ "name": "x",
+ "startPosition": "65"
+ },
+ "endPosition": "68",
+ "kind": "PLUS",
+ "rightOperand": {
+ "endPosition": "68",
+ "kind": "IDENTIFIER",
+ "name": "y",
+ "startPosition": "67"
+ },
+ "startPosition": "65"
+ },
+ "strict": "false",
+ "startPosition": "65",
+ "parameters": [
+ {
+ "endPosition": "62",
+ "kind": "ARRAY_LITERAL",
+ "elements": [
+ {
+ "endPosition": "58",
+ "kind": "IDENTIFIER",
+ "name": "x",
+ "startPosition": "57"
+ },
+ {
+ "endPosition": "61",
+ "kind": "IDENTIFIER",
+ "name": "y",
+ "startPosition": "60"
+ }
+ ],
+ "startPosition": "56"
+ }
+ ]
+ }
+ },
+ {
+ "endPosition": "105",
+ "kind": "VARIABLE",
+ "binding": {
+ "endPosition": "76",
+ "kind": "IDENTIFIER",
+ "name": "f4",
+ "startPosition": "74"
+ },
+ "startPosition": "70",
+ "initializer": {
+ "endPosition": "102",
+ "arrow": "true",
+ "kind": "FUNCTION_EXPRESSION",
+ "name": "null",
+ "body": {
+ "leftOperand": {
+ "endPosition": "103",
+ "kind": "IDENTIFIER",
+ "name": "x",
+ "startPosition": "102"
+ },
+ "endPosition": "105",
+ "kind": "MULTIPLY",
+ "rightOperand": {
+ "endPosition": "105",
+ "kind": "IDENTIFIER",
+ "name": "y",
+ "startPosition": "104"
+ },
+ "startPosition": "102"
+ },
+ "strict": "false",
+ "startPosition": "102",
+ "parameters": [
+ {
+ "expression": {
+ "endPosition": "99",
+ "kind": "OBJECT_LITERAL",
+ "startPosition": "87",
+ "properties": [
+ {
+ "getter": "null",
+ "endPosition": "92",
+ "kind": "PROPERTY",
+ "setter": "null",
+ "value": {
+ "endPosition": "92",
+ "kind": "NUMBER_LITERAL",
+ "value": "4",
+ "startPosition": "91"
+ },
+ "startPosition": "88",
+ "key": {
+ "endPosition": "89",
+ "kind": "IDENTIFIER",
+ "name": "y",
+ "startPosition": "88"
+ }
+ },
+ {
+ "getter": "null",
+ "endPosition": "98",
+ "kind": "PROPERTY",
+ "setter": "null",
+ "value": {
+ "endPosition": "98",
+ "kind": "NUMBER_LITERAL",
+ "value": "5",
+ "startPosition": "97"
+ },
+ "startPosition": "94",
+ "key": {
+ "endPosition": "95",
+ "kind": "IDENTIFIER",
+ "name": "x",
+ "startPosition": "94"
+ }
+ }
+ ]
+ },
+ "endPosition": "99",
+ "kind": "ASSIGNMENT",
+ "variable": {
+ "endPosition": "86",
+ "kind": "OBJECT_LITERAL",
+ "startPosition": "80",
+ "properties": [
+ {
+ "getter": "null",
+ "endPosition": "82",
+ "kind": "PROPERTY",
+ "setter": "null",
+ "value": {
+ "endPosition": "82",
+ "kind": "IDENTIFIER",
+ "name": "x",
+ "startPosition": "81"
+ },
+ "startPosition": "81",
+ "key": {
+ "endPosition": "82",
+ "kind": "IDENTIFIER",
+ "name": "x",
+ "startPosition": "81"
+ }
+ },
+ {
+ "getter": "null",
+ "endPosition": "85",
+ "kind": "PROPERTY",
+ "setter": "null",
+ "value": {
+ "endPosition": "85",
+ "kind": "IDENTIFIER",
+ "name": "y",
+ "startPosition": "84"
+ },
+ "startPosition": "84",
+ "key": {
+ "endPosition": "85",
+ "kind": "IDENTIFIER",
+ "name": "y",
+ "startPosition": "84"
+ }
+ }
+ ]
+ },
+ "startPosition": "80"
+ }
+ ]
+ }
+ },
+ {
+ "endPosition": "136",
+ "kind": "VARIABLE",
+ "binding": {
+ "endPosition": "113",
+ "kind": "IDENTIFIER",
+ "name": "f5",
+ "startPosition": "111"
+ },
+ "startPosition": "107",
+ "initializer": {
+ "endPosition": "133",
+ "arrow": "true",
+ "kind": "FUNCTION_EXPRESSION",
+ "name": "null",
+ "body": {
+ "leftOperand": {
+ "endPosition": "134",
+ "kind": "IDENTIFIER",
+ "name": "x",
+ "startPosition": "133"
+ },
+ "endPosition": "136",
+ "kind": "PLUS",
+ "rightOperand": {
+ "endPosition": "136",
+ "kind": "IDENTIFIER",
+ "name": "y",
+ "startPosition": "135"
+ },
+ "startPosition": "133"
+ },
+ "strict": "false",
+ "startPosition": "133",
+ "parameters": [
+ {
+ "expression": {
+ "endPosition": "130",
+ "kind": "ARRAY_LITERAL",
+ "elements": [
+ {
+ "endPosition": "126",
+ "kind": "NUMBER_LITERAL",
+ "value": "3",
+ "startPosition": "125"
+ },
+ {
+ "endPosition": "129",
+ "kind": "NUMBER_LITERAL",
+ "value": "6",
+ "startPosition": "128"
+ }
+ ],
+ "startPosition": "124"
+ },
+ "endPosition": "130",
+ "kind": "ASSIGNMENT",
+ "variable": {
+ "endPosition": "123",
+ "kind": "ARRAY_LITERAL",
+ "elements": [
+ {
+ "endPosition": "119",
+ "kind": "IDENTIFIER",
+ "name": "x",
+ "startPosition": "118"
+ },
+ {
+ "endPosition": "122",
+ "kind": "IDENTIFIER",
+ "name": "y",
+ "startPosition": "121"
+ }
+ ],
+ "startPosition": "117"
+ },
+ "startPosition": "117"
+ }
+ ]
+ }
+ }
+]
--- a/nashorn/test/script/nosecurity/treeapi/assignment.js.EXPECTED Wed Jul 05 21:57:11 2017 +0200
+++ b/nashorn/test/script/nosecurity/treeapi/assignment.js.EXPECTED Tue Jul 12 21:18:13 2016 +0530
@@ -146,4 +146,4 @@
},
"startPosition": "61"
}
-]
+]
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/nashorn/test/script/nosecurity/treeapi/class.js Tue Jul 12 21:18:13 2016 +0530
@@ -0,0 +1,91 @@
+/*
+ * Copyright (c) 2016, 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.
+ *
+ * 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.
+ */
+
+/**
+ * Tests to check representation of ES6 class.
+ *
+ * @test
+ * @option -scripting
+ * @run
+ */
+
+load(__DIR__ + "utils.js")
+
+var code = <<EOF
+
+class Shape {
+ constructor() {
+ Shape.numShapes++;
+ }
+
+ static get numShapes() {
+ return !this.count_ ? 0 : this.count_
+ }
+
+ static set numShapes(val) {
+ this.count_ = val
+ }
+}
+
+class Circle extends Shape {
+ constructor(radius) {
+ super();
+ this.radius_ = radius
+ Circle.numCircles++
+ }
+
+ static draw(circle, canvas) {
+ // drawing code
+ }
+
+ static get numCircles() {
+ return !this.count_ ? 0 : this.count_
+ }
+
+ static set numCircles(val) {
+ this.count_ = val
+ }
+
+ area() {
+ return Math.pow(this.radius, 2) * Math.PI
+ }
+
+ get radius() {
+ return this.radius_
+ }
+
+ set radius(radius) {
+ if (!Number.isInteger(radius))
+ throw new TypeError("Circle radius is not an int");
+ this.radius_ = radius
+ }
+}
+
+EOF
+
+parse("class.js", code, "--language=es6", new (Java.extend(visitor_es6, {
+ visitClassDeclaration : function (node, obj) {
+ obj.push(convert(node))
+ }
+})))
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/nashorn/test/script/nosecurity/treeapi/class.js.EXPECTED Tue Jul 12 21:18:13 2016 +0530
@@ -0,0 +1,751 @@
+[
+ {
+ "classElements": [
+ {
+ "getter": {
+ "endPosition": "96",
+ "kind": "FUNCTION_EXPRESSION",
+ "name": "null",
+ "body": {
+ "endPosition": "143",
+ "kind": "BLOCK",
+ "statements": [
+ {
+ "expression": {
+ "condition": {
+ "expression": {
+ "identifier": "count_",
+ "expression": {
+ "endPosition": "118",
+ "kind": "IDENTIFIER",
+ "this": "true",
+ "name": "this",
+ "startPosition": "114"
+ },
+ "endPosition": "125",
+ "kind": "MEMBER_SELECT",
+ "startPosition": "114"
+ },
+ "endPosition": "125",
+ "kind": "LOGICAL_COMPLEMENT",
+ "startPosition": "113"
+ },
+ "endPosition": "143",
+ "kind": "CONDITIONAL_EXPRESSION",
+ "trueExpression": {
+ "endPosition": "129",
+ "kind": "NUMBER_LITERAL",
+ "value": "0",
+ "startPosition": "128"
+ },
+ "falseExpression": {
+ "identifier": "count_",
+ "expression": {
+ "endPosition": "136",
+ "kind": "IDENTIFIER",
+ "this": "true",
+ "name": "this",
+ "startPosition": "132"
+ },
+ "endPosition": "143",
+ "kind": "MEMBER_SELECT",
+ "startPosition": "132"
+ },
+ "startPosition": "126"
+ },
+ "endPosition": "143",
+ "kind": "RETURN",
+ "startPosition": "106"
+ }
+ ],
+ "startPosition": "96"
+ },
+ "strict": "true",
+ "startPosition": "96",
+ "parameters": []
+ },
+ "static": "true",
+ "endPosition": "149",
+ "kind": "PROPERTY",
+ "setter": {
+ "endPosition": "181",
+ "kind": "FUNCTION_EXPRESSION",
+ "name": "null",
+ "body": {
+ "endPosition": "209",
+ "kind": "BLOCK",
+ "statements": [
+ {
+ "expression": {
+ "expression": {
+ "endPosition": "209",
+ "kind": "IDENTIFIER",
+ "name": "val",
+ "startPosition": "206"
+ },
+ "endPosition": "209",
+ "kind": "ASSIGNMENT",
+ "variable": {
+ "identifier": "count_",
+ "expression": {
+ "endPosition": "196",
+ "kind": "IDENTIFIER",
+ "this": "true",
+ "name": "this",
+ "startPosition": "192"
+ },
+ "endPosition": "203",
+ "kind": "MEMBER_SELECT",
+ "startPosition": "192"
+ },
+ "startPosition": "192"
+ },
+ "endPosition": "209",
+ "kind": "EXPRESSION_STATEMENT",
+ "startPosition": "192"
+ }
+ ],
+ "startPosition": "181"
+ },
+ "strict": "true",
+ "startPosition": "181",
+ "parameters": [
+ {
+ "endPosition": "179",
+ "kind": "IDENTIFIER",
+ "name": "val",
+ "startPosition": "176"
+ }
+ ]
+ },
+ "value": "null",
+ "startPosition": "80",
+ "key": {
+ "endPosition": "93",
+ "kind": "IDENTIFIER",
+ "name": "numShapes",
+ "startPosition": "84"
+ }
+ }
+ ],
+ "endPosition": "12",
+ "kind": "CLASS",
+ "classHeritage": "null",
+ "name": {
+ "endPosition": "12",
+ "kind": "IDENTIFIER",
+ "name": "Shape",
+ "startPosition": "7"
+ },
+ "constructor": {
+ "getter": "null",
+ "endPosition": "67",
+ "kind": "PROPERTY",
+ "setter": "null",
+ "value": {
+ "endPosition": "33",
+ "kind": "FUNCTION_EXPRESSION",
+ "name": {
+ "endPosition": "30",
+ "kind": "IDENTIFIER",
+ "name": "constructor",
+ "startPosition": "19"
+ },
+ "body": {
+ "endPosition": "61",
+ "kind": "BLOCK",
+ "statements": [
+ {
+ "expression": {
+ "expression": {
+ "identifier": "numShapes",
+ "expression": {
+ "endPosition": "48",
+ "kind": "IDENTIFIER",
+ "name": "Shape",
+ "startPosition": "43"
+ },
+ "endPosition": "58",
+ "kind": "MEMBER_SELECT",
+ "startPosition": "43"
+ },
+ "endPosition": "60",
+ "kind": "POSTFIX_INCREMENT",
+ "startPosition": "43"
+ },
+ "endPosition": "60",
+ "kind": "EXPRESSION_STATEMENT",
+ "startPosition": "43"
+ }
+ ],
+ "startPosition": "33"
+ },
+ "strict": "true",
+ "startPosition": "33",
+ "parameters": []
+ },
+ "startPosition": "19",
+ "key": {
+ "endPosition": "30",
+ "kind": "IDENTIFIER",
+ "name": "constructor",
+ "startPosition": "19"
+ }
+ },
+ "startPosition": "1"
+ },
+ {
+ "classElements": [
+ {
+ "getter": "null",
+ "static": "true",
+ "endPosition": "419",
+ "kind": "PROPERTY",
+ "setter": "null",
+ "value": {
+ "endPosition": "388",
+ "kind": "FUNCTION_EXPRESSION",
+ "name": {
+ "endPosition": "371",
+ "kind": "IDENTIFIER",
+ "name": "draw",
+ "startPosition": "367"
+ },
+ "body": {
+ "endPosition": "389",
+ "kind": "BLOCK",
+ "statements": [],
+ "startPosition": "388"
+ },
+ "strict": "true",
+ "startPosition": "388",
+ "parameters": [
+ {
+ "endPosition": "378",
+ "kind": "IDENTIFIER",
+ "name": "circle",
+ "startPosition": "372"
+ },
+ {
+ "endPosition": "386",
+ "kind": "IDENTIFIER",
+ "name": "canvas",
+ "startPosition": "380"
+ }
+ ]
+ },
+ "startPosition": "367",
+ "key": {
+ "endPosition": "371",
+ "kind": "IDENTIFIER",
+ "name": "draw",
+ "startPosition": "367"
+ }
+ },
+ {
+ "getter": {
+ "endPosition": "449",
+ "kind": "FUNCTION_EXPRESSION",
+ "name": "null",
+ "body": {
+ "endPosition": "496",
+ "kind": "BLOCK",
+ "statements": [
+ {
+ "expression": {
+ "condition": {
+ "expression": {
+ "identifier": "count_",
+ "expression": {
+ "endPosition": "471",
+ "kind": "IDENTIFIER",
+ "this": "true",
+ "name": "this",
+ "startPosition": "467"
+ },
+ "endPosition": "478",
+ "kind": "MEMBER_SELECT",
+ "startPosition": "467"
+ },
+ "endPosition": "478",
+ "kind": "LOGICAL_COMPLEMENT",
+ "startPosition": "466"
+ },
+ "endPosition": "496",
+ "kind": "CONDITIONAL_EXPRESSION",
+ "trueExpression": {
+ "endPosition": "482",
+ "kind": "NUMBER_LITERAL",
+ "value": "0",
+ "startPosition": "481"
+ },
+ "falseExpression": {
+ "identifier": "count_",
+ "expression": {
+ "endPosition": "489",
+ "kind": "IDENTIFIER",
+ "this": "true",
+ "name": "this",
+ "startPosition": "485"
+ },
+ "endPosition": "496",
+ "kind": "MEMBER_SELECT",
+ "startPosition": "485"
+ },
+ "startPosition": "479"
+ },
+ "endPosition": "496",
+ "kind": "RETURN",
+ "startPosition": "459"
+ }
+ ],
+ "startPosition": "449"
+ },
+ "strict": "true",
+ "startPosition": "449",
+ "parameters": []
+ },
+ "static": "true",
+ "endPosition": "502",
+ "kind": "PROPERTY",
+ "setter": {
+ "endPosition": "535",
+ "kind": "FUNCTION_EXPRESSION",
+ "name": "null",
+ "body": {
+ "endPosition": "563",
+ "kind": "BLOCK",
+ "statements": [
+ {
+ "expression": {
+ "expression": {
+ "endPosition": "563",
+ "kind": "IDENTIFIER",
+ "name": "val",
+ "startPosition": "560"
+ },
+ "endPosition": "563",
+ "kind": "ASSIGNMENT",
+ "variable": {
+ "identifier": "count_",
+ "expression": {
+ "endPosition": "550",
+ "kind": "IDENTIFIER",
+ "this": "true",
+ "name": "this",
+ "startPosition": "546"
+ },
+ "endPosition": "557",
+ "kind": "MEMBER_SELECT",
+ "startPosition": "546"
+ },
+ "startPosition": "546"
+ },
+ "endPosition": "563",
+ "kind": "EXPRESSION_STATEMENT",
+ "startPosition": "546"
+ }
+ ],
+ "startPosition": "535"
+ },
+ "strict": "true",
+ "startPosition": "535",
+ "parameters": [
+ {
+ "endPosition": "533",
+ "kind": "IDENTIFIER",
+ "name": "val",
+ "startPosition": "530"
+ }
+ ]
+ },
+ "value": "null",
+ "startPosition": "432",
+ "key": {
+ "endPosition": "446",
+ "kind": "IDENTIFIER",
+ "name": "numCircles",
+ "startPosition": "436"
+ }
+ },
+ {
+ "getter": "null",
+ "endPosition": "639",
+ "kind": "PROPERTY",
+ "setter": "null",
+ "value": {
+ "endPosition": "582",
+ "kind": "FUNCTION_EXPRESSION",
+ "name": {
+ "endPosition": "579",
+ "kind": "IDENTIFIER",
+ "name": "area",
+ "startPosition": "575"
+ },
+ "body": {
+ "endPosition": "633",
+ "kind": "BLOCK",
+ "statements": [
+ {
+ "expression": {
+ "leftOperand": {
+ "endPosition": "623",
+ "kind": "FUNCTION_INVOCATION",
+ "functionSelect": {
+ "identifier": "pow",
+ "expression": {
+ "endPosition": "603",
+ "kind": "IDENTIFIER",
+ "name": "Math",
+ "startPosition": "599"
+ },
+ "endPosition": "607",
+ "kind": "MEMBER_SELECT",
+ "startPosition": "599"
+ },
+ "arguments": [
+ {
+ "identifier": "radius",
+ "expression": {
+ "endPosition": "612",
+ "kind": "IDENTIFIER",
+ "this": "true",
+ "name": "this",
+ "startPosition": "608"
+ },
+ "endPosition": "619",
+ "kind": "MEMBER_SELECT",
+ "startPosition": "608"
+ },
+ {
+ "endPosition": "622",
+ "kind": "NUMBER_LITERAL",
+ "value": "2",
+ "startPosition": "621"
+ }
+ ],
+ "startPosition": "599"
+ },
+ "endPosition": "633",
+ "kind": "MULTIPLY",
+ "rightOperand": {
+ "identifier": "PI",
+ "expression": {
+ "endPosition": "630",
+ "kind": "IDENTIFIER",
+ "name": "Math",
+ "startPosition": "626"
+ },
+ "endPosition": "633",
+ "kind": "MEMBER_SELECT",
+ "startPosition": "626"
+ },
+ "startPosition": "599"
+ },
+ "endPosition": "633",
+ "kind": "RETURN",
+ "startPosition": "592"
+ }
+ ],
+ "startPosition": "582"
+ },
+ "strict": "true",
+ "startPosition": "582",
+ "parameters": []
+ },
+ "startPosition": "575",
+ "key": {
+ "endPosition": "579",
+ "kind": "IDENTIFIER",
+ "name": "area",
+ "startPosition": "575"
+ }
+ },
+ {
+ "getter": {
+ "endPosition": "658",
+ "kind": "FUNCTION_EXPRESSION",
+ "name": "null",
+ "body": {
+ "endPosition": "687",
+ "kind": "BLOCK",
+ "statements": [
+ {
+ "expression": {
+ "identifier": "radius_",
+ "expression": {
+ "endPosition": "679",
+ "kind": "IDENTIFIER",
+ "this": "true",
+ "name": "this",
+ "startPosition": "675"
+ },
+ "endPosition": "687",
+ "kind": "MEMBER_SELECT",
+ "startPosition": "675"
+ },
+ "endPosition": "687",
+ "kind": "RETURN",
+ "startPosition": "668"
+ }
+ ],
+ "startPosition": "658"
+ },
+ "strict": "true",
+ "startPosition": "658",
+ "parameters": []
+ },
+ "endPosition": "693",
+ "kind": "PROPERTY",
+ "setter": {
+ "endPosition": "718",
+ "kind": "FUNCTION_EXPRESSION",
+ "name": "null",
+ "body": {
+ "endPosition": "852",
+ "kind": "BLOCK",
+ "statements": [
+ {
+ "condition": {
+ "expression": {
+ "endPosition": "757",
+ "kind": "FUNCTION_INVOCATION",
+ "functionSelect": {
+ "identifier": "isInteger",
+ "expression": {
+ "endPosition": "739",
+ "kind": "IDENTIFIER",
+ "name": "Number",
+ "startPosition": "733"
+ },
+ "endPosition": "749",
+ "kind": "MEMBER_SELECT",
+ "startPosition": "733"
+ },
+ "arguments": [
+ {
+ "endPosition": "756",
+ "kind": "IDENTIFIER",
+ "name": "radius",
+ "startPosition": "750"
+ }
+ ],
+ "startPosition": "733"
+ },
+ "endPosition": "757",
+ "kind": "LOGICAL_COMPLEMENT",
+ "startPosition": "732"
+ },
+ "elseStatement": "null",
+ "endPosition": "822",
+ "kind": "IF",
+ "startPosition": "728",
+ "thenStatement": {
+ "expression": {
+ "constructorExpression": {
+ "endPosition": "821",
+ "kind": "FUNCTION_INVOCATION",
+ "functionSelect": {
+ "endPosition": "790",
+ "kind": "IDENTIFIER",
+ "name": "TypeError",
+ "startPosition": "781"
+ },
+ "arguments": [
+ {
+ "endPosition": "819",
+ "kind": "STRING_LITERAL",
+ "value": "Circle radius is not an int",
+ "startPosition": "792"
+ }
+ ],
+ "startPosition": "781"
+ },
+ "endPosition": "821",
+ "kind": "NEW",
+ "startPosition": "777"
+ },
+ "endPosition": "822",
+ "kind": "THROW",
+ "startPosition": "771"
+ }
+ },
+ {
+ "expression": {
+ "expression": {
+ "endPosition": "852",
+ "kind": "IDENTIFIER",
+ "name": "radius",
+ "startPosition": "846"
+ },
+ "endPosition": "852",
+ "kind": "ASSIGNMENT",
+ "variable": {
+ "identifier": "radius_",
+ "expression": {
+ "endPosition": "835",
+ "kind": "IDENTIFIER",
+ "this": "true",
+ "name": "this",
+ "startPosition": "831"
+ },
+ "endPosition": "843",
+ "kind": "MEMBER_SELECT",
+ "startPosition": "831"
+ },
+ "startPosition": "831"
+ },
+ "endPosition": "852",
+ "kind": "EXPRESSION_STATEMENT",
+ "startPosition": "831"
+ }
+ ],
+ "startPosition": "718"
+ },
+ "strict": "true",
+ "startPosition": "718",
+ "parameters": [
+ {
+ "endPosition": "716",
+ "kind": "IDENTIFIER",
+ "name": "radius",
+ "startPosition": "710"
+ }
+ ]
+ },
+ "value": "null",
+ "startPosition": "645",
+ "key": {
+ "endPosition": "655",
+ "kind": "IDENTIFIER",
+ "name": "radius",
+ "startPosition": "649"
+ }
+ }
+ ],
+ "endPosition": "231",
+ "kind": "CLASS",
+ "classHeritage": {
+ "endPosition": "245",
+ "kind": "IDENTIFIER",
+ "name": "Shape",
+ "startPosition": "240"
+ },
+ "name": {
+ "endPosition": "231",
+ "kind": "IDENTIFIER",
+ "name": "Circle",
+ "startPosition": "225"
+ },
+ "constructor": {
+ "getter": "null",
+ "endPosition": "354",
+ "kind": "PROPERTY",
+ "setter": "null",
+ "value": {
+ "endPosition": "272",
+ "kind": "FUNCTION_EXPRESSION",
+ "name": {
+ "endPosition": "263",
+ "kind": "IDENTIFIER",
+ "name": "constructor",
+ "startPosition": "252"
+ },
+ "body": {
+ "endPosition": "348",
+ "kind": "BLOCK",
+ "statements": [
+ {
+ "expression": {
+ "endPosition": "289",
+ "kind": "FUNCTION_INVOCATION",
+ "functionSelect": {
+ "super": "true",
+ "endPosition": "287",
+ "kind": "IDENTIFIER",
+ "name": "super",
+ "startPosition": "282"
+ },
+ "arguments": [],
+ "startPosition": "282"
+ },
+ "endPosition": "289",
+ "kind": "EXPRESSION_STATEMENT",
+ "startPosition": "282"
+ },
+ {
+ "expression": {
+ "expression": {
+ "endPosition": "320",
+ "kind": "IDENTIFIER",
+ "name": "radius",
+ "startPosition": "314"
+ },
+ "endPosition": "320",
+ "kind": "ASSIGNMENT",
+ "variable": {
+ "identifier": "radius_",
+ "expression": {
+ "endPosition": "303",
+ "kind": "IDENTIFIER",
+ "this": "true",
+ "name": "this",
+ "startPosition": "299"
+ },
+ "endPosition": "311",
+ "kind": "MEMBER_SELECT",
+ "startPosition": "299"
+ },
+ "startPosition": "299"
+ },
+ "endPosition": "320",
+ "kind": "EXPRESSION_STATEMENT",
+ "startPosition": "299"
+ },
+ {
+ "expression": {
+ "expression": {
+ "identifier": "numCircles",
+ "expression": {
+ "endPosition": "335",
+ "kind": "IDENTIFIER",
+ "name": "Circle",
+ "startPosition": "329"
+ },
+ "endPosition": "346",
+ "kind": "MEMBER_SELECT",
+ "startPosition": "329"
+ },
+ "endPosition": "348",
+ "kind": "POSTFIX_INCREMENT",
+ "startPosition": "329"
+ },
+ "endPosition": "348",
+ "kind": "EXPRESSION_STATEMENT",
+ "startPosition": "329"
+ }
+ ],
+ "startPosition": "272"
+ },
+ "strict": "true",
+ "startPosition": "272",
+ "parameters": [
+ {
+ "endPosition": "270",
+ "kind": "IDENTIFIER",
+ "name": "radius",
+ "startPosition": "264"
+ }
+ ]
+ },
+ "startPosition": "252",
+ "key": {
+ "endPosition": "263",
+ "kind": "IDENTIFIER",
+ "name": "constructor",
+ "startPosition": "252"
+ }
+ },
+ "startPosition": "219"
+ }
+]
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/nashorn/test/script/nosecurity/treeapi/const.js Tue Jul 12 21:18:13 2016 +0530
@@ -0,0 +1,45 @@
+/*
+ * Copyright (c) 2016, 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.
+ *
+ * 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.
+ */
+
+/**
+ * Tests to check representation of ES6 consts.
+ *
+ * @test
+ * @option -scripting
+ * @run
+ */
+
+load(__DIR__ + "utils.js")
+
+var code = <<EOF
+
+const PI = 3.14;
+
+EOF
+
+parse("generator.js", code, "--language=es6", new (Java.extend(visitor_es6, {
+ visitVariable : function (node, obj) {
+ obj.push(convert(node))
+ }
+})))
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/nashorn/test/script/nosecurity/treeapi/const.js.EXPECTED Tue Jul 12 21:18:13 2016 +0530
@@ -0,0 +1,20 @@
+[
+ {
+ "const": "true",
+ "endPosition": "16",
+ "kind": "VARIABLE",
+ "binding": {
+ "endPosition": "9",
+ "kind": "IDENTIFIER",
+ "name": "PI",
+ "startPosition": "7"
+ },
+ "startPosition": "1",
+ "initializer": {
+ "endPosition": "16",
+ "kind": "NUMBER_LITERAL",
+ "value": "3.14",
+ "startPosition": "12"
+ }
+ }
+]
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/nashorn/test/script/nosecurity/treeapi/defaultparams.js Tue Jul 12 21:18:13 2016 +0530
@@ -0,0 +1,52 @@
+/*
+ * Copyright (c) 2016, 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.
+ *
+ * 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.
+ */
+
+/**
+ * Tests to check representation of ES6 default parameters.
+ *
+ * @test
+ * @option -scripting
+ * @run
+ */
+
+load(__DIR__ + "utils.js")
+
+var code = <<EOF
+
+function func(x = 3, y) {
+ return x + y;
+}
+
+var f = function (x = 4, y = 5) { return x * y }
+
+EOF
+
+parse("defaultparams.js", code, "--language=es6", new (Java.extend(visitor_es6, {
+ visitFunctionDeclaration : function (node, obj) {
+ obj.push(convert(node))
+ },
+ visitVariable : function (node, obj) {
+ obj.push(convert(node))
+ }
+})))
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/nashorn/test/script/nosecurity/treeapi/defaultparams.js.EXPECTED Tue Jul 12 21:18:13 2016 +0530
@@ -0,0 +1,151 @@
+[
+ {
+ "endPosition": "46",
+ "kind": "FUNCTION",
+ "name": {
+ "endPosition": "14",
+ "kind": "IDENTIFIER",
+ "name": "func",
+ "startPosition": "10"
+ },
+ "body": {
+ "endPosition": "44",
+ "kind": "BLOCK",
+ "statements": [
+ {
+ "expression": {
+ "leftOperand": {
+ "endPosition": "39",
+ "kind": "IDENTIFIER",
+ "name": "x",
+ "startPosition": "38"
+ },
+ "endPosition": "43",
+ "kind": "PLUS",
+ "rightOperand": {
+ "endPosition": "43",
+ "kind": "IDENTIFIER",
+ "name": "y",
+ "startPosition": "42"
+ },
+ "startPosition": "38"
+ },
+ "endPosition": "44",
+ "kind": "RETURN",
+ "startPosition": "31"
+ }
+ ],
+ "startPosition": "25"
+ },
+ "strict": "false",
+ "startPosition": "1",
+ "parameters": [
+ {
+ "expression": {
+ "endPosition": "20",
+ "kind": "NUMBER_LITERAL",
+ "value": "3",
+ "startPosition": "19"
+ },
+ "endPosition": "20",
+ "kind": "ASSIGNMENT",
+ "variable": {
+ "endPosition": "16",
+ "kind": "IDENTIFIER",
+ "name": "x",
+ "startPosition": "15"
+ },
+ "startPosition": "15"
+ },
+ {
+ "endPosition": "23",
+ "kind": "IDENTIFIER",
+ "name": "y",
+ "startPosition": "22"
+ }
+ ]
+ },
+ {
+ "endPosition": "96",
+ "kind": "VARIABLE",
+ "binding": {
+ "endPosition": "53",
+ "kind": "IDENTIFIER",
+ "name": "f",
+ "startPosition": "52"
+ },
+ "startPosition": "48",
+ "initializer": {
+ "endPosition": "80",
+ "kind": "FUNCTION_EXPRESSION",
+ "name": "null",
+ "body": {
+ "endPosition": "94",
+ "kind": "BLOCK",
+ "statements": [
+ {
+ "expression": {
+ "leftOperand": {
+ "endPosition": "90",
+ "kind": "IDENTIFIER",
+ "name": "x",
+ "startPosition": "89"
+ },
+ "endPosition": "94",
+ "kind": "MULTIPLY",
+ "rightOperand": {
+ "endPosition": "94",
+ "kind": "IDENTIFIER",
+ "name": "y",
+ "startPosition": "93"
+ },
+ "startPosition": "89"
+ },
+ "endPosition": "94",
+ "kind": "RETURN",
+ "startPosition": "82"
+ }
+ ],
+ "startPosition": "80"
+ },
+ "strict": "false",
+ "startPosition": "80",
+ "parameters": [
+ {
+ "expression": {
+ "endPosition": "71",
+ "kind": "NUMBER_LITERAL",
+ "value": "4",
+ "startPosition": "70"
+ },
+ "endPosition": "71",
+ "kind": "ASSIGNMENT",
+ "variable": {
+ "endPosition": "67",
+ "kind": "IDENTIFIER",
+ "name": "x",
+ "startPosition": "66"
+ },
+ "startPosition": "66"
+ },
+ {
+ "expression": {
+ "endPosition": "78",
+ "kind": "NUMBER_LITERAL",
+ "value": "5",
+ "startPosition": "77"
+ },
+ "endPosition": "78",
+ "kind": "ASSIGNMENT",
+ "variable": {
+ "endPosition": "74",
+ "kind": "IDENTIFIER",
+ "name": "y",
+ "startPosition": "73"
+ },
+ "startPosition": "73"
+ }
+ ]
+ }
+ }
+]
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/nashorn/test/script/nosecurity/treeapi/destructuring_assign.js Tue Jul 12 21:18:13 2016 +0530
@@ -0,0 +1,50 @@
+/*
+ * Copyright (c) 2016, 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.
+ *
+ * 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.
+ */
+
+/**
+ * Tests to check representation of ES6 destructuring assignments.
+ *
+ * @test
+ * @option -scripting
+ * @run
+ */
+
+load(__DIR__ + "utils.js")
+
+var code = <<EOF
+
+var a, b;
+[a, b] = [1, 2];
+({a, b} = {a:11, b:12});
+
+EOF
+
+parse("destructuring_assign.js", code, "--language=es6", new (Java.extend(visitor_es6, {
+ visitAssignment : function (node, obj) {
+ obj.push(convert(node))
+ },
+ visitVariable : function (node, obj) {
+ obj.push(convert(node))
+ }
+})))
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/nashorn/test/script/nosecurity/treeapi/destructuring_assign.js.EXPECTED Tue Jul 12 21:18:13 2016 +0530
@@ -0,0 +1,164 @@
+[
+ {
+ "endPosition": "6",
+ "kind": "VARIABLE",
+ "binding": {
+ "endPosition": "6",
+ "kind": "IDENTIFIER",
+ "name": "a",
+ "startPosition": "5"
+ },
+ "startPosition": "1",
+ "initializer": "null"
+ },
+ {
+ "endPosition": "9",
+ "kind": "VARIABLE",
+ "binding": {
+ "endPosition": "9",
+ "kind": "IDENTIFIER",
+ "name": "b",
+ "startPosition": "8"
+ },
+ "startPosition": "1",
+ "initializer": "null"
+ },
+ {
+ "expression": {
+ "endPosition": "26",
+ "kind": "ARRAY_LITERAL",
+ "elements": [
+ {
+ "endPosition": "22",
+ "kind": "NUMBER_LITERAL",
+ "value": "1",
+ "startPosition": "21"
+ },
+ {
+ "endPosition": "25",
+ "kind": "NUMBER_LITERAL",
+ "value": "2",
+ "startPosition": "24"
+ }
+ ],
+ "startPosition": "20"
+ },
+ "endPosition": "26",
+ "kind": "ASSIGNMENT",
+ "variable": {
+ "endPosition": "17",
+ "kind": "ARRAY_LITERAL",
+ "elements": [
+ {
+ "endPosition": "13",
+ "kind": "IDENTIFIER",
+ "name": "a",
+ "startPosition": "12"
+ },
+ {
+ "endPosition": "16",
+ "kind": "IDENTIFIER",
+ "name": "b",
+ "startPosition": "15"
+ }
+ ],
+ "startPosition": "11"
+ },
+ "startPosition": "11"
+ },
+ {
+ "expression": {
+ "endPosition": "50",
+ "kind": "OBJECT_LITERAL",
+ "startPosition": "38",
+ "properties": [
+ {
+ "getter": "null",
+ "endPosition": "43",
+ "kind": "PROPERTY",
+ "setter": "null",
+ "value": {
+ "endPosition": "43",
+ "kind": "NUMBER_LITERAL",
+ "value": "11",
+ "startPosition": "41"
+ },
+ "startPosition": "39",
+ "key": {
+ "endPosition": "40",
+ "kind": "IDENTIFIER",
+ "name": "a",
+ "startPosition": "39"
+ }
+ },
+ {
+ "getter": "null",
+ "endPosition": "49",
+ "kind": "PROPERTY",
+ "setter": "null",
+ "value": {
+ "endPosition": "49",
+ "kind": "NUMBER_LITERAL",
+ "value": "12",
+ "startPosition": "47"
+ },
+ "startPosition": "45",
+ "key": {
+ "endPosition": "46",
+ "kind": "IDENTIFIER",
+ "name": "b",
+ "startPosition": "45"
+ }
+ }
+ ]
+ },
+ "endPosition": "50",
+ "kind": "ASSIGNMENT",
+ "variable": {
+ "endPosition": "35",
+ "kind": "OBJECT_LITERAL",
+ "startPosition": "29",
+ "properties": [
+ {
+ "getter": "null",
+ "endPosition": "31",
+ "kind": "PROPERTY",
+ "setter": "null",
+ "value": {
+ "endPosition": "31",
+ "kind": "IDENTIFIER",
+ "name": "a",
+ "startPosition": "30"
+ },
+ "startPosition": "30",
+ "key": {
+ "endPosition": "31",
+ "kind": "IDENTIFIER",
+ "name": "a",
+ "startPosition": "30"
+ }
+ },
+ {
+ "getter": "null",
+ "endPosition": "34",
+ "kind": "PROPERTY",
+ "setter": "null",
+ "value": {
+ "endPosition": "34",
+ "kind": "IDENTIFIER",
+ "name": "b",
+ "startPosition": "33"
+ },
+ "startPosition": "33",
+ "key": {
+ "endPosition": "34",
+ "kind": "IDENTIFIER",
+ "name": "b",
+ "startPosition": "33"
+ }
+ }
+ ]
+ },
+ "startPosition": "29"
+ }
+]
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/nashorn/test/script/nosecurity/treeapi/destructuring_decl.js Tue Jul 12 21:18:13 2016 +0530
@@ -0,0 +1,49 @@
+/*
+ * Copyright (c) 2016, 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.
+ *
+ * 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.
+ */
+
+/**
+ * Tests to check representation of ES6 destructuring initializatons, assignemts.
+ *
+ * @test
+ * @option -scripting
+ * @run
+ */
+
+load(__DIR__ + "utils.js")
+
+var code = <<EOF
+
+var [a, b] = [1, 2];
+
+var { x, y } = obj;
+EOF
+
+parse("destructuring_assign.js", code, "--language=es6", new (Java.extend(visitor_es6, {
+ visitAssignment : function (node, obj) {
+ obj.push(convert(node))
+ },
+ visitVariable : function (node, obj) {
+ obj.push(convert(node))
+ }
+})))
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/nashorn/test/script/nosecurity/treeapi/destructuring_decl.js.EXPECTED Tue Jul 12 21:18:13 2016 +0530
@@ -0,0 +1,101 @@
+[
+ {
+ "endPosition": "20",
+ "kind": "VARIABLE",
+ "binding": {
+ "endPosition": "11",
+ "kind": "ARRAY_LITERAL",
+ "elements": [
+ {
+ "endPosition": "7",
+ "kind": "IDENTIFIER",
+ "name": "a",
+ "startPosition": "6"
+ },
+ {
+ "endPosition": "10",
+ "kind": "IDENTIFIER",
+ "name": "b",
+ "startPosition": "9"
+ }
+ ],
+ "startPosition": "5"
+ },
+ "startPosition": "1",
+ "initializer": {
+ "endPosition": "20",
+ "kind": "ARRAY_LITERAL",
+ "elements": [
+ {
+ "endPosition": "16",
+ "kind": "NUMBER_LITERAL",
+ "value": "1",
+ "startPosition": "15"
+ },
+ {
+ "endPosition": "19",
+ "kind": "NUMBER_LITERAL",
+ "value": "2",
+ "startPosition": "18"
+ }
+ ],
+ "startPosition": "14"
+ }
+ },
+ {
+ "endPosition": "41",
+ "kind": "VARIABLE",
+ "binding": {
+ "endPosition": "35",
+ "kind": "OBJECT_LITERAL",
+ "startPosition": "27",
+ "properties": [
+ {
+ "getter": "null",
+ "endPosition": "30",
+ "kind": "PROPERTY",
+ "setter": "null",
+ "value": {
+ "endPosition": "30",
+ "kind": "IDENTIFIER",
+ "name": "x",
+ "startPosition": "29"
+ },
+ "startPosition": "29",
+ "key": {
+ "endPosition": "30",
+ "kind": "IDENTIFIER",
+ "name": "x",
+ "startPosition": "29"
+ }
+ },
+ {
+ "getter": "null",
+ "endPosition": "33",
+ "kind": "PROPERTY",
+ "setter": "null",
+ "value": {
+ "endPosition": "33",
+ "kind": "IDENTIFIER",
+ "name": "y",
+ "startPosition": "32"
+ },
+ "startPosition": "32",
+ "key": {
+ "endPosition": "33",
+ "kind": "IDENTIFIER",
+ "name": "y",
+ "startPosition": "32"
+ }
+ }
+ ]
+ },
+ "startPosition": "23",
+ "initializer": {
+ "endPosition": "41",
+ "kind": "IDENTIFIER",
+ "name": "obj",
+ "startPosition": "38"
+ }
+ }
+]
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/nashorn/test/script/nosecurity/treeapi/destructuring_params.js Tue Jul 12 21:18:13 2016 +0530
@@ -0,0 +1,53 @@
+/*
+ * Copyright (c) 2016, 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.
+ *
+ * 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.
+ */
+
+/**
+ * Tests to check representation of ES6 default parameters.
+ *
+ * @test
+ * @option -scripting
+ * @run
+ */
+
+load(__DIR__ + "utils.js")
+
+var code = <<EOF
+
+function func({x, y}) {
+}
+
+var f = function({a, b}) { }
+
+function x({x, y} = { x: 44, y: 45 }) {}
+
+EOF
+
+parse("destructuring_params.js", code, "--language=es6", new (Java.extend(visitor_es6, {
+ visitFunctionDeclaration : function (node, obj) {
+ obj.push(convert(node))
+ },
+ visitVariable : function (node, obj) {
+ obj.push(convert(node))
+ }
+})))
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/nashorn/test/script/nosecurity/treeapi/destructuring_params.js.EXPECTED Tue Jul 12 21:18:13 2016 +0530
@@ -0,0 +1,253 @@
+[
+ {
+ "endPosition": "26",
+ "kind": "FUNCTION",
+ "name": {
+ "endPosition": "14",
+ "kind": "IDENTIFIER",
+ "name": "func",
+ "startPosition": "10"
+ },
+ "body": {
+ "endPosition": "24",
+ "kind": "BLOCK",
+ "statements": [],
+ "startPosition": "23"
+ },
+ "strict": "false",
+ "startPosition": "1",
+ "parameters": [
+ {
+ "endPosition": "21",
+ "kind": "OBJECT_LITERAL",
+ "startPosition": "15",
+ "properties": [
+ {
+ "getter": "null",
+ "endPosition": "17",
+ "kind": "PROPERTY",
+ "setter": "null",
+ "value": {
+ "endPosition": "17",
+ "kind": "IDENTIFIER",
+ "name": "x",
+ "startPosition": "16"
+ },
+ "startPosition": "16",
+ "key": {
+ "endPosition": "17",
+ "kind": "IDENTIFIER",
+ "name": "x",
+ "startPosition": "16"
+ }
+ },
+ {
+ "getter": "null",
+ "endPosition": "20",
+ "kind": "PROPERTY",
+ "setter": "null",
+ "value": {
+ "endPosition": "20",
+ "kind": "IDENTIFIER",
+ "name": "y",
+ "startPosition": "19"
+ },
+ "startPosition": "19",
+ "key": {
+ "endPosition": "20",
+ "kind": "IDENTIFIER",
+ "name": "y",
+ "startPosition": "19"
+ }
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "endPosition": "56",
+ "kind": "VARIABLE",
+ "binding": {
+ "endPosition": "33",
+ "kind": "IDENTIFIER",
+ "name": "f",
+ "startPosition": "32"
+ },
+ "startPosition": "28",
+ "initializer": {
+ "endPosition": "53",
+ "kind": "FUNCTION_EXPRESSION",
+ "name": "null",
+ "body": {
+ "endPosition": "54",
+ "kind": "BLOCK",
+ "statements": [],
+ "startPosition": "53"
+ },
+ "strict": "false",
+ "startPosition": "53",
+ "parameters": [
+ {
+ "endPosition": "51",
+ "kind": "OBJECT_LITERAL",
+ "startPosition": "45",
+ "properties": [
+ {
+ "getter": "null",
+ "endPosition": "47",
+ "kind": "PROPERTY",
+ "setter": "null",
+ "value": {
+ "endPosition": "47",
+ "kind": "IDENTIFIER",
+ "name": "a",
+ "startPosition": "46"
+ },
+ "startPosition": "46",
+ "key": {
+ "endPosition": "47",
+ "kind": "IDENTIFIER",
+ "name": "a",
+ "startPosition": "46"
+ }
+ },
+ {
+ "getter": "null",
+ "endPosition": "50",
+ "kind": "PROPERTY",
+ "setter": "null",
+ "value": {
+ "endPosition": "50",
+ "kind": "IDENTIFIER",
+ "name": "b",
+ "startPosition": "49"
+ },
+ "startPosition": "49",
+ "key": {
+ "endPosition": "50",
+ "kind": "IDENTIFIER",
+ "name": "b",
+ "startPosition": "49"
+ }
+ }
+ ]
+ }
+ ]
+ }
+ },
+ {
+ "endPosition": "98",
+ "kind": "FUNCTION",
+ "name": {
+ "endPosition": "68",
+ "kind": "IDENTIFIER",
+ "name": "x",
+ "startPosition": "67"
+ },
+ "body": {
+ "endPosition": "97",
+ "kind": "BLOCK",
+ "statements": [],
+ "startPosition": "96"
+ },
+ "strict": "false",
+ "startPosition": "58",
+ "parameters": [
+ {
+ "expression": {
+ "endPosition": "94",
+ "kind": "OBJECT_LITERAL",
+ "startPosition": "78",
+ "properties": [
+ {
+ "getter": "null",
+ "endPosition": "85",
+ "kind": "PROPERTY",
+ "setter": "null",
+ "value": {
+ "endPosition": "85",
+ "kind": "NUMBER_LITERAL",
+ "value": "44",
+ "startPosition": "83"
+ },
+ "startPosition": "80",
+ "key": {
+ "endPosition": "81",
+ "kind": "IDENTIFIER",
+ "name": "x",
+ "startPosition": "80"
+ }
+ },
+ {
+ "getter": "null",
+ "endPosition": "92",
+ "kind": "PROPERTY",
+ "setter": "null",
+ "value": {
+ "endPosition": "92",
+ "kind": "NUMBER_LITERAL",
+ "value": "45",
+ "startPosition": "90"
+ },
+ "startPosition": "87",
+ "key": {
+ "endPosition": "88",
+ "kind": "IDENTIFIER",
+ "name": "y",
+ "startPosition": "87"
+ }
+ }
+ ]
+ },
+ "endPosition": "94",
+ "kind": "ASSIGNMENT",
+ "variable": {
+ "endPosition": "75",
+ "kind": "OBJECT_LITERAL",
+ "startPosition": "69",
+ "properties": [
+ {
+ "getter": "null",
+ "endPosition": "71",
+ "kind": "PROPERTY",
+ "setter": "null",
+ "value": {
+ "endPosition": "71",
+ "kind": "IDENTIFIER",
+ "name": "x",
+ "startPosition": "70"
+ },
+ "startPosition": "70",
+ "key": {
+ "endPosition": "71",
+ "kind": "IDENTIFIER",
+ "name": "x",
+ "startPosition": "70"
+ }
+ },
+ {
+ "getter": "null",
+ "endPosition": "74",
+ "kind": "PROPERTY",
+ "setter": "null",
+ "value": {
+ "endPosition": "74",
+ "kind": "IDENTIFIER",
+ "name": "y",
+ "startPosition": "73"
+ },
+ "startPosition": "73",
+ "key": {
+ "endPosition": "74",
+ "kind": "IDENTIFIER",
+ "name": "y",
+ "startPosition": "73"
+ }
+ }
+ ]
+ },
+ "startPosition": "69"
+ }
+ ]
+ }
+]
--- a/nashorn/test/script/nosecurity/treeapi/functionCall.js.EXPECTED Wed Jul 05 21:57:11 2017 +0200
+++ b/nashorn/test/script/nosecurity/treeapi/functionCall.js.EXPECTED Tue Jul 12 21:18:13 2016 +0530
@@ -252,4 +252,4 @@
],
"startPosition": "139"
}
-]
+]
--- a/nashorn/test/script/nosecurity/treeapi/functionDeclaration.js.EXPECTED Wed Jul 05 21:57:11 2017 +0200
+++ b/nashorn/test/script/nosecurity/treeapi/functionDeclaration.js.EXPECTED Tue Jul 12 21:18:13 2016 +0530
@@ -2,7 +2,12 @@
{
"endPosition": "17",
"kind": "FUNCTION",
- "name": "a",
+ "name": {
+ "endPosition": "11",
+ "kind": "IDENTIFIER",
+ "name": "a",
+ "startPosition": "10"
+ },
"body": {
"endPosition": "16",
"kind": "BLOCK",
@@ -16,7 +21,12 @@
{
"endPosition": "62",
"kind": "FUNCTION",
- "name": "d",
+ "name": {
+ "endPosition": "28",
+ "kind": "IDENTIFIER",
+ "name": "d",
+ "startPosition": "27"
+ },
"body": {
"endPosition": "60",
"kind": "BLOCK",
@@ -24,7 +34,12 @@
{
"endPosition": "60",
"kind": "FUNCTION",
- "name": "e",
+ "name": {
+ "endPosition": "46",
+ "kind": "IDENTIFIER",
+ "name": "e",
+ "startPosition": "45"
+ },
"body": {
"endPosition": "59",
"kind": "BLOCK",
@@ -70,7 +85,12 @@
{
"endPosition": "89",
"kind": "FUNCTION",
- "name": "f",
+ "name": {
+ "endPosition": "73",
+ "kind": "IDENTIFIER",
+ "name": "f",
+ "startPosition": "72"
+ },
"body": {
"endPosition": "88",
"kind": "BLOCK",
@@ -122,7 +142,12 @@
{
"endPosition": "121",
"kind": "FUNCTION",
- "name": "j",
+ "name": {
+ "endPosition": "100",
+ "kind": "IDENTIFIER",
+ "name": "j",
+ "startPosition": "99"
+ },
"body": {
"endPosition": "120",
"kind": "BLOCK",
@@ -158,4 +183,4 @@
}
]
}
-]
+]
--- a/nashorn/test/script/nosecurity/treeapi/functionExpr.js.EXPECTED Wed Jul 05 21:57:11 2017 +0200
+++ b/nashorn/test/script/nosecurity/treeapi/functionExpr.js.EXPECTED Tue Jul 12 21:18:13 2016 +0530
@@ -125,4 +125,4 @@
"startPosition": "110",
"parameters": []
}
-]
+]
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/nashorn/test/script/nosecurity/treeapi/generator.js Tue Jul 12 21:18:13 2016 +0530
@@ -0,0 +1,67 @@
+/*
+ * Copyright (c) 2016, 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.
+ *
+ * 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.
+ */
+
+/**
+ * Tests to check representation of ES6 generators.
+ *
+ * @test
+ * @option -scripting
+ * @run
+ */
+
+load(__DIR__ + "utils.js")
+
+var code = <<EOF
+
+function* id(){
+ var idx = 0;
+ while(idx < 3)
+ yield idx++;
+}
+
+var obj = {
+ *q (x, y) {
+ yield 1;
+ }
+};
+
+var f = {
+ [Symbol.iterator]: function*() {
+ var cur = 1;
+ for (;;) {
+ yield cur;
+ }
+ }
+};
+
+EOF
+
+parse("generator.js", code, "--language=es6", new (Java.extend(visitor_es6, {
+ visitFunctionDeclaration : function (node, obj) {
+ obj.push(convert(node))
+ },
+ visitVariable : function (node, obj) {
+ obj.push(convert(node))
+ }
+})))
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/nashorn/test/script/nosecurity/treeapi/generator.js.EXPECTED Tue Jul 12 21:18:13 2016 +0530
@@ -0,0 +1,266 @@
+[
+ {
+ "endPosition": "67",
+ "kind": "FUNCTION",
+ "name": {
+ "endPosition": "13",
+ "kind": "IDENTIFIER",
+ "name": "id",
+ "startPosition": "11"
+ },
+ "generator": "true",
+ "body": {
+ "endPosition": "65",
+ "kind": "BLOCK",
+ "statements": [
+ {
+ "endPosition": "30",
+ "kind": "VARIABLE",
+ "binding": {
+ "endPosition": "26",
+ "kind": "IDENTIFIER",
+ "name": "idx",
+ "startPosition": "23"
+ },
+ "startPosition": "19",
+ "initializer": {
+ "endPosition": "30",
+ "kind": "NUMBER_LITERAL",
+ "value": "0",
+ "startPosition": "29"
+ }
+ },
+ {
+ "condition": {
+ "leftOperand": {
+ "endPosition": "43",
+ "kind": "IDENTIFIER",
+ "name": "idx",
+ "startPosition": "40"
+ },
+ "endPosition": "47",
+ "kind": "LESS_THAN",
+ "rightOperand": {
+ "endPosition": "47",
+ "kind": "NUMBER_LITERAL",
+ "value": "3",
+ "startPosition": "46"
+ },
+ "startPosition": "40"
+ },
+ "endPosition": "65",
+ "kind": "WHILE_LOOP",
+ "statement": {
+ "expression": {
+ "expression": {
+ "expression": {
+ "endPosition": "62",
+ "kind": "IDENTIFIER",
+ "name": "idx",
+ "startPosition": "59"
+ },
+ "endPosition": "64",
+ "kind": "POSTFIX_INCREMENT",
+ "startPosition": "59"
+ },
+ "endPosition": "64",
+ "kind": "YIELD",
+ "startPosition": "53"
+ },
+ "endPosition": "64",
+ "kind": "EXPRESSION_STATEMENT",
+ "startPosition": "53"
+ },
+ "startPosition": "34"
+ }
+ ],
+ "startPosition": "15"
+ },
+ "strict": "false",
+ "startPosition": "1",
+ "parameters": []
+ },
+ {
+ "endPosition": "120",
+ "kind": "VARIABLE",
+ "binding": {
+ "endPosition": "76",
+ "kind": "IDENTIFIER",
+ "name": "obj",
+ "startPosition": "73"
+ },
+ "startPosition": "69",
+ "initializer": {
+ "endPosition": "120",
+ "kind": "OBJECT_LITERAL",
+ "startPosition": "79",
+ "properties": [
+ {
+ "getter": "null",
+ "endPosition": "118",
+ "kind": "PROPERTY",
+ "setter": "null",
+ "value": {
+ "endPosition": "95",
+ "kind": "FUNCTION_EXPRESSION",
+ "name": {
+ "endPosition": "87",
+ "kind": "IDENTIFIER",
+ "name": "q",
+ "startPosition": "85"
+ },
+ "generator": "true",
+ "body": {
+ "endPosition": "112",
+ "kind": "BLOCK",
+ "statements": [
+ {
+ "expression": {
+ "expression": {
+ "endPosition": "111",
+ "kind": "NUMBER_LITERAL",
+ "value": "1",
+ "startPosition": "110"
+ },
+ "endPosition": "111",
+ "kind": "YIELD",
+ "startPosition": "104"
+ },
+ "endPosition": "111",
+ "kind": "EXPRESSION_STATEMENT",
+ "startPosition": "104"
+ }
+ ],
+ "startPosition": "95"
+ },
+ "strict": "false",
+ "startPosition": "95",
+ "parameters": [
+ {
+ "endPosition": "90",
+ "kind": "IDENTIFIER",
+ "name": "x",
+ "startPosition": "89"
+ },
+ {
+ "endPosition": "93",
+ "kind": "IDENTIFIER",
+ "name": "y",
+ "startPosition": "92"
+ }
+ ]
+ },
+ "startPosition": "85",
+ "key": {
+ "endPosition": "87",
+ "kind": "IDENTIFIER",
+ "name": "q",
+ "startPosition": "85"
+ }
+ }
+ ]
+ }
+ },
+ {
+ "endPosition": "250",
+ "kind": "VARIABLE",
+ "binding": {
+ "endPosition": "128",
+ "kind": "IDENTIFIER",
+ "name": "f",
+ "startPosition": "127"
+ },
+ "startPosition": "123",
+ "initializer": {
+ "endPosition": "250",
+ "kind": "OBJECT_LITERAL",
+ "startPosition": "131",
+ "properties": [
+ {
+ "getter": "null",
+ "computed": "true",
+ "endPosition": "248",
+ "kind": "PROPERTY",
+ "setter": "null",
+ "value": {
+ "endPosition": "168",
+ "kind": "FUNCTION_EXPRESSION",
+ "name": "null",
+ "generator": "true",
+ "body": {
+ "endPosition": "242",
+ "kind": "BLOCK",
+ "statements": [
+ {
+ "endPosition": "189",
+ "kind": "VARIABLE",
+ "binding": {
+ "endPosition": "185",
+ "kind": "IDENTIFIER",
+ "name": "cur",
+ "startPosition": "182"
+ },
+ "startPosition": "178",
+ "initializer": {
+ "endPosition": "189",
+ "kind": "NUMBER_LITERAL",
+ "value": "1",
+ "startPosition": "188"
+ }
+ },
+ {
+ "condition": "null",
+ "endPosition": "242",
+ "kind": "FOR_LOOP",
+ "statement": {
+ "endPosition": "242",
+ "kind": "BLOCK",
+ "statements": [
+ {
+ "expression": {
+ "expression": {
+ "endPosition": "231",
+ "kind": "IDENTIFIER",
+ "name": "cur",
+ "startPosition": "228"
+ },
+ "endPosition": "231",
+ "kind": "YIELD",
+ "startPosition": "222"
+ },
+ "endPosition": "231",
+ "kind": "EXPRESSION_STATEMENT",
+ "startPosition": "222"
+ }
+ ],
+ "startPosition": "208"
+ },
+ "update": "null",
+ "startPosition": "199",
+ "initializer": "null"
+ }
+ ],
+ "startPosition": "168"
+ },
+ "strict": "false",
+ "startPosition": "168",
+ "parameters": []
+ },
+ "startPosition": "137",
+ "key": {
+ "identifier": "iterator",
+ "expression": {
+ "endPosition": "144",
+ "kind": "IDENTIFIER",
+ "name": "Symbol",
+ "startPosition": "138"
+ },
+ "endPosition": "153",
+ "kind": "MEMBER_SELECT",
+ "startPosition": "138"
+ }
+ }
+ ]
+ }
+ }
+]
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/nashorn/test/script/nosecurity/treeapi/let.js Tue Jul 12 21:18:13 2016 +0530
@@ -0,0 +1,45 @@
+/*
+ * Copyright (c) 2016, 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.
+ *
+ * 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.
+ */
+
+/**
+ * Tests to check representation of ES6 lets.
+ *
+ * @test
+ * @option -scripting
+ * @run
+ */
+
+load(__DIR__ + "utils.js")
+
+var code = <<EOF
+
+let x = 3;
+
+EOF
+
+parse("let.js", code, "--language=es6", new (Java.extend(visitor_es6, {
+ visitVariable : function (node, obj) {
+ obj.push(convert(node))
+ }
+})))
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/nashorn/test/script/nosecurity/treeapi/let.js.EXPECTED Tue Jul 12 21:18:13 2016 +0530
@@ -0,0 +1,20 @@
+[
+ {
+ "endPosition": "10",
+ "kind": "VARIABLE",
+ "binding": {
+ "endPosition": "6",
+ "kind": "IDENTIFIER",
+ "name": "x",
+ "startPosition": "5"
+ },
+ "let": "true",
+ "startPosition": "1",
+ "initializer": {
+ "endPosition": "10",
+ "kind": "NUMBER_LITERAL",
+ "value": "3",
+ "startPosition": "9"
+ }
+ }
+]
--- a/nashorn/test/script/nosecurity/treeapi/memberSelect.js.EXPECTED Wed Jul 05 21:57:11 2017 +0200
+++ b/nashorn/test/script/nosecurity/treeapi/memberSelect.js.EXPECTED Tue Jul 12 21:18:13 2016 +0530
@@ -28,6 +28,7 @@
"expression": {
"endPosition": "34",
"kind": "IDENTIFIER",
+ "this": "true",
"name": "this",
"startPosition": "30"
},
@@ -47,4 +48,4 @@
"kind": "MEMBER_SELECT",
"startPosition": "40"
}
-]
+]
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/nashorn/test/script/nosecurity/treeapi/modules.js Tue Jul 12 21:18:13 2016 +0530
@@ -0,0 +1,43 @@
+/*
+ * Copyright (c) 2016, 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.
+ *
+ * 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.
+ */
+
+/**
+ * Tests to check representation of ES6 modules.
+ *
+ * @test
+ * @option -scripting
+ * @run
+ */
+
+load(__DIR__ + "utils.js")
+
+var code = <<EOF
+
+import myDef, * as myMod from "my-mod";
+
+export function func() {}
+
+EOF
+
+var mod = parseModule("foo", code);
+print(JSON.stringify(convert(mod), null, 2))
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/nashorn/test/script/nosecurity/treeapi/modules.js.EXPECTED Tue Jul 12 21:18:13 2016 +0530
@@ -0,0 +1,82 @@
+{
+ "endPosition": "0",
+ "kind": "COMPILATION_UNIT",
+ "module": {
+ "indirectExportEntries": [],
+ "endPosition": "0",
+ "kind": "MODULE",
+ "localExportEntries": [
+ {
+ "localName": {
+ "endPosition": "62",
+ "kind": "IDENTIFIER",
+ "name": "func",
+ "startPosition": "58"
+ },
+ "endPosition": "67",
+ "kind": "EXPORT_ENTRY",
+ "moduleRequest": "null",
+ "exportName": {
+ "endPosition": "62",
+ "kind": "IDENTIFIER",
+ "name": "func",
+ "startPosition": "58"
+ },
+ "importName": "null",
+ "startPosition": "49"
+ }
+ ],
+ "starExportEntries": [],
+ "startPosition": "0",
+ "importEntries": [
+ {
+ "localName": {
+ "endPosition": "25",
+ "kind": "IDENTIFIER",
+ "name": "myMod",
+ "startPosition": "20"
+ },
+ "endPosition": "38",
+ "kind": "IMPORT_ENTRY",
+ "moduleRequest": {
+ "endPosition": "30",
+ "kind": "IDENTIFIER",
+ "name": "my-mod",
+ "startPosition": "32"
+ },
+ "importName": {
+ "star": "true",
+ "endPosition": "14",
+ "kind": "IDENTIFIER",
+ "name": "*",
+ "startPosition": "15"
+ },
+ "startPosition": "1"
+ }
+ ]
+ },
+ "sourceElements": [
+ {
+ "endPosition": "67",
+ "kind": "FUNCTION",
+ "name": {
+ "endPosition": "62",
+ "kind": "IDENTIFIER",
+ "name": "func",
+ "startPosition": "58"
+ },
+ "body": {
+ "endPosition": "66",
+ "kind": "BLOCK",
+ "statements": [],
+ "startPosition": "65"
+ },
+ "strict": "true",
+ "startPosition": "49",
+ "parameters": []
+ }
+ ],
+ "sourceName": "foo",
+ "strict": "true",
+ "startPosition": "0"
+}
--- a/nashorn/test/script/nosecurity/treeapi/new.js.EXPECTED Wed Jul 05 21:57:11 2017 +0200
+++ b/nashorn/test/script/nosecurity/treeapi/new.js.EXPECTED Tue Jul 12 21:18:13 2016 +0530
@@ -117,4 +117,4 @@
"kind": "NEW",
"startPosition": "59"
}
-]
+]
--- a/nashorn/test/script/nosecurity/treeapi/objectLiteral.js.EXPECTED Wed Jul 05 21:57:11 2017 +0200
+++ b/nashorn/test/script/nosecurity/treeapi/objectLiteral.js.EXPECTED Tue Jul 12 21:18:13 2016 +0530
@@ -226,6 +226,7 @@
"expression": {
"endPosition": "163",
"kind": "IDENTIFIER",
+ "this": "true",
"name": "this",
"startPosition": "159"
},
@@ -269,6 +270,7 @@
"expression": {
"endPosition": "191",
"kind": "IDENTIFIER",
+ "this": "true",
"name": "this",
"startPosition": "187"
},
@@ -307,4 +309,4 @@
}
]
}
-]
+]
--- a/nashorn/test/script/nosecurity/treeapi/property.js.EXPECTED Wed Jul 05 21:57:11 2017 +0200
+++ b/nashorn/test/script/nosecurity/treeapi/property.js.EXPECTED Tue Jul 12 21:18:13 2016 +0530
@@ -89,4 +89,4 @@
"startPosition": "64"
}
}
-]
+]
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/nashorn/test/script/nosecurity/treeapi/rest.js Tue Jul 12 21:18:13 2016 +0530
@@ -0,0 +1,53 @@
+/*
+ * Copyright (c) 2016, 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.
+ *
+ * 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.
+ */
+
+/**
+ * Tests to check representation of ES6 rest arguments.
+ *
+ * @test
+ * @option -scripting
+ * @run
+ */
+
+load(__DIR__ + "utils.js")
+
+var code = <<EOF
+
+function func(a, ...all) {}
+
+function bar(...allargs) {}
+
+var f = function(x, ...extra) {}
+var f2 = function(...rest) {}
+
+EOF
+
+parse("rest.js", code, "--language=es6", new (Java.extend(visitor_es6, {
+ visitFunctionDeclaration: function (node, obj) {
+ obj.push(convert(node))
+ },
+ visitVariable: function (node, obj) {
+ obj.push(convert(node))
+ }
+})))
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/nashorn/test/script/nosecurity/treeapi/rest.js.EXPECTED Tue Jul 12 21:18:13 2016 +0530
@@ -0,0 +1,134 @@
+[
+ {
+ "endPosition": "28",
+ "kind": "FUNCTION",
+ "name": {
+ "endPosition": "14",
+ "kind": "IDENTIFIER",
+ "name": "func",
+ "startPosition": "10"
+ },
+ "body": {
+ "endPosition": "27",
+ "kind": "BLOCK",
+ "statements": [],
+ "startPosition": "26"
+ },
+ "strict": "false",
+ "startPosition": "1",
+ "parameters": [
+ {
+ "endPosition": "16",
+ "kind": "IDENTIFIER",
+ "name": "a",
+ "startPosition": "15"
+ },
+ {
+ "endPosition": "24",
+ "restParameter": "true",
+ "kind": "IDENTIFIER",
+ "name": "all",
+ "startPosition": "21"
+ }
+ ]
+ },
+ {
+ "endPosition": "57",
+ "kind": "FUNCTION",
+ "name": {
+ "endPosition": "42",
+ "kind": "IDENTIFIER",
+ "name": "bar",
+ "startPosition": "39"
+ },
+ "body": {
+ "endPosition": "56",
+ "kind": "BLOCK",
+ "statements": [],
+ "startPosition": "55"
+ },
+ "strict": "false",
+ "startPosition": "30",
+ "parameters": [
+ {
+ "endPosition": "53",
+ "restParameter": "true",
+ "kind": "IDENTIFIER",
+ "name": "allargs",
+ "startPosition": "46"
+ }
+ ]
+ },
+ {
+ "endPosition": "91",
+ "kind": "VARIABLE",
+ "binding": {
+ "endPosition": "64",
+ "kind": "IDENTIFIER",
+ "name": "f",
+ "startPosition": "63"
+ },
+ "startPosition": "59",
+ "initializer": {
+ "endPosition": "89",
+ "kind": "FUNCTION_EXPRESSION",
+ "name": "null",
+ "body": {
+ "endPosition": "90",
+ "kind": "BLOCK",
+ "statements": [],
+ "startPosition": "89"
+ },
+ "strict": "false",
+ "startPosition": "89",
+ "parameters": [
+ {
+ "endPosition": "77",
+ "kind": "IDENTIFIER",
+ "name": "x",
+ "startPosition": "76"
+ },
+ {
+ "endPosition": "87",
+ "restParameter": "true",
+ "kind": "IDENTIFIER",
+ "name": "extra",
+ "startPosition": "82"
+ }
+ ]
+ }
+ },
+ {
+ "endPosition": "121",
+ "kind": "VARIABLE",
+ "binding": {
+ "endPosition": "98",
+ "kind": "IDENTIFIER",
+ "name": "f2",
+ "startPosition": "96"
+ },
+ "startPosition": "92",
+ "initializer": {
+ "endPosition": "119",
+ "kind": "FUNCTION_EXPRESSION",
+ "name": "null",
+ "body": {
+ "endPosition": "120",
+ "kind": "BLOCK",
+ "statements": [],
+ "startPosition": "119"
+ },
+ "strict": "false",
+ "startPosition": "119",
+ "parameters": [
+ {
+ "endPosition": "117",
+ "restParameter": "true",
+ "kind": "IDENTIFIER",
+ "name": "rest",
+ "startPosition": "113"
+ }
+ ]
+ }
+ }
+]
--- a/nashorn/test/script/nosecurity/treeapi/return.js.EXPECTED Wed Jul 05 21:57:11 2017 +0200
+++ b/nashorn/test/script/nosecurity/treeapi/return.js.EXPECTED Tue Jul 12 21:18:13 2016 +0530
@@ -59,4 +59,4 @@
"kind": "RETURN",
"startPosition": "207"
}
-]
+]
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/nashorn/test/script/nosecurity/treeapi/spread.js Tue Jul 12 21:18:13 2016 +0530
@@ -0,0 +1,53 @@
+/*
+ * Copyright (c) 2016, 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.
+ *
+ * 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.
+ */
+
+/**
+ * Tests to check representation of ES6 spread arguments.
+ *
+ * @test
+ * @option -scripting
+ * @run
+ */
+
+load(__DIR__ + "utils.js")
+
+var code = <<EOF
+
+foo(a, ...b);
+
+bar(3, ...[3, 5, 546]);
+
+var arr = [3, ...a, 5];
+var arr2 = [4, ...[5, 6], 78];
+
+EOF
+
+parse("spread.js", code, "--language=es6", new (Java.extend(visitor_es6, {
+ visitFunctionCall: function (node, obj) {
+ obj.push(convert(node))
+ },
+ visitVariable: function (node, obj) {
+ obj.push(convert(node))
+ }
+})))
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/nashorn/test/script/nosecurity/treeapi/spread.js.EXPECTED Tue Jul 12 21:18:13 2016 +0530
@@ -0,0 +1,176 @@
+[
+ {
+ "endPosition": "13",
+ "kind": "FUNCTION_INVOCATION",
+ "functionSelect": {
+ "endPosition": "4",
+ "kind": "IDENTIFIER",
+ "name": "foo",
+ "startPosition": "1"
+ },
+ "arguments": [
+ {
+ "endPosition": "6",
+ "kind": "IDENTIFIER",
+ "name": "a",
+ "startPosition": "5"
+ },
+ {
+ "expression": {
+ "endPosition": "12",
+ "kind": "IDENTIFIER",
+ "name": "b",
+ "startPosition": "11"
+ },
+ "endPosition": "12",
+ "kind": "SPREAD",
+ "startPosition": "8"
+ }
+ ],
+ "startPosition": "1"
+ },
+ {
+ "endPosition": "38",
+ "kind": "FUNCTION_INVOCATION",
+ "functionSelect": {
+ "endPosition": "19",
+ "kind": "IDENTIFIER",
+ "name": "bar",
+ "startPosition": "16"
+ },
+ "arguments": [
+ {
+ "endPosition": "21",
+ "kind": "NUMBER_LITERAL",
+ "value": "3",
+ "startPosition": "20"
+ },
+ {
+ "expression": {
+ "endPosition": "37",
+ "kind": "ARRAY_LITERAL",
+ "elements": [
+ {
+ "endPosition": "28",
+ "kind": "NUMBER_LITERAL",
+ "value": "3",
+ "startPosition": "27"
+ },
+ {
+ "endPosition": "31",
+ "kind": "NUMBER_LITERAL",
+ "value": "5",
+ "startPosition": "30"
+ },
+ {
+ "endPosition": "36",
+ "kind": "NUMBER_LITERAL",
+ "value": "546",
+ "startPosition": "33"
+ }
+ ],
+ "startPosition": "26"
+ },
+ "endPosition": "37",
+ "kind": "SPREAD",
+ "startPosition": "23"
+ }
+ ],
+ "startPosition": "16"
+ },
+ {
+ "endPosition": "63",
+ "kind": "VARIABLE",
+ "binding": {
+ "endPosition": "48",
+ "kind": "IDENTIFIER",
+ "name": "arr",
+ "startPosition": "45"
+ },
+ "startPosition": "41",
+ "initializer": {
+ "endPosition": "63",
+ "kind": "ARRAY_LITERAL",
+ "elements": [
+ {
+ "endPosition": "53",
+ "kind": "NUMBER_LITERAL",
+ "value": "3",
+ "startPosition": "52"
+ },
+ {
+ "expression": {
+ "endPosition": "59",
+ "kind": "IDENTIFIER",
+ "name": "a",
+ "startPosition": "58"
+ },
+ "endPosition": "59",
+ "kind": "SPREAD",
+ "startPosition": "55"
+ },
+ {
+ "endPosition": "62",
+ "kind": "NUMBER_LITERAL",
+ "value": "5",
+ "startPosition": "61"
+ }
+ ],
+ "startPosition": "51"
+ }
+ },
+ {
+ "endPosition": "94",
+ "kind": "VARIABLE",
+ "binding": {
+ "endPosition": "73",
+ "kind": "IDENTIFIER",
+ "name": "arr2",
+ "startPosition": "69"
+ },
+ "startPosition": "65",
+ "initializer": {
+ "endPosition": "94",
+ "kind": "ARRAY_LITERAL",
+ "elements": [
+ {
+ "endPosition": "78",
+ "kind": "NUMBER_LITERAL",
+ "value": "4",
+ "startPosition": "77"
+ },
+ {
+ "expression": {
+ "endPosition": "89",
+ "kind": "ARRAY_LITERAL",
+ "elements": [
+ {
+ "endPosition": "85",
+ "kind": "NUMBER_LITERAL",
+ "value": "5",
+ "startPosition": "84"
+ },
+ {
+ "endPosition": "88",
+ "kind": "NUMBER_LITERAL",
+ "value": "6",
+ "startPosition": "87"
+ }
+ ],
+ "startPosition": "83"
+ },
+ "endPosition": "89",
+ "kind": "SPREAD",
+ "startPosition": "80"
+ },
+ {
+ "endPosition": "93",
+ "kind": "NUMBER_LITERAL",
+ "value": "78",
+ "startPosition": "91"
+ }
+ ],
+ "startPosition": "76"
+ }
+ }
+]
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/nashorn/test/script/nosecurity/treeapi/template_literal.js Tue Jul 12 21:18:13 2016 +0530
@@ -0,0 +1,40 @@
+/*
+ * Copyright (c) 2016, 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.
+ *
+ * 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.
+ */
+
+/**
+ * Tests to check representation of ES6 template literal.
+ *
+ * @test
+ * @run
+ */
+
+load(__DIR__ + "utils.js")
+
+var code = "`your name is ${name} and you work for ${company}`"
+
+parse("template_literal.js", code, "--language=es6", new (Java.extend(visitor_es6, {
+ visitTemplateLiteral : function (node, obj) {
+ obj.push(convert(node))
+ }
+})))
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/nashorn/test/script/nosecurity/treeapi/template_literal.js.EXPECTED Tue Jul 12 21:18:13 2016 +0530
@@ -0,0 +1,39 @@
+[
+ {
+ "endPosition": "49",
+ "kind": "TEMPLATE_LITERAL",
+ "expressions": [
+ {
+ "endPosition": "14",
+ "kind": "STRING_LITERAL",
+ "value": "your name is ",
+ "startPosition": "1"
+ },
+ {
+ "endPosition": "20",
+ "kind": "IDENTIFIER",
+ "name": "name",
+ "startPosition": "16"
+ },
+ {
+ "endPosition": "39",
+ "kind": "STRING_LITERAL",
+ "value": " and you work for ",
+ "startPosition": "21"
+ },
+ {
+ "endPosition": "48",
+ "kind": "IDENTIFIER",
+ "name": "company",
+ "startPosition": "41"
+ },
+ {
+ "endPosition": "49",
+ "kind": "STRING_LITERAL",
+ "value": "",
+ "startPosition": "49"
+ }
+ ],
+ "startPosition": "1"
+ }
+]
--- a/nashorn/test/script/nosecurity/treeapi/utils.js Wed Jul 05 21:57:11 2017 +0200
+++ b/nashorn/test/script/nosecurity/treeapi/utils.js Tue Jul 12 21:18:13 2016 +0530
@@ -30,17 +30,42 @@
var tree = Java.type('jdk.nashorn.api.tree.Tree');
var list = Java.type('java.util.List');
var visitor = Java.type('jdk.nashorn.api.tree.SimpleTreeVisitorES5_1');
+var visitor_es6 = Java.type('jdk.nashorn.api.tree.SimpleTreeVisitorES6');
var file = Java.type('java.io.File')
var cls = Java.type('java.lang.Class')
function convert (value) {
- if (!value) {
+ if (!value || typeof(value) != 'object') {
return value;
}
var obj = Object.bindProperties({}, value)
var result = {}
for (var i in obj) {
+ if (i == "lineMap") {
+ continue;
+ }
+
var val = obj[i]
+ // skip these ES6 specific properties to reduce noise
+ // in the output - unless there were set to true
+ if (typeof(val) == 'boolean' && val == false) {
+ switch (i) {
+ case "computed":
+ case "static":
+ case "restParameter":
+ case "this":
+ case "super":
+ case "star":
+ case "default":
+ case "starDefaultStar":
+ case "arrow":
+ case "generator":
+ case "let":
+ case "const":
+ continue;
+ }
+ }
+
if (typeof(val) == 'object') {
if (val instanceof cls) {
continue;
@@ -72,6 +97,9 @@
print(JSON.stringify(results, null, 2))
}
+function parseModule(name, code) {
+ return parser.create("--es6-module").parse(name, code, null);
+}
function parseDiagnostic (code, args) {
var messages = new Array()
@@ -79,4 +107,4 @@
messages.push(convert(message))
})
print(JSON.stringify(messages, null, 2).replace(/\\r/g, ''))
-}
\ No newline at end of file
+}
--- a/nashorn/test/script/nosecurity/treeapi/variable.js.EXPECTED Wed Jul 05 21:57:11 2017 +0200
+++ b/nashorn/test/script/nosecurity/treeapi/variable.js.EXPECTED Tue Jul 12 21:18:13 2016 +0530
@@ -2,15 +2,25 @@
{
"endPosition": "6",
"kind": "VARIABLE",
- "name": "a",
- "startPosition": "5",
+ "binding": {
+ "endPosition": "6",
+ "kind": "IDENTIFIER",
+ "name": "a",
+ "startPosition": "5"
+ },
+ "startPosition": "1",
"initializer": "null"
},
{
"endPosition": "16",
"kind": "VARIABLE",
- "name": "x",
- "startPosition": "11",
+ "binding": {
+ "endPosition": "12",
+ "kind": "IDENTIFIER",
+ "name": "x",
+ "startPosition": "11"
+ },
+ "startPosition": "7",
"initializer": {
"endPosition": "16",
"kind": "NUMBER_LITERAL",
@@ -21,15 +31,25 @@
{
"endPosition": "24",
"kind": "VARIABLE",
- "name": "x23",
- "startPosition": "21",
+ "binding": {
+ "endPosition": "24",
+ "kind": "IDENTIFIER",
+ "name": "x23",
+ "startPosition": "21"
+ },
+ "startPosition": "17",
"initializer": "null"
},
{
"endPosition": "32",
"kind": "VARIABLE",
- "name": "$y",
- "startPosition": "26",
+ "binding": {
+ "endPosition": "28",
+ "kind": "IDENTIFIER",
+ "name": "$y",
+ "startPosition": "26"
+ },
+ "startPosition": "17",
"initializer": {
"endPosition": "32",
"kind": "NUMBER_LITERAL",
@@ -40,8 +60,13 @@
{
"endPosition": "36",
"kind": "VARIABLE",
- "name": "_z",
- "startPosition": "34",
+ "binding": {
+ "endPosition": "36",
+ "kind": "IDENTIFIER",
+ "name": "_z",
+ "startPosition": "34"
+ },
+ "startPosition": "17",
"initializer": "null"
}
-]
+]
--- a/nashorn/test/script/nosecurity/treeapi/with.js.EXPECTED Wed Jul 05 21:57:11 2017 +0200
+++ b/nashorn/test/script/nosecurity/treeapi/with.js.EXPECTED Tue Jul 12 21:18:13 2016 +0530
@@ -114,6 +114,7 @@
"expression": {
"endPosition": "76",
"kind": "IDENTIFIER",
+ "this": "true",
"name": "this",
"startPosition": "72"
},
@@ -140,4 +141,4 @@
},
"startPosition": "52"
}
-]
+]