acorn
Version:
ECMAScript parser
2,700 lines (2,665 loc) • 533 kB
JavaScript
// Tests largely based on those of Esprima
// (http://esprima.org/test/)
if (typeof exports != "undefined") {
var driver = require("./driver.js");
var test = driver.test, testFail = driver.testFail, testAssert = driver.testAssert, misMatch = driver.misMatch;
var acorn = require("..");
}
test("this\n", {
type: "Program",
body: [
{
type: "ExpressionStatement",
expression: {
type: "ThisExpression",
loc: {
start: {
line: 1,
column: 0
},
end: {
line: 1,
column: 4
}
}
},
loc: {
start: {
line: 1,
column: 0
},
end: {
line: 1,
column: 4
}
}
}
],
loc: {
start: {
line: 1,
column: 0
},
end: {
line: 2,
column: 0
}
}
});
test("null\n", {
type: "Program",
body: [
{
type: "ExpressionStatement",
expression: {
type: "Literal",
value: null,
loc: {
start: {
line: 1,
column: 0
},
end: {
line: 1,
column: 4
}
}
},
loc: {
start: {
line: 1,
column: 0
},
end: {
line: 1,
column: 4
}
}
}
],
loc: {
start: {
line: 1,
column: 0
},
end: {
line: 2,
column: 0
}
}
});
test("\n 42\n\n", {
type: "Program",
body: [
{
type: "ExpressionStatement",
expression: {
type: "Literal",
value: 42,
loc: {
start: {
line: 2,
column: 4
},
end: {
line: 2,
column: 6
}
}
},
loc: {
start: {
line: 2,
column: 4
},
end: {
line: 2,
column: 6
}
}
}
],
loc: {
start: {
line: 1,
column: 0
},
end: {
line: 4,
column: 0
}
}
});
test("/foobar/", {
type: "Program",
body: [
{
type: "ExpressionStatement",
expression: {
type: "Literal",
value: /foobar/,
regex: {
pattern: "foobar",
flags: ""
},
loc: {
start: {
line: 1,
column: 0
},
end: {
line: 1,
column: 8
}
}
}
}
]
});
test("/[a-z]/g", {
type: "Program",
body: [
{
type: "ExpressionStatement",
expression: {
type: "Literal",
value: /[a-z]/,
regex: {
pattern: "[a-z]",
flags: "g"
},
loc: {
start: {
line: 1,
column: 0
},
end: {
line: 1,
column: 8
}
}
}
}
]
});
test("(1 + 2 ) * 3", {
type: "Program",
body: [
{
type: "ExpressionStatement",
expression: {
type: "BinaryExpression",
left: {
type: "BinaryExpression",
left: {
type: "Literal",
value: 1,
loc: {
start: {
line: 1,
column: 1
},
end: {
line: 1,
column: 2
}
}
},
operator: "+",
right: {
type: "Literal",
value: 2,
loc: {
start: {
line: 1,
column: 5
},
end: {
line: 1,
column: 6
}
}
},
loc: {
start: {
line: 1,
column: 1
},
end: {
line: 1,
column: 6
}
}
},
operator: "*",
right: {
type: "Literal",
value: 3,
loc: {
start: {
line: 1,
column: 11
},
end: {
line: 1,
column: 12
}
}
},
loc: {
start: {
line: 1,
column: 0
},
end: {
line: 1,
column: 12
}
}
},
loc: {
start: {
line: 1,
column: 0
},
end: {
line: 1,
column: 12
}
}
}
],
loc: {
start: {
line: 1,
column: 0
},
end: {
line: 1,
column: 12
}
}
});
test("(1 + 2 ) * 3", {
type: "Program",
body: [
{
type: "ExpressionStatement",
expression: {
type: "BinaryExpression",
left: {
type: "ParenthesizedExpression",
expression: {
type: "BinaryExpression",
left: {
type: "Literal",
value: 1,
loc: {
start: {
line: 1,
column: 1
},
end: {
line: 1,
column: 2
}
}
},
operator: "+",
right: {
type: "Literal",
value: 2,
loc: {
start: {
line: 1,
column: 5
},
end: {
line: 1,
column: 6
}
}
},
loc: {
start: {
line: 1,
column: 1
},
end: {
line: 1,
column: 6
}
}
},
loc: {
start: {
line: 1,
column: 0
},
end: {
line: 1,
column: 8
}
}
},
operator: "*",
right: {
type: "Literal",
value: 3,
loc: {
start: {
line: 1,
column: 11
},
end: {
line: 1,
column: 12
}
}
},
loc: {
start: {
line: 1,
column: 0
},
end: {
line: 1,
column: 12
}
}
},
loc: {
start: {
line: 1,
column: 0
},
end: {
line: 1,
column: 12
}
}
}
],
loc: {
start: {
line: 1,
column: 0
},
end: {
line: 1,
column: 12
}
}
}, {
locations: true,
preserveParens: true
});
testFail("(x) = 23", "Assigning to rvalue (1:0)", { preserveParens: true });
test("x = []", {
type: "Program",
body: [
{
type: "ExpressionStatement",
expression: {
type: "AssignmentExpression",
operator: "=",
left: {
type: "Identifier",
name: "x",
loc: {
start: {
line: 1,
column: 0
},
end: {
line: 1,
column: 1
}
}
},
right: {
type: "ArrayExpression",
elements: [],
loc: {
start: {
line: 1,
column: 4
},
end: {
line: 1,
column: 6
}
}
},
loc: {
start: {
line: 1,
column: 0
},
end: {
line: 1,
column: 6
}
}
},
loc: {
start: {
line: 1,
column: 0
},
end: {
line: 1,
column: 6
}
}
}
],
loc: {
start: {
line: 1,
column: 0
},
end: {
line: 1,
column: 6
}
}
});
test("x = [ ]", {
type: "Program",
body: [
{
type: "ExpressionStatement",
expression: {
type: "AssignmentExpression",
operator: "=",
left: {
type: "Identifier",
name: "x",
loc: {
start: {
line: 1,
column: 0
},
end: {
line: 1,
column: 1
}
}
},
right: {
type: "ArrayExpression",
elements: [],
loc: {
start: {
line: 1,
column: 4
},
end: {
line: 1,
column: 7
}
}
},
loc: {
start: {
line: 1,
column: 0
},
end: {
line: 1,
column: 7
}
}
},
loc: {
start: {
line: 1,
column: 0
},
end: {
line: 1,
column: 7
}
}
}
],
loc: {
start: {
line: 1,
column: 0
},
end: {
line: 1,
column: 7
}
}
});
test("x = [ 42 ]", {
type: "Program",
body: [
{
type: "ExpressionStatement",
expression: {
type: "AssignmentExpression",
operator: "=",
left: {
type: "Identifier",
name: "x",
loc: {
start: {
line: 1,
column: 0
},
end: {
line: 1,
column: 1
}
}
},
right: {
type: "ArrayExpression",
elements: [
{
type: "Literal",
value: 42,
loc: {
start: {
line: 1,
column: 6
},
end: {
line: 1,
column: 8
}
}
}
],
loc: {
start: {
line: 1,
column: 4
},
end: {
line: 1,
column: 10
}
}
},
loc: {
start: {
line: 1,
column: 0
},
end: {
line: 1,
column: 10
}
}
},
loc: {
start: {
line: 1,
column: 0
},
end: {
line: 1,
column: 10
}
}
}
],
loc: {
start: {
line: 1,
column: 0
},
end: {
line: 1,
column: 10
}
}
});
test("x = [ 42, ]", {
type: "Program",
body: [
{
type: "ExpressionStatement",
expression: {
type: "AssignmentExpression",
operator: "=",
left: {
type: "Identifier",
name: "x",
loc: {
start: {
line: 1,
column: 0
},
end: {
line: 1,
column: 1
}
}
},
right: {
type: "ArrayExpression",
elements: [
{
type: "Literal",
value: 42,
loc: {
start: {
line: 1,
column: 6
},
end: {
line: 1,
column: 8
}
}
}
],
loc: {
start: {
line: 1,
column: 4
},
end: {
line: 1,
column: 11
}
}
},
loc: {
start: {
line: 1,
column: 0
},
end: {
line: 1,
column: 11
}
}
},
loc: {
start: {
line: 1,
column: 0
},
end: {
line: 1,
column: 11
}
}
}
],
loc: {
start: {
line: 1,
column: 0
},
end: {
line: 1,
column: 11
}
}
});
test("x = [ ,, 42 ]", {
type: "Program",
body: [
{
type: "ExpressionStatement",
expression: {
type: "AssignmentExpression",
operator: "=",
left: {
type: "Identifier",
name: "x",
loc: {
start: {
line: 1,
column: 0
},
end: {
line: 1,
column: 1
}
}
},
right: {
type: "ArrayExpression",
elements: [
null,
null,
{
type: "Literal",
value: 42,
loc: {
start: {
line: 1,
column: 9
},
end: {
line: 1,
column: 11
}
}
}
],
loc: {
start: {
line: 1,
column: 4
},
end: {
line: 1,
column: 13
}
}
},
loc: {
start: {
line: 1,
column: 0
},
end: {
line: 1,
column: 13
}
}
},
loc: {
start: {
line: 1,
column: 0
},
end: {
line: 1,
column: 13
}
}
}
],
loc: {
start: {
line: 1,
column: 0
},
end: {
line: 1,
column: 13
}
}
});
test("x = [ 1, 2, 3, ]", {
type: "Program",
body: [
{
type: "ExpressionStatement",
expression: {
type: "AssignmentExpression",
operator: "=",
left: {
type: "Identifier",
name: "x",
loc: {
start: {
line: 1,
column: 0
},
end: {
line: 1,
column: 1
}
}
},
right: {
type: "ArrayExpression",
elements: [
{
type: "Literal",
value: 1,
loc: {
start: {
line: 1,
column: 6
},
end: {
line: 1,
column: 7
}
}
},
{
type: "Literal",
value: 2,
loc: {
start: {
line: 1,
column: 9
},
end: {
line: 1,
column: 10
}
}
},
{
type: "Literal",
value: 3,
loc: {
start: {
line: 1,
column: 12
},
end: {
line: 1,
column: 13
}
}
}
],
loc: {
start: {
line: 1,
column: 4
},
end: {
line: 1,
column: 16
}
}
},
loc: {
start: {
line: 1,
column: 0
},
end: {
line: 1,
column: 16
}
}
},
loc: {
start: {
line: 1,
column: 0
},
end: {
line: 1,
column: 16
}
}
}
],
loc: {
start: {
line: 1,
column: 0
},
end: {
line: 1,
column: 16
}
}
});
test("x = [ 1, 2,, 3, ]", {
type: "Program",
body: [
{
type: "ExpressionStatement",
expression: {
type: "AssignmentExpression",
operator: "=",
left: {
type: "Identifier",
name: "x",
loc: {
start: {
line: 1,
column: 0
},
end: {
line: 1,
column: 1
}
}
},
right: {
type: "ArrayExpression",
elements: [
{
type: "Literal",
value: 1,
loc: {
start: {
line: 1,
column: 6
},
end: {
line: 1,
column: 7
}
}
},
{
type: "Literal",
value: 2,
loc: {
start: {
line: 1,
column: 9
},
end: {
line: 1,
column: 10
}
}
},
null,
{
type: "Literal",
value: 3,
loc: {
start: {
line: 1,
column: 13
},
end: {
line: 1,
column: 14
}
}
}
],
loc: {
start: {
line: 1,
column: 4
},
end: {
line: 1,
column: 17
}
}
},
loc: {
start: {
line: 1,
column: 0
},
end: {
line: 1,
column: 17
}
}
},
loc: {
start: {
line: 1,
column: 0
},
end: {
line: 1,
column: 17
}
}
}
],
loc: {
start: {
line: 1,
column: 0
},
end: {
line: 1,
column: 17
}
}
});
test("日本語 = []", {
type: "Program",
body: [
{
type: "ExpressionStatement",
expression: {
type: "AssignmentExpression",
operator: "=",
left: {
type: "Identifier",
name: "日本語",
loc: {
start: {
line: 1,
column: 0
},
end: {
line: 1,
column: 3
}
}
},
right: {
type: "ArrayExpression",
elements: [],
loc: {
start: {
line: 1,
column: 6
},
end: {
line: 1,
column: 8
}
}
},
loc: {
start: {
line: 1,
column: 0
},
end: {
line: 1,
column: 8
}
}
},
loc: {
start: {
line: 1,
column: 0
},
end: {
line: 1,
column: 8
}
}
}
],
loc: {
start: {
line: 1,
column: 0
},
end: {
line: 1,
column: 8
}
}
});
test("T‿ = []", {
type: "Program",
body: [
{
type: "ExpressionStatement",
expression: {
type: "AssignmentExpression",
operator: "=",
left: {
type: "Identifier",
name: "T‿",
loc: {
start: {
line: 1,
column: 0
},
end: {
line: 1,
column: 2
}
}
},
right: {
type: "ArrayExpression",
elements: [],
loc: {
start: {
line: 1,
column: 5
},
end: {
line: 1,
column: 7
}
}
},
loc: {
start: {
line: 1,
column: 0
},
end: {
line: 1,
column: 7
}
}
},
loc: {
start: {
line: 1,
column: 0
},
end: {
line: 1,
column: 7
}
}
}
],
loc: {
start: {
line: 1,
column: 0
},
end: {
line: 1,
column: 7
}
}
});
test("T = []", {
type: "Program",
body: [
{
type: "ExpressionStatement",
expression: {
type: "AssignmentExpression",
operator: "=",
left: {
type: "Identifier",
name: "T",
loc: {
start: {
line: 1,
column: 0
},
end: {
line: 1,
column: 2
}
}
},
right: {
type: "ArrayExpression",
elements: [],
loc: {
start: {
line: 1,
column: 5
},
end: {
line: 1,
column: 7
}
}
},
loc: {
start: {
line: 1,
column: 0
},
end: {
line: 1,
column: 7
}
}
},
loc: {
start: {
line: 1,
column: 0
},
end: {
line: 1,
column: 7
}
}
}
],
loc: {
start: {
line: 1,
column: 0
},
end: {
line: 1,
column: 7
}
}
});
test("T = []", {
type: "Program",
body: [
{
type: "ExpressionStatement",
expression: {
type: "AssignmentExpression",
operator: "=",
left: {
type: "Identifier",
name: "T",
loc: {
start: {
line: 1,
column: 0
},
end: {
line: 1,
column: 2
}
}
},
right: {
type: "ArrayExpression",
elements: [],
loc: {
start: {
line: 1,
column: 5
},
end: {
line: 1,
column: 7
}
}
},
loc: {
start: {
line: 1,
column: 0
},
end: {
line: 1,
column: 7
}
}
},
loc: {
start: {
line: 1,
column: 0
},
end: {
line: 1,
column: 7
}
}
}
],
loc: {
start: {
line: 1,
column: 0
},
end: {
line: 1,
column: 7
}
}
});
test("ⅣⅡ = []", {
type: "Program",
body: [
{
type: "ExpressionStatement",
expression: {
type: "AssignmentExpression",
operator: "=",
left: {
type: "Identifier",
name: "ⅣⅡ",
loc: {
start: {
line: 1,
column: 0
},
end: {
line: 1,
column: 2
}
}
},
right: {
type: "ArrayExpression",
elements: [],
loc: {
start: {
line: 1,
column: 5
},
end: {
line: 1,
column: 7
}
}
},
loc: {
start: {
line: 1,
column: 0
},
end: {
line: 1,
column: 7
}
}
},
loc: {
start: {
line: 1,
column: 0
},
end: {
line: 1,
column: 7
}
}
}
],
loc: {
start: {
line: 1,
column: 0
},
end: {
line: 1,
column: 7
}
}
});
test("ⅣⅡ = []", {
type: "Program",
body: [
{
type: "ExpressionStatement",
expression: {
type: "AssignmentExpression",
operator: "=",
left: {
type: "Identifier",
name: "ⅣⅡ",
loc: {
start: {
line: 1,
column: 0
},
end: {
line: 1,
column: 2
}
}
},
right: {
type: "ArrayExpression",
elements: [],
loc: {
start: {
line: 1,
column: 5
},
end: {
line: 1,
column: 7
}
}
},
loc: {
start: {
line: 1,
column: 0
},
end: {
line: 1,
column: 7
}
}
},
loc: {
start: {
line: 1,
column: 0
},
end: {
line: 1,
column: 7
}
}
}
],
loc: {
start: {
line: 1,
column: 0
},
end: {
line: 1,
column: 7
}
}
});
test("x = {}", {
type: "Program",
body: [
{
type: "ExpressionStatement",
expression: {
type: "AssignmentExpression",
operator: "=",
left: {
type: "Identifier",
name: "x",
loc: {
start: {
line: 1,
column: 0
},
end: {
line: 1,
column: 1
}
}
},
right: {
type: "ObjectExpression",
properties: [],
loc: {
start: {
line: 1,
column: 4
},
end: {
line: 1,
column: 6
}
}
},
loc: {
start: {
line: 1,
column: 0
},
end: {
line: 1,
column: 6
}
}
},
loc: {
start: {
line: 1,
column: 0
},
end: {
line: 1,
column: 6
}
}
}
],
loc: {
start: {
line: 1,
column: 0
},
end: {
line: 1,
column: 6
}
}
});
test("x = { }", {
type: "Program",
body: [
{
type: "ExpressionStatement",
expression: {
type: "AssignmentExpression",
operator: "=",
left: {
type: "Identifier",
name: "x",
loc: {
start: {
line: 1,
column: 0
},
end: {
line: 1,
column: 1
}
}
},
right: {
type: "ObjectExpression",
properties: [],
loc: {
start: {
line: 1,
column: 4
},
end: {
line: 1,
column: 7
}
}
},
loc: {
start: {
line: 1,
column: 0
},
end: {
line: 1,
column: 7
}
}
},
loc: {
start: {
line: 1,
column: 0
},
end: {
line: 1,
column: 7
}
}
}
],
loc: {
start: {
line: 1,
column: 0
},
end: {
line: 1,
column: 7
}
}
});
test("x = { answer: 42 }", {
type: "Program",
body: [
{
type: "ExpressionStatement",
expression: {
type: "AssignmentExpression",
operator: "=",
left: {
type: "Identifier",
name: "x",
loc: {
start: {
line: 1,
column: 0
},
end: {
line: 1,
column: 1
}
}
},
right: {
type: "ObjectExpression",
properties: [
{
type: "Property",
key: {
type: "Identifier",
name: "answer",
loc: {
start: {
line: 1,
column: 6
},
end: {
line: 1,
column: 12
}
}
},
value: {
type: "Literal",
value: 42,
loc: {
start: {
line: 1,
column: 14
},
end: {
line: 1,
column: 16
}
}
},
kind: "init"
}
],
loc: {
start: {
line: 1,
column: 4
},
end: {
line: 1,
column: 18
}
}
},
loc: {
start: {
line: 1,
column: 0
},
end: {
line: 1,
column: 18
}
}
},
loc: {
start: {
line: 1,
column: 0
},
end: {
line: 1,
column: 18
}
}
}
],
loc: {
start: {
line: 1,
column: 0
},
end: {
line: 1,
column: 18
}
}
});
test("x = { if: 42 }", {
type: "Program",
body: [
{
type: "ExpressionStatement",
expression: {
type: "AssignmentExpression",
operator: "=",
left: {
type: "Identifier",
name: "x",
loc: {
start: {
line: 1,
column: 0
},
end: {
line: 1,
column: 1
}
}
},
right: {
type: "ObjectExpression",
properties: [
{
type: "Property",
key: {
type: "Identifier",
name: "if",
loc: {
start: {
line: 1,
column: 6
},
end: {
line: 1,
column: 8
}
}
},
value: {
type: "Literal",
value: 42,
loc: {
start: {
line: 1,
column: 10
},
end: {
line: 1,
column: 12
}
}
},
kind: "init"
}
],
loc: {
start: {
line: 1,
column: 4
},
end: {
line: 1,
column: 14
}
}
},
loc: {
start: {
line: 1,
column: 0
},
end: {
line: 1,
column: 14
}
}
},
loc: {
start: {
line: 1,
column: 0
},
end: {
line: 1,
column: 14
}
}
}
],
loc: {
start: {
line: 1,
column: 0
},
end: {
line: 1,
column: 14
}
}
});
test("x = { true: 42 }", {
type: "Program",
body: [
{
type: "ExpressionStatement",
expression: {
type: "AssignmentExpression",
operator: "=",
left: {
type: "Identifier",
name: "x",
loc: {
start: {
line: 1,
column: 0
},
end: {
line: 1,
column: 1
}
}
},
right: {
type: "ObjectExpression",
properties: [
{
type: "Property",
key: {
type: "Identifier",
name: "true",
loc: {
start: {
line: 1,
column: 6
},
end: {
line: 1,
column: 10
}
}
},
value: {
type: "Literal",
value: 42,
loc: {
start: {
line: 1,
column: 12
},
end: {
line: 1,
column: 14
}
}
},
kind: "init"
}
],
loc: {
start: {
line: 1,
column: 4
},
end: {
line: 1,
column: 16
}
}
},
loc: {
start: {
line: 1,
column: 0
},
end: {
line: 1,
column: 16
}
}
},
loc: {
start: {
line: 1,
column: 0
},
end: {
line: 1,
column: 16
}
}
}
],
loc: {
start: {
line: 1,
column: 0
},
end: {
line: 1,
column: 16
}
}
});
test("x = { false: 42 }", {
type: "Program",
body: [
{
type: "ExpressionStatement",
expression: {
type: "AssignmentExpression",
operator: "=",
left: {
type: "Identifier",
name: "x",
loc: {
start: {
line: 1,
column: 0
},
end: {
line: 1,
column: 1
}
}
},
right: {
type: "ObjectExpression",
properties: [
{
type: "Property",
key: {
type: "Identifier",
name: "false",
loc: {
start: {
line: 1,
column: 6
},
end: {
line: 1,
column: 11
}
}
},
value: {
type: "Literal",
value: 42,
loc: {
start: {
line: 1,
column: 13
},
end: {
line: 1,
column: 15
}
}
},
kind: "init"
}
],
loc: {
start: {
line: 1,
column: 4
},
end: {
line: 1,
column: 17
}
}
},
loc: {
start: {
line: 1,
column: 0
},
end: {
line: 1,
column: 17
}
}
},
loc: {
start: {
line: 1,
column: 0
},
end: {
line: 1,
column: 17
}
}
}
],
loc: {
start: {
line: 1,
column: 0
},
end: {
line: 1,
column: 17
}
}
});
test("x = { null: 42 }", {
type: "Program",
body: [
{
type: "ExpressionStatement",
expression: {
type: "AssignmentExpression",
operator: "=",
left: {
type: "Identifier",
name: "x",
loc: {
start: {
line: 1,
column: 0
},
end: {
line: 1,
column: 1
}
}
},
right: {
type: "ObjectExpression",
properties: [
{
type: "Property",
key: {
type: "Identifier",
name: "null",
loc: {
start: {
line: 1,
column: 6
},
end: {
line: 1,
column: 10
}
}
},
value: {
type: "Literal",
value: 42,
loc: {
start: {
line: 1,
column: 12
},
end: {
line: 1,
column: 14
}
}
},
kind: "init"
}
],
loc: {
start: {
line: 1,
column: 4
},
end: {
line: 1,
column: 16
}
}
},
loc: {
start: {
line: 1,
column: 0
},
end: {
line: 1,
column: 16
}
}
},
loc: {
start: {
line: 1,
column: 0
},
end: {
line: 1,
column: 16
}
}
}
],
loc: {
start: {
line: 1,
column: 0
},
end: {
line: 1,
column: 16
}
}
});
test("x = { \"answer\": 42 }", {
type: "Program",
body: [
{
type: "ExpressionStatement",
expression: {
type: "AssignmentExpression",
operator: "=",
left: {
type: "Identifier",
name: "x",
loc: {
start: {
line: 1,
column: 0
},
end: {
line: 1,
column: 1
}
}
},
right: {
type: "ObjectExpression",
properties: [
{
type: "Property",
key: {
type: "Literal",
value: "answer",
loc: {
start: {
line: 1,
column: 6
},
end: {
line: 1,
column: 14
}
}
},
value: {
type: "Literal",
value: 42,
loc: {
start: {
line: 1,
column: 16
},
end: {
line: 1,
column: 18
}
}
},
kind: "init"
}
],
loc: {
start: {
line: 1,
column: 4
},
end: {
line: 1,
column: 20
}
}
},
loc: {
start: {
line: 1,
column: 0
},
end: {
line: 1,
column: 20
}
}
},
loc: {
start: {
line: 1,
column: 0
},
end: {
line: 1,
column: 20
}
}
}
],
loc: {
start: {
line: 1,
column: 0
},
end: {
line: 1,
column: 20
}
}
});
test("x = { x: 1, x: 2 }", {
type: "Program",
body: [
{
type: "ExpressionStatement",
expression: {
type: "AssignmentExpression",
operator: "=",
left: {
type: "Identifier",
name: "x",
loc: {
start: {
line: 1,
column: 0
},
end: {
line: 1,
column: 1
}
}
},
right: {
type: "ObjectExpression",
properties: [
{
type: "Property",
key: {
type: "Identifier",
name: "x",
loc: {
start: {
line: 1,
column: 6
},
end: {
line: 1,
column: 7
}
}
},
value: {
type: "Literal",
value: 1,
loc: {
start: {
line: 1,
column: 9
},
end: {
line: 1,
column: 10
}
}
},
kind: "init"
},
{
type: "Property",
key: {
type: "Identifier",
name: "x",
loc: {
start: {
line: 1,
column: 12
},
end: {
line: 1,
column: 13
}
}
},
value: {
type: "Literal",
value: 2,
loc: {
start: {
line: 1,
column: 15
},
end: {
line: 1,
column: 16
}
}
},
kind: "init"
}
],
loc: {
start: {
line: 1,
column: 4
},
end: {
line: 1,
column: 18
}
}
},
loc: {
start: {
line: 1,
column: 0
},
end: {
line: 1,
column: 18
}
}
},
loc: {
start: {
line: 1,
column: 0
},
end: {
line: 1,
column: 18
}
}
}
],
loc: {
start: {
line: 1,
column: 0
},
end: {
line: 1,
column: 18
}
}
});
test("x = { get width() { return m_width } }", {
type: "Program",
body: [
{
type: "ExpressionStatement",
expression: {
type: "AssignmentExpression",
operator: "=",
left: {
type: "Identifier",
name: "x",
loc: {
start: {
line: 1,
column: 0
},
end: {
line: 1,
column: 1
}
}
},
right: {
type: "ObjectExpression",
properties: [
{
type: "Property",
key: {
type: "Identifier",
name: "width",
loc: {
start: {
line: 1,
column: 10
},
end: {
line: 1,
column: 15
}
}
},
kind: "get",
value: {
type: "FunctionExpression",
id: null,
params: [],
body: {
type: "BlockStatement",
body: [
{
type: "ReturnStatement",
argument: {
type: "Identifier",
name: "m_width",
loc: {
start: {
line: 1,
column: 27
},
end: {
line: 1,
column: 34
}
}
},
loc: {
start: {
line: 1,
column: 20
},
end: {
line: 1,
column: 34
}
}
}
],
loc: {
start: {
line: 1,
column: 18
},
end: {
line: 1,
column: 36
}
}
},
loc: {
start: {
line: 1,
column: 15
},
end: {
line: 1,
column: 36
}
}
}
}
],
loc: {
start: {
line: 1,
column: 4
},
end: {
line: 1,
column: 38
}
}
},
loc: {
start: {
line: 1,
column: 0
},
end: {
line: 1,
column: 38
}
}
},
loc: {
start: {
line: 1,
column: 0
},
end: {
line: 1,
column: 38
}
}
}
],
loc: {
start: {
line: 1,
column: 0
},
end: {
line: 1,
column: 38
}
}
});
test("x = { get undef() {} }", {
type: "Program",
body: [
{
type: "ExpressionStatement",
expression: {
type: "AssignmentExpression",
operator: "=",
left: {
type: "Identifier",
name: "x",
loc: {
start: {
line: 1,
column: 0
},
end: {
line: 1,
column: 1
}
}
},
right: {
type: "ObjectExpression",
properties: [
{
type: "Property",
key: {
type: "Identifier",
name: "undef",
loc: {
start: {
line: 1,
column: 10
},
end: {
line: 1,
column: 15
}
}
},
kind: "get",
value: {
type: "FunctionExpression",
id: null,
params: [],
body: {
type: "BlockStatement",
body: [],
loc: {
start: {
line: 1,
column: 18
},
end: {
line: 1,
column: 20
}
}
},
loc: {
start: {
line: 1,
column: 15
},
end: {
line: 1,
column: 20
}
}
}
}
],
loc: {
start: {
line: 1,
column: 4
},
end: {
line: 1,
column: 22
}
}
},
loc: {
start: {
line: 1,
column: 0
},
end: {
line: 1,
column: 22
}
}
},
loc: {
start: {
line: 1,
column: 0
},
end: {
line: 1,
column: 22
}
}
}
],
loc: {
start: {
line: 1,
column: 0
},
end: {
line: 1,
column: 22
}
}
});
test("x = { get if() {} }", {
type: "Program",
body: [
{
type: "ExpressionStatement",
expression: {
type: "AssignmentExpression",
operator: "=",
left: {
type: "Identifier",
name: "x",
loc: {
start: {
line: 1,
column: 0
},
end: {
line: 1,
column: 1
}
}
},
right: {
type: "ObjectExpression",
properties: [
{
type: "Property",
key: {
type: "Identifier",
name: "if",
loc: {
start: {
line: 1,
column: 10
},
end: {
line: 1,
column: 12
}
}
},
kind: "get",
value: {
type: "FunctionExpression",
id: null,
params: [],
body: {
type: "BlockStatement",
body: [],
loc: {
start: {
line: 1,
column: 15
},
end: {
line: 1,
column: 17
}
}
},
loc: {
start: {
line: 1,
column: 12
},
end: {
line: 1,