8068306: Tests for AST presentation Nashorn Parser API

8068304: Tests for Diagnostic listener for Nashorn Parser API
8068303: Create tests for Nashorn Parser API for create Tree from some different source and parameters

Reviewed-by: sundar, lagergren
This commit is contained in:
Sergey Lugovoy 2015-03-20 13:19:47 +03:00
parent 1dae45d60e
commit b7d77b1297
80 changed files with 6896 additions and 0 deletions

View File

@ -0,0 +1,71 @@
/*
* Copyright (c) 2015, 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.
*/
/**
* @bug 8068303
* @test
* @option -scripting
* @run
*/
load(__DIR__ + "/../assert.js")
var Parser = Java.type('jdk.nashorn.api.tree.Parser')
var code = <<EOF
const a= 1;
EOF
try {
Parser.create().parse("const.js", code, null)
fail("Parser need to throw exception there")
} catch (e) {}
try {
Parser.create("--const-as-var").parse("const.js", code, null)
} catch (e) {
fail("Parser failed with exception :" + e)
}
var code = <<EOF
try {
that()
} catch (e if e instanceof TypeError) {
handle()
} catch (e) {
rest()
}
EOF
try {
Parser.create("-nse").parse("const.js", code, null)
fail("Parser need to throw exception there")
} catch (e) {
}
try {
Parser.create().parse("extension.js", code, null)
} catch (e) {
fail("Parser failed with exception :" + e)
}

View File

@ -0,0 +1,92 @@
/*
* Copyright (c) 2015, 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.
*/
/**
* @test
* @bug 8068303
* @option -scripting
* @run
*/
load(__DIR__ + "/../assert.js")
var Parser = Java.type('jdk.nashorn.api.tree.Parser')
var Nashorn = Java.type('jdk.nashorn.api.scripting.NashornScriptEngineFactory')
var File = java.io.File
var Reader = java.io.FileReader
var test_dir = __DIR__ + "/parsertests"
var files = new File(test_dir).listFiles()
// File source
for (var i in files) {
var parser = Parser.create("-scripting", "--const-as-var", "-doe")
try {
var tree = parser.parse(files[i], null);
Assert.assertNotNull(tree);
}
catch (e) {
fail("Parser failed with message :" + e)
}
}
// Reader source
for (var i in files) {
var parser = Parser.create("-scripting", "--const-as-var", "-doe")
try {
var tree = parser.parse(files[i].getName(), new Reader(files[i]), null)
Assert.assertNotNull(tree);
} catch (e) {
fail("Parser failed with message :" + e)
}
}
// URL source
for (var i in files) {
var parser = Parser.create("-scripting", "--const-as-var", "-doe")
try {
var tree = parser.parse(files[i].toURI().toURL(), null)
Assert.assertNotNull(tree);
} catch (e) {
fail("Parser failed with message :" + e)
}
}
// ScriptObjectMirror
for (var i in files) {
var parser = Parser.create("-scripting", "--const-as-var", "-doe")
var engine = new Nashorn().getScriptEngine("-scripting", "--const-as-var", "-doe")
try {
engine.compile(new Reader(files[i]))
var mirror = engine.createBindings()
mirror['name'] = mirror['script'] = files[i].getName()
var tree = parser.parse(mirror, null)
Assert.assertNotNull(tree);
} catch (e) {
fail("Parser failed with message :" + e)
}
}

View File

@ -0,0 +1,55 @@
/*
* Copyright (c) 2015, 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 array access tree.
*
* @bug 8068306
* @test
* @option -scripting
* @run
*/
load(__DIR__ + "utils.js")
var code = <<EOF
array[1]
{ array[test()] }
function a () {
array[null]
}
var x = {
test1 : array[-1],
test2 : [array[array[NaN]]]
}
EOF
parse("array_access.js", code, "-nse", new (Java.extend(visitor, {
visitArrayAccess : function (node, obj) {
obj.push(convert(node))
}
})))

View File

@ -0,0 +1,109 @@
[
{
"expression": {
"endPosition": "9",
"kind": "IDENTIFIER",
"name": "array",
"startPosition": "4"
},
"endPosition": "12",
"kind": "ARRAY_ACCESS",
"index": {
"endPosition": "11",
"kind": "NUMBER_LITERAL",
"value": "1",
"startPosition": "10"
},
"startPosition": "4"
},
{
"expression": {
"endPosition": "25",
"kind": "IDENTIFIER",
"name": "array",
"startPosition": "20"
},
"endPosition": "33",
"kind": "ARRAY_ACCESS",
"index": {
"endPosition": "32",
"kind": "FUNCTION_INVOCATION",
"functionSelect": {
"endPosition": "30",
"kind": "IDENTIFIER",
"name": "test",
"startPosition": "26"
},
"arguments": [],
"startPosition": "26"
},
"startPosition": "20"
},
{
"expression": {
"endPosition": "70",
"kind": "IDENTIFIER",
"name": "array",
"startPosition": "65"
},
"endPosition": "76",
"kind": "ARRAY_ACCESS",
"index": {
"endPosition": "75",
"kind": "NULL_LITERAL",
"value": "null",
"startPosition": "71"
},
"startPosition": "65"
},
{
"expression": {
"endPosition": "119",
"kind": "IDENTIFIER",
"name": "array",
"startPosition": "114"
},
"endPosition": "123",
"kind": "ARRAY_ACCESS",
"index": {
"expression": {
"endPosition": "122",
"kind": "NUMBER_LITERAL",
"value": "1",
"startPosition": "121"
},
"endPosition": "122",
"kind": "MINUS",
"startPosition": "120"
},
"startPosition": "114"
},
{
"expression": {
"endPosition": "147",
"kind": "IDENTIFIER",
"name": "array",
"startPosition": "142"
},
"endPosition": "159",
"kind": "ARRAY_ACCESS",
"index": {
"expression": {
"endPosition": "153",
"kind": "IDENTIFIER",
"name": "array",
"startPosition": "148"
},
"endPosition": "158",
"kind": "ARRAY_ACCESS",
"index": {
"endPosition": "157",
"kind": "IDENTIFIER",
"name": "NaN",
"startPosition": "154"
},
"startPosition": "148"
},
"startPosition": "142"
}
]

View File

@ -0,0 +1,49 @@
/*
* Copyright (c) 2015, 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 array literal tree.
*
* @bug 8068306
* @test
* @option -scripting
* @run
*/
load(__DIR__ + "utils.js")
var code = <<EOF
var x = [];
var y = [1, 43, 5, 45,];
var z = [34,,,4];
var k = [ {}, { x: 3 }, "hello" ];
EOF
parse("array_literal.js", code, "-nse", new (Java.extend(visitor, {
visitArrayLiteral : function (node, obj) {
obj.push(convert(node))
}
})))

View File

@ -0,0 +1,105 @@
[
{
"endPosition": "11",
"kind": "ARRAY_LITERAL",
"elements": [],
"startPosition": "9"
},
{
"endPosition": "36",
"kind": "ARRAY_LITERAL",
"elements": [
{
"endPosition": "23",
"kind": "NUMBER_LITERAL",
"value": "1",
"startPosition": "22"
},
{
"endPosition": "27",
"kind": "NUMBER_LITERAL",
"value": "43",
"startPosition": "25"
},
{
"endPosition": "30",
"kind": "NUMBER_LITERAL",
"value": "5",
"startPosition": "29"
},
{
"endPosition": "34",
"kind": "NUMBER_LITERAL",
"value": "45",
"startPosition": "32"
}
],
"startPosition": "21"
},
{
"endPosition": "54",
"kind": "ARRAY_LITERAL",
"elements": [
{
"endPosition": "49",
"kind": "NUMBER_LITERAL",
"value": "34",
"startPosition": "47"
},
null,
null,
{
"endPosition": "53",
"kind": "NUMBER_LITERAL",
"value": "4",
"startPosition": "52"
}
],
"startPosition": "46"
},
{
"endPosition": "89",
"kind": "ARRAY_LITERAL",
"elements": [
{
"endPosition": "68",
"kind": "OBJECT_LITERAL",
"startPosition": "66",
"properties": []
},
{
"endPosition": "78",
"kind": "OBJECT_LITERAL",
"startPosition": "70",
"properties": [
{
"getter": "null",
"endPosition": "74",
"kind": "PROPERTY",
"setter": "null",
"value": {
"endPosition": "76",
"kind": "NUMBER_LITERAL",
"value": "3",
"startPosition": "75"
},
"startPosition": "72",
"key": {
"endPosition": "73",
"kind": "IDENTIFIER",
"name": "x",
"startPosition": "72"
}
}
]
},
{
"endPosition": "86",
"kind": "STRING_LITERAL",
"value": "hello",
"startPosition": "81"
}
],
"startPosition": "64"
}
]

View File

@ -0,0 +1,50 @@
/*
* Copyright (c) 2015, 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 assignment expression tree.
*
* @bug 8068306
* @test
* @option -scripting
* @run
*/
load(__DIR__ + "utils.js")
var code = <<EOF
a = 1
b = 2;
c = {}
d = undefined
e = NaN
f = function () {}
g = function () {"use strict";}
EOF
parse("assignment.js", code, "-nse", new (Java.extend(visitor, {
visitAssignment : function (node, obj) {
obj.push(convert(node))
}
})))

View File

@ -0,0 +1,149 @@
[
{
"expression": {
"endPosition": "5",
"kind": "NUMBER_LITERAL",
"value": "1",
"startPosition": "4"
},
"endPosition": "5",
"kind": "ASSIGNMENT",
"variable": {
"endPosition": "1",
"kind": "IDENTIFIER",
"name": "a",
"startPosition": "0"
},
"startPosition": "0"
},
{
"expression": {
"endPosition": "11",
"kind": "NUMBER_LITERAL",
"value": "2",
"startPosition": "10"
},
"endPosition": "11",
"kind": "ASSIGNMENT",
"variable": {
"endPosition": "7",
"kind": "IDENTIFIER",
"name": "b",
"startPosition": "6"
},
"startPosition": "6"
},
{
"expression": {
"endPosition": "19",
"kind": "OBJECT_LITERAL",
"startPosition": "17",
"properties": []
},
"endPosition": "19",
"kind": "ASSIGNMENT",
"variable": {
"endPosition": "14",
"kind": "IDENTIFIER",
"name": "c",
"startPosition": "13"
},
"startPosition": "13"
},
{
"expression": {
"endPosition": "33",
"kind": "IDENTIFIER",
"name": "undefined",
"startPosition": "24"
},
"endPosition": "33",
"kind": "ASSIGNMENT",
"variable": {
"endPosition": "21",
"kind": "IDENTIFIER",
"name": "d",
"startPosition": "20"
},
"startPosition": "20"
},
{
"expression": {
"endPosition": "41",
"kind": "IDENTIFIER",
"name": "NaN",
"startPosition": "38"
},
"endPosition": "41",
"kind": "ASSIGNMENT",
"variable": {
"endPosition": "35",
"kind": "IDENTIFIER",
"name": "e",
"startPosition": "34"
},
"startPosition": "34"
},
{
"expression": {
"endPosition": "58",
"kind": "FUNCTION_EXPRESSION",
"name": "null",
"body": {
"endPosition": "59",
"kind": "BLOCK",
"statements": [],
"startPosition": "58"
},
"strict": "false",
"startPosition": "58",
"parameters": []
},
"endPosition": "58",
"kind": "ASSIGNMENT",
"variable": {
"endPosition": "43",
"kind": "IDENTIFIER",
"name": "f",
"startPosition": "42"
},
"startPosition": "42"
},
{
"expression": {
"endPosition": "77",
"kind": "FUNCTION_EXPRESSION",
"name": "null",
"body": {
"endPosition": "91",
"kind": "BLOCK",
"statements": [
{
"expression": {
"endPosition": "89",
"kind": "STRING_LITERAL",
"value": "use strict",
"startPosition": "79"
},
"endPosition": "89",
"kind": "EXPRESSION_STATEMENT",
"startPosition": "79"
}
],
"startPosition": "77"
},
"strict": "true",
"startPosition": "77",
"parameters": []
},
"endPosition": "77",
"kind": "ASSIGNMENT",
"variable": {
"endPosition": "62",
"kind": "IDENTIFIER",
"name": "g",
"startPosition": "61"
},
"startPosition": "61"
}
]

View File

@ -0,0 +1,55 @@
/*
* Copyright (c) 2015, 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 assignment expression tree.
*
* @bug 8068306
* @test
* @option -scripting
* @run
*/
load(__DIR__ + "utils.js")
var code = <<EOF
xyz += 314;
xyz -= 314;
xyz *= 314;
xyz /= 314;
xyz %= 314;
xyz <<= 314;
xyz >>= 314;
xyz >>>= 314;
xyz &= 314;
xyz ^= 314;
xyz |= 314;
EOF
parse("assignmentExpr.js", code, "-nse", new (Java.extend(visitor, {
visitCompoundAssignment : function (node, obj) {
obj.push(convert(node))
}
})))

View File

@ -0,0 +1,189 @@
[
{
"expression": {
"endPosition": "10",
"kind": "NUMBER_LITERAL",
"value": "314",
"startPosition": "7"
},
"endPosition": "10",
"kind": "PLUS_ASSIGNMENT",
"variable": {
"endPosition": "3",
"kind": "IDENTIFIER",
"name": "xyz",
"startPosition": "0"
},
"startPosition": "0"
},
{
"expression": {
"endPosition": "22",
"kind": "NUMBER_LITERAL",
"value": "314",
"startPosition": "19"
},
"endPosition": "22",
"kind": "MINUS_ASSIGNMENT",
"variable": {
"endPosition": "15",
"kind": "IDENTIFIER",
"name": "xyz",
"startPosition": "12"
},
"startPosition": "12"
},
{
"expression": {
"endPosition": "34",
"kind": "NUMBER_LITERAL",
"value": "314",
"startPosition": "31"
},
"endPosition": "34",
"kind": "MULTIPLY_ASSIGNMENT",
"variable": {
"endPosition": "27",
"kind": "IDENTIFIER",
"name": "xyz",
"startPosition": "24"
},
"startPosition": "24"
},
{
"expression": {
"endPosition": "46",
"kind": "NUMBER_LITERAL",
"value": "314",
"startPosition": "43"
},
"endPosition": "46",
"kind": "DIVIDE_ASSIGNMENT",
"variable": {
"endPosition": "39",
"kind": "IDENTIFIER",
"name": "xyz",
"startPosition": "36"
},
"startPosition": "36"
},
{
"expression": {
"endPosition": "58",
"kind": "NUMBER_LITERAL",
"value": "314",
"startPosition": "55"
},
"endPosition": "58",
"kind": "REMAINDER_ASSIGNMENT",
"variable": {
"endPosition": "51",
"kind": "IDENTIFIER",
"name": "xyz",
"startPosition": "48"
},
"startPosition": "48"
},
{
"expression": {
"endPosition": "71",
"kind": "NUMBER_LITERAL",
"value": "314",
"startPosition": "68"
},
"endPosition": "71",
"kind": "LEFT_SHIFT_ASSIGNMENT",
"variable": {
"endPosition": "63",
"kind": "IDENTIFIER",
"name": "xyz",
"startPosition": "60"
},
"startPosition": "60"
},
{
"expression": {
"endPosition": "84",
"kind": "NUMBER_LITERAL",
"value": "314",
"startPosition": "81"
},
"endPosition": "84",
"kind": "RIGHT_SHIFT_ASSIGNMENT",
"variable": {
"endPosition": "76",
"kind": "IDENTIFIER",
"name": "xyz",
"startPosition": "73"
},
"startPosition": "73"
},
{
"expression": {
"endPosition": "98",
"kind": "NUMBER_LITERAL",
"value": "314",
"startPosition": "95"
},
"endPosition": "98",
"kind": "UNSIGNED_RIGHT_SHIFT_ASSIGNMENT",
"variable": {
"endPosition": "89",
"kind": "IDENTIFIER",
"name": "xyz",
"startPosition": "86"
},
"startPosition": "86"
},
{
"expression": {
"endPosition": "110",
"kind": "NUMBER_LITERAL",
"value": "314",
"startPosition": "107"
},
"endPosition": "110",
"kind": "AND_ASSIGNMENT",
"variable": {
"endPosition": "103",
"kind": "IDENTIFIER",
"name": "xyz",
"startPosition": "100"
},
"startPosition": "100"
},
{
"expression": {
"endPosition": "122",
"kind": "NUMBER_LITERAL",
"value": "314",
"startPosition": "119"
},
"endPosition": "122",
"kind": "XOR_ASSIGNMENT",
"variable": {
"endPosition": "115",
"kind": "IDENTIFIER",
"name": "xyz",
"startPosition": "112"
},
"startPosition": "112"
},
{
"expression": {
"endPosition": "134",
"kind": "NUMBER_LITERAL",
"value": "314",
"startPosition": "131"
},
"endPosition": "134",
"kind": "OR_ASSIGNMENT",
"variable": {
"endPosition": "127",
"kind": "IDENTIFIER",
"name": "xyz",
"startPosition": "124"
},
"startPosition": "124"
}
]

View File

@ -0,0 +1,66 @@
/*
* Copyright (c) 2014, 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 binary expression tree.
*
* @bug 8068306
* @test
* @option -scripting
* @run
*/
load(__DIR__ + "utils.js")
var code = <<EOF
a * b
a / b;
a % b;
a + b;
a - b;
a << b;
a >> b;
a >>> b;
a < b;
a > b;
a <= b;
a >= b;
a instanceof b;
a == b;
a != b;
a === b;
a !== b;
a & b;
a ^ b;
a | b;
a && b;
a || b;
EOF
parse("binaryExpr.js", code, "-nse", new (Java.extend(visitor, {
visitBinary : function (node, obj) {
obj.push(convert(node))
}
})))

View File

@ -0,0 +1,359 @@
[
{
"leftOperand": {
"endPosition": "1",
"kind": "IDENTIFIER",
"name": "a",
"startPosition": "0"
},
"endPosition": "5",
"kind": "MULTIPLY",
"rightOperand": {
"endPosition": "5",
"kind": "IDENTIFIER",
"name": "b",
"startPosition": "4"
},
"startPosition": "0"
},
{
"leftOperand": {
"endPosition": "7",
"kind": "IDENTIFIER",
"name": "a",
"startPosition": "6"
},
"endPosition": "11",
"kind": "DIVIDE",
"rightOperand": {
"endPosition": "11",
"kind": "IDENTIFIER",
"name": "b",
"startPosition": "10"
},
"startPosition": "6"
},
{
"leftOperand": {
"endPosition": "14",
"kind": "IDENTIFIER",
"name": "a",
"startPosition": "13"
},
"endPosition": "18",
"kind": "REMAINDER",
"rightOperand": {
"endPosition": "18",
"kind": "IDENTIFIER",
"name": "b",
"startPosition": "17"
},
"startPosition": "13"
},
{
"leftOperand": {
"endPosition": "21",
"kind": "IDENTIFIER",
"name": "a",
"startPosition": "20"
},
"endPosition": "25",
"kind": "PLUS",
"rightOperand": {
"endPosition": "25",
"kind": "IDENTIFIER",
"name": "b",
"startPosition": "24"
},
"startPosition": "20"
},
{
"leftOperand": {
"endPosition": "28",
"kind": "IDENTIFIER",
"name": "a",
"startPosition": "27"
},
"endPosition": "32",
"kind": "MINUS",
"rightOperand": {
"endPosition": "32",
"kind": "IDENTIFIER",
"name": "b",
"startPosition": "31"
},
"startPosition": "27"
},
{
"leftOperand": {
"endPosition": "35",
"kind": "IDENTIFIER",
"name": "a",
"startPosition": "34"
},
"endPosition": "40",
"kind": "LEFT_SHIFT",
"rightOperand": {
"endPosition": "40",
"kind": "IDENTIFIER",
"name": "b",
"startPosition": "39"
},
"startPosition": "34"
},
{
"leftOperand": {
"endPosition": "43",
"kind": "IDENTIFIER",
"name": "a",
"startPosition": "42"
},
"endPosition": "48",
"kind": "RIGHT_SHIFT",
"rightOperand": {
"endPosition": "48",
"kind": "IDENTIFIER",
"name": "b",
"startPosition": "47"
},
"startPosition": "42"
},
{
"leftOperand": {
"endPosition": "51",
"kind": "IDENTIFIER",
"name": "a",
"startPosition": "50"
},
"endPosition": "57",
"kind": "UNSIGNED_RIGHT_SHIFT",
"rightOperand": {
"endPosition": "57",
"kind": "IDENTIFIER",
"name": "b",
"startPosition": "56"
},
"startPosition": "50"
},
{
"leftOperand": {
"endPosition": "60",
"kind": "IDENTIFIER",
"name": "a",
"startPosition": "59"
},
"endPosition": "64",
"kind": "LESS_THAN",
"rightOperand": {
"endPosition": "64",
"kind": "IDENTIFIER",
"name": "b",
"startPosition": "63"
},
"startPosition": "59"
},
{
"leftOperand": {
"endPosition": "67",
"kind": "IDENTIFIER",
"name": "a",
"startPosition": "66"
},
"endPosition": "71",
"kind": "GREATER_THAN",
"rightOperand": {
"endPosition": "71",
"kind": "IDENTIFIER",
"name": "b",
"startPosition": "70"
},
"startPosition": "66"
},
{
"leftOperand": {
"endPosition": "74",
"kind": "IDENTIFIER",
"name": "a",
"startPosition": "73"
},
"endPosition": "79",
"kind": "LESS_THAN_EQUAL",
"rightOperand": {
"endPosition": "79",
"kind": "IDENTIFIER",
"name": "b",
"startPosition": "78"
},
"startPosition": "73"
},
{
"leftOperand": {
"endPosition": "82",
"kind": "IDENTIFIER",
"name": "a",
"startPosition": "81"
},
"endPosition": "87",
"kind": "GREATER_THAN_EQUAL",
"rightOperand": {
"endPosition": "87",
"kind": "IDENTIFIER",
"name": "b",
"startPosition": "86"
},
"startPosition": "81"
},
{
"leftOperand": {
"endPosition": "106",
"kind": "IDENTIFIER",
"name": "a",
"startPosition": "105"
},
"endPosition": "111",
"kind": "EQUAL_TO",
"rightOperand": {
"endPosition": "111",
"kind": "IDENTIFIER",
"name": "b",
"startPosition": "110"
},
"startPosition": "105"
},
{
"leftOperand": {
"endPosition": "114",
"kind": "IDENTIFIER",
"name": "a",
"startPosition": "113"
},
"endPosition": "119",
"kind": "NOT_EQUAL_TO",
"rightOperand": {
"endPosition": "119",
"kind": "IDENTIFIER",
"name": "b",
"startPosition": "118"
},
"startPosition": "113"
},
{
"leftOperand": {
"endPosition": "122",
"kind": "IDENTIFIER",
"name": "a",
"startPosition": "121"
},
"endPosition": "128",
"kind": "STRICT_EQUAL_TO",
"rightOperand": {
"endPosition": "128",
"kind": "IDENTIFIER",
"name": "b",
"startPosition": "127"
},
"startPosition": "121"
},
{
"leftOperand": {
"endPosition": "131",
"kind": "IDENTIFIER",
"name": "a",
"startPosition": "130"
},
"endPosition": "137",
"kind": "STRICT_NOT_EQUAL_TO",
"rightOperand": {
"endPosition": "137",
"kind": "IDENTIFIER",
"name": "b",
"startPosition": "136"
},
"startPosition": "130"
},
{
"leftOperand": {
"endPosition": "140",
"kind": "IDENTIFIER",
"name": "a",
"startPosition": "139"
},
"endPosition": "144",
"kind": "AND",
"rightOperand": {
"endPosition": "144",
"kind": "IDENTIFIER",
"name": "b",
"startPosition": "143"
},
"startPosition": "139"
},
{
"leftOperand": {
"endPosition": "147",
"kind": "IDENTIFIER",
"name": "a",
"startPosition": "146"
},
"endPosition": "151",
"kind": "XOR",
"rightOperand": {
"endPosition": "151",
"kind": "IDENTIFIER",
"name": "b",
"startPosition": "150"
},
"startPosition": "146"
},
{
"leftOperand": {
"endPosition": "154",
"kind": "IDENTIFIER",
"name": "a",
"startPosition": "153"
},
"endPosition": "158",
"kind": "OR",
"rightOperand": {
"endPosition": "158",
"kind": "IDENTIFIER",
"name": "b",
"startPosition": "157"
},
"startPosition": "153"
},
{
"leftOperand": {
"endPosition": "161",
"kind": "IDENTIFIER",
"name": "a",
"startPosition": "160"
},
"endPosition": "166",
"kind": "CONDITIONAL_AND",
"rightOperand": {
"endPosition": "166",
"kind": "IDENTIFIER",
"name": "b",
"startPosition": "165"
},
"startPosition": "160"
},
{
"leftOperand": {
"endPosition": "169",
"kind": "IDENTIFIER",
"name": "a",
"startPosition": "168"
},
"endPosition": "174",
"kind": "CONDITIONAL_OR",
"rightOperand": {
"endPosition": "174",
"kind": "IDENTIFIER",
"name": "b",
"startPosition": "173"
},
"startPosition": "168"
}
]

View File

@ -0,0 +1,48 @@
/*
* Copyright (c) 2014, 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 block tree.
*
* @bug 8068306
* @test
* @option -scripting
* @run
*/
load(__DIR__ + "utils.js")
var code = <<EOF
{}
{ print("hello"); }
function a () {
return 2 + 1;
}
EOF
parse("block.js", code, "-nse", new (Java.extend(visitor, {
visitBlock : function (node, obj) {
obj.push(convert(node))
}
})))

View File

@ -0,0 +1,68 @@
[
{
"endPosition": "2",
"kind": "BLOCK",
"statements": [],
"startPosition": "0"
},
{
"endPosition": "22",
"kind": "BLOCK",
"statements": [
{
"expression": {
"endPosition": "19",
"kind": "FUNCTION_INVOCATION",
"functionSelect": {
"endPosition": "10",
"kind": "IDENTIFIER",
"name": "print",
"startPosition": "5"
},
"arguments": [
{
"endPosition": "17",
"kind": "STRING_LITERAL",
"value": "hello",
"startPosition": "12"
}
],
"startPosition": "5"
},
"endPosition": "19",
"kind": "EXPRESSION_STATEMENT",
"startPosition": "5"
}
],
"startPosition": "3"
},
{
"endPosition": "56",
"kind": "BLOCK",
"statements": [
{
"expression": {
"leftOperand": {
"endPosition": "51",
"kind": "NUMBER_LITERAL",
"value": "2",
"startPosition": "50"
},
"endPosition": "55",
"kind": "PLUS",
"rightOperand": {
"endPosition": "55",
"kind": "NUMBER_LITERAL",
"value": "1",
"startPosition": "54"
},
"startPosition": "50"
},
"endPosition": "56",
"kind": "RETURN",
"startPosition": "43"
}
],
"startPosition": "37"
}
]

View File

@ -0,0 +1,56 @@
/*
* Copyright (c) 2015, 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 break statement tree.
*
* @bug 8068306
* @test
* @option -scripting
* @run
*/
load(__DIR__ + "utils.js")
var code = <<EOF
while (true) { break; };
loop: { while (true) { break loop } };
loop: { for (;;) { break loop } };
do break; while(true)
switch(a) {
case 1:
case 2:
break
default:
break;
}
EOF
parse("breakStat.js", code, "-nse", new (Java.extend(visitor, {
visitBreak : function (node, obj) {
obj.push(convert(node))
}
})))

View File

@ -0,0 +1,38 @@
[
{
"endPosition": "21",
"kind": "BREAK",
"label": "null",
"startPosition": "15"
},
{
"endPosition": "58",
"kind": "BREAK",
"label": "loop",
"startPosition": "48"
},
{
"endPosition": "93",
"kind": "BREAK",
"label": "loop",
"startPosition": "83"
},
{
"endPosition": "108",
"kind": "BREAK",
"label": "null",
"startPosition": "102"
},
{
"endPosition": "170",
"kind": "BREAK",
"label": "null",
"startPosition": "165"
},
{
"endPosition": "198",
"kind": "BREAK",
"label": "null",
"startPosition": "192"
}
]

View File

@ -0,0 +1,59 @@
/*
* Copyright (c) 2015, 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 case tree.
*
* @bug 8068306
* @test
* @option -scripting
* @run
*/
load(__DIR__ + "utils.js")
var code = <<EOF
switch (e) {
case 1:
case 2:
case 3:
break;
default:
}
label:
switch (a) {
case 1:
break
case 2:
break label
case 3:
break
}
EOF
parse("breakStat.js", code, "-nse", new (Java.extend(visitor, {
visitCase : function (node, obj) {
obj.push(convert(node))
}
})))

View File

@ -0,0 +1,109 @@
[
{
"expression": {
"endPosition": "23",
"kind": "NUMBER_LITERAL",
"value": "1",
"startPosition": "22"
},
"endPosition": "24",
"kind": "CASE",
"statements": [],
"startPosition": "17"
},
{
"expression": {
"endPosition": "35",
"kind": "NUMBER_LITERAL",
"value": "2",
"startPosition": "34"
},
"endPosition": "36",
"kind": "CASE",
"statements": [],
"startPosition": "29"
},
{
"expression": {
"endPosition": "47",
"kind": "NUMBER_LITERAL",
"value": "3",
"startPosition": "46"
},
"endPosition": "63",
"kind": "CASE",
"statements": [
{
"endPosition": "63",
"kind": "BREAK",
"label": "null",
"startPosition": "57"
}
],
"startPosition": "41"
},
{
"expression": "null",
"endPosition": "77",
"kind": "CASE",
"statements": [],
"startPosition": "69"
},
{
"expression": {
"endPosition": "110",
"kind": "NUMBER_LITERAL",
"value": "1",
"startPosition": "109"
},
"endPosition": "125",
"kind": "CASE",
"statements": [
{
"endPosition": "125",
"kind": "BREAK",
"label": "null",
"startPosition": "120"
}
],
"startPosition": "104"
},
{
"expression": {
"endPosition": "136",
"kind": "NUMBER_LITERAL",
"value": "2",
"startPosition": "135"
},
"endPosition": "157",
"kind": "CASE",
"statements": [
{
"endPosition": "157",
"kind": "BREAK",
"label": "label",
"startPosition": "146"
}
],
"startPosition": "130"
},
{
"expression": {
"endPosition": "168",
"kind": "NUMBER_LITERAL",
"value": "3",
"startPosition": "167"
},
"endPosition": "183",
"kind": "CASE",
"statements": [
{
"endPosition": "183",
"kind": "BREAK",
"label": "null",
"startPosition": "178"
}
],
"startPosition": "162"
}
]

View File

@ -0,0 +1,41 @@
/*
* Copyright (c) 2015, 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 all tree
*
* @bug 8068306
* @subtest
*/
var a = 1
var b = function () {
print(a)
}
var c = {
x : function (a, b, c) {
return a * b - c;
},
i : []
}

View File

@ -0,0 +1,45 @@
/*
* Copyright (c) 2015, 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 case tree.
*
* @bug 8068306
* @test
* @option -scripting
* @run
*/
load(__DIR__ + "utils.js")
var code = <<EOF
a? b : c;
EOF
parse("condExpr.js", code, "-nse", new (Java.extend(visitor, {
visitConditionalExpression : function (node, obj) {
obj.push(convert(node))
}
})))

View File

@ -0,0 +1,25 @@
[
{
"condition": {
"endPosition": "2",
"kind": "IDENTIFIER",
"name": "a",
"startPosition": "1"
},
"endPosition": "9",
"kind": "CONDITIONAL_EXPRESSION",
"trueExpression": {
"endPosition": "5",
"kind": "IDENTIFIER",
"name": "b",
"startPosition": "4"
},
"falseExpression": {
"endPosition": "9",
"kind": "IDENTIFIER",
"name": "c",
"startPosition": "8"
},
"startPosition": "2"
}
]

View File

@ -0,0 +1,49 @@
/*
* Copyright (c) 2015, 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 continue tree.
*
* @bug 8068306
* @test
* @option -scripting
* @run
*/
load(__DIR__ + "utils.js")
var code = <<EOF
while (true) { continue; };
begin: { while (true) { continue begin; } };
start: { for(;;) { continue start; } };
do continue; while(false)
label:do continue label; while(true)
EOF
parse("continueStat.js", code, "-nse", new (Java.extend(visitor, {
visitContinue : function (node, obj) {
obj.push(convert(node))
}
})))

View File

@ -0,0 +1,32 @@
[
{
"endPosition": "25",
"kind": "CONTINUE",
"label": "null",
"startPosition": "16"
},
{
"endPosition": "68",
"kind": "CONTINUE",
"label": "begin",
"startPosition": "53"
},
{
"endPosition": "108",
"kind": "CONTINUE",
"label": "start",
"startPosition": "93"
},
{
"endPosition": "126",
"kind": "CONTINUE",
"label": "null",
"startPosition": "117"
},
{
"endPosition": "164",
"kind": "CONTINUE",
"label": "label",
"startPosition": "149"
}
]

View File

@ -0,0 +1,45 @@
/*
* Copyright (c) 2015, 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 continue tree.
*
* @bug 8068306
* @test
* @option -scripting
* @run
*/
load(__DIR__ + "utils.js")
var code = <<EOF
debugger;
EOF
parse("debugger.js", code, "-nse", new (Java.extend(visitor, {
visitDebugger : function (node, obj) {
obj.push(convert(node))
}
})))

View File

@ -0,0 +1,7 @@
[
{
"endPosition": "9",
"kind": "DEBUGGER",
"startPosition": "0"
}
]

View File

@ -0,0 +1,78 @@
/*
* Copyright (c) 2015, 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.
*/
/**
* @test
* @bug 8068304
* @option -scripting
* @run
*/
load(__DIR__ + "utils.js")
var code = <<EOF
var a = { k:1, k:2 }
EOF
parseDiagnostic(code, "-strict")
var code = <<EOF
var x = {}
with(x) {}
EOF
parseDiagnostic(code, "-strict")
var code = <<EOF
var eval = "test value";
EOF
parseDiagnostic(code, "-strict")
var code = <<EOF
var arguments = "test value";
EOF
parseDiagnostic(code, "-strict")
var code = <<EOF
if (true) {
function a () {}
}
EOF
parseDiagnostic(code, "-strict")
var code = <<EOF
var a = { get x() {}, get x() {}};
var a = { set x() {}, set x() {}};
EOF
parseDiagnostic(code, "-strict")
var code = <<EOF
/([a-z])+(/;
/([a-z])+/h;
EOF
parseDiagnostic(code, "-strict")

View File

@ -0,0 +1,95 @@
[
{
"fileName": "test.js",
"code": "ident (19, 1)",
"columnNumber": "19",
"kind": "ERROR",
"position": "19",
"message": "test.js:1:19 Property \"k\" already defined\n var a = { k:1, k:2 }\n ^",
"lineNumber": "1"
}
]
[
{
"fileName": "test.js",
"code": "with (19, 4)",
"columnNumber": "4",
"kind": "ERROR",
"position": "19",
"message": "test.js:2:4 \"with\" statement cannot be used in strict mode\n with(x) {}\n ^",
"lineNumber": "2"
}
]
[
{
"fileName": "test.js",
"code": "ident (8, 4)",
"columnNumber": "8",
"kind": "ERROR",
"position": "8",
"message": "test.js:1:8 \"eval\" cannot be used as variable name in strict mode\n var eval = \"test value\";\n ^",
"lineNumber": "1"
}
]
[
{
"fileName": "test.js",
"code": "ident (8, 9)",
"columnNumber": "8",
"kind": "ERROR",
"position": "8",
"message": "test.js:1:8 \"arguments\" cannot be used as variable name in strict mode\n var arguments = \"test value\";\n ^",
"lineNumber": "1"
}
]
[
{
"fileName": "test.js",
"code": "function (23, 8)",
"columnNumber": "6",
"kind": "ERROR",
"position": "23",
"message": "test.js:2:6 In strict mode, function declarations can only occur at program or function body level. You should use a function expression here instead.\n \t\tfunction a () {}\n \t\t^",
"lineNumber": "2"
}
]
[
{
"fileName": "test.js",
"code": "ident (26, 3)",
"columnNumber": "26",
"kind": "ERROR",
"position": "26",
"message": "test.js:1:26 Property \"x\" already defined\n var a = { get x() {}, get x() {}};\n ^",
"lineNumber": "1"
},
{
"fileName": "test.js",
"code": "ident (65, 3)",
"columnNumber": "26",
"kind": "ERROR",
"position": "65",
"message": "test.js:2:26 Property \"x\" already defined\n var a = { set x() {}, set x() {}};\n ^",
"lineNumber": "2"
}
]
[
{
"fileName": "test.js",
"code": "; (15, 1)",
"columnNumber": "15",
"kind": "ERROR",
"position": "15",
"message": "test.js:1:15 Unclosed group near index 9\n([a-z])+(\n ^\n /([a-z])+(/;\n ^",
"lineNumber": "1"
},
{
"fileName": "test.js",
"code": "; (32, 1)",
"columnNumber": "15",
"kind": "ERROR",
"position": "32",
"message": "test.js:2:15 Unsupported RegExp flag: h\n /([a-z])+/h;\n ^",
"lineNumber": "2"
}
]

View File

@ -0,0 +1,52 @@
/*
* Copyright (c) 2015, 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 continue tree.
*
* @test
* @bug 8068306
* @option -scripting
* @run
*/
load(__DIR__ + "utils.js")
var code = <<EOF
do {} while(false)
do {break;} while(true)
label:
do {break label;} while(a == 2)
do{do{}while(func1())}while(a + b > 20)
do call();while(NaN)
EOF
parse("dowhile.js", code, "-nse", new (Java.extend(visitor, {
visitDoWhileLoop : function (node, obj) {
obj.push(convert(node))
}
})))

View File

@ -0,0 +1,169 @@
[
{
"condition": {
"endPosition": "18",
"kind": "BOOLEAN_LITERAL",
"value": "false",
"startPosition": "13"
},
"endPosition": "19",
"kind": "DO_WHILE_LOOP",
"statement": {
"endPosition": "6",
"kind": "BLOCK",
"statements": [],
"startPosition": "4"
},
"startPosition": "1"
},
{
"condition": {
"endPosition": "42",
"kind": "BOOLEAN_LITERAL",
"value": "true",
"startPosition": "38"
},
"endPosition": "43",
"kind": "DO_WHILE_LOOP",
"statement": {
"endPosition": "31",
"kind": "BLOCK",
"statements": [
{
"endPosition": "30",
"kind": "BREAK",
"label": "null",
"startPosition": "24"
}
],
"startPosition": "23"
},
"startPosition": "20"
},
{
"condition": {
"leftOperand": {
"endPosition": "76",
"kind": "IDENTIFIER",
"name": "a",
"startPosition": "75"
},
"endPosition": "81",
"kind": "EQUAL_TO",
"rightOperand": {
"endPosition": "81",
"kind": "NUMBER_LITERAL",
"value": "2",
"startPosition": "80"
},
"startPosition": "75"
},
"endPosition": "82",
"kind": "DO_WHILE_LOOP",
"statement": {
"endPosition": "68",
"kind": "BLOCK",
"statements": [
{
"endPosition": "67",
"kind": "BREAK",
"label": "label",
"startPosition": "55"
}
],
"startPosition": "54"
},
"startPosition": "51"
},
{
"condition": {
"leftOperand": {
"leftOperand": {
"endPosition": "112",
"kind": "IDENTIFIER",
"name": "a",
"startPosition": "111"
},
"endPosition": "116",
"kind": "PLUS",
"rightOperand": {
"endPosition": "116",
"kind": "IDENTIFIER",
"name": "b",
"startPosition": "115"
},
"startPosition": "111"
},
"endPosition": "121",
"kind": "GREATER_THAN",
"rightOperand": {
"endPosition": "121",
"kind": "NUMBER_LITERAL",
"value": "20",
"startPosition": "119"
},
"startPosition": "111"
},
"endPosition": "122",
"kind": "DO_WHILE_LOOP",
"statement": {
"endPosition": "105",
"kind": "BLOCK",
"statements": [
{
"condition": {
"endPosition": "103",
"kind": "FUNCTION_INVOCATION",
"functionSelect": {
"endPosition": "101",
"kind": "IDENTIFIER",
"name": "func1",
"startPosition": "96"
},
"arguments": [],
"startPosition": "96"
},
"endPosition": "104",
"kind": "DO_WHILE_LOOP",
"statement": {
"endPosition": "90",
"kind": "BLOCK",
"statements": [],
"startPosition": "88"
},
"startPosition": "86"
}
],
"startPosition": "85"
},
"startPosition": "83"
},
{
"condition": {
"endPosition": "143",
"kind": "IDENTIFIER",
"name": "NaN",
"startPosition": "140"
},
"endPosition": "144",
"kind": "DO_WHILE_LOOP",
"statement": {
"expression": {
"endPosition": "133",
"kind": "FUNCTION_INVOCATION",
"functionSelect": {
"endPosition": "131",
"kind": "IDENTIFIER",
"name": "call",
"startPosition": "127"
},
"arguments": [],
"startPosition": "127"
},
"endPosition": "133",
"kind": "EXPRESSION_STATEMENT",
"startPosition": "127"
},
"startPosition": "124"
}
]

View File

@ -0,0 +1,48 @@
/*
* Copyright (c) 2015, 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 empty tree.
*
* @test
* @bug 8068306
* @option -scripting
* @run
*/
load(__DIR__ + "utils.js")
var code = <<EOF
;
var a = 1;;
1;
EOF
parse("empty.js", code, "--empty-statements", new (Java.extend(visitor, {
visitEmptyStatement : function (node, obj) {
obj.push(convert(node))
}
})))

View File

@ -0,0 +1,12 @@
[
{
"endPosition": "2",
"kind": "EMPTY_STATEMENT",
"startPosition": "1"
},
{
"endPosition": "14",
"kind": "EMPTY_STATEMENT",
"startPosition": "13"
}
]

View File

@ -0,0 +1,52 @@
/*
* Copyright (c) 2015, 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 erroneous tree.
*
* @test
* @bug 8068306
* @option -scripting
* @run
*/
load(__DIR__ + "utils.js")
var code = <<EOF
(1 + 2;
x *;
while;
break;
continue;
EOF
parse("erroneous.js", code, "-nse", new (Java.extend(visitor, {
visitErroneous : function (node, obj) {
obj.push(convert(node))
}
})), function (message) {})

View File

@ -0,0 +1,27 @@
[
{
"endPosition": "8",
"kind": "ERROR",
"startPosition": "7"
},
{
"endPosition": "13",
"kind": "ERROR",
"startPosition": "12"
},
{
"endPosition": "20",
"kind": "ERROR",
"startPosition": "19"
},
{
"endPosition": "27",
"kind": "ERROR",
"startPosition": "26"
},
{
"endPosition": "37",
"kind": "ERROR",
"startPosition": "36"
}
]

View File

@ -0,0 +1,50 @@
/*
* Copyright (c) 2014, Or1cle 1nd/or its 1ffili1tes. 1ll rights reserved.
* DO NOT 1LTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HE1DER.
*
* This code is free softw1re; you c1n redistri2ute it 1nd/or modify it
* under the terms of the GNU Gener1l Pu2lic License version 2 only, 1s
* pu2lished 2y the Free Softw1re Found1tion.
*
* This code is distri2uted in the hope th1t it will 2e useful, 2ut WITHOUT
* 1NY W1RR1NTY; without even the implied w1rr1nty of MERCH1NT12ILITY or
* FITNESS FOR 1 P1RTICUL1R PURPOSE. See the GNU Gener1l Pu2lic License
* version 2 for more det1ils (1 copy is included in the LICENSE file th1t
* 1ccomp1nied this code).
*
* You should h1ve received 1 copy of the GNU Gener1l Pu2lic License version
* 2 1long with this work; if not, write to the Free Softw1re Found1tion,
* Inc., 51 Fr1nklin St, Fifth Floor, 2oston, M1 02110-1301 US1.
*
* Ple1se cont1ct Or1cle, 500 Or1cle P1rkw1y, Redwood Shores, C1 94065 US1
* or visit www.or1cle.com if you need 1ddition1l inform1tion or h1ve 1ny
* questions.
*/
/**
* Tests to check representation for loop tree.
*
* @test
* @bug 8068306
* @option -scripting
* @run
*/
load(__DIR__ + "utils.js")
var code = <<EOF
for (i=0; someExpr;) {}
for(;;){}
for(var i=0; i < 4; i+=5) {}
for(var i=0; i < 4; i++) {}
for(i=0, j=2, x=4; x < 6; j++, x+=2, i*=x) {}
EOF
parse("forloop.js", code, "-nse", new (Java.extend(visitor, {
visitForLoop : function (node, obj) {
obj.push(convert(node))
}
})))

View File

@ -0,0 +1,281 @@
[
{
"condition": {
"endPosition": "19",
"kind": "IDENTIFIER",
"name": "someExpr",
"startPosition": "11"
},
"endPosition": "24",
"kind": "FOR_LOOP",
"statement": {
"endPosition": "24",
"kind": "BLOCK",
"statements": [],
"startPosition": "22"
},
"update": "null",
"startPosition": "1",
"initializer": {
"expression": {
"endPosition": "9",
"kind": "NUMBER_LITERAL",
"value": "0",
"startPosition": "8"
},
"endPosition": "9",
"kind": "ASSIGNMENT",
"variable": {
"endPosition": "7",
"kind": "IDENTIFIER",
"name": "i",
"startPosition": "6"
},
"startPosition": "6"
}
},
{
"condition": "null",
"endPosition": "34",
"kind": "FOR_LOOP",
"statement": {
"endPosition": "34",
"kind": "BLOCK",
"statements": [],
"startPosition": "32"
},
"update": "null",
"startPosition": "25",
"initializer": "null"
},
{
"condition": {
"leftOperand": {
"endPosition": "49",
"kind": "IDENTIFIER",
"name": "i",
"startPosition": "48"
},
"endPosition": "53",
"kind": "LESS_THAN",
"rightOperand": {
"endPosition": "53",
"kind": "NUMBER_LITERAL",
"value": "4",
"startPosition": "52"
},
"startPosition": "48"
},
"endPosition": "63",
"kind": "FOR_LOOP",
"statement": {
"endPosition": "63",
"kind": "BLOCK",
"statements": [],
"startPosition": "61"
},
"update": {
"expression": {
"endPosition": "59",
"kind": "NUMBER_LITERAL",
"value": "5",
"startPosition": "58"
},
"endPosition": "59",
"kind": "PLUS_ASSIGNMENT",
"variable": {
"endPosition": "56",
"kind": "IDENTIFIER",
"name": "i",
"startPosition": "55"
},
"startPosition": "55"
},
"startPosition": "35",
"initializer": "null"
},
{
"condition": {
"leftOperand": {
"endPosition": "78",
"kind": "IDENTIFIER",
"name": "i",
"startPosition": "77"
},
"endPosition": "82",
"kind": "LESS_THAN",
"rightOperand": {
"endPosition": "82",
"kind": "NUMBER_LITERAL",
"value": "4",
"startPosition": "81"
},
"startPosition": "77"
},
"endPosition": "91",
"kind": "FOR_LOOP",
"statement": {
"endPosition": "91",
"kind": "BLOCK",
"statements": [],
"startPosition": "89"
},
"update": {
"expression": {
"endPosition": "85",
"kind": "IDENTIFIER",
"name": "i",
"startPosition": "84"
},
"endPosition": "87",
"kind": "POSTFIX_INCREMENT",
"startPosition": "84"
},
"startPosition": "64",
"initializer": "null"
},
{
"condition": {
"leftOperand": {
"endPosition": "112",
"kind": "IDENTIFIER",
"name": "x",
"startPosition": "111"
},
"endPosition": "116",
"kind": "LESS_THAN",
"rightOperand": {
"endPosition": "116",
"kind": "NUMBER_LITERAL",
"value": "6",
"startPosition": "115"
},
"startPosition": "111"
},
"endPosition": "137",
"kind": "FOR_LOOP",
"statement": {
"endPosition": "137",
"kind": "BLOCK",
"statements": [],
"startPosition": "135"
},
"update": {
"leftOperand": {
"leftOperand": {
"expression": {
"endPosition": "119",
"kind": "IDENTIFIER",
"name": "j",
"startPosition": "118"
},
"endPosition": "121",
"kind": "POSTFIX_INCREMENT",
"startPosition": "118"
},
"endPosition": "127",
"kind": "COMMA",
"rightOperand": {
"expression": {
"endPosition": "127",
"kind": "NUMBER_LITERAL",
"value": "2",
"startPosition": "126"
},
"endPosition": "127",
"kind": "PLUS_ASSIGNMENT",
"variable": {
"endPosition": "124",
"kind": "IDENTIFIER",
"name": "x",
"startPosition": "123"
},
"startPosition": "123"
},
"startPosition": "118"
},
"endPosition": "133",
"kind": "COMMA",
"rightOperand": {
"expression": {
"endPosition": "133",
"kind": "IDENTIFIER",
"name": "x",
"startPosition": "132"
},
"endPosition": "133",
"kind": "MULTIPLY_ASSIGNMENT",
"variable": {
"endPosition": "130",
"kind": "IDENTIFIER",
"name": "i",
"startPosition": "129"
},
"startPosition": "129"
},
"startPosition": "118"
},
"startPosition": "92",
"initializer": {
"leftOperand": {
"leftOperand": {
"expression": {
"endPosition": "99",
"kind": "NUMBER_LITERAL",
"value": "0",
"startPosition": "98"
},
"endPosition": "99",
"kind": "ASSIGNMENT",
"variable": {
"endPosition": "97",
"kind": "IDENTIFIER",
"name": "i",
"startPosition": "96"
},
"startPosition": "96"
},
"endPosition": "104",
"kind": "COMMA",
"rightOperand": {
"expression": {
"endPosition": "104",
"kind": "NUMBER_LITERAL",
"value": "2",
"startPosition": "103"
},
"endPosition": "104",
"kind": "ASSIGNMENT",
"variable": {
"endPosition": "102",
"kind": "IDENTIFIER",
"name": "j",
"startPosition": "101"
},
"startPosition": "101"
},
"startPosition": "96"
},
"endPosition": "109",
"kind": "COMMA",
"rightOperand": {
"expression": {
"endPosition": "109",
"kind": "NUMBER_LITERAL",
"value": "4",
"startPosition": "108"
},
"endPosition": "109",
"kind": "ASSIGNMENT",
"variable": {
"endPosition": "107",
"kind": "IDENTIFIER",
"name": "x",
"startPosition": "106"
},
"startPosition": "106"
},
"startPosition": "96"
}
}
]

View File

@ -0,0 +1,48 @@
/*
* Copyright (c) 2014, Or1cle 1nd/or its 1ffili1tes. 1ll rights reserved.
* DO NOT 1LTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HE1DER.
*
* This code is free softw1re; you c1n redistri2ute it 1nd/or modify it
* under the terms of the GNU Gener1l Pu2lic License version 2 only, 1s
* pu2lished 2y the Free Softw1re Found1tion.
*
* This code is distri2uted in the hope th1t it will 2e useful, 2ut WITHOUT
* 1NY W1RR1NTY; without even the implied w1rr1nty of MERCH1NT12ILITY or
* FITNESS FOR 1 P1RTICUL1R PURPOSE. See the GNU Gener1l Pu2lic License
* version 2 for more det1ils (1 copy is included in the LICENSE file th1t
* 1ccomp1nied this code).
*
* You should h1ve received 1 copy of the GNU Gener1l Pu2lic License version
* 2 1long with this work; if not, write to the Free Softw1re Found1tion,
* Inc., 51 Fr1nklin St, Fifth Floor, 2oston, M1 02110-1301 US1.
*
* Ple1se cont1ct Or1cle, 500 Or1cle P1rkw1y, Redwood Shores, C1 94065 US1
* or visit www.or1cle.com if you need 1ddition1l inform1tion or h1ve 1ny
* questions.
*/
/**
* Tests to check representation for-in loop tree.
*
* @test
* @bug 8068306
* @option -scripting
* @run
*/
load(__DIR__ + "utils.js")
var code = <<EOF
for (i in obj) {}
for (var i in obj) {}
[].forEach(function(i, v){})
EOF
parse("forinloop.js", code, "-nse", new (Java.extend(visitor, {
visitForInLoop : function (node, obj) {
obj.push(convert(node))
}
})))

View File

@ -0,0 +1,50 @@
[
{
"expression": {
"endPosition": "14",
"kind": "IDENTIFIER",
"name": "obj",
"startPosition": "11"
},
"endPosition": "18",
"kind": "FOR_IN_LOOP",
"forEach": "false",
"variable": {
"endPosition": "7",
"kind": "IDENTIFIER",
"name": "i",
"startPosition": "6"
},
"statement": {
"endPosition": "18",
"kind": "BLOCK",
"statements": [],
"startPosition": "16"
},
"startPosition": "1"
},
{
"expression": {
"endPosition": "36",
"kind": "IDENTIFIER",
"name": "obj",
"startPosition": "33"
},
"endPosition": "40",
"kind": "FOR_IN_LOOP",
"forEach": "false",
"variable": {
"endPosition": "29",
"kind": "IDENTIFIER",
"name": "i",
"startPosition": "28"
},
"statement": {
"endPosition": "40",
"kind": "BLOCK",
"statements": [],
"startPosition": "38"
},
"startPosition": "19"
}
]

View File

@ -0,0 +1,54 @@
/*
* Copyright (c) 2014, Or1cle 1nd/or its 1ffili1tes. 1ll rights reserved.
* DO NOT 1LTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HE1DER.
*
* This code is free softw1re; you c1n redistri2ute it 1nd/or modify it
* under the terms of the GNU Gener1l Pu2lic License version 2 only, 1s
* pu2lished 2y the Free Softw1re Found1tion.
*
* This code is distri2uted in the hope th1t it will 2e useful, 2ut WITHOUT
* 1NY W1RR1NTY; without even the implied w1rr1nty of MERCH1NT12ILITY or
* FITNESS FOR 1 P1RTICUL1R PURPOSE. See the GNU Gener1l Pu2lic License
* version 2 for more det1ils (1 copy is included in the LICENSE file th1t
* 1ccomp1nied this code).
*
* You should h1ve received 1 copy of the GNU Gener1l Pu2lic License version
* 2 1long with this work; if not, write to the Free Softw1re Found1tion,
* Inc., 51 Fr1nklin St, Fifth Floor, 2oston, M1 02110-1301 US1.
*
* Ple1se cont1ct Or1cle, 500 Or1cle P1rkw1y, Redwood Shores, C1 94065 US1
* or visit www.or1cle.com if you need 1ddition1l inform1tion or h1ve 1ny
* questions.
*/
/**
* Tests to check representation function call tree.
*
* @test
* @bug 8068306
* @option -scripting
* @run
*/
load(__DIR__ + "utils.js")
var code = <<EOF
func1()
func2(a, b, c)
func3(4, n * m);
obj.call();
obj.call(x, b());
(function(){})();
(function(){"use strict";})();
(function(){})(2);
(function(a, b){})(2);
EOF
parse("functionCall.js", code, "-nse", new (Java.extend(visitor, {
visitFunctionCall : function (node, obj) {
obj.push(convert(node))
}
})))

View File

@ -0,0 +1,255 @@
[
{
"endPosition": "8",
"kind": "FUNCTION_INVOCATION",
"functionSelect": {
"endPosition": "6",
"kind": "IDENTIFIER",
"name": "func1",
"startPosition": "1"
},
"arguments": [],
"startPosition": "1"
},
{
"endPosition": "23",
"kind": "FUNCTION_INVOCATION",
"functionSelect": {
"endPosition": "14",
"kind": "IDENTIFIER",
"name": "func2",
"startPosition": "9"
},
"arguments": [
{
"endPosition": "16",
"kind": "IDENTIFIER",
"name": "a",
"startPosition": "15"
},
{
"endPosition": "19",
"kind": "IDENTIFIER",
"name": "b",
"startPosition": "18"
},
{
"endPosition": "22",
"kind": "IDENTIFIER",
"name": "c",
"startPosition": "21"
}
],
"startPosition": "9"
},
{
"endPosition": "39",
"kind": "FUNCTION_INVOCATION",
"functionSelect": {
"endPosition": "29",
"kind": "IDENTIFIER",
"name": "func3",
"startPosition": "24"
},
"arguments": [
{
"endPosition": "31",
"kind": "NUMBER_LITERAL",
"value": "4",
"startPosition": "30"
},
{
"leftOperand": {
"endPosition": "34",
"kind": "IDENTIFIER",
"name": "n",
"startPosition": "33"
},
"endPosition": "38",
"kind": "MULTIPLY",
"rightOperand": {
"endPosition": "38",
"kind": "IDENTIFIER",
"name": "m",
"startPosition": "37"
},
"startPosition": "33"
}
],
"startPosition": "24"
},
{
"endPosition": "51",
"kind": "FUNCTION_INVOCATION",
"functionSelect": {
"identifier": "call",
"expression": {
"endPosition": "44",
"kind": "IDENTIFIER",
"name": "obj",
"startPosition": "41"
},
"endPosition": "49",
"kind": "MEMBER_SELECT",
"startPosition": "41"
},
"arguments": [],
"startPosition": "41"
},
{
"endPosition": "69",
"kind": "FUNCTION_INVOCATION",
"functionSelect": {
"identifier": "call",
"expression": {
"endPosition": "56",
"kind": "IDENTIFIER",
"name": "obj",
"startPosition": "53"
},
"endPosition": "61",
"kind": "MEMBER_SELECT",
"startPosition": "53"
},
"arguments": [
{
"endPosition": "63",
"kind": "IDENTIFIER",
"name": "x",
"startPosition": "62"
},
{
"endPosition": "68",
"kind": "FUNCTION_INVOCATION",
"functionSelect": {
"endPosition": "66",
"kind": "IDENTIFIER",
"name": "b",
"startPosition": "65"
},
"arguments": [],
"startPosition": "65"
}
],
"startPosition": "53"
},
{
"endPosition": "87",
"kind": "FUNCTION_INVOCATION",
"functionSelect": {
"endPosition": "82",
"kind": "FUNCTION_EXPRESSION",
"name": "null",
"body": {
"endPosition": "83",
"kind": "BLOCK",
"statements": [],
"startPosition": "82"
},
"strict": "false",
"startPosition": "82",
"parameters": []
},
"arguments": [],
"startPosition": "71"
},
{
"endPosition": "118",
"kind": "FUNCTION_INVOCATION",
"functionSelect": {
"endPosition": "100",
"kind": "FUNCTION_EXPRESSION",
"name": "null",
"body": {
"endPosition": "114",
"kind": "BLOCK",
"statements": [
{
"expression": {
"endPosition": "112",
"kind": "STRING_LITERAL",
"value": "use strict",
"startPosition": "102"
},
"endPosition": "112",
"kind": "EXPRESSION_STATEMENT",
"startPosition": "102"
}
],
"startPosition": "100"
},
"strict": "true",
"startPosition": "100",
"parameters": []
},
"arguments": [],
"startPosition": "89"
},
{
"endPosition": "137",
"kind": "FUNCTION_INVOCATION",
"functionSelect": {
"endPosition": "131",
"kind": "FUNCTION_EXPRESSION",
"name": "null",
"body": {
"endPosition": "132",
"kind": "BLOCK",
"statements": [],
"startPosition": "131"
},
"strict": "false",
"startPosition": "131",
"parameters": []
},
"arguments": [
{
"endPosition": "136",
"kind": "NUMBER_LITERAL",
"value": "2",
"startPosition": "135"
}
],
"startPosition": "120"
},
{
"endPosition": "160",
"kind": "FUNCTION_INVOCATION",
"functionSelect": {
"endPosition": "154",
"kind": "FUNCTION_EXPRESSION",
"name": "null",
"body": {
"endPosition": "155",
"kind": "BLOCK",
"statements": [],
"startPosition": "154"
},
"strict": "false",
"startPosition": "154",
"parameters": [
{
"endPosition": "150",
"kind": "IDENTIFIER",
"name": "a",
"startPosition": "149"
},
{
"endPosition": "153",
"kind": "IDENTIFIER",
"name": "b",
"startPosition": "152"
}
]
},
"arguments": [
{
"endPosition": "159",
"kind": "NUMBER_LITERAL",
"value": "2",
"startPosition": "158"
}
],
"startPosition": "139"
}
]

View File

@ -0,0 +1,52 @@
/*
* Copyright (c) 2014, Or1cle 1nd/or its 1ffili1tes. 1ll rights reserved.
* DO NOT 1LTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HE1DER.
*
* This code is free softw1re; you c1n redistri2ute it 1nd/or modify it
* under the terms of the GNU Gener1l Pu2lic License version 2 only, 1s
* pu2lished 2y the Free Softw1re Found1tion.
*
* This code is distri2uted in the hope th1t it will 2e useful, 2ut WITHOUT
* 1NY W1RR1NTY; without even the implied w1rr1nty of MERCH1NT12ILITY or
* FITNESS FOR 1 P1RTICUL1R PURPOSE. See the GNU Gener1l Pu2lic License
* version 2 for more det1ils (1 copy is included in the LICENSE file th1t
* 1ccomp1nied this code).
*
* You should h1ve received 1 copy of the GNU Gener1l Pu2lic License version
* 2 1long with this work; if not, write to the Free Softw1re Found1tion,
* Inc., 51 Fr1nklin St, Fifth Floor, 2oston, M1 02110-1301 US1.
*
* Ple1se cont1ct Or1cle, 500 Or1cle P1rkw1y, Redwood Shores, C1 94065 US1
* or visit www.or1cle.com if you need 1ddition1l inform1tion or h1ve 1ny
* questions.
*/
/**
* Tests to check representation function declaration tree.
*
* @test
* @bug 8068306
* @option -scripting
* @run
*/
load(__DIR__ + "utils.js")
var code = <<EOF
function a () {}
function d(){
function e () {print(a)}
}
function f(a, b){print(a)}
function j(a, b){"use strict";}
EOF
parse("functionDeclaration.js", code, "-nse", new (Java.extend(visitor, {
visitFunctionDeclaration : function (node, obj) {
obj.push(convert(node))
}
})))

View File

@ -0,0 +1,161 @@
[
{
"endPosition": "17",
"kind": "FUNCTION",
"name": "a",
"body": {
"endPosition": "16",
"kind": "BLOCK",
"statements": [],
"startPosition": "15"
},
"strict": "false",
"startPosition": "1",
"parameters": []
},
{
"endPosition": "62",
"kind": "FUNCTION",
"name": "d",
"body": {
"endPosition": "60",
"kind": "BLOCK",
"statements": [
{
"endPosition": "60",
"kind": "FUNCTION",
"name": "e",
"body": {
"endPosition": "59",
"kind": "BLOCK",
"statements": [
{
"expression": {
"endPosition": "59",
"kind": "FUNCTION_INVOCATION",
"functionSelect": {
"endPosition": "56",
"kind": "IDENTIFIER",
"name": "print",
"startPosition": "51"
},
"arguments": [
{
"endPosition": "58",
"kind": "IDENTIFIER",
"name": "a",
"startPosition": "57"
}
],
"startPosition": "51"
},
"endPosition": "59",
"kind": "EXPRESSION_STATEMENT",
"startPosition": "51"
}
],
"startPosition": "50"
},
"strict": "false",
"startPosition": "36",
"parameters": []
}
],
"startPosition": "30"
},
"strict": "false",
"startPosition": "18",
"parameters": []
},
{
"endPosition": "89",
"kind": "FUNCTION",
"name": "f",
"body": {
"endPosition": "88",
"kind": "BLOCK",
"statements": [
{
"expression": {
"endPosition": "88",
"kind": "FUNCTION_INVOCATION",
"functionSelect": {
"endPosition": "85",
"kind": "IDENTIFIER",
"name": "print",
"startPosition": "80"
},
"arguments": [
{
"endPosition": "87",
"kind": "IDENTIFIER",
"name": "a",
"startPosition": "86"
}
],
"startPosition": "80"
},
"endPosition": "88",
"kind": "EXPRESSION_STATEMENT",
"startPosition": "80"
}
],
"startPosition": "79"
},
"strict": "false",
"startPosition": "63",
"parameters": [
{
"endPosition": "75",
"kind": "IDENTIFIER",
"name": "a",
"startPosition": "74"
},
{
"endPosition": "78",
"kind": "IDENTIFIER",
"name": "b",
"startPosition": "77"
}
]
},
{
"endPosition": "121",
"kind": "FUNCTION",
"name": "j",
"body": {
"endPosition": "120",
"kind": "BLOCK",
"statements": [
{
"expression": {
"endPosition": "118",
"kind": "STRING_LITERAL",
"value": "use strict",
"startPosition": "108"
},
"endPosition": "118",
"kind": "EXPRESSION_STATEMENT",
"startPosition": "108"
}
],
"startPosition": "106"
},
"strict": "true",
"startPosition": "90",
"parameters": [
{
"endPosition": "102",
"kind": "IDENTIFIER",
"name": "a",
"startPosition": "101"
},
{
"endPosition": "105",
"kind": "IDENTIFIER",
"name": "b",
"startPosition": "104"
}
]
}
]

View File

@ -0,0 +1,51 @@
/*
* Copyright (c) 2014, Or1cle 1nd/or its 1ffili1tes. 1ll rights reserved.
* DO NOT 1LTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HE1DER.
*
* This code is free softw1re; you c1n redistri2ute it 1nd/or modify it
* under the terms of the GNU Gener1l Pu2lic License version 2 only, 1s
* pu2lished 2y the Free Softw1re Found1tion.
*
* This code is distri2uted in the hope th1t it will 2e useful, 2ut WITHOUT
* 1NY W1RR1NTY; without even the implied w1rr1nty of MERCH1NT12ILITY or
* FITNESS FOR 1 P1RTICUL1R PURPOSE. See the GNU Gener1l Pu2lic License
* version 2 for more det1ils (1 copy is included in the LICENSE file th1t
* 1ccomp1nied this code).
*
* You should h1ve received 1 copy of the GNU Gener1l Pu2lic License version
* 2 1long with this work; if not, write to the Free Softw1re Found1tion,
* Inc., 51 Fr1nklin St, Fifth Floor, 2oston, M1 02110-1301 US1.
*
* Ple1se cont1ct Or1cle, 500 Or1cle P1rkw1y, Redwood Shores, C1 94065 US1
* or visit www.or1cle.com if you need 1ddition1l inform1tion or h1ve 1ny
* questions.
*/
/**
* Tests to check representation function expression tree.
*
* @test
* @bug 8068306
* @option -scripting
* @run
*/
load(__DIR__ + "utils.js")
var code = <<EOF
var a = function () {}
var b = function (x, y) {}
var c = function (x, y) {"use strict"}
var e = function () { return function (){"use strict"}}
EOF
parse("functionExpr.js", code, "-nse", new (Java.extend(visitor, {
visitFunctionExpression : function (node, obj) {
obj.push(convert(node))
}
})))

View File

@ -0,0 +1,128 @@
[
{
"endPosition": "21",
"kind": "FUNCTION_EXPRESSION",
"name": "null",
"body": {
"endPosition": "22",
"kind": "BLOCK",
"statements": [],
"startPosition": "21"
},
"strict": "false",
"startPosition": "21",
"parameters": []
},
{
"endPosition": "48",
"kind": "FUNCTION_EXPRESSION",
"name": "null",
"body": {
"endPosition": "49",
"kind": "BLOCK",
"statements": [],
"startPosition": "48"
},
"strict": "false",
"startPosition": "48",
"parameters": [
{
"endPosition": "43",
"kind": "IDENTIFIER",
"name": "x",
"startPosition": "42"
},
{
"endPosition": "46",
"kind": "IDENTIFIER",
"name": "y",
"startPosition": "45"
}
]
},
{
"endPosition": "75",
"kind": "FUNCTION_EXPRESSION",
"name": "null",
"body": {
"endPosition": "87",
"kind": "BLOCK",
"statements": [
{
"expression": {
"endPosition": "87",
"kind": "STRING_LITERAL",
"value": "use strict",
"startPosition": "77"
},
"endPosition": "87",
"kind": "EXPRESSION_STATEMENT",
"startPosition": "77"
}
],
"startPosition": "75"
},
"strict": "true",
"startPosition": "75",
"parameters": [
{
"endPosition": "70",
"kind": "IDENTIFIER",
"name": "x",
"startPosition": "69"
},
{
"endPosition": "73",
"kind": "IDENTIFIER",
"name": "y",
"startPosition": "72"
}
]
},
{
"endPosition": "110",
"kind": "FUNCTION_EXPRESSION",
"name": "null",
"body": {
"endPosition": "144",
"kind": "BLOCK",
"statements": [
{
"expression": {
"endPosition": "130",
"kind": "FUNCTION_EXPRESSION",
"name": "null",
"body": {
"endPosition": "142",
"kind": "BLOCK",
"statements": [
{
"expression": {
"endPosition": "142",
"kind": "STRING_LITERAL",
"value": "use strict",
"startPosition": "132"
},
"endPosition": "142",
"kind": "EXPRESSION_STATEMENT",
"startPosition": "132"
}
],
"startPosition": "130"
},
"strict": "true",
"startPosition": "130",
"parameters": []
},
"endPosition": "144",
"kind": "RETURN",
"startPosition": "112"
}
],
"startPosition": "110"
},
"strict": "false",
"startPosition": "110",
"parameters": []
}
]

View File

@ -0,0 +1,53 @@
/*
* Copyright (c) 2014, Or1cle 1nd/or its 1ffili1tes. 1ll rights reserved.
* DO NOT 1LTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HE1DER.
*
* This code is free softw1re; you c1n redistri2ute it 1nd/or modify it
* under the terms of the GNU Gener1l Pu2lic License version 2 only, 1s
* pu2lished 2y the Free Softw1re Found1tion.
*
* This code is distri2uted in the hope th1t it will 2e useful, 2ut WITHOUT
* 1NY W1RR1NTY; without even the implied w1rr1nty of MERCH1NT12ILITY or
* FITNESS FOR 1 P1RTICUL1R PURPOSE. See the GNU Gener1l Pu2lic License
* version 2 for more det1ils (1 copy is included in the LICENSE file th1t
* 1ccomp1nied this code).
*
* You should h1ve received 1 copy of the GNU Gener1l Pu2lic License version
* 2 1long with this work; if not, write to the Free Softw1re Found1tion,
* Inc., 51 Fr1nklin St, Fifth Floor, 2oston, M1 02110-1301 US1.
*
* Ple1se cont1ct Or1cle, 500 Or1cle P1rkw1y, Redwood Shores, C1 94065 US1
* or visit www.or1cle.com if you need 1ddition1l inform1tion or h1ve 1ny
* questions.
*/
/**
* Tests to check representation identifier tree.
*
* @test
* @bug 8068306
* @option -scripting
* @run
*/
load(__DIR__ + "utils.js")
var code = <<EOF
undefined
NaN
a
a23
var_name
_underscore
$dollar
EOF
parse("identifier.js", code, "-nse", new (Java.extend(visitor, {
visitIdentifier : function (node, obj) {
obj.push(convert(node))
}
})))

View File

@ -0,0 +1,44 @@
[
{
"endPosition": "10",
"kind": "IDENTIFIER",
"name": "undefined",
"startPosition": "1"
},
{
"endPosition": "14",
"kind": "IDENTIFIER",
"name": "NaN",
"startPosition": "11"
},
{
"endPosition": "16",
"kind": "IDENTIFIER",
"name": "a",
"startPosition": "15"
},
{
"endPosition": "20",
"kind": "IDENTIFIER",
"name": "a23",
"startPosition": "17"
},
{
"endPosition": "29",
"kind": "IDENTIFIER",
"name": "var_name",
"startPosition": "21"
},
{
"endPosition": "41",
"kind": "IDENTIFIER",
"name": "_underscore",
"startPosition": "30"
},
{
"endPosition": "49",
"kind": "IDENTIFIER",
"name": "$dollar",
"startPosition": "42"
}
]

View File

@ -0,0 +1,52 @@
/*
* Copyright (c) 2014, Or1cle 1nd/or its 1ffili1tes. 1ll rights reserved.
* DO NOT 1LTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HE1DER.
*
* This code is free softw1re; you c1n redistri2ute it 1nd/or modify it
* under the terms of the GNU Gener1l Pu2lic License version 2 only, 1s
* pu2lished 2y the Free Softw1re Found1tion.
*
* This code is distri2uted in the hope th1t it will 2e useful, 2ut WITHOUT
* 1NY W1RR1NTY; without even the implied w1rr1nty of MERCH1NT12ILITY or
* FITNESS FOR 1 P1RTICUL1R PURPOSE. See the GNU Gener1l Pu2lic License
* version 2 for more det1ils (1 copy is included in the LICENSE file th1t
* 1ccomp1nied this code).
*
* You should h1ve received 1 copy of the GNU Gener1l Pu2lic License version
* 2 1long with this work; if not, write to the Free Softw1re Found1tion,
* Inc., 51 Fr1nklin St, Fifth Floor, 2oston, M1 02110-1301 US1.
*
* Ple1se cont1ct Or1cle, 500 Or1cle P1rkw1y, Redwood Shores, C1 94065 US1
* or visit www.or1cle.com if you need 1ddition1l inform1tion or h1ve 1ny
* questions.
*/
/**
* Tests to check representation if-else tree.
*
* @test
* @bug 8068306
* @option -scripting
* @run
*/
load(__DIR__ + "utils.js")
var code = <<EOF
if (true) {}
if (false) {}
if (a) print(a)
if ("STR") {}
if ( a > 10) {} else {}
if (a) {} else if (b) {} else {}
EOF
parse("if.js", code, "-nse", new (Java.extend(visitor, {
visitIf : function (node, obj) {
obj.push(convert(node))
}
})))

View File

@ -0,0 +1,166 @@
[
{
"condition": {
"endPosition": "9",
"kind": "BOOLEAN_LITERAL",
"value": "true",
"startPosition": "5"
},
"elseStatement": "null",
"endPosition": "13",
"kind": "IF",
"startPosition": "1",
"thenStatement": {
"endPosition": "13",
"kind": "BLOCK",
"statements": [],
"startPosition": "11"
}
},
{
"condition": {
"endPosition": "23",
"kind": "BOOLEAN_LITERAL",
"value": "false",
"startPosition": "18"
},
"elseStatement": "null",
"endPosition": "27",
"kind": "IF",
"startPosition": "14",
"thenStatement": {
"endPosition": "27",
"kind": "BLOCK",
"statements": [],
"startPosition": "25"
}
},
{
"condition": {
"endPosition": "33",
"kind": "IDENTIFIER",
"name": "a",
"startPosition": "32"
},
"elseStatement": "null",
"endPosition": "43",
"kind": "IF",
"startPosition": "28",
"thenStatement": {
"expression": {
"endPosition": "43",
"kind": "FUNCTION_INVOCATION",
"functionSelect": {
"endPosition": "40",
"kind": "IDENTIFIER",
"name": "print",
"startPosition": "35"
},
"arguments": [
{
"endPosition": "42",
"kind": "IDENTIFIER",
"name": "a",
"startPosition": "41"
}
],
"startPosition": "35"
},
"endPosition": "43",
"kind": "EXPRESSION_STATEMENT",
"startPosition": "35"
}
},
{
"condition": {
"endPosition": "52",
"kind": "STRING_LITERAL",
"value": "STR",
"startPosition": "49"
},
"elseStatement": "null",
"endPosition": "57",
"kind": "IF",
"startPosition": "44",
"thenStatement": {
"endPosition": "57",
"kind": "BLOCK",
"statements": [],
"startPosition": "55"
}
},
{
"condition": {
"leftOperand": {
"endPosition": "64",
"kind": "IDENTIFIER",
"name": "a",
"startPosition": "63"
},
"endPosition": "69",
"kind": "GREATER_THAN",
"rightOperand": {
"endPosition": "69",
"kind": "NUMBER_LITERAL",
"value": "10",
"startPosition": "67"
},
"startPosition": "63"
},
"elseStatement": {
"endPosition": "81",
"kind": "BLOCK",
"statements": [],
"startPosition": "79"
},
"endPosition": "81",
"kind": "IF",
"startPosition": "58",
"thenStatement": {
"endPosition": "73",
"kind": "BLOCK",
"statements": [],
"startPosition": "71"
}
},
{
"condition": {
"endPosition": "87",
"kind": "IDENTIFIER",
"name": "a",
"startPosition": "86"
},
"elseStatement": {
"condition": {
"endPosition": "102",
"kind": "IDENTIFIER",
"name": "b",
"startPosition": "101"
},
"elseStatement": {
"endPosition": "114",
"kind": "BLOCK",
"statements": [],
"startPosition": "112"
},
"endPosition": "114",
"kind": "IF",
"startPosition": "97",
"thenStatement": {
"endPosition": "106",
"kind": "BLOCK",
"statements": [],
"startPosition": "104"
}
},
"endPosition": "114",
"kind": "IF",
"startPosition": "82",
"thenStatement": {
"endPosition": "91",
"kind": "BLOCK",
"statements": [],
"startPosition": "89"
}
}
]

View File

@ -0,0 +1,54 @@
/*
* Copyright (c) 2014, Or1cle 1nd/or its 1ffili1tes. 1ll rights reserved.
* DO NOT 1LTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HE1DER.
*
* This code is free softw1re; you c1n redistri2ute it 1nd/or modify it
* under the terms of the GNU Gener1l Pu2lic License version 2 only, 1s
* pu2lished 2y the Free Softw1re Found1tion.
*
* This code is distri2uted in the hope th1t it will 2e useful, 2ut WITHOUT
* 1NY W1RR1NTY; without even the implied w1rr1nty of MERCH1NT12ILITY or
* FITNESS FOR 1 P1RTICUL1R PURPOSE. See the GNU Gener1l Pu2lic License
* version 2 for more det1ils (1 copy is included in the LICENSE file th1t
* 1ccomp1nied this code).
*
* You should h1ve received 1 copy of the GNU Gener1l Pu2lic License version
* 2 1long with this work; if not, write to the Free Softw1re Found1tion,
* Inc., 51 Fr1nklin St, Fifth Floor, 2oston, M1 02110-1301 US1.
*
* Ple1se cont1ct Or1cle, 500 Or1cle P1rkw1y, Redwood Shores, C1 94065 US1
* or visit www.or1cle.com if you need 1ddition1l inform1tion or h1ve 1ny
* questions.
*/
/**
* Tests to check representation instanceof statement tree.
*
* @test
* @bug 8068306
* @option -scripting
* @run
*/
load(__DIR__ + "utils.js")
var code = <<EOF
a instanceof Array
a() instanceof Object
1 instanceof a
2 instanceof a()
C.prototype instanceof Object
"str" instanceof obj.member
EOF
parse("instanceof.js", code, "-nse", new (Java.extend(visitor, {
visitInstanceOf : function (node, obj) {
obj.push(convert(node))
}
})))

View File

@ -0,0 +1,224 @@
[
{
"leftOperand": {
"endPosition": "2",
"kind": "IDENTIFIER",
"name": "a",
"startPosition": "1"
},
"expression": {
"endPosition": "2",
"kind": "IDENTIFIER",
"name": "a",
"startPosition": "1"
},
"endPosition": "19",
"kind": "INSTANCE_OF",
"rightOperand": {
"endPosition": "19",
"kind": "IDENTIFIER",
"name": "Array",
"startPosition": "14"
},
"type": {
"endPosition": "19",
"kind": "IDENTIFIER",
"name": "Array",
"startPosition": "14"
},
"startPosition": "1"
},
{
"leftOperand": {
"endPosition": "23",
"kind": "FUNCTION_INVOCATION",
"functionSelect": {
"endPosition": "21",
"kind": "IDENTIFIER",
"name": "a",
"startPosition": "20"
},
"arguments": [],
"startPosition": "20"
},
"expression": {
"endPosition": "23",
"kind": "FUNCTION_INVOCATION",
"functionSelect": {
"endPosition": "21",
"kind": "IDENTIFIER",
"name": "a",
"startPosition": "20"
},
"arguments": [],
"startPosition": "20"
},
"endPosition": "41",
"kind": "INSTANCE_OF",
"rightOperand": {
"endPosition": "41",
"kind": "IDENTIFIER",
"name": "Object",
"startPosition": "35"
},
"type": {
"endPosition": "41",
"kind": "IDENTIFIER",
"name": "Object",
"startPosition": "35"
},
"startPosition": "20"
},
{
"leftOperand": {
"endPosition": "43",
"kind": "NUMBER_LITERAL",
"value": "1",
"startPosition": "42"
},
"expression": {
"endPosition": "43",
"kind": "NUMBER_LITERAL",
"value": "1",
"startPosition": "42"
},
"endPosition": "56",
"kind": "INSTANCE_OF",
"rightOperand": {
"endPosition": "56",
"kind": "IDENTIFIER",
"name": "a",
"startPosition": "55"
},
"type": {
"endPosition": "56",
"kind": "IDENTIFIER",
"name": "a",
"startPosition": "55"
},
"startPosition": "42"
},
{
"leftOperand": {
"endPosition": "58",
"kind": "NUMBER_LITERAL",
"value": "2",
"startPosition": "57"
},
"expression": {
"endPosition": "58",
"kind": "NUMBER_LITERAL",
"value": "2",
"startPosition": "57"
},
"endPosition": "73",
"kind": "INSTANCE_OF",
"rightOperand": {
"endPosition": "73",
"kind": "FUNCTION_INVOCATION",
"functionSelect": {
"endPosition": "71",
"kind": "IDENTIFIER",
"name": "a",
"startPosition": "70"
},
"arguments": [],
"startPosition": "70"
},
"type": {
"endPosition": "73",
"kind": "FUNCTION_INVOCATION",
"functionSelect": {
"endPosition": "71",
"kind": "IDENTIFIER",
"name": "a",
"startPosition": "70"
},
"arguments": [],
"startPosition": "70"
},
"startPosition": "57"
},
{
"leftOperand": {
"identifier": "prototype",
"expression": {
"endPosition": "75",
"kind": "IDENTIFIER",
"name": "C",
"startPosition": "74"
},
"endPosition": "85",
"kind": "MEMBER_SELECT",
"startPosition": "74"
},
"expression": {
"identifier": "prototype",
"expression": {
"endPosition": "75",
"kind": "IDENTIFIER",
"name": "C",
"startPosition": "74"
},
"endPosition": "85",
"kind": "MEMBER_SELECT",
"startPosition": "74"
},
"endPosition": "103",
"kind": "INSTANCE_OF",
"rightOperand": {
"endPosition": "103",
"kind": "IDENTIFIER",
"name": "Object",
"startPosition": "97"
},
"type": {
"endPosition": "103",
"kind": "IDENTIFIER",
"name": "Object",
"startPosition": "97"
},
"startPosition": "74"
},
{
"leftOperand": {
"endPosition": "108",
"kind": "STRING_LITERAL",
"value": "str",
"startPosition": "105"
},
"expression": {
"endPosition": "108",
"kind": "STRING_LITERAL",
"value": "str",
"startPosition": "105"
},
"endPosition": "131",
"kind": "INSTANCE_OF",
"rightOperand": {
"identifier": "member",
"expression": {
"endPosition": "124",
"kind": "IDENTIFIER",
"name": "obj",
"startPosition": "121"
},
"endPosition": "131",
"kind": "MEMBER_SELECT",
"startPosition": "121"
},
"type": {
"identifier": "member",
"expression": {
"endPosition": "124",
"kind": "IDENTIFIER",
"name": "obj",
"startPosition": "121"
},
"endPosition": "131",
"kind": "MEMBER_SELECT",
"startPosition": "121"
},
"startPosition": "105"
}
]

View File

@ -0,0 +1,52 @@
/*
* Copyright (c) 2014, 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 labeled statement tree.
*
* @test
* @bug 8068306
* @option -scripting
* @run
*/
load(__DIR__ + "utils.js")
var code = <<EOF
begin: { for (;;) break begin };
begin: { while (true) break begin };
begin: { while (false) continue begin };
begin: { for (;;) continue begin };
begin: { do continue begin; while(false);};
begin: { do break begin; while(true);};
EOF
parse("labeledStat.js", code, "-nse", new (Java.extend(visitor, {
visitLabeledStatement : function (node, obj) {
obj.push(convert(node))
}
})))

View File

@ -0,0 +1,176 @@
[
{
"endPosition": "32",
"kind": "LABELED_STATEMENT",
"statement": {
"endPosition": "32",
"kind": "BLOCK",
"statements": [
{
"condition": "null",
"endPosition": "30",
"kind": "FOR_LOOP",
"statement": {
"endPosition": "30",
"kind": "BREAK",
"label": "begin",
"startPosition": "19"
},
"update": "null",
"startPosition": "10",
"initializer": "null"
}
],
"startPosition": "8"
},
"label": "begin",
"startPosition": "1"
},
{
"endPosition": "69",
"kind": "LABELED_STATEMENT",
"statement": {
"endPosition": "69",
"kind": "BLOCK",
"statements": [
{
"condition": {
"endPosition": "54",
"kind": "BOOLEAN_LITERAL",
"value": "true",
"startPosition": "50"
},
"endPosition": "67",
"kind": "WHILE_LOOP",
"statement": {
"endPosition": "67",
"kind": "BREAK",
"label": "begin",
"startPosition": "56"
},
"startPosition": "43"
}
],
"startPosition": "41"
},
"label": "begin",
"startPosition": "34"
},
{
"endPosition": "110",
"kind": "LABELED_STATEMENT",
"statement": {
"endPosition": "110",
"kind": "BLOCK",
"statements": [
{
"condition": {
"endPosition": "92",
"kind": "BOOLEAN_LITERAL",
"value": "false",
"startPosition": "87"
},
"endPosition": "108",
"kind": "WHILE_LOOP",
"statement": {
"endPosition": "108",
"kind": "CONTINUE",
"label": "begin",
"startPosition": "94"
},
"startPosition": "80"
}
],
"startPosition": "78"
},
"label": "begin",
"startPosition": "71"
},
{
"endPosition": "146",
"kind": "LABELED_STATEMENT",
"statement": {
"endPosition": "146",
"kind": "BLOCK",
"statements": [
{
"condition": "null",
"endPosition": "144",
"kind": "FOR_LOOP",
"statement": {
"endPosition": "144",
"kind": "CONTINUE",
"label": "begin",
"startPosition": "130"
},
"update": "null",
"startPosition": "121",
"initializer": "null"
}
],
"startPosition": "119"
},
"label": "begin",
"startPosition": "112"
},
{
"endPosition": "190",
"kind": "LABELED_STATEMENT",
"statement": {
"endPosition": "190",
"kind": "BLOCK",
"statements": [
{
"condition": {
"endPosition": "187",
"kind": "BOOLEAN_LITERAL",
"value": "false",
"startPosition": "182"
},
"endPosition": "189",
"kind": "DO_WHILE_LOOP",
"statement": {
"endPosition": "175",
"kind": "CONTINUE",
"label": "begin",
"startPosition": "160"
},
"startPosition": "157"
}
],
"startPosition": "155"
},
"label": "begin",
"startPosition": "148"
},
{
"endPosition": "230",
"kind": "LABELED_STATEMENT",
"statement": {
"endPosition": "230",
"kind": "BLOCK",
"statements": [
{
"condition": {
"endPosition": "227",
"kind": "BOOLEAN_LITERAL",
"value": "true",
"startPosition": "223"
},
"endPosition": "229",
"kind": "DO_WHILE_LOOP",
"statement": {
"endPosition": "216",
"kind": "BREAK",
"label": "begin",
"startPosition": "204"
},
"startPosition": "201"
}
],
"startPosition": "199"
},
"label": "begin",
"startPosition": "192"
}
]

View File

@ -0,0 +1,51 @@
/*
* Copyright (c) 2015, 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 literal statement tree.
*
* @test
* @bug 8068306
* @option -scripting
* @run
*/
load(__DIR__ + "utils.js")
var code = <<EOF
1
null
hello
false
"use strict";
EOF
parse("literal.js", code, "-nse", new (Java.extend(visitor, {
visitLiteral : function (node, obj) {
obj.push(convert(node))
}
})))

View File

@ -0,0 +1,26 @@
[
{
"endPosition": "2",
"kind": "NUMBER_LITERAL",
"value": "1",
"startPosition": "1"
},
{
"endPosition": "7",
"kind": "NULL_LITERAL",
"value": "null",
"startPosition": "3"
},
{
"endPosition": "19",
"kind": "BOOLEAN_LITERAL",
"value": "false",
"startPosition": "14"
},
{
"endPosition": "31",
"kind": "STRING_LITERAL",
"value": "use strict",
"startPosition": "21"
}
]

View File

@ -0,0 +1,50 @@
/*
* Copyright (c) 2014, 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 member select tree.
*
* @test
* @bug 8068306
* @option -scripting
* @run
*/
load(__DIR__ + "utils.js")
var code = <<EOF
object.field
object.method()
this.null
Array.prototype
EOF
parse("memberSelect.js", code, "-nse", new (Java.extend(visitor, {
visitMemberSelect : function (node, obj) {
obj.push(convert(node))
}
})))

View File

@ -0,0 +1,50 @@
[
{
"identifier": "field",
"expression": {
"endPosition": "7",
"kind": "IDENTIFIER",
"name": "object",
"startPosition": "1"
},
"endPosition": "13",
"kind": "MEMBER_SELECT",
"startPosition": "1"
},
{
"identifier": "method",
"expression": {
"endPosition": "20",
"kind": "IDENTIFIER",
"name": "object",
"startPosition": "14"
},
"endPosition": "27",
"kind": "MEMBER_SELECT",
"startPosition": "14"
},
{
"identifier": "null",
"expression": {
"endPosition": "34",
"kind": "IDENTIFIER",
"name": "this",
"startPosition": "30"
},
"endPosition": "39",
"kind": "MEMBER_SELECT",
"startPosition": "30"
},
{
"identifier": "prototype",
"expression": {
"endPosition": "45",
"kind": "IDENTIFIER",
"name": "Array",
"startPosition": "40"
},
"endPosition": "55",
"kind": "MEMBER_SELECT",
"startPosition": "40"
}
]

View File

@ -0,0 +1,50 @@
/*
* Copyright (c) 2014, 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 new statement tree.
*
* @test
* @bug 8068306
* @option -scripting
* @run
*/
load(__DIR__ + "utils.js")
var code = <<EOF
new Object()
new Array()
new function (a,b,c) {}
new func
new obj.init
EOF
parse("new.js", code, "-nse", new (Java.extend(visitor, {
visitNew : function (node, obj) {
obj.push(convert(node))
}
})))

View File

@ -0,0 +1,120 @@
[
{
"constructorExpression": {
"endPosition": "13",
"kind": "FUNCTION_INVOCATION",
"functionSelect": {
"endPosition": "11",
"kind": "IDENTIFIER",
"name": "Object",
"startPosition": "5"
},
"arguments": [],
"startPosition": "5"
},
"endPosition": "13",
"kind": "NEW",
"startPosition": "1"
},
{
"constructorExpression": {
"endPosition": "25",
"kind": "FUNCTION_INVOCATION",
"functionSelect": {
"endPosition": "23",
"kind": "IDENTIFIER",
"name": "Array",
"startPosition": "18"
},
"arguments": [],
"startPosition": "18"
},
"endPosition": "25",
"kind": "NEW",
"startPosition": "14"
},
{
"constructorExpression": {
"endPosition": "49",
"kind": "FUNCTION_INVOCATION",
"functionSelect": {
"endPosition": "47",
"kind": "FUNCTION_EXPRESSION",
"name": "null",
"body": {
"endPosition": "48",
"kind": "BLOCK",
"statements": [],
"startPosition": "47"
},
"strict": "false",
"startPosition": "47",
"parameters": [
{
"endPosition": "41",
"kind": "IDENTIFIER",
"name": "a",
"startPosition": "40"
},
{
"endPosition": "43",
"kind": "IDENTIFIER",
"name": "b",
"startPosition": "42"
},
{
"endPosition": "45",
"kind": "IDENTIFIER",
"name": "c",
"startPosition": "44"
}
]
},
"arguments": [],
"startPosition": "47"
},
"endPosition": "49",
"kind": "NEW",
"startPosition": "26"
},
{
"constructorExpression": {
"endPosition": "58",
"kind": "FUNCTION_INVOCATION",
"functionSelect": {
"endPosition": "58",
"kind": "IDENTIFIER",
"name": "func",
"startPosition": "54"
},
"arguments": [],
"startPosition": "54"
},
"endPosition": "58",
"kind": "NEW",
"startPosition": "50"
},
{
"constructorExpression": {
"endPosition": "71",
"kind": "FUNCTION_INVOCATION",
"functionSelect": {
"identifier": "init",
"expression": {
"endPosition": "66",
"kind": "IDENTIFIER",
"name": "obj",
"startPosition": "63"
},
"endPosition": "71",
"kind": "MEMBER_SELECT",
"startPosition": "63"
},
"arguments": [],
"startPosition": "66"
},
"endPosition": "71",
"kind": "NEW",
"startPosition": "59"
}
]

View File

@ -0,0 +1,52 @@
/*
* Copyright (c) 2015, 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 object literal tree.
*
* @test
* @bug 8068306
* @option -scripting
* @run
*/
load(__DIR__ + "utils.js")
var code = <<EOF
({ foo: 343 })
obj = {};
p = { x: 10, y: 2 };
p = { 'x': 10, 'y': 2 };
p = { get x() { return xValue }, get y() { return yValue } };
p = { get foo() { return this._foo }, set foo(val) { this._foo = val } };
EOF
parse("objectLiteral.js", code, "-nse", new (Java.extend(visitor, {
visitObjectLiteral : function (node, obj) {
obj.push(convert(node))
}
})))

View File

@ -0,0 +1,310 @@
[
{
"endPosition": "14",
"kind": "OBJECT_LITERAL",
"startPosition": "2",
"properties": [
{
"getter": "null",
"endPosition": "8",
"kind": "PROPERTY",
"setter": "null",
"value": {
"endPosition": "12",
"kind": "NUMBER_LITERAL",
"value": "343",
"startPosition": "9"
},
"startPosition": "4",
"key": {
"endPosition": "7",
"kind": "IDENTIFIER",
"name": "foo",
"startPosition": "4"
}
}
]
},
{
"endPosition": "24",
"kind": "OBJECT_LITERAL",
"startPosition": "22",
"properties": []
},
{
"endPosition": "45",
"kind": "OBJECT_LITERAL",
"startPosition": "30",
"properties": [
{
"getter": "null",
"endPosition": "34",
"kind": "PROPERTY",
"setter": "null",
"value": {
"endPosition": "37",
"kind": "NUMBER_LITERAL",
"value": "10",
"startPosition": "35"
},
"startPosition": "32",
"key": {
"endPosition": "33",
"kind": "IDENTIFIER",
"name": "x",
"startPosition": "32"
}
},
{
"getter": "null",
"endPosition": "41",
"kind": "PROPERTY",
"setter": "null",
"value": {
"endPosition": "43",
"kind": "NUMBER_LITERAL",
"value": "2",
"startPosition": "42"
},
"startPosition": "39",
"key": {
"endPosition": "40",
"kind": "IDENTIFIER",
"name": "y",
"startPosition": "39"
}
}
]
},
{
"endPosition": "70",
"kind": "OBJECT_LITERAL",
"startPosition": "51",
"properties": [
{
"getter": "null",
"endPosition": "57",
"kind": "PROPERTY",
"setter": "null",
"value": {
"endPosition": "60",
"kind": "NUMBER_LITERAL",
"value": "10",
"startPosition": "58"
},
"startPosition": "54",
"key": {
"endPosition": "55",
"kind": "STRING_LITERAL",
"value": "x",
"startPosition": "54"
}
},
{
"getter": "null",
"endPosition": "66",
"kind": "PROPERTY",
"setter": "null",
"value": {
"endPosition": "68",
"kind": "NUMBER_LITERAL",
"value": "2",
"startPosition": "67"
},
"startPosition": "63",
"key": {
"endPosition": "64",
"kind": "STRING_LITERAL",
"value": "y",
"startPosition": "63"
}
}
]
},
{
"endPosition": "132",
"kind": "OBJECT_LITERAL",
"startPosition": "76",
"properties": [
{
"getter": {
"endPosition": "86",
"kind": "FUNCTION_EXPRESSION",
"name": "null",
"body": {
"endPosition": "101",
"kind": "BLOCK",
"statements": [
{
"expression": {
"endPosition": "101",
"kind": "IDENTIFIER",
"name": "xValue",
"startPosition": "95"
},
"endPosition": "101",
"kind": "RETURN",
"startPosition": "88"
}
],
"startPosition": "86"
},
"strict": "false",
"startPosition": "86",
"parameters": []
},
"endPosition": "103",
"kind": "PROPERTY",
"setter": "null",
"value": "null",
"startPosition": "78",
"key": {
"endPosition": "83",
"kind": "IDENTIFIER",
"name": "x",
"startPosition": "82"
}
},
{
"getter": {
"endPosition": "113",
"kind": "FUNCTION_EXPRESSION",
"name": "null",
"body": {
"endPosition": "128",
"kind": "BLOCK",
"statements": [
{
"expression": {
"endPosition": "128",
"kind": "IDENTIFIER",
"name": "yValue",
"startPosition": "122"
},
"endPosition": "128",
"kind": "RETURN",
"startPosition": "115"
}
],
"startPosition": "113"
},
"strict": "false",
"startPosition": "113",
"parameters": []
},
"endPosition": "130",
"kind": "PROPERTY",
"setter": "null",
"value": "null",
"startPosition": "105",
"key": {
"endPosition": "110",
"kind": "IDENTIFIER",
"name": "y",
"startPosition": "109"
}
}
]
},
{
"endPosition": "206",
"kind": "OBJECT_LITERAL",
"startPosition": "138",
"properties": [
{
"getter": {
"endPosition": "150",
"kind": "FUNCTION_EXPRESSION",
"name": "null",
"body": {
"endPosition": "168",
"kind": "BLOCK",
"statements": [
{
"expression": {
"identifier": "_foo",
"expression": {
"endPosition": "163",
"kind": "IDENTIFIER",
"name": "this",
"startPosition": "159"
},
"endPosition": "168",
"kind": "MEMBER_SELECT",
"startPosition": "159"
},
"endPosition": "168",
"kind": "RETURN",
"startPosition": "152"
}
],
"startPosition": "150"
},
"strict": "false",
"startPosition": "150",
"parameters": []
},
"endPosition": "170",
"kind": "PROPERTY",
"setter": {
"endPosition": "185",
"kind": "FUNCTION_EXPRESSION",
"name": "null",
"body": {
"endPosition": "202",
"kind": "BLOCK",
"statements": [
{
"expression": {
"expression": {
"endPosition": "202",
"kind": "IDENTIFIER",
"name": "val",
"startPosition": "199"
},
"endPosition": "202",
"kind": "ASSIGNMENT",
"variable": {
"identifier": "_foo",
"expression": {
"endPosition": "191",
"kind": "IDENTIFIER",
"name": "this",
"startPosition": "187"
},
"endPosition": "196",
"kind": "MEMBER_SELECT",
"startPosition": "187"
},
"startPosition": "187"
},
"endPosition": "202",
"kind": "EXPRESSION_STATEMENT",
"startPosition": "187"
}
],
"startPosition": "185"
},
"strict": "false",
"startPosition": "185",
"parameters": [
{
"endPosition": "183",
"kind": "IDENTIFIER",
"name": "val",
"startPosition": "180"
}
]
},
"value": "null",
"startPosition": "140",
"key": {
"endPosition": "147",
"kind": "IDENTIFIER",
"name": "foo",
"startPosition": "144"
}
}
]
}
]

View File

@ -0,0 +1,51 @@
/*
* Copyright (c) 2015, 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 property tree.
*
* @test
* @bug 8068306
* @option -scripting
* @run
*/
load(__DIR__ + "utils.js")
var code = <<EOF
var o = {
foo :'test',
_foo: call(),
$foo: function () {},
fo42: {}
}
EOF
parse("property.js", code, "-nse", new (Java.extend(visitor, {
visitProperty : function (node, obj) {
obj.push(convert(node))
}
})))

View File

@ -0,0 +1,92 @@
[
{
"getter": "null",
"endPosition": "17",
"kind": "PROPERTY",
"setter": "null",
"value": {
"endPosition": "22",
"kind": "STRING_LITERAL",
"value": "test",
"startPosition": "18"
},
"startPosition": "12",
"key": {
"endPosition": "15",
"kind": "IDENTIFIER",
"name": "foo",
"startPosition": "12"
}
},
{
"getter": "null",
"endPosition": "31",
"kind": "PROPERTY",
"setter": "null",
"value": {
"endPosition": "38",
"kind": "FUNCTION_INVOCATION",
"functionSelect": {
"endPosition": "36",
"kind": "IDENTIFIER",
"name": "call",
"startPosition": "32"
},
"arguments": [],
"startPosition": "32"
},
"startPosition": "26",
"key": {
"endPosition": "30",
"kind": "IDENTIFIER",
"name": "_foo",
"startPosition": "26"
}
},
{
"getter": "null",
"endPosition": "46",
"kind": "PROPERTY",
"setter": "null",
"value": {
"endPosition": "59",
"kind": "FUNCTION_EXPRESSION",
"name": "null",
"body": {
"endPosition": "60",
"kind": "BLOCK",
"statements": [],
"startPosition": "59"
},
"strict": "false",
"startPosition": "59",
"parameters": []
},
"startPosition": "41",
"key": {
"endPosition": "45",
"kind": "IDENTIFIER",
"name": "$foo",
"startPosition": "41"
}
},
{
"getter": "null",
"endPosition": "69",
"kind": "PROPERTY",
"setter": "null",
"value": {
"endPosition": "72",
"kind": "OBJECT_LITERAL",
"startPosition": "70",
"properties": []
},
"startPosition": "64",
"key": {
"endPosition": "68",
"kind": "IDENTIFIER",
"name": "fo42",
"startPosition": "64"
}
}
]

View File

@ -0,0 +1,48 @@
/*
* Copyright (c) 2015, 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 regexp expression tree.
*
* @test
* @bug 8068306
* @option -scripting
* @run
*/
load(__DIR__ + "utils.js")
var code = <<EOF
/[abc]/i;
/([^abc])*([a-z])+([^0-9])?(x|y)/ig.test();
/^\w\W\n\f\0$/igm;
EOF
parse("regexp.js", code, "-nse", new (Java.extend(visitor, {
visitRegExpLiteral : function (node, obj) {
obj.push(convert(node))
}
})))

View File

@ -0,0 +1,23 @@
[
{
"endPosition": "9",
"kind": "REGEXP_LITERAL",
"options": "i",
"pattern": "[abc]",
"startPosition": "1"
},
{
"endPosition": "46",
"kind": "REGEXP_LITERAL",
"options": "ig",
"pattern": "([^abc])*([a-z])+([^0-9])?(x|y)",
"startPosition": "11"
},
{
"endPosition": "72",
"kind": "REGEXP_LITERAL",
"options": "igm",
"pattern": "^\\w\\W\\n\\f\\0$",
"startPosition": "55"
}
]

View File

@ -0,0 +1,65 @@
/*
* Copyright (c) 2015, 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 return expression tree.
*
* @test
* @bug 8068306
* @option -scripting
* @run
*/
load(__DIR__ + "utils.js")
var code = <<EOF
function a () {
return 1;
}
function b () {
return function () {
return {}
}
}
function c() {
for(;;) {
return;
}
return
}
function d () {
while(true) {
return
}
}
EOF
parse("return.js", code, "-nse", new (Java.extend(visitor, {
visitReturn : function (node, obj) {
obj.push(convert(node))
}
})))

View File

@ -0,0 +1,62 @@
[
{
"expression": {
"endPosition": "29",
"kind": "NUMBER_LITERAL",
"value": "1",
"startPosition": "28"
},
"endPosition": "30",
"kind": "RETURN",
"startPosition": "21"
},
{
"expression": {
"endPosition": "72",
"kind": "FUNCTION_EXPRESSION",
"name": "null",
"body": {
"endPosition": "91",
"kind": "BLOCK",
"statements": [
{
"expression": {
"endPosition": "91",
"kind": "OBJECT_LITERAL",
"startPosition": "89",
"properties": []
},
"endPosition": "91",
"kind": "RETURN",
"startPosition": "82"
}
],
"startPosition": "72"
},
"strict": "false",
"startPosition": "72",
"parameters": []
},
"endPosition": "97",
"kind": "RETURN",
"startPosition": "53"
},
{
"expression": "null",
"endPosition": "144",
"kind": "RETURN",
"startPosition": "137"
},
{
"expression": "null",
"endPosition": "161",
"kind": "RETURN",
"startPosition": "155"
},
{
"expression": "null",
"endPosition": "213",
"kind": "RETURN",
"startPosition": "207"
}
]

View File

@ -0,0 +1,55 @@
/*
* Copyright (c) 2015, 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 switch statement tree.
*
* @test
* @bug 8068306
* @option -scripting
* @run
*/
load(__DIR__ + "utils.js")
var code = <<EOF
switch (key) {};
switch (key) {
case 2: hello();
break;
};
switch (key) {
case 4: hello(); break;
case 2: world(); break;
default: break
};
EOF
parse("switch.js", code, "-nse", new (Java.extend(visitor, {
visitSwitch: function (node, obj) {
obj.push(convert(node))
}
})))

View File

@ -0,0 +1,162 @@
[
{
"cases": [],
"expression": {
"endPosition": "12",
"kind": "IDENTIFIER",
"name": "key",
"startPosition": "9"
},
"endPosition": "16",
"kind": "SWITCH",
"startPosition": "1"
},
{
"cases": [
{
"expression": {
"endPosition": "43",
"kind": "NUMBER_LITERAL",
"value": "2",
"startPosition": "42"
},
"endPosition": "64",
"kind": "CASE",
"statements": [
{
"expression": {
"endPosition": "52",
"kind": "FUNCTION_INVOCATION",
"functionSelect": {
"endPosition": "50",
"kind": "IDENTIFIER",
"name": "hello",
"startPosition": "45"
},
"arguments": [],
"startPosition": "45"
},
"endPosition": "52",
"kind": "EXPRESSION_STATEMENT",
"startPosition": "45"
},
{
"endPosition": "64",
"kind": "BREAK",
"label": "null",
"startPosition": "58"
}
],
"startPosition": "37"
}
],
"expression": {
"endPosition": "29",
"kind": "IDENTIFIER",
"name": "key",
"startPosition": "26"
},
"endPosition": "66",
"kind": "SWITCH",
"startPosition": "18"
},
{
"cases": [
{
"expression": {
"endPosition": "93",
"kind": "NUMBER_LITERAL",
"value": "4",
"startPosition": "92"
},
"endPosition": "110",
"kind": "CASE",
"statements": [
{
"expression": {
"endPosition": "102",
"kind": "FUNCTION_INVOCATION",
"functionSelect": {
"endPosition": "100",
"kind": "IDENTIFIER",
"name": "hello",
"startPosition": "95"
},
"arguments": [],
"startPosition": "95"
},
"endPosition": "102",
"kind": "EXPRESSION_STATEMENT",
"startPosition": "95"
},
{
"endPosition": "110",
"kind": "BREAK",
"label": "null",
"startPosition": "104"
}
],
"startPosition": "87"
},
{
"expression": {
"endPosition": "121",
"kind": "NUMBER_LITERAL",
"value": "2",
"startPosition": "120"
},
"endPosition": "138",
"kind": "CASE",
"statements": [
{
"expression": {
"endPosition": "130",
"kind": "FUNCTION_INVOCATION",
"functionSelect": {
"endPosition": "128",
"kind": "IDENTIFIER",
"name": "world",
"startPosition": "123"
},
"arguments": [],
"startPosition": "123"
},
"endPosition": "130",
"kind": "EXPRESSION_STATEMENT",
"startPosition": "123"
},
{
"endPosition": "138",
"kind": "BREAK",
"label": "null",
"startPosition": "132"
}
],
"startPosition": "115"
},
{
"expression": "null",
"endPosition": "157",
"kind": "CASE",
"statements": [
{
"endPosition": "157",
"kind": "BREAK",
"label": "null",
"startPosition": "152"
}
],
"startPosition": "143"
}
],
"expression": {
"endPosition": "79",
"kind": "IDENTIFIER",
"name": "key",
"startPosition": "76"
},
"endPosition": "159",
"kind": "SWITCH",
"startPosition": "68"
}
]

View File

@ -0,0 +1,50 @@
/*
* Copyright (c) 2015, 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 throw statement tree.
*
* @test
* @bug 8068306
* @option -scripting
* @run
*/
load(__DIR__ + "utils.js")
var code = <<EOF
throw err;
throw 'wrong';
throw new TypeError;
throw new TypeError('not an array');
throw { msg: 'wrong!' };
EOF
parse("throw.js", code, "-nse", new (Java.extend(visitor, {
visitThrow: function (node, obj) {
obj.push(convert(node))
}
})))

View File

@ -0,0 +1,106 @@
[
{
"expression": {
"endPosition": "10",
"kind": "IDENTIFIER",
"name": "err",
"startPosition": "7"
},
"endPosition": "11",
"kind": "THROW",
"startPosition": "1"
},
{
"expression": {
"endPosition": "24",
"kind": "STRING_LITERAL",
"value": "wrong",
"startPosition": "19"
},
"endPosition": "26",
"kind": "THROW",
"startPosition": "12"
},
{
"expression": {
"constructorExpression": {
"endPosition": "46",
"kind": "FUNCTION_INVOCATION",
"functionSelect": {
"endPosition": "46",
"kind": "IDENTIFIER",
"name": "TypeError",
"startPosition": "37"
},
"arguments": [],
"startPosition": "37"
},
"endPosition": "46",
"kind": "NEW",
"startPosition": "33"
},
"endPosition": "47",
"kind": "THROW",
"startPosition": "27"
},
{
"expression": {
"constructorExpression": {
"endPosition": "83",
"kind": "FUNCTION_INVOCATION",
"functionSelect": {
"endPosition": "67",
"kind": "IDENTIFIER",
"name": "TypeError",
"startPosition": "58"
},
"arguments": [
{
"endPosition": "81",
"kind": "STRING_LITERAL",
"value": "not an array",
"startPosition": "69"
}
],
"startPosition": "58"
},
"endPosition": "83",
"kind": "NEW",
"startPosition": "54"
},
"endPosition": "84",
"kind": "THROW",
"startPosition": "48"
},
{
"expression": {
"endPosition": "108",
"kind": "OBJECT_LITERAL",
"startPosition": "91",
"properties": [
{
"getter": "null",
"endPosition": "97",
"kind": "PROPERTY",
"setter": "null",
"value": {
"endPosition": "105",
"kind": "STRING_LITERAL",
"value": "wrong!",
"startPosition": "99"
},
"startPosition": "93",
"key": {
"endPosition": "96",
"kind": "IDENTIFIER",
"name": "msg",
"startPosition": "93"
}
}
]
},
"endPosition": "109",
"kind": "THROW",
"startPosition": "85"
}
]

View File

@ -0,0 +1,50 @@
/*
* Copyright (c) 2014, 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 try statement tree.
*
* @test
* @bug 8068306
* @option -scripting
* @run
*/
load(__DIR__ + "utils.js")
var code = <<EOF
try { } catch (e) { }
try { } catch (e) { } finally {}
try { } finally {}
try { } catch (e) { handle() }
try { that() } catch (e) { handle() } finally { clean() }
EOF
parse("throw.js", code, "-nse", new (Java.extend(visitor, {
visitTry: function (node, obj) {
obj.push(convert(node))
}
})))

View File

@ -0,0 +1,230 @@
[
{
"endPosition": "22",
"kind": "TRY",
"catches": [
{
"condition": "null",
"endPosition": "22",
"kind": "CATCH",
"parameter": {
"endPosition": "17",
"kind": "IDENTIFIER",
"name": "e",
"startPosition": "16"
},
"block": {
"endPosition": "22",
"kind": "BLOCK",
"statements": [],
"startPosition": "19"
},
"startPosition": "9"
}
],
"block": {
"endPosition": "8",
"kind": "BLOCK",
"statements": [],
"startPosition": "5"
},
"finallyBlock": "null",
"startPosition": "1"
},
{
"endPosition": "55",
"kind": "TRY",
"catches": [
{
"condition": "null",
"endPosition": "44",
"kind": "CATCH",
"parameter": {
"endPosition": "39",
"kind": "IDENTIFIER",
"name": "e",
"startPosition": "38"
},
"block": {
"endPosition": "44",
"kind": "BLOCK",
"statements": [],
"startPosition": "41"
},
"startPosition": "31"
}
],
"block": {
"endPosition": "30",
"kind": "BLOCK",
"statements": [],
"startPosition": "27"
},
"finallyBlock": {
"endPosition": "55",
"kind": "BLOCK",
"statements": [],
"startPosition": "53"
},
"startPosition": "23"
},
{
"endPosition": "74",
"kind": "TRY",
"catches": [],
"block": {
"endPosition": "63",
"kind": "BLOCK",
"statements": [],
"startPosition": "60"
},
"finallyBlock": {
"endPosition": "74",
"kind": "BLOCK",
"statements": [],
"startPosition": "72"
},
"startPosition": "56"
},
{
"endPosition": "105",
"kind": "TRY",
"catches": [
{
"condition": "null",
"endPosition": "105",
"kind": "CATCH",
"parameter": {
"endPosition": "91",
"kind": "IDENTIFIER",
"name": "e",
"startPosition": "90"
},
"block": {
"endPosition": "105",
"kind": "BLOCK",
"statements": [
{
"expression": {
"endPosition": "103",
"kind": "FUNCTION_INVOCATION",
"functionSelect": {
"endPosition": "101",
"kind": "IDENTIFIER",
"name": "handle",
"startPosition": "95"
},
"arguments": [],
"startPosition": "95"
},
"endPosition": "103",
"kind": "EXPRESSION_STATEMENT",
"startPosition": "95"
}
],
"startPosition": "93"
},
"startPosition": "83"
}
],
"block": {
"endPosition": "82",
"kind": "BLOCK",
"statements": [],
"startPosition": "79"
},
"finallyBlock": "null",
"startPosition": "75"
},
{
"endPosition": "163",
"kind": "TRY",
"catches": [
{
"condition": "null",
"endPosition": "143",
"kind": "CATCH",
"parameter": {
"endPosition": "129",
"kind": "IDENTIFIER",
"name": "e",
"startPosition": "128"
},
"block": {
"endPosition": "143",
"kind": "BLOCK",
"statements": [
{
"expression": {
"endPosition": "141",
"kind": "FUNCTION_INVOCATION",
"functionSelect": {
"endPosition": "139",
"kind": "IDENTIFIER",
"name": "handle",
"startPosition": "133"
},
"arguments": [],
"startPosition": "133"
},
"endPosition": "141",
"kind": "EXPRESSION_STATEMENT",
"startPosition": "133"
}
],
"startPosition": "131"
},
"startPosition": "121"
}
],
"block": {
"endPosition": "120",
"kind": "BLOCK",
"statements": [
{
"expression": {
"endPosition": "118",
"kind": "FUNCTION_INVOCATION",
"functionSelect": {
"endPosition": "116",
"kind": "IDENTIFIER",
"name": "that",
"startPosition": "112"
},
"arguments": [],
"startPosition": "112"
},
"endPosition": "118",
"kind": "EXPRESSION_STATEMENT",
"startPosition": "112"
}
],
"startPosition": "110"
},
"finallyBlock": {
"endPosition": "163",
"kind": "BLOCK",
"statements": [
{
"expression": {
"endPosition": "161",
"kind": "FUNCTION_INVOCATION",
"functionSelect": {
"endPosition": "159",
"kind": "IDENTIFIER",
"name": "clean",
"startPosition": "154"
},
"arguments": [],
"startPosition": "154"
},
"endPosition": "161",
"kind": "EXPRESSION_STATEMENT",
"startPosition": "154"
}
],
"startPosition": "152"
},
"startPosition": "106"
}
]

View File

@ -0,0 +1,56 @@
/*
* Copyright (c) 2015, 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 unary expressions tree.
*
* @test
* @bug 8068306
* @option -scripting
* @run
*/
load(__DIR__ + "utils.js")
var code = <<EOF
x++;
x--;
delete x;
void x;
typeof x;
++x;
--x;
+x;
-x;
~x;
!x;
EOF
parse("unary.js", code, "-nse", new (Java.extend(visitor, {
visitUnary: function (node, obj) {
obj.push(convert(node))
}
})))

View File

@ -0,0 +1,123 @@
[
{
"expression": {
"endPosition": "2",
"kind": "IDENTIFIER",
"name": "x",
"startPosition": "1"
},
"endPosition": "4",
"kind": "POSTFIX_INCREMENT",
"startPosition": "1"
},
{
"expression": {
"endPosition": "7",
"kind": "IDENTIFIER",
"name": "x",
"startPosition": "6"
},
"endPosition": "9",
"kind": "POSTFIX_DECREMENT",
"startPosition": "6"
},
{
"expression": {
"endPosition": "19",
"kind": "IDENTIFIER",
"name": "x",
"startPosition": "18"
},
"endPosition": "19",
"kind": "DELETE",
"startPosition": "11"
},
{
"expression": {
"endPosition": "27",
"kind": "IDENTIFIER",
"name": "x",
"startPosition": "26"
},
"endPosition": "27",
"kind": "VOID",
"startPosition": "21"
},
{
"expression": {
"endPosition": "37",
"kind": "IDENTIFIER",
"name": "x",
"startPosition": "36"
},
"endPosition": "37",
"kind": "TYPEOF",
"startPosition": "29"
},
{
"expression": {
"endPosition": "42",
"kind": "IDENTIFIER",
"name": "x",
"startPosition": "41"
},
"endPosition": "42",
"kind": "PREFIX_INCREMENT",
"startPosition": "39"
},
{
"expression": {
"endPosition": "47",
"kind": "IDENTIFIER",
"name": "x",
"startPosition": "46"
},
"endPosition": "47",
"kind": "PREFIX_DECREMENT",
"startPosition": "44"
},
{
"expression": {
"endPosition": "51",
"kind": "IDENTIFIER",
"name": "x",
"startPosition": "50"
},
"endPosition": "51",
"kind": "PLUS",
"startPosition": "49"
},
{
"expression": {
"endPosition": "55",
"kind": "IDENTIFIER",
"name": "x",
"startPosition": "54"
},
"endPosition": "55",
"kind": "MINUS",
"startPosition": "53"
},
{
"expression": {
"endPosition": "59",
"kind": "IDENTIFIER",
"name": "x",
"startPosition": "58"
},
"endPosition": "59",
"kind": "BITWISE_COMPLEMENT",
"startPosition": "57"
},
{
"expression": {
"endPosition": "63",
"kind": "IDENTIFIER",
"name": "x",
"startPosition": "62"
},
"endPosition": "63",
"kind": "LOGICAL_COMPLEMENT",
"startPosition": "61"
}
]

View File

@ -0,0 +1,82 @@
/*
* Copyright (c) 2015, 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.
*/
/**
*
* @subtest
*/
var parser = Java.type('jdk.nashorn.api.tree.Parser');
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 file = Java.type('java.io.File')
var cls = Java.type('java.lang.Class')
function convert (value) {
if (!value) {
return value;
}
var obj = Object.bindProperties({}, value)
var result = {}
for (var i in obj) {
var val = obj[i]
if (typeof(val) == 'object') {
if (val instanceof cls) {
continue;
}
if (val instanceof tree) {
result[i] = convert(val)
}
else if (val instanceof list) {
var lst = []
for (var j in val) {
lst.push(convert(val[j]))
}
result[i] = lst
}
else {
result[i] = String(val)
}
} else if (typeof(val) != 'function') {
result[i] = String(val)
}
}
return result
}
function parse(name, code, args, visitor, listener) {
var tree = parser.create(args).parse(name, code, listener || null)
var results = []
tree.accept(visitor, results)
print(JSON.stringify(results, null, 2))
}
function parseDiagnostic (code, args) {
var messages = new Array()
var tree = parser.create(args).parse("test.js", code, function (message) {
messages.push(convert(message))
})
print(JSON.stringify(messages, null, 2))
}

View File

@ -0,0 +1,48 @@
/*
* Copyright (c) 2015, 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 variable statement tree.
*
* @test
* @bug 8068306
* @option -scripting
* @run
*/
load(__DIR__ + "utils.js")
var code = <<EOF
var a
var x = 1
var x23, $y = 1, _z
EOF
parse("variable.js", code, "-nse", new (Java.extend(visitor, {
visitVariable: function (node, obj) {
obj.push(convert(node))
}
})))

View File

@ -0,0 +1,47 @@
[
{
"endPosition": "6",
"kind": "VARIABLE",
"name": "a",
"startPosition": "5",
"initializer": "null"
},
{
"endPosition": "16",
"kind": "VARIABLE",
"name": "x",
"startPosition": "11",
"initializer": {
"endPosition": "16",
"kind": "NUMBER_LITERAL",
"value": "1",
"startPosition": "15"
}
},
{
"endPosition": "24",
"kind": "VARIABLE",
"name": "x23",
"startPosition": "21",
"initializer": "null"
},
{
"endPosition": "32",
"kind": "VARIABLE",
"name": "$y",
"startPosition": "26",
"initializer": {
"endPosition": "32",
"kind": "NUMBER_LITERAL",
"value": "1",
"startPosition": "31"
}
},
{
"endPosition": "36",
"kind": "VARIABLE",
"name": "_z",
"startPosition": "34",
"initializer": "null"
}
]

View File

@ -0,0 +1,51 @@
/*
* Copyright (c) 2015, 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 while statement tree.
*
* @test
* @bug 8068306
* @option -scripting
* @run
*/
load(__DIR__ + "utils.js")
var code = <<EOF
while(true);
while(false) {}
while(2 > 1) {}
label:while(fun()) { break label}
label:while(!fun()) continue label;
while(true) continue
EOF
parse("while.js", code, "-nse", new (Java.extend(visitor, {
visitWhileLoop: function (node, obj) {
obj.push(convert(node))
}
})))

View File

@ -0,0 +1,138 @@
[
{
"condition": {
"endPosition": "11",
"kind": "BOOLEAN_LITERAL",
"value": "true",
"startPosition": "7"
},
"endPosition": "13",
"kind": "WHILE_LOOP",
"statement": {
"endPosition": "13",
"kind": "EMPTY_STATEMENT",
"startPosition": "12"
},
"startPosition": "1"
},
{
"condition": {
"endPosition": "25",
"kind": "BOOLEAN_LITERAL",
"value": "false",
"startPosition": "20"
},
"endPosition": "29",
"kind": "WHILE_LOOP",
"statement": {
"endPosition": "29",
"kind": "BLOCK",
"statements": [],
"startPosition": "27"
},
"startPosition": "14"
},
{
"condition": {
"leftOperand": {
"endPosition": "37",
"kind": "NUMBER_LITERAL",
"value": "2",
"startPosition": "36"
},
"endPosition": "41",
"kind": "GREATER_THAN",
"rightOperand": {
"endPosition": "41",
"kind": "NUMBER_LITERAL",
"value": "1",
"startPosition": "40"
},
"startPosition": "36"
},
"endPosition": "45",
"kind": "WHILE_LOOP",
"statement": {
"endPosition": "45",
"kind": "BLOCK",
"statements": [],
"startPosition": "43"
},
"startPosition": "30"
},
{
"condition": {
"endPosition": "63",
"kind": "FUNCTION_INVOCATION",
"functionSelect": {
"endPosition": "61",
"kind": "IDENTIFIER",
"name": "fun",
"startPosition": "58"
},
"arguments": [],
"startPosition": "58"
},
"endPosition": "79",
"kind": "WHILE_LOOP",
"statement": {
"endPosition": "79",
"kind": "BLOCK",
"statements": [
{
"endPosition": "78",
"kind": "BREAK",
"label": "label",
"startPosition": "67"
}
],
"startPosition": "65"
},
"startPosition": "52"
},
{
"condition": {
"expression": {
"endPosition": "98",
"kind": "FUNCTION_INVOCATION",
"functionSelect": {
"endPosition": "96",
"kind": "IDENTIFIER",
"name": "fun",
"startPosition": "93"
},
"arguments": [],
"startPosition": "93"
},
"endPosition": "98",
"kind": "LOGICAL_COMPLEMENT",
"startPosition": "92"
},
"endPosition": "115",
"kind": "WHILE_LOOP",
"statement": {
"endPosition": "115",
"kind": "CONTINUE",
"label": "label",
"startPosition": "100"
},
"startPosition": "86"
},
{
"condition": {
"endPosition": "126",
"kind": "BOOLEAN_LITERAL",
"value": "true",
"startPosition": "122"
},
"endPosition": "136",
"kind": "WHILE_LOOP",
"statement": {
"endPosition": "136",
"kind": "CONTINUE",
"label": "null",
"startPosition": "128"
},
"startPosition": "116"
}
]

View File

@ -0,0 +1,50 @@
/*
* Copyright (c) 2015, 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 with statement tree.
*
* @test
* @bug 8068306
* @option -scripting
* @run
*/
load(__DIR__ + "utils.js")
var code = <<EOF
with (scope) { x = y };
with ({x:'test'}) print(x)
with ({}) {
z = this.x
}
EOF
parse("with.js", code, "-nse", new (Java.extend(visitor, {
visitWith: function (node, obj) {
obj.push(convert(node))
}
})))

View File

@ -0,0 +1,143 @@
[
{
"endPosition": "23",
"kind": "WITH",
"scope": {
"endPosition": "12",
"kind": "IDENTIFIER",
"name": "scope",
"startPosition": "7"
},
"statement": {
"endPosition": "23",
"kind": "BLOCK",
"statements": [
{
"expression": {
"expression": {
"endPosition": "21",
"kind": "IDENTIFIER",
"name": "y",
"startPosition": "20"
},
"endPosition": "21",
"kind": "ASSIGNMENT",
"variable": {
"endPosition": "17",
"kind": "IDENTIFIER",
"name": "x",
"startPosition": "16"
},
"startPosition": "16"
},
"endPosition": "21",
"kind": "EXPRESSION_STATEMENT",
"startPosition": "16"
}
],
"startPosition": "14"
},
"startPosition": "1"
},
{
"endPosition": "51",
"kind": "WITH",
"scope": {
"endPosition": "41",
"kind": "OBJECT_LITERAL",
"startPosition": "31",
"properties": [
{
"getter": "null",
"endPosition": "34",
"kind": "PROPERTY",
"setter": "null",
"value": {
"endPosition": "39",
"kind": "STRING_LITERAL",
"value": "test",
"startPosition": "35"
},
"startPosition": "32",
"key": {
"endPosition": "33",
"kind": "IDENTIFIER",
"name": "x",
"startPosition": "32"
}
}
]
},
"statement": {
"expression": {
"endPosition": "51",
"kind": "FUNCTION_INVOCATION",
"functionSelect": {
"endPosition": "48",
"kind": "IDENTIFIER",
"name": "print",
"startPosition": "43"
},
"arguments": [
{
"endPosition": "50",
"kind": "IDENTIFIER",
"name": "x",
"startPosition": "49"
}
],
"startPosition": "43"
},
"endPosition": "51",
"kind": "EXPRESSION_STATEMENT",
"startPosition": "43"
},
"startPosition": "25"
},
{
"endPosition": "80",
"kind": "WITH",
"scope": {
"endPosition": "60",
"kind": "OBJECT_LITERAL",
"startPosition": "58",
"properties": []
},
"statement": {
"endPosition": "80",
"kind": "BLOCK",
"statements": [
{
"expression": {
"expression": {
"identifier": "x",
"expression": {
"endPosition": "76",
"kind": "IDENTIFIER",
"name": "this",
"startPosition": "72"
},
"endPosition": "78",
"kind": "MEMBER_SELECT",
"startPosition": "72"
},
"endPosition": "78",
"kind": "ASSIGNMENT",
"variable": {
"endPosition": "69",
"kind": "IDENTIFIER",
"name": "z",
"startPosition": "68"
},
"startPosition": "68"
},
"endPosition": "78",
"kind": "EXPRESSION_STATEMENT",
"startPosition": "68"
}
],
"startPosition": "62"
},
"startPosition": "52"
}
]