/*

Copyright (C) 2013 Mathias Bynens <mathias@qiwi.be>
Copyright (C) 2012 Ariya Hidayat <ariya.hidayat@gmail.com>
Copyright (C) 2012 Joost-Wim Boekesteijn <joost-wim@boekesteijn.nl>
Copyright (C) 2012 Yusuke Suzuki <utatane.tea@gmail.com>
Copyright (C) 2012 Arpad Borsos <arpad.borsos@googlemail.com>
Copyright (C) 2011 Ariya Hidayat <ariya.hidayat@gmail.com>
Copyright (C) 2011 Yusuke Suzuki <utatane.tea@gmail.com>
Copyright (C) 2011 Arpad Borsos <arpad.borsos@googlemail.com>

Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:

  * Redistributions of source code must retain the above copyright
    notice, this list of conditions and the following disclaimer.
  * Redistributions in binary form must reproduce the above copyright
    notice, this list of conditions and the following disclaimer in the
    documentation and/or other materials provided with the distribution.

THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
ARE DISCLAIMED. IN NO EVENT SHALL <COPYRIGHT HOLDER> BE LIABLE FOR ANY
DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

*/

var testFixture = {

'Primary Expression': {

    'this\n': {
        type: 'Program',
        body: [{
            type: 'ExpressionStatement',
            expression: {
                type: 'ThisExpression',
                range: [0, 4],
                loc: {
                    start: { line: 1, column: 0 },
                    end: { line: 1, column: 4 }
                }
            },
            range: [0, 5],
            loc: {
                start: { line: 1, column: 0 },
                end: { line: 2, column: 0 }
            }
        }],
        range: [0, 5],
        loc: {
            start: { line: 1, column: 0 },
            end: { line: 2, column: 0 }
        },
        tokens: [{
            type: 'Keyword',
            value: 'this',
            range: [0, 4],
            loc: {
                start: { line: 1, column: 0 },
                end: { line: 1, column: 4 }
            }
        }]
    },

    'null\n': {
        type: 'Program',
        body: [{
            type: 'ExpressionStatement',
            expression: {
                type: 'Literal',
                value: null,
                raw: 'null',
                range: [0, 4],
                loc: {
                    start: { line: 1, column: 0 },
                    end: { line: 1, column: 4 }
                }
            },
            range: [0, 5],
            loc: {
                start: { line: 1, column: 0 },
                end: { line: 2, column: 0 }
            }
        }],
        range: [0, 5],
        loc: {
            start: { line: 1, column: 0 },
            end: { line: 2, column: 0 }
        },
        tokens: [{
            type: 'Null',
            value: 'null',
            range: [0, 4],
            loc: {
                start: { line: 1, column: 0 },
                end: { line: 1, column: 4 }
            }
        }]
    },

    '\n    42\n\n': {
        type: 'Program',
        body: [{
            type: 'ExpressionStatement',
            expression: {
                type: 'Literal',
                value: 42,
                raw: '42',
                range: [5, 7],
                loc: {
                    start: { line: 2, column: 4 },
                    end: { line: 2, column: 6 }
                }
            },
            range: [5, 9],
            loc: {
                start: { line: 2, column: 4 },
                end: { line: 4, column: 0 }
            }
        }],
        range: [5, 9],
        loc: {
            start: { line: 2, column: 4 },
            end: { line: 4, column: 0 }
        },
        tokens: [{
            type: 'Numeric',
            value: '42',
            range: [5, 7],
            loc: {
                start: { line: 2, column: 4 },
                end: { line: 2, column: 6 }
            }
        }]
    },

    '(1 + 2 ) * 3': {
        type: 'ExpressionStatement',
        expression: {
            type: 'BinaryExpression',
            operator: '*',
            left: {
                type: 'BinaryExpression',
                operator: '+',
                left: {
                    type: 'Literal',
                    value: 1,
                    raw: '1',
                    range: [1, 2],
                    loc: {
                        start: { line: 1, column: 1 },
                        end: { line: 1, column: 2 }
                    }
                },
                right: {
                    type: 'Literal',
                    value: 2,
                    raw: '2',
                    range: [5, 6],
                    loc: {
                        start: { line: 1, column: 5 },
                        end: { line: 1, column: 6 }
                    }
                },
                range: [1, 6],
                loc: {
                    start: { line: 1, column: 1 },
                    end: { line: 1, column: 6 }
                }
            },
            right: {
                type: 'Literal',
                value: 3,
                raw: '3',
                range: [11, 12],
                loc: {
                    start: { line: 1, column: 11 },
                    end: { line: 1, column: 12 }
                }
            },
            range: [0, 12],
            loc: {
                start: { line: 1, column: 0 },
                end: { line: 1, column: 12 }
            }
        },
        range: [0, 12],
        loc: {
            start: { line: 1, column: 0 },
            end: { line: 1, column: 12 }
        }
    }

},

'Grouping Operator': {

    '(1) + (2  ) + 3': {
        type: 'ExpressionStatement',
        expression: {
            type: 'BinaryExpression',
            operator: '+',
            left: {
                type: 'BinaryExpression',
                operator: '+',
                left: {
                    type: 'Literal',
                    value: 1,
                    raw: '1',
                    range: [1, 2],
                    loc: {
                        start: { line: 1, column: 1 },
                        end: { line: 1, column: 2 }
                    }
                },
                right: {
                    type: 'Literal',
                    value: 2,
                    raw: '2',
                    range: [7, 8],
                    loc: {
                        start: { line: 1, column: 7 },
                        end: { line: 1, column: 8 }
                    }
                },
                range: [0, 11],
                loc: {
                    start: { line: 1, column: 0 },
                    end: { line: 1, column: 11 }
                }
            },
            right: {
                type: 'Literal',
                value: 3,
                raw: '3',
                range: [14, 15],
                loc: {
                    start: { line: 1, column: 14 },
                    end: { line: 1, column: 15 }
                }
            },
            range: [0, 15],
            loc: {
                start: { line: 1, column: 0 },
                end: { line: 1, column: 15 }
            }
        },
        range: [0, 15],
        loc: {
            start: { line: 1, column: 0 },
            end: { line: 1, column: 15 }
        }
    },

    '4 + 5 << (6)': {
        type: 'ExpressionStatement',
        expression: {
            type: 'BinaryExpression',
            operator: '<<',
            left: {
                type: 'BinaryExpression',
                operator: '+',
                left: {
                    type: 'Literal',
                    value: 4,
                    raw: '4',
                    range: [0, 1],
                    loc: {
                        start: { line: 1, column: 0 },
                        end: { line: 1, column: 1 }
                    }
                },
                right: {
                    type: 'Literal',
                    value: 5,
                    raw: '5',
                    range: [4, 5],
                    loc: {
                        start: { line: 1, column: 4 },
                        end: { line: 1, column: 5 }
                    }
                },
                range: [0, 5],
                loc: {
                    start: { line: 1, column: 0 },
                    end: { line: 1, column: 5 }
                }
            },
            right: {
                type: 'Literal',
                value: 6,
                raw: '6',
                range: [10, 11],
                loc: {
                    start: { line: 1, column: 10 },
                    end: { line: 1, column: 11 }
                }
            },
            range: [0, 12],
            loc: {
                start: { line: 1, column: 0 },
                end: { line: 1, column: 12 }
            }
        },
        range: [0, 12],
        loc: {
            start: { line: 1, column: 0 },
            end: { line: 1, column: 12 }
        }
    }

},

'Array Initializer': {

    'x = []': {
        type: 'Program',
        body: [{
            type: 'ExpressionStatement',
            expression: {
                type: 'AssignmentExpression',
                operator: '=',
                left: {
                    type: 'Identifier',
                    name: 'x',
                    range: [0, 1],
                    loc: {
                        start: { line: 1, column: 0 },
                        end: { line: 1, column: 1 }
                    }
                },
                right: {
                    type: 'ArrayExpression',
                    elements: [],
                    range: [4, 6],
                    loc: {
                        start: { line: 1, column: 4 },
                        end: { line: 1, column: 6 }
                    }
                },
                range: [0, 6],
                loc: {
                    start: { line: 1, column: 0 },
                    end: { line: 1, column: 6 }
                }
            },
            range: [0, 6],
            loc: {
                start: { line: 1, column: 0 },
                end: { line: 1, column: 6 }
            }
        }],
        range: [0, 6],
        loc: {
            start: { line: 1, column: 0 },
            end: { line: 1, column: 6 }
        },
        tokens: [{
            type: 'Identifier',
            value: 'x',
            range: [0, 1],
            loc: {
                start: { line: 1, column: 0 },
                end: { line: 1, column: 1 }
            }
        }, {
            type: 'Punctuator',
            value: '=',
            range: [2, 3],
            loc: {
                start: { line: 1, column: 2 },
                end: { line: 1, column: 3 }
            }
        }, {
            type: 'Punctuator',
            value: '[',
            range: [4, 5],
            loc: {
                start: { line: 1, column: 4 },
                end: { line: 1, column: 5 }
            }
        }, {
            type: 'Punctuator',
            value: ']',
            range: [5, 6],
            loc: {
                start: { line: 1, column: 5 },
                end: { line: 1, column: 6 }
            }
        }]
    },

    'x = [ ]': {
        type: 'ExpressionStatement',
        expression: {
            type: 'AssignmentExpression',
            operator: '=',
            left: {
                type: 'Identifier',
                name: 'x',
                range: [0, 1],
                loc: {
                    start: { line: 1, column: 0 },
                    end: { line: 1, column: 1 }
                }
            },
            right: {
                type: 'ArrayExpression',
                elements: [],
                range: [4, 7],
                loc: {
                    start: { line: 1, column: 4 },
                    end: { line: 1, column: 7 }
                }
            },
            range: [0, 7],
            loc: {
                start: { line: 1, column: 0 },
                end: { line: 1, column: 7 }
            }
        },
        range: [0, 7],
        loc: {
            start: { line: 1, column: 0 },
            end: { line: 1, column: 7 }
        }
    },

    'x = [ 42 ]': {
        type: 'ExpressionStatement',
        expression: {
            type: 'AssignmentExpression',
            operator: '=',
            left: {
                type: 'Identifier',
                name: 'x',
                range: [0, 1],
                loc: {
                    start: { line: 1, column: 0 },
                    end: { line: 1, column: 1 }
                }
            },
            right: {
                type: 'ArrayExpression',
                elements: [{
                    type: 'Literal',
                    value: 42,
                    raw: '42',
                    range: [6, 8],
                    loc: {
                        start: { line: 1, column: 6 },
                        end: { line: 1, column: 8 }
                    }
                }],
                range: [4, 10],
                loc: {
                    start: { line: 1, column: 4 },
                    end: { line: 1, column: 10 }
                }
            },
            range: [0, 10],
            loc: {
                start: { line: 1, column: 0 },
                end: { line: 1, column: 10 }
            }
        },
        range: [0, 10],
        loc: {
            start: { line: 1, column: 0 },
            end: { line: 1, column: 10 }
        }
    },

    'x = [ 42, ]': {
        type: 'ExpressionStatement',
        expression: {
            type: 'AssignmentExpression',
            operator: '=',
            left: {
                type: 'Identifier',
                name: 'x',
                range: [0, 1],
                loc: {
                    start: { line: 1, column: 0 },
                    end: { line: 1, column: 1 }
                }
            },
            right: {
                type: 'ArrayExpression',
                elements: [{
                    type: 'Literal',
                    value: 42,
                    raw: '42',
                    range: [6, 8],
                    loc: {
                        start: { line: 1, column: 6 },
                        end: { line: 1, column: 8 }
                    }
                }],
                range: [4, 11],
                loc: {
                    start: { line: 1, column: 4 },
                    end: { line: 1, column: 11 }
                }
            },
            range: [0, 11],
            loc: {
                start: { line: 1, column: 0 },
                end: { line: 1, column: 11 }
            }
        },
        range: [0, 11],
        loc: {
            start: { line: 1, column: 0 },
            end: { line: 1, column: 11 }
        }
    },

    'x = [ ,, 42 ]': {
        type: 'ExpressionStatement',
        expression: {
            type: 'AssignmentExpression',
            operator: '=',
            left: {
                type: 'Identifier',
                name: 'x',
                range: [0, 1],
                loc: {
                    start: { line: 1, column: 0 },
                    end: { line: 1, column: 1 }
                }
            },
            right: {
                type: 'ArrayExpression',
                elements: [
                    null,
                    null,
                    {
                        type: 'Literal',
                        value: 42,
                        raw: '42',
                        range: [9, 11],
                        loc: {
                            start: { line: 1, column: 9 },
                            end: { line: 1, column: 11 }
                        }
                    }],
                range: [4, 13],
                loc: {
                    start: { line: 1, column: 4 },
                    end: { line: 1, column: 13 }
                }
            },
            range: [0, 13],
            loc: {
                start: { line: 1, column: 0 },
                end: { line: 1, column: 13 }
            }
        },
        range: [0, 13],
        loc: {
            start: { line: 1, column: 0 },
            end: { line: 1, column: 13 }
        }
    },

    'x = [ 1, 2, 3, ]': {
        type: 'ExpressionStatement',
        expression: {
            type: 'AssignmentExpression',
            operator: '=',
            left: {
                type: 'Identifier',
                name: 'x',
                range: [0, 1],
                loc: {
                    start: { line: 1, column: 0 },
                    end: { line: 1, column: 1 }
                }
            },
            right: {
                type: 'ArrayExpression',
                elements: [{
                    type: 'Literal',
                    value: 1,
                    raw: '1',
                    range: [6, 7],
                    loc: {
                        start: { line: 1, column: 6 },
                        end: { line: 1, column: 7 }
                    }
                }, {
                    type: 'Literal',
                    value: 2,
                    raw: '2',
                    range: [9, 10],
                    loc: {
                        start: { line: 1, column: 9 },
                        end: { line: 1, column: 10 }
                    }
                }, {
                    type: 'Literal',
                    value: 3,
                    raw: '3',
                    range: [12, 13],
                    loc: {
                        start: { line: 1, column: 12 },
                        end: { line: 1, column: 13 }
                    }
                }],
                range: [4, 16],
                loc: {
                    start: { line: 1, column: 4 },
                    end: { line: 1, column: 16 }
                }
            },
            range: [0, 16],
            loc: {
                start: { line: 1, column: 0 },
                end: { line: 1, column: 16 }
            }
        },
        range: [0, 16],
        loc: {
            start: { line: 1, column: 0 },
            end: { line: 1, column: 16 }
        }
    },

    'x = [ 1, 2,, 3, ]': {
        type: 'ExpressionStatement',
        expression: {
            type: 'AssignmentExpression',
            operator: '=',
            left: {
                type: 'Identifier',
                name: 'x',
                range: [0, 1],
                loc: {
                    start: { line: 1, column: 0 },
                    end: { line: 1, column: 1 }
                }
            },
            right: {
                type: 'ArrayExpression',
                elements: [{
                    type: 'Literal',
                    value: 1,
                    raw: '1',
                    range: [6, 7],
                    loc: {
                        start: { line: 1, column: 6 },
                        end: { line: 1, column: 7 }
                    }
                }, {
                    type: 'Literal',
                    value: 2,
                    raw: '2',
                    range: [9, 10],
                    loc: {
                        start: { line: 1, column: 9 },
                        end: { line: 1, column: 10 }
                    }
                }, null, {
                    type: 'Literal',
                    value: 3,
                    raw: '3',
                    range: [13, 14],
                    loc: {
                        start: { line: 1, column: 13 },
                        end: { line: 1, column: 14 }
                    }
                }],
                range: [4, 17],
                loc: {
                    start: { line: 1, column: 4 },
                    end: { line: 1, column: 17 }
                }
            },
            range: [0, 17],
            loc: {
                start: { line: 1, column: 0 },
                end: { line: 1, column: 17 }
            }
        },
        range: [0, 17],
        loc: {
            start: { line: 1, column: 0 },
            end: { line: 1, column: 17 }
        }
    },

    '日本語 = []': {
        type: 'ExpressionStatement',
        expression: {
            type: 'AssignmentExpression',
            operator: '=',
            left: {
                type: 'Identifier',
                name: '日本語',
                range: [0, 3],
                loc: {
                    start: { line: 1, column: 0 },
                    end: { line: 1, column: 3 }
                }
            },
            right: {
                type: 'ArrayExpression',
                elements: [],
                range: [6, 8],
                loc: {
                    start: { line: 1, column: 6 },
                    end: { line: 1, column: 8 }
                }
            },
            range: [0, 8],
            loc: {
                start: { line: 1, column: 0 },
                end: { line: 1, column: 8 }
            }
        },
        range: [0, 8],
        loc: {
            start: { line: 1, column: 0 },
            end: { line: 1, column: 8 }
        }
    },

    'T\u203F = []': {
        type: 'ExpressionStatement',
        expression: {
            type: 'AssignmentExpression',
            operator: '=',
            left: {
                type: 'Identifier',
                name: 'T\u203F',
                range: [0, 2],
                loc: {
                    start: { line: 1, column: 0 },
                    end: { line: 1, column: 2 }
                }
            },
            right: {
                type: 'ArrayExpression',
                elements: [],
                range: [5, 7],
                loc: {
                    start: { line: 1, column: 5 },
                    end: { line: 1, column: 7 }
                }
            },
            range: [0, 7],
            loc: {
                start: { line: 1, column: 0 },
                end: { line: 1, column: 7 }
            }
        },
        range: [0, 7],
        loc: {
            start: { line: 1, column: 0 },
            end: { line: 1, column: 7 }
        }
    },

    'T\u200C = []': {
        type: 'ExpressionStatement',
        expression: {
            type: 'AssignmentExpression',
            operator: '=',
            left: {
                type: 'Identifier',
                name: 'T\u200C',
                range: [0, 2],
                loc: {
                    start: { line: 1, column: 0 },
                    end: { line: 1, column: 2 }
                }
            },
            right: {
                type: 'ArrayExpression',
                elements: [],
                range: [5, 7],
                loc: {
                    start: { line: 1, column: 5 },
                    end: { line: 1, column: 7 }
                }
            },
            range: [0, 7],
            loc: {
                start: { line: 1, column: 0 },
                end: { line: 1, column: 7 }
            }
        },
        range: [0, 7],
        loc: {
            start: { line: 1, column: 0 },
            end: { line: 1, column: 7 }
        }
    },

    'T\u200D = []': {
        type: 'ExpressionStatement',
        expression: {
            type: 'AssignmentExpression',
            operator: '=',
            left: {
                type: 'Identifier',
                name: 'T\u200D',
                range: [0, 2],
                loc: {
                    start: { line: 1, column: 0 },
                    end: { line: 1, column: 2 }
                }
            },
            right: {
                type: 'ArrayExpression',
                elements: [],
                range: [5, 7],
                loc: {
                    start: { line: 1, column: 5 },
                    end: { line: 1, column: 7 }
                }
            },
            range: [0, 7],
            loc: {
                start: { line: 1, column: 0 },
                end: { line: 1, column: 7 }
            }
        },
        range: [0, 7],
        loc: {
            start: { line: 1, column: 0 },
            end: { line: 1, column: 7 }
        }
    },

    '\u2163\u2161 = []': {
        type: 'ExpressionStatement',
        expression: {
            type: 'AssignmentExpression',
            operator: '=',
            left: {
                type: 'Identifier',
                name: '\u2163\u2161',
                range: [0, 2],
                loc: {
                    start: { line: 1, column: 0 },
                    end: { line: 1, column: 2 }
                }
            },
            right: {
                type: 'ArrayExpression',
                elements: [],
                range: [5, 7],
                loc: {
                    start: { line: 1, column: 5 },
                    end: { line: 1, column: 7 }
                }
            },
            range: [0, 7],
            loc: {
                start: { line: 1, column: 0 },
                end: { line: 1, column: 7 }
            }
        },
        range: [0, 7],
        loc: {
            start: { line: 1, column: 0 },
            end: { line: 1, column: 7 }
        }
    },

    '\u2163\u2161\u200A=\u2009[]': {
        type: 'ExpressionStatement',
        expression: {
            type: 'AssignmentExpression',
            operator: '=',
            left: {
                type: 'Identifier',
                name: '\u2163\u2161',
                range: [0, 2],
                loc: {
                    start: { line: 1, column: 0 },
                    end: { line: 1, column: 2 }
                }
            },
            right: {
                type: 'ArrayExpression',
                elements: [],
                range: [5, 7],
                loc: {
                    start: { line: 1, column: 5 },
                    end: { line: 1, column: 7 }
                }
            },
            range: [0, 7],
            loc: {
                start: { line: 1, column: 0 },
                end: { line: 1, column: 7 }
            }
        },
        range: [0, 7],
        loc: {
            start: { line: 1, column: 0 },
            end: { line: 1, column: 7 }
        }
    }

},

'Object Initializer': {

    'x = {}': {
        type: 'ExpressionStatement',
        expression: {
            type: 'AssignmentExpression',
            operator: '=',
            left: {
                type: 'Identifier',
                name: 'x',
                range: [0, 1],
                loc: {
                    start: { line: 1, column: 0 },
                    end: { line: 1, column: 1 }
                }
            },
            right: {
                type: 'ObjectExpression',
                properties: [],
                range: [4, 6],
                loc: {
                    start: { line: 1, column: 4 },
                    end: { line: 1, column: 6 }
                }
            },
            range: [0, 6],
            loc: {
                start: { line: 1, column: 0 },
                end: { line: 1, column: 6 }
            }
        },
        range: [0, 6],
        loc: {
            start: { line: 1, column: 0 },
            end: { line: 1, column: 6 }
        }
    },

    'x = { }': {
        type: 'ExpressionStatement',
        expression: {
            type: 'AssignmentExpression',
            operator: '=',
            left: {
                type: 'Identifier',
                name: 'x',
                range: [0, 1],
                loc: {
                    start: { line: 1, column: 0 },
                    end: { line: 1, column: 1 }
                }
            },
            right: {
                type: 'ObjectExpression',
                properties: [],
                range: [4, 7],
                loc: {
                    start: { line: 1, column: 4 },
                    end: { line: 1, column: 7 }
                }
            },
            range: [0, 7],
            loc: {
                start: { line: 1, column: 0 },
                end: { line: 1, column: 7 }
            }
        },
        range: [0, 7],
        loc: {
            start: { line: 1, column: 0 },
            end: { line: 1, column: 7 }
        }
    },

    'x = { answer: 42 }': {
        type: 'ExpressionStatement',
        expression: {
            type: 'AssignmentExpression',
            operator: '=',
            left: {
                type: 'Identifier',
                name: 'x',
                range: [0, 1],
                loc: {
                    start: { line: 1, column: 0 },
                    end: { line: 1, column: 1 }
                }
            },
            right: {
                type: 'ObjectExpression',
                properties: [{
                    type: 'Property',
                    key: {
                        type: 'Identifier',
                        name: 'answer',
                        range: [6, 12],
                        loc: {
                            start: { line: 1, column: 6 },
                            end: { line: 1, column: 12 }
                        }
                    },
                    value: {
                        type: 'Literal',
                        value: 42,
                        raw: '42',
                        range: [14, 16],
                        loc: {
                            start: { line: 1, column: 14 },
                            end: { line: 1, column: 16 }
                        }
                    },
                    kind: 'init',
                    range: [6, 16],
                    loc: {
                        start: { line: 1, column: 6 },
                        end: { line: 1, column: 16 }
                    }
                }],
                range: [4, 18],
                loc: {
                    start: { line: 1, column: 4 },
                    end: { line: 1, column: 18 }
                }
            },
            range: [0, 18],
            loc: {
                start: { line: 1, column: 0 },
                end: { line: 1, column: 18 }
            }
        },
        range: [0, 18],
        loc: {
            start: { line: 1, column: 0 },
            end: { line: 1, column: 18 }
        }
    },

    'x = { if: 42 }': {
        type: 'ExpressionStatement',
        expression: {
            type: 'AssignmentExpression',
            operator: '=',
            left: {
                type: 'Identifier',
                name: 'x',
                range: [0, 1],
                loc: {
                    start: { line: 1, column: 0 },
                    end: { line: 1, column: 1 }
                }
            },
            right: {
                type: 'ObjectExpression',
                properties: [{
                    type: 'Property',
                    key: {
                        type: 'Identifier',
                        name: 'if',
                        range: [6, 8],
                        loc: {
                            start: { line: 1, column: 6 },
                            end: { line: 1, column: 8 }
                        }
                    },
                    value: {
                        type: 'Literal',
                        value: 42,
                        raw: '42',
                        range: [10, 12],
                        loc: {
                            start: { line: 1, column: 10 },
                            end: { line: 1, column: 12 }
                        }
                    },
                    kind: 'init',
                    range: [6, 12],
                    loc: {
                        start: { line: 1, column: 6 },
                        end: { line: 1, column: 12 }
                    }
                }],
                range: [4, 14],
                loc: {
                    start: { line: 1, column: 4 },
                    end: { line: 1, column: 14 }
                }
            },
            range: [0, 14],
            loc: {
                start: { line: 1, column: 0 },
                end: { line: 1, column: 14 }
            }
        },
        range: [0, 14],
        loc: {
            start: { line: 1, column: 0 },
            end: { line: 1, column: 14 }
        }
    },

    'x = { true: 42 }': {
        type: 'ExpressionStatement',
        expression: {
            type: 'AssignmentExpression',
            operator: '=',
            left: {
                type: 'Identifier',
                name: 'x',
                range: [0, 1],
                loc: {
                    start: { line: 1, column: 0 },
                    end: { line: 1, column: 1 }
                }
            },
            right: {
                type: 'ObjectExpression',
                properties: [{
                    type: 'Property',
                    key: {
                        type: 'Identifier',
                        name: 'true',
                        range: [6, 10],
                        loc: {
                            start: { line: 1, column: 6 },
                            end: { line: 1, column: 10 }
                        }
                    },
                    value: {
                        type: 'Literal',
                        value: 42,
                        raw: '42',
                        range: [12, 14],
                        loc: {
                            start: { line: 1, column: 12 },
                            end: { line: 1, column: 14 }
                        }
                    },
                    kind: 'init',
                    range: [6, 14],
                    loc: {
                        start: { line: 1, column: 6 },
                        end: { line: 1, column: 14 }
                    }
                }],
                range: [4, 16],
                loc: {
                    start: { line: 1, column: 4 },
                    end: { line: 1, column: 16 }
                }
            },
            range: [0, 16],
            loc: {
                start: { line: 1, column: 0 },
                end: { line: 1, column: 16 }
            }
        },
        range: [0, 16],
        loc: {
            start: { line: 1, column: 0 },
            end: { line: 1, column: 16 }
        }
    },

    'x = { false: 42 }': {
        type: 'ExpressionStatement',
        expression: {
            type: 'AssignmentExpression',
            operator: '=',
            left: {
                type: 'Identifier',
                name: 'x',
                range: [0, 1],
                loc: {
                    start: { line: 1, column: 0 },
                    end: { line: 1, column: 1 }
                }
            },
            right: {
                type: 'ObjectExpression',
                properties: [{
                    type: 'Property',
                    key: {
                        type: 'Identifier',
                        name: 'false',
                        range: [6, 11],
                        loc: {
                            start: { line: 1, column: 6 },
                            end: { line: 1, column: 11 }
                        }
                    },
                    value: {
                        type: 'Literal',
                        value: 42,
                        raw: '42',
                        range: [13, 15],
                        loc: {
                            start: { line: 1, column: 13 },
                            end: { line: 1, column: 15 }
                        }
                    },
                    kind: 'init',
                    range: [6, 15],
                    loc: {
                        start: { line: 1, column: 6 },
                        end: { line: 1, column: 15 }
                    }
                }],
                range: [4, 17],
                loc: {
                    start: { line: 1, column: 4 },
                    end: { line: 1, column: 17 }
                }
            },
            range: [0, 17],
            loc: {
                start: { line: 1, column: 0 },
                end: { line: 1, column: 17 }
            }
        },
        range: [0, 17],
        loc: {
            start: { line: 1, column: 0 },
            end: { line: 1, column: 17 }
        }
    },

    'x = { null: 42 }': {
        type: 'ExpressionStatement',
        expression: {
            type: 'AssignmentExpression',
            operator: '=',
            left: {
                type: 'Identifier',
                name: 'x',
                range: [0, 1],
                loc: {
                    start: { line: 1, column: 0 },
                    end: { line: 1, column: 1 }
                }
            },
            right: {
                type: 'ObjectExpression',
                properties: [{
                    type: 'Property',
                    key: {
                        type: 'Identifier',
                        name: 'null',
                        range: [6, 10],
                        loc: {
                            start: { line: 1, column: 6 },
                            end: { line: 1, column: 10 }
                        }
                    },
                    value: {
                        type: 'Literal',
                        value: 42,
                        raw: '42',
                        range: [12, 14],
                        loc: {
                            start: { line: 1, column: 12 },
                            end: { line: 1, column: 14 }
                        }
                    },
                    kind: 'init',
                    range: [6, 14],
                    loc: {
                        start: { line: 1, column: 6 },
                        end: { line: 1, column: 14 }
                    }
                }],
                range: [4, 16],
                loc: {
                    start: { line: 1, column: 4 },
                    end: { line: 1, column: 16 }
                }
            },
            range: [0, 16],
            loc: {
                start: { line: 1, column: 0 },
                end: { line: 1, column: 16 }
            }
        },
        range: [0, 16],
        loc: {
            start: { line: 1, column: 0 },
            end: { line: 1, column: 16 }
        }
    },

    'x = { "answer": 42 }': {
        type: 'ExpressionStatement',
        expression: {
            type: 'AssignmentExpression',
            operator: '=',
            left: {
                type: 'Identifier',
                name: 'x',
                range: [0, 1],
                loc: {
                    start: { line: 1, column: 0 },
                    end: { line: 1, column: 1 }
                }
            },
            right: {
                type: 'ObjectExpression',
                properties: [{
                    type: 'Property',
                    key: {
                        type: 'Literal',
                        value: 'answer',
                        raw: '"answer"',
                        range: [6, 14],
                        loc: {
                            start: { line: 1, column: 6 },
                            end: { line: 1, column: 14 }
                        }
                    },
                    value: {
                        type: 'Literal',
                        value: 42,
                        raw: '42',
                        range: [16, 18],
                        loc: {
                            start: { line: 1, column: 16 },
                            end: { line: 1, column: 18 }
                        }
                    },
                    kind: 'init',
                    range: [6, 18],
                    loc: {
                        start: { line: 1, column: 6 },
                        end: { line: 1, column: 18 }
                    }
                }],
                range: [4, 20],
                loc: {
                    start: { line: 1, column: 4 },
                    end: { line: 1, column: 20 }
                }
            },
            range: [0, 20],
            loc: {
                start: { line: 1, column: 0 },
                end: { line: 1, column: 20 }
            }
        },
        range: [0, 20],
        loc: {
            start: { line: 1, column: 0 },
            end: { line: 1, column: 20 }
        }
    },

    'x = { x: 1, x: 2 }': {
        type: 'ExpressionStatement',
        expression: {
            type: 'AssignmentExpression',
            operator: '=',
            left: {
                type: 'Identifier',
                name: 'x',
                range: [0, 1],
                loc: {
                    start: { line: 1, column: 0 },
                    end: { line: 1, column: 1 }
                }
            },
            right: {
                type: 'ObjectExpression',
                properties: [
                    {
                        type: 'Property',
                        key: {
                            type: 'Identifier',
                            name: 'x',
                            range: [6, 7],
                            loc: {
                                start: { line: 1, column: 6 },
                                end: { line: 1, column: 7 }
                            }
                        },
                        value: {
                            type: 'Literal',
                            value: 1,
                            raw: '1',
                            range: [9, 10],
                            loc: {
                                start: { line: 1, column: 9 },
                                end: { line: 1, column: 10 }
                            }
                        },
                        kind: 'init',
                        range: [6, 10],
                        loc: {
                            start: { line: 1, column: 6 },
                            end: { line: 1, column: 10 }
                        }
                    },
                    {
                        type: 'Property',
                        key: {
                            type: 'Identifier',
                            name: 'x',
                            range: [12, 13],
                            loc: {
                                start: { line: 1, column: 12 },
                                end: { line: 1, column: 13 }
                            }
                        },
                        value: {
                            type: 'Literal',
                            value: 2,
                            raw: '2',
                            range: [15, 16],
                            loc: {
                                start: { line: 1, column: 15 },
                                end: { line: 1, column: 16 }
                            }
                        },
                        kind: 'init',
                        range: [12, 16],
                        loc: {
                            start: { line: 1, column: 12 },
                            end: { line: 1, column: 16 }
                        }
                    }
                ],
                range: [4, 18],
                loc: {
                    start: { line: 1, column: 4 },
                    end: { line: 1, column: 18 }
                }
            },
            range: [0, 18],
            loc: {
                start: { line: 1, column: 0 },
                end: { line: 1, column: 18 }
            }
        },
        range: [0, 18],
        loc: {
            start: { line: 1, column: 0 },
            end: { line: 1, column: 18 }
        }
    },

    'x = { get width() { return m_width } }': {
        type: 'ExpressionStatement',
        expression: {
            type: 'AssignmentExpression',
            operator: '=',
            left: {
                type: 'Identifier',
                name: 'x',
                range: [0, 1],
                loc: {
                    start: { line: 1, column: 0 },
                    end: { line: 1, column: 1 }
                }
            },
            right: {
                type: 'ObjectExpression',
                properties: [{
                    type: 'Property',
                    key: {
                        type: 'Identifier',
                        name: 'width',
                        range: [10, 15],
                        loc: {
                            start: { line: 1, column: 10 },
                            end: { line: 1, column: 15 }
                        }
                    },
                    value: {
                        type: 'FunctionExpression',
                        id: null,
                        params: [],
                        defaults: [],
                        body: {
                            type: 'BlockStatement',
                            body: [{
                                type: 'ReturnStatement',
                                argument: {
                                    type: 'Identifier',
                                    name: 'm_width',
                                    range: [27, 34],
                                    loc: {
                                        start: { line: 1, column: 27 },
                                        end: { line: 1, column: 34 }
                                    }
                                },
                                range: [20, 35],
                                loc: {
                                    start: { line: 1, column: 20 },
                                    end: { line: 1, column: 35 }
                                }
                            }],
                            range: [18, 36],
                            loc: {
                                start: { line: 1, column: 18 },
                                end: { line: 1, column: 36 }
                            }
                        },
                        rest: null,
                        generator: false,
                        expression: false,
                        range: [18, 36],
                        loc: {
                            start: { line: 1, column: 18 },
                            end: { line: 1, column: 36 }
                        }
                    },
                    kind: 'get',
                    range: [6, 36],
                    loc: {
                        start: { line: 1, column: 6 },
                        end: { line: 1, column: 36 }
                    }
                }],
                range: [4, 38],
                loc: {
                    start: { line: 1, column: 4 },
                    end: { line: 1, column: 38 }
                }
            },
            range: [0, 38],
            loc: {
                start: { line: 1, column: 0 },
                end: { line: 1, column: 38 }
            }
        },
        range: [0, 38],
        loc: {
            start: { line: 1, column: 0 },
            end: { line: 1, column: 38 }
        }
    },

    'x = { get undef() {} }': {
        type: 'ExpressionStatement',
        expression: {
            type: 'AssignmentExpression',
            operator: '=',
            left: {
                type: 'Identifier',
                name: 'x',
                range: [0, 1],
                loc: {
                    start: { line: 1, column: 0 },
                    end: { line: 1, column: 1 }
                }
            },
            right: {
                type: 'ObjectExpression',
                properties: [{
                    type: 'Property',
                    key: {
                        type: 'Identifier',
                        name: 'undef',
                        range: [10, 15],
                        loc: {
                            start: { line: 1, column: 10 },
                            end: { line: 1, column: 15 }
                        }
                    },
                    value: {
                        type: 'FunctionExpression',
                        id: null,
                        params: [],
                        defaults: [],
                        body: {
                            type: 'BlockStatement',
                            body: [],
                            range: [18, 20],
                            loc: {
                                start: { line: 1, column: 18 },
                                end: { line: 1, column: 20 }
                            }
                        },
                        rest: null,
                        generator: false,
                        expression: false,
                        range: [18, 20],
                        loc: {
                            start: { line: 1, column: 18 },
                            end: { line: 1, column: 20 }
                        }
                    },
                    kind: 'get',
                    range: [6, 20],
                    loc: {
                        start: { line: 1, column: 6 },
                        end: { line: 1, column: 20 }
                    }
                }],
                range: [4, 22],
                loc: {
                    start: { line: 1, column: 4 },
                    end: { line: 1, column: 22 }
                }
            },
            range: [0, 22],
            loc: {
                start: { line: 1, column: 0 },
                end: { line: 1, column: 22 }
            }
        },
        range: [0, 22],
        loc: {
            start: { line: 1, column: 0 },
            end: { line: 1, column: 22 }
        }
    },

    'x = { get if() {} }': {
        type: 'ExpressionStatement',
        expression: {
            type: 'AssignmentExpression',
            operator: '=',
            left: {
                type: 'Identifier',
                name: 'x',
                range: [0, 1],
                loc: {
                    start: { line: 1, column: 0 },
                    end: { line: 1, column: 1 }
                }
            },
            right: {
                type: 'ObjectExpression',
                properties: [{
                    type: 'Property',
                    key: {
                        type: 'Identifier',
                        name: 'if',
                        range: [10, 12],
                        loc: {
                            start: { line: 1, column: 10 },
                            end: { line: 1, column: 12 }
                        }
                    },
                    value: {
                        type: 'FunctionExpression',
                        id: null,
                        params: [],
                        defaults: [],
                        body: {
                            type: 'BlockStatement',
                            body: [],
                            range: [15, 17],
                            loc: {
                                start: { line: 1, column: 15 },
                                end: { line: 1, column: 17 }
                            }
                        },
                        rest: null,
                        generator: false,
                        expression: false,
                        range: [15, 17],
                        loc: {
                            start: { line: 1, column: 15 },
                            end: { line: 1, column: 17 }
                        }
                    },
                    kind: 'get',
                    range: [6, 17],
                    loc: {
                        start: { line: 1, column: 6 },
                        end: { line: 1, column: 17 }
                    }
                }],
                range: [4, 19],
                loc: {
                    start: { line: 1, column: 4 },
                    end: { line: 1, column: 19 }
                }
            },
            range: [0, 19],
            loc: {
                start: { line: 1, column: 0 },
                end: { line: 1, column: 19 }
            }
        },
        range: [0, 19],
        loc: {
            start: { line: 1, column: 0 },
            end: { line: 1, column: 19 }
        }
    },

    'x = { get true() {} }': {
        type: 'ExpressionStatement',
        expression: {
            type: 'AssignmentExpression',
            operator: '=',
            left: {
                type: 'Identifier',
                name: 'x',
                range: [0, 1],
                loc: {
                    start: { line: 1, column: 0 },
                    end: { line: 1, column: 1 }
                }
            },
            right: {
                type: 'ObjectExpression',
                properties: [{
                    type: 'Property',
                    key: {
                        type: 'Identifier',
                        name: 'true',
                        range: [10, 14],
                        loc: {
                            start: { line: 1, column: 10 },
                            end: { line: 1, column: 14 }
                        }
                    },
                    value: {
                        type: 'FunctionExpression',
                        id: null,
                        params: [],
                        defaults: [],
                        body: {
                            type: 'BlockStatement',
                            body: [],
                            range: [17, 19],
                            loc: {
                                start: { line: 1, column: 17 },
                                end: { line: 1, column: 19 }
                            }
                        },
                        rest: null,
                        generator: false,
                        expression: false,
                        range: [17, 19],
                        loc: {
                            start: { line: 1, column: 17 },
                            end: { line: 1, column: 19 }
                        }
                    },
                    kind: 'get',
                    range: [6, 19],
                    loc: {
                        start: { line: 1, column: 6 },
                        end: { line: 1, column: 19 }
                    }
                }],
                range: [4, 21],
                loc: {
                    start: { line: 1, column: 4 },
                    end: { line: 1, column: 21 }
                }
            },
            range: [0, 21],
            loc: {
                start: { line: 1, column: 0 },
                end: { line: 1, column: 21 }
            }
        },
        range: [0, 21],
        loc: {
            start: { line: 1, column: 0 },
            end: { line: 1, column: 21 }
        }
    },

    'x = { get false() {} }': {
        type: 'ExpressionStatement',
        expression: {
            type: 'AssignmentExpression',
            operator: '=',
            left: {
                type: 'Identifier',
                name: 'x',
                range: [0, 1],
                loc: {
                    start: { line: 1, column: 0 },
                    end: { line: 1, column: 1 }
                }
            },
            right: {
                type: 'ObjectExpression',
                properties: [{
                    type: 'Property',
                    key: {
                        type: 'Identifier',
                        name: 'false',
                        range: [10, 15],
                        loc: {
                            start: { line: 1, column: 10 },
                            end: { line: 1, column: 15 }
                        }
                    },
                    value: {
                        type: 'FunctionExpression',
                        id: null,
                        params: [],
                        defaults: [],
                        body: {
                            type: 'BlockStatement',
                            body: [],
                            range: [18, 20],
                            loc: {
                                start: { line: 1, column: 18 },
                                end: { line: 1, column: 20 }
                            }
                        },
                        rest: null,
                        generator: false,
                        expression: false,
                        range: [18, 20],
                        loc: {
                            start: { line: 1, column: 18 },
                            end: { line: 1, column: 20 }
                        }
                    },
                    kind: 'get',
                    range: [6, 20],
                    loc: {
                        start: { line: 1, column: 6 },
                        end: { line: 1, column: 20 }
                    }
                }],
                range: [4, 22],
                loc: {
                    start: { line: 1, column: 4 },
                    end: { line: 1, column: 22 }
                }
            },
            range: [0, 22],
            loc: {
                start: { line: 1, column: 0 },
                end: { line: 1, column: 22 }
            }
        },
        range: [0, 22],
        loc: {
            start: { line: 1, column: 0 },
            end: { line: 1, column: 22 }
        }
    },

    'x = { get null() {} }': {
        type: 'ExpressionStatement',
        expression: {
            type: 'AssignmentExpression',
            operator: '=',
            left: {
                type: 'Identifier',
                name: 'x',
                range: [0, 1],
                loc: {
                    start: { line: 1, column: 0 },
                    end: { line: 1, column: 1 }
                }
            },
            right: {
                type: 'ObjectExpression',
                properties: [{
                    type: 'Property',
                    key: {
                        type: 'Identifier',
                        name: 'null',
                        range: [10, 14],
                        loc: {
                            start: { line: 1, column: 10 },
                            end: { line: 1, column: 14 }
                        }
                    },
                    value: {
                        type: 'FunctionExpression',
                        id: null,
                        params: [],
                        defaults: [],
                        body: {
                            type: 'BlockStatement',
                            body: [],
                            range: [17, 19],
                            loc: {
                                start: { line: 1, column: 17 },
                                end: { line: 1, column: 19 }
                            }
                        },
                        rest: null,
                        generator: false,
                        expression: false,
                        range: [17, 19],
                        loc: {
                            start: { line: 1, column: 17 },
                            end: { line: 1, column: 19 }
                        }
                    },
                    kind: 'get',
                    range: [6, 19],
                    loc: {
                        start: { line: 1, column: 6 },
                        end: { line: 1, column: 19 }
                    }
                }],
                range: [4, 21],
                loc: {
                    start: { line: 1, column: 4 },
                    end: { line: 1, column: 21 }
                }
            },
            range: [0, 21],
            loc: {
                start: { line: 1, column: 0 },
                end: { line: 1, column: 21 }
            }
        },
        range: [0, 21],
        loc: {
            start: { line: 1, column: 0 },
            end: { line: 1, column: 21 }
        }
    },

    'x = { get "undef"() {} }': {
        type: 'ExpressionStatement',
        expression: {
            type: 'AssignmentExpression',
            operator: '=',
            left: {
                type: 'Identifier',
                name: 'x',
                range: [0, 1],
                loc: {
                    start: { line: 1, column: 0 },
                    end: { line: 1, column: 1 }
                }
            },
            right: {
                type: 'ObjectExpression',
                properties: [{
                    type: 'Property',
                    key: {
                        type: 'Literal',
                        value: 'undef',
                        raw: '"undef"',
                        range: [10, 17],
                        loc: {
                            start: { line: 1, column: 10 },
                            end: { line: 1, column: 17 }
                        }
                    },
                    value: {
                        type: 'FunctionExpression',
                        id: null,
                        params: [],
                        defaults: [],
                        body: {
                            type: 'BlockStatement',
                            body: [],
                            range: [20, 22],
                            loc: {
                                start: { line: 1, column: 20 },
                                end: { line: 1, column: 22 }
                            }
                        },
                        rest: null,
                        generator: false,
                        expression: false,
                        range: [20, 22],
                        loc: {
                            start: { line: 1, column: 20 },
                            end: { line: 1, column: 22 }
                        }
                    },
                    kind: 'get',
                    range: [6, 22],
                    loc: {
                        start: { line: 1, column: 6 },
                        end: { line: 1, column: 22 }
                    }
                }],
                range: [4, 24],
                loc: {
                    start: { line: 1, column: 4 },
                    end: { line: 1, column: 24 }
                }
            },
            range: [0, 24],
            loc: {
                start: { line: 1, column: 0 },
                end: { line: 1, column: 24 }
            }
        },
        range: [0, 24],
        loc: {
            start: { line: 1, column: 0 },
            end: { line: 1, column: 24 }
        }
    },

    'x = { get 10() {} }': {
        type: 'ExpressionStatement',
        expression: {
            type: 'AssignmentExpression',
            operator: '=',
            left: {
                type: 'Identifier',
                name: 'x',
                range: [0, 1],
                loc: {
                    start: { line: 1, column: 0 },
                    end: { line: 1, column: 1 }
                }
            },
            right: {
                type: 'ObjectExpression',
                properties: [{
                    type: 'Property',
                    key: {
                        type: 'Literal',
                        value: 10,
                        raw: '10',
                        range: [10, 12],
                        loc: {
                            start: { line: 1, column: 10 },
                            end: { line: 1, column: 12 }
                        }
                    },
                    value: {
                        type: 'FunctionExpression',
                        id: null,
                        params: [],
                        defaults: [],
                        body: {
                            type: 'BlockStatement',
                            body: [],
                            range: [15, 17],
                            loc: {
                                start: { line: 1, column: 15 },
                                end: { line: 1, column: 17 }
                            }
                        },
                        rest: null,
                        generator: false,
                        expression: false,
                        range: [15, 17],
                        loc: {
                            start: { line: 1, column: 15 },
                            end: { line: 1, column: 17 }
                        }
                    },
                    kind: 'get',
                    range: [6, 17],
                    loc: {
                        start: { line: 1, column: 6 },
                        end: { line: 1, column: 17 }
                    }
                }],
                range: [4, 19],
                loc: {
                    start: { line: 1, column: 4 },
                    end: { line: 1, column: 19 }
                }
            },
            range: [0, 19],
            loc: {
                start: { line: 1, column: 0 },
                end: { line: 1, column: 19 }
            }
        },
        range: [0, 19],
        loc: {
            start: { line: 1, column: 0 },
            end: { line: 1, column: 19 }
        }
    },

    'x = { set width(w) { m_width = w } }': {
        type: 'ExpressionStatement',
        expression: {
            type: 'AssignmentExpression',
            operator: '=',
            left: {
                type: 'Identifier',
                name: 'x',
                range: [0, 1],
                loc: {
                    start: { line: 1, column: 0 },
                    end: { line: 1, column: 1 }
                }
            },
            right: {
                type: 'ObjectExpression',
                properties: [{
                    type: 'Property',
                    key: {
                        type: 'Identifier',
                        name: 'width',
                        range: [10, 15],
                        loc: {
                            start: { line: 1, column: 10 },
                            end: { line: 1, column: 15 }
                        }
                    },
                    value: {
                        type: 'FunctionExpression',
                        id: null,
                        params: [{
                            type: 'Identifier',
                            name: 'w',
                            range: [16, 17],
                            loc: {
                                start: { line: 1, column: 16 },
                                end: { line: 1, column: 17 }
                            }
                        }],
                        defaults: [],
                        body: {
                            type: 'BlockStatement',
                            body: [{
                                type: 'ExpressionStatement',
                                expression: {
                                    type: 'AssignmentExpression',
                                    operator: '=',
                                    left: {
                                        type: 'Identifier',
                                        name: 'm_width',
                                        range: [21, 28],
                                        loc: {
                                            start: { line: 1, column: 21 },
                                            end: { line: 1, column: 28 }
                                        }
                                    },
                                    right: {
                                        type: 'Identifier',
                                        name: 'w',
                                        range: [31, 32],
                                        loc: {
                                            start: { line: 1, column: 31 },
                                            end: { line: 1, column: 32 }
                                        }
                                    },
                                    range: [21, 32],
                                    loc: {
                                        start: { line: 1, column: 21 },
                                        end: { line: 1, column: 32 }
                                    }
                                },
                                range: [21, 33],
                                loc: {
                                    start: { line: 1, column: 21 },
                                    end: { line: 1, column: 33 }
                                }
                            }],
                            range: [19, 34],
                            loc: {
                                start: { line: 1, column: 19 },
                                end: { line: 1, column: 34 }
                            }
                        },
                        rest: null,
                        generator: false,
                        expression: false,
                        range: [19, 34],
                        loc: {
                            start: { line: 1, column: 19 },
                            end: { line: 1, column: 34 }
                        }
                    },
                    kind: 'set',
                    range: [6, 34],
                    loc: {
                        start: { line: 1, column: 6 },
                        end: { line: 1, column: 34 }
                    }
                }],
                range: [4, 36],
                loc: {
                    start: { line: 1, column: 4 },
                    end: { line: 1, column: 36 }
                }
            },
            range: [0, 36],
            loc: {
                start: { line: 1, column: 0 },
                end: { line: 1, column: 36 }
            }
        },
        range: [0, 36],
        loc: {
            start: { line: 1, column: 0 },
            end: { line: 1, column: 36 }
        }
    },

    'x = { set if(w) { m_if = w } }': {
        type: 'ExpressionStatement',
        expression: {
            type: 'AssignmentExpression',
            operator: '=',
            left: {
                type: 'Identifier',
                name: 'x',
                range: [0, 1],
                loc: {
                    start: { line: 1, column: 0 },
                    end: { line: 1, column: 1 }
                }
            },
            right: {
                type: 'ObjectExpression',
                properties: [{
                    type: 'Property',
                    key: {
                        type: 'Identifier',
                        name: 'if',
                        range: [10, 12],
                        loc: {
                            start: { line: 1, column: 10 },
                            end: { line: 1, column: 12 }
                        }
                    },
                    value: {
                        type: 'FunctionExpression',
                        id: null,
                        params: [{
                            type: 'Identifier',
                            name: 'w',
                            range: [13, 14],
                            loc: {
                                start: { line: 1, column: 13 },
                                end: { line: 1, column: 14 }
                            }
                        }],
                        defaults: [],
                        body: {
                            type: 'BlockStatement',
                            body: [{
                                type: 'ExpressionStatement',
                                expression: {
                                    type: 'AssignmentExpression',
                                    operator: '=',
                                    left: {
                                        type: 'Identifier',
                                        name: 'm_if',
                                        range: [18, 22],
                                        loc: {
                                            start: { line: 1, column: 18 },
                                            end: { line: 1, column: 22 }
                                        }
                                    },
                                    right: {
                                        type: 'Identifier',
                                        name: 'w',
                                        range: [25, 26],
                                        loc: {
                                            start: { line: 1, column: 25 },
                                            end: { line: 1, column: 26 }
                                        }
                                    },
                                    range: [18, 26],
                                    loc: {
                                        start: { line: 1, column: 18 },
                                        end: { line: 1, column: 26 }
                                    }
                                },
                                range: [18, 27],
                                loc: {
                                    start: { line: 1, column: 18 },
                                    end: { line: 1, column: 27 }
                                }
                            }],
                            range: [16, 28],
                            loc: {
                                start: { line: 1, column: 16 },
                                end: { line: 1, column: 28 }
                            }
                        },
                        rest: null,
                        generator: false,
                        expression: false,
                        range: [16, 28],
                        loc: {
                            start: { line: 1, column: 16 },
                            end: { line: 1, column: 28 }
                        }
                    },
                    kind: 'set',
                    range: [6, 28],
                    loc: {
                        start: { line: 1, column: 6 },
                        end: { line: 1, column: 28 }
                    }
                }],
                range: [4, 30],
                loc: {
                    start: { line: 1, column: 4 },
                    end: { line: 1, column: 30 }
                }
            },
            range: [0, 30],
            loc: {
                start: { line: 1, column: 0 },
                end: { line: 1, column: 30 }
            }
        },
        range: [0, 30],
        loc: {
            start: { line: 1, column: 0 },
            end: { line: 1, column: 30 }
        }
    },

    'x = { set true(w) { m_true = w } }': {
        type: 'ExpressionStatement',
        expression: {
            type: 'AssignmentExpression',
            operator: '=',
            left: {
                type: 'Identifier',
                name: 'x',
                range: [0, 1],
                loc: {
                    start: { line: 1, column: 0 },
                    end: { line: 1, column: 1 }
                }
            },
            right: {
                type: 'ObjectExpression',
                properties: [{
                    type: 'Property',
                    key: {
                        type: 'Identifier',
                        name: 'true',
                        range: [10, 14],
                        loc: {
                            start: { line: 1, column: 10 },
                            end: { line: 1, column: 14 }
                        }
                    },
                    value: {
                        type: 'FunctionExpression',
                        id: null,
                        params: [{
                            type: 'Identifier',
                            name: 'w',
                            range: [15, 16],
                            loc: {
                                start: { line: 1, column: 15 },
                                end: { line: 1, column: 16 }
                            }
                        }],
                        defaults: [],
                        body: {
                            type: 'BlockStatement',
                            body: [{
                                type: 'ExpressionStatement',
                                expression: {
                                    type: 'AssignmentExpression',
                                    operator: '=',
                                    left: {
                                        type: 'Identifier',
                                        name: 'm_true',
                                        range: [20, 26],
                                        loc: {
                                            start: { line: 1, column: 20 },
                                            end: { line: 1, column: 26 }
                                        }
                                    },
                                    right: {
                                        type: 'Identifier',
                                        name: 'w',
                                        range: [29, 30],
                                        loc: {
                                            start: { line: 1, column: 29 },
                                            end: { line: 1, column: 30 }
                                        }
                                    },
                                    range: [20, 30],
                                    loc: {
                                        start: { line: 1, column: 20 },
                                        end: { line: 1, column: 30 }
                                    }
                                },
                                range: [20, 31],
                                loc: {
                                    start: { line: 1, column: 20 },
                                    end: { line: 1, column: 31 }
                                }
                            }],
                            range: [18, 32],
                            loc: {
                                start: { line: 1, column: 18 },
                                end: { line: 1, column: 32 }
                            }
                        },
                        rest: null,
                        generator: false,
                        expression: false,
                        range: [18, 32],
                        loc: {
                            start: { line: 1, column: 18 },
                            end: { line: 1, column: 32 }
                        }
                    },
                    kind: 'set',
                    range: [6, 32],
                    loc: {
                        start: { line: 1, column: 6 },
                        end: { line: 1, column: 32 }
                    }
                }],
                range: [4, 34],
                loc: {
                    start: { line: 1, column: 4 },
                    end: { line: 1, column: 34 }
                }
            },
            range: [0, 34],
            loc: {
                start: { line: 1, column: 0 },
                end: { line: 1, column: 34 }
            }
        },
        range: [0, 34],
        loc: {
            start: { line: 1, column: 0 },
            end: { line: 1, column: 34 }
        }
    },

    'x = { set false(w) { m_false = w } }': {
        type: 'ExpressionStatement',
        expression: {
            type: 'AssignmentExpression',
            operator: '=',
            left: {
                type: 'Identifier',
                name: 'x',
                range: [0, 1],
                loc: {
                    start: { line: 1, column: 0 },
                    end: { line: 1, column: 1 }
                }
            },
            right: {
                type: 'ObjectExpression',
                properties: [{
                    type: 'Property',
                    key: {
                        type: 'Identifier',
                        name: 'false',
                        range: [10, 15],
                        loc: {
                            start: { line: 1, column: 10 },
                            end: { line: 1, column: 15 }
                        }
                    },
                    value: {
                        type: 'FunctionExpression',
                        id: null,
                        params: [{
                            type: 'Identifier',
                            name: 'w',
                            range: [16, 17],
                            loc: {
                                start: { line: 1, column: 16 },
                                end: { line: 1, column: 17 }
                            }
                        }],
                        defaults: [],
                        body: {
                            type: 'BlockStatement',
                            body: [{
                                type: 'ExpressionStatement',
                                expression: {
                                    type: 'AssignmentExpression',
                                    operator: '=',
                                    left: {
                                        type: 'Identifier',
                                        name: 'm_false',
                                        range: [21, 28],
                                        loc: {
                                            start: { line: 1, column: 21 },
                                            end: { line: 1, column: 28 }
                                        }
                                    },
                                    right: {
                                        type: 'Identifier',
                                        name: 'w',
                                        range: [31, 32],
                                        loc: {
                                            start: { line: 1, column: 31 },
                                            end: { line: 1, column: 32 }
                                        }
                                    },
                                    range: [21, 32],
                                    loc: {
                                        start: { line: 1, column: 21 },
                                        end: { line: 1, column: 32 }
                                    }
                                },
                                range: [21, 33],
                                loc: {
                                    start: { line: 1, column: 21 },
                                    end: { line: 1, column: 33 }
                                }
                            }],
                            range: [19, 34],
                            loc: {
                                start: { line: 1, column: 19 },
                                end: { line: 1, column: 34 }
                            }
                        },
                        rest: null,
                        generator: false,
                        expression: false,
                        range: [19, 34],
                        loc: {
                            start: { line: 1, column: 19 },
                            end: { line: 1, column: 34 }
                        }
                    },
                    kind: 'set',
                    range: [6, 34],
                    loc: {
                        start: { line: 1, column: 6 },
                        end: { line: 1, column: 34 }
                    }
                }],
                range: [4, 36],
                loc: {
                    start: { line: 1, column: 4 },
                    end: { line: 1, column: 36 }
                }
            },
            range: [0, 36],
            loc: {
                start: { line: 1, column: 0 },
                end: { line: 1, column: 36 }
            }
        },
        range: [0, 36],
        loc: {
            start: { line: 1, column: 0 },
            end: { line: 1, column: 36 }
        }
    },

    'x = { set null(w) { m_null = w } }': {
        type: 'ExpressionStatement',
        expression: {
            type: 'AssignmentExpression',
            operator: '=',
            left: {
                type: 'Identifier',
                name: 'x',
                range: [0, 1],
                loc: {
                    start: { line: 1, column: 0 },
                    end: { line: 1, column: 1 }
                }
            },
            right: {
                type: 'ObjectExpression',
                properties: [{
                    type: 'Property',
                    key: {
                        type: 'Identifier',
                        name: 'null',
                        range: [10, 14],
                        loc: {
                            start: { line: 1, column: 10 },
                            end: { line: 1, column: 14 }
                        }
                    },
                    value: {
                        type: 'FunctionExpression',
                        id: null,
                        params: [{
                            type: 'Identifier',
                            name: 'w',
                            range: [15, 16],
                            loc: {
                                start: { line: 1, column: 15 },
                                end: { line: 1, column: 16 }
                            }
                        }],
                        defaults: [],
                        body: {
                            type: 'BlockStatement',
                            body: [{
                                type: 'ExpressionStatement',
                                expression: {
                                    type: 'AssignmentExpression',
                                    operator: '=',
                                    left: {
                                        type: 'Identifier',
                                        name: 'm_null',
                                        range: [20, 26],
                                        loc: {
                                            start: { line: 1, column: 20 },
                                            end: { line: 1, column: 26 }
                                        }
                                    },
                                    right: {
                                        type: 'Identifier',
                                        name: 'w',
                                        range: [29, 30],
                                        loc: {
                                            start: { line: 1, column: 29 },
                                            end: { line: 1, column: 30 }
                                        }
                                    },
                                    range: [20, 30],
                                    loc: {
                                        start: { line: 1, column: 20 },
                                        end: { line: 1, column: 30 }
                                    }
                                },
                                range: [20, 31],
                                loc: {
                                    start: { line: 1, column: 20 },
                                    end: { line: 1, column: 31 }
                                }
                            }],
                            range: [18, 32],
                            loc: {
                                start: { line: 1, column: 18 },
                                end: { line: 1, column: 32 }
                            }
                        },
                        rest: null,
                        generator: false,
                        expression: false,
                        range: [18, 32],
                        loc: {
                            start: { line: 1, column: 18 },
                            end: { line: 1, column: 32 }
                        }
                    },
                    kind: 'set',
                    range: [6, 32],
                    loc: {
                        start: { line: 1, column: 6 },
                        end: { line: 1, column: 32 }
                    }
                }],
                range: [4, 34],
                loc: {
                    start: { line: 1, column: 4 },
                    end: { line: 1, column: 34 }
                }
            },
            range: [0, 34],
            loc: {
                start: { line: 1, column: 0 },
                end: { line: 1, column: 34 }
            }
        },
        range: [0, 34],
        loc: {
            start: { line: 1, column: 0 },
            end: { line: 1, column: 34 }
        }
    },

    'x = { set "null"(w) { m_null = w } }': {
        type: 'ExpressionStatement',
        expression: {
            type: 'AssignmentExpression',
            operator: '=',
            left: {
                type: 'Identifier',
                name: 'x',
                range: [0, 1],
                loc: {
                    start: { line: 1, column: 0 },
                    end: { line: 1, column: 1 }
                }
            },
            right: {
                type: 'ObjectExpression',
                properties: [{
                    type: 'Property',
                    key: {
                        type: 'Literal',
                        value: 'null',
                        raw: '"null"',
                        range: [10, 16],
                        loc: {
                            start: { line: 1, column: 10 },
                            end: { line: 1, column: 16 }
                        }
                    },
                    value: {
                        type: 'FunctionExpression',
                        id: null,
                        params: [{
                            type: 'Identifier',
                            name: 'w',
                            range: [17, 18],
                            loc: {
                                start: { line: 1, column: 17 },
                                end: { line: 1, column: 18 }
                            }
                        }],
                        defaults: [],
                        body: {
                            type: 'BlockStatement',
                            body: [{
                                type: 'ExpressionStatement',
                                expression: {
                                    type: 'AssignmentExpression',
                                    operator: '=',
                                    left: {
                                        type: 'Identifier',
                                        name: 'm_null',
                                        range: [22, 28],
                                        loc: {
                                            start: { line: 1, column: 22 },
                                            end: { line: 1, column: 28 }
                                        }
                                    },
                                    right: {
                                        type: 'Identifier',
                                        name: 'w',
                                        range: [31, 32],
                                        loc: {
                                            start: { line: 1, column: 31 },
                                            end: { line: 1, column: 32 }
                                        }
                                    },
                                    range: [22, 32],
                                    loc: {
                                        start: { line: 1, column: 22 },
                                        end: { line: 1, column: 32 }
                                    }
                                },
                                range: [22, 33],
                                loc: {
                                    start: { line: 1, column: 22 },
                                    end: { line: 1, column: 33 }
                                }
                            }],
                            range: [20, 34],
                            loc: {
                                start: { line: 1, column: 20 },
                                end: { line: 1, column: 34 }
                            }
                        },
                        rest: null,
                        generator: false,
                        expression: false,
                        range: [20, 34],
                        loc: {
                            start: { line: 1, column: 20 },
                            end: { line: 1, column: 34 }
                        }
                    },
                    kind: 'set',
                    range: [6, 34],
                    loc: {
                        start: { line: 1, column: 6 },
                        end: { line: 1, column: 34 }
                    }
                }],
                range: [4, 36],
                loc: {
                    start: { line: 1, column: 4 },
                    end: { line: 1, column: 36 }
                }
            },
            range: [0, 36],
            loc: {
                start: { line: 1, column: 0 },
                end: { line: 1, column: 36 }
            }
        },
        range: [0, 36],
        loc: {
            start: { line: 1, column: 0 },
            end: { line: 1, column: 36 }
        }
    },

    'x = { set 10(w) { m_null = w } }': {
        type: 'ExpressionStatement',
        expression: {
            type: 'AssignmentExpression',
            operator: '=',
            left: {
                type: 'Identifier',
                name: 'x',
                range: [0, 1],
                loc: {
                    start: { line: 1, column: 0 },
                    end: { line: 1, column: 1 }
                }
            },
            right: {
                type: 'ObjectExpression',
                properties: [{
                    type: 'Property',
                    key: {
                        type: 'Literal',
                        value: 10,
                        raw: '10',
                        range: [10, 12],
                        loc: {
                            start: { line: 1, column: 10 },
                            end: { line: 1, column: 12 }
                        }
                    },
                    value: {
                        type: 'FunctionExpression',
                        id: null,
                        params: [{
                            type: 'Identifier',
                            name: 'w',
                            range: [13, 14],
                            loc: {
                                start: { line: 1, column: 13 },
                                end: { line: 1, column: 14 }
                            }
                        }],
                        defaults: [],
                        body: {
                            type: 'BlockStatement',
                            body: [{
                                type: 'ExpressionStatement',
                                expression: {
                                    type: 'AssignmentExpression',
                                    operator: '=',
                                    left: {
                                        type: 'Identifier',
                                        name: 'm_null',
                                        range: [18, 24],
                                        loc: {
                                            start: { line: 1, column: 18 },
                                            end: { line: 1, column: 24 }
                                        }
                                    },
                                    right: {
                                        type: 'Identifier',
                                        name: 'w',
                                        range: [27, 28],
                                        loc: {
                                            start: { line: 1, column: 27 },
                                            end: { line: 1, column: 28 }
                                        }
                                    },
                                    range: [18, 28],
                                    loc: {
                                        start: { line: 1, column: 18 },
                                        end: { line: 1, column: 28 }
                                    }
                                },
                                range: [18, 29],
                                loc: {
                                    start: { line: 1, column: 18 },
                                    end: { line: 1, column: 29 }
                                }
                            }],
                            range: [16, 30],
                            loc: {
                                start: { line: 1, column: 16 },
                                end: { line: 1, column: 30 }
                            }
                        },
                        rest: null,
                        generator: false,
                        expression: false,
                        range: [16, 30],
                        loc: {
                            start: { line: 1, column: 16 },
                            end: { line: 1, column: 30 }
                        }
                    },
                    kind: 'set',
                    range: [6, 30],
                    loc: {
                        start: { line: 1, column: 6 },
                        end: { line: 1, column: 30 }
                    }
                }],
                range: [4, 32],
                loc: {
                    start: { line: 1, column: 4 },
                    end: { line: 1, column: 32 }
                }
            },
            range: [0, 32],
            loc: {
                start: { line: 1, column: 0 },
                end: { line: 1, column: 32 }
            }
        },
        range: [0, 32],
        loc: {
            start: { line: 1, column: 0 },
            end: { line: 1, column: 32 }
        }
    },

    'x = { get: 42 }': {
        type: 'ExpressionStatement',
        expression: {
            type: 'AssignmentExpression',
            operator: '=',
            left: {
                type: 'Identifier',
                name: 'x',
                range: [0, 1],
                loc: {
                    start: { line: 1, column: 0 },
                    end: { line: 1, column: 1 }
                }
            },
            right: {
                type: 'ObjectExpression',
                properties: [{
                    type: 'Property',
                    key: {
                        type: 'Identifier',
                        name: 'get',
                        range: [6, 9],
                        loc: {
                            start: { line: 1, column: 6 },
                            end: { line: 1, column: 9 }
                        }
                    },
                    value: {
                        type: 'Literal',
                        value: 42,
                        raw: '42',
                        range: [11, 13],
                        loc: {
                            start: { line: 1, column: 11 },
                            end: { line: 1, column: 13 }
                        }
                    },
                    kind: 'init',
                    range: [6, 13],
                    loc: {
                        start: { line: 1, column: 6 },
                        end: { line: 1, column: 13 }
                    }
                }],
                range: [4, 15],
                loc: {
                    start: { line: 1, column: 4 },
                    end: { line: 1, column: 15 }
                }
            },
            range: [0, 15],
            loc: {
                start: { line: 1, column: 0 },
                end: { line: 1, column: 15 }
            }
        },
        range: [0, 15],
        loc: {
            start: { line: 1, column: 0 },
            end: { line: 1, column: 15 }
        }
    },

    'x = { set: 43 }': {
        type: 'ExpressionStatement',
        expression: {
            type: 'AssignmentExpression',
            operator: '=',
            left: {
                type: 'Identifier',
                name: 'x',
                range: [0, 1],
                loc: {
                    start: { line: 1, column: 0 },
                    end: { line: 1, column: 1 }
                }
            },
            right: {
                type: 'ObjectExpression',
                properties: [{
                    type: 'Property',
                    key: {
                        type: 'Identifier',
                        name: 'set',
                        range: [6, 9],
                        loc: {
                            start: { line: 1, column: 6 },
                            end: { line: 1, column: 9 }
                        }
                    },
                    value: {
                        type: 'Literal',
                        value: 43,
                        raw: '43',
                        range: [11, 13],
                        loc: {
                            start: { line: 1, column: 11 },
                            end: { line: 1, column: 13 }
                        }
                    },
                    kind: 'init',
                    range: [6, 13],
                    loc: {
                        start: { line: 1, column: 6 },
                        end: { line: 1, column: 13 }
                    }
                }],
                range: [4, 15],
                loc: {
                    start: { line: 1, column: 4 },
                    end: { line: 1, column: 15 }
                }
            },
            range: [0, 15],
            loc: {
                start: { line: 1, column: 0 },
                end: { line: 1, column: 15 }
            }
        },
        range: [0, 15],
        loc: {
            start: { line: 1, column: 0 },
            end: { line: 1, column: 15 }
        }
    },

    'x = { __proto__: 2 }': {
        type: 'ExpressionStatement',
        expression: {
            type: 'AssignmentExpression',
            operator: '=',
            left: {
                type: 'Identifier',
                name: 'x',
                range: [0, 1],
                loc: {
                    start: { line: 1, column: 0 },
                    end: { line: 1, column: 1 }
                }
            },
            right: {
                type: 'ObjectExpression',
                properties: [{
                    type: 'Property',
                    key: {
                        type: 'Identifier',
                        name: '__proto__',
                        range: [6, 15],
                        loc: {
                            start: { line: 1, column: 6 },
                            end: { line: 1, column: 15 }
                        }
                    },
                    value: {
                        type: 'Literal',
                        value: 2,
                        raw: '2',
                        range: [17, 18],
                        loc: {
                            start: { line: 1, column: 17 },
                            end: { line: 1, column: 18 }
                        }
                    },
                    kind: 'init',
                    range: [6, 18],
                    loc: {
                        start: { line: 1, column: 6 },
                        end: { line: 1, column: 18 }
                    }
                }],
                range: [4, 20],
                loc: {
                    start: { line: 1, column: 4 },
                    end: { line: 1, column: 20 }
                }
            },
            range: [0, 20],
            loc: {
                start: { line: 1, column: 0 },
                end: { line: 1, column: 20 }
            }
        },
        range: [0, 20],
        loc: {
            start: { line: 1, column: 0 },
            end: { line: 1, column: 20 }
        }
    },

    'x = {"__proto__": 2 }': {
        type: 'ExpressionStatement',
        expression: {
            type: 'AssignmentExpression',
            operator: '=',
            left: {
                type: 'Identifier',
                name: 'x',
                range: [0, 1],
                loc: {
                    start: { line: 1, column: 0 },
                    end: { line: 1, column: 1 }
                }
            },
            right: {
                type: 'ObjectExpression',
                properties: [{
                    type: 'Property',
                    key: {
                        type: 'Literal',
                        value: '__proto__',
                        raw: '"__proto__"',
                        range: [5, 16],
                        loc: {
                            start: { line: 1, column: 5 },
                            end: { line: 1, column: 16 }
                        }
                    },
                    value: {
                        type: 'Literal',
                        value: 2,
                        raw: '2',
                        range: [18, 19],
                        loc: {
                            start: { line: 1, column: 18 },
                            end: { line: 1, column: 19 }
                        }
                    },
                    kind: 'init',
                    range: [5, 19],
                    loc: {
                        start: { line: 1, column: 5 },
                        end: { line: 1, column: 19 }
                    }
                }],
                range: [4, 21],
                loc: {
                    start: { line: 1, column: 4 },
                    end: { line: 1, column: 21 }
                }
            },
            range: [0, 21],
            loc: {
                start: { line: 1, column: 0 },
                end: { line: 1, column: 21 }
            }
        },
        range: [0, 21],
        loc: {
            start: { line: 1, column: 0 },
            end: { line: 1, column: 21 }
        }
    },

    'x = { get width() { return m_width }, set width(width) { m_width = width; } }': {
        type: 'ExpressionStatement',
        expression: {
            type: 'AssignmentExpression',
            operator: '=',
            left: {
                type: 'Identifier',
                name: 'x',
                range: [0, 1],
                loc: {
                    start: { line: 1, column: 0 },
                    end: { line: 1, column: 1 }
                }
            },
            right: {
                type: 'ObjectExpression',
                properties: [{
                    type: 'Property',
                    key: {
                        type: 'Identifier',
                        name: 'width',
                        range: [10, 15],
                        loc: {
                            start: { line: 1, column: 10 },
                            end: { line: 1, column: 15 }
                        }
                    },
                    value: {
                        type: 'FunctionExpression',
                        id: null,
                        params: [],
                        defaults: [],
                        body: {
                            type: 'BlockStatement',
                            body: [{
                                type: 'ReturnStatement',
                                argument: {
                                    type: 'Identifier',
                                    name: 'm_width',
                                    range: [27, 34],
                                    loc: {
                                        start: { line: 1, column: 27 },
                                        end: { line: 1, column: 34 }
                                    }
                                },
                                range: [20, 35],
                                loc: {
                                    start: { line: 1, column: 20 },
                                    end: { line: 1, column: 35 }
                                }
                            }],
                            range: [18, 36],
                            loc: {
                                start: { line: 1, column: 18 },
                                end: { line: 1, column: 36 }
                            }
                        },
                        rest: null,
                        generator: false,
                        expression: false,
                        range: [18, 36],
                        loc: {
                            start: { line: 1, column: 18 },
                            end: { line: 1, column: 36 }
                        }
                    },
                    kind: 'get',
                    range: [6, 36],
                    loc: {
                        start: { line: 1, column: 6 },
                        end: { line: 1, column: 36 }
                    }
                }, {
                    type: 'Property',
                    key: {
                        type: 'Identifier',
                        name: 'width',
                        range: [42, 47],
                        loc: {
                            start: { line: 1, column: 42 },
                            end: { line: 1, column: 47 }
                        }
                    },
                    value: {
                        type: 'FunctionExpression',
                        id: null,
                        params: [{
                            type: 'Identifier',
                            name: 'width',
                            range: [48, 53],
                            loc: {
                                start: { line: 1, column: 48 },
                                end: { line: 1, column: 53 }
                            }
                        }],
                        defaults: [],
                        body: {
                            type: 'BlockStatement',
                            body: [{
                                type: 'ExpressionStatement',
                                expression: {
                                    type: 'AssignmentExpression',
                                    operator: '=',
                                    left: {
                                        type: 'Identifier',
                                        name: 'm_width',
                                        range: [57, 64],
                                        loc: {
                                            start: { line: 1, column: 57 },
                                            end: { line: 1, column: 64 }
                                        }
                                    },
                                    right: {
                                        type: 'Identifier',
                                        name: 'width',
                                        range: [67, 72],
                                        loc: {
                                            start: { line: 1, column: 67 },
                                            end: { line: 1, column: 72 }
                                        }
                                    },
                                    range: [57, 72],
                                    loc: {
                                        start: { line: 1, column: 57 },
                                        end: { line: 1, column: 72 }
                                    }
                                },
                                range: [57, 73],
                                loc: {
                                    start: { line: 1, column: 57 },
                                    end: { line: 1, column: 73 }
                                }
                            }],
                            range: [55, 75],
                            loc: {
                                start: { line: 1, column: 55 },
                                end: { line: 1, column: 75 }
                            }
                        },
                        rest: null,
                        generator: false,
                        expression: false,
                        range: [55, 75],
                        loc: {
                            start: { line: 1, column: 55 },
                            end: { line: 1, column: 75 }
                        }
                    },
                    kind: 'set',
                    range: [38, 75],
                    loc: {
                        start: { line: 1, column: 38 },
                        end: { line: 1, column: 75 }
                    }
                }],
                range: [4, 77],
                loc: {
                    start: { line: 1, column: 4 },
                    end: { line: 1, column: 77 }
                }
            },
            range: [0, 77],
            loc: {
                start: { line: 1, column: 0 },
                end: { line: 1, column: 77 }
            }
        },
        range: [0, 77],
        loc: {
            start: { line: 1, column: 0 },
            end: { line: 1, column: 77 }
        }
    }

},

'Comments': {

    '/* block comment */ 42': {
        type: 'ExpressionStatement',
        expression: {
            type: 'Literal',
            value: 42,
            raw: '42',
            range: [20, 22],
            loc: {
                start: { line: 1, column: 20 },
                end: { line: 1, column: 22 }
            }
        },
        range: [20, 22],
        loc: {
            start: { line: 1, column: 20 },
            end: { line: 1, column: 22 }
        }
    },

    '42 /* block comment 1 */ /* block comment 2 */': {
        "type": "Program",
        "body": [
            {
                "type": "ExpressionStatement",
                "expression": {
                    "type": "Literal",
                    "value": 42,
                    "raw": "42",
                    "range": [
                        0,
                        2
                    ],
                    "trailingComments": [
                        {
                            "type": "Block",
                            "value": " block comment 1 ",
                            "range": [
                                3,
                                24
                            ]
                        },
                        {
                            "type": "Block",
                            "value": " block comment 2 ",
                            "range": [
                                25,
                                46
                            ]
                        }
                    ]
                },
                "range": [
                    0,
                    46
                ]
            }
        ],
        "range": [
            0,
            46
        ],
        "comments": [
            {
                "type": "Block",
                "value": " block comment 1 ",
                "range": [
                    3,
                    24
                ]
            },
            {
                "type": "Block",
                "value": " block comment 2 ",
                "range": [
                    25,
                    46
                ]
            }
        ],
        "tokens": [
            {
                "type": "Numeric",
                "range": [
                    0,
                    2
                ],
                "value": "42"
            }
        ]
    },

    'var p1;/* block comment 1 */ /* block comment 2 */': {
        "range": [
            0,
            7
        ],
        "loc": {
            "start": {
                "line": 1,
                "column": 0
            },
            "end": {
                "line": 1,
                "column": 7
            }
        },
        "type": "Program",
        "body": [
            {
                "range": [
                    0,
                    7
                ],
                "loc": {
                    "start": {
                        "line": 1,
                        "column": 0
                    },
                    "end": {
                        "line": 1,
                        "column": 7
                    }
                },
                "type": "VariableDeclaration",
                "declarations": [
                    {
                        "range": [
                            4,
                            6
                        ],
                        "loc": {
                            "start": {
                                "line": 1,
                                "column": 4
                            },
                            "end": {
                                "line": 1,
                                "column": 6
                            }
                        },
                        "type": "VariableDeclarator",
                        "id": {
                            "range": [
                                4,
                                6
                            ],
                            "loc": {
                                "start": {
                                    "line": 1,
                                    "column": 4
                                },
                                "end": {
                                    "line": 1,
                                    "column": 6
                                }
                            },
                            "type": "Identifier",
                            "name": "p1"
                        },
                        "init": null
                    }
                ],
                "kind": "var",
                "trailingComments": [
                    {
                        "range": [
                            7,
                            28
                        ],
                        "loc": {
                            "start": {
                                "line": 1,
                                "column": 7
                            },
                            "end": {
                                "line": 1,
                                "column": 28
                            }
                        },
                        "type": "Block",
                        "value": " block comment 1 "
                    },
                    {
                        "range": [
                            29,
                            50
                        ],
                        "loc": {
                            "start": {
                                "line": 1,
                                "column": 29
                            },
                            "end": {
                                "line": 1,
                                "column": 50
                            }
                        },
                        "type": "Block",
                        "value": " block comment 2 "
                    }
                ]
            }
        ],
        "comments": [
            {
                "range": [
                    7,
                    28
                ],
                "loc": {
                    "start": {
                        "line": 1,
                        "column": 7
                    },
                    "end": {
                        "line": 1,
                        "column": 28
                    }
                },
                "type": "Block",
                "value": " block comment 1 "
            },
            {
                "range": [
                    29,
                    50
                ],
                "loc": {
                    "start": {
                        "line": 1,
                        "column": 29
                    },
                    "end": {
                        "line": 1,
                        "column": 50
                    }
                },
                "type": "Block",
                "value": " block comment 2 "
            }
        ],
        "tokens": [
            {
                "range": [
                    0,
                    3
                ],
                "loc": {
                    "start": {
                        "line": 1,
                        "column": 0
                    },
                    "end": {
                        "line": 1,
                        "column": 3
                    }
                },
                "type": "Keyword",
                "value": "var"
            },
            {
                "range": [
                    4,
                    6
                ],
                "loc": {
                    "start": {
                        "line": 1,
                        "column": 4
                    },
                    "end": {
                        "line": 1,
                        "column": 6
                    }
                },
                "type": "Identifier",
                "value": "p1"
            },
            {
                "range": [
                    6,
                    7
                ],
                "loc": {
                    "start": {
                        "line": 1,
                        "column": 6
                    },
                    "end": {
                        "line": 1,
                        "column": 7
                    }
                },
                "type": "Punctuator",
                "value": ";"
            }
        ]
    },

    '/*42*/': {
        "range": [
            6,
            6
        ],
        "loc": {
            "start": {
                "line": 1,
                "column": 6
            },
            "end": {
                "line": 1,
                "column": 6
            }
        },
        "type": "Program",
        "body": [],
        "leadingComments": [
            {
                "range": [
                    0,
                    6
                ],
                "loc": {
                    "start": {
                        "line": 1,
                        "column": 0
                    },
                    "end": {
                        "line": 1,
                        "column": 6
                    }
                },
                "type": "Block",
                "value": "42"
            }
        ],
        "comments": [
            {
                "range": [
                    0,
                    6
                ],
                "loc": {
                    "start": {
                        "line": 1,
                        "column": 0
                    },
                    "end": {
                        "line": 1,
                        "column": 6
                    }
                },
                "type": "Block",
                "value": "42"
            }
        ],
        "tokens": []
    },

    '(a + /* assignmenr */b ) * c': {
        "type": "Program",
        "body": [
            {
                "type": "ExpressionStatement",
                "expression": {
                    "type": "BinaryExpression",
                    "operator": "*",
                    "left": {
                        "type": "BinaryExpression",
                        "operator": "+",
                        "left": {
                            "type": "Identifier",
                            "name": "a",
                            "range": [
                                1,
                                2
                            ],
                            "loc": {
                                "start": {
                                    "line": 1,
                                    "column": 1
                                },
                                "end": {
                                    "line": 1,
                                    "column": 2
                                }
                            }
                        },
                        "right": {
                            "type": "Identifier",
                            "name": "b",
                            "range": [
                                21,
                                22
                            ],
                            "loc": {
                                "start": {
                                    "line": 1,
                                    "column": 21
                                },
                                "end": {
                                    "line": 1,
                                    "column": 22
                                }
                            },
                            "leadingComments": [
                                {
                                    "type": "Block",
                                    "value": " assignmenr ",
                                    "range": [
                                        5,
                                        21
                                    ],
                                    "loc": {
                                        "start": {
                                            "line": 1,
                                            "column": 5
                                        },
                                        "end": {
                                            "line": 1,
                                            "column": 21
                                        }
                                    }
                                }
                            ]
                        },
                        "range": [
                            1,
                            22
                        ],
                        "loc": {
                            "start": {
                                "line": 1,
                                "column": 1
                            },
                            "end": {
                                "line": 1,
                                "column": 22
                            }
                        }
                    },
                    "right": {
                        "type": "Identifier",
                        "name": "c",
                        "range": [
                            27,
                            28
                        ],
                        "loc": {
                            "start": {
                                "line": 1,
                                "column": 27
                            },
                            "end": {
                                "line": 1,
                                "column": 28
                            }
                        }
                    },
                    "range": [
                        0,
                        28
                    ],
                    "loc": {
                        "start": {
                            "line": 1,
                            "column": 0
                        },
                        "end": {
                            "line": 1,
                            "column": 28
                        }
                    }
                },
                "range": [
                    0,
                    28
                ],
                "loc": {
                    "start": {
                        "line": 1,
                        "column": 0
                    },
                    "end": {
                        "line": 1,
                        "column": 28
                    }
                }
            }
        ],
        "range": [
            0,
            28
        ],
        "loc": {
            "start": {
                "line": 1,
                "column": 0
            },
            "end": {
                "line": 1,
                "column": 28
            }
        },
        "comments": [
            {
                "type": "Block",
                "value": " assignmenr ",
                "range": [
                    5,
                    21
                ],
                "loc": {
                    "start": {
                        "line": 1,
                        "column": 5
                    },
                    "end": {
                        "line": 1,
                        "column": 21
                    }
                }
            }
        ]
    },

    '/* assignmenr */\n a = b': {
        "type": "Program",
        "body": [
            {
                "type": "ExpressionStatement",
                "expression": {
                    "type": "AssignmentExpression",
                    "operator": "=",
                    "left": {
                        "type": "Identifier",
                        "name": "a",
                        "range": [
                            18,
                            19
                        ],
                        "loc": {
                            "start": {
                                "line": 2,
                                "column": 1
                            },
                            "end": {
                                "line": 2,
                                "column": 2
                            }
                        }
                    },
                    "right": {
                        "type": "Identifier",
                        "name": "b",
                        "range": [
                            22,
                            23
                        ],
                        "loc": {
                            "start": {
                                "line": 2,
                                "column": 5
                            },
                            "end": {
                                "line": 2,
                                "column": 6
                            }
                        }
                    },
                    "range": [
                        18,
                        23
                    ],
                    "loc": {
                        "start": {
                            "line": 2,
                            "column": 1
                        },
                        "end": {
                            "line": 2,
                            "column": 6
                        }
                    }
                },
                "range": [
                    18,
                    23
                ],
                "loc": {
                    "start": {
                        "line": 2,
                        "column": 1
                    },
                    "end": {
                        "line": 2,
                        "column": 6
                    }
                },
                "leadingComments": [
                    {
                        "type": "Block",
                        "value": " assignmenr ",
                        "range": [
                            0,
                            16
                        ],
                        "loc": {
                            "start": {
                                "line": 1,
                                "column": 0
                            },
                            "end": {
                                "line": 1,
                                "column": 16
                            }
                        }
                    }
                ]
            }
        ],
        "range": [
            18,
            23
        ],
        "loc": {
            "start": {
                "line": 2,
                "column": 1
            },
            "end": {
                "line": 2,
                "column": 6
            }
        },
        "comments": [
            {
                "type": "Block",
                "value": " assignmenr ",
                "range": [
                    0,
                    16
                ],
                "loc": {
                    "start": {
                        "line": 1,
                        "column": 0
                    },
                    "end": {
                        "line": 1,
                        "column": 16
                    }
                }
            }
        ]
    },

    '42 /*The*/ /*Answer*/': {
        type: 'Program',
        body: [{
            type: 'ExpressionStatement',
            expression: {
                type: 'Literal',
                value: 42,
                raw: '42',
                range: [0, 2],
                loc: {
                    start: { line: 1, column: 0 },
                    end: { line: 1, column: 2 }
                }
            },
            range: [0, 21],
            loc: {
                start: { line: 1, column: 0 },
                end: { line: 1, column: 21 }
            }
        }],
        range: [0, 21],
        loc: {
            start: { line: 1, column: 0 },
            end: { line: 1, column: 21 }
        },
        comments: [{
            type: 'Block',
            value: 'The',
            range: [3, 10],
            loc: {
                start: { line: 1, column: 3 },
                end: { line: 1, column: 10 }
            }
        }, {
            type: 'Block',
            value: 'Answer',
            range: [11, 21],
            loc: {
                start: { line: 1, column: 11 },
                end: { line: 1, column: 21 }
            }
        }]
    },

    '42 /*the*/ /*answer*/': {
        type: 'Program',
        body: [{
            type: 'ExpressionStatement',
            expression: {
                type: 'Literal',
                value: 42,
                raw: '42',
                range: [0, 2]
            },
            range: [0, 21]
        }],
        range: [0, 21],
        comments: [{
            type: 'Block',
            value: 'the',
            range: [3, 10]
        }, {
            type: 'Block',
            value: 'answer',
            range: [11, 21]
        }]
    },

    '42 /* the * answer */': {
        type: 'ExpressionStatement',
        expression: {
            type: 'Literal',
            value: 42,
            raw: '42',
            range: [0, 2],
            loc: {
                start: { line: 1, column: 0 },
                end: { line: 1, column: 2 }
            }
        },
        range: [0, 21],
        loc: {
            start: { line: 1, column: 0 },
            end: { line: 1, column: 21 }
        }
    },

    '42 /* The * answer */': {
        type: 'Program',
        body: [{
            type: 'ExpressionStatement',
            expression: {
                type: 'Literal',
                value: 42,
                raw: '42',
                range: [0, 2],
                loc: {
                    start: { line: 1, column: 0 },
                    end: { line: 1, column: 2 }
                }
            },
            range: [0, 21],
            loc: {
                start: { line: 1, column: 0 },
                end: { line: 1, column: 21 }
            }
        }],
        range: [0, 21],
        loc: {
            start: { line: 1, column: 0 },
            end: { line: 1, column: 21 }
        },
        comments: [{
            type: 'Block',
            value: ' The * answer ',
            range: [3, 21],
            loc: {
                start: { line: 1, column: 3 },
                end: { line: 1, column: 21 }
            }
        }]
    },

    '/* multiline\ncomment\nshould\nbe\nignored */ 42': {
        type: 'ExpressionStatement',
        expression: {
            type: 'Literal',
            value: 42,
            raw: '42',
            range: [42, 44],
            loc: {
                start: { line: 5, column: 11 },
                end: { line: 5, column: 13 }
            }
        },
        range: [42, 44],
        loc: {
            start: { line: 5, column: 11 },
            end: { line: 5, column: 13 }
        }
    },

    '/*a\r\nb*/ 42': {
        type: 'Program',
        body: [{
            type: 'ExpressionStatement',
            expression: {
                type: 'Literal',
                value: 42,
                raw: '42',
                range: [9, 11],
                loc: {
                    start: { line: 2, column: 4 },
                    end: { line: 2, column: 6 }
                }
            },
            range: [9, 11],
            loc: {
                start: { line: 2, column: 4 },
                end: { line: 2, column: 6 }
            },
            leadingComments: [{
                type: 'Block',
                value: 'a\r\nb',
                range: [0, 8],
                loc: {
                    start: { line: 1, column: 0 },
                    end: { line: 2, column: 3 }
                }
            }]
        }],
        range: [9, 11],
        loc: {
            start: { line: 2, column: 4 },
            end: { line: 2, column: 6 }
        },
        comments: [{
            type: 'Block',
            value: 'a\r\nb',
            range: [0, 8],
            loc: {
                start: { line: 1, column: 0 },
                end: { line: 2, column: 3 }
            }
        }]
    },

    '/*a\rb*/ 42': {
        type: 'Program',
        body: [{
            type: 'ExpressionStatement',
            expression: {
                type: 'Literal',
                value: 42,
                raw: '42',
                range: [8, 10],
                loc: {
                    start: { line: 2, column: 4 },
                    end: { line: 2, column: 6 }
                }
            },
            range: [8, 10],
            loc: {
                start: { line: 2, column: 4 },
                end: { line: 2, column: 6 }
            }
        }],
        range: [8, 10],
        loc: {
            start: { line: 2, column: 4 },
            end: { line: 2, column: 6 }
        },
        comments: [{
            type: 'Block',
            value: 'a\rb',
            range: [0, 7],
            loc: {
                start: { line: 1, column: 0 },
                end: { line: 2, column: 3 }
            }
        }]
    },

    '/*a\nb*/ 42': {
        type: 'Program',
        body: [{
            type: 'ExpressionStatement',
            expression: {
                type: 'Literal',
                value: 42,
                raw: '42',
                range: [8, 10],
                loc: {
                    start: { line: 2, column: 4 },
                    end: { line: 2, column: 6 }
                }
            },
            range: [8, 10],
            loc: {
                start: { line: 2, column: 4 },
                end: { line: 2, column: 6 }
            },
            leadingComments: [{
                type: 'Block',
                value: 'a\nb',
                range: [0, 7],
                loc: {
                    start: { line: 1, column: 0 },
                    end: { line: 2, column: 3 }
                }
            }]
        }],
        range: [8, 10],
        loc: {
            start: { line: 2, column: 4 },
            end: { line: 2, column: 6 }
        },
        comments: [{
            type: 'Block',
            value: 'a\nb',
            range: [0, 7],
            loc: {
                start: { line: 1, column: 0 },
                end: { line: 2, column: 3 }
            }
        }]
    },

    '/*a\nc*/ 42': {
        type: 'Program',
        body: [{
            type: 'ExpressionStatement',
            expression: {
                type: 'Literal',
                value: 42,
                raw: '42',
                range: [8, 10],
                loc: {
                    start: { line: 2, column: 4 },
                    end: { line: 2, column: 6 }
                }
            },
            range: [8, 10],
            loc: {
                start: { line: 2, column: 4 },
                end: { line: 2, column: 6 }
            },
            leadingComments: [{
                type: 'Block',
                value: 'a\nc',
                range: [0, 7],
                loc: {
                    start: { line: 1, column: 0 },
                    end: { line: 2, column: 3 }
                }
            }]
        }],
        range: [8, 10],
        loc: {
            start: { line: 2, column: 4 },
            end: { line: 2, column: 6 }
        },
        comments: [{
            type: 'Block',
            value: 'a\nc',
            range: [0, 7],
            loc: {
                start: { line: 1, column: 0 },
                end: { line: 2, column: 3 }
            }
        }]
    },

    '// one\\n': {
        type: 'Program',
        body: [],
        range: [8, 8],
        loc: {
            start: { line: 1, column: 8 },
            end: { line: 1, column: 8 }
        },
        leadingComments: [{
            type: 'Line',
            value: ' one\\n',
            range: [0, 8],
            loc: {
                start: { line: 1, column: 0 },
                end: { line: 1, column: 8 }
            }
        }],
        comments: [{
            type: 'Line',
            value: ' one\\n',
            range: [0, 8],
            loc: {
                start: { line: 1, column: 0 },
                end: { line: 1, column: 8 }
            }
        }]
    },

    '// line comment\n42': {
        type: 'ExpressionStatement',
        expression: {
            type: 'Literal',
            value: 42,
            raw: '42',
            range: [16, 18],
            loc: {
                start: { line: 2, column: 0 },
                end: { line: 2, column: 2 }
            }
        },
        range: [16, 18],
        loc: {
            start: { line: 2, column: 0 },
            end: { line: 2, column: 2 }
        }
    },

    '42 // line comment': {
        type: 'Program',
        body: [{
            type: 'ExpressionStatement',
            expression: {
                type: 'Literal',
                value: 42,
                raw: '42',
                range: [0, 2],
                loc: {
                    start: { line: 1, column: 0 },
                    end: { line: 1, column: 2 }
                },
                trailingComments: [{
                    type: 'Line',
                    value: ' line comment',
                    range: [3, 18],
                    loc: {
                        start: { line: 1, column: 3 },
                        end: { line: 1, column: 18 }
                    }
                }]
            },
            range: [0, 18],
            loc: {
                start: { line: 1, column: 0 },
                end: { line: 1, column: 18 }
            }
        }],
        range: [0, 18],
        loc: {
            start: { line: 1, column: 0 },
            end: { line: 1, column: 18 }
        },
        comments: [{
            type: 'Line',
            value: ' line comment',
            range: [3, 18],
            loc: {
                start: { line: 1, column: 3 },
                end: { line: 1, column: 18 }
            }
        }]
    },

    '// Hello, world!\n42': {
        type: 'Program',
        body: [{
            type: 'ExpressionStatement',
            expression: {
                type: 'Literal',
                value: 42,
                raw: '42',
                range: [17, 19],
                loc: {
                    start: { line: 2, column: 0 },
                    end: { line: 2, column: 2 }
                }
            },
            range: [17, 19],
            loc: {
                start: { line: 2, column: 0 },
                end: { line: 2, column: 2 }
            },
            leadingComments: [{
                type: 'Line',
                value: ' Hello, world!',
                range: [0, 16],
                loc: {
                    start: { line: 1, column: 0 },
                    end: { line: 1, column: 16 }
                }
            }]
        }],
        range: [17, 19],
        loc: {
            start: { line: 2, column: 0 },
            end: { line: 2, column: 2 }
        },
        comments: [{
            type: 'Line',
            value: ' Hello, world!',
            range: [0, 16],
            loc: {
                start: { line: 1, column: 0 },
                end: { line: 1, column: 16 }
            }
        }]
    },

    '// Hello, world!\n': {
        type: 'Program',
        body: [],
        range: [17, 17],
        loc: {
            start: { line: 2, column: 0 },
            end: { line: 2, column: 0 }
        },
        comments: [{
            type: 'Line',
            value: ' Hello, world!',
            range: [0, 16],
            loc: {
                start: { line: 1, column: 0 },
                end: { line: 1, column: 16 }
            }
        }]
    },

    '// Hallo, world!\n': {
        type: 'Program',
        body: [],
        loc: {
            start: { line: 2, column: 0 },
            end: { line: 2, column: 0 }
        },
        comments: [{
            type: 'Line',
            value: ' Hallo, world!',
            loc: {
                start: { line: 1, column: 0 },
                end: { line: 1, column: 16 }
            }
        }]
    },

    '//\n42': {
        type: 'Program',
        body: [{
            type: 'ExpressionStatement',
            expression: {
                type: 'Literal',
                value: 42,
                raw: '42',
                range: [3, 5],
                loc: {
                    start: { line: 2, column: 0 },
                    end: { line: 2, column: 2 }
                }
            },
            range: [3, 5],
            loc: {
                start: { line: 2, column: 0 },
                end: { line: 2, column: 2 }
            },
            leadingComments: [{
                type: 'Line',
                value: '',
                range: [0, 2],
                loc: {
                    start: { line: 1, column: 0 },
                    end: { line: 1, column: 2 }
                }
            }]
        }],
        range: [3, 5],
        loc: {
            start: { line: 2, column: 0 },
            end: { line: 2, column: 2 }
        },
        comments: [{
            type: 'Line',
            value: '',
            range: [0, 2],
            loc: {
                start: { line: 1, column: 0 },
                end: { line: 1, column: 2 }
            }
        }]
    },

    '//': {
        type: 'Program',
        body: [],
        range: [2, 2],
        loc: {
            start: { line: 1, column: 2 },
            end: { line: 1, column: 2 }
        },
        comments: [{
            type: 'Line',
            value: '',
            range: [0, 2],
            loc: {
                start: { line: 1, column: 0 },
                end: { line: 1, column: 2 }
            }
        }]
    },

    '// ': {
        type: 'Program',
        body: [],
        range: [3, 3],
        comments: [{
            type: 'Line',
            value: ' ',
            range: [0, 3]
        }]
    },

    '/**/42': {
        type: 'Program',
        body: [{
            type: 'ExpressionStatement',
            expression: {
                type: 'Literal',
                value: 42,
                raw: '42',
                range: [4, 6],
                loc: {
                    start: { line: 1, column: 4 },
                    end: { line: 1, column: 6 }
                }
            },
            range: [4, 6],
            loc: {
                start: { line: 1, column: 4 },
                end: { line: 1, column: 6 }
            },
            leadingComments: [{
                type: 'Block',
                value: '',
                range: [0, 4],
                loc: {
                    start: { line: 1, column: 0 },
                    end: { line: 1, column: 4 }
                }
            }]
        }],
        range: [4, 6],
        loc: {
            start: { line: 1, column: 4 },
            end: { line: 1, column: 6 }
        },
        comments: [{
            type: 'Block',
            value: '',
            range: [0, 4],
            loc: {
                start: { line: 1, column: 0 },
                end: { line: 1, column: 4 }
            }
        }]
    },

    '42/**/': {
        type: 'Program',
        body: [{
            type: 'ExpressionStatement',
            expression: {
                type: 'Literal',
                value: 42,
                raw: '42',
                range: [0, 2],
                loc: {
                    start: { line: 1, column: 0 },
                    end: { line: 1, column: 2 }
                },
                trailingComments: [{
                    type: 'Block',
                    value: '',
                    range: [2, 6],
                    loc: {
                        start: { line: 1, column: 2 },
                        end: { line: 1, column: 6 }
                    }
                }]
            },
            range: [0, 6],
            loc: {
                start: { line: 1, column: 0 },
                end: { line: 1, column: 6 }
            }
        }],
        range: [0, 6],
        loc: {
            start: { line: 1, column: 0 },
            end: { line: 1, column: 6 }
        },
        comments: [{
            type: 'Block',
            value: '',
            range: [2, 6],
            loc: {
                start: { line: 1, column: 2 },
                end: { line: 1, column: 6 }
            }
        }]
    },

    '// Hello, world!\n\n//   Another hello\n42': {
        type: 'Program',
        body: [{
            type: 'ExpressionStatement',
            expression: {
                type: 'Literal',
                value: 42,
                raw: '42',
                range: [37, 39],
                loc: {
                    start: { line: 4, column: 0 },
                    end: { line: 4, column: 2 }
                }
            },
            range: [37, 39],
            loc: {
                start: { line: 4, column: 0 },
                end: { line: 4, column: 2 }
            },
            leadingComments: [{
                type: 'Line',
                value: ' Hello, world!',
                range: [0, 16],
                loc: {
                    start: { line: 1, column: 0 },
                    end: { line: 1, column: 16 }
                }
            }, {
                type: 'Line',
                value: '   Another hello',
                range: [18, 36],
                loc: {
                    start: { line: 3, column: 0 },
                    end: { line: 3, column: 18 }
                }
            }]
        }],
        range: [37, 39],
        loc: {
            start: { line: 4, column: 0 },
            end: { line: 4, column: 2 }
        },
        comments: [{
            type: 'Line',
            value: ' Hello, world!',
            range: [0, 16],
            loc: {
                start: { line: 1, column: 0 },
                end: { line: 1, column: 16 }
            }
        }, {
            type: 'Line',
            value: '   Another hello',
            range: [18, 36],
            loc: {
                start: { line: 3, column: 0 },
                end: { line: 3, column: 18 }
            }
        }]
    },

    'if (x) { doThat() // Some comment\n }': {
        type: 'Program',
        body: [{
            type: 'IfStatement',
            test: {
                type: 'Identifier',
                name: 'x',
                range: [4, 5],
                loc: {
                    start: { line: 1, column: 4 },
                    end: { line: 1, column: 5 }
                }
            },
            consequent: {
                type: 'BlockStatement',
                body: [{
                    type: 'ExpressionStatement',
                    expression: {
                        type: 'CallExpression',
                        callee: {
                            type: 'Identifier',
                            name: 'doThat',
                            range: [9, 15],
                            loc: {
                                start: { line: 1, column: 9 },
                                end: { line: 1, column: 15 }
                            }
                        },
                        'arguments': [],
                        range: [9, 17],
                        loc: {
                            start: { line: 1, column: 9 },
                            end: { line: 1, column: 17 }
                        },
                        trailingComments: [{
                            type: 'Line',
                            value: ' Some comment',
                            range: [18, 33],
                            loc: {
                                start: { line: 1, column: 18 },
                                end: { line: 1, column: 33 }
                            }
                        }]
                    },
                    range: [9, 35],
                    loc: {
                        start: { line: 1, column: 9 },
                        end: { line: 2, column: 1 }
                    }
                }],
                range: [7, 36],
                loc: {
                    start: { line: 1, column: 7 },
                    end: { line: 2, column: 2 }
                }
            },
            alternate: null,
            range: [0, 36],
            loc: {
                start: { line: 1, column: 0 },
                end: { line: 2, column: 2 }
            }
        }],
        range: [0, 36],
        loc: {
            start: { line: 1, column: 0 },
            end: { line: 2, column: 2 }
        },
        comments: [{
            type: 'Line',
            value: ' Some comment',
            range: [18, 33],
            loc: {
                start: { line: 1, column: 18 },
                end: { line: 1, column: 33 }
            }
        }]
    },

    'if (x) { // Some comment\ndoThat(); }': {
        type: 'Program',
        body: [{
            type: 'IfStatement',
            test: {
                type: 'Identifier',
                name: 'x',
                range: [4, 5],
                loc: {
                    start: { line: 1, column: 4 },
                    end: { line: 1, column: 5 }
                }
            },
            consequent: {
                type: 'BlockStatement',
                body: [{
                    type: 'ExpressionStatement',
                    expression: {
                        type: 'CallExpression',
                        callee: {
                            type: 'Identifier',
                            name: 'doThat',
                            range: [25, 31],
                            loc: {
                                start: { line: 2, column: 0 },
                                end: { line: 2, column: 6 }
                            }
                        },
                        'arguments': [],
                        range: [25, 33],
                        loc: {
                            start: { line: 2, column: 0 },
                            end: { line: 2, column: 8 }
                        }
                    },
                    range: [25, 34],
                    loc: {
                        start: { line: 2, column: 0 },
                        end: { line: 2, column: 9 }
                    },
                    leadingComments: [{
                        type: 'Line',
                        value: ' Some comment',
                        range: [9, 24],
                        loc: {
                            start: { line: 1, column: 9 },
                            end: { line: 1, column: 24 }
                        }
                    }]
                }],
                range: [7, 36],
                loc: {
                    start: { line: 1, column: 7 },
                    end: { line: 2, column: 11 }
                }
            },
            alternate: null,
            range: [0, 36],
            loc: {
                start: { line: 1, column: 0 },
                end: { line: 2, column: 11 }
            }
        }],
        range: [0, 36],
        loc: {
            start: { line: 1, column: 0 },
            end: { line: 2, column: 11 }
        },
        comments: [{
            type: 'Line',
            value: ' Some comment',
            range: [9, 24],
            loc: {
                start: { line: 1, column: 9 },
                end: { line: 1, column: 24 }
            }
        }]
    },

    'if (x) { /* Some comment */ doThat() }': {
        type: 'Program',
        body: [{
            type: 'IfStatement',
            test: {
                type: 'Identifier',
                name: 'x',
                range: [4, 5],
                loc: {
                    start: { line: 1, column: 4 },
                    end: { line: 1, column: 5 }
                }
            },
            consequent: {
                type: 'BlockStatement',
                body: [{
                    type: 'ExpressionStatement',
                    expression: {
                        type: 'CallExpression',
                        callee: {
                            type: 'Identifier',
                            name: 'doThat',
                            range: [28, 34],
                            loc: {
                                start: { line: 1, column: 28 },
                                end: { line: 1, column: 34 }
                            }
                        },
                        'arguments': [],
                        range: [28, 36],
                        loc: {
                            start: { line: 1, column: 28 },
                            end: { line: 1, column: 36 }
                        }
                    },
                    range: [28, 37],
                    loc: {
                        start: { line: 1, column: 28 },
                        end: { line: 1, column: 37 }
                    },
                    leadingComments: [{
                        type: 'Block',
                        value: ' Some comment ',
                        range: [9, 27],
                        loc: {
                            start: { line: 1, column: 9 },
                            end: { line: 1, column: 27 }
                        }
                    }]
                }],
                range: [7, 38],
                loc: {
                    start: { line: 1, column: 7 },
                    end: { line: 1, column: 38 }
                }
            },
            alternate: null,
            range: [0, 38],
            loc: {
                start: { line: 1, column: 0 },
                end: { line: 1, column: 38 }
            }
        }],
        range: [0, 38],
        loc: {
            start: { line: 1, column: 0 },
            end: { line: 1, column: 38 }
        },
        comments: [{
            type: 'Block',
            value: ' Some comment ',
            range: [9, 27],
            loc: {
                start: { line: 1, column: 9 },
                end: { line: 1, column: 27 }
            }
        }]
    },

    'if (x) { doThat() /* Some comment */ }': {
        type: 'Program',
        body: [{
            type: 'IfStatement',
            test: {
                type: 'Identifier',
                name: 'x',
                range: [4, 5],
                loc: {
                    start: { line: 1, column: 4 },
                    end: { line: 1, column: 5 }
                }
            },
            consequent: {
                type: 'BlockStatement',
                body: [{
                    type: 'ExpressionStatement',
                    expression: {
                        type: 'CallExpression',
                        callee: {
                            type: 'Identifier',
                            name: 'doThat',
                            range: [9, 15],
                            loc: {
                                start: { line: 1, column: 9 },
                                end: { line: 1, column: 15 }
                            }
                        },
                        'arguments': [],
                        range: [9, 17],
                        loc: {
                            start: { line: 1, column: 9 },
                            end: { line: 1, column: 17 }
                        },
                        trailingComments: [{
                            type: 'Block',
                            value: ' Some comment ',
                            range: [18, 36],
                            loc: {
                                start: { line: 1, column: 18 },
                                end: { line: 1, column: 36 }
                            }
                        }]
                    },
                    range: [9, 37],
                    loc: {
                        start: { line: 1, column: 9 },
                        end: { line: 1, column: 37 }
                    }
                }],
                range: [7, 38],
                loc: {
                    start: { line: 1, column: 7 },
                    end: { line: 1, column: 38 }
                }
            },
            alternate: null,
            range: [0, 38],
            loc: {
                start: { line: 1, column: 0 },
                end: { line: 1, column: 38 }
            }
        }],
        range: [0, 38],
        loc: {
            start: { line: 1, column: 0 },
            end: { line: 1, column: 38 }
        },
        comments: [{
            type: 'Block',
            value: ' Some comment ',
            range: [18, 36],
            loc: {
                start: { line: 1, column: 18 },
                end: { line: 1, column: 36 }
            }
        }]
    },

    'switch (answer) { case 42: /* perfect */ bingo() }': {
        type: 'Program',
        body: [{
            type: 'SwitchStatement',
            discriminant: {
                type: 'Identifier',
                name: 'answer',
                range: [8, 14],
                loc: {
                    start: { line: 1, column: 8 },
                    end: { line: 1, column: 14 }
                }
            },
            cases: [{
                type: 'SwitchCase',
                test: {
                    type: 'Literal',
                    value: 42,
                    raw: '42',
                    range: [23, 25],
                    loc: {
                        start: { line: 1, column: 23 },
                        end: { line: 1, column: 25 }
                    }
                },
                consequent: [{
                    type: 'ExpressionStatement',
                    expression: {
                        type: 'CallExpression',
                        callee: {
                            type: 'Identifier',
                            name: 'bingo',
                            range: [41, 46],
                            loc: {
                                start: { line: 1, column: 41 },
                                end: { line: 1, column: 46 }
                            }
                        },
                        'arguments': [],
                        range: [41, 48],
                        loc: {
                            start: { line: 1, column: 41 },
                            end: { line: 1, column: 48 }
                        }
                    },
                    range: [41, 49],
                    loc: {
                        start: { line: 1, column: 41 },
                        end: { line: 1, column: 49 }
                    },
                    leadingComments: [{
                        type: 'Block',
                        value: ' perfect ',
                        range: [27, 40],
                        loc: {
                            start: { line: 1, column: 27 },
                            end: { line: 1, column: 40 }
                        }
                    }]
                }],
                range: [18, 49],
                loc: {
                    start: { line: 1, column: 18 },
                    end: { line: 1, column: 49 }
                }
            }],
            range: [0, 50],
            loc: {
                start: { line: 1, column: 0 },
                end: { line: 1, column: 50 }
            }
        }],
        range: [0, 50],
        loc: {
            start: { line: 1, column: 0 },
            end: { line: 1, column: 50 }
        },
        comments: [{
            type: 'Block',
            value: ' perfect ',
            range: [27, 40],
            loc: {
                start: { line: 1, column: 27 },
                end: { line: 1, column: 40 }
            }
        }]
    },

    'switch (answer) { case 42: bingo() /* perfect */ }': {
        type: 'Program',
        body: [{
            type: 'SwitchStatement',
            discriminant: {
                type: 'Identifier',
                name: 'answer',
                range: [8, 14],
                loc: {
                    start: { line: 1, column: 8 },
                    end: { line: 1, column: 14 }
                }
            },
            cases: [{
                type: 'SwitchCase',
                test: {
                    type: 'Literal',
                    value: 42,
                    raw: '42',
                    range: [23, 25],
                    loc: {
                        start: { line: 1, column: 23 },
                        end: { line: 1, column: 25 }
                    }
                },
                consequent: [{
                    type: 'ExpressionStatement',
                    expression: {
                        type: 'CallExpression',
                        callee: {
                            type: 'Identifier',
                            name: 'bingo',
                            range: [27, 32],
                            loc: {
                                start: { line: 1, column: 27 },
                                end: { line: 1, column: 32 }
                            }
                        },
                        'arguments': [],
                        range: [27, 34],
                        loc: {
                            start: { line: 1, column: 27 },
                            end: { line: 1, column: 34 }
                        },
                        trailingComments: [{
                            type: 'Block',
                            value: ' perfect ',
                            range: [35, 48],
                            loc: {
                                start: { line: 1, column: 35 },
                                end: { line: 1, column: 48 }
                            }
                        }]
                    },
                    range: [27, 49],
                    loc: {
                        start: { line: 1, column: 27 },
                        end: { line: 1, column: 49 }
                    }
                }],
                range: [18, 49],
                loc: {
                    start: { line: 1, column: 18 },
                    end: { line: 1, column: 49 }
                }
            }],
            range: [0, 50],
            loc: {
                start: { line: 1, column: 0 },
                end: { line: 1, column: 50 }
            }
        }],
        range: [0, 50],
        loc: {
            start: { line: 1, column: 0 },
            end: { line: 1, column: 50 }
        },
        comments: [{
            type: 'Block',
            value: ' perfect ',
            range: [35, 48],
            loc: {
                start: { line: 1, column: 35 },
                end: { line: 1, column: 48 }
            }
        }]
    },

    '/* header */ (function(){ var version = 1; }).call(this)': {
        type: 'Program',
        body: [{
            type: 'ExpressionStatement',
            expression: {
                type: 'CallExpression',
                callee: {
                    type: 'MemberExpression',
                    computed: false,
                    object: {
                        type: 'FunctionExpression',
                        id: null,
                        params: [],
                        defaults: [],
                        body: {
                            type: 'BlockStatement',
                            body: [{
                                type: 'VariableDeclaration',
                                declarations: [{
                                    type: 'VariableDeclarator',
                                    id: {
                                        type: 'Identifier',
                                        name: 'version',
                                        range: [30, 37],
                                        loc: {
                                            start: { line: 1, column: 30 },
                                            end: { line: 1, column: 37 }
                                        }
                                    },
                                    init: {
                                        type: 'Literal',
                                        value: 1,
                                        raw: '1',
                                        range: [40, 41],
                                        loc: {
                                            start: { line: 1, column: 40 },
                                            end: { line: 1, column: 41 }
                                        }
                                    },
                                    range: [30, 41],
                                    loc: {
                                        start: { line: 1, column: 30 },
                                        end: { line: 1, column: 41 }
                                    }
                                }],
                                kind: 'var',
                                range: [26, 42],
                                loc: {
                                    start: { line: 1, column: 26 },
                                    end: { line: 1, column: 42 }
                                }
                            }],
                            range: [24, 44],
                            loc: {
                                start: { line: 1, column: 24 },
                                end: { line: 1, column: 44 }
                            }
                        },
                        rest: null,
                        generator: false,
                        expression: false,
                        range: [14, 44],
                        loc: {
                            start: { line: 1, column: 14 },
                            end: { line: 1, column: 44 }
                        }
                    },
                    property: {
                        type: 'Identifier',
                        name: 'call',
                        range: [46, 50],
                        loc: {
                            start: { line: 1, column: 46 },
                            end: { line: 1, column: 50 }
                        }
                    },
                    range: [13, 50],
                    loc: {
                        start: { line: 1, column: 13 },
                        end: { line: 1, column: 50 }
                    }
                },
                'arguments': [{
                    type: 'ThisExpression',
                    range: [51, 55],
                    loc: {
                        start: { line: 1, column: 51 },
                        end: { line: 1, column: 55 }
                    }
                }],
                range: [13, 56],
                loc: {
                    start: { line: 1, column: 13 },
                    end: { line: 1, column: 56 }
                }
            },
            range: [13, 56],
            loc: {
                start: { line: 1, column: 13 },
                end: { line: 1, column: 56 }
            },
            leadingComments: [{
                type: 'Block',
                value: ' header ',
                range: [0, 12],
                loc: {
                    start: { line: 1, column: 0 },
                    end: { line: 1, column: 12 }
                }
            }]
        }],
        range: [13, 56],
        loc: {
            start: { line: 1, column: 13 },
            end: { line: 1, column: 56 }
        },
        comments: [{
            type: 'Block',
            value: ' header ',
            range: [0, 12],
            loc: {
                start: { line: 1, column: 0 },
                end: { line: 1, column: 12 }
            }
        }]
    },

    '(function(){ var version = 1; /* sync */ }).call(this)': {
        type: 'Program',
        body: [{
            type: 'ExpressionStatement',
            expression: {
                type: 'CallExpression',
                callee: {
                    type: 'MemberExpression',
                    computed: false,
                    object: {
                        type: 'FunctionExpression',
                        id: null,
                        params: [],
                        defaults: [],
                        body: {
                            type: 'BlockStatement',
                            body: [{
                                type: 'VariableDeclaration',
                                declarations: [{
                                    type: 'VariableDeclarator',
                                    id: {
                                        type: 'Identifier',
                                        name: 'version',
                                        range: [17, 24],
                                        loc: {
                                            start: { line: 1, column: 17 },
                                            end: { line: 1, column: 24 }
                                        }
                                    },
                                    init: {
                                        type: 'Literal',
                                        value: 1,
                                        raw: '1',
                                        range: [27, 28],
                                        loc: {
                                            start: { line: 1, column: 27 },
                                            end: { line: 1, column: 28 }
                                        }
                                    },
                                    range: [17, 28],
                                    loc: {
                                        start: { line: 1, column: 17 },
                                        end: { line: 1, column: 28 }
                                    }
                                }],
                                kind: 'var',
                                range: [13, 29],
                                loc: {
                                    start: { line: 1, column: 13 },
                                    end: { line: 1, column: 29 }
                                },
                                trailingComments: [{
                                    type: 'Block',
                                    value: ' sync ',
                                    range: [30, 40],
                                    loc: {
                                        start: { line: 1, column: 30 },
                                        end: { line: 1, column: 40 }
                                    }
                                }]
                            }],
                            range: [11, 42],
                            loc: {
                                start: { line: 1, column: 11 },
                                end: { line: 1, column: 42 }
                            }
                        },
                        rest: null,
                        generator: false,
                        expression: false,
                        range: [1, 42],
                        loc: {
                            start: { line: 1, column: 1 },
                            end: { line: 1, column: 42 }
                        }
                    },
                    property: {
                        type: 'Identifier',
                        name: 'call',
                        range: [44, 48],
                        loc: {
                            start: { line: 1, column: 44 },
                            end: { line: 1, column: 48 }
                        },
                        leadingComments: [{
                            type: 'Block',
                            value: ' sync ',
                            range: [30, 40],
                            loc: {
                                start: { line: 1, column: 30 },
                                end: { line: 1, column: 40 }
                            }
                        }]
                    },
                    range: [0, 48],
                    loc: {
                        start: { line: 1, column: 0 },
                        end: { line: 1, column: 48 }
                    }
                },
                'arguments': [{
                    type: 'ThisExpression',
                    range: [49, 53],
                    loc: {
                        start: { line: 1, column: 49 },
                        end: { line: 1, column: 53 }
                    }
                }],
                range: [0, 54],
                loc: {
                    start: { line: 1, column: 0 },
                    end: { line: 1, column: 54 }
                }
            },
            range: [0, 54],
            loc: {
                start: { line: 1, column: 0 },
                end: { line: 1, column: 54 }
            }
        }],
        range: [0, 54],
        loc: {
            start: { line: 1, column: 0 },
            end: { line: 1, column: 54 }
        },
        comments: [{
            type: 'Block',
            value: ' sync ',
            range: [30, 40],
            loc: {
                start: { line: 1, column: 30 },
                end: { line: 1, column: 40 }
            }
        }]
    },

    'function f() { /* infinite */ while (true) { } /* bar */ var each; }': {
        type: 'Program',
        body: [{
            type: 'FunctionDeclaration',
            id: {
                type: 'Identifier',
                name: 'f',
                range: [9, 10],
                loc: {
                    start: { line: 1, column: 9 },
                    end: { line: 1, column: 10 }
                }
            },
            params: [],
            defaults: [],
            body: {
                type: 'BlockStatement',
                body: [{
                    type: 'WhileStatement',
                    test: {
                        type: 'Literal',
                        value: true,
                        raw: 'true',
                        range: [37, 41],
                        loc: {
                            start: { line: 1, column: 37 },
                            end: { line: 1, column: 41 }
                        }
                    },
                    body: {
                        type: 'BlockStatement',
                        body: [],
                        range: [43, 46],
                        loc: {
                            start: { line: 1, column: 43 },
                            end: { line: 1, column: 46 }
                        }
                    },
                    range: [30, 46],
                    loc: {
                        start: { line: 1, column: 30 },
                        end: { line: 1, column: 46 }
                    },
                    leadingComments: [{
                        type: 'Block',
                        value: ' infinite ',
                        range: [15, 29],
                        loc: {
                            start: { line: 1, column: 15 },
                            end: { line: 1, column: 29 }
                        }
                    }],
                    trailingComments: [{
                        type: 'Block',
                        value: ' bar ',
                        range: [47, 56],
                        loc: {
                            start: { line: 1, column: 47 },
                            end: { line: 1, column: 56 }
                        }
                    }]
                }, {
                    type: 'VariableDeclaration',
                    declarations: [{
                        type: 'VariableDeclarator',
                        id: {
                            type: 'Identifier',
                            name: 'each',
                            range: [61, 65],
                            loc: {
                                start: { line: 1, column: 61 },
                                end: { line: 1, column: 65 }
                            }
                        },
                        init: null,
                        range: [61, 65],
                        loc: {
                            start: { line: 1, column: 61 },
                            end: { line: 1, column: 65 }
                        }
                    }],
                    kind: 'var',
                    range: [57, 66],
                    loc: {
                        start: { line: 1, column: 57 },
                        end: { line: 1, column: 66 }
                    },
                    leadingComments: [{
                        type: 'Block',
                        value: ' bar ',
                        range: [47, 56],
                        loc: {
                            start: { line: 1, column: 47 },
                            end: { line: 1, column: 56 }
                        }
                    }]
                }],
                range: [13, 68],
                loc: {
                    start: { line: 1, column: 13 },
                    end: { line: 1, column: 68 }
                }
            },
            rest: null,
            generator: false,
            expression: false,
            range: [0, 68],
            loc: {
                start: { line: 1, column: 0 },
                end: { line: 1, column: 68 }
            }
        }],
        range: [0, 68],
        loc: {
            start: { line: 1, column: 0 },
            end: { line: 1, column: 68 }
        },
        comments: [{
            type: 'Block',
            value: ' infinite ',
            range: [15, 29],
            loc: {
                start: { line: 1, column: 15 },
                end: { line: 1, column: 29 }
            }
        }, {
            type: 'Block',
            value: ' bar ',
            range: [47, 56],
            loc: {
                start: { line: 1, column: 47 },
                end: { line: 1, column: 56 }
            }
        }]
    },

    '<!-- foo': {
        type: 'Program',
        body: [],
        comments: [{
            type: 'Line',
            value: ' foo'
        }]
    },

    'var x = 1<!--foo': {
        type: 'Program',
        body: [{
            type: 'VariableDeclaration',
            declarations: [{
                type: 'VariableDeclarator',
                id: {
                    type: 'Identifier',
                    name: 'x'
                },
                init: {
                    type: 'Literal',
                    value: 1,
                    raw: '1'
                }
            }],
            kind: 'var'
        }],
        comments: [{
            type: 'Line',
            value: 'foo'
        }]
    },

    '--> comment': {
        type: 'Program',
        body: [],
        range: [11, 11],
        loc: {
            start: { line: 1, column: 11 },
            end: { line: 1, column: 11 }
        },
        comments: [{
            type: 'Line',
            value: ' comment',
            range: [0, 11],
            loc: {
                start: { line: 1, column: 0 },
                end: { line: 1, column: 11 }
            }
        }]
    },

    '<!-- comment': {
        type: 'Program',
        body: [],
        range: [12, 12],
        loc: {
            start: { line: 1, column: 12 },
            end: { line: 1, column: 12 }
        },
        comments: [{
            type: 'Line',
            value: ' comment',
            range: [0, 12],
            loc: {
                start: { line: 1, column: 0 },
                end: { line: 1, column: 12 }
            }
        }]
    },

    ' \t --> comment': {
        type: 'Program',
        body: [],
        range: [14, 14],
        loc: {
            start: { line: 1, column: 14 },
            end: { line: 1, column: 14 }
        },
        comments: [{
            type: 'Line',
            value: ' comment',
            range: [3, 14],
            loc: {
                start: { line: 1, column: 3 },
                end: { line: 1, column: 14 }
            }
        }]
    },

    ' \t /* block comment */  --> comment': {
        type: 'Program',
        body: [],
        range: [35, 35],
        loc: {
            start: { line: 1, column: 35 },
            end: { line: 1, column: 35 }
        },
        comments: [{
            type: 'Block',
            value: ' block comment ',
            range: [3, 22],
            loc: {
                start: { line: 1, column: 3 },
                end: { line: 1, column: 22 }
            }
        }, {
            type: 'Line',
            value: ' comment',
            range: [24, 35],
            loc: {
                start: { line: 1, column: 24 },
                end: { line: 1, column: 35 }
            }
        }]
    },

    '/* block comment */--> comment': {
        type: 'Program',
        body: [],
        range: [30, 30],
        loc: {
            start: { line: 1, column: 30 },
            end: { line: 1, column: 30 }
        },
        comments: [{
            type: 'Block',
            value: ' block comment ',
            range: [0, 19],
            loc: {
                start: { line: 1, column: 0 },
                end: { line: 1, column: 19 }
            }
        }, {
            type: 'Line',
            value: ' comment',
            range: [19, 30],
            loc: {
                start: { line: 1, column: 19 },
                end: { line: 1, column: 30 }
            }
        }]
    },

    '/* not comment*/; i-->0': {
        type: 'Program',
        body: [{
            type: 'EmptyStatement',
            range: [16, 17],
            loc: {
                start: { line: 1, column: 16 },
                end: { line: 1, column: 17 }
            }
        }, {
            type: 'ExpressionStatement',
            expression: {
                type: 'BinaryExpression',
                operator: '>',
                left: {
                    type: 'UpdateExpression',
                    operator: '--',
                    argument: {
                        type: 'Identifier',
                        name: 'i',
                        range: [18, 19],
                        loc: {
                            start: { line: 1, column: 18 },
                            end: { line: 1, column: 19 }
                        }
                    },
                    prefix: false,
                    range: [18, 21],
                    loc: {
                        start: { line: 1, column: 18 },
                        end: { line: 1, column: 21 }
                    }
                },
                right: {
                    type: 'Literal',
                    value: 0,
                    raw: '0',
                    range: [22, 23],
                    loc: {
                        start: { line: 1, column: 22 },
                        end: { line: 1, column: 23 }
                    }
                },
                range: [18, 23],
                loc: {
                    start: { line: 1, column: 18 },
                    end: { line: 1, column: 23 }
                }
            },
            range: [18, 23],
            loc: {
                start: { line: 1, column: 18 },
                end: { line: 1, column: 23 }
            }
        }],
        range: [16, 23],
        loc: {
            start: { line: 1, column: 16 },
            end: { line: 1, column: 23 }
        },
        tokens: [{
            type: 'Punctuator',
            value: ';',
            range: [16, 17],
            loc: {
                start: { line: 1, column: 16 },
                end: { line: 1, column: 17 }
            }
        }, {
            type: 'Identifier',
            value: 'i',
            range: [18, 19],
            loc: {
                start: { line: 1, column: 18 },
                end: { line: 1, column: 19 }
            }
        }, {
            type: 'Punctuator',
            value: '--',
            range: [19, 21],
            loc: {
                start: { line: 1, column: 19 },
                end: { line: 1, column: 21 }
            }
        }, {
            type: 'Punctuator',
            value: '>',
            range: [21, 22],
            loc: {
                start: { line: 1, column: 21 },
                end: { line: 1, column: 22 }
            }
        }, {
            type: 'Numeric',
            value: '0',
            range: [22, 23],
            loc: {
                start: { line: 1, column: 22 },
                end: { line: 1, column: 23 }
            }
        }]

    },

    'while (i-->0) {}': {
        type: 'WhileStatement',
        test: {
            type: 'BinaryExpression',
            operator: '>',
            left: {
                type: 'UpdateExpression',
                operator: '--',
                argument: {
                    type: 'Identifier',
                    name: 'i',
                    range: [7, 8],
                    loc: {
                        start: { line: 1, column: 7 },
                        end: { line: 1, column: 8 }
                    }
                },
                prefix: false,
                range: [7, 10],
                loc: {
                    start: { line: 1, column: 7 },
                    end: { line: 1, column: 10 }
                }
            },
            right: {
                type: 'Literal',
                value: 0,
                raw: '0',
                range: [11, 12],
                loc: {
                    start: { line: 1, column: 11 },
                    end: { line: 1, column: 12 }
                }
            },
            range: [7, 12],
            loc: {
                start: { line: 1, column: 7 },
                end: { line: 1, column: 12 }
            }
        },
        body: {
            type: 'BlockStatement',
            body: [],
            range: [14, 16],
            loc: {
                start: { line: 1, column: 14 },
                end: { line: 1, column: 16 }
            }
        },
        range: [0, 16],
        loc: {
            start: { line: 1, column: 0 },
            end: { line: 1, column: 16 }
        }
    }
},

'Numeric Literals': {

    '0': {
        type: 'ExpressionStatement',
        expression: {
            type: 'Literal',
            value: 0,
            raw: '0',
            range: [0, 1],
            loc: {
                start: { line: 1, column: 0 },
                end: { line: 1, column: 1 }
            }
        },
        range: [0, 1],
        loc: {
            start: { line: 1, column: 0 },
            end: { line: 1, column: 1 }
        }
    },

    '42': {
        type: 'ExpressionStatement',
        expression: {
            type: 'Literal',
            value: 42,
            raw: '42',
            range: [0, 2],
            loc: {
                start: { line: 1, column: 0 },
                end: { line: 1, column: 2 }
            }
        },
        range: [0, 2],
        loc: {
            start: { line: 1, column: 0 },
            end: { line: 1, column: 2 }
        }
    },

    '3': {
        type: 'Program',
        body: [{
            type: 'ExpressionStatement',
            expression: {
                type: 'Literal',
                value: 3,
                raw: '3',
                range: [0, 1]
            },
            range: [0, 1]
        }],
        range: [0, 1],
        tokens: [{
            type: 'Numeric',
            value: '3',
            range: [0, 1]
        }]
    },

    '5': {
        type: 'Program',
        body: [{
            type: 'ExpressionStatement',
            expression: {
                type: 'Literal',
                value: 5,
                raw: '5',
                loc: {
                    start: { line: 1, column: 0 },
                    end: { line: 1, column: 1 }
                }
            },
            loc: {
                start: { line: 1, column: 0 },
                end: { line: 1, column: 1 }
            }
        }],
        loc: {
            start: { line: 1, column: 0 },
            end: { line: 1, column: 1 }
        },
        tokens: [{
            type: 'Numeric',
            value: '5',
            loc: {
                start: { line: 1, column: 0 },
                end: { line: 1, column: 1 }
            }
        }]
    },

    '.14': {
        type: 'ExpressionStatement',
        expression: {
            type: 'Literal',
            value: 0.14,
            raw: '.14',
            range: [0, 3],
            loc: {
                start: { line: 1, column: 0 },
                end: { line: 1, column: 3 }
            }
        },
        range: [0, 3],
        loc: {
            start: { line: 1, column: 0 },
            end: { line: 1, column: 3 }
        }
    },

    '3.14159': {
        type: 'ExpressionStatement',
        expression: {
            type: 'Literal',
            value: 3.14159,
            raw: '3.14159',
            range: [0, 7],
            loc: {
                start: { line: 1, column: 0 },
                end: { line: 1, column: 7 }
            }
        },
        range: [0, 7],
        loc: {
            start: { line: 1, column: 0 },
            end: { line: 1, column: 7 }
        }
    },

    '6.02214179e+23': {
        type: 'ExpressionStatement',
        expression: {
            type: 'Literal',
            value: 6.02214179e+23,
            raw: '6.02214179e+23',
            range: [0, 14],
            loc: {
                start: { line: 1, column: 0 },
                end: { line: 1, column: 14 }
            }
        },
        range: [0, 14],
        loc: {
            start: { line: 1, column: 0 },
            end: { line: 1, column: 14 }
        }
    },

    '1.492417830e-10': {
        type: 'ExpressionStatement',
        expression: {
            type: 'Literal',
            value: 1.49241783e-10,
            raw: '1.492417830e-10',
            range: [0, 15],
            loc: {
                start: { line: 1, column: 0 },
                end: { line: 1, column: 15 }
            }
        },
        range: [0, 15],
        loc: {
            start: { line: 1, column: 0 },
            end: { line: 1, column: 15 }
        }
    },

    '0x0': {
        type: 'ExpressionStatement',
        expression: {
            type: 'Literal',
            value: 0,
            raw: '0x0',
            range: [0, 3],
            loc: {
                start: { line: 1, column: 0 },
                end: { line: 1, column: 3 }
            }
        },
        range: [0, 3],
        loc: {
            start: { line: 1, column: 0 },
            end: { line: 1, column: 3 }
        }
    },

    '0x0;': {
        type: 'ExpressionStatement',
        expression: {
            type: 'Literal',
            value: 0,
            raw: '0x0',
            range: [0, 3],
            loc: {
                start: { line: 1, column: 0 },
                end: { line: 1, column: 3 }
            }
        },
        range: [0, 4],
        loc: {
            start: { line: 1, column: 0 },
            end: { line: 1, column: 4 }
        }
    },

    '0e+100 ': {
        type: 'ExpressionStatement',
        expression: {
            type: 'Literal',
            value: 0,
            raw: '0e+100',
            range: [0, 6],
            loc: {
                start: { line: 1, column: 0 },
                end: { line: 1, column: 6 }
            }
        },
        range: [0, 7],
        loc: {
            start: { line: 1, column: 0 },
            end: { line: 1, column: 7 }
        }
    },

    '0e+100': {
        type: 'ExpressionStatement',
        expression: {
            type: 'Literal',
            value: 0,
            raw: '0e+100',
            range: [0, 6],
            loc: {
                start: { line: 1, column: 0 },
                end: { line: 1, column: 6 }
            }
        },
        range: [0, 6],
        loc: {
            start: { line: 1, column: 0 },
            end: { line: 1, column: 6 }
        }
    },

    '0xabc': {
        type: 'ExpressionStatement',
        expression: {
            type: 'Literal',
            value: 0xabc,
            raw: '0xabc',
            range: [0, 5],
            loc: {
                start: { line: 1, column: 0 },
                end: { line: 1, column: 5 }
            }
        },
        range: [0, 5],
        loc: {
            start: { line: 1, column: 0 },
            end: { line: 1, column: 5 }
        }
    },

    '0xdef': {
        type: 'ExpressionStatement',
        expression: {
            type: 'Literal',
            value: 0xdef,
            raw: '0xdef',
            range: [0, 5],
            loc: {
                start: { line: 1, column: 0 },
                end: { line: 1, column: 5 }
            }
        },
        range: [0, 5],
        loc: {
            start: { line: 1, column: 0 },
            end: { line: 1, column: 5 }
        }
    },

    '0X1A': {
        type: 'ExpressionStatement',
        expression: {
            type: 'Literal',
            value: 0x1A,
            raw: '0X1A',
            range: [0, 4],
            loc: {
                start: { line: 1, column: 0 },
                end: { line: 1, column: 4 }
            }
        },
        range: [0, 4],
        loc: {
            start: { line: 1, column: 0 },
            end: { line: 1, column: 4 }
        }
    },

    '0x10': {
        type: 'ExpressionStatement',
        expression: {
            type: 'Literal',
            value: 0x10,
            raw: '0x10',
            range: [0, 4],
            loc: {
                start: { line: 1, column: 0 },
                end: { line: 1, column: 4 }
            }
        },
        range: [0, 4],
        loc: {
            start: { line: 1, column: 0 },
            end: { line: 1, column: 4 }
        }
    },

    '0x100': {
        type: 'ExpressionStatement',
        expression: {
            type: 'Literal',
            value: 0x100,
            raw: '0x100',
            range: [0, 5],
            loc: {
                start: { line: 1, column: 0 },
                end: { line: 1, column: 5 }
            }
        },
        range: [0, 5],
        loc: {
            start: { line: 1, column: 0 },
            end: { line: 1, column: 5 }
        }
    },

    '0X04': {
        type: 'ExpressionStatement',
        expression: {
            type: 'Literal',
            value: 0X04,
            raw: '0X04',
            range: [0, 4],
            loc: {
                start: { line: 1, column: 0 },
                end: { line: 1, column: 4 }
            }
        },
        range: [0, 4],
        loc: {
            start: { line: 1, column: 0 },
            end: { line: 1, column: 4 }
        }
    },

    '02': {
        type: 'ExpressionStatement',
        expression: {
            type: 'Literal',
            value: 2,
            raw: '02',
            range: [0, 2],
            loc: {
                start: { line: 1, column: 0 },
                end: { line: 1, column: 2 }
            }
        },
        range: [0, 2],
        loc: {
            start: { line: 1, column: 0 },
            end: { line: 1, column: 2 }
        }
    },

    '012': {
        type: 'ExpressionStatement',
        expression: {
            type: 'Literal',
            value: 10,
            raw: '012',
            range: [0, 3],
            loc: {
                start: { line: 1, column: 0 },
                end: { line: 1, column: 3 }
            }
        },
        range: [0, 3],
        loc: {
            start: { line: 1, column: 0 },
            end: { line: 1, column: 3 }
        }
    },

    '0012': {
        type: 'ExpressionStatement',
        expression: {
            type: 'Literal',
            value: 10,
            raw: '0012',
            range: [0, 4],
            loc: {
                start: { line: 1, column: 0 },
                end: { line: 1, column: 4 }
            }
        },
        range: [0, 4],
        loc: {
            start: { line: 1, column: 0 },
            end: { line: 1, column: 4 }
        }
    }

},

'String Literals': {

    '"Hello"': {
        type: 'ExpressionStatement',
        expression: {
            type: 'Literal',
            value: 'Hello',
            raw: '"Hello"',
            range: [0, 7],
            loc: {
                start: { line: 1, column: 0 },
                end: { line: 1, column: 7 }
            }
        },
        range: [0, 7],
        loc: {
            start: { line: 1, column: 0 },
            end: { line: 1, column: 7 }
        }
    },

    '"\\n\\r\\t\\v\\b\\f\\\\\\\'\\"\\0"': {
        type: 'ExpressionStatement',
        expression: {
            type: 'Literal',
            value: '\n\r\t\x0B\b\f\\\'"\x00',
            raw: '"\\n\\r\\t\\v\\b\\f\\\\\\\'\\"\\0"',
            range: [0, 22],
            loc: {
                start: { line: 1, column: 0 },
                end: { line: 1, column: 22 }
            }
        },
        range: [0, 22],
        loc: {
            start: { line: 1, column: 0 },
            end: { line: 1, column: 22 }
        }
    },

    '"\\u0061"': {
        type: 'ExpressionStatement',
        expression: {
            type: 'Literal',
            value: 'a',
            raw: '"\\u0061"',
            range: [0, 8],
            loc: {
                start: { line: 1, column: 0 },
                end: { line: 1, column: 8 }
            }
        },
        range: [0, 8],
        loc: {
            start: { line: 1, column: 0 },
            end: { line: 1, column: 8 }
        }
    },

    '"\\x61"': {
        type: 'ExpressionStatement',
        expression: {
            type: 'Literal',
            value: 'a',
            raw: '"\\x61"',
            range: [0, 6],
            loc: {
                start: { line: 1, column: 0 },
                end: { line: 1, column: 6 }
            }
        },
        range: [0, 6],
        loc: {
            start: { line: 1, column: 0 },
            end: { line: 1, column: 6 }
        }
    },

    '"\\u00"': {
        type: 'ExpressionStatement',
        expression: {
            type: 'Literal',
            value: 'u00',
            raw: '"\\u00"',
            range: [0, 6],
            loc: {
                start: { line: 1, column: 0 },
                end: { line: 1, column: 6 }
            }
        },
        range: [0, 6],
        loc: {
            start: { line: 1, column: 0 },
            end: { line: 1, column: 6 }
        }
    },

    '"\\xt"': {
        type: 'ExpressionStatement',
        expression: {
            type: 'Literal',
            value: 'xt',
            raw: '"\\xt"',
            range: [0, 5],
            loc: {
                start: { line: 1, column: 0 },
                end: { line: 1, column: 5 }
            }
        },
        range: [0, 5],
        loc: {
            start: { line: 1, column: 0 },
            end: { line: 1, column: 5 }
        }
    },

    '"Hello\\nworld"': {
        type: 'ExpressionStatement',
        expression: {
            type: 'Literal',
            value: 'Hello\nworld',
            raw: '"Hello\\nworld"',
            range: [0, 14],
            loc: {
                start: { line: 1, column: 0 },
                end: { line: 1, column: 14 }
            }
        },
        range: [0, 14],
        loc: {
            start: { line: 1, column: 0 },
            end: { line: 1, column: 14 }
        }
    },

    '"Hello\\\nworld"': {
        type: 'ExpressionStatement',
        expression: {
            type: 'Literal',
            value: 'Helloworld',
            raw: '"Hello\\\nworld"',
            range: [0, 14],
            loc: {
                start: { line: 1, column: 0 },
                end: { line: 2, column: 6 }
            }
        },
        range: [0, 14],
        loc: {
            start: { line: 1, column: 0 },
            end: { line: 2, column: 6 }
        }
    },

    '"Hello\\02World"': {
        type: 'ExpressionStatement',
        expression: {
            type: 'Literal',
            value: 'Hello\u0002World',
            raw: '"Hello\\02World"',
            range: [0, 15],
            loc: {
                start: { line: 1, column: 0 },
                end: { line: 1, column: 15 }
            }
        },
        range: [0, 15],
        loc: {
            start: { line: 1, column: 0 },
            end: { line: 1, column: 15 }
        }
    },

    '"Hello\\012World"': {
        type: 'ExpressionStatement',
        expression: {
            type: 'Literal',
            value: 'Hello\u000AWorld',
            raw: '"Hello\\012World"',
            range: [0, 16],
            loc: {
                start: { line: 1, column: 0 },
                end: { line: 1, column: 16 }
            }
        },
        range: [0, 16],
        loc: {
            start: { line: 1, column: 0 },
            end: { line: 1, column: 16 }
        }
    },

    '"Hello\\122World"': {
        type: 'ExpressionStatement',
        expression: {
            type: 'Literal',
            value: 'Hello\122World',
            raw: '"Hello\\122World"',
            range: [0, 16],
            loc: {
                start: { line: 1, column: 0 },
                end: { line: 1, column: 16 }
            }
        },
        range: [0, 16],
        loc: {
            start: { line: 1, column: 0 },
            end: { line: 1, column: 16 }
        }
    },

    '"Hello\\0122World"': {
        type: 'ExpressionStatement',
        expression: {
            type: 'Literal',
            value: 'Hello\u000A2World',
            raw: '"Hello\\0122World"',
            range: [0, 17],
            loc: {
                start: { line: 1, column: 0 },
                end: { line: 1, column: 17 }
            }
        },
        range: [0, 17],
        loc: {
            start: { line: 1, column: 0 },
            end: { line: 1, column: 17 }
        }
    },

    '"Hello\\312World"': {
        type: 'ExpressionStatement',
        expression: {
            type: 'Literal',
            value: 'Hello\u00CAWorld',
            raw: '"Hello\\312World"',
            range: [0, 16],
            loc: {
                start: { line: 1, column: 0 },
                end: { line: 1, column: 16 }
            }
        },
        range: [0, 16],
        loc: {
            start: { line: 1, column: 0 },
            end: { line: 1, column: 16 }
        }
    },

    '"Hello\\412World"': {
        type: 'ExpressionStatement',
        expression: {
            type: 'Literal',
            value: 'Hello\412World',
            raw: '"Hello\\412World"',
            range: [0, 16],
            loc: {
                start: { line: 1, column: 0 },
                end: { line: 1, column: 16 }
            }
        },
        range: [0, 16],
        loc: {
            start: { line: 1, column: 0 },
            end: { line: 1, column: 16 }
        }
    },

    '"Hello\\812World"': {
        type: 'ExpressionStatement',
        expression: {
            type: 'Literal',
            value: 'Hello812World',
            raw: '"Hello\\812World"',
            range: [0, 16],
            loc: {
                start: { line: 1, column: 0 },
                end: { line: 1, column: 16 }
            }
        },
        range: [0, 16],
        loc: {
            start: { line: 1, column: 0 },
            end: { line: 1, column: 16 }
        }
    },

    '"Hello\\712World"': {
        type: 'ExpressionStatement',
        expression: {
            type: 'Literal',
            value: 'Hello\712World',
            raw: '"Hello\\712World"',
            range: [0, 16],
            loc: {
                start: { line: 1, column: 0 },
                end: { line: 1, column: 16 }
            }
        },
        range: [0, 16],
        loc: {
            start: { line: 1, column: 0 },
            end: { line: 1, column: 16 }
        }
    },

    '"Hello\\0World"': {
        type: 'ExpressionStatement',
        expression: {
            type: 'Literal',
            value: 'Hello\u0000World',
            raw: '"Hello\\0World"',
            range: [0, 14],
            loc: {
                start: { line: 1, column: 0 },
                end: { line: 1, column: 14 }
            }
        },
        range: [0, 14],
        loc: {
            start: { line: 1, column: 0 },
            end: { line: 1, column: 14 }
        }
    },

    '"Hello\\\r\nworld"': {
        type: 'ExpressionStatement',
        expression: {
            type: 'Literal',
            value: 'Helloworld',
            raw: '"Hello\\\r\nworld"',
            range: [0, 15],
            loc: {
                start: { line: 1, column: 0 },
                end: { line: 2, column: 6 }
            }
        },
        range: [0, 15],
        loc: {
            start: { line: 1, column: 0 },
            end: { line: 2, column: 6 }
        }
    },

    '"Hello\\1World"': {
        type: 'ExpressionStatement',
        expression: {
            type: 'Literal',
            value: 'Hello\u0001World',
            raw: '"Hello\\1World"',
            range: [0, 14],
            loc: {
                start: { line: 1, column: 0 },
                end: { line: 1, column: 14 }
            }
        },
        range: [0, 14],
        loc: {
            start: { line: 1, column: 0 },
            end: { line: 1, column: 14 }
        }
    }
},

'Regular Expression Literals': {

    'var x = /[a-z]/i': {
        type: 'Program',
        body: [{
            type: 'VariableDeclaration',
            declarations: [{
                type: 'VariableDeclarator',
                id: {
                    type: 'Identifier',
                    name: 'x',
                    range: [4, 5],
                    loc: {
                        start: { line: 1, column: 4 },
                        end: { line: 1, column: 5 }
                    }
                },
                init: {
                    type: 'Literal',
                    value: '/[a-z]/i',
                    raw: '/[a-z]/i',
                    range: [8, 16],
                    loc: {
                        start: { line: 1, column: 8 },
                        end: { line: 1, column: 16 }
                    }
                },
                range: [4, 16],
                loc: {
                    start: { line: 1, column: 4 },
                    end: { line: 1, column: 16 }
                }
            }],
            kind: 'var',
            range: [0, 16],
            loc: {
                start: { line: 1, column: 0 },
                end: { line: 1, column: 16 }
            }
        }],
        range: [0, 16],
        loc: {
            start: { line: 1, column: 0 },
            end: { line: 1, column: 16 }
        },
        tokens: [{
            type: 'Keyword',
            value: 'var',
            range: [0, 3],
            loc: {
                start: { line: 1, column: 0 },
                end: { line: 1, column: 3 }
            }
        }, {
            type: 'Identifier',
            value: 'x',
            range: [4, 5],
            loc: {
                start: { line: 1, column: 4 },
                end: { line: 1, column: 5 }
            }
        }, {
            type: 'Punctuator',
            value: '=',
            range: [6, 7],
            loc: {
                start: { line: 1, column: 6 },
                end: { line: 1, column: 7 }
            }
        }, {
            type: 'RegularExpression',
            value: '/[a-z]/i',
            range: [8, 16],
            loc: {
                start: { line: 1, column: 8 },
                end: { line: 1, column: 16 }
            }
        }]
    },

    'var x = /[x-z]/i': {
        type: 'Program',
        body: [{
            type: 'VariableDeclaration',
            declarations: [{
                type: 'VariableDeclarator',
                id: {
                    type: 'Identifier',
                    name: 'x',
                    range: [4, 5]
                },
                init: {
                    type: 'Literal',
                    value: '/[x-z]/i',
                    raw: '/[x-z]/i',
                    range: [8, 16]
                },
                range: [4, 16]
            }],
            kind: 'var',
            range: [0, 16]
        }],
        range: [0, 16],
        tokens: [{
            type: 'Keyword',
            value: 'var',
            range: [0, 3]
        }, {
            type: 'Identifier',
            value: 'x',
            range: [4, 5]
        }, {
            type: 'Punctuator',
            value: '=',
            range: [6, 7]
        }, {
            type: 'RegularExpression',
            value: '/[x-z]/i',
            range: [8, 16]
        }]
    },

    'var x = /[a-c]/i': {
        type: 'Program',
        body: [{
            type: 'VariableDeclaration',
            declarations: [{
                type: 'VariableDeclarator',
                id: {
                    type: 'Identifier',
                    name: 'x',
                    loc: {
                        start: { line: 1, column: 4 },
                        end: { line: 1, column: 5 }
                    }
                },
                init: {
                    type: 'Literal',
                    value: '/[a-c]/i',
                    raw: '/[a-c]/i',
                    loc: {
                        start: { line: 1, column: 8 },
                        end: { line: 1, column: 16 }
                    }
                },
                loc: {
                    start: { line: 1, column: 4 },
                    end: { line: 1, column: 16 }
                }
            }],
            kind: 'var',
            loc: {
                start: { line: 1, column: 0 },
                end: { line: 1, column: 16 }
            }
        }],
        loc: {
            start: { line: 1, column: 0 },
            end: { line: 1, column: 16 }
        },
        tokens: [{
            type: 'Keyword',
            value: 'var',
            loc: {
                start: { line: 1, column: 0 },
                end: { line: 1, column: 3 }
            }
        }, {
            type: 'Identifier',
            value: 'x',
            loc: {
                start: { line: 1, column: 4 },
                end: { line: 1, column: 5 }
            }
        }, {
            type: 'Punctuator',
            value: '=',
            loc: {
                start: { line: 1, column: 6 },
                end: { line: 1, column: 7 }
            }
        }, {
            type: 'RegularExpression',
            value: '/[a-c]/i',
            loc: {
                start: { line: 1, column: 8 },
                end: { line: 1, column: 16 }
            }
        }]
    },

    'var x = /[P QR]/i': {
        type: 'Program',
        body: [{
            type: 'VariableDeclaration',
            declarations: [{
                type: 'VariableDeclarator',
                id: {
                    type: 'Identifier',
                    name: 'x',
                    range: [4, 5],
                    loc: {
                        start: { line: 1, column: 4 },
                        end: { line: 1, column: 5 }
                    }
                },
                init: {
                    type: 'Literal',
                    value: '/[P QR]/i',
                    raw: '/[P QR]/i',
                    range: [8, 17],
                    loc: {
                        start: { line: 1, column: 8 },
                        end: { line: 1, column: 17 }
                    }
                },
                range: [4, 17],
                loc: {
                    start: { line: 1, column: 4 },
                    end: { line: 1, column: 17 }
                }
            }],
            kind: 'var',
            range: [0, 17],
            loc: {
                start: { line: 1, column: 0 },
                end: { line: 1, column: 17 }
            }
        }],
        range: [0, 17],
        loc: {
            start: { line: 1, column: 0 },
            end: { line: 1, column: 17 }
        },
        tokens: [{
            type: 'Keyword',
            value: 'var',
            range: [0, 3],
            loc: {
                start: { line: 1, column: 0 },
                end: { line: 1, column: 3 }
            }
        }, {
            type: 'Identifier',
            value: 'x',
            range: [4, 5],
            loc: {
                start: { line: 1, column: 4 },
                end: { line: 1, column: 5 }
            }
        }, {
            type: 'Punctuator',
            value: '=',
            range: [6, 7],
            loc: {
                start: { line: 1, column: 6 },
                end: { line: 1, column: 7 }
            }
        }, {
            type: 'RegularExpression',
            value: '/[P QR]/i',
            range: [8, 17],
            loc: {
                start: { line: 1, column: 8 },
                end: { line: 1, column: 17 }
            }
        }]
    },

    'var x = /[\\]/]/': {
        type: 'Program',
        body: [{
            type: 'VariableDeclaration',
            declarations: [{
                type: 'VariableDeclarator',
                id: {
                    type: 'Identifier',
                    name: 'x',
                    range: [4, 5],
                    loc: {
                        start: { line: 1, column: 4 },
                        end: { line: 1, column: 5 }
                    }
                },
                init: {
                    type: 'Literal',
                    value: new RegExp('[\\]/]').toString(),
                    raw: '/[\\]/]/',
                    range: [8, 15],
                    loc: {
                        start: { line: 1, column: 8 },
                        end: { line: 1, column: 15 }
                    }
                },
                range: [4, 15],
                loc: {
                    start: { line: 1, column: 4 },
                    end: { line: 1, column: 15 }
                }
            }],
            kind: 'var',
            range: [0, 15],
            loc: {
                start: { line: 1, column: 0 },
                end: { line: 1, column: 15 }
            }
        }],
        range: [0, 15],
        loc: {
            start: { line: 1, column: 0 },
            end: { line: 1, column: 15 }
        },
        tokens: [{
            type: 'Keyword',
            value: 'var',
            range: [0, 3],
            loc: {
                start: { line: 1, column: 0 },
                end: { line: 1, column: 3 }
            }
        }, {
            type: 'Identifier',
            value: 'x',
            range: [4, 5],
            loc: {
                start: { line: 1, column: 4 },
                end: { line: 1, column: 5 }
            }
        }, {
            type: 'Punctuator',
            value: '=',
            range: [6, 7],
            loc: {
                start: { line: 1, column: 6 },
                end: { line: 1, column: 7 }
            }
        }, {
            type: 'RegularExpression',
            value: '/[\\]/]/',
            range: [8, 15],
            loc: {
                start: { line: 1, column: 8 },
                end: { line: 1, column: 15 }
            }
        }]
    },

    'var x = /foo\\/bar/': {
        type: 'Program',
        body: [{
            type: 'VariableDeclaration',
            declarations: [{
                type: 'VariableDeclarator',
                id: {
                    type: 'Identifier',
                    name: 'x',
                    range: [4, 5],
                    loc: {
                        start: { line: 1, column: 4 },
                        end: { line: 1, column: 5 }
                    }
                },
                init: {
                    type: 'Literal',
                    value: '/foo\\/bar/',
                    raw: '/foo\\/bar/',
                    range: [8, 18],
                    loc: {
                        start: { line: 1, column: 8 },
                        end: { line: 1, column: 18 }
                    }
                },
                range: [4, 18],
                loc: {
                    start: { line: 1, column: 4 },
                    end: { line: 1, column: 18 }
                }
            }],
            kind: 'var',
            range: [0, 18],
            loc: {
                start: { line: 1, column: 0 },
                end: { line: 1, column: 18 }
            }
        }],
        range: [0, 18],
        loc: {
            start: { line: 1, column: 0 },
            end: { line: 1, column: 18 }
        },
        tokens: [{
            type: 'Keyword',
            value: 'var',
            range: [0, 3],
            loc: {
                start: { line: 1, column: 0 },
                end: { line: 1, column: 3 }
            }
        }, {
            type: 'Identifier',
            value: 'x',
            range: [4, 5],
            loc: {
                start: { line: 1, column: 4 },
                end: { line: 1, column: 5 }
            }
        }, {
            type: 'Punctuator',
            value: '=',
            range: [6, 7],
            loc: {
                start: { line: 1, column: 6 },
                end: { line: 1, column: 7 }
            }
        }, {
            type: 'RegularExpression',
            value: '/foo\\/bar/',
            range: [8, 18],
            loc: {
                start: { line: 1, column: 8 },
                end: { line: 1, column: 18 }
            }
        }]
    },

    'var x = /=([^=\\s])+/g': {
        type: 'Program',
        body: [{
            type: 'VariableDeclaration',
            declarations: [{
                type: 'VariableDeclarator',
                id: {
                    type: 'Identifier',
                    name: 'x',
                    range: [4, 5],
                    loc: {
                        start: { line: 1, column: 4 },
                        end: { line: 1, column: 5 }
                    }
                },
                init: {
                    type: 'Literal',
                    value: '/=([^=\\s])+/g',
                    raw: '/=([^=\\s])+/g',
                    range: [8, 21],
                    loc: {
                        start: { line: 1, column: 8 },
                        end: { line: 1, column: 21 }
                    }
                },
                range: [4, 21],
                loc: {
                    start: { line: 1, column: 4 },
                    end: { line: 1, column: 21 }
                }
            }],
            kind: 'var',
            range: [0, 21],
            loc: {
                start: { line: 1, column: 0 },
                end: { line: 1, column: 21 }
            }
        }],
        range: [0, 21],
        loc: {
            start: { line: 1, column: 0 },
            end: { line: 1, column: 21 }
        },
        tokens: [{
            type: 'Keyword',
            value: 'var',
            range: [0, 3],
            loc: {
                start: { line: 1, column: 0 },
                end: { line: 1, column: 3 }
            }
        }, {
            type: 'Identifier',
            value: 'x',
            range: [4, 5],
            loc: {
                start: { line: 1, column: 4 },
                end: { line: 1, column: 5 }
            }
        }, {
            type: 'Punctuator',
            value: '=',
            range: [6, 7],
            loc: {
                start: { line: 1, column: 6 },
                end: { line: 1, column: 7 }
            }
        }, {
            type: 'RegularExpression',
            value: '/=([^=\\s])+/g',
            range: [8, 21],
            loc: {
                start: { line: 1, column: 8 },
                end: { line: 1, column: 21 }
            }
        }]
    },

    'var x = /42/g.test': {
        type: 'VariableDeclaration',
        declarations: [{
            type: 'VariableDeclarator',
            id: {
                type: 'Identifier',
                name: 'x',
                range: [4, 5],
                loc: {
                    start: { line: 1, column: 4 },
                    end: { line: 1, column: 5 }
                }
            },
            init: {
                type: 'MemberExpression',
                computed: false,
                object: {
                    type: 'Literal',
                    value: '/42/g',
                    raw: '/42/g',
                    range: [8, 13],
                    loc: {
                        start: { line: 1, column: 8 },
                        end: { line: 1, column: 13 }
                    }
                },
                property: {
                    type: 'Identifier',
                    name: 'test',
                    range: [14, 18],
                    loc: {
                        start: { line: 1, column: 14 },
                        end: { line: 1, column: 18 }
                    }
                },
                range: [8, 18],
                loc: {
                    start: { line: 1, column: 8 },
                    end: { line: 1, column: 18 }
                }
            },
            range: [4, 18],
            loc: {
                start: { line: 1, column: 4 },
                end: { line: 1, column: 18 }
            }
        }],
        kind: 'var',
        range: [0, 18],
        loc: {
            start: { line: 1, column: 0 },
            end: { line: 1, column: 18 }
        }
    }

},

'Left-Hand-Side Expression': {

    'new Button': {
        type: 'ExpressionStatement',
        expression: {
            type: 'NewExpression',
            callee: {
                type: 'Identifier',
                name: 'Button',
                range: [4, 10],
                loc: {
                    start: { line: 1, column: 4 },
                    end: { line: 1, column: 10 }
                }
            },
            'arguments': [],
            range: [0, 10],
            loc: {
                start: { line: 1, column: 0 },
                end: { line: 1, column: 10 }
            }
        },
        range: [0, 10],
        loc: {
            start: { line: 1, column: 0 },
            end: { line: 1, column: 10 }
        }
    },

    'new Button()': {
        type: 'ExpressionStatement',
        expression: {
            type: 'NewExpression',
            callee: {
                type: 'Identifier',
                name: 'Button',
                range: [4, 10],
                loc: {
                    start: { line: 1, column: 4 },
                    end: { line: 1, column: 10 }
                }
            },
            'arguments': [],
            range: [0, 12],
            loc: {
                start: { line: 1, column: 0 },
                end: { line: 1, column: 12 }
            }
        },
        range: [0, 12],
        loc: {
            start: { line: 1, column: 0 },
            end: { line: 1, column: 12 }
        }
    },

    'new new foo': {
        type: 'ExpressionStatement',
        expression: {
            type: 'NewExpression',
            callee: {
                type: 'NewExpression',
                callee: {
                    type: 'Identifier',
                    name: 'foo',
                    range: [8, 11],
                    loc: {
                        start: { line: 1, column: 8 },
                        end: { line: 1, column: 11 }
                    }
                },
                'arguments': [],
                range: [4, 11],
                loc: {
                    start: { line: 1, column: 4 },
                    end: { line: 1, column: 11 }
                }
            },
            'arguments': [],
            range: [0, 11],
            loc: {
                start: { line: 1, column: 0 },
                end: { line: 1, column: 11 }
            }
        },
        range: [0, 11],
        loc: {
            start: { line: 1, column: 0 },
            end: { line: 1, column: 11 }
        }
    },

    'new new foo()': {
        type: 'ExpressionStatement',
        expression: {
            type: 'NewExpression',
            callee: {
                type: 'NewExpression',
                callee: {
                    type: 'Identifier',
                    name: 'foo',
                    range: [8, 11],
                    loc: {
                        start: { line: 1, column: 8 },
                        end: { line: 1, column: 11 }
                    }
                },
                'arguments': [],
                range: [4, 13],
                loc: {
                    start: { line: 1, column: 4 },
                    end: { line: 1, column: 13 }
                }
            },
            'arguments': [],
            range: [0, 13],
            loc: {
                start: { line: 1, column: 0 },
                end: { line: 1, column: 13 }
            }
        },
        range: [0, 13],
        loc: {
            start: { line: 1, column: 0 },
            end: { line: 1, column: 13 }
        }
    },

    'new foo().bar()': {
        type: 'ExpressionStatement',
        expression: {
            type: 'CallExpression',
            callee: {
                type: 'MemberExpression',
                computed: false,
                object: {
                    type: 'NewExpression',
                    callee: {
                        type: 'Identifier',
                        name: 'foo',
                        range: [4, 7],
                        loc: {
                            start: { line: 1, column: 4 },
                            end: { line: 1, column: 7 }
                        }
                    },
                    'arguments': [],
                    range: [0, 9],
                    loc: {
                        start: { line: 1, column: 0 },
                        end: { line: 1, column: 9 }
                    }
                },
                property: {
                    type: 'Identifier',
                    name: 'bar',
                    range: [10, 13],
                    loc: {
                        start: { line: 1, column: 10 },
                        end: { line: 1, column: 13 }
                    }
                },
                range: [0, 13],
                loc: {
                    start: { line: 1, column: 0 },
                    end: { line: 1, column: 13 }
                }
            },
            'arguments': [],
            range: [0, 15],
            loc: {
                start: { line: 1, column: 0 },
                end: { line: 1, column: 15 }
            }
        },
        range: [0, 15],
        loc: {
            start: { line: 1, column: 0 },
            end: { line: 1, column: 15 }
        }
    },

    'new foo[bar]': {
        type: 'ExpressionStatement',
        expression: {
            type: 'NewExpression',
            callee: {
                type: 'MemberExpression',
                computed: true,
                object: {
                    type: 'Identifier',
                    name: 'foo',
                    range: [4, 7],
                    loc: {
                        start: { line: 1, column: 4 },
                        end: { line: 1, column: 7 }
                    }
                },
                property: {
                    type: 'Identifier',
                    name: 'bar',
                    range: [8, 11],
                    loc: {
                        start: { line: 1, column: 8 },
                        end: { line: 1, column: 11 }
                    }
                },
                range: [4, 12],
                loc: {
                    start: { line: 1, column: 4 },
                    end: { line: 1, column: 12 }
                }
            },
            'arguments': [],
            range: [0, 12],
            loc: {
                start: { line: 1, column: 0 },
                end: { line: 1, column: 12 }
            }
        },
        range: [0, 12],
        loc: {
            start: { line: 1, column: 0 },
            end: { line: 1, column: 12 }
        }
    },

    'new foo.bar()': {
        type: 'ExpressionStatement',
        expression: {
            type: 'NewExpression',
            callee: {
                type: 'MemberExpression',
                computed: false,
                object: {
                    type: 'Identifier',
                    name: 'foo',
                    range: [4, 7],
                    loc: {
                        start: { line: 1, column: 4 },
                        end: { line: 1, column: 7 }
                    }
                },
                property: {
                    type: 'Identifier',
                    name: 'bar',
                    range: [8, 11],
                    loc: {
                        start: { line: 1, column: 8 },
                        end: { line: 1, column: 11 }
                    }
                },
                range: [4, 11],
                loc: {
                    start: { line: 1, column: 4 },
                    end: { line: 1, column: 11 }
                }
            },
            'arguments': [],
            range: [0, 13],
            loc: {
                start: { line: 1, column: 0 },
                end: { line: 1, column: 13 }
            }
        },
        range: [0, 13],
        loc: {
            start: { line: 1, column: 0 },
            end: { line: 1, column: 13 }
        }
    },

    '( new foo).bar()': {
        type: 'ExpressionStatement',
        expression: {
            type: 'CallExpression',
            callee: {
                type: 'MemberExpression',
                computed: false,
                object: {
                    type: 'NewExpression',
                    callee: {
                        type: 'Identifier',
                        name: 'foo',
                        range: [6, 9],
                        loc: {
                            start: { line: 1, column: 6 },
                            end: { line: 1, column: 9 }
                        }
                    },
                    'arguments': [],
                    range: [2, 9],
                    loc: {
                        start: { line: 1, column: 2 },
                        end: { line: 1, column: 9 }
                    }
                },
                property: {
                    type: 'Identifier',
                    name: 'bar',
                    range: [11, 14],
                    loc: {
                        start: { line: 1, column: 11 },
                        end: { line: 1, column: 14 }
                    }
                },
                range: [0, 14],
                loc: {
                    start: { line: 1, column: 0 },
                    end: { line: 1, column: 14 }
                }
            },
            'arguments': [],
            range: [0, 16],
            loc: {
                start: { line: 1, column: 0 },
                end: { line: 1, column: 16 }
            }
        },
        range: [0, 16],
        loc: {
            start: { line: 1, column: 0 },
            end: { line: 1, column: 16 }
        }
    },

    'foo(bar, baz)': {
        type: 'ExpressionStatement',
        expression: {
            type: 'CallExpression',
            callee: {
                type: 'Identifier',
                name: 'foo',
                range: [0, 3],
                loc: {
                    start: { line: 1, column: 0 },
                    end: { line: 1, column: 3 }
                }
            },
            'arguments': [{
                type: 'Identifier',
                name: 'bar',
                range: [4, 7],
                loc: {
                    start: { line: 1, column: 4 },
                    end: { line: 1, column: 7 }
                }
            }, {
                type: 'Identifier',
                name: 'baz',
                range: [9, 12],
                loc: {
                    start: { line: 1, column: 9 },
                    end: { line: 1, column: 12 }
                }
            }],
            range: [0, 13],
            loc: {
                start: { line: 1, column: 0 },
                end: { line: 1, column: 13 }
            }
        },
        range: [0, 13],
        loc: {
            start: { line: 1, column: 0 },
            end: { line: 1, column: 13 }
        }
    },

    '(    foo  )()': {
        type: 'ExpressionStatement',
        expression: {
            type: 'CallExpression',
            callee: {
                type: 'Identifier',
                name: 'foo',
                range: [5, 8],
                loc: {
                    start: { line: 1, column: 5 },
                    end: { line: 1, column: 8 }
                }
            },
            'arguments': [],
            range: [0, 13],
            loc: {
                start: { line: 1, column: 0 },
                end: { line: 1, column: 13 }
            }
        },
        range: [0, 13],
        loc: {
            start: { line: 1, column: 0 },
            end: { line: 1, column: 13 }
        }
    },

    'universe.milkyway': {
        type: 'ExpressionStatement',
        expression: {
            type: 'MemberExpression',
            computed: false,
            object: {
                type: 'Identifier',
                name: 'universe',
                range: [0, 8],
                loc: {
                    start: { line: 1, column: 0 },
                    end: { line: 1, column: 8 }
                }
            },
            property: {
                type: 'Identifier',
                name: 'milkyway',
                range: [9, 17],
                loc: {
                    start: { line: 1, column: 9 },
                    end: { line: 1, column: 17 }
                }
            },
            range: [0, 17],
            loc: {
                start: { line: 1, column: 0 },
                end: { line: 1, column: 17 }
            }
        },
        range: [0, 17],
        loc: {
            start: { line: 1, column: 0 },
            end: { line: 1, column: 17 }
        }
    },

    'universe.milkyway.solarsystem': {
        type: 'ExpressionStatement',
        expression: {
            type: 'MemberExpression',
            computed: false,
            object: {
                type: 'MemberExpression',
                computed: false,
                object: {
                    type: 'Identifier',
                    name: 'universe',
                    range: [0, 8],
                    loc: {
                        start: { line: 1, column: 0 },
                        end: { line: 1, column: 8 }
                    }
                },
                property: {
                    type: 'Identifier',
                    name: 'milkyway',
                    range: [9, 17],
                    loc: {
                        start: { line: 1, column: 9 },
                        end: { line: 1, column: 17 }
                    }
                },
                range: [0, 17],
                loc: {
                    start: { line: 1, column: 0 },
                    end: { line: 1, column: 17 }
                }
            },
            property: {
                type: 'Identifier',
                name: 'solarsystem',
                range: [18, 29],
                loc: {
                    start: { line: 1, column: 18 },
                    end: { line: 1, column: 29 }
                }
            },
            range: [0, 29],
            loc: {
                start: { line: 1, column: 0 },
                end: { line: 1, column: 29 }
            }
        },
        range: [0, 29],
        loc: {
            start: { line: 1, column: 0 },
            end: { line: 1, column: 29 }
        }
    },

    'universe.milkyway.solarsystem.Earth': {
        type: 'ExpressionStatement',
        expression: {
            type: 'MemberExpression',
            computed: false,
            object: {
                type: 'MemberExpression',
                computed: false,
                object: {
                    type: 'MemberExpression',
                    computed: false,
                    object: {
                        type: 'Identifier',
                        name: 'universe',
                        range: [0, 8],
                        loc: {
                            start: { line: 1, column: 0 },
                            end: { line: 1, column: 8 }
                        }
                    },
                    property: {
                        type: 'Identifier',
                        name: 'milkyway',
                        range: [9, 17],
                        loc: {
                            start: { line: 1, column: 9 },
                            end: { line: 1, column: 17 }
                        }
                    },
                    range: [0, 17],
                    loc: {
                        start: { line: 1, column: 0 },
                        end: { line: 1, column: 17 }
                    }
                },
                property: {
                    type: 'Identifier',
                    name: 'solarsystem',
                    range: [18, 29],
                    loc: {
                        start: { line: 1, column: 18 },
                        end: { line: 1, column: 29 }
                    }
                },
                range: [0, 29],
                loc: {
                    start: { line: 1, column: 0 },
                    end: { line: 1, column: 29 }
                }
            },
            property: {
                type: 'Identifier',
                name: 'Earth',
                range: [30, 35],
                loc: {
                    start: { line: 1, column: 30 },
                    end: { line: 1, column: 35 }
                }
            },
            range: [0, 35],
            loc: {
                start: { line: 1, column: 0 },
                end: { line: 1, column: 35 }
            }
        },
        range: [0, 35],
        loc: {
            start: { line: 1, column: 0 },
            end: { line: 1, column: 35 }
        }
    },

    'universe[galaxyName, otherUselessName]': {
        type: 'ExpressionStatement',
        expression: {
            type: 'MemberExpression',
            computed: true,
            object: {
                type: 'Identifier',
                name: 'universe',
                range: [0, 8],
                loc: {
                    start: { line: 1, column: 0 },
                    end: { line: 1, column: 8 }
                }
            },
            property: {
                type: 'SequenceExpression',
                expressions: [{
                    type: 'Identifier',
                    name: 'galaxyName',
                    range: [9, 19],
                    loc: {
                        start: { line: 1, column: 9 },
                        end: { line: 1, column: 19 }
                    }
                }, {
                    type: 'Identifier',
                    name: 'otherUselessName',
                    range: [21, 37],
                    loc: {
                        start: { line: 1, column: 21 },
                        end: { line: 1, column: 37 }
                    }
                }],
                range: [9, 37],
                loc: {
                    start: { line: 1, column: 9 },
                    end: { line: 1, column: 37 }
                }
            },
            range: [0, 38],
            loc: {
                start: { line: 1, column: 0 },
                end: { line: 1, column: 38 }
            }
        },
        range: [0, 38],
        loc: {
            start: { line: 1, column: 0 },
            end: { line: 1, column: 38 }
        }
    },

    'universe[galaxyName]': {
        type: 'ExpressionStatement',
        expression: {
            type: 'MemberExpression',
            computed: true,
            object: {
                type: 'Identifier',
                name: 'universe',
                range: [0, 8],
                loc: {
                    start: { line: 1, column: 0 },
                    end: { line: 1, column: 8 }
                }
            },
            property: {
                type: 'Identifier',
                name: 'galaxyName',
                range: [9, 19],
                loc: {
                    start: { line: 1, column: 9 },
                    end: { line: 1, column: 19 }
                }
            },
            range: [0, 20],
            loc: {
                start: { line: 1, column: 0 },
                end: { line: 1, column: 20 }
            }
        },
        range: [0, 20],
        loc: {
            start: { line: 1, column: 0 },
            end: { line: 1, column: 20 }
        }
    },

    'universe[42].galaxies': {
        type: 'ExpressionStatement',
        expression: {
            type: 'MemberExpression',
            computed: false,
            object: {
                type: 'MemberExpression',
                computed: true,
                object: {
                    type: 'Identifier',
                    name: 'universe',
                    range: [0, 8],
                    loc: {
                        start: { line: 1, column: 0 },
                        end: { line: 1, column: 8 }
                    }
                },
                property: {
                    type: 'Literal',
                    value: 42,
                    raw: '42',
                    range: [9, 11],
                    loc: {
                        start: { line: 1, column: 9 },
                        end: { line: 1, column: 11 }
                    }
                },
                range: [0, 12],
                loc: {
                    start: { line: 1, column: 0 },
                    end: { line: 1, column: 12 }
                }
            },
            property: {
                type: 'Identifier',
                name: 'galaxies',
                range: [13, 21],
                loc: {
                    start: { line: 1, column: 13 },
                    end: { line: 1, column: 21 }
                }
            },
            range: [0, 21],
            loc: {
                start: { line: 1, column: 0 },
                end: { line: 1, column: 21 }
            }
        },
        range: [0, 21],
        loc: {
            start: { line: 1, column: 0 },
            end: { line: 1, column: 21 }
        }
    },

    'universe(42).galaxies': {
        type: 'ExpressionStatement',
        expression: {
            type: 'MemberExpression',
            computed: false,
            object: {
                type: 'CallExpression',
                callee: {
                    type: 'Identifier',
                    name: 'universe',
                    range: [0, 8],
                    loc: {
                        start: { line: 1, column: 0 },
                        end: { line: 1, column: 8 }
                    }
                },
                'arguments': [{
                    type: 'Literal',
                    value: 42,
                    raw: '42',
                    range: [9, 11],
                    loc: {
                        start: { line: 1, column: 9 },
                        end: { line: 1, column: 11 }
                    }
                }],
                range: [0, 12],
                loc: {
                    start: { line: 1, column: 0 },
                    end: { line: 1, column: 12 }
                }
            },
            property: {
                type: 'Identifier',
                name: 'galaxies',
                range: [13, 21],
                loc: {
                    start: { line: 1, column: 13 },
                    end: { line: 1, column: 21 }
                }
            },
            range: [0, 21],
            loc: {
                start: { line: 1, column: 0 },
                end: { line: 1, column: 21 }
            }
        },
        range: [0, 21],
        loc: {
            start: { line: 1, column: 0 },
            end: { line: 1, column: 21 }
        }
    },

    'universe(42).galaxies(14, 3, 77).milkyway': {
        type: 'ExpressionStatement',
        expression: {
            type: 'MemberExpression',
            computed: false,
            object: {
                type: 'CallExpression',
                callee: {
                    type: 'MemberExpression',
                    computed: false,
                    object: {
                        type: 'CallExpression',
                        callee: {
                            type: 'Identifier',
                            name: 'universe',
                            range: [0, 8],
                            loc: {
                                start: { line: 1, column: 0 },
                                end: { line: 1, column: 8 }
                            }
                        },
                        'arguments': [{
                            type: 'Literal',
                            value: 42,
                            raw: '42',
                            range: [9, 11],
                            loc: {
                                start: { line: 1, column: 9 },
                                end: { line: 1, column: 11 }
                            }
                        }],
                        range: [0, 12],
                        loc: {
                            start: { line: 1, column: 0 },
                            end: { line: 1, column: 12 }
                        }
                    },
                    property: {
                        type: 'Identifier',
                        name: 'galaxies',
                        range: [13, 21],
                        loc: {
                            start: { line: 1, column: 13 },
                            end: { line: 1, column: 21 }
                        }
                    },
                    range: [0, 21],
                    loc: {
                        start: { line: 1, column: 0 },
                        end: { line: 1, column: 21 }
                    }
                },
                'arguments': [{
                    type: 'Literal',
                    value: 14,
                    raw: '14',
                    range: [22, 24],
                    loc: {
                        start: { line: 1, column: 22 },
                        end: { line: 1, column: 24 }
                    }
                }, {
                    type: 'Literal',
                    value: 3,
                    raw: '3',
                    range: [26, 27],
                    loc: {
                        start: { line: 1, column: 26 },
                        end: { line: 1, column: 27 }
                    }
                }, {
                    type: 'Literal',
                    value: 77,
                    raw: '77',
                    range: [29, 31],
                    loc: {
                        start: { line: 1, column: 29 },
                        end: { line: 1, column: 31 }
                    }
                }],
                range: [0, 32],
                loc: {
                    start: { line: 1, column: 0 },
                    end: { line: 1, column: 32 }
                }
            },
            property: {
                type: 'Identifier',
                name: 'milkyway',
                range: [33, 41],
                loc: {
                    start: { line: 1, column: 33 },
                    end: { line: 1, column: 41 }
                }
            },
            range: [0, 41],
            loc: {
                start: { line: 1, column: 0 },
                end: { line: 1, column: 41 }
            }
        },
        range: [0, 41],
        loc: {
            start: { line: 1, column: 0 },
            end: { line: 1, column: 41 }
        }
    },

    'earth.asia.Indonesia.prepareForElection(2014)': {
        type: 'ExpressionStatement',
        expression: {
            type: 'CallExpression',
            callee: {
                type: 'MemberExpression',
                computed: false,
                object: {
                    type: 'MemberExpression',
                    computed: false,
                    object: {
                        type: 'MemberExpression',
                        computed: false,
                        object: {
                            type: 'Identifier',
                            name: 'earth',
                            range: [0, 5],
                            loc: {
                                start: { line: 1, column: 0 },
                                end: { line: 1, column: 5 }
                            }
                        },
                        property: {
                            type: 'Identifier',
                            name: 'asia',
                            range: [6, 10],
                            loc: {
                                start: { line: 1, column: 6 },
                                end: { line: 1, column: 10 }
                            }
                        },
                        range: [0, 10],
                        loc: {
                            start: { line: 1, column: 0 },
                            end: { line: 1, column: 10 }
                        }
                    },
                    property: {
                        type: 'Identifier',
                        name: 'Indonesia',
                        range: [11, 20],
                        loc: {
                            start: { line: 1, column: 11 },
                            end: { line: 1, column: 20 }
                        }
                    },
                    range: [0, 20],
                    loc: {
                        start: { line: 1, column: 0 },
                        end: { line: 1, column: 20 }
                    }
                },
                property: {
                    type: 'Identifier',
                    name: 'prepareForElection',
                    range: [21, 39],
                    loc: {
                        start: { line: 1, column: 21 },
                        end: { line: 1, column: 39 }
                    }
                },
                range: [0, 39],
                loc: {
                    start: { line: 1, column: 0 },
                    end: { line: 1, column: 39 }
                }
            },
            'arguments': [{
                type: 'Literal',
                value: 2014,
                raw: '2014',
                range: [40, 44],
                loc: {
                    start: { line: 1, column: 40 },
                    end: { line: 1, column: 44 }
                }
            }],
            range: [0, 45],
            loc: {
                start: { line: 1, column: 0 },
                end: { line: 1, column: 45 }
            }
        },
        range: [0, 45],
        loc: {
            start: { line: 1, column: 0 },
            end: { line: 1, column: 45 }
        }
    },

    'universe.if': {
        type: 'ExpressionStatement',
        expression: {
            type: 'MemberExpression',
            computed: false,
            object: {
                type: 'Identifier',
                name: 'universe',
                range: [0, 8],
                loc: {
                    start: { line: 1, column: 0 },
                    end: { line: 1, column: 8 }
                }
            },
            property: {
                type: 'Identifier',
                name: 'if',
                range: [9, 11],
                loc: {
                    start: { line: 1, column: 9 },
                    end: { line: 1, column: 11 }
                }
            },
            range: [0, 11],
            loc: {
                start: { line: 1, column: 0 },
                end: { line: 1, column: 11 }
            }
        },
        range: [0, 11],
        loc: {
            start: { line: 1, column: 0 },
            end: { line: 1, column: 11 }
        }
    },

    'universe.true': {
        type: 'ExpressionStatement',
        expression: {
            type: 'MemberExpression',
            computed: false,
            object: {
                type: 'Identifier',
                name: 'universe',
                range: [0, 8],
                loc: {
                    start: { line: 1, column: 0 },
                    end: { line: 1, column: 8 }
                }
            },
            property: {
                type: 'Identifier',
                name: 'true',
                range: [9, 13],
                loc: {
                    start: { line: 1, column: 9 },
                    end: { line: 1, column: 13 }
                }
            },
            range: [0, 13],
            loc: {
                start: { line: 1, column: 0 },
                end: { line: 1, column: 13 }
            }
        },
        range: [0, 13],
        loc: {
            start: { line: 1, column: 0 },
            end: { line: 1, column: 13 }
        }
    },

    'universe.false': {
        type: 'ExpressionStatement',
        expression: {
            type: 'MemberExpression',
            computed: false,
            object: {
                type: 'Identifier',
                name: 'universe',
                range: [0, 8],
                loc: {
                    start: { line: 1, column: 0 },
                    end: { line: 1, column: 8 }
                }
            },
            property: {
                type: 'Identifier',
                name: 'false',
                range: [9, 14],
                loc: {
                    start: { line: 1, column: 9 },
                    end: { line: 1, column: 14 }
                }
            },
            range: [0, 14],
            loc: {
                start: { line: 1, column: 0 },
                end: { line: 1, column: 14 }
            }
        },
        range: [0, 14],
        loc: {
            start: { line: 1, column: 0 },
            end: { line: 1, column: 14 }
        }
    },

    'universe.null': {
        type: 'ExpressionStatement',
        expression: {
            type: 'MemberExpression',
            computed: false,
            object: {
                type: 'Identifier',
                name: 'universe',
                range: [0, 8],
                loc: {
                    start: { line: 1, column: 0 },
                    end: { line: 1, column: 8 }
                }
            },
            property: {
                type: 'Identifier',
                name: 'null',
                range: [9, 13],
                loc: {
                    start: { line: 1, column: 9 },
                    end: { line: 1, column: 13 }
                }
            },
            range: [0, 13],
            loc: {
                start: { line: 1, column: 0 },
                end: { line: 1, column: 13 }
            }
        },
        range: [0, 13],
        loc: {
            start: { line: 1, column: 0 },
            end: { line: 1, column: 13 }
        }
    }

},

'Postfix Expressions': {

    'x++': {
        type: 'ExpressionStatement',
        expression: {
            type: 'UpdateExpression',
            operator: '++',
            argument: {
                type: 'Identifier',
                name: 'x',
                range: [0, 1],
                loc: {
                    start: { line: 1, column: 0 },
                    end: { line: 1, column: 1 }
                }
            },
            prefix: false,
            range: [0, 3],
            loc: {
                start: { line: 1, column: 0 },
                end: { line: 1, column: 3 }
            }
        },
        range: [0, 3],
        loc: {
            start: { line: 1, column: 0 },
            end: { line: 1, column: 3 }
        }
    },

    'x--': {
        type: 'ExpressionStatement',
        expression: {
            type: 'UpdateExpression',
            operator: '--',
            argument: {
                type: 'Identifier',
                name: 'x',
                range: [0, 1],
                loc: {
                    start: { line: 1, column: 0 },
                    end: { line: 1, column: 1 }
                }
            },
            prefix: false,
            range: [0, 3],
            loc: {
                start: { line: 1, column: 0 },
                end: { line: 1, column: 3 }
            }
        },
        range: [0, 3],
        loc: {
            start: { line: 1, column: 0 },
            end: { line: 1, column: 3 }
        }
    },

    'eval++': {
        type: 'ExpressionStatement',
        expression: {
            type: 'UpdateExpression',
            operator: '++',
            argument: {
                type: 'Identifier',
                name: 'eval',
                range: [0, 4],
                loc: {
                    start: { line: 1, column: 0 },
                    end: { line: 1, column: 4 }
                }
            },
            prefix: false,
            range: [0, 6],
            loc: {
                start: { line: 1, column: 0 },
                end: { line: 1, column: 6 }
            }
        },
        range: [0, 6],
        loc: {
            start: { line: 1, column: 0 },
            end: { line: 1, column: 6 }
        }
    },

    'eval--': {
        type: 'ExpressionStatement',
        expression: {
            type: 'UpdateExpression',
            operator: '--',
            argument: {
                type: 'Identifier',
                name: 'eval',
                range: [0, 4],
                loc: {
                    start: { line: 1, column: 0 },
                    end: { line: 1, column: 4 }
                }
            },
            prefix: false,
            range: [0, 6],
            loc: {
                start: { line: 1, column: 0 },
                end: { line: 1, column: 6 }
            }
        },
        range: [0, 6],
        loc: {
            start: { line: 1, column: 0 },
            end: { line: 1, column: 6 }
        }
    },

    'arguments++': {
        type: 'ExpressionStatement',
        expression: {
            type: 'UpdateExpression',
            operator: '++',
            argument: {
                type: 'Identifier',
                name: 'arguments',
                range: [0, 9],
                loc: {
                    start: { line: 1, column: 0 },
                    end: { line: 1, column: 9 }
                }
            },
            prefix: false,
            range: [0, 11],
            loc: {
                start: { line: 1, column: 0 },
                end: { line: 1, column: 11 }
            }
        },
        range: [0, 11],
        loc: {
            start: { line: 1, column: 0 },
            end: { line: 1, column: 11 }
        }
    },

    'arguments--': {
        type: 'ExpressionStatement',
        expression: {
            type: 'UpdateExpression',
            operator: '--',
            argument: {
                type: 'Identifier',
                name: 'arguments',
                range: [0, 9],
                loc: {
                    start: { line: 1, column: 0 },
                    end: { line: 1, column: 9 }
                }
            },
            prefix: false,
            range: [0, 11],
            loc: {
                start: { line: 1, column: 0 },
                end: { line: 1, column: 11 }
            }
        },
        range: [0, 11],
        loc: {
            start: { line: 1, column: 0 },
            end: { line: 1, column: 11 }
        }
    }

},

'Unary Operators': {

    '++x': {
        type: 'ExpressionStatement',
        expression: {
            type: 'UpdateExpression',
            operator: '++',
            argument: {
                type: 'Identifier',
                name: 'x',
                range: [2, 3],
                loc: {
                    start: { line: 1, column: 2 },
                    end: { line: 1, column: 3 }
                }
            },
            prefix: true,
            range: [0, 3],
            loc: {
                start: { line: 1, column: 0 },
                end: { line: 1, column: 3 }
            }
        },
        range: [0, 3],
        loc: {
            start: { line: 1, column: 0 },
            end: { line: 1, column: 3 }
        }
    },

    '--x': {
        type: 'ExpressionStatement',
        expression: {
            type: 'UpdateExpression',
            operator: '--',
            argument: {
                type: 'Identifier',
                name: 'x',
                range: [2, 3],
                loc: {
                    start: { line: 1, column: 2 },
                    end: { line: 1, column: 3 }
                }
            },
            prefix: true,
            range: [0, 3],
            loc: {
                start: { line: 1, column: 0 },
                end: { line: 1, column: 3 }
            }
        },
        range: [0, 3],
        loc: {
            start: { line: 1, column: 0 },
            end: { line: 1, column: 3 }
        }
    },

    '++eval': {
        type: 'ExpressionStatement',
        expression: {
            type: 'UpdateExpression',
            operator: '++',
            argument: {
                type: 'Identifier',
                name: 'eval',
                range: [2, 6],
                loc: {
                    start: { line: 1, column: 2 },
                    end: { line: 1, column: 6 }
                }
            },
            prefix: true,
            range: [0, 6],
            loc: {
                start: { line: 1, column: 0 },
                end: { line: 1, column: 6 }
            }
        },
        range: [0, 6],
        loc: {
            start: { line: 1, column: 0 },
            end: { line: 1, column: 6 }
        }
    },

    '--eval': {
        type: 'ExpressionStatement',
        expression: {
            type: 'UpdateExpression',
            operator: '--',
            argument: {
                type: 'Identifier',
                name: 'eval',
                range: [2, 6],
                loc: {
                    start: { line: 1, column: 2 },
                    end: { line: 1, column: 6 }
                }
            },
            prefix: true,
            range: [0, 6],
            loc: {
                start: { line: 1, column: 0 },
                end: { line: 1, column: 6 }
            }
        },
        range: [0, 6],
        loc: {
            start: { line: 1, column: 0 },
            end: { line: 1, column: 6 }
        }
    },

    '++arguments': {
        type: 'ExpressionStatement',
        expression: {
            type: 'UpdateExpression',
            operator: '++',
            argument: {
                type: 'Identifier',
                name: 'arguments',
                range: [2, 11],
                loc: {
                    start: { line: 1, column: 2 },
                    end: { line: 1, column: 11 }
                }
            },
            prefix: true,
            range: [0, 11],
            loc: {
                start: { line: 1, column: 0 },
                end: { line: 1, column: 11 }
            }
        },
        range: [0, 11],
        loc: {
            start: { line: 1, column: 0 },
            end: { line: 1, column: 11 }
        }
    },

    '--arguments': {
        type: 'ExpressionStatement',
        expression: {
            type: 'UpdateExpression',
            operator: '--',
            argument: {
                type: 'Identifier',
                name: 'arguments',
                range: [2, 11],
                loc: {
                    start: { line: 1, column: 2 },
                    end: { line: 1, column: 11 }
                }
            },
            prefix: true,
            range: [0, 11],
            loc: {
                start: { line: 1, column: 0 },
                end: { line: 1, column: 11 }
            }
        },
        range: [0, 11],
        loc: {
            start: { line: 1, column: 0 },
            end: { line: 1, column: 11 }
        }
    },

    '+x': {
        type: 'ExpressionStatement',
        expression: {
            type: 'UnaryExpression',
            operator: '+',
            argument: {
                type: 'Identifier',
                name: 'x',
                range: [1, 2],
                loc: {
                    start: { line: 1, column: 1 },
                    end: { line: 1, column: 2 }
                }
            },
            prefix: true,
            range: [0, 2],
            loc: {
                start: { line: 1, column: 0 },
                end: { line: 1, column: 2 }
            }
        },
        range: [0, 2],
        loc: {
            start: { line: 1, column: 0 },
            end: { line: 1, column: 2 }
        }
    },

    '-x': {
        type: 'ExpressionStatement',
        expression: {
            type: 'UnaryExpression',
            operator: '-',
            argument: {
                type: 'Identifier',
                name: 'x',
                range: [1, 2],
                loc: {
                    start: { line: 1, column: 1 },
                    end: { line: 1, column: 2 }
                }
            },
            prefix: true,
            range: [0, 2],
            loc: {
                start: { line: 1, column: 0 },
                end: { line: 1, column: 2 }
            }
        },
        range: [0, 2],
        loc: {
            start: { line: 1, column: 0 },
            end: { line: 1, column: 2 }
        }
    },

    '~x': {
        type: 'ExpressionStatement',
        expression: {
            type: 'UnaryExpression',
            operator: '~',
            argument: {
                type: 'Identifier',
                name: 'x',
                range: [1, 2],
                loc: {
                    start: { line: 1, column: 1 },
                    end: { line: 1, column: 2 }
                }
            },
            prefix: true,
            range: [0, 2],
            loc: {
                start: { line: 1, column: 0 },
                end: { line: 1, column: 2 }
            }
        },
        range: [0, 2],
        loc: {
            start: { line: 1, column: 0 },
            end: { line: 1, column: 2 }
        }
    },

    '!x': {
        type: 'ExpressionStatement',
        expression: {
            type: 'UnaryExpression',
            operator: '!',
            argument: {
                type: 'Identifier',
                name: 'x',
                range: [1, 2],
                loc: {
                    start: { line: 1, column: 1 },
                    end: { line: 1, column: 2 }
                }
            },
            prefix: true,
            range: [0, 2],
            loc: {
                start: { line: 1, column: 0 },
                end: { line: 1, column: 2 }
            }
        },
        range: [0, 2],
        loc: {
            start: { line: 1, column: 0 },
            end: { line: 1, column: 2 }
        }
    },

    'void x': {
        type: 'ExpressionStatement',
        expression: {
            type: 'UnaryExpression',
            operator: 'void',
            argument: {
                type: 'Identifier',
                name: 'x',
                range: [5, 6],
                loc: {
                    start: { line: 1, column: 5 },
                    end: { line: 1, column: 6 }
                }
            },
            prefix: true,
            range: [0, 6],
            loc: {
                start: { line: 1, column: 0 },
                end: { line: 1, column: 6 }
            }
        },
        range: [0, 6],
        loc: {
            start: { line: 1, column: 0 },
            end: { line: 1, column: 6 }
        }
    },

    'delete x': {
        type: 'ExpressionStatement',
        expression: {
            type: 'UnaryExpression',
            operator: 'delete',
            argument: {
                type: 'Identifier',
                name: 'x',
                range: [7, 8],
                loc: {
                    start: { line: 1, column: 7 },
                    end: { line: 1, column: 8 }
                }
            },
            prefix: true,
            range: [0, 8],
            loc: {
                start: { line: 1, column: 0 },
                end: { line: 1, column: 8 }
            }
        },
        range: [0, 8],
        loc: {
            start: { line: 1, column: 0 },
            end: { line: 1, column: 8 }
        }
    },

    'typeof x': {
        type: 'ExpressionStatement',
        expression: {
            type: 'UnaryExpression',
            operator: 'typeof',
            argument: {
                type: 'Identifier',
                name: 'x',
                range: [7, 8],
                loc: {
                    start: { line: 1, column: 7 },
                    end: { line: 1, column: 8 }
                }
            },
            prefix: true,
            range: [0, 8],
            loc: {
                start: { line: 1, column: 0 },
                end: { line: 1, column: 8 }
            }
        },
        range: [0, 8],
        loc: {
            start: { line: 1, column: 0 },
            end: { line: 1, column: 8 }
        }
    }

},

'Multiplicative Operators': {

    'x * y': {
        type: 'ExpressionStatement',
        expression: {
            type: 'BinaryExpression',
            operator: '*',
            left: {
                type: 'Identifier',
                name: 'x',
                range: [0, 1],
                loc: {
                    start: { line: 1, column: 0 },
                    end: { line: 1, column: 1 }
                }
            },
            right: {
                type: 'Identifier',
                name: 'y',
                range: [4, 5],
                loc: {
                    start: { line: 1, column: 4 },
                    end: { line: 1, column: 5 }
                }
            },
            range: [0, 5],
            loc: {
                start: { line: 1, column: 0 },
                end: { line: 1, column: 5 }
            }
        },
        range: [0, 5],
        loc: {
            start: { line: 1, column: 0 },
            end: { line: 1, column: 5 }
        }
    },

    'x / y': {
        type: 'ExpressionStatement',
        expression: {
            type: 'BinaryExpression',
            operator: '/',
            left: {
                type: 'Identifier',
                name: 'x',
                range: [0, 1],
                loc: {
                    start: { line: 1, column: 0 },
                    end: { line: 1, column: 1 }
                }
            },
            right: {
                type: 'Identifier',
                name: 'y',
                range: [4, 5],
                loc: {
                    start: { line: 1, column: 4 },
                    end: { line: 1, column: 5 }
                }
            },
            range: [0, 5],
            loc: {
                start: { line: 1, column: 0 },
                end: { line: 1, column: 5 }
            }
        },
        range: [0, 5],
        loc: {
            start: { line: 1, column: 0 },
            end: { line: 1, column: 5 }
        }
    },

    'x % y': {
        type: 'ExpressionStatement',
        expression: {
            type: 'BinaryExpression',
            operator: '%',
            left: {
                type: 'Identifier',
                name: 'x',
                range: [0, 1],
                loc: {
                    start: { line: 1, column: 0 },
                    end: { line: 1, column: 1 }
                }
            },
            right: {
                type: 'Identifier',
                name: 'y',
                range: [4, 5],
                loc: {
                    start: { line: 1, column: 4 },
                    end: { line: 1, column: 5 }
                }
            },
            range: [0, 5],
            loc: {
                start: { line: 1, column: 0 },
                end: { line: 1, column: 5 }
            }
        },
        range: [0, 5],
        loc: {
            start: { line: 1, column: 0 },
            end: { line: 1, column: 5 }
        }
    }

},

'Additive Operators': {

    'x + y': {
        type: 'ExpressionStatement',
        expression: {
            type: 'BinaryExpression',
            operator: '+',
            left: {
                type: 'Identifier',
                name: 'x',
                range: [0, 1],
                loc: {
                    start: { line: 1, column: 0 },
                    end: { line: 1, column: 1 }
                }
            },
            right: {
                type: 'Identifier',
                name: 'y',
                range: [4, 5],
                loc: {
                    start: { line: 1, column: 4 },
                    end: { line: 1, column: 5 }
                }
            },
            range: [0, 5],
            loc: {
                start: { line: 1, column: 0 },
                end: { line: 1, column: 5 }
            }
        },
        range: [0, 5],
        loc: {
            start: { line: 1, column: 0 },
            end: { line: 1, column: 5 }
        }
    },

    'x - y': {
        type: 'ExpressionStatement',
        expression: {
            type: 'BinaryExpression',
            operator: '-',
            left: {
                type: 'Identifier',
                name: 'x',
                range: [0, 1],
                loc: {
                    start: { line: 1, column: 0 },
                    end: { line: 1, column: 1 }
                }
            },
            right: {
                type: 'Identifier',
                name: 'y',
                range: [4, 5],
                loc: {
                    start: { line: 1, column: 4 },
                    end: { line: 1, column: 5 }
                }
            },
            range: [0, 5],
            loc: {
                start: { line: 1, column: 0 },
                end: { line: 1, column: 5 }
            }
        },
        range: [0, 5],
        loc: {
            start: { line: 1, column: 0 },
            end: { line: 1, column: 5 }
        }
    },

    '"use strict" + 42': {
        type: 'ExpressionStatement',
        expression: {
            type: 'BinaryExpression',
            operator: '+',
            left: {
                type: 'Literal',
                value: 'use strict',
                raw: '"use strict"',
                range: [0, 12],
                loc: {
                    start: { line: 1, column: 0 },
                    end: { line: 1, column: 12 }
                }
            },
            right: {
                type: 'Literal',
                value: 42,
                raw: '42',
                range: [15, 17],
                loc: {
                    start: { line: 1, column: 15 },
                    end: { line: 1, column: 17 }
                }
            },
            range: [0, 17],
            loc: {
                start: { line: 1, column: 0 },
                end: { line: 1, column: 17 }
            }
        },
        range: [0, 17],
        loc: {
            start: { line: 1, column: 0 },
            end: { line: 1, column: 17 }
        }
    }

},

'Bitwise Shift Operator': {

    'x << y': {
        type: 'ExpressionStatement',
        expression: {
            type: 'BinaryExpression',
            operator: '<<',
            left: {
                type: 'Identifier',
                name: 'x',
                range: [0, 1],
                loc: {
                    start: { line: 1, column: 0 },
                    end: { line: 1, column: 1 }
                }
            },
            right: {
                type: 'Identifier',
                name: 'y',
                range: [5, 6],
                loc: {
                    start: { line: 1, column: 5 },
                    end: { line: 1, column: 6 }
                }
            },
            range: [0, 6],
            loc: {
                start: { line: 1, column: 0 },
                end: { line: 1, column: 6 }
            }
        },
        range: [0, 6],
        loc: {
            start: { line: 1, column: 0 },
            end: { line: 1, column: 6 }
        }
    },

    'x >> y': {
        type: 'ExpressionStatement',
        expression: {
            type: 'BinaryExpression',
            operator: '>>',
            left: {
                type: 'Identifier',
                name: 'x',
                range: [0, 1],
                loc: {
                    start: { line: 1, column: 0 },
                    end: { line: 1, column: 1 }
                }
            },
            right: {
                type: 'Identifier',
                name: 'y',
                range: [5, 6],
                loc: {
                    start: { line: 1, column: 5 },
                    end: { line: 1, column: 6 }
                }
            },
            range: [0, 6],
            loc: {
                start: { line: 1, column: 0 },
                end: { line: 1, column: 6 }
            }
        },
        range: [0, 6],
        loc: {
            start: { line: 1, column: 0 },
            end: { line: 1, column: 6 }
        }
    },

    'x >>> y': {
        type: 'ExpressionStatement',
        expression: {
            type: 'BinaryExpression',
            operator: '>>>',
            left: {
                type: 'Identifier',
                name: 'x',
                range: [0, 1],
                loc: {
                    start: { line: 1, column: 0 },
                    end: { line: 1, column: 1 }
                }
            },
            right: {
                type: 'Identifier',
                name: 'y',
                range: [6, 7],
                loc: {
                    start: { line: 1, column: 6 },
                    end: { line: 1, column: 7 }
                }
            },
            range: [0, 7],
            loc: {
                start: { line: 1, column: 0 },
                end: { line: 1, column: 7 }
            }
        },
        range: [0, 7],
        loc: {
            start: { line: 1, column: 0 },
            end: { line: 1, column: 7 }
        }
    }

},

'Relational Operators': {

    'x < y': {
        type: 'ExpressionStatement',
        expression: {
            type: 'BinaryExpression',
            operator: '<',
            left: {
                type: 'Identifier',
                name: 'x',
                range: [0, 1],
                loc: {
                    start: { line: 1, column: 0 },
                    end: { line: 1, column: 1 }
                }
            },
            right: {
                type: 'Identifier',
                name: 'y',
                range: [4, 5],
                loc: {
                    start: { line: 1, column: 4 },
                    end: { line: 1, column: 5 }
                }
            },
            range: [0, 5],
            loc: {
                start: { line: 1, column: 0 },
                end: { line: 1, column: 5 }
            }
        },
        range: [0, 5],
        loc: {
            start: { line: 1, column: 0 },
            end: { line: 1, column: 5 }
        }
    },

    'x > y': {
        type: 'ExpressionStatement',
        expression: {
            type: 'BinaryExpression',
            operator: '>',
            left: {
                type: 'Identifier',
                name: 'x',
                range: [0, 1],
                loc: {
                    start: { line: 1, column: 0 },
                    end: { line: 1, column: 1 }
                }
            },
            right: {
                type: 'Identifier',
                name: 'y',
                range: [4, 5],
                loc: {
                    start: { line: 1, column: 4 },
                    end: { line: 1, column: 5 }
                }
            },
            range: [0, 5],
            loc: {
                start: { line: 1, column: 0 },
                end: { line: 1, column: 5 }
            }
        },
        range: [0, 5],
        loc: {
            start: { line: 1, column: 0 },
            end: { line: 1, column: 5 }
        }
    },

    'x <= y': {
        type: 'ExpressionStatement',
        expression: {
            type: 'BinaryExpression',
            operator: '<=',
            left: {
                type: 'Identifier',
                name: 'x',
                range: [0, 1],
                loc: {
                    start: { line: 1, column: 0 },
                    end: { line: 1, column: 1 }
                }
            },
            right: {
                type: 'Identifier',
                name: 'y',
                range: [5, 6],
                loc: {
                    start: { line: 1, column: 5 },
                    end: { line: 1, column: 6 }
                }
            },
            range: [0, 6],
            loc: {
                start: { line: 1, column: 0 },
                end: { line: 1, column: 6 }
            }
        },
        range: [0, 6],
        loc: {
            start: { line: 1, column: 0 },
            end: { line: 1, column: 6 }
        }
    },

    'x >= y': {
        type: 'ExpressionStatement',
        expression: {
            type: 'BinaryExpression',
            operator: '>=',
            left: {
                type: 'Identifier',
                name: 'x',
                range: [0, 1],
                loc: {
                    start: { line: 1, column: 0 },
                    end: { line: 1, column: 1 }
                }
            },
            right: {
                type: 'Identifier',
                name: 'y',
                range: [5, 6],
                loc: {
                    start: { line: 1, column: 5 },
                    end: { line: 1, column: 6 }
                }
            },
            range: [0, 6],
            loc: {
                start: { line: 1, column: 0 },
                end: { line: 1, column: 6 }
            }
        },
        range: [0, 6],
        loc: {
            start: { line: 1, column: 0 },
            end: { line: 1, column: 6 }
        }
    },

    'x in y': {
        type: 'ExpressionStatement',
        expression: {
            type: 'BinaryExpression',
            operator: 'in',
            left: {
                type: 'Identifier',
                name: 'x',
                range: [0, 1],
                loc: {
                    start: { line: 1, column: 0 },
                    end: { line: 1, column: 1 }
                }
            },
            right: {
                type: 'Identifier',
                name: 'y',
                range: [5, 6],
                loc: {
                    start: { line: 1, column: 5 },
                    end: { line: 1, column: 6 }
                }
            },
            range: [0, 6],
            loc: {
                start: { line: 1, column: 0 },
                end: { line: 1, column: 6 }
            }
        },
        range: [0, 6],
        loc: {
            start: { line: 1, column: 0 },
            end: { line: 1, column: 6 }
        }
    },

    'x instanceof y': {
        type: 'ExpressionStatement',
        expression: {
            type: 'BinaryExpression',
            operator: 'instanceof',
            left: {
                type: 'Identifier',
                name: 'x',
                range: [0, 1],
                loc: {
                    start: { line: 1, column: 0 },
                    end: { line: 1, column: 1 }
                }
            },
            right: {
                type: 'Identifier',
                name: 'y',
                range: [13, 14],
                loc: {
                    start: { line: 1, column: 13 },
                    end: { line: 1, column: 14 }
                }
            },
            range: [0, 14],
            loc: {
                start: { line: 1, column: 0 },
                end: { line: 1, column: 14 }
            }
        },
        range: [0, 14],
        loc: {
            start: { line: 1, column: 0 },
            end: { line: 1, column: 14 }
        }
    },

    'x < y < z': {
        type: 'ExpressionStatement',
        expression: {
            type: 'BinaryExpression',
            operator: '<',
            left: {
                type: 'BinaryExpression',
                operator: '<',
                left: {
                    type: 'Identifier',
                    name: 'x',
                    range: [0, 1],
                    loc: {
                        start: { line: 1, column: 0 },
                        end: { line: 1, column: 1 }
                    }
                },
                right: {
                    type: 'Identifier',
                    name: 'y',
                    range: [4, 5],
                    loc: {
                        start: { line: 1, column: 4 },
                        end: { line: 1, column: 5 }
                    }
                },
                range: [0, 5],
                loc: {
                    start: { line: 1, column: 0 },
                    end: { line: 1, column: 5 }
                }
            },
            right: {
                type: 'Identifier',
                name: 'z',
                range: [8, 9],
                loc: {
                    start: { line: 1, column: 8 },
                    end: { line: 1, column: 9 }
                }
            },
            range: [0, 9],
            loc: {
                start: { line: 1, column: 0 },
                end: { line: 1, column: 9 }
            }
        },
        range: [0, 9],
        loc: {
            start: { line: 1, column: 0 },
            end: { line: 1, column: 9 }
        }
    }

},

'Equality Operators': {

    'x == y': {
        type: 'ExpressionStatement',
        expression: {
            type: 'BinaryExpression',
            operator: '==',
            left: {
                type: 'Identifier',
                name: 'x',
                range: [0, 1],
                loc: {
                    start: { line: 1, column: 0 },
                    end: { line: 1, column: 1 }
                }
            },
            right: {
                type: 'Identifier',
                name: 'y',
                range: [5, 6],
                loc: {
                    start: { line: 1, column: 5 },
                    end: { line: 1, column: 6 }
                }
            },
            range: [0, 6],
            loc: {
                start: { line: 1, column: 0 },
                end: { line: 1, column: 6 }
            }
        },
        range: [0, 6],
        loc: {
            start: { line: 1, column: 0 },
            end: { line: 1, column: 6 }
        }
    },

    'x != y': {
        type: 'ExpressionStatement',
        expression: {
            type: 'BinaryExpression',
            operator: '!=',
            left: {
                type: 'Identifier',
                name: 'x',
                range: [0, 1],
                loc: {
                    start: { line: 1, column: 0 },
                    end: { line: 1, column: 1 }
                }
            },
            right: {
                type: 'Identifier',
                name: 'y',
                range: [5, 6],
                loc: {
                    start: { line: 1, column: 5 },
                    end: { line: 1, column: 6 }
                }
            },
            range: [0, 6],
            loc: {
                start: { line: 1, column: 0 },
                end: { line: 1, column: 6 }
            }
        },
        range: [0, 6],
        loc: {
            start: { line: 1, column: 0 },
            end: { line: 1, column: 6 }
        }
    },

    'x === y': {
        type: 'ExpressionStatement',
        expression: {
            type: 'BinaryExpression',
            operator: '===',
            left: {
                type: 'Identifier',
                name: 'x',
                range: [0, 1],
                loc: {
                    start: { line: 1, column: 0 },
                    end: { line: 1, column: 1 }
                }
            },
            right: {
                type: 'Identifier',
                name: 'y',
                range: [6, 7],
                loc: {
                    start: { line: 1, column: 6 },
                    end: { line: 1, column: 7 }
                }
            },
            range: [0, 7],
            loc: {
                start: { line: 1, column: 0 },
                end: { line: 1, column: 7 }
            }
        },
        range: [0, 7],
        loc: {
            start: { line: 1, column: 0 },
            end: { line: 1, column: 7 }
        }
    },

    'x !== y': {
        type: 'ExpressionStatement',
        expression: {
            type: 'BinaryExpression',
            operator: '!==',
            left: {
                type: 'Identifier',
                name: 'x',
                range: [0, 1],
                loc: {
                    start: { line: 1, column: 0 },
                    end: { line: 1, column: 1 }
                }
            },
            right: {
                type: 'Identifier',
                name: 'y',
                range: [6, 7],
                loc: {
                    start: { line: 1, column: 6 },
                    end: { line: 1, column: 7 }
                }
            },
            range: [0, 7],
            loc: {
                start: { line: 1, column: 0 },
                end: { line: 1, column: 7 }
            }
        },
        range: [0, 7],
        loc: {
            start: { line: 1, column: 0 },
            end: { line: 1, column: 7 }
        }
    }

},

'Binary Bitwise Operators': {

    'x & y': {
        type: 'ExpressionStatement',
        expression: {
            type: 'BinaryExpression',
            operator: '&',
            left: {
                type: 'Identifier',
                name: 'x',
                range: [0, 1],
                loc: {
                    start: { line: 1, column: 0 },
                    end: { line: 1, column: 1 }
                }
            },
            right: {
                type: 'Identifier',
                name: 'y',
                range: [4, 5],
                loc: {
                    start: { line: 1, column: 4 },
                    end: { line: 1, column: 5 }
                }
            },
            range: [0, 5],
            loc: {
                start: { line: 1, column: 0 },
                end: { line: 1, column: 5 }
            }
        },
        range: [0, 5],
        loc: {
            start: { line: 1, column: 0 },
            end: { line: 1, column: 5 }
        }
    },

    'x ^ y': {
        type: 'ExpressionStatement',
        expression: {
            type: 'BinaryExpression',
            operator: '^',
            left: {
                type: 'Identifier',
                name: 'x',
                range: [0, 1],
                loc: {
                    start: { line: 1, column: 0 },
                    end: { line: 1, column: 1 }
                }
            },
            right: {
                type: 'Identifier',
                name: 'y',
                range: [4, 5],
                loc: {
                    start: { line: 1, column: 4 },
                    end: { line: 1, column: 5 }
                }
            },
            range: [0, 5],
            loc: {
                start: { line: 1, column: 0 },
                end: { line: 1, column: 5 }
            }
        },
        range: [0, 5],
        loc: {
            start: { line: 1, column: 0 },
            end: { line: 1, column: 5 }
        }
    },

    'x | y': {
        type: 'ExpressionStatement',
        expression: {
            type: 'BinaryExpression',
            operator: '|',
            left: {
                type: 'Identifier',
                name: 'x',
                range: [0, 1],
                loc: {
                    start: { line: 1, column: 0 },
                    end: { line: 1, column: 1 }
                }
            },
            right: {
                type: 'Identifier',
                name: 'y',
                range: [4, 5],
                loc: {
                    start: { line: 1, column: 4 },
                    end: { line: 1, column: 5 }
                }
            },
            range: [0, 5],
            loc: {
                start: { line: 1, column: 0 },
                end: { line: 1, column: 5 }
            }
        },
        range: [0, 5],
        loc: {
            start: { line: 1, column: 0 },
            end: { line: 1, column: 5 }
        }
    }

},

'Binary Expressions': {

    'x + y + z': {
        type: 'ExpressionStatement',
        expression: {
            type: 'BinaryExpression',
            operator: '+',
            left: {
                type: 'BinaryExpression',
                operator: '+',
                left: {
                    type: 'Identifier',
                    name: 'x',
                    range: [0, 1],
                    loc: {
                        start: { line: 1, column: 0 },
                        end: { line: 1, column: 1 }
                    }
                },
                right: {
                    type: 'Identifier',
                    name: 'y',
                    range: [4, 5],
                    loc: {
                        start: { line: 1, column: 4 },
                        end: { line: 1, column: 5 }
                    }
                },
                range: [0, 5],
                loc: {
                    start: { line: 1, column: 0 },
                    end: { line: 1, column: 5 }
                }
            },
            right: {
                type: 'Identifier',
                name: 'z',
                range: [8, 9],
                loc: {
                    start: { line: 1, column: 8 },
                    end: { line: 1, column: 9 }
                }
            },
            range: [0, 9],
            loc: {
                start: { line: 1, column: 0 },
                end: { line: 1, column: 9 }
            }
        },
        range: [0, 9],
        loc: {
            start: { line: 1, column: 0 },
            end: { line: 1, column: 9 }
        }
    },

    'x - y + z': {
        type: 'ExpressionStatement',
        expression: {
            type: 'BinaryExpression',
            operator: '+',
            left: {
                type: 'BinaryExpression',
                operator: '-',
                left: {
                    type: 'Identifier',
                    name: 'x',
                    range: [0, 1],
                    loc: {
                        start: { line: 1, column: 0 },
                        end: { line: 1, column: 1 }
                    }
                },
                right: {
                    type: 'Identifier',
                    name: 'y',
                    range: [4, 5],
                    loc: {
                        start: { line: 1, column: 4 },
                        end: { line: 1, column: 5 }
                    }
                },
                range: [0, 5],
                loc: {
                    start: { line: 1, column: 0 },
                    end: { line: 1, column: 5 }
                }
            },
            right: {
                type: 'Identifier',
                name: 'z',
                range: [8, 9],
                loc: {
                    start: { line: 1, column: 8 },
                    end: { line: 1, column: 9 }
                }
            },
            range: [0, 9],
            loc: {
                start: { line: 1, column: 0 },
                end: { line: 1, column: 9 }
            }
        },
        range: [0, 9],
        loc: {
            start: { line: 1, column: 0 },
            end: { line: 1, column: 9 }
        }
    },

    'x + y - z': {
        type: 'ExpressionStatement',
        expression: {
            type: 'BinaryExpression',
            operator: '-',
            left: {
                type: 'BinaryExpression',
                operator: '+',
                left: {
                    type: 'Identifier',
                    name: 'x',
                    range: [0, 1],
                    loc: {
                        start: { line: 1, column: 0 },
                        end: { line: 1, column: 1 }
                    }
                },
                right: {
                    type: 'Identifier',
                    name: 'y',
                    range: [4, 5],
                    loc: {
                        start: { line: 1, column: 4 },
                        end: { line: 1, column: 5 }
                    }
                },
                range: [0, 5],
                loc: {
                    start: { line: 1, column: 0 },
                    end: { line: 1, column: 5 }
                }
            },
            right: {
                type: 'Identifier',
                name: 'z',
                range: [8, 9],
                loc: {
                    start: { line: 1, column: 8 },
                    end: { line: 1, column: 9 }
                }
            },
            range: [0, 9],
            loc: {
                start: { line: 1, column: 0 },
                end: { line: 1, column: 9 }
            }
        },
        range: [0, 9],
        loc: {
            start: { line: 1, column: 0 },
            end: { line: 1, column: 9 }
        }
    },

    'x - y - z': {
        type: 'ExpressionStatement',
        expression: {
            type: 'BinaryExpression',
            operator: '-',
            left: {
                type: 'BinaryExpression',
                operator: '-',
                left: {
                    type: 'Identifier',
                    name: 'x',
                    range: [0, 1],
                    loc: {
                        start: { line: 1, column: 0 },
                        end: { line: 1, column: 1 }
                    }
                },
                right: {
                    type: 'Identifier',
                    name: 'y',
                    range: [4, 5],
                    loc: {
                        start: { line: 1, column: 4 },
                        end: { line: 1, column: 5 }
                    }
                },
                range: [0, 5],
                loc: {
                    start: { line: 1, column: 0 },
                    end: { line: 1, column: 5 }
                }
            },
            right: {
                type: 'Identifier',
                name: 'z',
                range: [8, 9],
                loc: {
                    start: { line: 1, column: 8 },
                    end: { line: 1, column: 9 }
                }
            },
            range: [0, 9],
            loc: {
                start: { line: 1, column: 0 },
                end: { line: 1, column: 9 }
            }
        },
        range: [0, 9],
        loc: {
            start: { line: 1, column: 0 },
            end: { line: 1, column: 9 }
        }
    },

    'x + y * z': {
        type: 'ExpressionStatement',
        expression: {
            type: 'BinaryExpression',
            operator: '+',
            left: {
                type: 'Identifier',
                name: 'x',
                range: [0, 1],
                loc: {
                    start: { line: 1, column: 0 },
                    end: { line: 1, column: 1 }
                }
            },
            right: {
                type: 'BinaryExpression',
                operator: '*',
                left: {
                    type: 'Identifier',
                    name: 'y',
                    range: [4, 5],
                    loc: {
                        start: { line: 1, column: 4 },
                        end: { line: 1, column: 5 }
                    }
                },
                right: {
                    type: 'Identifier',
                    name: 'z',
                    range: [8, 9],
                    loc: {
                        start: { line: 1, column: 8 },
                        end: { line: 1, column: 9 }
                    }
                },
                range: [4, 9],
                loc: {
                    start: { line: 1, column: 4 },
                    end: { line: 1, column: 9 }
                }
            },
            range: [0, 9],
            loc: {
                start: { line: 1, column: 0 },
                end: { line: 1, column: 9 }
            }
        },
        range: [0, 9],
        loc: {
            start: { line: 1, column: 0 },
            end: { line: 1, column: 9 }
        }
    },

    'x + y / z': {
        type: 'ExpressionStatement',
        expression: {
            type: 'BinaryExpression',
            operator: '+',
            left: {
                type: 'Identifier',
                name: 'x',
                range: [0, 1],
                loc: {
                    start: { line: 1, column: 0 },
                    end: { line: 1, column: 1 }
                }
            },
            right: {
                type: 'BinaryExpression',
                operator: '/',
                left: {
                    type: 'Identifier',
                    name: 'y',
                    range: [4, 5],
                    loc: {
                        start: { line: 1, column: 4 },
                        end: { line: 1, column: 5 }
                    }
                },
                right: {
                    type: 'Identifier',
                    name: 'z',
                    range: [8, 9],
                    loc: {
                        start: { line: 1, column: 8 },
                        end: { line: 1, column: 9 }
                    }
                },
                range: [4, 9],
                loc: {
                    start: { line: 1, column: 4 },
                    end: { line: 1, column: 9 }
                }
            },
            range: [0, 9],
            loc: {
                start: { line: 1, column: 0 },
                end: { line: 1, column: 9 }
            }
        },
        range: [0, 9],
        loc: {
            start: { line: 1, column: 0 },
            end: { line: 1, column: 9 }
        }
    },

    'x - y % z': {
        type: 'ExpressionStatement',
        expression: {
            type: 'BinaryExpression',
            operator: '-',
            left: {
                type: 'Identifier',
                name: 'x',
                range: [0, 1],
                loc: {
                    start: { line: 1, column: 0 },
                    end: { line: 1, column: 1 }
                }
            },
            right: {
                type: 'BinaryExpression',
                operator: '%',
                left: {
                    type: 'Identifier',
                    name: 'y',
                    range: [4, 5],
                    loc: {
                        start: { line: 1, column: 4 },
                        end: { line: 1, column: 5 }
                    }
                },
                right: {
                    type: 'Identifier',
                    name: 'z',
                    range: [8, 9],
                    loc: {
                        start: { line: 1, column: 8 },
                        end: { line: 1, column: 9 }
                    }
                },
                range: [4, 9],
                loc: {
                    start: { line: 1, column: 4 },
                    end: { line: 1, column: 9 }
                }
            },
            range: [0, 9],
            loc: {
                start: { line: 1, column: 0 },
                end: { line: 1, column: 9 }
            }
        },
        range: [0, 9],
        loc: {
            start: { line: 1, column: 0 },
            end: { line: 1, column: 9 }
        }
    },

    'x * y * z': {
        type: 'ExpressionStatement',
        expression: {
            type: 'BinaryExpression',
            operator: '*',
            left: {
                type: 'BinaryExpression',
                operator: '*',
                left: {
                    type: 'Identifier',
                    name: 'x',
                    range: [0, 1],
                    loc: {
                        start: { line: 1, column: 0 },
                        end: { line: 1, column: 1 }
                    }
                },
                right: {
                    type: 'Identifier',
                    name: 'y',
                    range: [4, 5],
                    loc: {
                        start: { line: 1, column: 4 },
                        end: { line: 1, column: 5 }
                    }
                },
                range: [0, 5],
                loc: {
                    start: { line: 1, column: 0 },
                    end: { line: 1, column: 5 }
                }
            },
            right: {
                type: 'Identifier',
                name: 'z',
                range: [8, 9],
                loc: {
                    start: { line: 1, column: 8 },
                    end: { line: 1, column: 9 }
                }
            },
            range: [0, 9],
            loc: {
                start: { line: 1, column: 0 },
                end: { line: 1, column: 9 }
            }
        },
        range: [0, 9],
        loc: {
            start: { line: 1, column: 0 },
            end: { line: 1, column: 9 }
        }
    },

    'x * y / z': {
        type: 'ExpressionStatement',
        expression: {
            type: 'BinaryExpression',
            operator: '/',
            left: {
                type: 'BinaryExpression',
                operator: '*',
                left: {
                    type: 'Identifier',
                    name: 'x',
                    range: [0, 1],
                    loc: {
                        start: { line: 1, column: 0 },
                        end: { line: 1, column: 1 }
                    }
                },
                right: {
                    type: 'Identifier',
                    name: 'y',
                    range: [4, 5],
                    loc: {
                        start: { line: 1, column: 4 },
                        end: { line: 1, column: 5 }
                    }
                },
                range: [0, 5],
                loc: {
                    start: { line: 1, column: 0 },
                    end: { line: 1, column: 5 }
                }
            },
            right: {
                type: 'Identifier',
                name: 'z',
                range: [8, 9],
                loc: {
                    start: { line: 1, column: 8 },
                    end: { line: 1, column: 9 }
                }
            },
            range: [0, 9],
            loc: {
                start: { line: 1, column: 0 },
                end: { line: 1, column: 9 }
            }
        },
        range: [0, 9],
        loc: {
            start: { line: 1, column: 0 },
            end: { line: 1, column: 9 }
        }
    },

    'x * y % z': {
        type: 'ExpressionStatement',
        expression: {
            type: 'BinaryExpression',
            operator: '%',
            left: {
                type: 'BinaryExpression',
                operator: '*',
                left: {
                    type: 'Identifier',
                    name: 'x',
                    range: [0, 1],
                    loc: {
                        start: { line: 1, column: 0 },
                        end: { line: 1, column: 1 }
                    }
                },
                right: {
                    type: 'Identifier',
                    name: 'y',
                    range: [4, 5],
                    loc: {
                        start: { line: 1, column: 4 },
                        end: { line: 1, column: 5 }
                    }
                },
                range: [0, 5],
                loc: {
                    start: { line: 1, column: 0 },
                    end: { line: 1, column: 5 }
                }
            },
            right: {
                type: 'Identifier',
                name: 'z',
                range: [8, 9],
                loc: {
                    start: { line: 1, column: 8 },
                    end: { line: 1, column: 9 }
                }
            },
            range: [0, 9],
            loc: {
                start: { line: 1, column: 0 },
                end: { line: 1, column: 9 }
            }
        },
        range: [0, 9],
        loc: {
            start: { line: 1, column: 0 },
            end: { line: 1, column: 9 }
        }
    },

    'x % y * z': {
        type: 'ExpressionStatement',
        expression: {
            type: 'BinaryExpression',
            operator: '*',
            left: {
                type: 'BinaryExpression',
                operator: '%',
                left: {
                    type: 'Identifier',
                    name: 'x',
                    range: [0, 1],
                    loc: {
                        start: { line: 1, column: 0 },
                        end: { line: 1, column: 1 }
                    }
                },
                right: {
                    type: 'Identifier',
                    name: 'y',
                    range: [4, 5],
                    loc: {
                        start: { line: 1, column: 4 },
                        end: { line: 1, column: 5 }
                    }
                },
                range: [0, 5],
                loc: {
                    start: { line: 1, column: 0 },
                    end: { line: 1, column: 5 }
                }
            },
            right: {
                type: 'Identifier',
                name: 'z',
                range: [8, 9],
                loc: {
                    start: { line: 1, column: 8 },
                    end: { line: 1, column: 9 }
                }
            },
            range: [0, 9],
            loc: {
                start: { line: 1, column: 0 },
                end: { line: 1, column: 9 }
            }
        },
        range: [0, 9],
        loc: {
            start: { line: 1, column: 0 },
            end: { line: 1, column: 9 }
        }
    },

    'x << y << z': {
        type: 'ExpressionStatement',
        expression: {
            type: 'BinaryExpression',
            operator: '<<',
            left: {
                type: 'BinaryExpression',
                operator: '<<',
                left: {
                    type: 'Identifier',
                    name: 'x',
                    range: [0, 1],
                    loc: {
                        start: { line: 1, column: 0 },
                        end: { line: 1, column: 1 }
                    }
                },
                right: {
                    type: 'Identifier',
                    name: 'y',
                    range: [5, 6],
                    loc: {
                        start: { line: 1, column: 5 },
                        end: { line: 1, column: 6 }
                    }
                },
                range: [0, 6],
                loc: {
                    start: { line: 1, column: 0 },
                    end: { line: 1, column: 6 }
                }
            },
            right: {
                type: 'Identifier',
                name: 'z',
                range: [10, 11],
                loc: {
                    start: { line: 1, column: 10 },
                    end: { line: 1, column: 11 }
                }
            },
            range: [0, 11],
            loc: {
                start: { line: 1, column: 0 },
                end: { line: 1, column: 11 }
            }
        },
        range: [0, 11],
        loc: {
            start: { line: 1, column: 0 },
            end: { line: 1, column: 11 }
        }
    },

    'x | y | z': {
        type: 'ExpressionStatement',
        expression: {
            type: 'BinaryExpression',
            operator: '|',
            left: {
                type: 'BinaryExpression',
                operator: '|',
                left: {
                    type: 'Identifier',
                    name: 'x',
                    range: [0, 1],
                    loc: {
                        start: { line: 1, column: 0 },
                        end: { line: 1, column: 1 }
                    }
                },
                right: {
                    type: 'Identifier',
                    name: 'y',
                    range: [4, 5],
                    loc: {
                        start: { line: 1, column: 4 },
                        end: { line: 1, column: 5 }
                    }
                },
                range: [0, 5],
                loc: {
                    start: { line: 1, column: 0 },
                    end: { line: 1, column: 5 }
                }
            },
            right: {
                type: 'Identifier',
                name: 'z',
                range: [8, 9],
                loc: {
                    start: { line: 1, column: 8 },
                    end: { line: 1, column: 9 }
                }
            },
            range: [0, 9],
            loc: {
                start: { line: 1, column: 0 },
                end: { line: 1, column: 9 }
            }
        },
        range: [0, 9],
        loc: {
            start: { line: 1, column: 0 },
            end: { line: 1, column: 9 }
        }
    },

    'x & y & z': {
        type: 'ExpressionStatement',
        expression: {
            type: 'BinaryExpression',
            operator: '&',
            left: {
                type: 'BinaryExpression',
                operator: '&',
                left: {
                    type: 'Identifier',
                    name: 'x',
                    range: [0, 1],
                    loc: {
                        start: { line: 1, column: 0 },
                        end: { line: 1, column: 1 }
                    }
                },
                right: {
                    type: 'Identifier',
                    name: 'y',
                    range: [4, 5],
                    loc: {
                        start: { line: 1, column: 4 },
                        end: { line: 1, column: 5 }
                    }
                },
                range: [0, 5],
                loc: {
                    start: { line: 1, column: 0 },
                    end: { line: 1, column: 5 }
                }
            },
            right: {
                type: 'Identifier',
                name: 'z',
                range: [8, 9],
                loc: {
                    start: { line: 1, column: 8 },
                    end: { line: 1, column: 9 }
                }
            },
            range: [0, 9],
            loc: {
                start: { line: 1, column: 0 },
                end: { line: 1, column: 9 }
            }
        },
        range: [0, 9],
        loc: {
            start: { line: 1, column: 0 },
            end: { line: 1, column: 9 }
        }
    },

    'x ^ y ^ z': {
        type: 'ExpressionStatement',
        expression: {
            type: 'BinaryExpression',
            operator: '^',
            left: {
                type: 'BinaryExpression',
                operator: '^',
                left: {
                    type: 'Identifier',
                    name: 'x',
                    range: [0, 1],
                    loc: {
                        start: { line: 1, column: 0 },
                        end: { line: 1, column: 1 }
                    }
                },
                right: {
                    type: 'Identifier',
                    name: 'y',
                    range: [4, 5],
                    loc: {
                        start: { line: 1, column: 4 },
                        end: { line: 1, column: 5 }
                    }
                },
                range: [0, 5],
                loc: {
                    start: { line: 1, column: 0 },
                    end: { line: 1, column: 5 }
                }
            },
            right: {
                type: 'Identifier',
                name: 'z',
                range: [8, 9],
                loc: {
                    start: { line: 1, column: 8 },
                    end: { line: 1, column: 9 }
                }
            },
            range: [0, 9],
            loc: {
                start: { line: 1, column: 0 },
                end: { line: 1, column: 9 }
            }
        },
        range: [0, 9],
        loc: {
            start: { line: 1, column: 0 },
            end: { line: 1, column: 9 }
        }
    },

    'x & y | z': {
        type: 'ExpressionStatement',
        expression: {
            type: 'BinaryExpression',
            operator: '|',
            left: {
                type: 'BinaryExpression',
                operator: '&',
                left: {
                    type: 'Identifier',
                    name: 'x',
                    range: [0, 1],
                    loc: {
                        start: { line: 1, column: 0 },
                        end: { line: 1, column: 1 }
                    }
                },
                right: {
                    type: 'Identifier',
                    name: 'y',
                    range: [4, 5],
                    loc: {
                        start: { line: 1, column: 4 },
                        end: { line: 1, column: 5 }
                    }
                },
                range: [0, 5],
                loc: {
                    start: { line: 1, column: 0 },
                    end: { line: 1, column: 5 }
                }
            },
            right: {
                type: 'Identifier',
                name: 'z',
                range: [8, 9],
                loc: {
                    start: { line: 1, column: 8 },
                    end: { line: 1, column: 9 }
                }
            },
            range: [0, 9],
            loc: {
                start: { line: 1, column: 0 },
                end: { line: 1, column: 9 }
            }
        },
        range: [0, 9],
        loc: {
            start: { line: 1, column: 0 },
            end: { line: 1, column: 9 }
        }
    },

    'x | y ^ z': {
        type: 'ExpressionStatement',
        expression: {
            type: 'BinaryExpression',
            operator: '|',
            left: {
                type: 'Identifier',
                name: 'x',
                range: [0, 1],
                loc: {
                    start: { line: 1, column: 0 },
                    end: { line: 1, column: 1 }
                }
            },
            right: {
                type: 'BinaryExpression',
                operator: '^',
                left: {
                    type: 'Identifier',
                    name: 'y',
                    range: [4, 5],
                    loc: {
                        start: { line: 1, column: 4 },
                        end: { line: 1, column: 5 }
                    }
                },
                right: {
                    type: 'Identifier',
                    name: 'z',
                    range: [8, 9],
                    loc: {
                        start: { line: 1, column: 8 },
                        end: { line: 1, column: 9 }
                    }
                },
                range: [4, 9],
                loc: {
                    start: { line: 1, column: 4 },
                    end: { line: 1, column: 9 }
                }
            },
            range: [0, 9],
            loc: {
                start: { line: 1, column: 0 },
                end: { line: 1, column: 9 }
            }
        },
        range: [0, 9],
        loc: {
            start: { line: 1, column: 0 },
            end: { line: 1, column: 9 }
        }
    },

    'x | y & z': {
        type: 'ExpressionStatement',
        expression: {
            type: 'BinaryExpression',
            operator: '|',
            left: {
                type: 'Identifier',
                name: 'x',
                range: [0, 1],
                loc: {
                    start: { line: 1, column: 0 },
                    end: { line: 1, column: 1 }
                }
            },
            right: {
                type: 'BinaryExpression',
                operator: '&',
                left: {
                    type: 'Identifier',
                    name: 'y',
                    range: [4, 5],
                    loc: {
                        start: { line: 1, column: 4 },
                        end: { line: 1, column: 5 }
                    }
                },
                right: {
                    type: 'Identifier',
                    name: 'z',
                    range: [8, 9],
                    loc: {
                        start: { line: 1, column: 8 },
                        end: { line: 1, column: 9 }
                    }
                },
                range: [4, 9],
                loc: {
                    start: { line: 1, column: 4 },
                    end: { line: 1, column: 9 }
                }
            },
            range: [0, 9],
            loc: {
                start: { line: 1, column: 0 },
                end: { line: 1, column: 9 }
            }
        },
        range: [0, 9],
        loc: {
            start: { line: 1, column: 0 },
            end: { line: 1, column: 9 }
        }
    }

},

'Binary Logical Operators': {

    'x || y': {
        type: 'ExpressionStatement',
        expression: {
            type: 'LogicalExpression',
            operator: '||',
            left: {
                type: 'Identifier',
                name: 'x',
                range: [0, 1],
                loc: {
                    start: { line: 1, column: 0 },
                    end: { line: 1, column: 1 }
                }
            },
            right: {
                type: 'Identifier',
                name: 'y',
                range: [5, 6],
                loc: {
                    start: { line: 1, column: 5 },
                    end: { line: 1, column: 6 }
                }
            },
            range: [0, 6],
            loc: {
                start: { line: 1, column: 0 },
                end: { line: 1, column: 6 }
            }
        },
        range: [0, 6],
        loc: {
            start: { line: 1, column: 0 },
            end: { line: 1, column: 6 }
        }
    },

    'x && y': {
        type: 'ExpressionStatement',
        expression: {
            type: 'LogicalExpression',
            operator: '&&',
            left: {
                type: 'Identifier',
                name: 'x',
                range: [0, 1],
                loc: {
                    start: { line: 1, column: 0 },
                    end: { line: 1, column: 1 }
                }
            },
            right: {
                type: 'Identifier',
                name: 'y',
                range: [5, 6],
                loc: {
                    start: { line: 1, column: 5 },
                    end: { line: 1, column: 6 }
                }
            },
            range: [0, 6],
            loc: {
                start: { line: 1, column: 0 },
                end: { line: 1, column: 6 }
            }
        },
        range: [0, 6],
        loc: {
            start: { line: 1, column: 0 },
            end: { line: 1, column: 6 }
        }
    },

    'x || y || z': {
        type: 'ExpressionStatement',
        expression: {
            type: 'LogicalExpression',
            operator: '||',
            left: {
                type: 'LogicalExpression',
                operator: '||',
                left: {
                    type: 'Identifier',
                    name: 'x',
                    range: [0, 1],
                    loc: {
                        start: { line: 1, column: 0 },
                        end: { line: 1, column: 1 }
                    }
                },
                right: {
                    type: 'Identifier',
                    name: 'y',
                    range: [5, 6],
                    loc: {
                        start: { line: 1, column: 5 },
                        end: { line: 1, column: 6 }
                    }
                },
                range: [0, 6],
                loc: {
                    start: { line: 1, column: 0 },
                    end: { line: 1, column: 6 }
                }
            },
            right: {
                type: 'Identifier',
                name: 'z',
                range: [10, 11],
                loc: {
                    start: { line: 1, column: 10 },
                    end: { line: 1, column: 11 }
                }
            },
            range: [0, 11],
            loc: {
                start: { line: 1, column: 0 },
                end: { line: 1, column: 11 }
            }
        },
        range: [0, 11],
        loc: {
            start: { line: 1, column: 0 },
            end: { line: 1, column: 11 }
        }
    },

    'x && y && z': {
        type: 'ExpressionStatement',
        expression: {
            type: 'LogicalExpression',
            operator: '&&',
            left: {
                type: 'LogicalExpression',
                operator: '&&',
                left: {
                    type: 'Identifier',
                    name: 'x',
                    range: [0, 1],
                    loc: {
                        start: { line: 1, column: 0 },
                        end: { line: 1, column: 1 }
                    }
                },
                right: {
                    type: 'Identifier',
                    name: 'y',
                    range: [5, 6],
                    loc: {
                        start: { line: 1, column: 5 },
                        end: { line: 1, column: 6 }
                    }
                },
                range: [0, 6],
                loc: {
                    start: { line: 1, column: 0 },
                    end: { line: 1, column: 6 }
                }
            },
            right: {
                type: 'Identifier',
                name: 'z',
                range: [10, 11],
                loc: {
                    start: { line: 1, column: 10 },
                    end: { line: 1, column: 11 }
                }
            },
            range: [0, 11],
            loc: {
                start: { line: 1, column: 0 },
                end: { line: 1, column: 11 }
            }
        },
        range: [0, 11],
        loc: {
            start: { line: 1, column: 0 },
            end: { line: 1, column: 11 }
        }
    },

    'x || y && z': {
        type: 'ExpressionStatement',
        expression: {
            type: 'LogicalExpression',
            operator: '||',
            left: {
                type: 'Identifier',
                name: 'x',
                range: [0, 1],
                loc: {
                    start: { line: 1, column: 0 },
                    end: { line: 1, column: 1 }
                }
            },
            right: {
                type: 'LogicalExpression',
                operator: '&&',
                left: {
                    type: 'Identifier',
                    name: 'y',
                    range: [5, 6],
                    loc: {
                        start: { line: 1, column: 5 },
                        end: { line: 1, column: 6 }
                    }
                },
                right: {
                    type: 'Identifier',
                    name: 'z',
                    range: [10, 11],
                    loc: {
                        start: { line: 1, column: 10 },
                        end: { line: 1, column: 11 }
                    }
                },
                range: [5, 11],
                loc: {
                    start: { line: 1, column: 5 },
                    end: { line: 1, column: 11 }
                }
            },
            range: [0, 11],
            loc: {
                start: { line: 1, column: 0 },
                end: { line: 1, column: 11 }
            }
        },
        range: [0, 11],
        loc: {
            start: { line: 1, column: 0 },
            end: { line: 1, column: 11 }
        }
    },

    'x || y ^ z': {
        type: 'ExpressionStatement',
        expression: {
            type: 'LogicalExpression',
            operator: '||',
            left: {
                type: 'Identifier',
                name: 'x',
                range: [0, 1],
                loc: {
                    start: { line: 1, column: 0 },
                    end: { line: 1, column: 1 }
                }
            },
            right: {
                type: 'BinaryExpression',
                operator: '^',
                left: {
                    type: 'Identifier',
                    name: 'y',
                    range: [5, 6],
                    loc: {
                        start: { line: 1, column: 5 },
                        end: { line: 1, column: 6 }
                    }
                },
                right: {
                    type: 'Identifier',
                    name: 'z',
                    range: [9, 10],
                    loc: {
                        start: { line: 1, column: 9 },
                        end: { line: 1, column: 10 }
                    }
                },
                range: [5, 10],
                loc: {
                    start: { line: 1, column: 5 },
                    end: { line: 1, column: 10 }
                }
            },
            range: [0, 10],
            loc: {
                start: { line: 1, column: 0 },
                end: { line: 1, column: 10 }
            }
        },
        range: [0, 10],
        loc: {
            start: { line: 1, column: 0 },
            end: { line: 1, column: 10 }
        }
    }

},

'Conditional Operator': {

    'y ? 1 : 2': {
        type: 'ExpressionStatement',
        expression: {
            type: 'ConditionalExpression',
            test: {
                type: 'Identifier',
                name: 'y',
                range: [0, 1],
                loc: {
                    start: { line: 1, column: 0 },
                    end: { line: 1, column: 1 }
                }
            },
            consequent: {
                type: 'Literal',
                value: 1,
                raw: '1',
                range: [4, 5],
                loc: {
                    start: { line: 1, column: 4 },
                    end: { line: 1, column: 5 }
                }
            },
            alternate: {
                type: 'Literal',
                value: 2,
                raw: '2',
                range: [8, 9],
                loc: {
                    start: { line: 1, column: 8 },
                    end: { line: 1, column: 9 }
                }
            },
            range: [0, 9],
            loc: {
                start: { line: 1, column: 0 },
                end: { line: 1, column: 9 }
            }
        },
        range: [0, 9],
        loc: {
            start: { line: 1, column: 0 },
            end: { line: 1, column: 9 }
        }
    },

    'x && y ? 1 : 2': {
        type: 'ExpressionStatement',
        expression: {
            type: 'ConditionalExpression',
            test: {
                type: 'LogicalExpression',
                operator: '&&',
                left: {
                    type: 'Identifier',
                    name: 'x',
                    range: [0, 1],
                    loc: {
                        start: { line: 1, column: 0 },
                        end: { line: 1, column: 1 }
                    }
                },
                right: {
                    type: 'Identifier',
                    name: 'y',
                    range: [5, 6],
                    loc: {
                        start: { line: 1, column: 5 },
                        end: { line: 1, column: 6 }
                    }
                },
                range: [0, 6],
                loc: {
                    start: { line: 1, column: 0 },
                    end: { line: 1, column: 6 }
                }
            },
            consequent: {
                type: 'Literal',
                value: 1,
                raw: '1',
                range: [9, 10],
                loc: {
                    start: { line: 1, column: 9 },
                    end: { line: 1, column: 10 }
                }
            },
            alternate: {
                type: 'Literal',
                value: 2,
                raw: '2',
                range: [13, 14],
                loc: {
                    start: { line: 1, column: 13 },
                    end: { line: 1, column: 14 }
                }
            },
            range: [0, 14],
            loc: {
                start: { line: 1, column: 0 },
                end: { line: 1, column: 14 }
            }
        },
        range: [0, 14],
        loc: {
            start: { line: 1, column: 0 },
            end: { line: 1, column: 14 }
        }
    },
    'x = (0) ? 1 : 2' : {
        type: 'ExpressionStatement',
        expression: {
            type: 'AssignmentExpression',
            operator: '=',
            left: {
                type: 'Identifier',
                name: 'x',
                range: [ 0, 1 ],
                loc: {
                    start: { line: 1, column: 0 },
                    end: { line: 1, column: 1 }
                }
            },
            right: {
                type: 'ConditionalExpression',
                test: {
                    type: 'Literal',
                    value: 0,
                    raw: '0',
                    range: [ 5, 6 ],
                    loc: { start: { line: 1, column: 5 }, end: { line: 1, column: 6 } }
                },
                consequent: {
                    type: 'Literal',
                    value: 1,
                    raw: '1',
                    range: [ 10, 11 ],
                    loc: { start: { line: 1, column: 10 }, end: { line: 1, column: 11 } }
                },
                alternate: {
                    type: 'Literal',
                    value: 2,
                    raw: '2',
                    range: [ 14, 15 ],
                    loc: { start: { line: 1, column: 14 }, end: { line: 1, column: 15 } }
                },
                range: [ 4, 15 ],
                loc: { start: { line: 1, column: 4 }, end: { line: 1, column: 15 } }
            },
            range: [ 0, 15 ],
            loc: { start: { line: 1, column: 0 }, end: { line: 1, column: 15 } }
        },
        range: [ 0, 15 ],
        loc: { start: { line: 1, column: 0 }, end: { line: 1, column: 15 } }
    }
},

'Assignment Operators': {

    'x = 42': {
        type: 'ExpressionStatement',
        expression: {
            type: 'AssignmentExpression',
            operator: '=',
            left: {
                type: 'Identifier',
                name: 'x',
                range: [0, 1],
                loc: {
                    start: { line: 1, column: 0 },
                    end: { line: 1, column: 1 }
                }
            },
            right: {
                type: 'Literal',
                value: 42,
                raw: '42',
                range: [4, 6],
                loc: {
                    start: { line: 1, column: 4 },
                    end: { line: 1, column: 6 }
                }
            },
            range: [0, 6],
            loc: {
                start: { line: 1, column: 0 },
                end: { line: 1, column: 6 }
            }
        },
        range: [0, 6],
        loc: {
            start: { line: 1, column: 0 },
            end: { line: 1, column: 6 }
        }
    },

    'eval = 42': {
        type: 'ExpressionStatement',
        expression: {
            type: 'AssignmentExpression',
            operator: '=',
            left: {
                type: 'Identifier',
                name: 'eval',
                range: [0, 4],
                loc: {
                    start: { line: 1, column: 0 },
                    end: { line: 1, column: 4 }
                }
            },
            right: {
                type: 'Literal',
                value: 42,
                raw: '42',
                range: [7, 9],
                loc: {
                    start: { line: 1, column: 7 },
                    end: { line: 1, column: 9 }
                }
            },
            range: [0, 9],
            loc: {
                start: { line: 1, column: 0 },
                end: { line: 1, column: 9 }
            }
        },
        range: [0, 9],
        loc: {
            start: { line: 1, column: 0 },
            end: { line: 1, column: 9 }
        }
    },

    'arguments = 42': {
        type: 'ExpressionStatement',
        expression: {
            type: 'AssignmentExpression',
            operator: '=',
            left: {
                type: 'Identifier',
                name: 'arguments',
                range: [0, 9],
                loc: {
                    start: { line: 1, column: 0 },
                    end: { line: 1, column: 9 }
                }
            },
            right: {
                type: 'Literal',
                value: 42,
                raw: '42',
                range: [12, 14],
                loc: {
                    start: { line: 1, column: 12 },
                    end: { line: 1, column: 14 }
                }
            },
            range: [0, 14],
            loc: {
                start: { line: 1, column: 0 },
                end: { line: 1, column: 14 }
            }
        },
        range: [0, 14],
        loc: {
            start: { line: 1, column: 0 },
            end: { line: 1, column: 14 }
        }
    },

    'x *= 42': {
        type: 'ExpressionStatement',
        expression: {
            type: 'AssignmentExpression',
            operator: '*=',
            left: {
                type: 'Identifier',
                name: 'x',
                range: [0, 1],
                loc: {
                    start: { line: 1, column: 0 },
                    end: { line: 1, column: 1 }
                }
            },
            right: {
                type: 'Literal',
                value: 42,
                raw: '42',
                range: [5, 7],
                loc: {
                    start: { line: 1, column: 5 },
                    end: { line: 1, column: 7 }
                }
            },
            range: [0, 7],
            loc: {
                start: { line: 1, column: 0 },
                end: { line: 1, column: 7 }
            }
        },
        range: [0, 7],
        loc: {
            start: { line: 1, column: 0 },
            end: { line: 1, column: 7 }
        }
    },

    'x /= 42': {
        type: 'ExpressionStatement',
        expression: {
            type: 'AssignmentExpression',
            operator: '/=',
            left: {
                type: 'Identifier',
                name: 'x',
                range: [0, 1],
                loc: {
                    start: { line: 1, column: 0 },
                    end: { line: 1, column: 1 }
                }
            },
            right: {
                type: 'Literal',
                value: 42,
                raw: '42',
                range: [5, 7],
                loc: {
                    start: { line: 1, column: 5 },
                    end: { line: 1, column: 7 }
                }
            },
            range: [0, 7],
            loc: {
                start: { line: 1, column: 0 },
                end: { line: 1, column: 7 }
            }
        },
        range: [0, 7],
        loc: {
            start: { line: 1, column: 0 },
            end: { line: 1, column: 7 }
        }
    },

    'x %= 42': {
        type: 'ExpressionStatement',
        expression: {
            type: 'AssignmentExpression',
            operator: '%=',
            left: {
                type: 'Identifier',
                name: 'x',
                range: [0, 1],
                loc: {
                    start: { line: 1, column: 0 },
                    end: { line: 1, column: 1 }
                }
            },
            right: {
                type: 'Literal',
                value: 42,
                raw: '42',
                range: [5, 7],
                loc: {
                    start: { line: 1, column: 5 },
                    end: { line: 1, column: 7 }
                }
            },
            range: [0, 7],
            loc: {
                start: { line: 1, column: 0 },
                end: { line: 1, column: 7 }
            }
        },
        range: [0, 7],
        loc: {
            start: { line: 1, column: 0 },
            end: { line: 1, column: 7 }
        }
    },

    'x += 42': {
        type: 'ExpressionStatement',
        expression: {
            type: 'AssignmentExpression',
            operator: '+=',
            left: {
                type: 'Identifier',
                name: 'x',
                range: [0, 1],
                loc: {
                    start: { line: 1, column: 0 },
                    end: { line: 1, column: 1 }
                }
            },
            right: {
                type: 'Literal',
                value: 42,
                raw: '42',
                range: [5, 7],
                loc: {
                    start: { line: 1, column: 5 },
                    end: { line: 1, column: 7 }
                }
            },
            range: [0, 7],
            loc: {
                start: { line: 1, column: 0 },
                end: { line: 1, column: 7 }
            }
        },
        range: [0, 7],
        loc: {
            start: { line: 1, column: 0 },
            end: { line: 1, column: 7 }
        }
    },

    'x -= 42': {
        type: 'ExpressionStatement',
        expression: {
            type: 'AssignmentExpression',
            operator: '-=',
            left: {
                type: 'Identifier',
                name: 'x',
                range: [0, 1],
                loc: {
                    start: { line: 1, column: 0 },
                    end: { line: 1, column: 1 }
                }
            },
            right: {
                type: 'Literal',
                value: 42,
                raw: '42',
                range: [5, 7],
                loc: {
                    start: { line: 1, column: 5 },
                    end: { line: 1, column: 7 }
                }
            },
            range: [0, 7],
            loc: {
                start: { line: 1, column: 0 },
                end: { line: 1, column: 7 }
            }
        },
        range: [0, 7],
        loc: {
            start: { line: 1, column: 0 },
            end: { line: 1, column: 7 }
        }
    },

    'x <<= 42': {
        type: 'ExpressionStatement',
        expression: {
            type: 'AssignmentExpression',
            operator: '<<=',
            left: {
                type: 'Identifier',
                name: 'x',
                range: [0, 1],
                loc: {
                    start: { line: 1, column: 0 },
                    end: { line: 1, column: 1 }
                }
            },
            right: {
                type: 'Literal',
                value: 42,
                raw: '42',
                range: [6, 8],
                loc: {
                    start: { line: 1, column: 6 },
                    end: { line: 1, column: 8 }
                }
            },
            range: [0, 8],
            loc: {
                start: { line: 1, column: 0 },
                end: { line: 1, column: 8 }
            }
        },
        range: [0, 8],
        loc: {
            start: { line: 1, column: 0 },
            end: { line: 1, column: 8 }
        }
    },

    'x >>= 42': {
        type: 'ExpressionStatement',
        expression: {
            type: 'AssignmentExpression',
            operator: '>>=',
            left: {
                type: 'Identifier',
                name: 'x',
                range: [0, 1],
                loc: {
                    start: { line: 1, column: 0 },
                    end: { line: 1, column: 1 }
                }
            },
            right: {
                type: 'Literal',
                value: 42,
                raw: '42',
                range: [6, 8],
                loc: {
                    start: { line: 1, column: 6 },
                    end: { line: 1, column: 8 }
                }
            },
            range: [0, 8],
            loc: {
                start: { line: 1, column: 0 },
                end: { line: 1, column: 8 }
            }
        },
        range: [0, 8],
        loc: {
            start: { line: 1, column: 0 },
            end: { line: 1, column: 8 }
        }
    },

    'x >>>= 42': {
        type: 'ExpressionStatement',
        expression: {
            type: 'AssignmentExpression',
            operator: '>>>=',
            left: {
                type: 'Identifier',
                name: 'x',
                range: [0, 1],
                loc: {
                    start: { line: 1, column: 0 },
                    end: { line: 1, column: 1 }
                }
            },
            right: {
                type: 'Literal',
                value: 42,
                raw: '42',
                range: [7, 9],
                loc: {
                    start: { line: 1, column: 7 },
                    end: { line: 1, column: 9 }
                }
            },
            range: [0, 9],
            loc: {
                start: { line: 1, column: 0 },
                end: { line: 1, column: 9 }
            }
        },
        range: [0, 9],
        loc: {
            start: { line: 1, column: 0 },
            end: { line: 1, column: 9 }
        }
    },

    'x &= 42': {
        type: 'ExpressionStatement',
        expression: {
            type: 'AssignmentExpression',
            operator: '&=',
            left: {
                type: 'Identifier',
                name: 'x',
                range: [0, 1],
                loc: {
                    start: { line: 1, column: 0 },
                    end: { line: 1, column: 1 }
                }
            },
            right: {
                type: 'Literal',
                value: 42,
                raw: '42',
                range: [5, 7],
                loc: {
                    start: { line: 1, column: 5 },
                    end: { line: 1, column: 7 }
                }
            },
            range: [0, 7],
            loc: {
                start: { line: 1, column: 0 },
                end: { line: 1, column: 7 }
            }
        },
        range: [0, 7],
        loc: {
            start: { line: 1, column: 0 },
            end: { line: 1, column: 7 }
        }
    },

    'x ^= 42': {
        type: 'ExpressionStatement',
        expression: {
            type: 'AssignmentExpression',
            operator: '^=',
            left: {
                type: 'Identifier',
                name: 'x',
                range: [0, 1],
                loc: {
                    start: { line: 1, column: 0 },
                    end: { line: 1, column: 1 }
                }
            },
            right: {
                type: 'Literal',
                value: 42,
                raw: '42',
                range: [5, 7],
                loc: {
                    start: { line: 1, column: 5 },
                    end: { line: 1, column: 7 }
                }
            },
            range: [0, 7],
            loc: {
                start: { line: 1, column: 0 },
                end: { line: 1, column: 7 }
            }
        },
        range: [0, 7],
        loc: {
            start: { line: 1, column: 0 },
            end: { line: 1, column: 7 }
        }
    },

    'x |= 42': {
        type: 'ExpressionStatement',
        expression: {
            type: 'AssignmentExpression',
            operator: '|=',
            left: {
                type: 'Identifier',
                name: 'x',
                range: [0, 1],
                loc: {
                    start: { line: 1, column: 0 },
                    end: { line: 1, column: 1 }
                }
            },
            right: {
                type: 'Literal',
                value: 42,
                raw: '42',
                range: [5, 7],
                loc: {
                    start: { line: 1, column: 5 },
                    end: { line: 1, column: 7 }
                }
            },
            range: [0, 7],
            loc: {
                start: { line: 1, column: 0 },
                end: { line: 1, column: 7 }
            }
        },
        range: [0, 7],
        loc: {
            start: { line: 1, column: 0 },
            end: { line: 1, column: 7 }
        }
    }

},

'Complex Expression': {

    'a || b && c | d ^ e & f == g < h >>> i + j * k': {
        type: 'ExpressionStatement',
        expression: {
            type: 'LogicalExpression',
            operator: '||',
            left: {
                type: 'Identifier',
                name: 'a',
                range: [0, 1],
                loc: {
                    start: { line: 1, column: 0 },
                    end: { line: 1, column: 1 }
                }
            },
            right: {
                type: 'LogicalExpression',
                operator: '&&',
                left: {
                    type: 'Identifier',
                    name: 'b',
                    range: [5, 6],
                    loc: {
                        start: { line: 1, column: 5 },
                        end: { line: 1, column: 6 }
                    }
                },
                right: {
                    type: 'BinaryExpression',
                    operator: '|',
                    left: {
                        type: 'Identifier',
                        name: 'c',
                        range: [10, 11],
                        loc: {
                            start: { line: 1, column: 10 },
                            end: { line: 1, column: 11 }
                        }
                    },
                    right: {
                        type: 'BinaryExpression',
                        operator: '^',
                        left: {
                            type: 'Identifier',
                            name: 'd',
                            range: [14, 15],
                            loc: {
                                start: { line: 1, column: 14 },
                                end: { line: 1, column: 15 }
                            }
                        },
                        right: {
                            type: 'BinaryExpression',
                            operator: '&',
                            left: {
                                type: 'Identifier',
                                name: 'e',
                                range: [18, 19],
                                loc: {
                                    start: { line: 1, column: 18 },
                                    end: { line: 1, column: 19 }
                                }
                            },
                            right: {
                                type: 'BinaryExpression',
                                operator: '==',
                                left: {
                                    type: 'Identifier',
                                    name: 'f',
                                    range: [22, 23],
                                    loc: {
                                        start: { line: 1, column: 22 },
                                        end: { line: 1, column: 23 }
                                    }
                                },
                                right: {
                                    type: 'BinaryExpression',
                                    operator: '<',
                                    left: {
                                        type: 'Identifier',
                                        name: 'g',
                                        range: [27, 28],
                                        loc: {
                                            start: { line: 1, column: 27 },
                                            end: { line: 1, column: 28 }
                                        }
                                    },
                                    right: {
                                        type: 'BinaryExpression',
                                        operator: '>>>',
                                        left: {
                                            type: 'Identifier',
                                            name: 'h',
                                            range: [31, 32],
                                            loc: {
                                                start: { line: 1, column: 31 },
                                                end: { line: 1, column: 32 }
                                            }
                                        },
                                        right: {
                                            type: 'BinaryExpression',
                                            operator: '+',
                                            left: {
                                                type: 'Identifier',
                                                name: 'i',
                                                range: [37, 38],
                                                loc: {
                                                    start: { line: 1, column: 37 },
                                                    end: { line: 1, column: 38 }
                                                }
                                            },
                                            right: {
                                                type: 'BinaryExpression',
                                                operator: '*',
                                                left: {
                                                    type: 'Identifier',
                                                    name: 'j',
                                                    range: [41, 42],
                                                    loc: {
                                                        start: { line: 1, column: 41 },
                                                        end: { line: 1, column: 42 }
                                                    }
                                                },
                                                right: {
                                                    type: 'Identifier',
                                                    name: 'k',
                                                    range: [45, 46],
                                                    loc: {
                                                        start: { line: 1, column: 45 },
                                                        end: { line: 1, column: 46 }
                                                    }
                                                },
                                                range: [41, 46],
                                                loc: {
                                                    start: { line: 1, column: 41 },
                                                    end: { line: 1, column: 46 }
                                                }
                                            },
                                            range: [37, 46],
                                            loc: {
                                                start: { line: 1, column: 37 },
                                                end: { line: 1, column: 46 }
                                            }
                                        },
                                        range: [31, 46],
                                        loc: {
                                            start: { line: 1, column: 31 },
                                            end: { line: 1, column: 46 }
                                        }
                                    },
                                    range: [27, 46],
                                    loc: {
                                        start: { line: 1, column: 27 },
                                        end: { line: 1, column: 46 }
                                    }
                                },
                                range: [22, 46],
                                loc: {
                                    start: { line: 1, column: 22 },
                                    end: { line: 1, column: 46 }
                                }
                            },
                            range: [18, 46],
                            loc: {
                                start: { line: 1, column: 18 },
                                end: { line: 1, column: 46 }
                            }
                        },
                        range: [14, 46],
                        loc: {
                            start: { line: 1, column: 14 },
                            end: { line: 1, column: 46 }
                        }
                    },
                    range: [10, 46],
                    loc: {
                        start: { line: 1, column: 10 },
                        end: { line: 1, column: 46 }
                    }
                },
                range: [5, 46],
                loc: {
                    start: { line: 1, column: 5 },
                    end: { line: 1, column: 46 }
                }
            },
            range: [0, 46],
            loc: {
                start: { line: 1, column: 0 },
                end: { line: 1, column: 46 }
            }
        },
        range: [0, 46],
        loc: {
            start: { line: 1, column: 0 },
            end: { line: 1, column: 46 }
        }
    }

},

'Block': {

    '{ foo }': {
        type: 'BlockStatement',
        body: [{
            type: 'ExpressionStatement',
            expression: {
                type: 'Identifier',
                name: 'foo',
                range: [2, 5],
                loc: {
                    start: { line: 1, column: 2 },
                    end: { line: 1, column: 5 }
                }
            },
            range: [2, 6],
            loc: {
                start: { line: 1, column: 2 },
                end: { line: 1, column: 6 }
            }
        }],
        range: [0, 7],
        loc: {
            start: { line: 1, column: 0 },
            end: { line: 1, column: 7 }
        }
    },

    '{ doThis(); doThat(); }': {
        type: 'BlockStatement',
        body: [{
            type: 'ExpressionStatement',
            expression: {
                type: 'CallExpression',
                callee: {
                    type: 'Identifier',
                    name: 'doThis',
                    range: [2, 8],
                    loc: {
                        start: { line: 1, column: 2 },
                        end: { line: 1, column: 8 }
                    }
                },
                'arguments': [],
                range: [2, 10],
                loc: {
                    start: { line: 1, column: 2 },
                    end: { line: 1, column: 10 }
                }
            },
            range: [2, 11],
            loc: {
                start: { line: 1, column: 2 },
                end: { line: 1, column: 11 }
            }
        }, {
            type: 'ExpressionStatement',
            expression: {
                type: 'CallExpression',
                callee: {
                    type: 'Identifier',
                    name: 'doThat',
                    range: [12, 18],
                    loc: {
                        start: { line: 1, column: 12 },
                        end: { line: 1, column: 18 }
                    }
                },
                'arguments': [],
                range: [12, 20],
                loc: {
                    start: { line: 1, column: 12 },
                    end: { line: 1, column: 20 }
                }
            },
            range: [12, 21],
            loc: {
                start: { line: 1, column: 12 },
                end: { line: 1, column: 21 }
            }
        }],
        range: [0, 23],
        loc: {
            start: { line: 1, column: 0 },
            end: { line: 1, column: 23 }
        }
    },

    '{}': {
        type: 'BlockStatement',
        body: [],
        range: [0, 2],
        loc: {
            start: { line: 1, column: 0 },
            end: { line: 1, column: 2 }
        }
    }

},

'Variable Statement': {

    'var x': {
        type: 'VariableDeclaration',
        declarations: [{
            type: 'VariableDeclarator',
            id: {
                type: 'Identifier',
                name: 'x',
                range: [4, 5],
                loc: {
                    start: { line: 1, column: 4 },
                    end: { line: 1, column: 5 }
                }
            },
            init: null,
            range: [4, 5],
            loc: {
                start: { line: 1, column: 4 },
                end: { line: 1, column: 5 }
            }
        }],
        kind: 'var',
        range: [0, 5],
        loc: {
            start: { line: 1, column: 0 },
            end: { line: 1, column: 5 }
        }
    },

    'var x, y;': {
        type: 'VariableDeclaration',
        declarations: [{
            type: 'VariableDeclarator',
            id: {
                type: 'Identifier',
                name: 'x',
                range: [4, 5],
                loc: {
                    start: { line: 1, column: 4 },
                    end: { line: 1, column: 5 }
                }
            },
            init: null,
            range: [4, 5],
            loc: {
                start: { line: 1, column: 4 },
                end: { line: 1, column: 5 }
            }
        }, {
            type: 'VariableDeclarator',
            id: {
                type: 'Identifier',
                name: 'y',
                range: [7, 8],
                loc: {
                    start: { line: 1, column: 7 },
                    end: { line: 1, column: 8 }
                }
            },
            init: null,
            range: [7, 8],
            loc: {
                start: { line: 1, column: 7 },
                end: { line: 1, column: 8 }
            }
        }],
        kind: 'var',
        range: [0, 9],
        loc: {
            start: { line: 1, column: 0 },
            end: { line: 1, column: 9 }
        }
    },

    'var x = 42': {
        type: 'VariableDeclaration',
        declarations: [{
            type: 'VariableDeclarator',
            id: {
                type: 'Identifier',
                name: 'x',
                range: [4, 5],
                loc: {
                    start: { line: 1, column: 4 },
                    end: { line: 1, column: 5 }
                }
            },
            init: {
                type: 'Literal',
                value: 42,
                raw: '42',
                range: [8, 10],
                loc: {
                    start: { line: 1, column: 8 },
                    end: { line: 1, column: 10 }
                }
            },
            range: [4, 10],
            loc: {
                start: { line: 1, column: 4 },
                end: { line: 1, column: 10 }
            }
        }],
        kind: 'var',
        range: [0, 10],
        loc: {
            start: { line: 1, column: 0 },
            end: { line: 1, column: 10 }
        }
    },

    'var eval = 42, arguments = 42': {
        type: 'VariableDeclaration',
        declarations: [{
            type: 'VariableDeclarator',
            id: {
                type: 'Identifier',
                name: 'eval',
                range: [4, 8],
                loc: {
                    start: { line: 1, column: 4 },
                    end: { line: 1, column: 8 }
                }
            },
            init: {
                type: 'Literal',
                value: 42,
                raw: '42',
                range: [11, 13],
                loc: {
                    start: { line: 1, column: 11 },
                    end: { line: 1, column: 13 }
                }
            },
            range: [4, 13],
            loc: {
                start: { line: 1, column: 4 },
                end: { line: 1, column: 13 }
            }
        }, {
            type: 'VariableDeclarator',
            id: {
                type: 'Identifier',
                name: 'arguments',
                range: [15, 24],
                loc: {
                    start: { line: 1, column: 15 },
                    end: { line: 1, column: 24 }
                }
            },
            init: {
                type: 'Literal',
                value: 42,
                raw: '42',
                range: [27, 29],
                loc: {
                    start: { line: 1, column: 27 },
                    end: { line: 1, column: 29 }
                }
            },
            range: [15, 29],
            loc: {
                start: { line: 1, column: 15 },
                end: { line: 1, column: 29 }
            }
        }],
        kind: 'var',
        range: [0, 29],
        loc: {
            start: { line: 1, column: 0 },
            end: { line: 1, column: 29 }
        }
    },

    'var x = 14, y = 3, z = 1977': {
        type: 'VariableDeclaration',
        declarations: [{
            type: 'VariableDeclarator',
            id: {
                type: 'Identifier',
                name: 'x',
                range: [4, 5],
                loc: {
                    start: { line: 1, column: 4 },
                    end: { line: 1, column: 5 }
                }
            },
            init: {
                type: 'Literal',
                value: 14,
                raw: '14',
                range: [8, 10],
                loc: {
                    start: { line: 1, column: 8 },
                    end: { line: 1, column: 10 }
                }
            },
            range: [4, 10],
            loc: {
                start: { line: 1, column: 4 },
                end: { line: 1, column: 10 }
            }
        }, {
            type: 'VariableDeclarator',
            id: {
                type: 'Identifier',
                name: 'y',
                range: [12, 13],
                loc: {
                    start: { line: 1, column: 12 },
                    end: { line: 1, column: 13 }
                }
            },
            init: {
                type: 'Literal',
                value: 3,
                raw: '3',
                range: [16, 17],
                loc: {
                    start: { line: 1, column: 16 },
                    end: { line: 1, column: 17 }
                }
            },
            range: [12, 17],
            loc: {
                start: { line: 1, column: 12 },
                end: { line: 1, column: 17 }
            }
        }, {
            type: 'VariableDeclarator',
            id: {
                type: 'Identifier',
                name: 'z',
                range: [19, 20],
                loc: {
                    start: { line: 1, column: 19 },
                    end: { line: 1, column: 20 }
                }
            },
            init: {
                type: 'Literal',
                value: 1977,
                raw: '1977',
                range: [23, 27],
                loc: {
                    start: { line: 1, column: 23 },
                    end: { line: 1, column: 27 }
                }
            },
            range: [19, 27],
            loc: {
                start: { line: 1, column: 19 },
                end: { line: 1, column: 27 }
            }
        }],
        kind: 'var',
        range: [0, 27],
        loc: {
            start: { line: 1, column: 0 },
            end: { line: 1, column: 27 }
        }
    },

    'var implements, interface, package': {
        type: 'VariableDeclaration',
        declarations: [{
            type: 'VariableDeclarator',
            id: {
                type: 'Identifier',
                name: 'implements',
                range: [4, 14],
                loc: {
                    start: { line: 1, column: 4 },
                    end: { line: 1, column: 14 }
                }
            },
            init: null,
            range: [4, 14],
            loc: {
                start: { line: 1, column: 4 },
                end: { line: 1, column: 14 }
            }
        }, {
            type: 'VariableDeclarator',
            id: {
                type: 'Identifier',
                name: 'interface',
                range: [16, 25],
                loc: {
                    start: { line: 1, column: 16 },
                    end: { line: 1, column: 25 }
                }
            },
            init: null,
            range: [16, 25],
            loc: {
                start: { line: 1, column: 16 },
                end: { line: 1, column: 25 }
            }
        }, {
            type: 'VariableDeclarator',
            id: {
                type: 'Identifier',
                name: 'package',
                range: [27, 34],
                loc: {
                    start: { line: 1, column: 27 },
                    end: { line: 1, column: 34 }
                }
            },
            init: null,
            range: [27, 34],
            loc: {
                start: { line: 1, column: 27 },
                end: { line: 1, column: 34 }
            }
        }],
        kind: 'var',
        range: [0, 34],
        loc: {
            start: { line: 1, column: 0 },
            end: { line: 1, column: 34 }
        }
    },

    'var private, protected, public, static': {
        type: 'VariableDeclaration',
        declarations: [{
            type: 'VariableDeclarator',
            id: {
                type: 'Identifier',
                name: 'private',
                range: [4, 11],
                loc: {
                    start: { line: 1, column: 4 },
                    end: { line: 1, column: 11 }
                }
            },
            init: null,
            range: [4, 11],
            loc: {
                start: { line: 1, column: 4 },
                end: { line: 1, column: 11 }
            }
        }, {
            type: 'VariableDeclarator',
            id: {
                type: 'Identifier',
                name: 'protected',
                range: [13, 22],
                loc: {
                    start: { line: 1, column: 13 },
                    end: { line: 1, column: 22 }
                }
            },
            init: null,
            range: [13, 22],
            loc: {
                start: { line: 1, column: 13 },
                end: { line: 1, column: 22 }
            }
        }, {
            type: 'VariableDeclarator',
            id: {
                type: 'Identifier',
                name: 'public',
                range: [24, 30],
                loc: {
                    start: { line: 1, column: 24 },
                    end: { line: 1, column: 30 }
                }
            },
            init: null,
            range: [24, 30],
            loc: {
                start: { line: 1, column: 24 },
                end: { line: 1, column: 30 }
            }
        }, {
            type: 'VariableDeclarator',
            id: {
                type: 'Identifier',
                name: 'static',
                range: [32, 38],
                loc: {
                    start: { line: 1, column: 32 },
                    end: { line: 1, column: 38 }
                }
            },
            init: null,
            range: [32, 38],
            loc: {
                start: { line: 1, column: 32 },
                end: { line: 1, column: 38 }
            }
        }],
        kind: 'var',
        range: [0, 38],
        loc: {
            start: { line: 1, column: 0 },
            end: { line: 1, column: 38 }
        }
    }

},

'Let Statement': {

    'let x': {
        type: 'VariableDeclaration',
        declarations: [{
            type: 'VariableDeclarator',
            id: {
                type: 'Identifier',
                name: 'x',
                range: [4, 5],
                loc: {
                    start: { line: 1, column: 4 },
                    end: { line: 1, column: 5 }
                }
            },
            init: null,
            range: [4, 5],
            loc: {
                start: { line: 1, column: 4 },
                end: { line: 1, column: 5 }
            }
        }],
        kind: 'let',
        range: [0, 5],
        loc: {
            start: { line: 1, column: 0 },
            end: { line: 1, column: 5 }
        }
    },

    '{ let x }': {
        type: 'BlockStatement',
        body: [{
            type: 'VariableDeclaration',
            declarations: [{
                type: 'VariableDeclarator',
                id: {
                    type: 'Identifier',
                    name: 'x',
                    range: [6, 7],
                    loc: {
                        start: { line: 1, column: 6 },
                        end: { line: 1, column: 7 }
                    }
                },
                init: null,
                range: [6, 7],
                loc: {
                    start: { line: 1, column: 6 },
                    end: { line: 1, column: 7 }
                }
            }],
            kind: 'let',
            range: [2, 8],
            loc: {
                start: { line: 1, column: 2 },
                end: { line: 1, column: 8 }
            }
        }],
        range: [0, 9],
        loc: {
            start: { line: 1, column: 0 },
            end: { line: 1, column: 9 }
        }
    },

    '{ let x = 42 }': {
        type: 'BlockStatement',
        body: [{
            type: 'VariableDeclaration',
            declarations: [{
                type: 'VariableDeclarator',
                id: {
                    type: 'Identifier',
                    name: 'x',
                    range: [6, 7],
                    loc: {
                        start: { line: 1, column: 6 },
                        end: { line: 1, column: 7 }
                    }
                },
                init: {
                    type: 'Literal',
                    value: 42,
                    raw: '42',
                    range: [10, 12],
                    loc: {
                        start: { line: 1, column: 10 },
                        end: { line: 1, column: 12 }
                    }
                },
                range: [6, 12],
                loc: {
                    start: { line: 1, column: 6 },
                    end: { line: 1, column: 12 }
                }
            }],
            kind: 'let',
            range: [2, 13],
            loc: {
                start: { line: 1, column: 2 },
                end: { line: 1, column: 13 }
            }
        }],
        range: [0, 14],
        loc: {
            start: { line: 1, column: 0 },
            end: { line: 1, column: 14 }
        }
    },

    '{ let x = 14, y = 3, z = 1977 }': {
        type: 'BlockStatement',
        body: [{
            type: 'VariableDeclaration',
            declarations: [{
                type: 'VariableDeclarator',
                id: {
                    type: 'Identifier',
                    name: 'x',
                    range: [6, 7],
                    loc: {
                        start: { line: 1, column: 6 },
                        end: { line: 1, column: 7 }
                    }
                },
                init: {
                    type: 'Literal',
                    value: 14,
                    raw: '14',
                    range: [10, 12],
                    loc: {
                        start: { line: 1, column: 10 },
                        end: { line: 1, column: 12 }
                    }
                },
                range: [6, 12],
                loc: {
                    start: { line: 1, column: 6 },
                    end: { line: 1, column: 12 }
                }
            }, {
                type: 'VariableDeclarator',
                id: {
                    type: 'Identifier',
                    name: 'y',
                    range: [14, 15],
                    loc: {
                        start: { line: 1, column: 14 },
                        end: { line: 1, column: 15 }
                    }
                },
                init: {
                    type: 'Literal',
                    value: 3,
                    raw: '3',
                    range: [18, 19],
                    loc: {
                        start: { line: 1, column: 18 },
                        end: { line: 1, column: 19 }
                    }
                },
                range: [14, 19],
                loc: {
                    start: { line: 1, column: 14 },
                    end: { line: 1, column: 19 }
                }
            }, {
                type: 'VariableDeclarator',
                id: {
                    type: 'Identifier',
                    name: 'z',
                    range: [21, 22],
                    loc: {
                        start: { line: 1, column: 21 },
                        end: { line: 1, column: 22 }
                    }
                },
                init: {
                    type: 'Literal',
                    value: 1977,
                    raw: '1977',
                    range: [25, 29],
                    loc: {
                        start: { line: 1, column: 25 },
                        end: { line: 1, column: 29 }
                    }
                },
                range: [21, 29],
                loc: {
                    start: { line: 1, column: 21 },
                    end: { line: 1, column: 29 }
                }
            }],
            kind: 'let',
            range: [2, 30],
            loc: {
                start: { line: 1, column: 2 },
                end: { line: 1, column: 30 }
            }
        }],
        range: [0, 31],
        loc: {
            start: { line: 1, column: 0 },
            end: { line: 1, column: 31 }
        }
    }

},

'Const Statement': {

    'const x = 42': {
        type: 'VariableDeclaration',
        declarations: [{
            type: 'VariableDeclarator',
            id: {
                type: 'Identifier',
                name: 'x',
                range: [6, 7],
                loc: {
                    start: { line: 1, column: 6 },
                    end: { line: 1, column: 7 }
                }
            },
            init: {
                type: 'Literal',
                value: 42,
                raw: '42',
                range: [10, 12],
                loc: {
                    start: { line: 1, column: 10 },
                    end: { line: 1, column: 12 }
                }
            },
            range: [6, 12],
            loc: {
                start: { line: 1, column: 6 },
                end: { line: 1, column: 12 }
            }
        }],
        kind: 'const',
        range: [0, 12],
        loc: {
            start: { line: 1, column: 0 },
            end: { line: 1, column: 12 }
        }
    },

    '{ const x = 42 }': {
        type: 'BlockStatement',
        body: [{
            type: 'VariableDeclaration',
            declarations: [{
                type: 'VariableDeclarator',
                id: {
                    type: 'Identifier',
                    name: 'x',
                    range: [8, 9],
                    loc: {
                        start: { line: 1, column: 8 },
                        end: { line: 1, column: 9 }
                    }
                },
                init: {
                    type: 'Literal',
                    value: 42,
                    raw: '42',
                    range: [12, 14],
                    loc: {
                        start: { line: 1, column: 12 },
                        end: { line: 1, column: 14 }
                    }
                },
                range: [8, 14],
                loc: {
                    start: { line: 1, column: 8 },
                    end: { line: 1, column: 14 }
                }
            }],
            kind: 'const',
            range: [2, 15],
            loc: {
                start: { line: 1, column: 2 },
                end: { line: 1, column: 15 }
            }
        }],
        range: [0, 16],
        loc: {
            start: { line: 1, column: 0 },
            end: { line: 1, column: 16 }
        }
    },

    '{ const x = 14, y = 3, z = 1977 }': {
        type: 'BlockStatement',
        body: [{
            type: 'VariableDeclaration',
            declarations: [{
                type: 'VariableDeclarator',
                id: {
                    type: 'Identifier',
                    name: 'x',
                    range: [8, 9],
                    loc: {
                        start: { line: 1, column: 8 },
                        end: { line: 1, column: 9 }
                    }
                },
                init: {
                    type: 'Literal',
                    value: 14,
                    raw: '14',
                    range: [12, 14],
                    loc: {
                        start: { line: 1, column: 12 },
                        end: { line: 1, column: 14 }
                    }
                },
                range: [8, 14],
                loc: {
                    start: { line: 1, column: 8 },
                    end: { line: 1, column: 14 }
                }
            }, {
                type: 'VariableDeclarator',
                id: {
                    type: 'Identifier',
                    name: 'y',
                    range: [16, 17],
                    loc: {
                        start: { line: 1, column: 16 },
                        end: { line: 1, column: 17 }
                    }
                },
                init: {
                    type: 'Literal',
                    value: 3,
                    raw: '3',
                    range: [20, 21],
                    loc: {
                        start: { line: 1, column: 20 },
                        end: { line: 1, column: 21 }
                    }
                },
                range: [16, 21],
                loc: {
                    start: { line: 1, column: 16 },
                    end: { line: 1, column: 21 }
                }
            }, {
                type: 'VariableDeclarator',
                id: {
                    type: 'Identifier',
                    name: 'z',
                    range: [23, 24],
                    loc: {
                        start: { line: 1, column: 23 },
                        end: { line: 1, column: 24 }
                    }
                },
                init: {
                    type: 'Literal',
                    value: 1977,
                    raw: '1977',
                    range: [27, 31],
                    loc: {
                        start: { line: 1, column: 27 },
                        end: { line: 1, column: 31 }
                    }
                },
                range: [23, 31],
                loc: {
                    start: { line: 1, column: 23 },
                    end: { line: 1, column: 31 }
                }
            }],
            kind: 'const',
            range: [2, 32],
            loc: {
                start: { line: 1, column: 2 },
                end: { line: 1, column: 32 }
            }
        }],
        range: [0, 33],
        loc: {
            start: { line: 1, column: 0 },
            end: { line: 1, column: 33 }
        }
    }

},

'Empty Statement': {

    ';': {
        type: 'EmptyStatement',
        range: [0, 1],
        loc: {
            start: { line: 1, column: 0 },
            end: { line: 1, column: 1 }
        }
    }

},

'Expression Statement': {

    'x': {
        type: 'ExpressionStatement',
        expression: {
            type: 'Identifier',
            name: 'x',
            range: [0, 1],
            loc: {
                start: { line: 1, column: 0 },
                end: { line: 1, column: 1 }
            }
        },
        range: [0, 1],
        loc: {
            start: { line: 1, column: 0 },
            end: { line: 1, column: 1 }
        }
    },

    'x, y': {
        type: 'ExpressionStatement',
        expression: {
            type: 'SequenceExpression',
            expressions: [{
                type: 'Identifier',
                name: 'x',
                range: [0, 1],
                loc: {
                    start: { line: 1, column: 0 },
                    end: { line: 1, column: 1 }
                }
            }, {
                type: 'Identifier',
                name: 'y',
                range: [3, 4],
                loc: {
                    start: { line: 1, column: 3 },
                    end: { line: 1, column: 4 }
                }
            }],
            range: [0, 4],
            loc: {
                start: { line: 1, column: 0 },
                end: { line: 1, column: 4 }
            }
        },
        range: [0, 4],
        loc: {
            start: { line: 1, column: 0 },
            end: { line: 1, column: 4 }
        }
    },

    '\\u0061': {
        type: 'ExpressionStatement',
        expression: {
            type: 'Identifier',
            name: 'a',
            range: [0, 6],
            loc: {
                start: { line: 1, column: 0 },
                end: { line: 1, column: 6 }
            }
        },
        range: [0, 6],
        loc: {
            start: { line: 1, column: 0 },
            end: { line: 1, column: 6 }
        }
    },

    'a\\u0061': {
        type: 'ExpressionStatement',
        expression: {
            type: 'Identifier',
            name: 'aa',
            range: [0, 7],
            loc: {
                start: { line: 1, column: 0 },
                end: { line: 1, column: 7 }
            }
        },
        range: [0, 7],
        loc: {
            start: { line: 1, column: 0 },
            end: { line: 1, column: 7 }
        }
    },

    '\\u0061a': {
        type: 'ExpressionStatement',
        expression: {
            type: 'Identifier',
            name: 'aa',
            range: [0, 7],
            loc: {
                start: { line: 1, column: 0 },
                end: { line: 1, column: 7 }
            }
        },
        range: [0, 7],
        loc: {
            start: { line: 1, column: 0 },
            end: { line: 1, column: 7 }
        }
    },

    '\\u0061a ': {
        type: 'ExpressionStatement',
        expression: {
            type: 'Identifier',
            name: 'aa',
            range: [0, 7],
            loc: {
                start: { line: 1, column: 0 },
                end: { line: 1, column: 7 }
            }
        },
        range: [0, 8],
        loc: {
            start: { line: 1, column: 0 },
            end: { line: 1, column: 8 }
        }
    }
},

'If Statement': {

    'if (morning) goodMorning()': {
        type: 'IfStatement',
        test: {
            type: 'Identifier',
            name: 'morning',
            range: [4, 11],
            loc: {
                start: { line: 1, column: 4 },
                end: { line: 1, column: 11 }
            }
        },
        consequent: {
            type: 'ExpressionStatement',
            expression: {
                type: 'CallExpression',
                callee: {
                    type: 'Identifier',
                    name: 'goodMorning',
                    range: [13, 24],
                    loc: {
                        start: { line: 1, column: 13 },
                        end: { line: 1, column: 24 }
                    }
                },
                'arguments': [],
                range: [13, 26],
                loc: {
                    start: { line: 1, column: 13 },
                    end: { line: 1, column: 26 }
                }
            },
            range: [13, 26],
            loc: {
                start: { line: 1, column: 13 },
                end: { line: 1, column: 26 }
            }
        },
        alternate: null,
        range: [0, 26],
        loc: {
            start: { line: 1, column: 0 },
            end: { line: 1, column: 26 }
        }
    },

    'if (morning) (function(){})': {
        type: 'IfStatement',
        test: {
            type: 'Identifier',
            name: 'morning',
            range: [4, 11],
            loc: {
                start: { line: 1, column: 4 },
                end: { line: 1, column: 11 }
            }
        },
        consequent: {
            type: 'ExpressionStatement',
            expression: {
                type: 'FunctionExpression',
                id: null,
                params: [],
                defaults: [],
                body: {
                    type: 'BlockStatement',
                    body: [],
                    range: [24, 26],
                    loc: {
                        start: { line: 1, column: 24 },
                        end: { line: 1, column: 26 }
                    }
                },
                rest: null,
                generator: false,
                expression: false,
                range: [14, 26],
                loc: {
                    start: { line: 1, column: 14 },
                    end: { line: 1, column: 26 }
                }
            },
            range: [13, 27],
            loc: {
                start: { line: 1, column: 13 },
                end: { line: 1, column: 27 }
            }
        },
        alternate: null,
        range: [0, 27],
        loc: {
            start: { line: 1, column: 0 },
            end: { line: 1, column: 27 }
        }
    },

    'if (morning) var x = 0;': {
        type: 'IfStatement',
        test: {
            type: 'Identifier',
            name: 'morning',
            range: [4, 11],
            loc: {
                start: { line: 1, column: 4 },
                end: { line: 1, column: 11 }
            }
        },
        consequent: {
            type: 'VariableDeclaration',
            declarations: [{
                type: 'VariableDeclarator',
                id: {
                    type: 'Identifier',
                    name: 'x',
                    range: [17, 18],
                    loc: {
                        start: { line: 1, column: 17 },
                        end: { line: 1, column: 18 }
                    }
                },
                init: {
                    type: 'Literal',
                    value: 0,
                    raw: '0',
                    range: [21, 22],
                    loc: {
                        start: { line: 1, column: 21 },
                        end: { line: 1, column: 22 }
                    }
                },
                range: [17, 22],
                loc: {
                    start: { line: 1, column: 17 },
                    end: { line: 1, column: 22 }
                }
            }],
            kind: 'var',
            range: [13, 23],
            loc: {
                start: { line: 1, column: 13 },
                end: { line: 1, column: 23 }
            }
        },
        alternate: null,
        range: [0, 23],
        loc: {
            start: { line: 1, column: 0 },
            end: { line: 1, column: 23 }
        }
    },

    'if (morning) function a(){}': {
        type: 'IfStatement',
        test: {
            type: 'Identifier',
            name: 'morning',
            range: [4, 11],
            loc: {
                start: { line: 1, column: 4 },
                end: { line: 1, column: 11 }
            }
        },
        consequent: {
            type: 'FunctionDeclaration',
            id: {
                type: 'Identifier',
                name: 'a',
                range: [22, 23],
                loc: {
                    start: { line: 1, column: 22 },
                    end: { line: 1, column: 23 }
                }
            },
            params: [],
            defaults: [],
            body: {
                type: 'BlockStatement',
                body: [],
                range: [25, 27],
                loc: {
                    start: { line: 1, column: 25 },
                    end: { line: 1, column: 27 }
                }
            },
            rest: null,
            generator: false,
            expression: false,
            range: [13, 27],
            loc: {
                start: { line: 1, column: 13 },
                end: { line: 1, column: 27 }
            }
        },
        alternate: null,
        range: [0, 27],
        loc: {
            start: { line: 1, column: 0 },
            end: { line: 1, column: 27 }
        }
    },

    'if (morning) goodMorning(); else goodDay()': {
        type: 'IfStatement',
        test: {
            type: 'Identifier',
            name: 'morning',
            range: [4, 11],
            loc: {
                start: { line: 1, column: 4 },
                end: { line: 1, column: 11 }
            }
        },
        consequent: {
            type: 'ExpressionStatement',
            expression: {
                type: 'CallExpression',
                callee: {
                    type: 'Identifier',
                    name: 'goodMorning',
                    range: [13, 24],
                    loc: {
                        start: { line: 1, column: 13 },
                        end: { line: 1, column: 24 }
                    }
                },
                'arguments': [],
                range: [13, 26],
                loc: {
                    start: { line: 1, column: 13 },
                    end: { line: 1, column: 26 }
                }
            },
            range: [13, 27],
            loc: {
                start: { line: 1, column: 13 },
                end: { line: 1, column: 27 }
            }
        },
        alternate: {
            type: 'ExpressionStatement',
            expression: {
                type: 'CallExpression',
                callee: {
                    type: 'Identifier',
                    name: 'goodDay',
                    range: [33, 40],
                    loc: {
                        start: { line: 1, column: 33 },
                        end: { line: 1, column: 40 }
                    }
                },
                'arguments': [],
                range: [33, 42],
                loc: {
                    start: { line: 1, column: 33 },
                    end: { line: 1, column: 42 }
                }
            },
            range: [33, 42],
            loc: {
                start: { line: 1, column: 33 },
                end: { line: 1, column: 42 }
            }
        },
        range: [0, 42],
        loc: {
            start: { line: 1, column: 0 },
            end: { line: 1, column: 42 }
        }
    },

    'if (true) that()\n; else;': {
        type: "IfStatement",
        test: {
            type: "Literal",
            value: true,
            raw: "true",
            range: [4, 8],
            loc: {
                start: { line: 1, column: 4 },
                end: { line: 1, column: 8 }
            }
        },
        consequent: {
            type: "ExpressionStatement",
            expression: {
                type: "CallExpression",
                callee: {
                    type: "Identifier",
                    name: "that",
                    range: [10, 14],
                    loc: {
                        start: { line: 1, column: 10 },
                        end: { line: 1, column: 14 }
                    }
                },
                "arguments": [],
                range: [10, 16],
                loc: {
                    start: { line: 1, column: 10 },
                    end: { line: 1, column: 16 }
                }
            },
            range: [10, 18],
            loc: {
                start: { line: 1, column: 10 },
                end: { line: 2, column: 1 }
            }
        },
        alternate: {
            type: "EmptyStatement",
            range: [23, 24],
            loc: {
                start: { line: 2, column: 6 },
                end: { line: 2, column: 7 }
            }
        },
        range: [0, 24],
        loc: {
            start: { line: 1, column: 0 },
            end: { line: 2, column: 7 }
        }
    },

    'if (true) that(); else;': {
        type: "IfStatement",
        test: {
            type: "Literal",
            value: true,
            raw: "true",
            range: [4, 8],
            loc: {
                start: { line: 1, column: 4 },
                end: { line: 1, column: 8 }
            }
        },
        consequent: {
            type: "ExpressionStatement",
            expression: {
                type: "CallExpression",
                callee: {
                    type: "Identifier",
                    name: "that",
                    range: [10, 14],
                    loc: {
                        start: { line: 1, column: 10 },
                        end: { line: 1, column: 14 }
                    }
                },
                "arguments": [],
                range: [10, 16],
                loc: {
                    start: { line: 1, column: 10 },
                    end: { line: 1, column: 16 }
                }
            },
            range: [10, 17],
            loc: {
                start: { line: 1, column: 10 },
                end: { line: 1, column: 17 }
            }
        },
        alternate: {
            type: "EmptyStatement",
            range: [22, 23],
            loc: {
                start: { line: 1, column: 22 },
                end: { line: 1, column: 23 }
            }
        },
        range: [0, 23],
        loc: {
            start: { line: 1, column: 0 },
            end: { line: 1, column: 23 }
        }
    }

},

'Iteration Statements': {

    'do keep(); while (true)': {
        type: 'DoWhileStatement',
        body: {
            type: 'ExpressionStatement',
            expression: {
                type: 'CallExpression',
                callee: {
                    type: 'Identifier',
                    name: 'keep',
                    range: [3, 7],
                    loc: {
                        start: { line: 1, column: 3 },
                        end: { line: 1, column: 7 }
                    }
                },
                'arguments': [],
                range: [3, 9],
                loc: {
                    start: { line: 1, column: 3 },
                    end: { line: 1, column: 9 }
                }
            },
            range: [3, 10],
            loc: {
                start: { line: 1, column: 3 },
                end: { line: 1, column: 10 }
            }
        },
        test: {
            type: 'Literal',
            value: true,
            raw: 'true',
            range: [18, 22],
            loc: {
                start: { line: 1, column: 18 },
                end: { line: 1, column: 22 }
            }
        },
        range: [0, 23],
        loc: {
            start: { line: 1, column: 0 },
            end: { line: 1, column: 23 }
        }
    },

    'do keep(); while (true);': {
        type: 'DoWhileStatement',
        body: {
            type: 'ExpressionStatement',
            expression: {
                type: 'CallExpression',
                callee: {
                    type: 'Identifier',
                    name: 'keep',
                    range: [3, 7],
                    loc: {
                        start: { line: 1, column: 3 },
                        end: { line: 1, column: 7 }
                    }
                },
                'arguments': [],
                range: [3, 9],
                loc: {
                    start: { line: 1, column: 3 },
                    end: { line: 1, column: 9 }
                }
            },
            range: [3, 10],
            loc: {
                start: { line: 1, column: 3 },
                end: { line: 1, column: 10 }
            }
        },
        test: {
            type: 'Literal',
            value: true,
            raw: 'true',
            range: [18, 22],
            loc: {
                start: { line: 1, column: 18 },
                end: { line: 1, column: 22 }
            }
        },
        range: [0, 24],
        loc: {
            start: { line: 1, column: 0 },
            end: { line: 1, column: 24 }
        }
    },

    'do { x++; y--; } while (x < 10)': {
        type: 'DoWhileStatement',
        body: {
            type: 'BlockStatement',
            body: [{
                type: 'ExpressionStatement',
                expression: {
                    type: 'UpdateExpression',
                    operator: '++',
                    argument: {
                        type: 'Identifier',
                        name: 'x',
                        range: [5, 6],
                        loc: {
                            start: { line: 1, column: 5 },
                            end: { line: 1, column: 6 }
                        }
                    },
                    prefix: false,
                    range: [5, 8],
                    loc: {
                        start: { line: 1, column: 5 },
                        end: { line: 1, column: 8 }
                    }
                },
                range: [5, 9],
                loc: {
                    start: { line: 1, column: 5 },
                    end: { line: 1, column: 9 }
                }
            }, {
                type: 'ExpressionStatement',
                expression: {
                    type: 'UpdateExpression',
                    operator: '--',
                    argument: {
                        type: 'Identifier',
                        name: 'y',
                        range: [10, 11],
                        loc: {
                            start: { line: 1, column: 10 },
                            end: { line: 1, column: 11 }
                        }
                    },
                    prefix: false,
                    range: [10, 13],
                    loc: {
                        start: { line: 1, column: 10 },
                        end: { line: 1, column: 13 }
                    }
                },
                range: [10, 14],
                loc: {
                    start: { line: 1, column: 10 },
                    end: { line: 1, column: 14 }
                }
            }],
            range: [3, 16],
            loc: {
                start: { line: 1, column: 3 },
                end: { line: 1, column: 16 }
            }
        },
        test: {
            type: 'BinaryExpression',
            operator: '<',
            left: {
                type: 'Identifier',
                name: 'x',
                range: [24, 25],
                loc: {
                    start: { line: 1, column: 24 },
                    end: { line: 1, column: 25 }
                }
            },
            right: {
                type: 'Literal',
                value: 10,
                raw: '10',
                range: [28, 30],
                loc: {
                    start: { line: 1, column: 28 },
                    end: { line: 1, column: 30 }
                }
            },
            range: [24, 30],
            loc: {
                start: { line: 1, column: 24 },
                end: { line: 1, column: 30 }
            }
        },
        range: [0, 31],
        loc: {
            start: { line: 1, column: 0 },
            end: { line: 1, column: 31 }
        }
    },

    '{ do { } while (false) false }': {
        type: 'BlockStatement',
        body: [{
            type: 'DoWhileStatement',
            body: {
                type: 'BlockStatement',
                body: [],
                range: [5, 8],
                loc: {
                    start: { line: 1, column: 5 },
                    end: { line: 1, column: 8 }
                }
            },
            test: {
                type: 'Literal',
                value: false,
                raw: 'false',
                range: [16, 21],
                loc: {
                    start: { line: 1, column: 16 },
                    end: { line: 1, column: 21 }
                }
            },
            range: [2, 22],
            loc: {
                start: { line: 1, column: 2 },
                end: { line: 1, column: 22 }
            }
        }, {
            type: 'ExpressionStatement',
            expression: {
                type: 'Literal',
                value: false,
                raw: 'false',
                range: [23, 28],
                loc: {
                    start: { line: 1, column: 23 },
                    end: { line: 1, column: 28 }
                }
            },
            range: [23, 29],
            loc: {
                start: { line: 1, column: 23 },
                end: { line: 1, column: 29 }
            }
        }],
        range: [0, 30],
        loc: {
            start: { line: 1, column: 0 },
            end: { line: 1, column: 30 }
        }
    },

    'do that();while (true)': {
        type: "DoWhileStatement",
        body: {
            type: "ExpressionStatement",
            expression: {
                type: "CallExpression",
                callee: {
                    type: "Identifier",
                    name: "that",
                    range: [3, 7],
                    loc: {
                        start: { line: 1, column: 3 },
                        end: { line: 1, column: 7 }
                    }
                },
                "arguments": [],
                range: [3, 9],
                loc: {
                    start: { line: 1, column: 3 },
                    end: { line: 1, column: 9 }
                }
            },
            range: [3, 10],
            loc: {
                start: { line: 1, column: 3 },
                end: { line: 1, column: 10 }
            }
        },
        test: {
            type: "Literal",
            value: true,
            raw: "true",
            range: [17, 21],
            loc: {
                start: { line: 1, column: 17 },
                end: { line: 1, column: 21 }
            }
        },
        range: [0, 22],
        loc: {
            start: { line: 1, column: 0 },
            end: { line: 1, column: 22 }
        }
    },

    'do that()\n;while (true)': {
        type: "DoWhileStatement",
        body: {
            type: "ExpressionStatement",
            expression: {
                type: "CallExpression",
                callee: {
                    type: "Identifier",
                    name: "that",
                    range: [3, 7],
                    loc: {
                        start: { line: 1, column: 3 },
                        end: { line: 1, column: 7 }
                    }
                },
                "arguments": [],
                range: [3, 9],
                loc: {
                    start: { line: 1, column: 3 },
                    end: { line: 1, column: 9 }
                }
            },
            range: [3, 11],
            loc: {
                start: { line: 1, column: 3 },
                end: { line: 2, column: 1 }
            }
        },
        test: {
            type: "Literal",
            value: true,
            raw: "true",
            range: [18, 22],
            loc: {
                start: { line: 2, column: 8 },
                end: { line: 2, column: 12 }
            }
        },
        range: [0, 23],
        loc: {
            start: { line: 1, column: 0 },
            end: { line: 2, column: 13 }
        }
    },

    'while (true) doSomething()': {
        type: 'WhileStatement',
        test: {
            type: 'Literal',
            value: true,
            raw: 'true',
            range: [7, 11],
            loc: {
                start: { line: 1, column: 7 },
                end: { line: 1, column: 11 }
            }
        },
        body: {
            type: 'ExpressionStatement',
            expression: {
                type: 'CallExpression',
                callee: {
                    type: 'Identifier',
                    name: 'doSomething',
                    range: [13, 24],
                    loc: {
                        start: { line: 1, column: 13 },
                        end: { line: 1, column: 24 }
                    }
                },
                'arguments': [],
                range: [13, 26],
                loc: {
                    start: { line: 1, column: 13 },
                    end: { line: 1, column: 26 }
                }
            },
            range: [13, 26],
            loc: {
                start: { line: 1, column: 13 },
                end: { line: 1, column: 26 }
            }
        },
        range: [0, 26],
        loc: {
            start: { line: 1, column: 0 },
            end: { line: 1, column: 26 }
        }
    },

    'while (x < 10) { x++; y--; }': {
        type: 'WhileStatement',
        test: {
            type: 'BinaryExpression',
            operator: '<',
            left: {
                type: 'Identifier',
                name: 'x',
                range: [7, 8],
                loc: {
                    start: { line: 1, column: 7 },
                    end: { line: 1, column: 8 }
                }
            },
            right: {
                type: 'Literal',
                value: 10,
                raw: '10',
                range: [11, 13],
                loc: {
                    start: { line: 1, column: 11 },
                    end: { line: 1, column: 13 }
                }
            },
            range: [7, 13],
            loc: {
                start: { line: 1, column: 7 },
                end: { line: 1, column: 13 }
            }
        },
        body: {
            type: 'BlockStatement',
            body: [{
                type: 'ExpressionStatement',
                expression: {
                    type: 'UpdateExpression',
                    operator: '++',
                    argument: {
                        type: 'Identifier',
                        name: 'x',
                        range: [17, 18],
                        loc: {
                            start: { line: 1, column: 17 },
                            end: { line: 1, column: 18 }
                        }
                    },
                    prefix: false,
                    range: [17, 20],
                    loc: {
                        start: { line: 1, column: 17 },
                        end: { line: 1, column: 20 }
                    }
                },
                range: [17, 21],
                loc: {
                    start: { line: 1, column: 17 },
                    end: { line: 1, column: 21 }
                }
            }, {
                type: 'ExpressionStatement',
                expression: {
                    type: 'UpdateExpression',
                    operator: '--',
                    argument: {
                        type: 'Identifier',
                        name: 'y',
                        range: [22, 23],
                        loc: {
                            start: { line: 1, column: 22 },
                            end: { line: 1, column: 23 }
                        }
                    },
                    prefix: false,
                    range: [22, 25],
                    loc: {
                        start: { line: 1, column: 22 },
                        end: { line: 1, column: 25 }
                    }
                },
                range: [22, 26],
                loc: {
                    start: { line: 1, column: 22 },
                    end: { line: 1, column: 26 }
                }
            }],
            range: [15, 28],
            loc: {
                start: { line: 1, column: 15 },
                end: { line: 1, column: 28 }
            }
        },
        range: [0, 28],
        loc: {
            start: { line: 1, column: 0 },
            end: { line: 1, column: 28 }
        }
    },

    'for(;;);': {
        type: 'ForStatement',
        init: null,
        test: null,
        update: null,
        body: {
            type: 'EmptyStatement',
            range: [7, 8],
            loc: {
                start: { line: 1, column: 7 },
                end: { line: 1, column: 8 }
            }
        },
        range: [0, 8],
        loc: {
            start: { line: 1, column: 0 },
            end: { line: 1, column: 8 }
        }
    },

    'for(;;){}': {
        type: 'ForStatement',
        init: null,
        test: null,
        update: null,
        body: {
            type: 'BlockStatement',
            body: [],
            range: [7, 9],
            loc: {
                start: { line: 1, column: 7 },
                end: { line: 1, column: 9 }
            }
        },
        range: [0, 9],
        loc: {
            start: { line: 1, column: 0 },
            end: { line: 1, column: 9 }
        }
    },

    'for(x = 0;;);': {
        type: 'ForStatement',
        init: {
            type: 'AssignmentExpression',
            operator: '=',
            left: {
                type: 'Identifier',
                name: 'x',
                range: [4, 5],
                loc: {
                    start: { line: 1, column: 4 },
                    end: { line: 1, column: 5 }
                }
            },
            right: {
                type: 'Literal',
                value: 0,
                raw: '0',
                range: [8, 9],
                loc: {
                    start: { line: 1, column: 8 },
                    end: { line: 1, column: 9 }
                }
            },
            range: [4, 9],
            loc: {
                start: { line: 1, column: 4 },
                end: { line: 1, column: 9 }
            }
        },
        test: null,
        update: null,
        body: {
            type: 'EmptyStatement',
            range: [12, 13],
            loc: {
                start: { line: 1, column: 12 },
                end: { line: 1, column: 13 }
            }
        },
        range: [0, 13],
        loc: {
            start: { line: 1, column: 0 },
            end: { line: 1, column: 13 }
        }
    },

    'for(var x = 0;;);': {
        type: 'ForStatement',
        init: {
            type: 'VariableDeclaration',
            declarations: [{
                type: 'VariableDeclarator',
                id: {
                    type: 'Identifier',
                    name: 'x',
                    range: [8, 9],
                    loc: {
                        start: { line: 1, column: 8 },
                        end: { line: 1, column: 9 }
                    }
                },
                init: {
                    type: 'Literal',
                    value: 0,
                    raw: '0',
                    range: [12, 13],
                    loc: {
                        start: { line: 1, column: 12 },
                        end: { line: 1, column: 13 }
                    }
                },
                range: [8, 13],
                loc: {
                    start: { line: 1, column: 8 },
                    end: { line: 1, column: 13 }
                }
            }],
            kind: 'var',
            range: [4, 13],
            loc: {
                start: { line: 1, column: 4 },
                end: { line: 1, column: 13 }
            }
        },
        test: null,
        update: null,
        body: {
            type: 'EmptyStatement',
            range: [16, 17],
            loc: {
                start: { line: 1, column: 16 },
                end: { line: 1, column: 17 }
            }
        },
        range: [0, 17],
        loc: {
            start: { line: 1, column: 0 },
            end: { line: 1, column: 17 }
        }
    },

    'for(let x = 0;;);': {
        type: 'ForStatement',
        init: {
            type: 'VariableDeclaration',
            declarations: [{
                type: 'VariableDeclarator',
                id: {
                    type: 'Identifier',
                    name: 'x',
                    range: [8, 9],
                    loc: {
                        start: { line: 1, column: 8 },
                        end: { line: 1, column: 9 }
                    }
                },
                init: {
                    type: 'Literal',
                    value: 0,
                    raw: '0',
                    range: [12, 13],
                    loc: {
                        start: { line: 1, column: 12 },
                        end: { line: 1, column: 13 }
                    }
                },
                range: [8, 13],
                loc: {
                    start: { line: 1, column: 8 },
                    end: { line: 1, column: 13 }
                }
            }],
            kind: 'let',
            range: [4, 13],
            loc: {
                start: { line: 1, column: 4 },
                end: { line: 1, column: 13 }
            }
        },
        test: null,
        update: null,
        body: {
            type: 'EmptyStatement',
            range: [16, 17],
            loc: {
                start: { line: 1, column: 16 },
                end: { line: 1, column: 17 }
            }
        },
        range: [0, 17],
        loc: {
            start: { line: 1, column: 0 },
            end: { line: 1, column: 17 }
        }
    },

    'for(var x = 0, y = 1;;);': {
        type: 'ForStatement',
        init: {
            type: 'VariableDeclaration',
            declarations: [{
                type: 'VariableDeclarator',
                id: {
                    type: 'Identifier',
                    name: 'x',
                    range: [8, 9],
                    loc: {
                        start: { line: 1, column: 8 },
                        end: { line: 1, column: 9 }
                    }
                },
                init: {
                    type: 'Literal',
                    value: 0,
                    raw: '0',
                    range: [12, 13],
                    loc: {
                        start: { line: 1, column: 12 },
                        end: { line: 1, column: 13 }
                    }
                },
                range: [8, 13],
                loc: {
                    start: { line: 1, column: 8 },
                    end: { line: 1, column: 13 }
                }
            }, {
                type: 'VariableDeclarator',
                id: {
                    type: 'Identifier',
                    name: 'y',
                    range: [15, 16],
                    loc: {
                        start: { line: 1, column: 15 },
                        end: { line: 1, column: 16 }
                    }
                },
                init: {
                    type: 'Literal',
                    value: 1,
                    raw: '1',
                    range: [19, 20],
                    loc: {
                        start: { line: 1, column: 19 },
                        end: { line: 1, column: 20 }
                    }
                },
                range: [15, 20],
                loc: {
                    start: { line: 1, column: 15 },
                    end: { line: 1, column: 20 }
                }
            }],
            kind: 'var',
            range: [4, 20],
            loc: {
                start: { line: 1, column: 4 },
                end: { line: 1, column: 20 }
            }
        },
        test: null,
        update: null,
        body: {
            type: 'EmptyStatement',
            range: [23, 24],
            loc: {
                start: { line: 1, column: 23 },
                end: { line: 1, column: 24 }
            }
        },
        range: [0, 24],
        loc: {
            start: { line: 1, column: 0 },
            end: { line: 1, column: 24 }
        }
    },

    'for(x = 0; x < 42;);': {
        type: 'ForStatement',
        init: {
            type: 'AssignmentExpression',
            operator: '=',
            left: {
                type: 'Identifier',
                name: 'x',
                range: [4, 5],
                loc: {
                    start: { line: 1, column: 4 },
                    end: { line: 1, column: 5 }
                }
            },
            right: {
                type: 'Literal',
                value: 0,
                raw: '0',
                range: [8, 9],
                loc: {
                    start: { line: 1, column: 8 },
                    end: { line: 1, column: 9 }
                }
            },
            range: [4, 9],
            loc: {
                start: { line: 1, column: 4 },
                end: { line: 1, column: 9 }
            }
        },
        test: {
            type: 'BinaryExpression',
            operator: '<',
            left: {
                type: 'Identifier',
                name: 'x',
                range: [11, 12],
                loc: {
                    start: { line: 1, column: 11 },
                    end: { line: 1, column: 12 }
                }
            },
            right: {
                type: 'Literal',
                value: 42,
                raw: '42',
                range: [15, 17],
                loc: {
                    start: { line: 1, column: 15 },
                    end: { line: 1, column: 17 }
                }
            },
            range: [11, 17],
            loc: {
                start: { line: 1, column: 11 },
                end: { line: 1, column: 17 }
            }
        },
        update: null,
        body: {
            type: 'EmptyStatement',
            range: [19, 20],
            loc: {
                start: { line: 1, column: 19 },
                end: { line: 1, column: 20 }
            }
        },
        range: [0, 20],
        loc: {
            start: { line: 1, column: 0 },
            end: { line: 1, column: 20 }
        }
    },

    'for(x = 0; x < 42; x++);': {
        type: 'ForStatement',
        init: {
            type: 'AssignmentExpression',
            operator: '=',
            left: {
                type: 'Identifier',
                name: 'x',
                range: [4, 5],
                loc: {
                    start: { line: 1, column: 4 },
                    end: { line: 1, column: 5 }
                }
            },
            right: {
                type: 'Literal',
                value: 0,
                raw: '0',
                range: [8, 9],
                loc: {
                    start: { line: 1, column: 8 },
                    end: { line: 1, column: 9 }
                }
            },
            range: [4, 9],
            loc: {
                start: { line: 1, column: 4 },
                end: { line: 1, column: 9 }
            }
        },
        test: {
            type: 'BinaryExpression',
            operator: '<',
            left: {
                type: 'Identifier',
                name: 'x',
                range: [11, 12],
                loc: {
                    start: { line: 1, column: 11 },
                    end: { line: 1, column: 12 }
                }
            },
            right: {
                type: 'Literal',
                value: 42,
                raw: '42',
                range: [15, 17],
                loc: {
                    start: { line: 1, column: 15 },
                    end: { line: 1, column: 17 }
                }
            },
            range: [11, 17],
            loc: {
                start: { line: 1, column: 11 },
                end: { line: 1, column: 17 }
            }
        },
        update: {
            type: 'UpdateExpression',
            operator: '++',
            argument: {
                type: 'Identifier',
                name: 'x',
                range: [19, 20],
                loc: {
                    start: { line: 1, column: 19 },
                    end: { line: 1, column: 20 }
                }
            },
            prefix: false,
            range: [19, 22],
            loc: {
                start: { line: 1, column: 19 },
                end: { line: 1, column: 22 }
            }
        },
        body: {
            type: 'EmptyStatement',
            range: [23, 24],
            loc: {
                start: { line: 1, column: 23 },
                end: { line: 1, column: 24 }
            }
        },
        range: [0, 24],
        loc: {
            start: { line: 1, column: 0 },
            end: { line: 1, column: 24 }
        }
    },

    'for(x = 0; x < 42; x++) process(x);': {
        type: 'ForStatement',
        init: {
            type: 'AssignmentExpression',
            operator: '=',
            left: {
                type: 'Identifier',
                name: 'x',
                range: [4, 5],
                loc: {
                    start: { line: 1, column: 4 },
                    end: { line: 1, column: 5 }
                }
            },
            right: {
                type: 'Literal',
                value: 0,
                raw: '0',
                range: [8, 9],
                loc: {
                    start: { line: 1, column: 8 },
                    end: { line: 1, column: 9 }
                }
            },
            range: [4, 9],
            loc: {
                start: { line: 1, column: 4 },
                end: { line: 1, column: 9 }
            }
        },
        test: {
            type: 'BinaryExpression',
            operator: '<',
            left: {
                type: 'Identifier',
                name: 'x',
                range: [11, 12],
                loc: {
                    start: { line: 1, column: 11 },
                    end: { line: 1, column: 12 }
                }
            },
            right: {
                type: 'Literal',
                value: 42,
                raw: '42',
                range: [15, 17],
                loc: {
                    start: { line: 1, column: 15 },
                    end: { line: 1, column: 17 }
                }
            },
            range: [11, 17],
            loc: {
                start: { line: 1, column: 11 },
                end: { line: 1, column: 17 }
            }
        },
        update: {
            type: 'UpdateExpression',
            operator: '++',
            argument: {
                type: 'Identifier',
                name: 'x',
                range: [19, 20],
                loc: {
                    start: { line: 1, column: 19 },
                    end: { line: 1, column: 20 }
                }
            },
            prefix: false,
            range: [19, 22],
            loc: {
                start: { line: 1, column: 19 },
                end: { line: 1, column: 22 }
            }
        },
        body: {
            type: 'ExpressionStatement',
            expression: {
                type: 'CallExpression',
                callee: {
                    type: 'Identifier',
                    name: 'process',
                    range: [24, 31],
                    loc: {
                        start: { line: 1, column: 24 },
                        end: { line: 1, column: 31 }
                    }
                },
                'arguments': [{
                    type: 'Identifier',
                    name: 'x',
                    range: [32, 33],
                    loc: {
                        start: { line: 1, column: 32 },
                        end: { line: 1, column: 33 }
                    }
                }],
                range: [24, 34],
                loc: {
                    start: { line: 1, column: 24 },
                    end: { line: 1, column: 34 }
                }
            },
            range: [24, 35],
            loc: {
                start: { line: 1, column: 24 },
                end: { line: 1, column: 35 }
            }
        },
        range: [0, 35],
        loc: {
            start: { line: 1, column: 0 },
            end: { line: 1, column: 35 }
        }
    },

    'for(x in list) process(x);': {
        type: 'ForInStatement',
        left: {
            type: 'Identifier',
            name: 'x',
            range: [4, 5],
            loc: {
                start: { line: 1, column: 4 },
                end: { line: 1, column: 5 }
            }
        },
        right: {
            type: 'Identifier',
            name: 'list',
            range: [9, 13],
            loc: {
                start: { line: 1, column: 9 },
                end: { line: 1, column: 13 }
            }
        },
        body: {
            type: 'ExpressionStatement',
            expression: {
                type: 'CallExpression',
                callee: {
                    type: 'Identifier',
                    name: 'process',
                    range: [15, 22],
                    loc: {
                        start: { line: 1, column: 15 },
                        end: { line: 1, column: 22 }
                    }
                },
                'arguments': [{
                    type: 'Identifier',
                    name: 'x',
                    range: [23, 24],
                    loc: {
                        start: { line: 1, column: 23 },
                        end: { line: 1, column: 24 }
                    }
                }],
                range: [15, 25],
                loc: {
                    start: { line: 1, column: 15 },
                    end: { line: 1, column: 25 }
                }
            },
            range: [15, 26],
            loc: {
                start: { line: 1, column: 15 },
                end: { line: 1, column: 26 }
            }
        },
        each: false,
        range: [0, 26],
        loc: {
            start: { line: 1, column: 0 },
            end: { line: 1, column: 26 }
        }
    },

    'for (var x in list) process(x);': {
        type: 'ForInStatement',
        left: {
            type: 'VariableDeclaration',
            declarations: [{
                type: 'VariableDeclarator',
                id: {
                    type: 'Identifier',
                    name: 'x',
                    range: [9, 10],
                    loc: {
                        start: { line: 1, column: 9 },
                        end: { line: 1, column: 10 }
                    }
                },
                init: null,
                range: [9, 10],
                loc: {
                    start: { line: 1, column: 9 },
                    end: { line: 1, column: 10 }
                }
            }],
            kind: 'var',
            range: [5, 10],
            loc: {
                start: { line: 1, column: 5 },
                end: { line: 1, column: 10 }
            }
        },
        right: {
            type: 'Identifier',
            name: 'list',
            range: [14, 18],
            loc: {
                start: { line: 1, column: 14 },
                end: { line: 1, column: 18 }
            }
        },
        body: {
            type: 'ExpressionStatement',
            expression: {
                type: 'CallExpression',
                callee: {
                    type: 'Identifier',
                    name: 'process',
                    range: [20, 27],
                    loc: {
                        start: { line: 1, column: 20 },
                        end: { line: 1, column: 27 }
                    }
                },
                'arguments': [{
                    type: 'Identifier',
                    name: 'x',
                    range: [28, 29],
                    loc: {
                        start: { line: 1, column: 28 },
                        end: { line: 1, column: 29 }
                    }
                }],
                range: [20, 30],
                loc: {
                    start: { line: 1, column: 20 },
                    end: { line: 1, column: 30 }
                }
            },
            range: [20, 31],
            loc: {
                start: { line: 1, column: 20 },
                end: { line: 1, column: 31 }
            }
        },
        each: false,
        range: [0, 31],
        loc: {
            start: { line: 1, column: 0 },
            end: { line: 1, column: 31 }
        }
    },

    'for (var x = 42 in list) process(x);': {
        type: 'ForInStatement',
        left: {
            type: 'VariableDeclaration',
            declarations: [{
                type: 'VariableDeclarator',
                id: {
                    type: 'Identifier',
                    name: 'x',
                    range: [9, 10],
                    loc: {
                        start: { line: 1, column: 9 },
                        end: { line: 1, column: 10 }
                    }
                },
                init: {
                    type: 'Literal',
                    value: 42,
                    raw: '42',
                    range: [13, 15],
                    loc: {
                        start: { line: 1, column: 13 },
                        end: { line: 1, column: 15 }
                    }
                },
                range: [9, 15],
                loc: {
                    start: { line: 1, column: 9 },
                    end: { line: 1, column: 15 }
                }
            }],
            kind: 'var',
            range: [5, 15],
            loc: {
                start: { line: 1, column: 5 },
                end: { line: 1, column: 15 }
            }
        },
        right: {
            type: 'Identifier',
            name: 'list',
            range: [19, 23],
            loc: {
                start: { line: 1, column: 19 },
                end: { line: 1, column: 23 }
            }
        },
        body: {
            type: 'ExpressionStatement',
            expression: {
                type: 'CallExpression',
                callee: {
                    type: 'Identifier',
                    name: 'process',
                    range: [25, 32],
                    loc: {
                        start: { line: 1, column: 25 },
                        end: { line: 1, column: 32 }
                    }
                },
                'arguments': [{
                    type: 'Identifier',
                    name: 'x',
                    range: [33, 34],
                    loc: {
                        start: { line: 1, column: 33 },
                        end: { line: 1, column: 34 }
                    }
                }],
                range: [25, 35],
                loc: {
                    start: { line: 1, column: 25 },
                    end: { line: 1, column: 35 }
                }
            },
            range: [25, 36],
            loc: {
                start: { line: 1, column: 25 },
                end: { line: 1, column: 36 }
            }
        },
        each: false,
        range: [0, 36],
        loc: {
            start: { line: 1, column: 0 },
            end: { line: 1, column: 36 }
        }
    },

    'for (let x in list) process(x);': {
        type: 'ForInStatement',
        left: {
            type: 'VariableDeclaration',
            declarations: [{
                type: 'VariableDeclarator',
                id: {
                    type: 'Identifier',
                    name: 'x',
                    range: [9, 10],
                    loc: {
                        start: { line: 1, column: 9 },
                        end: { line: 1, column: 10 }
                    }
                },
                init: null,
                range: [9, 10],
                loc: {
                    start: { line: 1, column: 9 },
                    end: { line: 1, column: 10 }
                }
            }],
            kind: 'let',
            range: [5, 10],
            loc: {
                start: { line: 1, column: 5 },
                end: { line: 1, column: 10 }
            }
        },
        right: {
            type: 'Identifier',
            name: 'list',
            range: [14, 18],
            loc: {
                start: { line: 1, column: 14 },
                end: { line: 1, column: 18 }
            }
        },
        body: {
            type: 'ExpressionStatement',
            expression: {
                type: 'CallExpression',
                callee: {
                    type: 'Identifier',
                    name: 'process',
                    range: [20, 27],
                    loc: {
                        start: { line: 1, column: 20 },
                        end: { line: 1, column: 27 }
                    }
                },
                'arguments': [{
                    type: 'Identifier',
                    name: 'x',
                    range: [28, 29],
                    loc: {
                        start: { line: 1, column: 28 },
                        end: { line: 1, column: 29 }
                    }
                }],
                range: [20, 30],
                loc: {
                    start: { line: 1, column: 20 },
                    end: { line: 1, column: 30 }
                }
            },
            range: [20, 31],
            loc: {
                start: { line: 1, column: 20 },
                end: { line: 1, column: 31 }
            }
        },
        each: false,
        range: [0, 31],
        loc: {
            start: { line: 1, column: 0 },
            end: { line: 1, column: 31 }
        }
    },

    'for (var x = y = z in q);': {
        type: 'ForInStatement',
        left: {
            type: 'VariableDeclaration',
            declarations: [{
                type: 'VariableDeclarator',
                id: {
                    type: 'Identifier',
                    name: 'x',
                    range: [9, 10],
                    loc: {
                        start: { line: 1, column: 9 },
                        end: { line: 1, column: 10 }
                    }
                },
                init: {
                    type: 'AssignmentExpression',
                    operator: '=',
                    left: {
                        type: 'Identifier',
                        name: 'y',
                        range: [13, 14],
                        loc: {
                            start: { line: 1, column: 13 },
                            end: { line: 1, column: 14 }
                        }
                    },
                    right: {
                        type: 'Identifier',
                        name: 'z',
                        range: [17, 18],
                        loc: {
                            start: { line: 1, column: 17 },
                            end: { line: 1, column: 18 }
                        }
                    },
                    range: [13, 18],
                    loc: {
                        start: { line: 1, column: 13 },
                        end: { line: 1, column: 18 }
                    }
                },
                range: [9, 18],
                loc: {
                    start: { line: 1, column: 9 },
                    end: { line: 1, column: 18 }
                }
            }],
            kind: 'var',
            range: [5, 18],
            loc: {
                start: { line: 1, column: 5 },
                end: { line: 1, column: 18 }
            }
        },
        right: {
            type: 'Identifier',
            name: 'q',
            range: [22, 23],
            loc: {
                start: { line: 1, column: 22 },
                end: { line: 1, column: 23 }
            }
        },
        body: {
            type: 'EmptyStatement',
            range: [24, 25],
            loc: {
                start: { line: 1, column: 24 },
                end: { line: 1, column: 25 }
            }
        },
        each: false,
        range: [0, 25],
        loc: {
            start: { line: 1, column: 0 },
            end: { line: 1, column: 25 }
        }
    },

    'for (var a = b = c = (d in e) in z);': {
        type: 'ForInStatement',
        left: {
            type: 'VariableDeclaration',
            declarations: [{
                type: 'VariableDeclarator',
                id: {
                    type: 'Identifier',
                    name: 'a',
                    range: [9, 10],
                    loc: {
                        start: { line: 1, column: 9 },
                        end: { line: 1, column: 10 }
                    }
                },
                init: {
                    type: 'AssignmentExpression',
                    operator: '=',
                    left: {
                        type: 'Identifier',
                        name: 'b',
                        range: [13, 14],
                        loc: {
                            start: { line: 1, column: 13 },
                            end: { line: 1, column: 14 }
                        }
                    },
                    right: {
                        type: 'AssignmentExpression',
                        operator: '=',
                        left: {
                            type: 'Identifier',
                            name: 'c',
                            range: [17, 18],
                            loc: {
                                start: { line: 1, column: 17 },
                                end: { line: 1, column: 18 }
                            }
                        },
                        right: {
                            type: 'BinaryExpression',
                            operator: 'in',
                            left: {
                                type: 'Identifier',
                                name: 'd',
                                range: [22, 23],
                                loc: {
                                    start: { line: 1, column: 22 },
                                    end: { line: 1, column: 23 }
                                }
                            },
                            right: {
                                type: 'Identifier',
                                name: 'e',
                                range: [27, 28],
                                loc: {
                                    start: { line: 1, column: 27 },
                                    end: { line: 1, column: 28 }
                                }
                            },
                            range: [22, 28],
                            loc: {
                                start: { line: 1, column: 22 },
                                end: { line: 1, column: 28 }
                            }
                        },
                        range: [17, 29],
                        loc: {
                            start: { line: 1, column: 17 },
                            end: { line: 1, column: 29 }
                        }
                    },
                    range: [13, 29],
                    loc: {
                        start: { line: 1, column: 13 },
                        end: { line: 1, column: 29 }
                    }
                },
                range: [9, 29],
                loc: {
                    start: { line: 1, column: 9 },
                    end: { line: 1, column: 29 }
                }
            }],
            kind: 'var',
            range: [5, 29],
            loc: {
                start: { line: 1, column: 5 },
                end: { line: 1, column: 29 }
            }
        },
        right: {
            type: 'Identifier',
            name: 'z',
            range: [33, 34],
            loc: {
                start: { line: 1, column: 33 },
                end: { line: 1, column: 34 }
            }
        },
        body: {
            type: 'EmptyStatement',
            range: [35, 36],
            loc: {
                start: { line: 1, column: 35 },
                end: { line: 1, column: 36 }
            }
        },
        each: false,
        range: [0, 36],
        loc: {
            start: { line: 1, column: 0 },
            end: { line: 1, column: 36 }
        }
    },

    'for (var i = function() { return 10 in [] } in list) process(x);': {
        type: 'ForInStatement',
        left: {
            type: 'VariableDeclaration',
            declarations: [{
                type: 'VariableDeclarator',
                id: {
                    type: 'Identifier',
                    name: 'i',
                    range: [9, 10],
                    loc: {
                        start: { line: 1, column: 9 },
                        end: { line: 1, column: 10 }
                    }
                },
                init: {
                    type: 'FunctionExpression',
                    id: null,
                    params: [],
                    defaults: [],
                    body: {
                        type: 'BlockStatement',
                        body: [{
                            type: 'ReturnStatement',
                            argument: {
                                type: 'BinaryExpression',
                                operator: 'in',
                                left: {
                                    type: 'Literal',
                                    value: 10,
                                    raw: '10',
                                    range: [33, 35],
                                    loc: {
                                        start: { line: 1, column: 33 },
                                        end: { line: 1, column: 35 }
                                    }
                                },
                                right: {
                                    type: 'ArrayExpression',
                                    elements: [],
                                    range: [39, 41],
                                    loc: {
                                        start: { line: 1, column: 39 },
                                        end: { line: 1, column: 41 }
                                    }
                                },
                                range: [33, 41],
                                loc: {
                                    start: { line: 1, column: 33 },
                                    end: { line: 1, column: 41 }
                                }
                            },
                            range: [26, 42],
                            loc: {
                                start: { line: 1, column: 26 },
                                end: { line: 1, column: 42 }
                            }
                        }],
                        range: [24, 43],
                        loc: {
                            start: { line: 1, column: 24 },
                            end: { line: 1, column: 43 }
                        }
                    },
                    rest: null,
                    generator: false,
                    expression: false,
                    range: [13, 43],
                    loc: {
                        start: { line: 1, column: 13 },
                        end: { line: 1, column: 43 }
                    }
                },
                range: [9, 43],
                loc: {
                    start: { line: 1, column: 9 },
                    end: { line: 1, column: 43 }
                }
            }],
            kind: 'var',
            range: [5, 43],
            loc: {
                start: { line: 1, column: 5 },
                end: { line: 1, column: 43 }
            }
        },
        right: {
            type: 'Identifier',
            name: 'list',
            range: [47, 51],
            loc: {
                start: { line: 1, column: 47 },
                end: { line: 1, column: 51 }
            }
        },
        body: {
            type: 'ExpressionStatement',
            expression: {
                type: 'CallExpression',
                callee: {
                    type: 'Identifier',
                    name: 'process',
                    range: [53, 60],
                    loc: {
                        start: { line: 1, column: 53 },
                        end: { line: 1, column: 60 }
                    }
                },
                'arguments': [{
                    type: 'Identifier',
                    name: 'x',
                    range: [61, 62],
                    loc: {
                        start: { line: 1, column: 61 },
                        end: { line: 1, column: 62 }
                    }
                }],
                range: [53, 63],
                loc: {
                    start: { line: 1, column: 53 },
                    end: { line: 1, column: 63 }
                }
            },
            range: [53, 64],
            loc: {
                start: { line: 1, column: 53 },
                end: { line: 1, column: 64 }
            }
        },
        each: false,
        range: [0, 64],
        loc: {
            start: { line: 1, column: 0 },
            end: { line: 1, column: 64 }
        }
    }

},

'continue statement': {

    'while (true) { continue; }': {
        type: 'WhileStatement',
        test: {
            type: 'Literal',
            value: true,
            raw: 'true',
            range: [7, 11],
            loc: {
                start: { line: 1, column: 7 },
                end: { line: 1, column: 11 }
            }
        },
        body: {
            type: 'BlockStatement',
            body: [
                {
                    type: 'ContinueStatement',
                    label: null,
                    range: [15, 24],
                    loc: {
                        start: { line: 1, column: 15 },
                        end: { line: 1, column: 24 }
                    }
                }
            ],
            range: [13, 26],
            loc: {
                start: { line: 1, column: 13 },
                end: { line: 1, column: 26 }
            }
        },
        range: [0, 26],
        loc: {
            start: { line: 1, column: 0 },
            end: { line: 1, column: 26 }
        }
    },

    'while (true) { continue }': {
        type: 'WhileStatement',
        test: {
            type: 'Literal',
            value: true,
            raw: 'true',
            range: [7, 11],
            loc: {
                start: { line: 1, column: 7 },
                end: { line: 1, column: 11 }
            }
        },
        body: {
            type: 'BlockStatement',
            body: [
                {
                    type: 'ContinueStatement',
                    label: null,
                    range: [15, 24],
                    loc: {
                        start: { line: 1, column: 15 },
                        end: { line: 1, column: 24 }
                    }
                }
            ],
            range: [13, 25],
            loc: {
                start: { line: 1, column: 13 },
                end: { line: 1, column: 25 }
            }
        },
        range: [0, 25],
        loc: {
            start: { line: 1, column: 0 },
            end: { line: 1, column: 25 }
        }
    },

    'done: while (true) { continue done }': {
        type: 'LabeledStatement',
        label: {
            type: 'Identifier',
            name: 'done',
            range: [0, 4],
            loc: {
                start: { line: 1, column: 0 },
                end: { line: 1, column: 4 }
            }
        },
        body: {
            type: 'WhileStatement',
            test: {
                type: 'Literal',
                value: true,
                raw: 'true',
                range: [13, 17],
                loc: {
                    start: { line: 1, column: 13 },
                    end: { line: 1, column: 17 }
                }
            },
            body: {
                type: 'BlockStatement',
                body: [
                    {
                        type: 'ContinueStatement',
                        label: {
                            type: 'Identifier',
                            name: 'done',
                            range: [30, 34],
                            loc: {
                                start: { line: 1, column: 30 },
                                end: { line: 1, column: 34 }
                            }
                        },
                        range: [21, 35],
                        loc: {
                            start: { line: 1, column: 21 },
                            end: { line: 1, column: 35 }
                        }
                    }
                ],
                range: [19, 36],
                loc: {
                    start: { line: 1, column: 19 },
                    end: { line: 1, column: 36 }
                }
            },
            range: [6, 36],
            loc: {
                start: { line: 1, column: 6 },
                end: { line: 1, column: 36 }
            }
        },
        range: [0, 36],
        loc: {
            start: { line: 1, column: 0 },
            end: { line: 1, column: 36 }
        }
    },

    'done: while (true) { continue done; }': {
        type: 'LabeledStatement',
        label: {
            type: 'Identifier',
            name: 'done',
            range: [0, 4],
            loc: {
                start: { line: 1, column: 0 },
                end: { line: 1, column: 4 }
            }
        },
        body: {
            type: 'WhileStatement',
            test: {
                type: 'Literal',
                value: true,
                raw: 'true',
                range: [13, 17],
                loc: {
                    start: { line: 1, column: 13 },
                    end: { line: 1, column: 17 }
                }
            },
            body: {
                type: 'BlockStatement',
                body: [
                    {
                        type: 'ContinueStatement',
                        label: {
                            type: 'Identifier',
                            name: 'done',
                            range: [30, 34],
                            loc: {
                                start: { line: 1, column: 30 },
                                end: { line: 1, column: 34 }
                            }
                        },
                        range: [21, 35],
                        loc: {
                            start: { line: 1, column: 21 },
                            end: { line: 1, column: 35 }
                        }
                    }
                ],
                range: [19, 37],
                loc: {
                    start: { line: 1, column: 19 },
                    end: { line: 1, column: 37 }
                }
            },
            range: [6, 37],
            loc: {
                start: { line: 1, column: 6 },
                end: { line: 1, column: 37 }
            }
        },
        range: [0, 37],
        loc: {
            start: { line: 1, column: 0 },
            end: { line: 1, column: 37 }
        }
    },

    '__proto__: while (true) { continue __proto__; }': {
        type: 'LabeledStatement',
        label: {
            type: 'Identifier',
            name: '__proto__',
            range: [0, 9],
            loc: {
                start: { line: 1, column: 0 },
                end: { line: 1, column: 9 }
            }
        },
        body: {
            type: 'WhileStatement',
            test: {
                type: 'Literal',
                value: true,
                raw: 'true',
                range: [18, 22],
                loc: {
                    start: { line: 1, column: 18 },
                    end: { line: 1, column: 22 }
                }
            },
            body: {
                type: 'BlockStatement',
                body: [{
                    type: 'ContinueStatement',
                    label: {
                        type: 'Identifier',
                        name: '__proto__',
                        range: [35, 44],
                        loc: {
                            start: { line: 1, column: 35 },
                            end: { line: 1, column: 44 }
                        }
                    },
                    range: [26, 45],
                    loc: {
                        start: { line: 1, column: 26 },
                        end: { line: 1, column: 45 }
                    }
                }],
                range: [24, 47],
                loc: {
                    start: { line: 1, column: 24 },
                    end: { line: 1, column: 47 }
                }
            },
            range: [11, 47],
            loc: {
                start: { line: 1, column: 11 },
                end: { line: 1, column: 47 }
            }
        },
        range: [0, 47],
        loc: {
            start: { line: 1, column: 0 },
            end: { line: 1, column: 47 }
        }
    }

},

'break statement': {

    'while (true) { break }': {
        type: 'WhileStatement',
        test: {
            type: 'Literal',
            value: true,
            raw: 'true',
            range: [7, 11],
            loc: {
                start: { line: 1, column: 7 },
                end: { line: 1, column: 11 }
            }
        },
        body: {
            type: 'BlockStatement',
            body: [
                {
                    type: 'BreakStatement',
                    label: null,
                    range: [15, 21],
                    loc: {
                        start: { line: 1, column: 15 },
                        end: { line: 1, column: 21 }
                    }
                }
            ],
            range: [13, 22],
            loc: {
                start: { line: 1, column: 13 },
                end: { line: 1, column: 22 }
            }
        },
        range: [0, 22],
        loc: {
            start: { line: 1, column: 0 },
            end: { line: 1, column: 22 }
        }
    },

    'done: while (true) { break done }': {
        type: 'LabeledStatement',
        label: {
            type: 'Identifier',
            name: 'done',
            range: [0, 4],
            loc: {
                start: { line: 1, column: 0 },
                end: { line: 1, column: 4 }
            }
        },
        body: {
            type: 'WhileStatement',
            test: {
                type: 'Literal',
                value: true,
                raw: 'true',
                range: [13, 17],
                loc: {
                    start: { line: 1, column: 13 },
                    end: { line: 1, column: 17 }
                }
            },
            body: {
                type: 'BlockStatement',
                body: [
                    {
                        type: 'BreakStatement',
                        label: {
                            type: 'Identifier',
                            name: 'done',
                            range: [27, 31],
                            loc: {
                                start: { line: 1, column: 27 },
                                end: { line: 1, column: 31 }
                            }
                        },
                        range: [21, 32],
                        loc: {
                            start: { line: 1, column: 21 },
                            end: { line: 1, column: 32 }
                        }
                    }
                ],
                range: [19, 33],
                loc: {
                    start: { line: 1, column: 19 },
                    end: { line: 1, column: 33 }
                }
            },
            range: [6, 33],
            loc: {
                start: { line: 1, column: 6 },
                end: { line: 1, column: 33 }
            }
        },
        range: [0, 33],
        loc: {
            start: { line: 1, column: 0 },
            end: { line: 1, column: 33 }
        }
    },

    'done: while (true) { break done; }': {
        type: 'LabeledStatement',
        label: {
            type: 'Identifier',
            name: 'done',
            range: [0, 4],
            loc: {
                start: { line: 1, column: 0 },
                end: { line: 1, column: 4 }
            }
        },
        body: {
            type: 'WhileStatement',
            test: {
                type: 'Literal',
                value: true,
                raw: 'true',
                range: [13, 17],
                loc: {
                    start: { line: 1, column: 13 },
                    end: { line: 1, column: 17 }
                }
            },
            body: {
                type: 'BlockStatement',
                body: [
                    {
                        type: 'BreakStatement',
                        label: {
                            type: 'Identifier',
                            name: 'done',
                            range: [27, 31],
                            loc: {
                                start: { line: 1, column: 27 },
                                end: { line: 1, column: 31 }
                            }
                        },
                        range: [21, 32],
                        loc: {
                            start: { line: 1, column: 21 },
                            end: { line: 1, column: 32 }
                        }
                    }
                ],
                range: [19, 34],
                loc: {
                    start: { line: 1, column: 19 },
                    end: { line: 1, column: 34 }
                }
            },
            range: [6, 34],
            loc: {
                start: { line: 1, column: 6 },
                end: { line: 1, column: 34 }
            }
        },
        range: [0, 34],
        loc: {
            start: { line: 1, column: 0 },
            end: { line: 1, column: 34 }
        }
    },

    '__proto__: while (true) { break __proto__; }': {
        type: 'LabeledStatement',
        label: {
            type: 'Identifier',
            name: '__proto__',
            range: [0, 9],
            loc: {
                start: { line: 1, column: 0 },
                end: { line: 1, column: 9 }
            }
        },
        body: {
            type: 'WhileStatement',
            test: {
                type: 'Literal',
                value: true,
                raw: 'true',
                range: [18, 22],
                loc: {
                    start: { line: 1, column: 18 },
                    end: { line: 1, column: 22 }
                }
            },
            body: {
                type: 'BlockStatement',
                body: [{
                    type: 'BreakStatement',
                    label: {
                        type: 'Identifier',
                        name: '__proto__',
                        range: [32, 41],
                        loc: {
                            start: { line: 1, column: 32 },
                            end: { line: 1, column: 41 }
                        }
                    },
                    range: [26, 42],
                    loc: {
                        start: { line: 1, column: 26 },
                        end: { line: 1, column: 42 }
                    }
                }],
                range: [24, 44],
                loc: {
                    start: { line: 1, column: 24 },
                    end: { line: 1, column: 44 }
                }
            },
            range: [11, 44],
            loc: {
                start: { line: 1, column: 11 },
                end: { line: 1, column: 44 }
            }
        },
        range: [0, 44],
        loc: {
            start: { line: 1, column: 0 },
            end: { line: 1, column: 44 }
        }
    }

},

'return statement': {

    '(function(){ return })': {
        type: 'ExpressionStatement',
        expression: {
            type: 'FunctionExpression',
            id: null,
            params: [],
            defaults: [],
            body: {
                type: 'BlockStatement',
                body: [
                    {
                        type: 'ReturnStatement',
                        argument: null,
                        range: [13, 20],
                        loc: {
                            start: { line: 1, column: 13 },
                            end: { line: 1, column: 20 }
                        }
                    }
                ],
                range: [11, 21],
                loc: {
                    start: { line: 1, column: 11 },
                    end: { line: 1, column: 21 }
                }
            },
            rest: null,
            generator: false,
            expression: false,
            range: [1, 21],
            loc: {
                start: { line: 1, column: 1 },
                end: { line: 1, column: 21 }
            }
        },
        range: [0, 22],
        loc: {
            start: { line: 1, column: 0 },
            end: { line: 1, column: 22 }
        }
    },

    '(function(){ return; })': {
        type: 'ExpressionStatement',
        expression: {
            type: 'FunctionExpression',
            id: null,
            params: [],
            defaults: [],
            body: {
                type: 'BlockStatement',
                body: [
                    {
                        type: 'ReturnStatement',
                        argument: null,
                        range: [13, 20],
                        loc: {
                            start: { line: 1, column: 13 },
                            end: { line: 1, column: 20 }
                        }
                    }
                ],
                range: [11, 22],
                loc: {
                    start: { line: 1, column: 11 },
                    end: { line: 1, column: 22 }
                }
            },
            rest: null,
            generator: false,
            expression: false,
            range: [1, 22],
            loc: {
                start: { line: 1, column: 1 },
                end: { line: 1, column: 22 }
            }
        },
        range: [0, 23],
        loc: {
            start: { line: 1, column: 0 },
            end: { line: 1, column: 23 }
        }
    },

    '(function(){ return x; })': {
        type: 'ExpressionStatement',
        expression: {
            type: 'FunctionExpression',
            id: null,
            params: [],
            defaults: [],
            body: {
                type: 'BlockStatement',
                body: [
                    {
                        type: 'ReturnStatement',
                        argument: {
                            type: 'Identifier',
                            name: 'x',
                            range: [20, 21],
                            loc: {
                                start: { line: 1, column: 20 },
                                end: { line: 1, column: 21 }
                            }
                        },
                        range: [13, 22],
                        loc: {
                            start: { line: 1, column: 13 },
                            end: { line: 1, column: 22 }
                        }
                    }
                ],
                range: [11, 24],
                loc: {
                    start: { line: 1, column: 11 },
                    end: { line: 1, column: 24 }
                }
            },
            rest: null,
            generator: false,
            expression: false,
            range: [1, 24],
            loc: {
                start: { line: 1, column: 1 },
                end: { line: 1, column: 24 }
            }
        },
        range: [0, 25],
        loc: {
            start: { line: 1, column: 0 },
            end: { line: 1, column: 25 }
        }
    },

    '(function(){ return x * y })': {
        type: 'ExpressionStatement',
        expression: {
            type: 'FunctionExpression',
            id: null,
            params: [],
            defaults: [],
            body: {
                type: 'BlockStatement',
                body: [
                    {
                        type: 'ReturnStatement',
                        argument: {
                            type: 'BinaryExpression',
                            operator: '*',
                            left: {
                                type: 'Identifier',
                                name: 'x',
                                range: [20, 21],
                                loc: {
                                    start: { line: 1, column: 20 },
                                    end: { line: 1, column: 21 }
                                }
                            },
                            right: {
                                type: 'Identifier',
                                name: 'y',
                                range: [24, 25],
                                loc: {
                                    start: { line: 1, column: 24 },
                                    end: { line: 1, column: 25 }
                                }
                            },
                            range: [20, 25],
                            loc: {
                                start: { line: 1, column: 20 },
                                end: { line: 1, column: 25 }
                            }
                        },
                        range: [13, 26],
                        loc: {
                            start: { line: 1, column: 13 },
                            end: { line: 1, column: 26 }
                        }
                    }
                ],
                range: [11, 27],
                loc: {
                    start: { line: 1, column: 11 },
                    end: { line: 1, column: 27 }
                }
            },
            rest: null,
            generator: false,
            expression: false,
            range: [1, 27],
            loc: {
                start: { line: 1, column: 1 },
                end: { line: 1, column: 27 }
            }
        },
        range: [0, 28],
        loc: {
            start: { line: 1, column: 0 },
            end: { line: 1, column: 28 }
        }
    }
},

'with statement': {

    'with (x) foo = bar': {
        type: 'WithStatement',
        object: {
            type: 'Identifier',
            name: 'x',
            range: [6, 7],
            loc: {
                start: { line: 1, column: 6 },
                end: { line: 1, column: 7 }
            }
        },
        body: {
            type: 'ExpressionStatement',
            expression: {
                type: 'AssignmentExpression',
                operator: '=',
                left: {
                    type: 'Identifier',
                    name: 'foo',
                    range: [9, 12],
                    loc: {
                        start: { line: 1, column: 9 },
                        end: { line: 1, column: 12 }
                    }
                },
                right: {
                    type: 'Identifier',
                    name: 'bar',
                    range: [15, 18],
                    loc: {
                        start: { line: 1, column: 15 },
                        end: { line: 1, column: 18 }
                    }
                },
                range: [9, 18],
                loc: {
                    start: { line: 1, column: 9 },
                    end: { line: 1, column: 18 }
                }
            },
            range: [9, 18],
            loc: {
                start: { line: 1, column: 9 },
                end: { line: 1, column: 18 }
            }
        },
        range: [0, 18],
        loc: {
            start: { line: 1, column: 0 },
            end: { line: 1, column: 18 }
        }
    },

    'with (x) foo = bar;': {
        type: 'WithStatement',
        object: {
            type: 'Identifier',
            name: 'x',
            range: [6, 7],
            loc: {
                start: { line: 1, column: 6 },
                end: { line: 1, column: 7 }
            }
        },
        body: {
            type: 'ExpressionStatement',
            expression: {
                type: 'AssignmentExpression',
                operator: '=',
                left: {
                    type: 'Identifier',
                    name: 'foo',
                    range: [9, 12],
                    loc: {
                        start: { line: 1, column: 9 },
                        end: { line: 1, column: 12 }
                    }
                },
                right: {
                    type: 'Identifier',
                    name: 'bar',
                    range: [15, 18],
                    loc: {
                        start: { line: 1, column: 15 },
                        end: { line: 1, column: 18 }
                    }
                },
                range: [9, 18],
                loc: {
                    start: { line: 1, column: 9 },
                    end: { line: 1, column: 18 }
                }
            },
            range: [9, 19],
            loc: {
                start: { line: 1, column: 9 },
                end: { line: 1, column: 19 }
            }
        },
        range: [0, 19],
        loc: {
            start: { line: 1, column: 0 },
            end: { line: 1, column: 19 }
        }
    },

    'with (x) { foo = bar }': {
        type: 'WithStatement',
        object: {
            type: 'Identifier',
            name: 'x',
            range: [6, 7],
            loc: {
                start: { line: 1, column: 6 },
                end: { line: 1, column: 7 }
            }
        },
        body: {
            type: 'BlockStatement',
            body: [{
                type: 'ExpressionStatement',
                expression: {
                    type: 'AssignmentExpression',
                    operator: '=',
                    left: {
                        type: 'Identifier',
                        name: 'foo',
                        range: [11, 14],
                        loc: {
                            start: { line: 1, column: 11 },
                            end: { line: 1, column: 14 }
                        }
                    },
                    right: {
                        type: 'Identifier',
                        name: 'bar',
                        range: [17, 20],
                        loc: {
                            start: { line: 1, column: 17 },
                            end: { line: 1, column: 20 }
                        }
                    },
                    range: [11, 20],
                    loc: {
                        start: { line: 1, column: 11 },
                        end: { line: 1, column: 20 }
                    }
                },
                range: [11, 21],
                loc: {
                    start: { line: 1, column: 11 },
                    end: { line: 1, column: 21 }
                }
            }],
            range: [9, 22],
            loc: {
                start: { line: 1, column: 9 },
                end: { line: 1, column: 22 }
            }
        },
        range: [0, 22],
        loc: {
            start: { line: 1, column: 0 },
            end: { line: 1, column: 22 }
        }
    }

},

'switch statement': {

    'switch (x) {}': {
        type: 'SwitchStatement',
        discriminant: {
            type: 'Identifier',
            name: 'x',
            range: [8, 9],
            loc: {
                start: { line: 1, column: 8 },
                end: { line: 1, column: 9 }
            }
        },
        cases:[],
        range: [0, 13],
        loc: {
            start: { line: 1, column: 0 },
            end: { line: 1, column: 13 }
        }
    },

    'switch (answer) { case 42: hi(); break; }': {
        type: 'SwitchStatement',
        discriminant: {
            type: 'Identifier',
            name: 'answer',
            range: [8, 14],
            loc: {
                start: { line: 1, column: 8 },
                end: { line: 1, column: 14 }
            }
        },
        cases: [{
            type: 'SwitchCase',
            test: {
                type: 'Literal',
                value: 42,
                raw: '42',
                range: [23, 25],
                loc: {
                    start: { line: 1, column: 23 },
                    end: { line: 1, column: 25 }
                }
            },
            consequent: [{
                type: 'ExpressionStatement',
                expression: {
                    type: 'CallExpression',
                    callee: {
                        type: 'Identifier',
                        name: 'hi',
                        range: [27, 29],
                        loc: {
                            start: { line: 1, column: 27 },
                            end: { line: 1, column: 29 }
                        }
                    },
                    'arguments': [],
                    range: [27, 31],
                    loc: {
                        start: { line: 1, column: 27 },
                        end: { line: 1, column: 31 }
                    }
                },
                range: [27, 32],
                loc: {
                    start: { line: 1, column: 27 },
                    end: { line: 1, column: 32 }
                }
            }, {
                type: 'BreakStatement',
                label: null,
                range: [33, 39],
                loc: {
                    start: { line: 1, column: 33 },
                    end: { line: 1, column: 39 }
                }
            }],
            range: [18, 39],
            loc: {
                start: { line: 1, column: 18 },
                end: { line: 1, column: 39 }
            }
        }],
        range: [0, 41],
        loc: {
            start: { line: 1, column: 0 },
            end: { line: 1, column: 41 }
        }
    },

    'switch (answer) { case 42: hi(); break; default: break }': {
        type: 'SwitchStatement',
        discriminant: {
            type: 'Identifier',
            name: 'answer',
            range: [8, 14],
            loc: {
                start: { line: 1, column: 8 },
                end: { line: 1, column: 14 }
            }
        },
        cases: [{
            type: 'SwitchCase',
            test: {
                type: 'Literal',
                value: 42,
                raw: '42',
                range: [23, 25],
                loc: {
                    start: { line: 1, column: 23 },
                    end: { line: 1, column: 25 }
                }
            },
            consequent: [{
                type: 'ExpressionStatement',
                expression: {
                    type: 'CallExpression',
                    callee: {
                        type: 'Identifier',
                        name: 'hi',
                        range: [27, 29],
                        loc: {
                            start: { line: 1, column: 27 },
                            end: { line: 1, column: 29 }
                        }
                    },
                    'arguments': [],
                    range: [27, 31],
                    loc: {
                        start: { line: 1, column: 27 },
                        end: { line: 1, column: 31 }
                    }
                },
                range: [27, 32],
                loc: {
                    start: { line: 1, column: 27 },
                    end: { line: 1, column: 32 }
                }
            }, {
                type: 'BreakStatement',
                label: null,
                range: [33, 39],
                loc: {
                    start: { line: 1, column: 33 },
                    end: { line: 1, column: 39 }
                }
            }],
            range: [18, 39],
            loc: {
                start: { line: 1, column: 18 },
                end: { line: 1, column: 39 }
            }
        }, {
            type: 'SwitchCase',
            test: null,
            consequent: [{
                type: 'BreakStatement',
                label: null,
                range: [49, 55],
                loc: {
                    start: { line: 1, column: 49 },
                    end: { line: 1, column: 55 }
                }
            }],
            range: [40, 55],
            loc: {
                start: { line: 1, column: 40 },
                end: { line: 1, column: 55 }
            }
        }],
        range: [0, 56],
        loc: {
            start: { line: 1, column: 0 },
            end: { line: 1, column: 56 }
        }
    }

},

'Labelled Statements': {

    'start: for (;;) break start': {
        type: 'LabeledStatement',
        label: {
            type: 'Identifier',
            name: 'start',
            range: [0, 5],
            loc: {
                start: { line: 1, column: 0 },
                end: { line: 1, column: 5 }
            }
        },
        body: {
            type: 'ForStatement',
            init: null,
            test: null,
            update: null,
            body: {
                type: 'BreakStatement',
                label: {
                    type: 'Identifier',
                    name: 'start',
                    range: [22, 27],
                    loc: {
                        start: { line: 1, column: 22 },
                        end: { line: 1, column: 27 }
                    }
                },
                range: [16, 27],
                loc: {
                    start: { line: 1, column: 16 },
                    end: { line: 1, column: 27 }
                }
            },
            range: [7, 27],
            loc: {
                start: { line: 1, column: 7 },
                end: { line: 1, column: 27 }
            }
        },
        range: [0, 27],
        loc: {
            start: { line: 1, column: 0 },
            end: { line: 1, column: 27 }
        }
    },

    'start: while (true) break start': {
        type: 'LabeledStatement',
        label: {
            type: 'Identifier',
            name: 'start',
            range: [0, 5],
            loc: {
                start: { line: 1, column: 0 },
                end: { line: 1, column: 5 }
            }
        },
        body: {
            type: 'WhileStatement',
            test: {
                type: 'Literal',
                value: true,
                raw: 'true',
                range: [14, 18],
                loc: {
                    start: { line: 1, column: 14 },
                    end: { line: 1, column: 18 }
                }
            },
            body: {
                type: 'BreakStatement',
                label: {
                    type: 'Identifier',
                    name: 'start',
                    range: [26, 31],
                    loc: {
                        start: { line: 1, column: 26 },
                        end: { line: 1, column: 31 }
                    }
                },
                range: [20, 31],
                loc: {
                    start: { line: 1, column: 20 },
                    end: { line: 1, column: 31 }
                }
            },
            range: [7, 31],
            loc: {
                start: { line: 1, column: 7 },
                end: { line: 1, column: 31 }
            }
        },
        range: [0, 31],
        loc: {
            start: { line: 1, column: 0 },
            end: { line: 1, column: 31 }
        }
    },

    '__proto__: test': {
        type: 'LabeledStatement',
        label: {
            type: 'Identifier',
            name: '__proto__',
            range: [0, 9],
            loc: {
                start: { line: 1, column: 0 },
                end: { line: 1, column: 9 }
            }
        },
        body: {
            type: 'ExpressionStatement',
            expression: {
                type: 'Identifier',
                name: 'test',
                range: [11, 15],
                loc: {
                    start: { line: 1, column: 11 },
                    end: { line: 1, column: 15 }
                }
            },
            range: [11, 15],
            loc: {
                start: { line: 1, column: 11 },
                end: { line: 1, column: 15 }
            }
        },
        range: [0, 15],
        loc: {
            start: { line: 1, column: 0 },
            end: { line: 1, column: 15 }
        }
    }

},

'throw statement': {

    'throw x;': {
        type: 'ThrowStatement',
        argument: {
            type: 'Identifier',
            name: 'x',
            range: [6, 7],
            loc: {
                start: { line: 1, column: 6 },
                end: { line: 1, column: 7 }
            }
        },
        range: [0, 8],
        loc: {
            start: { line: 1, column: 0 },
            end: { line: 1, column: 8 }
        }
    },

    'throw x * y': {
        type: 'ThrowStatement',
        argument: {
            type: 'BinaryExpression',
            operator: '*',
            left: {
                type: 'Identifier',
                name: 'x',
                range: [6, 7],
                loc: {
                    start: { line: 1, column: 6 },
                    end: { line: 1, column: 7 }
                }
            },
            right: {
                type: 'Identifier',
                name: 'y',
                range: [10, 11],
                loc: {
                    start: { line: 1, column: 10 },
                    end: { line: 1, column: 11 }
                }
            },
            range: [6, 11],
            loc: {
                start: { line: 1, column: 6 },
                end: { line: 1, column: 11 }
            }
        },
        range: [0, 11],
        loc: {
            start: { line: 1, column: 0 },
            end: { line: 1, column: 11 }
        }
    },

    'throw { message: "Error" }': {
        type: 'ThrowStatement',
        argument: {
            type: 'ObjectExpression',
            properties: [{
                type: 'Property',
                key: {
                    type: 'Identifier',
                    name: 'message',
                    range: [8, 15],
                    loc: {
                        start: { line: 1, column: 8 },
                        end: { line: 1, column: 15 }
                    }
                },
                value: {
                    type: 'Literal',
                    value: 'Error',
                    raw: '"Error"',
                    range: [17, 24],
                    loc: {
                        start: { line: 1, column: 17 },
                        end: { line: 1, column: 24 }
                    }
                },
                kind: 'init',
                range: [8, 24],
                loc: {
                    start: { line: 1, column: 8 },
                    end: { line: 1, column: 24 }
                }
            }],
            range: [6, 26],
            loc: {
                start: { line: 1, column: 6 },
                end: { line: 1, column: 26 }
            }
        },
        range: [0, 26],
        loc: {
            start: { line: 1, column: 0 },
            end: { line: 1, column: 26 }
        }
    }

},

'try statement': {

    'try { } catch (e) { }': {
        type: 'TryStatement',
        block: {
            type: 'BlockStatement',
            body: [],
            range: [4, 7],
            loc: {
                start: { line: 1, column: 4 },
                end: { line: 1, column: 7 }
            }
        },
        guardedHandlers: [],
        handlers: [{
            type: 'CatchClause',
            param: {
                type: 'Identifier',
                name: 'e',
                range: [15, 16],
                loc: {
                    start: { line: 1, column: 15 },
                    end: { line: 1, column: 16 }
                }
            },
            body: {
                type: 'BlockStatement',
                body: [],
                range: [18, 21],
                loc: {
                    start: { line: 1, column: 18 },
                    end: { line: 1, column: 21 }
                }
            },
            range: [8, 21],
            loc: {
                start: { line: 1, column: 8 },
                end: { line: 1, column: 21 }
            }
        }],
        finalizer: null,
        range: [0, 21],
        loc: {
            start: { line: 1, column: 0 },
            end: { line: 1, column: 21 }
        }
    },

    'try { } catch (eval) { }': {
        type: 'TryStatement',
        block: {
            type: 'BlockStatement',
            body: [],
            range: [4, 7],
            loc: {
                start: { line: 1, column: 4 },
                end: { line: 1, column: 7 }
            }
        },
        guardedHandlers: [],
        handlers: [{
            type: 'CatchClause',
            param: {
                type: 'Identifier',
                name: 'eval',
                range: [15, 19],
                loc: {
                    start: { line: 1, column: 15 },
                    end: { line: 1, column: 19 }
                }
            },
            body: {
                type: 'BlockStatement',
                body: [],
                range: [21, 24],
                loc: {
                    start: { line: 1, column: 21 },
                    end: { line: 1, column: 24 }
                }
            },
            range: [8, 24],
            loc: {
                start: { line: 1, column: 8 },
                end: { line: 1, column: 24 }
            }
        }],
        finalizer: null,
        range: [0, 24],
        loc: {
            start: { line: 1, column: 0 },
            end: { line: 1, column: 24 }
        }
    },

    'try { } catch (arguments) { }': {
        type: 'TryStatement',
        block: {
            type: 'BlockStatement',
            body: [],
            range: [4, 7],
            loc: {
                start: { line: 1, column: 4 },
                end: { line: 1, column: 7 }
            }
        },
        guardedHandlers: [],
        handlers: [{
            type: 'CatchClause',
            param: {
                type: 'Identifier',
                name: 'arguments',
                range: [15, 24],
                loc: {
                    start: { line: 1, column: 15 },
                    end: { line: 1, column: 24 }
                }
            },
            body: {
                type: 'BlockStatement',
                body: [],
                range: [26, 29],
                loc: {
                    start: { line: 1, column: 26 },
                    end: { line: 1, column: 29 }
                }
            },
            range: [8, 29],
            loc: {
                start: { line: 1, column: 8 },
                end: { line: 1, column: 29 }
            }
        }],
        finalizer: null,
        range: [0, 29],
        loc: {
            start: { line: 1, column: 0 },
            end: { line: 1, column: 29 }
        }
    },

    'try { } catch (e) { say(e) }': {
        type: 'TryStatement',
        block: {
            type: 'BlockStatement',
            body: [],
            range: [4, 7],
            loc: {
                start: { line: 1, column: 4 },
                end: { line: 1, column: 7 }
            }
        },
        guardedHandlers: [],
        handlers: [{
            type: 'CatchClause',
            param: {
                type: 'Identifier',
                name: 'e',
                range: [15, 16],
                loc: {
                    start: { line: 1, column: 15 },
                    end: { line: 1, column: 16 }
                }
            },
            body: {
                type: 'BlockStatement',
                body: [{
                    type: 'ExpressionStatement',
                    expression: {
                        type: 'CallExpression',
                        callee: {
                            type: 'Identifier',
                            name: 'say',
                            range: [20, 23],
                            loc: {
                                start: { line: 1, column: 20 },
                                end: { line: 1, column: 23 }
                            }
                        },
                        'arguments': [{
                            type: 'Identifier',
                            name: 'e',
                            range: [24, 25],
                            loc: {
                                start: { line: 1, column: 24 },
                                end: { line: 1, column: 25 }
                            }
                        }],
                        range: [20, 26],
                        loc: {
                            start: { line: 1, column: 20 },
                            end: { line: 1, column: 26 }
                        }
                    },
                    range: [20, 27],
                    loc: {
                        start: { line: 1, column: 20 },
                        end: { line: 1, column: 27 }
                    }
                }],
                range: [18, 28],
                loc: {
                    start: { line: 1, column: 18 },
                    end: { line: 1, column: 28 }
                }
            },
            range: [8, 28],
            loc: {
                start: { line: 1, column: 8 },
                end: { line: 1, column: 28 }
            }
        }],
        finalizer: null,
        range: [0, 28],
        loc: {
            start: { line: 1, column: 0 },
            end: { line: 1, column: 28 }
        }
    },

    'try { } finally { cleanup(stuff) }': {
        type: 'TryStatement',
        block: {
            type: 'BlockStatement',
            body: [],
            range: [4, 7],
            loc: {
                start: { line: 1, column: 4 },
                end: { line: 1, column: 7 }
            }
        },
        guardedHandlers: [],
        handlers: [],
        finalizer: {
            type: 'BlockStatement',
            body: [{
                type: 'ExpressionStatement',
                expression: {
                    type: 'CallExpression',
                    callee: {
                        type: 'Identifier',
                        name: 'cleanup',
                        range: [18, 25],
                        loc: {
                            start: { line: 1, column: 18 },
                            end: { line: 1, column: 25 }
                        }
                    },
                    'arguments': [{
                        type: 'Identifier',
                        name: 'stuff',
                        range: [26, 31],
                        loc: {
                            start: { line: 1, column: 26 },
                            end: { line: 1, column: 31 }
                        }
                    }],
                    range: [18, 32],
                    loc: {
                        start: { line: 1, column: 18 },
                        end: { line: 1, column: 32 }
                    }
                },
                range: [18, 33],
                loc: {
                    start: { line: 1, column: 18 },
                    end: { line: 1, column: 33 }
                }
            }],
            range: [16, 34],
            loc: {
                start: { line: 1, column: 16 },
                end: { line: 1, column: 34 }
            }
        },
        range: [0, 34],
        loc: {
            start: { line: 1, column: 0 },
            end: { line: 1, column: 34 }
        }
    },

    'try { doThat(); } catch (e) { say(e) }': {
        type: 'TryStatement',
        block: {
            type: 'BlockStatement',
            body: [{
                type: 'ExpressionStatement',
                expression: {
                    type: 'CallExpression',
                    callee: {
                        type: 'Identifier',
                        name: 'doThat',
                        range: [6, 12],
                        loc: {
                            start: { line: 1, column: 6 },
                            end: { line: 1, column: 12 }
                        }
                    },
                    'arguments': [],
                    range: [6, 14],
                    loc: {
                        start: { line: 1, column: 6 },
                        end: { line: 1, column: 14 }
                    }
                },
                range: [6, 15],
                loc: {
                    start: { line: 1, column: 6 },
                    end: { line: 1, column: 15 }
                }
            }],
            range: [4, 17],
            loc: {
                start: { line: 1, column: 4 },
                end: { line: 1, column: 17 }
            }
        },
        guardedHandlers: [],
        handlers: [{
            type: 'CatchClause',
            param: {
                type: 'Identifier',
                name: 'e',
                range: [25, 26],
                loc: {
                    start: { line: 1, column: 25 },
                    end: { line: 1, column: 26 }
                }
            },
            body: {
                type: 'BlockStatement',
                body: [{
                    type: 'ExpressionStatement',
                    expression: {
                        type: 'CallExpression',
                        callee: {
                            type: 'Identifier',
                            name: 'say',
                            range: [30, 33],
                            loc: {
                                start: { line: 1, column: 30 },
                                end: { line: 1, column: 33 }
                            }
                        },
                        'arguments': [{
                            type: 'Identifier',
                            name: 'e',
                            range: [34, 35],
                            loc: {
                                start: { line: 1, column: 34 },
                                end: { line: 1, column: 35 }
                            }
                        }],
                        range: [30, 36],
                        loc: {
                            start: { line: 1, column: 30 },
                            end: { line: 1, column: 36 }
                        }
                    },
                    range: [30, 37],
                    loc: {
                        start: { line: 1, column: 30 },
                        end: { line: 1, column: 37 }
                    }
                }],
                range: [28, 38],
                loc: {
                    start: { line: 1, column: 28 },
                    end: { line: 1, column: 38 }
                }
            },
            range: [18, 38],
            loc: {
                start: { line: 1, column: 18 },
                end: { line: 1, column: 38 }
            }
        }],
        finalizer: null,
        range: [0, 38],
        loc: {
            start: { line: 1, column: 0 },
            end: { line: 1, column: 38 }
        }
    },

    'try { doThat(); } catch (e) { say(e) } finally { cleanup(stuff) }': {
        type: 'TryStatement',
        block: {
            type: 'BlockStatement',
            body: [{
                type: 'ExpressionStatement',
                expression: {
                    type: 'CallExpression',
                    callee: {
                        type: 'Identifier',
                        name: 'doThat',
                        range: [6, 12],
                        loc: {
                            start: { line: 1, column: 6 },
                            end: { line: 1, column: 12 }
                        }
                    },
                    'arguments': [],
                    range: [6, 14],
                    loc: {
                        start: { line: 1, column: 6 },
                        end: { line: 1, column: 14 }
                    }
                },
                range: [6, 15],
                loc: {
                    start: { line: 1, column: 6 },
                    end: { line: 1, column: 15 }
                }
            }],
            range: [4, 17],
            loc: {
                start: { line: 1, column: 4 },
                end: { line: 1, column: 17 }
            }
        },
        guardedHandlers: [],
        handlers: [{
            type: 'CatchClause',
            param: {
                type: 'Identifier',
                name: 'e',
                range: [25, 26],
                loc: {
                    start: { line: 1, column: 25 },
                    end: { line: 1, column: 26 }
                }
            },
            body: {
                type: 'BlockStatement',
                body: [{
                    type: 'ExpressionStatement',
                    expression: {
                        type: 'CallExpression',
                        callee: {
                            type: 'Identifier',
                            name: 'say',
                            range: [30, 33],
                            loc: {
                                start: { line: 1, column: 30 },
                                end: { line: 1, column: 33 }
                            }
                        },
                        'arguments': [{
                            type: 'Identifier',
                            name: 'e',
                            range: [34, 35],
                            loc: {
                                start: { line: 1, column: 34 },
                                end: { line: 1, column: 35 }
                            }
                        }],
                        range: [30, 36],
                        loc: {
                            start: { line: 1, column: 30 },
                            end: { line: 1, column: 36 }
                        }
                    },
                    range: [30, 37],
                    loc: {
                        start: { line: 1, column: 30 },
                        end: { line: 1, column: 37 }
                    }
                }],
                range: [28, 38],
                loc: {
                    start: { line: 1, column: 28 },
                    end: { line: 1, column: 38 }
                }
            },
            range: [18, 38],
            loc: {
                start: { line: 1, column: 18 },
                end: { line: 1, column: 38 }
            }
        }],
        finalizer: {
            type: 'BlockStatement',
            body: [{
                type: 'ExpressionStatement',
                expression: {
                    type: 'CallExpression',
                    callee: {
                        type: 'Identifier',
                        name: 'cleanup',
                        range: [49, 56],
                        loc: {
                            start: { line: 1, column: 49 },
                            end: { line: 1, column: 56 }
                        }
                    },
                    'arguments': [{
                        type: 'Identifier',
                        name: 'stuff',
                        range: [57, 62],
                        loc: {
                            start: { line: 1, column: 57 },
                            end: { line: 1, column: 62 }
                        }
                    }],
                    range: [49, 63],
                    loc: {
                        start: { line: 1, column: 49 },
                        end: { line: 1, column: 63 }
                    }
                },
                range: [49, 64],
                loc: {
                    start: { line: 1, column: 49 },
                    end: { line: 1, column: 64 }
                }
            }],
            range: [47, 65],
            loc: {
                start: { line: 1, column: 47 },
                end: { line: 1, column: 65 }
            }
        },
        range: [0, 65],
        loc: {
            start: { line: 1, column: 0 },
            end: { line: 1, column: 65 }
        }
    }

},

'debugger statement': {

    'debugger;': {
        type: 'DebuggerStatement',
        range: [0, 9],
        loc: {
            start: { line: 1, column: 0 },
            end: { line: 1, column: 9 }
        }
    }

},

'Function Definition': {

    'function hello() { sayHi(); }': {
        type: 'FunctionDeclaration',
        id: {
            type: 'Identifier',
            name: 'hello',
            range: [9, 14],
            loc: {
                start: { line: 1, column: 9 },
                end: { line: 1, column: 14 }
            }
        },
        params: [],
        defaults: [],
        body: {
            type: 'BlockStatement',
            body: [{
                type: 'ExpressionStatement',
                expression: {
                    type: 'CallExpression',
                    callee: {
                        type: 'Identifier',
                        name: 'sayHi',
                        range: [19, 24],
                        loc: {
                            start: { line: 1, column: 19 },
                            end: { line: 1, column: 24 }
                        }
                    },
                    'arguments': [],
                    range: [19, 26],
                    loc: {
                        start: { line: 1, column: 19 },
                        end: { line: 1, column: 26 }
                    }
                },
                range: [19, 27],
                loc: {
                    start: { line: 1, column: 19 },
                    end: { line: 1, column: 27 }
                }
            }],
            range: [17, 29],
            loc: {
                start: { line: 1, column: 17 },
                end: { line: 1, column: 29 }
            }
        },
        rest: null,
        generator: false,
        expression: false,
        range: [0, 29],
        loc: {
            start: { line: 1, column: 0 },
            end: { line: 1, column: 29 }
        }
    },

    'function eval() { }': {
        type: 'FunctionDeclaration',
        id: {
            type: 'Identifier',
            name: 'eval',
            range: [9, 13],
            loc: {
                start: { line: 1, column: 9 },
                end: { line: 1, column: 13 }
            }
        },
        params: [],
        defaults: [],
        body: {
            type: 'BlockStatement',
            body: [],
            range: [16, 19],
            loc: {
                start: { line: 1, column: 16 },
                end: { line: 1, column: 19 }
            }
        },
        rest: null,
        generator: false,
        expression: false,
        range: [0, 19],
        loc: {
            start: { line: 1, column: 0 },
            end: { line: 1, column: 19 }
        }
    },

    'function arguments() { }': {
        type: 'FunctionDeclaration',
        id: {
            type: 'Identifier',
            name: 'arguments',
            range: [9, 18],
            loc: {
                start: { line: 1, column: 9 },
                end: { line: 1, column: 18 }
            }
        },
        params: [],
        defaults: [],
        body: {
            type: 'BlockStatement',
            body: [],
            range: [21, 24],
            loc: {
                start: { line: 1, column: 21 },
                end: { line: 1, column: 24 }
            }
        },
        rest: null,
        generator: false,
        expression: false,
        range: [0, 24],
        loc: {
            start: { line: 1, column: 0 },
            end: { line: 1, column: 24 }
        }
    },

    'function test(t, t) { }': {
        type: 'FunctionDeclaration',
        id: {
            type: 'Identifier',
            name: 'test',
            range: [9, 13],
            loc: {
                start: { line: 1, column: 9 },
                end: { line: 1, column: 13 }
            }
        },
        params: [{
            type: 'Identifier',
            name: 't',
            range: [14, 15],
            loc: {
                start: { line: 1, column: 14 },
                end: { line: 1, column: 15 }
            }
        }, {
            type: 'Identifier',
            name: 't',
            range: [17, 18],
            loc: {
                start: { line: 1, column: 17 },
                end: { line: 1, column: 18 }
            }
        }],
        defaults: [],
        body: {
            type: 'BlockStatement',
            body: [],
            range: [20, 23],
            loc: {
                start: { line: 1, column: 20 },
                end: { line: 1, column: 23 }
            }
        },
        rest: null,
        generator: false,
        expression: false,
        range: [0, 23],
        loc: {
            start: { line: 1, column: 0 },
            end: { line: 1, column: 23 }
        }
    },

    '(function test(t, t) { })': {
        type: 'ExpressionStatement',
        expression: {
            type: 'FunctionExpression',
            id: {
                type: 'Identifier',
                name: 'test',
                range: [10, 14],
                loc: {
                    start: { line: 1, column: 10 },
                    end: { line: 1, column: 14 }
                }
            },
            params: [{
                type: 'Identifier',
                name: 't',
                range: [15, 16],
                loc: {
                    start: { line: 1, column: 15 },
                    end: { line: 1, column: 16 }
                }
            }, {
                type: 'Identifier',
                name: 't',
                range: [18, 19],
                loc: {
                    start: { line: 1, column: 18 },
                    end: { line: 1, column: 19 }
                }
            }],
            defaults: [],
            body: {
                type: 'BlockStatement',
                body: [],
                range: [21, 24],
                loc: {
                    start: { line: 1, column: 21 },
                    end: { line: 1, column: 24 }
                }
            },
            rest: null,
            generator: false,
            expression: false,
            range: [1, 24],
            loc: {
                start: { line: 1, column: 1 },
                end: { line: 1, column: 24 }
            }
        },
        range: [0, 25],
        loc: {
            start: { line: 1, column: 0 },
            end: { line: 1, column: 25 }
        }
    },

    'function eval() { function inner() { "use strict" } }': {
        type: 'FunctionDeclaration',
        id: {
            type: 'Identifier',
            name: 'eval',
            range: [9, 13],
            loc: {
                start: { line: 1, column: 9 },
                end: { line: 1, column: 13 }
            }
        },
        params: [],
        defaults: [],
        body: {
            type: 'BlockStatement',
            body: [{
                type: 'FunctionDeclaration',
                id: {
                    type: 'Identifier',
                    name: 'inner',
                    range: [27, 32],
                    loc: {
                        start: { line: 1, column: 27 },
                        end: { line: 1, column: 32 }
                    }
                },
                params: [],
                defaults: [],
                body: {
                    type: 'BlockStatement',
                    body: [{
                        type: 'ExpressionStatement',
                        expression: {
                            type: 'Literal',
                            value: 'use strict',
                            raw: '\"use strict\"',
                            range: [37, 49],
                            loc: {
                                start: { line: 1, column: 37 },
                                end: { line: 1, column: 49 }
                            }
                        },
                        range: [37, 50],
                        loc: {
                            start: { line: 1, column: 37 },
                            end: { line: 1, column: 50 }
                        }
                    }],
                    range: [35, 51],
                    loc: {
                        start: { line: 1, column: 35 },
                        end: { line: 1, column: 51 }
                    }
                },
                rest: null,
                generator: false,
                expression: false,
                range: [18, 51],
                loc: {
                    start: { line: 1, column: 18 },
                    end: { line: 1, column: 51 }
                }
            }],
            range: [16, 53],
            loc: {
                start: { line: 1, column: 16 },
                end: { line: 1, column: 53 }
            }
        },
        rest: null,
        generator: false,
        expression: false,
        range: [0, 53],
        loc: {
            start: { line: 1, column: 0 },
            end: { line: 1, column: 53 }
        }
    },

    'function hello(a) { sayHi(); }': {
        type: 'FunctionDeclaration',
        id: {
            type: 'Identifier',
            name: 'hello',
            range: [9, 14],
            loc: {
                start: { line: 1, column: 9 },
                end: { line: 1, column: 14 }
            }
        },
        params: [{
            type: 'Identifier',
            name: 'a',
            range: [15, 16],
            loc: {
                start: { line: 1, column: 15 },
                end: { line: 1, column: 16 }
            }
        }],
        defaults: [],
        body: {
            type: 'BlockStatement',
            body: [{
                type: 'ExpressionStatement',
                expression: {
                    type: 'CallExpression',
                    callee: {
                        type: 'Identifier',
                        name: 'sayHi',
                        range: [20, 25],
                        loc: {
                            start: { line: 1, column: 20 },
                            end: { line: 1, column: 25 }
                        }
                    },
                    'arguments': [],
                    range: [20, 27],
                    loc: {
                        start: { line: 1, column: 20 },
                        end: { line: 1, column: 27 }
                    }
                },
                range: [20, 28],
                loc: {
                    start: { line: 1, column: 20 },
                    end: { line: 1, column: 28 }
                }
            }],
            range: [18, 30],
            loc: {
                start: { line: 1, column: 18 },
                end: { line: 1, column: 30 }
            }
        },
        rest: null,
        generator: false,
        expression: false,
        range: [0, 30],
        loc: {
            start: { line: 1, column: 0 },
            end: { line: 1, column: 30 }
        }
    },

    'function hello(a, b) { sayHi(); }': {
        type: 'FunctionDeclaration',
        id: {
            type: 'Identifier',
            name: 'hello',
            range: [9, 14],
            loc: {
                start: { line: 1, column: 9 },
                end: { line: 1, column: 14 }
            }
        },
        params: [{
            type: 'Identifier',
            name: 'a',
            range: [15, 16],
            loc: {
                start: { line: 1, column: 15 },
                end: { line: 1, column: 16 }
            }
        }, {
            type: 'Identifier',
            name: 'b',
            range: [18, 19],
            loc: {
                start: { line: 1, column: 18 },
                end: { line: 1, column: 19 }
            }
        }],
        defaults: [],
        body: {
            type: 'BlockStatement',
            body: [{
                type: 'ExpressionStatement',
                expression: {
                    type: 'CallExpression',
                    callee: {
                        type: 'Identifier',
                        name: 'sayHi',
                        range: [23, 28],
                        loc: {
                            start: { line: 1, column: 23 },
                            end: { line: 1, column: 28 }
                        }
                    },
                    'arguments': [],
                    range: [23, 30],
                    loc: {
                        start: { line: 1, column: 23 },
                        end: { line: 1, column: 30 }
                    }
                },
                range: [23, 31],
                loc: {
                    start: { line: 1, column: 23 },
                    end: { line: 1, column: 31 }
                }
            }],
            range: [21, 33],
            loc: {
                start: { line: 1, column: 21 },
                end: { line: 1, column: 33 }
            }
        },
        rest: null,
        generator: false,
        expression: false,
        range: [0, 33],
        loc: {
            start: { line: 1, column: 0 },
            end: { line: 1, column: 33 }
        }
    },

    'var hi = function() { sayHi() };': {
        type: 'VariableDeclaration',
        declarations: [{
            type: 'VariableDeclarator',
            id: {
                type: 'Identifier',
                name: 'hi',
                range: [4, 6],
                loc: {
                    start: { line: 1, column: 4 },
                    end: { line: 1, column: 6 }
                }
            },
            init: {
                type: 'FunctionExpression',
                id: null,
                params: [],
                defaults: [],
                body: {
                    type: 'BlockStatement',
                    body: [{
                        type: 'ExpressionStatement',
                        expression: {
                            type: 'CallExpression',
                            callee: {
                                type: 'Identifier',
                                name: 'sayHi',
                                range: [22, 27],
                                loc: {
                                    start: { line: 1, column: 22 },
                                    end: { line: 1, column: 27 }
                                }
                            },
                            'arguments': [],
                            range: [22, 29],
                            loc: {
                                start: { line: 1, column: 22 },
                                end: { line: 1, column: 29 }
                            }
                        },
                        range: [22, 30],
                        loc: {
                            start: { line: 1, column: 22 },
                            end: { line: 1, column: 30 }
                        }
                    }],
                    range: [20, 31],
                    loc: {
                        start: { line: 1, column: 20 },
                        end: { line: 1, column: 31 }
                    }
                },
                rest: null,
                generator: false,
                expression: false,
                range: [9, 31],
                loc: {
                    start: { line: 1, column: 9 },
                    end: { line: 1, column: 31 }
                }
            },
            range: [4, 31],
            loc: {
                start: { line: 1, column: 4 },
                end: { line: 1, column: 31 }
            }
        }],
        kind: 'var',
        range: [0, 32],
        loc: {
            start: { line: 1, column: 0 },
            end: { line: 1, column: 32 }
        }
    },

    'var hi = function eval() { };': {
        type: 'VariableDeclaration',
        declarations: [{
            type: 'VariableDeclarator',
            id: {
                type: 'Identifier',
                name: 'hi',
                range: [4, 6],
                loc: {
                    start: { line: 1, column: 4 },
                    end: { line: 1, column: 6 }
                }
            },
            init: {
                type: 'FunctionExpression',
                id: {
                    type: 'Identifier',
                    name: 'eval',
                    range: [18, 22],
                    loc: {
                        start: { line: 1, column: 18 },
                        end: { line: 1, column: 22 }
                    }
                },
                params: [],
                defaults: [],
                body: {
                    type: 'BlockStatement',
                    body: [],
                    range: [25, 28],
                    loc: {
                        start: { line: 1, column: 25 },
                        end: { line: 1, column: 28 }
                    }
                },
                rest: null,
                generator: false,
                expression: false,
                range: [9, 28],
                loc: {
                    start: { line: 1, column: 9 },
                    end: { line: 1, column: 28 }
                }
            },
            range: [4, 28],
            loc: {
                start: { line: 1, column: 4 },
                end: { line: 1, column: 28 }
            }
        }],
        kind: 'var',
        range: [0, 29],
        loc: {
            start: { line: 1, column: 0 },
            end: { line: 1, column: 29 }
        }
    },

    'var hi = function arguments() { };': {
        type: 'VariableDeclaration',
        declarations: [{
            type: 'VariableDeclarator',
            id: {
                type: 'Identifier',
                name: 'hi',
                range: [4, 6],
                loc: {
                    start: { line: 1, column: 4 },
                    end: { line: 1, column: 6 }
                }
            },
            init: {
                type: 'FunctionExpression',
                id: {
                    type: 'Identifier',
                    name: 'arguments',
                    range: [18, 27],
                    loc: {
                        start: { line: 1, column: 18 },
                        end: { line: 1, column: 27 }
                    }
                },
                params: [],
                defaults: [],
                body: {
                    type: 'BlockStatement',
                    body: [],
                    range: [30, 33],
                    loc: {
                        start: { line: 1, column: 30 },
                        end: { line: 1, column: 33 }
                    }
                },
                rest: null,
                generator: false,
                expression: false,
                range: [9, 33],
                loc: {
                    start: { line: 1, column: 9 },
                    end: { line: 1, column: 33 }
                }
            },
            range: [4, 33],
            loc: {
                start: { line: 1, column: 4 },
                end: { line: 1, column: 33 }
            }
        }],
        kind: 'var',
        range: [0, 34],
        loc: {
            start: { line: 1, column: 0 },
            end: { line: 1, column: 34 }
        }
    },

    'var hello = function hi() { sayHi() };': {
        type: 'VariableDeclaration',
        declarations: [{
            type: 'VariableDeclarator',
            id: {
                type: 'Identifier',
                name: 'hello',
                range: [4, 9],
                loc: {
                    start: { line: 1, column: 4 },
                    end: { line: 1, column: 9 }
                }
            },
            init: {
                type: 'FunctionExpression',
                id: {
                    type: 'Identifier',
                    name: 'hi',
                    range: [21, 23],
                    loc: {
                        start: { line: 1, column: 21 },
                        end: { line: 1, column: 23 }
                    }
                },
                params: [],
                defaults: [],
                body: {
                    type: 'BlockStatement',
                    body: [{
                        type: 'ExpressionStatement',
                        expression: {
                            type: 'CallExpression',
                            callee: {
                                type: 'Identifier',
                                name: 'sayHi',
                                range: [28, 33],
                                loc: {
                                    start: { line: 1, column: 28 },
                                    end: { line: 1, column: 33 }
                                }
                            },
                            'arguments': [],
                            range: [28, 35],
                            loc: {
                                start: { line: 1, column: 28 },
                                end: { line: 1, column: 35 }
                            }
                        },
                        range: [28, 36],
                        loc: {
                            start: { line: 1, column: 28 },
                            end: { line: 1, column: 36 }
                        }
                    }],
                    range: [26, 37],
                    loc: {
                        start: { line: 1, column: 26 },
                        end: { line: 1, column: 37 }
                    }
                },
                rest: null,
                generator: false,
                expression: false,
                range: [12, 37],
                loc: {
                    start: { line: 1, column: 12 },
                    end: { line: 1, column: 37 }
                }
            },
            range: [4, 37],
            loc: {
                start: { line: 1, column: 4 },
                end: { line: 1, column: 37 }
            }
        }],
        kind: 'var',
        range: [0, 38],
        loc: {
            start: { line: 1, column: 0 },
            end: { line: 1, column: 38 }
        }
    },

    '(function(){})': {
        type: 'ExpressionStatement',
        expression: {
            type: 'FunctionExpression',
            id: null,
            params: [],
            defaults: [],
            body: {
                type: 'BlockStatement',
                body: [],
                range: [11, 13],
                loc: {
                    start: { line: 1, column: 11 },
                    end: { line: 1, column: 13 }
                }
            },
            rest: null,
            generator: false,
            expression: false,
            range: [1, 13],
            loc: {
                start: { line: 1, column: 1 },
                end: { line: 1, column: 13 }
            }
        },
        range: [0, 14],
        loc: {
            start: { line: 1, column: 0 },
            end: { line: 1, column: 14 }
        }
    },

    'function universe(__proto__) { }': {
        type: 'FunctionDeclaration',
        id: {
            type: 'Identifier',
            name: 'universe',
            range: [9, 17],
            loc: {
                start: { line: 1, column: 9 },
                end: { line: 1, column: 17 }
            }
        },
        params: [{
            type: 'Identifier',
            name: '__proto__',
            range: [18, 27],
            loc: {
                start: { line: 1, column: 18 },
                end: { line: 1, column: 27 }
            }
        }],
        defaults: [],
        body: {
            type: 'BlockStatement',
            body: [],
            range: [29, 32],
            loc: {
                start: { line: 1, column: 29 },
                end: { line: 1, column: 32 }
            }
        },
        rest: null,
        generator: false,
        expression: false,
        range: [0, 32],
        loc: {
            start: { line: 1, column: 0 },
            end: { line: 1, column: 32 }
        }
    },

    'function test() { "use strict" + 42; }': {
        type: 'FunctionDeclaration',
        id: {
            type: 'Identifier',
            name: 'test',
            range: [9, 13],
            loc: {
                start: { line: 1, column: 9 },
                end: { line: 1, column: 13 }
            }
        },
        params: [],
        defaults: [],
        body: {
            type: 'BlockStatement',
            body: [{
                type: 'ExpressionStatement',
                expression: {
                    type: 'BinaryExpression',
                    operator: '+',
                    left: {
                        type: 'Literal',
                        value: 'use strict',
                        raw: '"use strict"',
                        range: [18, 30],
                        loc: {
                            start: { line: 1, column: 18 },
                            end: { line: 1, column: 30 }
                        }
                    },
                    right: {
                        type: 'Literal',
                        value: 42,
                        raw: '42',
                        range: [33, 35],
                        loc: {
                            start: { line: 1, column: 33 },
                            end: { line: 1, column: 35 }
                        }
                    },
                    range: [18, 35],
                    loc: {
                        start: { line: 1, column: 18 },
                        end: { line: 1, column: 35 }
                    }
                },
                range: [18, 36],
                loc: {
                    start: { line: 1, column: 18 },
                    end: { line: 1, column: 36 }
                }
            }],
            range: [16, 38],
            loc: {
                start: { line: 1, column: 16 },
                end: { line: 1, column: 38 }
            }
        },
        rest: null,
        generator: false,
        expression: false,
        range: [0, 38],
        loc: {
            start: { line: 1, column: 0 },
            end: { line: 1, column: 38 }
        }
    }

},

'Automatic semicolon insertion': {

    '{ x\n++y }': {
        type: 'BlockStatement',
        body: [{
            type: 'ExpressionStatement',
            expression: {
                type: 'Identifier',
                name: 'x',
                range: [2, 3],
                loc: {
                    start: { line: 1, column: 2 },
                    end: { line: 1, column: 3 }
                }
            },
            range: [2, 4],
            loc: {
                start: { line: 1, column: 2 },
                end: { line: 2, column: 0 }
            }
        }, {
            type: 'ExpressionStatement',
            expression: {
                type: 'UpdateExpression',
                operator: '++',
                argument: {
                    type: 'Identifier',
                    name: 'y',
                    range: [6, 7],
                    loc: {
                        start: { line: 2, column: 2 },
                        end: { line: 2, column: 3 }
                    }
                },
                prefix: true,
                range: [4, 7],
                loc: {
                    start: { line: 2, column: 0 },
                    end: { line: 2, column: 3 }
                }
            },
            range: [4, 8],
            loc: {
                start: { line: 2, column: 0 },
                end: { line: 2, column: 4 }
            }
        }],
        range: [0, 9],
        loc: {
            start: { line: 1, column: 0 },
            end: { line: 2, column: 5 }
        }
    },

    '{ x\n--y }': {
        type: 'BlockStatement',
        body: [{
            type: 'ExpressionStatement',
            expression: {
                type: 'Identifier',
                name: 'x',
                range: [2, 3],
                loc: {
                    start: { line: 1, column: 2 },
                    end: { line: 1, column: 3 }
                }
            },
            range: [2, 4],
            loc: {
                start: { line: 1, column: 2 },
                end: { line: 2, column: 0 }
            }
        }, {
            type: 'ExpressionStatement',
            expression: {
                type: 'UpdateExpression',
                operator: '--',
                argument: {
                    type: 'Identifier',
                    name: 'y',
                    range: [6, 7],
                    loc: {
                        start: { line: 2, column: 2 },
                        end: { line: 2, column: 3 }
                    }
                },
                prefix: true,
                range: [4, 7],
                loc: {
                    start: { line: 2, column: 0 },
                    end: { line: 2, column: 3 }
                }
            },
            range: [4, 8],
            loc: {
                start: { line: 2, column: 0 },
                end: { line: 2, column: 4 }
            }
        }],
        range: [0, 9],
        loc: {
            start: { line: 1, column: 0 },
            end: { line: 2, column: 5 }
        }
    },

    'var x /* comment */;': {
        type: 'VariableDeclaration',
        declarations: [{
            type: 'VariableDeclarator',
            id: {
                type: 'Identifier',
                name: 'x',
                range: [4, 5],
                loc: {
                    start: { line: 1, column: 4 },
                    end: { line: 1, column: 5 }
                }
            },
            init: null,
            range: [4, 5],
            loc: {
                start: { line: 1, column: 4 },
                end: { line: 1, column: 5 }
            }
        }],
        kind: 'var',
        range: [0, 20],
        loc: {
            start: { line: 1, column: 0 },
            end: { line: 1, column: 20 }
        }
    },

    '{ var x = 14, y = 3\nz; }': {
        type: 'BlockStatement',
        body: [{
            type: 'VariableDeclaration',
            declarations: [{
                type: 'VariableDeclarator',
                id: {
                    type: 'Identifier',
                    name: 'x',
                    range: [6, 7],
                    loc: {
                        start: { line: 1, column: 6 },
                        end: { line: 1, column: 7 }
                    }
                },
                init: {
                    type: 'Literal',
                    value: 14,
                    raw: '14',
                    range: [10, 12],
                    loc: {
                        start: { line: 1, column: 10 },
                        end: { line: 1, column: 12 }
                    }
                },
                range: [6, 12],
                loc: {
                    start: { line: 1, column: 6 },
                    end: { line: 1, column: 12 }
                }
            }, {
                type: 'VariableDeclarator',
                id: {
                    type: 'Identifier',
                    name: 'y',
                    range: [14, 15],
                    loc: {
                        start: { line: 1, column: 14 },
                        end: { line: 1, column: 15 }
                    }
                },
                init: {
                    type: 'Literal',
                    value: 3,
                    raw: '3',
                    range: [18, 19],
                    loc: {
                        start: { line: 1, column: 18 },
                        end: { line: 1, column: 19 }
                    }
                },
                range: [14, 19],
                loc: {
                    start: { line: 1, column: 14 },
                    end: { line: 1, column: 19 }
                }
            }],
            kind: 'var',
            range: [2, 20],
            loc: {
                start: { line: 1, column: 2 },
                end: { line: 2, column: 0 }
            }
        }, {
            type: 'ExpressionStatement',
            expression: {
                type: 'Identifier',
                name: 'z',
                range: [20, 21],
                loc: {
                    start: { line: 2, column: 0 },
                    end: { line: 2, column: 1 }
                }
            },
            range: [20, 22],
            loc: {
                start: { line: 2, column: 0 },
                end: { line: 2, column: 2 }
            }
        }],
        range: [0, 24],
        loc: {
            start: { line: 1, column: 0 },
            end: { line: 2, column: 4 }
        }
    },

    'while (true) { continue\nthere; }': {
        type: 'WhileStatement',
        test: {
            type: 'Literal',
            value: true,
            raw: 'true',
            range: [7, 11],
            loc: {
                start: { line: 1, column: 7 },
                end: { line: 1, column: 11 }
            }
        },
        body: {
            type: 'BlockStatement',
            body: [{
                type: 'ContinueStatement',
                label: null,
                range: [15, 23],
                loc: {
                    start: { line: 1, column: 15 },
                    end: { line: 1, column: 23 }
                }
            }, {
                type: 'ExpressionStatement',
                expression: {
                    type: 'Identifier',
                    name: 'there',
                    range: [24, 29],
                    loc: {
                        start: { line: 2, column: 0 },
                        end: { line: 2, column: 5 }
                    }
                },
                range: [24, 30],
                loc: {
                    start: { line: 2, column: 0 },
                    end: { line: 2, column: 6 }
                }
            }],
            range: [13, 32],
            loc: {
                start: { line: 1, column: 13 },
                end: { line: 2, column: 8 }
            }
        },
        range: [0, 32],
        loc: {
            start: { line: 1, column: 0 },
            end: { line: 2, column: 8 }
        }
    },

    'while (true) { continue // Comment\nthere; }': {
        type: 'WhileStatement',
        test: {
            type: 'Literal',
            value: true,
            raw: 'true',
            range: [7, 11],
            loc: {
                start: { line: 1, column: 7 },
                end: { line: 1, column: 11 }
            }
        },
        body: {
            type: 'BlockStatement',
            body: [{
                type: 'ContinueStatement',
                label: null,
                range: [15, 23],
                loc: {
                    start: { line: 1, column: 15 },
                    end: { line: 1, column: 23 }
                }
            }, {
                type: 'ExpressionStatement',
                expression: {
                    type: 'Identifier',
                    name: 'there',
                    range: [35, 40],
                    loc: {
                        start: { line: 2, column: 0 },
                        end: { line: 2, column: 5 }
                    }
                },
                range: [35, 41],
                loc: {
                    start: { line: 2, column: 0 },
                    end: { line: 2, column: 6 }
                }
            }],
            range: [13, 43],
            loc: {
                start: { line: 1, column: 13 },
                end: { line: 2, column: 8 }
            }
        },
        range: [0, 43],
        loc: {
            start: { line: 1, column: 0 },
            end: { line: 2, column: 8 }
        }
    },

    'while (true) { continue /* Multiline\nComment */there; }': {
        type: 'WhileStatement',
        test: {
            type: 'Literal',
            value: true,
            raw: 'true',
            range: [7, 11],
            loc: {
                start: { line: 1, column: 7 },
                end: { line: 1, column: 11 }
            }
        },
        body: {
            type: 'BlockStatement',
            body: [{
                type: 'ContinueStatement',
                label: null,
                range: [15, 23],
                loc: {
                    start: { line: 1, column: 15 },
                    end: { line: 1, column: 23 }
                }
            }, {
                type: 'ExpressionStatement',
                expression: {
                    type: 'Identifier',
                    name: 'there',
                    range: [47, 52],
                    loc: {
                        start: { line: 2, column: 10 },
                        end: { line: 2, column: 15 }
                    }
                },
                range: [47, 53],
                loc: {
                    start: { line: 2, column: 10 },
                    end: { line: 2, column: 16 }
                }
            }],
            range: [13, 55],
            loc: {
                start: { line: 1, column: 13 },
                end: { line: 2, column: 18 }
            }
        },
        range: [0, 55],
        loc: {
            start: { line: 1, column: 0 },
            end: { line: 2, column: 18 }
        }
    },

    'while (true) { break\nthere; }': {
        type: 'WhileStatement',
        test: {
            type: 'Literal',
            value: true,
            raw: 'true',
            range: [7, 11],
            loc: {
                start: { line: 1, column: 7 },
                end: { line: 1, column: 11 }
            }
        },
        body: {
            type: 'BlockStatement',
            body: [{
                type: 'BreakStatement',
                label: null,
                range: [15, 20],
                loc: {
                    start: { line: 1, column: 15 },
                    end: { line: 1, column: 20 }
                }
            }, {
                type: 'ExpressionStatement',
                expression: {
                    type: 'Identifier',
                    name: 'there',
                    range: [21, 26],
                    loc: {
                        start: { line: 2, column: 0 },
                        end: { line: 2, column: 5 }
                    }
                },
                range: [21, 27],
                loc: {
                    start: { line: 2, column: 0 },
                    end: { line: 2, column: 6 }
                }
            }],
            range: [13, 29],
            loc: {
                start: { line: 1, column: 13 },
                end: { line: 2, column: 8 }
            }
        },
        range: [0, 29],
        loc: {
            start: { line: 1, column: 0 },
            end: { line: 2, column: 8 }
        }
    },

    'while (true) { break // Comment\nthere; }': {
        type: 'WhileStatement',
        test: {
            type: 'Literal',
            value: true,
            raw: 'true',
            range: [7, 11],
            loc: {
                start: { line: 1, column: 7 },
                end: { line: 1, column: 11 }
            }
        },
        body: {
            type: 'BlockStatement',
            body: [{
                type: 'BreakStatement',
                label: null,
                range: [15, 20],
                loc: {
                    start: { line: 1, column: 15 },
                    end: { line: 1, column: 20 }
                }
            }, {
                type: 'ExpressionStatement',
                expression: {
                    type: 'Identifier',
                    name: 'there',
                    range: [32, 37],
                    loc: {
                        start: { line: 2, column: 0 },
                        end: { line: 2, column: 5 }
                    }
                },
                range: [32, 38],
                loc: {
                    start: { line: 2, column: 0 },
                    end: { line: 2, column: 6 }
                }
            }],
            range: [13, 40],
            loc: {
                start: { line: 1, column: 13 },
                end: { line: 2, column: 8 }
            }
        },
        range: [0, 40],
        loc: {
            start: { line: 1, column: 0 },
            end: { line: 2, column: 8 }
        }
    },

    'while (true) { break /* Multiline\nComment */there; }': {
        type: 'WhileStatement',
        test: {
            type: 'Literal',
            value: true,
            raw: 'true',
            range: [7, 11],
            loc: {
                start: { line: 1, column: 7 },
                end: { line: 1, column: 11 }
            }
        },
        body: {
            type: 'BlockStatement',
            body: [{
                type: 'BreakStatement',
                label: null,
                range: [15, 20],
                loc: {
                    start: { line: 1, column: 15 },
                    end: { line: 1, column: 20 }
                }
            }, {
                type: 'ExpressionStatement',
                expression: {
                    type: 'Identifier',
                    name: 'there',
                    range: [44, 49],
                    loc: {
                        start: { line: 2, column: 10 },
                        end: { line: 2, column: 15 }
                    }
                },
                range: [44, 50],
                loc: {
                    start: { line: 2, column: 10 },
                    end: { line: 2, column: 16 }
                }
            }],
            range: [13, 52],
            loc: {
                start: { line: 1, column: 13 },
                end: { line: 2, column: 18 }
            }
        },
        range: [0, 52],
        loc: {
            start: { line: 1, column: 0 },
            end: { line: 2, column: 18 }
        }
    },

    '(function(){ return\nx; })': {
        type: 'ExpressionStatement',
        expression: {
            type: 'FunctionExpression',
            id: null,
            params: [],
            defaults: [],
            body: {
                type: 'BlockStatement',
                body: [
                    {
                        type: 'ReturnStatement',
                        argument: null,
                        range: [13, 19],
                        loc: {
                            start: { line: 1, column: 13 },
                            end: { line: 1, column: 19 }
                        }
                    },
                    {
                        type: 'ExpressionStatement',
                        expression: {
                            type: 'Identifier',
                            name: 'x',
                            range: [20, 21],
                            loc: {
                                start: { line: 2, column: 0 },
                                end: { line: 2, column: 1 }
                            }
                        },
                        range: [20, 22],
                        loc: {
                            start: { line: 2, column: 0 },
                            end: { line: 2, column: 2 }
                        }
                    }
                ],
                range: [11, 24],
                loc: {
                    start: { line: 1, column: 11 },
                    end: { line: 2, column: 4 }
                }
            },
            rest: null,
            generator: false,
            expression: false,
            range: [1, 24],
            loc: {
                start: { line: 1, column: 1 },
                end: { line: 2, column: 4 }
            }
        },
        range: [0, 25],
        loc: {
            start: { line: 1, column: 0 },
            end: { line: 2, column: 5 }
        }
    },

    '(function(){ return // Comment\nx; })': {
        type: 'ExpressionStatement',
        expression: {
            type: 'FunctionExpression',
            id: null,
            params: [],
            defaults: [],
            body: {
                type: 'BlockStatement',
                body: [
                    {
                        type: 'ReturnStatement',
                        argument: null,
                        range: [13, 19],
                        loc: {
                            start: { line: 1, column: 13 },
                            end: { line: 1, column: 19 }
                        }
                    },
                    {
                        type: 'ExpressionStatement',
                        expression: {
                            type: 'Identifier',
                            name: 'x',
                            range: [31, 32],
                            loc: {
                                start: { line: 2, column: 0 },
                                end: { line: 2, column: 1 }
                            }
                        },
                        range: [31, 33],
                        loc: {
                            start: { line: 2, column: 0 },
                            end: { line: 2, column: 2 }
                        }
                    }
                ],
                range: [11, 35],
                loc: {
                    start: { line: 1, column: 11 },
                    end: { line: 2, column: 4 }
                }
            },
            rest: null,
            generator: false,
            expression: false,
            range: [1, 35],
            loc: {
                start: { line: 1, column: 1 },
                end: { line: 2, column: 4 }
            }
        },
        range: [0, 36],
        loc: {
            start: { line: 1, column: 0 },
            end: { line: 2, column: 5 }
        }
    },

    '(function(){ return/* Multiline\nComment */x; })': {
        type: 'ExpressionStatement',
        expression: {
            type: 'FunctionExpression',
            id: null,
            params: [],
            defaults: [],
            body: {
                type: 'BlockStatement',
                body: [
                    {
                        type: 'ReturnStatement',
                        argument: null,
                        range: [13, 19],
                        loc: {
                            start: { line: 1, column: 13 },
                            end: { line: 1, column: 19 }
                        }
                    },
                    {
                        type: 'ExpressionStatement',
                        expression: {
                            type: 'Identifier',
                            name: 'x',
                            range: [42, 43],
                            loc: {
                                start: { line: 2, column: 10 },
                                end: { line: 2, column: 11 }
                            }
                        },
                        range: [42, 44],
                        loc: {
                            start: { line: 2, column: 10 },
                            end: { line: 2, column: 12 }
                        }
                    }
                ],
                range: [11, 46],
                loc: {
                    start: { line: 1, column: 11 },
                    end: { line: 2, column: 14 }
                }
            },
            rest: null,
            generator: false,
            expression: false,
            range: [1, 46],
            loc: {
                start: { line: 1, column: 1 },
                end: { line: 2, column: 14 }
            }
        },
        range: [0, 47],
        loc: {
            start: { line: 1, column: 0 },
            end: { line: 2, column: 15 }
        }
    },

    '{ throw error\nerror; }': {
        type: 'BlockStatement',
        body: [{
            type: 'ThrowStatement',
            argument: {
                type: 'Identifier',
                name: 'error',
                range: [8, 13],
                loc: {
                    start: { line: 1, column: 8 },
                    end: { line: 1, column: 13 }
                }
            },
            range: [2, 14],
            loc: {
                start: { line: 1, column: 2 },
                end: { line: 2, column: 0 }
            }
        }, {
            type: 'ExpressionStatement',
            expression: {
                type: 'Identifier',
                name: 'error',
                range: [14, 19],
                loc: {
                    start: { line: 2, column: 0 },
                    end: { line: 2, column: 5 }
                }
            },
            range: [14, 20],
            loc: {
                start: { line: 2, column: 0 },
                end: { line: 2, column: 6 }
            }
        }],
        range: [0, 22],
        loc: {
            start: { line: 1, column: 0 },
            end: { line: 2, column: 8 }
        }
    },

    '{ throw error// Comment\nerror; }': {
        type: 'BlockStatement',
        body: [{
            type: 'ThrowStatement',
            argument: {
                type: 'Identifier',
                name: 'error',
                range: [8, 13],
                loc: {
                    start: { line: 1, column: 8 },
                    end: { line: 1, column: 13 }
                }
            },
            range: [2, 24],
            loc: {
                start: { line: 1, column: 2 },
                end: { line: 2, column: 0 }
            }
        }, {
            type: 'ExpressionStatement',
            expression: {
                type: 'Identifier',
                name: 'error',
                range: [24, 29],
                loc: {
                    start: { line: 2, column: 0 },
                    end: { line: 2, column: 5 }
                }
            },
            range: [24, 30],
            loc: {
                start: { line: 2, column: 0 },
                end: { line: 2, column: 6 }
            }
        }],
        range: [0, 32],
        loc: {
            start: { line: 1, column: 0 },
            end: { line: 2, column: 8 }
        }
    },

    '{ throw error/* Multiline\nComment */error; }': {
        type: 'BlockStatement',
        body: [{
            type: 'ThrowStatement',
            argument: {
                type: 'Identifier',
                name: 'error',
                range: [8, 13],
                loc: {
                    start: { line: 1, column: 8 },
                    end: { line: 1, column: 13 }
                }
            },
            range: [2, 36],
            loc: {
                start: { line: 1, column: 2 },
                end: { line: 2, column: 10 }
            }
        }, {
            type: 'ExpressionStatement',
            expression: {
                type: 'Identifier',
                name: 'error',
                range: [36, 41],
                loc: {
                    start: { line: 2, column: 10 },
                    end: { line: 2, column: 15 }
                }
            },
            range: [36, 42],
            loc: {
                start: { line: 2, column: 10 },
                end: { line: 2, column: 16 }
            }
        }],
        range: [0, 44],
        loc: {
            start: { line: 1, column: 0 },
            end: { line: 2, column: 18 }
        }
    }

},

'Directive Prolog': {

    '(function () { \'use\\x20strict\'; with (i); }())': {
        type: 'ExpressionStatement',
        expression: {
            type: 'CallExpression',
            callee: {
                type: 'FunctionExpression',
                id: null,
                params: [],
                defaults: [],
                body: {
                    type: 'BlockStatement',
                    body: [{
                        type: 'ExpressionStatement',
                        expression: {
                            type: 'Literal',
                            value: 'use strict',
                            raw: '\'use\\x20strict\'',
                            range: [15, 30],
                            loc: {
                                start: { line: 1, column: 15 },
                                end: { line: 1, column: 30 }
                            }
                        },
                        range: [15, 31],
                        loc: {
                            start: { line: 1, column: 15 },
                            end: { line: 1, column: 31 }
                        }
                    }, {
                        type: 'WithStatement',
                        object: {
                            type: 'Identifier',
                            name: 'i',
                            range: [38, 39],
                            loc: {
                                start: { line: 1, column: 38 },
                                end: { line: 1, column: 39 }
                            }
                        },
                        body: {
                            type: 'EmptyStatement',
                            range: [40, 41],
                            loc: {
                                start: { line: 1, column: 40 },
                                end: { line: 1, column: 41 }
                            }
                        },
                        range: [32, 41],
                        loc: {
                            start: { line: 1, column: 32 },
                            end: { line: 1, column: 41 }
                        }
                    }],
                    range: [13, 43],
                    loc: {
                        start: { line: 1, column: 13 },
                        end: { line: 1, column: 43 }
                    }
                },
                rest: null,
                generator: false,
                expression: false,
                range: [1, 43],
                loc: {
                    start: { line: 1, column: 1 },
                    end: { line: 1, column: 43 }
                }
            },
            'arguments': [],
            range: [1, 45],
            loc: {
                start: { line: 1, column: 1 },
                end: { line: 1, column: 45 }
            }
        },
        range: [0, 46],
        loc: {
            start: { line: 1, column: 0 },
            end: { line: 1, column: 46 }
        }
    },

    '(function () { \'use\\nstrict\'; with (i); }())': {
        type: 'ExpressionStatement',
        expression: {
            type: 'CallExpression',
            callee: {
                type: 'FunctionExpression',
                id: null,
                params: [],
                defaults: [],
                body: {
                    type: 'BlockStatement',
                    body: [{
                        type: 'ExpressionStatement',
                        expression: {
                            type: 'Literal',
                            value: 'use\nstrict',
                            raw: '\'use\\nstrict\'',
                            range: [15, 28],
                            loc: {
                                start: { line: 1, column: 15 },
                                end: { line: 1, column: 28 }
                            }
                        },
                        range: [15, 29],
                        loc: {
                            start: { line: 1, column: 15 },
                            end: { line: 1, column: 29 }
                        }
                    }, {
                        type: 'WithStatement',
                        object: {
                            type: 'Identifier',
                            name: 'i',
                            range: [36, 37],
                            loc: {
                                start: { line: 1, column: 36 },
                                end: { line: 1, column: 37 }
                            }
                        },
                        body: {
                            type: 'EmptyStatement',
                            range: [38, 39],
                            loc: {
                                start: { line: 1, column: 38 },
                                end: { line: 1, column: 39 }
                            }
                        },
                        range: [30, 39],
                        loc: {
                            start: { line: 1, column: 30 },
                            end: { line: 1, column: 39 }
                        }
                    }],
                    range: [13, 41],
                    loc: {
                        start: { line: 1, column: 13 },
                        end: { line: 1, column: 41 }
                    }
                },
                rest: null,
                generator: false,
                expression: false,
                range: [1, 41],
                loc: {
                    start: { line: 1, column: 1 },
                    end: { line: 1, column: 41 }
                }
            },
            'arguments': [],
            range: [1, 43],
            loc: {
                start: { line: 1, column: 1 },
                end: { line: 1, column: 43 }
            }
        },
        range: [0, 44],
        loc: {
            start: { line: 1, column: 0 },
            end: { line: 1, column: 44 }
        }
    }

},

'Whitespace': {

    'new\x20\x09\x0B\x0C\xA0\u1680\u180E\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200A\u202F\u205F\u3000\uFEFFa': {
        type: 'ExpressionStatement',
        expression: {
            type: 'NewExpression',
            callee: {
                type: 'Identifier',
                name: 'a',
                range: [25, 26],
                loc: {
                    start: {line: 1, column: 25},
                    end: {line: 1, column: 26}
                }
            },
            arguments: [],
            range: [0, 26],
            loc: {
                start: {line: 1, column: 0},
                end: {line: 1, column: 26}
            }
        },
        range: [0, 26],
        loc: {
            start: {line: 1, column: 0},
            end: {line: 1, column: 26}
        }
    },

    '{0\x0A1\x0D2\u20283\u20294}': {
        type: 'BlockStatement',
        body: [
            {
                type: 'ExpressionStatement',
                expression: {
                    type: 'Literal',
                    value: 0,
                    raw: '0',
                    range: [1, 2],
                    loc: {
                        start: {line: 1, column: 1},
                        end: {line: 1, column: 2}
                    }
                },
                range: [1, 3],
                loc: {
                    start: {line: 1, column: 1},
                    end: {line: 2, column: 0}
                }
            },
            {
                type: 'ExpressionStatement',
                expression: {
                    type: 'Literal',
                    value: 1,
                    raw: '1',
                    range: [3, 4],
                    loc: {
                        start: {line: 2, column: 0},
                        end: {line: 2, column: 1}
                    }
                },
                range: [3, 5],
                loc: {
                    start: {line: 2, column: 0},
                    end: {line: 3, column: 0}
                }
            },
            {
                type: 'ExpressionStatement',
                expression: {
                    type: 'Literal',
                    value: 2,
                    raw: '2',
                    range: [5, 6],
                    loc: {
                        start: {line: 3, column: 0},
                        end: {line: 3, column: 1}
                    }
                },
                range: [5, 7],
                loc: {
                    start: {line: 3, column: 0},
                    end: {line: 4, column: 0}
                }
            },
            {
                type: 'ExpressionStatement',
                expression: {
                    type: 'Literal',
                    value: 3,
                    raw: '3',
                    range: [7, 8],
                    loc: {
                        start: {line: 4, column: 0},
                        end: {line: 4, column: 1}
                    }
                },
                range: [7, 9],
                loc: {
                    start: {line: 4, column: 0},
                    end: {line: 5, column: 0}
                }
            },
            {
                type: 'ExpressionStatement',
                expression: {
                    type: 'Literal',
                    value: 4,
                    raw: '4',
                    range: [9, 10],
                    loc: {
                        start: {line: 5, column: 0},
                        end: {line: 5, column: 1}
                    }
                },
                range: [9, 10],
                loc: {
                    start: {line: 5, column: 0},
                    end: {line: 5, column: 1}
                }
            }
        ],
        range: [0, 11],
        loc: {
            start: {line: 1, column: 0},
            end: {line: 5, column: 2}
        }
    }

},

'Source elements': {

    '': {
        type: 'Program',
        body: [],
        range: [0, 0],
        loc: {
            start: { line: 0, column: 0 },
            end: { line: 0, column: 0 }
        },
        tokens: []
    }
},

'Source option': {
    'x + y - z': {
        type: 'ExpressionStatement',
        expression: {
            type: 'BinaryExpression',
            operator: '-',
            left: {
                type: 'BinaryExpression',
                operator: '+',
                left: {
                    type: 'Identifier',
                    name: 'x',
                    range: [0, 1],
                    loc: {
                        start: { line: 1, column: 0 },
                        end: { line: 1, column: 1 },
                        source: '42.js'
                    }
                },
                right: {
                    type: 'Identifier',
                    name: 'y',
                    range: [4, 5],
                    loc: {
                        start: { line: 1, column: 4 },
                        end: { line: 1, column: 5 },
                        source: '42.js'
                    }
                },
                range: [0, 5],
                loc: {
                    start: { line: 1, column: 0 },
                    end: { line: 1, column: 5 },
                    source: '42.js'
                }
            },
            right: {
                type: 'Identifier',
                name: 'z',
                range: [8, 9],
                loc: {
                    start: { line: 1, column: 8 },
                    end: { line: 1, column: 9 },
                    source: '42.js'
                }
            },
            range: [0, 9],
            loc: {
                start: { line: 1, column: 0 },
                end: { line: 1, column: 9 },
                source: '42.js'
            }
        },
        range: [0, 9],
        loc: {
            start: { line: 1, column: 0 },
            end: { line: 1, column: 9 },
            source: '42.js'
        }
    },

    'a + (b < (c * d)) + e': {
        type: 'ExpressionStatement',
        expression: {
            type: 'BinaryExpression',
            operator: '+',
            left: {
                type: 'BinaryExpression',
                operator: '+',
                left: {
                    type: 'Identifier',
                    name: 'a',
                    range: [0, 1],
                    loc: {
                        start: { line: 1, column: 0 },
                        end: { line: 1, column: 1 },
                        source: '42.js'
                    }
                },
                right: {
                    type: 'BinaryExpression',
                    operator: '<',
                    left: {
                        type: 'Identifier',
                        name: 'b',
                        range: [5, 6],
                        loc: {
                            start: { line: 1, column: 5 },
                            end: { line: 1, column: 6 },
                            source: '42.js'
                        }
                    },
                    right: {
                        type: 'BinaryExpression',
                        operator: '*',
                        left: {
                            type: 'Identifier',
                            name: 'c',
                            range: [10, 11],
                            loc: {
                                start: { line: 1, column: 10 },
                                end: { line: 1, column: 11 },
                                source: '42.js'
                            }
                        },
                        right: {
                            type: 'Identifier',
                            name: 'd',
                            range: [14, 15],
                            loc: {
                                start: { line: 1, column: 14 },
                                end: { line: 1, column: 15 },
                                source: '42.js'
                            }
                        },
                        range: [10, 15],
                        loc: {
                            start: { line: 1, column: 10 },
                            end: { line: 1, column: 15 },
                            source: '42.js'
                        }
                    },
                    range: [5, 16],
                    loc: {
                        start: { line: 1, column: 5 },
                        end: { line: 1, column: 16 },
                        source: '42.js'
                    }
                },
                range: [0, 17],
                loc: {
                    start: { line: 1, column: 0 },
                    end: { line: 1, column: 17 },
                    source: '42.js'
                }
            },
            right: {
                type: 'Identifier',
                name: 'e',
                range: [20, 21],
                loc: {
                    start: { line: 1, column: 20 },
                    end: { line: 1, column: 21 },
                    source: '42.js'
                }
            },
            range: [0, 21],
            loc: {
                start: { line: 1, column: 0 },
                end: { line: 1, column: 21 },
                source: '42.js'
            }
        },
        range: [0, 21],
        loc: {
            start: { line: 1, column: 0 },
            end: { line: 1, column: 21 },
            source: '42.js'
        }
    }

},

'Invalid syntax': {

    '{': {
        index: 1,
        lineNumber: 1,
        column: 2,
        message: 'Error: Line 1: Unexpected end of input'
    },

    '}': {
        index: 0,
        lineNumber: 1,
        column: 1,
        message: 'Error: Line 1: Unexpected token }'
    },

    '3ea': {
        index: 2,
        lineNumber: 1,
        column: 3,
        message: 'Error: Line 1: Unexpected token ILLEGAL'
    },

    '3in []': {
        index: 1,
        lineNumber: 1,
        column: 2,
        message: 'Error: Line 1: Unexpected token ILLEGAL'
    },

    '3e': {
        index: 2,
        lineNumber: 1,
        column: 3,
        message: 'Error: Line 1: Unexpected token ILLEGAL'
    },

    '3e+': {
        index: 3,
        lineNumber: 1,
        column: 4,
        message: 'Error: Line 1: Unexpected token ILLEGAL'
    },

    '3e-': {
        index: 3,
        lineNumber: 1,
        column: 4,
        message: 'Error: Line 1: Unexpected token ILLEGAL'
    },

    '3x': {
        index: 1,
        lineNumber: 1,
        column: 2,
        message: 'Error: Line 1: Unexpected token ILLEGAL'
    },

    '3x0': {
        index: 1,
        lineNumber: 1,
        column: 2,
        message: 'Error: Line 1: Unexpected token ILLEGAL'
    },

    '0x': {
        index: 2,
        lineNumber: 1,
        column: 3,
        message: 'Error: Line 1: Unexpected token ILLEGAL'
    },

    '09': {
        index: 1,
        lineNumber: 1,
        column: 2,
        message: 'Error: Line 1: Unexpected token ILLEGAL'
    },

    '018': {
        index: 2,
        lineNumber: 1,
        column: 3,
        message: 'Error: Line 1: Unexpected token ILLEGAL'
    },

    '01a': {
        index: 2,
        lineNumber: 1,
        column: 3,
        message: 'Error: Line 1: Unexpected token ILLEGAL'
    },

    '3in[]': {
        index: 1,
        lineNumber: 1,
        column: 2,
        message: 'Error: Line 1: Unexpected token ILLEGAL'
    },

    '0x3in[]': {
        index: 3,
        lineNumber: 1,
        column: 4,
        message: 'Error: Line 1: Unexpected token ILLEGAL'
    },

    '"Hello\nWorld"': {
        index: 7,
        lineNumber: 1,
        column: 8,
        message: 'Error: Line 1: Unexpected token ILLEGAL'
    },

    'x\\': {
        index: 2,
        lineNumber: 1,
        column: 3,
        message: 'Error: Line 1: Unexpected token ILLEGAL'
    },

    'x\\u005c': {
        index: 7,
        lineNumber: 1,
        column: 8,
        message: 'Error: Line 1: Unexpected token ILLEGAL'
    },

    'x\\u002a': {
        index: 7,
        lineNumber: 1,
        column: 8,
        message: 'Error: Line 1: Unexpected token ILLEGAL'
    },

    'var x = /(s/g': {
        index: 13,
        lineNumber: 1,
        column: 14,
        message: 'Error: Line 1: Invalid regular expression'
    },

    'a\\u': {
        index: 3,
        lineNumber: 1,
        column: 4,
        message: 'Error: Line 1: Unexpected token ILLEGAL'
    },

    '\\ua': {
        index: 3,
        lineNumber: 1,
        column: 4,
        message: 'Error: Line 1: Unexpected token ILLEGAL'
    },

    '/': {
        index: 1,
        lineNumber: 1,
        column: 2,
        message: 'Error: Line 1: Invalid regular expression: missing /'
    },

    '/test': {
        index: 5,
        lineNumber: 1,
        column: 6,
        message: 'Error: Line 1: Invalid regular expression: missing /'
    },

    '/test\n/': {
        index: 6,
        lineNumber: 1,
        column: 7,
        message: 'Error: Line 1: Invalid regular expression: missing /'
    },

    'var x = /[a-z]/\\ux': {
        index: 17,
        lineNumber: 1,
        column: 18,
        message: 'Error: Line 1: Unexpected token ILLEGAL'
    },

    'var x = /[a-z\n]/\\ux': {
        index: 14,
        lineNumber: 1,
        column: 15,
        message: 'Error: Line 1: Invalid regular expression: missing /'
    },

    'var x = /[a-z]/\\\\ux': {
        index: 16,
        lineNumber: 1,
        column: 17,
        message: 'Error: Line 1: Unexpected token ILLEGAL'
    },

    'var x = /[P QR]/\\\\u0067': {
        index: 17,
        lineNumber: 1,
        column: 18,
        message: 'Error: Line 1: Unexpected token ILLEGAL'
    },

    '3 = 4': {
        index: 1,
        lineNumber: 1,
        column: 2,
        message: 'Error: Line 1: Invalid left-hand side in assignment'
    },

    'func() = 4': {
        index: 6,
        lineNumber: 1,
        column: 7,
        message: 'Error: Line 1: Invalid left-hand side in assignment'
    },

    '(1 + 1) = 10': {
        index: 7,
        lineNumber: 1,
        column: 8,
        message: 'Error: Line 1: Invalid left-hand side in assignment'
    },

    '1++': {
        index: 1,
        lineNumber: 1,
        column: 2,
        message: 'Error: Line 1: Invalid left-hand side in assignment'
    },

    '1--': {
        index: 1,
        lineNumber: 1,
        column: 2,
        message: 'Error: Line 1: Invalid left-hand side in assignment'
    },

    '++1': {
        index: 3,
        lineNumber: 1,
        column: 4,
        message: 'Error: Line 1: Invalid left-hand side in assignment'
    },

    '--1': {
        index: 3,
        lineNumber: 1,
        column: 4,
        message: 'Error: Line 1: Invalid left-hand side in assignment'
    },

    'for((1 + 1) in list) process(x);': {
        index: 11,
        lineNumber: 1,
        column: 12,
        message: 'Error: Line 1: Invalid left-hand side in for-in'
    },

    '[': {
        index: 1,
        lineNumber: 1,
        column: 2,
        message: 'Error: Line 1: Unexpected end of input'
    },

    '[,': {
        index: 2,
        lineNumber: 1,
        column: 3,
        message: 'Error: Line 1: Unexpected end of input'
    },

    '1 + {': {
        index: 5,
        lineNumber: 1,
        column: 6,
        message: 'Error: Line 1: Unexpected end of input'
    },

    '1 + { t:t ': {
        index: 10,
        lineNumber: 1,
        column: 11,
        message: 'Error: Line 1: Unexpected end of input'
    },

    '1 + { t:t,': {
        index: 10,
        lineNumber: 1,
        column: 11,
        message: 'Error: Line 1: Unexpected end of input'
    },

    'var x = /\n/': {
        index: 10,
        lineNumber: 1,
        column: 11,
        message: 'Error: Line 1: Invalid regular expression: missing /'
    },

    'var x = "\n': {
        index: 10,
        lineNumber: 1,
        column: 11,
        message: 'Error: Line 1: Unexpected token ILLEGAL'
    },

    'var if = 42': {
        index: 4,
        lineNumber: 1,
        column: 5,
        message: 'Error: Line 1: Unexpected token if'
    },

    'i #= 42': {
        index: 2,
        lineNumber: 1,
        column: 3,
        message: 'Error: Line 1: Unexpected token ILLEGAL'
    },

    'i + 2 = 42': {
        index: 5,
        lineNumber: 1,
        column: 6,
        message: 'Error: Line 1: Invalid left-hand side in assignment'
    },

    '+i = 42': {
        index: 2,
        lineNumber: 1,
        column: 3,
        message: 'Error: Line 1: Invalid left-hand side in assignment'
    },

    '1 + (': {
        index: 5,
        lineNumber: 1,
        column: 6,
        message: 'Error: Line 1: Unexpected end of input'
    },

    '\n\n\n{': {
        index: 4,
        lineNumber: 4,
        column: 2,
        message: 'Error: Line 4: Unexpected end of input'
    },

    '\n/* Some multiline\ncomment */\n)': {
        index: 30,
        lineNumber: 4,
        column: 1,
        message: 'Error: Line 4: Unexpected token )'
    },

    '{ set 1 }': {
        index: 6,
        lineNumber: 1,
        column: 7,
        message: 'Error: Line 1: Unexpected number'
    },

    '{ get 2 }': {
        index: 6,
        lineNumber: 1,
        column: 7,
        message: 'Error: Line 1: Unexpected number'
    },

    '({ set: s(if) { } })': {
        index: 10,
        lineNumber: 1,
        column: 11,
        message: 'Error: Line 1: Unexpected token if'
    },

    '({ set s(.) { } })': {
        index: 9,
        lineNumber: 1,
        column: 10,
        message: 'Error: Line 1: Unexpected token .'
    },

    '({ set s() { } })': {
        index: 9,
        lineNumber: 1,
        column: 10,
        message: 'Error: Line 1: Unexpected token )'
    },

    '({ set: s() { } })': {
        index: 12,
        lineNumber: 1,
        column: 13,
        message: 'Error: Line 1: Unexpected token {'
    },

    '({ set: s(a, b) { } })': {
        index: 16,
        lineNumber: 1,
        column: 17,
        message: 'Error: Line 1: Unexpected token {'
    },

    '({ get: g(d) { } })': {
        index: 13,
        lineNumber: 1,
        column: 14,
        message: 'Error: Line 1: Unexpected token {'
    },

    '({ get i() { }, i: 42 })': {
        index: 21,
        lineNumber: 1,
        column: 22,
        message: 'Error: Line 1: Object literal may not have data and accessor property with the same name'
    },

    '({ i: 42, get i() { } })': {
        index: 21,
        lineNumber: 1,
        column: 22,
        message: 'Error: Line 1: Object literal may not have data and accessor property with the same name'
    },

    '({ set i(x) { }, i: 42 })': {
        index: 22,
        lineNumber: 1,
        column: 23,
        message: 'Error: Line 1: Object literal may not have data and accessor property with the same name'
    },

    '({ i: 42, set i(x) { } })': {
        index: 22,
        lineNumber: 1,
        column: 23,
        message: 'Error: Line 1: Object literal may not have data and accessor property with the same name'
    },

    '({ get i() { }, get i() { } })': {
        index: 27,
        lineNumber: 1,
        column: 28,
        message: 'Error: Line 1: Object literal may not have multiple get/set accessors with the same name'
    },

    '({ set i(x) { }, set i(x) { } })': {
        index: 29,
        lineNumber: 1,
        column: 30,
        message: 'Error: Line 1: Object literal may not have multiple get/set accessors with the same name'
    },

    'function t(if) { }': {
        index: 11,
        lineNumber: 1,
        column: 12,
        message: 'Error: Line 1: Unexpected token if'
    },

    'function t(true) { }': {
        index: 11,
        lineNumber: 1,
        column: 12,
        message: 'Error: Line 1: Unexpected token true'
    },

    'function t(false) { }': {
        index: 11,
        lineNumber: 1,
        column: 12,
        message: 'Error: Line 1: Unexpected token false'
    },

    'function t(null) { }': {
        index: 11,
        lineNumber: 1,
        column: 12,
        message: 'Error: Line 1: Unexpected token null'
    },

    'function null() { }': {
        index: 9,
        lineNumber: 1,
        column: 10,
        message: 'Error: Line 1: Unexpected token null'
    },

    'function true() { }': {
        index: 9,
        lineNumber: 1,
        column: 10,
        message: 'Error: Line 1: Unexpected token true'
    },

    'function false() { }': {
        index: 9,
        lineNumber: 1,
        column: 10,
        message: 'Error: Line 1: Unexpected token false'
    },

    'function if() { }': {
        index: 9,
        lineNumber: 1,
        column: 10,
        message: 'Error: Line 1: Unexpected token if'
    },

    'a b;': {
        index: 2,
        lineNumber: 1,
        column: 3,
        message: 'Error: Line 1: Unexpected identifier'
    },

    'if.a;': {
        index: 2,
        lineNumber: 1,
        column: 3,
        message: 'Error: Line 1: Unexpected token .'
    },

    'a if;': {
        index: 2,
        lineNumber: 1,
        column: 3,
        message: 'Error: Line 1: Unexpected token if'
    },

    'a class;': {
        index: 2,
        lineNumber: 1,
        column: 3,
        message: 'Error: Line 1: Unexpected reserved word'
    },

    'break\n': {
        index: 5,
        lineNumber: 1,
        column: 6,
        message: 'Error: Line 1: Illegal break statement'
    },

    'break 1;': {
        index: 6,
        lineNumber: 1,
        column: 7,
        message: 'Error: Line 1: Unexpected number'
    },

    'continue\n': {
        index: 8,
        lineNumber: 1,
        column: 9,
        message: 'Error: Line 1: Illegal continue statement'
    },

    'continue 2;': {
        index: 9,
        lineNumber: 1,
        column: 10,
        message: 'Error: Line 1: Unexpected number'
    },

    'throw': {
        index: 5,
        lineNumber: 1,
        column: 6,
        message: 'Error: Line 1: Unexpected end of input'
    },

    'throw;': {
        index: 5,
        lineNumber: 1,
        column: 6,
        message: 'Error: Line 1: Unexpected token ;'
    },

    'throw\n': {
        index: 5,
        lineNumber: 1,
        column: 6,
        message: 'Error: Line 1: Illegal newline after throw'
    },

    'for (var i, i2 in {});': {
        index: 15,
        lineNumber: 1,
        column: 16,
        message: 'Error: Line 1: Unexpected token in'
    },

    'for ((i in {}));': {
        index: 14,
        lineNumber: 1,
        column: 15,
        message: 'Error: Line 1: Unexpected token )'
    },

    'for (i + 1 in {});': {
        index: 10,
        lineNumber: 1,
        column: 11,
        message: 'Error: Line 1: Invalid left-hand side in for-in'
    },

    'for (+i in {});': {
        index: 7,
        lineNumber: 1,
        column: 8,
        message: 'Error: Line 1: Invalid left-hand side in for-in'
    },

    'if(false)': {
        index: 9,
        lineNumber: 1,
        column: 10,
        message: 'Error: Line 1: Unexpected end of input'
    },

    'if(false) doThis(); else': {
        index: 24,
        lineNumber: 1,
        column: 25,
        message: 'Error: Line 1: Unexpected end of input'
    },

    'do': {
        index: 2,
        lineNumber: 1,
        column: 3,
        message: 'Error: Line 1: Unexpected end of input'
    },

    'while(false)': {
        index: 12,
        lineNumber: 1,
        column: 13,
        message: 'Error: Line 1: Unexpected end of input'
    },

    'for(;;)': {
        index: 7,
        lineNumber: 1,
        column: 8,
        message: 'Error: Line 1: Unexpected end of input'
    },

    'with(x)': {
        index: 7,
        lineNumber: 1,
        column: 8,
        message: 'Error: Line 1: Unexpected end of input'
    },

    'try { }': {
        index: 7,
        lineNumber: 1,
        column: 8,
        message: 'Error: Line 1: Missing catch or finally after try'
    },

    'try {} catch (42) {} ': {
        index: 14,
        lineNumber: 1,
        column: 15,
        message: 'Error: Line 1: Unexpected number'
    },

    'try {} catch (answer()) {} ': {
        index: 20,
        lineNumber: 1,
        column: 21,
        message: 'Error: Line 1: Unexpected token ('
    },

    'try {} catch (-x) {} ': {
        index: 14,
        lineNumber: 1,
        column: 15,
        message: 'Error: Line 1: Unexpected token -'
    },

    '\u203F = 10': {
        index: 0,
        lineNumber: 1,
        column: 1,
        message: 'Error: Line 1: Unexpected token ILLEGAL'
    },

    'const x = 12, y;': {
        index: 15,
        lineNumber: 1,
        column: 16,
        message: 'Error: Line 1: Unexpected token ;'
    },

    'const x, y = 12;': {
        index: 7,
        lineNumber: 1,
        column: 8,
        message: 'Error: Line 1: Unexpected token ,'
    },

    'const x;': {
        index: 7,
        lineNumber: 1,
        column: 8,
        message: 'Error: Line 1: Unexpected token ;'
    },

    'if(true) let a = 1;': {
        index: 9,
        lineNumber: 1,
        column: 10,
        message: 'Error: Line 1: Unexpected token let'
    },

    'if(true) const a = 1;': {
        index: 9,
        lineNumber: 1,
        column: 10,
        message: 'Error: Line 1: Unexpected token const'
    },

    'switch (c) { default: default: }': {
        index: 30,
        lineNumber: 1,
        column: 31,
        message: 'Error: Line 1: More than one default clause in switch statement'
    },

    'new X()."s"': {
        index: 8,
        lineNumber: 1,
        column: 9,
        message: 'Error: Line 1: Unexpected string'
    },

    '/*': {
        index: 2,
        lineNumber: 1,
        column: 3,
        message: 'Error: Line 1: Unexpected token ILLEGAL'
    },

    '/*\n\n\n': {
        index: 5,
        lineNumber: 4,
        column: 1,
        message: 'Error: Line 4: Unexpected token ILLEGAL'
    },

    '/**': {
        index: 3,
        lineNumber: 1,
        column: 4,
        message: 'Error: Line 1: Unexpected token ILLEGAL'
    },

    '/*\n\n*': {
        index: 5,
        lineNumber: 3,
        column: 2,
        message: 'Error: Line 3: Unexpected token ILLEGAL'
    },

    '/*hello': {
        index: 7,
        lineNumber: 1,
        column: 8,
        message: 'Error: Line 1: Unexpected token ILLEGAL'
    },

    '/*hello  *': {
        index: 10,
        lineNumber: 1,
        column: 11,
        message: 'Error: Line 1: Unexpected token ILLEGAL'
    },

    '\n]': {
        index: 1,
        lineNumber: 2,
        column: 1,
        message: 'Error: Line 2: Unexpected token ]'
    },

    '\r]': {
        index: 1,
        lineNumber: 2,
        column: 1,
        message: 'Error: Line 2: Unexpected token ]'
    },

    '\r\n]': {
        index: 2,
        lineNumber: 2,
        column: 1,
        message: 'Error: Line 2: Unexpected token ]'
    },

    '\n\r]': {
        index: 2,
        lineNumber: 3,
        column: 1,
        message: 'Error: Line 3: Unexpected token ]'
    },

    '//\r\n]': {
        index: 4,
        lineNumber: 2,
        column: 1,
        message: 'Error: Line 2: Unexpected token ]'
    },

    '//\n\r]': {
        index: 4,
        lineNumber: 3,
        column: 1,
        message: 'Error: Line 3: Unexpected token ]'
    },

    '/a\\\n/': {
        index: 4,
        lineNumber: 1,
        column: 5,
        message: 'Error: Line 1: Invalid regular expression: missing /'
    },

    '//\r \n]': {
        index: 5,
        lineNumber: 3,
        column: 1,
        message: 'Error: Line 3: Unexpected token ]'
    },

    '/*\r\n*/]': {
        index: 6,
        lineNumber: 2,
        column: 3,
        message: 'Error: Line 2: Unexpected token ]'
    },

    '/*\n\r*/]': {
        index: 6,
        lineNumber: 3,
        column: 3,
        message: 'Error: Line 3: Unexpected token ]'
    },

    '/*\r \n*/]': {
        index: 7,
        lineNumber: 3,
        column: 3,
        message: 'Error: Line 3: Unexpected token ]'
    },

    '\\\\': {
        index: 1,
        lineNumber: 1,
        column: 2,
        message: 'Error: Line 1: Unexpected token ILLEGAL'
    },

    '\\u005c': {
        index: 6,
        lineNumber: 1,
        column: 7,
        message: 'Error: Line 1: Unexpected token ILLEGAL'
    },

    '\\x': {
        index: 1,
        lineNumber: 1,
        column: 2,
        message: 'Error: Line 1: Unexpected token ILLEGAL'
    },

    '\\u0000': {
        index: 6,
        lineNumber: 1,
        column: 7,
        message: 'Error: Line 1: Unexpected token ILLEGAL'
    },

    '\u200C = []': {
        index: 0,
        lineNumber: 1,
        column: 1,
        message: 'Error: Line 1: Unexpected token ILLEGAL'
    },

    '\u200D = []': {
        index: 0,
        lineNumber: 1,
        column: 1,
        message: 'Error: Line 1: Unexpected token ILLEGAL'
    },

    '"\\': {
        index: 3,
        lineNumber: 1,
        column: 4,
        message: 'Error: Line 1: Unexpected token ILLEGAL'
    },

    '"\\u': {
        index: 3,
        lineNumber: 1,
        column: 4,
        message: 'Error: Line 1: Unexpected token ILLEGAL'
    },

    'try { } catch() {}': {
        index: 14,
        lineNumber: 1,
        column: 15,
        message: 'Error: Line 1: Unexpected token )'
    },

    'return': {
        index: 6,
        lineNumber: 1,
        column: 7,
        message: 'Error: Line 1: Illegal return statement'
    },

    'break': {
        index: 5,
        lineNumber: 1,
        column: 6,
        message: 'Error: Line 1: Illegal break statement'
    },

    'continue': {
        index: 8,
        lineNumber: 1,
        column: 9,
        message: 'Error: Line 1: Illegal continue statement'
    },

    'switch (x) { default: continue; }': {
        index: 31,
        lineNumber: 1,
        column: 32,
        message: 'Error: Line 1: Illegal continue statement'
    },

    'do { x } *': {
        index: 9,
        lineNumber: 1,
        column: 10,
        message: 'Error: Line 1: Unexpected token *'
    },

    'while (true) { break x; }': {
        index: 22,
        lineNumber: 1,
        column: 23,
        message: 'Error: Line 1: Undefined label \'x\''
    },

    'while (true) { continue x; }': {
        index: 25,
        lineNumber: 1,
        column: 26,
        message: 'Error: Line 1: Undefined label \'x\''
    },

    'x: while (true) { (function () { break x; }); }': {
        index: 40,
        lineNumber: 1,
        column: 41,
        message: 'Error: Line 1: Undefined label \'x\''
    },

    'x: while (true) { (function () { continue x; }); }': {
        index: 43,
        lineNumber: 1,
        column: 44,
        message: 'Error: Line 1: Undefined label \'x\''
    },

    'x: while (true) { (function () { break; }); }': {
        index: 39,
        lineNumber: 1,
        column: 40,
        message: 'Error: Line 1: Illegal break statement'
    },

    'x: while (true) { (function () { continue; }); }': {
        index: 42,
        lineNumber: 1,
        column: 43,
        message: 'Error: Line 1: Illegal continue statement'
    },

    'x: while (true) { x: while (true) { } }': {
        index: 20,
        lineNumber: 1,
        column: 21,
        message: 'Error: Line 1: Label \'x\' has already been declared'
    },

    '(function () { \'use strict\'; delete i; }())': {
        index: 37,
        lineNumber: 1,
        column: 38,
        message: 'Error: Line 1: Delete of an unqualified identifier in strict mode.'
    },

    '(function () { \'use strict\'; with (i); }())': {
        index: 29,
        lineNumber: 1,
        column: 30,
        message: 'Error: Line 1: Strict mode code may not include a with statement'
    },

    'function hello() {\'use strict\'; ({ i: 42, i: 42 }) }': {
        index: 47,
        lineNumber: 1,
        column: 48,
        message: 'Error: Line 1: Duplicate data property in object literal not allowed in strict mode'
    },

    'function hello() {\'use strict\'; ({ hasOwnProperty: 42, hasOwnProperty: 42 }) }': {
        index: 73,
        lineNumber: 1,
        column: 74,
        message: 'Error: Line 1: Duplicate data property in object literal not allowed in strict mode'
    },

    'function hello() {\'use strict\'; var eval = 10; }': {
        index: 40,
        lineNumber: 1,
        column: 41,
        message: 'Error: Line 1: Variable name may not be eval or arguments in strict mode'
    },

    'function hello() {\'use strict\'; var arguments = 10; }': {
        index: 45,
        lineNumber: 1,
        column: 46,
        message: 'Error: Line 1: Variable name may not be eval or arguments in strict mode'
    },

    'function hello() {\'use strict\'; try { } catch (eval) { } }': {
        index: 51,
        lineNumber: 1,
        column: 52,
        message: 'Error: Line 1: Catch variable may not be eval or arguments in strict mode'
    },

    'function hello() {\'use strict\'; try { } catch (arguments) { } }': {
        index: 56,
        lineNumber: 1,
        column: 57,
        message: 'Error: Line 1: Catch variable may not be eval or arguments in strict mode'
    },

    'function hello() {\'use strict\'; eval = 10; }': {
        index: 32,
        lineNumber: 1,
        column: 33,
        message: 'Error: Line 1: Assignment to eval or arguments is not allowed in strict mode'
    },

    'function hello() {\'use strict\'; arguments = 10; }': {
        index: 32,
        lineNumber: 1,
        column: 33,
        message: 'Error: Line 1: Assignment to eval or arguments is not allowed in strict mode'
    },

    'function hello() {\'use strict\'; ++eval; }': {
        index: 38,
        lineNumber: 1,
        column: 39,
        message: 'Error: Line 1: Prefix increment/decrement may not have eval or arguments operand in strict mode'
    },

    'function hello() {\'use strict\'; --eval; }': {
        index: 38,
        lineNumber: 1,
        column: 39,
        message: 'Error: Line 1: Prefix increment/decrement may not have eval or arguments operand in strict mode'
    },

    'function hello() {\'use strict\'; ++arguments; }': {
        index: 43,
        lineNumber: 1,
        column: 44,
        message: 'Error: Line 1: Prefix increment/decrement may not have eval or arguments operand in strict mode'
    },

    'function hello() {\'use strict\'; --arguments; }': {
        index: 43,
        lineNumber: 1,
        column: 44,
        message: 'Error: Line 1: Prefix increment/decrement may not have eval or arguments operand in strict mode'
    },

    'function hello() {\'use strict\'; eval++; }': {
        index: 36,
        lineNumber: 1,
        column: 37,
        message: 'Error: Line 1: Postfix increment/decrement may not have eval or arguments operand in strict mode'
    },

    'function hello() {\'use strict\'; eval--; }': {
        index: 36,
        lineNumber: 1,
        column: 37,
        message: 'Error: Line 1: Postfix increment/decrement may not have eval or arguments operand in strict mode'
    },

    'function hello() {\'use strict\'; arguments++; }': {
        index: 41,
        lineNumber: 1,
        column: 42,
        message: 'Error: Line 1: Postfix increment/decrement may not have eval or arguments operand in strict mode'
    },

    'function hello() {\'use strict\'; arguments--; }': {
        index: 41,
        lineNumber: 1,
        column: 42,
        message: 'Error: Line 1: Postfix increment/decrement may not have eval or arguments operand in strict mode'
    },

    'function hello() {\'use strict\'; function eval() { } }': {
        index: 41,
        lineNumber: 1,
        column: 42,
        message: 'Error: Line 1: Function name may not be eval or arguments in strict mode'
    },

    'function hello() {\'use strict\'; function arguments() { } }': {
        index: 41,
        lineNumber: 1,
        column: 42,
        message: 'Error: Line 1: Function name may not be eval or arguments in strict mode'
    },

    'function eval() {\'use strict\'; }': {
        index: 9,
        lineNumber: 1,
        column: 10,
        message: 'Error: Line 1: Function name may not be eval or arguments in strict mode'
    },

    'function arguments() {\'use strict\'; }': {
        index: 9,
        lineNumber: 1,
        column: 10,
        message: 'Error: Line 1: Function name may not be eval or arguments in strict mode'
    },

    'function hello() {\'use strict\'; (function eval() { }()) }': {
        index: 42,
        lineNumber: 1,
        column: 43,
        message: 'Error: Line 1: Function name may not be eval or arguments in strict mode'
    },

    'function hello() {\'use strict\'; (function arguments() { }()) }': {
        index: 42,
        lineNumber: 1,
        column: 43,
        message: 'Error: Line 1: Function name may not be eval or arguments in strict mode'
    },

    '(function eval() {\'use strict\'; })()': {
        index: 10,
        lineNumber: 1,
        column: 11,
        message: 'Error: Line 1: Function name may not be eval or arguments in strict mode'
    },

    '(function arguments() {\'use strict\'; })()': {
        index: 10,
        lineNumber: 1,
        column: 11,
        message: 'Error: Line 1: Function name may not be eval or arguments in strict mode'
    },

    'function hello() {\'use strict\'; ({ s: function eval() { } }); }': {
        index: 47,
        lineNumber: 1,
        column: 48,
        message: 'Error: Line 1: Function name may not be eval or arguments in strict mode'
    },

    '(function package() {\'use strict\'; })()': {
        index: 10,
        lineNumber: 1,
        column: 11,
        message: 'Error: Line 1: Use of future reserved word in strict mode'
    },

    'function hello() {\'use strict\'; ({ i: 10, set s(eval) { } }); }': {
        index: 48,
        lineNumber: 1,
        column: 49,
        message: 'Error: Line 1: Parameter name eval or arguments is not allowed in strict mode'
    },

    'function hello() {\'use strict\'; ({ set s(eval) { } }); }': {
        index: 41,
        lineNumber: 1,
        column: 42,
        message: 'Error: Line 1: Parameter name eval or arguments is not allowed in strict mode'
    },

    'function hello() {\'use strict\'; ({ s: function s(eval) { } }); }': {
        index: 49,
        lineNumber: 1,
        column: 50,
        message: 'Error: Line 1: Parameter name eval or arguments is not allowed in strict mode'
    },

    'function hello(eval) {\'use strict\';}': {
        index: 15,
        lineNumber: 1,
        column: 16,
        message: 'Error: Line 1: Parameter name eval or arguments is not allowed in strict mode'
    },

    'function hello(arguments) {\'use strict\';}': {
        index: 15,
        lineNumber: 1,
        column: 16,
        message: 'Error: Line 1: Parameter name eval or arguments is not allowed in strict mode'
    },

    'function hello() { \'use strict\'; function inner(eval) {} }': {
        index: 48,
        lineNumber: 1,
        column: 49,
        message: 'Error: Line 1: Parameter name eval or arguments is not allowed in strict mode'
    },

    'function hello() { \'use strict\'; function inner(arguments) {} }': {
        index: 48,
        lineNumber: 1,
        column: 49,
        message: 'Error: Line 1: Parameter name eval or arguments is not allowed in strict mode'
    },

    ' "\\1"; \'use strict\';': {
        index: 1,
        lineNumber: 1,
        column: 2,
        message: 'Error: Line 1: Octal literals are not allowed in strict mode.'
    },

    'function hello() { \'use strict\'; "\\1"; }': {
        index: 33,
        lineNumber: 1,
        column: 34,
        message: 'Error: Line 1: Octal literals are not allowed in strict mode.'
    },

    'function hello() { \'use strict\'; 021; }': {
        index: 33,
        lineNumber: 1,
        column: 34,
        message: 'Error: Line 1: Octal literals are not allowed in strict mode.'
    },

    'function hello() { \'use strict\'; ({ "\\1": 42 }); }': {
        index: 36,
        lineNumber: 1,
        column: 37,
        message: 'Error: Line 1: Octal literals are not allowed in strict mode.'
    },

    'function hello() { \'use strict\'; ({ 021: 42 }); }': {
        index: 36,
        lineNumber: 1,
        column: 37,
        message: 'Error: Line 1: Octal literals are not allowed in strict mode.'
    },

    'function hello() { "octal directive\\1"; "use strict"; }': {
        index: 19,
        lineNumber: 1,
        column: 20,
        message: 'Error: Line 1: Octal literals are not allowed in strict mode.'
    },

    'function hello() { "octal directive\\1"; "octal directive\\2"; "use strict"; }': {
        index: 19,
        lineNumber: 1,
        column: 20,
        message: 'Error: Line 1: Octal literals are not allowed in strict mode.'
    },

    'function hello() { "use strict"; function inner() { "octal directive\\1"; } }': {
        index: 52,
        lineNumber: 1,
        column: 53,
        message: 'Error: Line 1: Octal literals are not allowed in strict mode.'
    },

    'function hello() { "use strict"; var implements; }': {
        index: 37,
        lineNumber: 1,
        column: 38,
        message: 'Error: Line 1: Use of future reserved word in strict mode'
    },

    'function hello() { "use strict"; var interface; }': {
        index: 37,
        lineNumber: 1,
        column: 38,
        message: 'Error: Line 1: Use of future reserved word in strict mode'
    },

    'function hello() { "use strict"; var package; }': {
        index: 37,
        lineNumber: 1,
        column: 38,
        message: 'Error: Line 1: Use of future reserved word in strict mode'
    },

    'function hello() { "use strict"; var private; }': {
        index: 37,
        lineNumber: 1,
        column: 38,
        message: 'Error: Line 1: Use of future reserved word in strict mode'
    },

    'function hello() { "use strict"; var protected; }': {
        index: 37,
        lineNumber: 1,
        column: 38,
        message: 'Error: Line 1: Use of future reserved word in strict mode'
    },

    'function hello() { "use strict"; var public; }': {
        index: 37,
        lineNumber: 1,
        column: 38,
        message: 'Error: Line 1: Use of future reserved word in strict mode'
    },

    'function hello() { "use strict"; var static; }': {
        index: 37,
        lineNumber: 1,
        column: 38,
        message: 'Error: Line 1: Use of future reserved word in strict mode'
    },

    'function hello() { "use strict"; var yield; }': {
        index: 37,
        lineNumber: 1,
        column: 38,
        message: 'Error: Line 1: Use of future reserved word in strict mode'
    },

    'function hello() { "use strict"; var let; }': {
        index: 37,
        lineNumber: 1,
        column: 38,
        message: 'Error: Line 1: Use of future reserved word in strict mode'
    },

    'function hello(static) { "use strict"; }': {
        index: 15,
        lineNumber: 1,
        column: 16,
        message: 'Error: Line 1: Use of future reserved word in strict mode'
    },

    'function static() { "use strict"; }': {
        index: 9,
        lineNumber: 1,
        column: 10,
        message: 'Error: Line 1: Use of future reserved word in strict mode'
    },

    'function eval(a) { "use strict"; }': {
        index: 9,
        lineNumber: 1,
        column: 10,
        message: 'Error: Line 1: Function name may not be eval or arguments in strict mode'
    },

    'function arguments(a) { "use strict"; }': {
        index: 9,
        lineNumber: 1,
        column: 10,
        message: 'Error: Line 1: Function name may not be eval or arguments in strict mode'
    },

    'var yield': {
        index: 4,
        lineNumber: 1,
        column: 5,
        message: 'Error: Line 1: Unexpected token yield'
    },

    'var let': {
        index: 4,
        lineNumber: 1,
        column: 5,
        message: 'Error: Line 1: Unexpected token let'
    },

    '"use strict"; function static() { }': {
        index: 23,
        lineNumber: 1,
        column: 24,
        message: 'Error: Line 1: Use of future reserved word in strict mode'
    },

    'function a(t, t) { "use strict"; }': {
        index: 14,
        lineNumber: 1,
        column: 15,
        message: 'Error: Line 1: Strict mode function may not have duplicate parameter names'
    },

    'function a(eval) { "use strict"; }': {
        index: 11,
        lineNumber: 1,
        column: 12,
        message: 'Error: Line 1: Parameter name eval or arguments is not allowed in strict mode'
    },

    'function a(package) { "use strict"; }': {
        index: 11,
        lineNumber: 1,
        column: 12,
        message: 'Error: Line 1: Use of future reserved word in strict mode'
    },

    'function a() { "use strict"; function b(t, t) { }; }': {
        index: 43,
        lineNumber: 1,
        column: 44,
        message: 'Error: Line 1: Strict mode function may not have duplicate parameter names'
    },

    '(function a(t, t) { "use strict"; })': {
        index: 15,
        lineNumber: 1,
        column: 16,
        message: 'Error: Line 1: Strict mode function may not have duplicate parameter names'
    },

    'function a() { "use strict"; (function b(t, t) { }); }': {
        index: 44,
        lineNumber: 1,
        column: 45,
        message: 'Error: Line 1: Strict mode function may not have duplicate parameter names'
    },

    '(function a(eval) { "use strict"; })': {
        index: 12,
        lineNumber: 1,
        column: 13,
        message: 'Error: Line 1: Parameter name eval or arguments is not allowed in strict mode'
    },

    '(function a(package) { "use strict"; })': {
        index: 12,
        lineNumber: 1,
        column: 13,
        message: 'Error: Line 1: Use of future reserved word in strict mode'
    },

    '__proto__: __proto__: 42;': {
        index: 21,
        lineNumber: 1,
        column: 22,
        message: 'Error: Line 1: Label \'__proto__\' has already been declared'
    },

    '"use strict"; function t(__proto__, __proto__) { }': {
        index: 36,
        lineNumber: 1,
        column: 37,
        message: 'Error: Line 1: Strict mode function may not have duplicate parameter names'
    },

    '"use strict"; x = { __proto__: 42, __proto__: 43 }': {
        index: 48,
        lineNumber: 1,
        column: 49,
        message: 'Error: Line 1: Duplicate data property in object literal not allowed in strict mode'
    },

    '"use strict"; x = { get __proto__() { }, __proto__: 43 }': {
        index: 54,
        lineNumber: 1,
        column: 55,
        message: 'Error: Line 1: Object literal may not have data and accessor property with the same name'
    },

    'var': {
        index: 3,
        lineNumber: 1,
        column: 4,
        message: 'Error: Line 1: Unexpected end of input'
    },

    'let': {
        index: 3,
        lineNumber: 1,
        column: 4,
        message: 'Error: Line 1: Unexpected end of input'
    },

    'const': {
        index: 5,
        lineNumber: 1,
        column: 6,
        message: 'Error: Line 1: Unexpected end of input'
    },

    '{ ;  ;  ': {
        index: 8,
        lineNumber: 1,
        column: 9,
        message: 'Error: Line 1: Unexpected end of input'
    },

    'function t() { ;  ;  ': {
        index: 21,
        lineNumber: 1,
        column: 22,
        message: 'Error: Line 1: Unexpected end of input'
    }

},

'Tokenize': {
    'tokenize(/42/)': [
        {
            "type": "Identifier",
            "value": "tokenize",
            "range": [
                0,
                8
            ],
            "loc": {
                "start": {
                    "line": 1,
                    "column": 0
                },
                "end": {
                    "line": 1,
                    "column": 8
                }
            }
        },
        {
            "type": "Punctuator",
            "value": "(",
            "range": [
                8,
                9
            ],
            "loc": {
                "start": {
                    "line": 1,
                    "column": 8
                },
                "end": {
                    "line": 1,
                    "column": 9
                }
            }
        },
        {
            "type": "RegularExpression",
            "value": "/42/",
            "range": [
                9,
                13
            ],
            "loc": {
                "start": {
                    "line": 1,
                    "column": 9
                },
                "end": {
                    "line": 1,
                    "column": 13
                }
            }
        },
        {
            "type": "Punctuator",
            "value": ")",
            "range": [
                13,
                14
            ],
            "loc": {
                "start": {
                    "line": 1,
                    "column": 13
                },
                "end": {
                    "line": 1,
                    "column": 14
                }
            }
        }
    ],

    'if (false) { /42/ }': [
        {
            "type": "Keyword",
            "value": "if",
            "range": [
                0,
                2
            ],
            "loc": {
                "start": {
                    "line": 1,
                    "column": 0
                },
                "end": {
                    "line": 1,
                    "column": 2
                }
            }
        },
        {
            "type": "Punctuator",
            "value": "(",
            "range": [
                3,
                4
            ],
            "loc": {
                "start": {
                    "line": 1,
                    "column": 3
                },
                "end": {
                    "line": 1,
                    "column": 4
                }
            }
        },
        {
            "type": "Boolean",
            "value": "false",
            "range": [
                4,
                9
            ],
            "loc": {
                "start": {
                    "line": 1,
                    "column": 4
                },
                "end": {
                    "line": 1,
                    "column": 9
                }
            }
        },
        {
            "type": "Punctuator",
            "value": ")",
            "range": [
                9,
                10
            ],
            "loc": {
                "start": {
                    "line": 1,
                    "column": 9
                },
                "end": {
                    "line": 1,
                    "column": 10
                }
            }
        },
        {
            "type": "Punctuator",
            "value": "{",
            "range": [
                11,
                12
            ],
            "loc": {
                "start": {
                    "line": 1,
                    "column": 11
                },
                "end": {
                    "line": 1,
                    "column": 12
                }
            }
        },
        {
            "type": "RegularExpression",
            "value": "/42/",
            "range": [
                13,
                17
            ],
            "loc": {
                "start": {
                    "line": 1,
                    "column": 13
                },
                "end": {
                    "line": 1,
                    "column": 17
                }
            }
        },
        {
            "type": "Punctuator",
            "value": "}",
            "range": [
                18,
                19
            ],
            "loc": {
                "start": {
                    "line": 1,
                    "column": 18
                },
                "end": {
                    "line": 1,
                    "column": 19
                }
            }
        }
    ],

    'with (false) /42/': [
        {
            "type": "Keyword",
            "value": "with",
            "range": [
                0,
                4
            ],
            "loc": {
                "start": {
                    "line": 1,
                    "column": 0
                },
                "end": {
                    "line": 1,
                    "column": 4
                }
            }
        },
        {
            "type": "Punctuator",
            "value": "(",
            "range": [
                5,
                6
            ],
            "loc": {
                "start": {
                    "line": 1,
                    "column": 5
                },
                "end": {
                    "line": 1,
                    "column": 6
                }
            }
        },
        {
            "type": "Boolean",
            "value": "false",
            "range": [
                6,
                11
            ],
            "loc": {
                "start": {
                    "line": 1,
                    "column": 6
                },
                "end": {
                    "line": 1,
                    "column": 11
                }
            }
        },
        {
            "type": "Punctuator",
            "value": ")",
            "range": [
                11,
                12
            ],
            "loc": {
                "start": {
                    "line": 1,
                    "column": 11
                },
                "end": {
                    "line": 1,
                    "column": 12
                }
            }
        },
        {
            "type": "RegularExpression",
            "value": "/42/",
            "range": [
                13,
                17
            ],
            "loc": {
                "start": {
                    "line": 1,
                    "column": 13
                },
                "end": {
                    "line": 1,
                    "column": 17
                }
            }
        }
    ],

    '(false) /42/': [
        {
            "type": "Punctuator",
            "value": "(",
            "range": [
                0,
                1
            ],
            "loc": {
                "start": {
                    "line": 1,
                    "column": 0
                },
                "end": {
                    "line": 1,
                    "column": 1
                }
            }
        },
        {
            "type": "Boolean",
            "value": "false",
            "range": [
                1,
                6
            ],
            "loc": {
                "start": {
                    "line": 1,
                    "column": 1
                },
                "end": {
                    "line": 1,
                    "column": 6
                }
            }
        },
        {
            "type": "Punctuator",
            "value": ")",
            "range": [
                6,
                7
            ],
            "loc": {
                "start": {
                    "line": 1,
                    "column": 6
                },
                "end": {
                    "line": 1,
                    "column": 7
                }
            }
        },
        {
            "type": "Punctuator",
            "value": "/",
            "range": [
                8,
                9
            ],
            "loc": {
                "start": {
                    "line": 1,
                    "column": 8
                },
                "end": {
                    "line": 1,
                    "column": 9
                }
            }
        },
        {
            "type": "Numeric",
            "value": "42",
            "range": [
                9,
                11
            ],
            "loc": {
                "start": {
                    "line": 1,
                    "column": 9
                },
                "end": {
                    "line": 1,
                    "column": 11
                }
            }
        },
        {
            "type": "Punctuator",
            "value": "/",
            "range": [
                11,
                12
            ],
            "loc": {
                "start": {
                    "line": 1,
                    "column": 11
                },
                "end": {
                    "line": 1,
                    "column": 12
                }
            }
        }
    ],

    'function f(){} /42/': [
        {
            "type": "Keyword",
            "value": "function",
            "range": [
                0,
                8
            ],
            "loc": {
                "start": {
                    "line": 1,
                    "column": 0
                },
                "end": {
                    "line": 1,
                    "column": 8
                }
            }
        },
        {
            "type": "Identifier",
            "value": "f",
            "range": [
                9,
                10
            ],
            "loc": {
                "start": {
                    "line": 1,
                    "column": 9
                },
                "end": {
                    "line": 1,
                    "column": 10
                }
            }
        },
        {
            "type": "Punctuator",
            "value": "(",
            "range": [
                10,
                11
            ],
            "loc": {
                "start": {
                    "line": 1,
                    "column": 10
                },
                "end": {
                    "line": 1,
                    "column": 11
                }
            }
        },
        {
            "type": "Punctuator",
            "value": ")",
            "range": [
                11,
                12
            ],
            "loc": {
                "start": {
                    "line": 1,
                    "column": 11
                },
                "end": {
                    "line": 1,
                    "column": 12
                }
            }
        },
        {
            "type": "Punctuator",
            "value": "{",
            "range": [
                12,
                13
            ],
            "loc": {
                "start": {
                    "line": 1,
                    "column": 12
                },
                "end": {
                    "line": 1,
                    "column": 13
                }
            }
        },
        {
            "type": "Punctuator",
            "value": "}",
            "range": [
                13,
                14
            ],
            "loc": {
                "start": {
                    "line": 1,
                    "column": 13
                },
                "end": {
                    "line": 1,
                    "column": 14
                }
            }
        },
        {
            "type": "RegularExpression",
            "value": "/42/",
            "range": [
                15,
                19
            ],
            "loc": {
                "start": {
                    "line": 1,
                    "column": 15
                },
                "end": {
                    "line": 1,
                    "column": 19
                }
            }
        }
    ],

    'function(){} /42': [
        {
            "type": "Keyword",
            "value": "function",
            "range": [
                0,
                8
            ],
            "loc": {
                "start": {
                    "line": 1,
                    "column": 0
                },
                "end": {
                    "line": 1,
                    "column": 8
                }
            }
        },
        {
            "type": "Punctuator",
            "value": "(",
            "range": [
                8,
                9
            ],
            "loc": {
                "start": {
                    "line": 1,
                    "column": 8
                },
                "end": {
                    "line": 1,
                    "column": 9
                }
            }
        },
        {
            "type": "Punctuator",
            "value": ")",
            "range": [
                9,
                10
            ],
            "loc": {
                "start": {
                    "line": 1,
                    "column": 9
                },
                "end": {
                    "line": 1,
                    "column": 10
                }
            }
        },
        {
            "type": "Punctuator",
            "value": "{",
            "range": [
                10,
                11
            ],
            "loc": {
                "start": {
                    "line": 1,
                    "column": 10
                },
                "end": {
                    "line": 1,
                    "column": 11
                }
            }
        },
        {
            "type": "Punctuator",
            "value": "}",
            "range": [
                11,
                12
            ],
            "loc": {
                "start": {
                    "line": 1,
                    "column": 11
                },
                "end": {
                    "line": 1,
                    "column": 12
                }
            }
        },
        {
            "type": "Punctuator",
            "value": "/",
            "range": [
                13,
                14
            ],
            "loc": {
                "start": {
                    "line": 1,
                    "column": 13
                },
                "end": {
                    "line": 1,
                    "column": 14
                }
            }
        },
        {
            "type": "Numeric",
            "value": "42",
            "range": [
                14,
                16
            ],
            "loc": {
                "start": {
                    "line": 1,
                    "column": 14
                },
                "end": {
                    "line": 1,
                    "column": 16
                }
            }
        }
    ],

    '{} /42': [
        {
            "type": "Punctuator",
            "value": "{",
            "range": [
                0,
                1
            ],
            "loc": {
                "start": {
                    "line": 1,
                    "column": 0
                },
                "end": {
                    "line": 1,
                    "column": 1
                }
            }
        },
        {
            "type": "Punctuator",
            "value": "}",
            "range": [
                1,
                2
            ],
            "loc": {
                "start": {
                    "line": 1,
                    "column": 1
                },
                "end": {
                    "line": 1,
                    "column": 2
                }
            }
        },
        {
            "type": "Punctuator",
            "value": "/",
            "range": [
                3,
                4
            ],
            "loc": {
                "start": {
                    "line": 1,
                    "column": 3
                },
                "end": {
                    "line": 1,
                    "column": 4
                }
            }
        },
        {
            "type": "Numeric",
            "value": "42",
            "range": [
                4,
                6
            ],
            "loc": {
                "start": {
                    "line": 1,
                    "column": 4
                },
                "end": {
                    "line": 1,
                    "column": 6
                }
            }
        }
    ],

    '[function(){} /42]': [
        {
            "type": "Punctuator",
            "value": "[",
            "range": [
                0,
                1
            ],
            "loc": {
                "start": {
                    "line": 1,
                    "column": 0
                },
                "end": {
                    "line": 1,
                    "column": 1
                }
            }
        },
        {
            "type": "Keyword",
            "value": "function",
            "range": [
                1,
                9
            ],
            "loc": {
                "start": {
                    "line": 1,
                    "column": 1
                },
                "end": {
                    "line": 1,
                    "column": 9
                }
            }
        },
        {
            "type": "Punctuator",
            "value": "(",
            "range": [
                9,
                10
            ],
            "loc": {
                "start": {
                    "line": 1,
                    "column": 9
                },
                "end": {
                    "line": 1,
                    "column": 10
                }
            }
        },
        {
            "type": "Punctuator",
            "value": ")",
            "range": [
                10,
                11
            ],
            "loc": {
                "start": {
                    "line": 1,
                    "column": 10
                },
                "end": {
                    "line": 1,
                    "column": 11
                }
            }
        },
        {
            "type": "Punctuator",
            "value": "{",
            "range": [
                11,
                12
            ],
            "loc": {
                "start": {
                    "line": 1,
                    "column": 11
                },
                "end": {
                    "line": 1,
                    "column": 12
                }
            }
        },
        {
            "type": "Punctuator",
            "value": "}",
            "range": [
                12,
                13
            ],
            "loc": {
                "start": {
                    "line": 1,
                    "column": 12
                },
                "end": {
                    "line": 1,
                    "column": 13
                }
            }
        },
        {
            "type": "Punctuator",
            "value": "/",
            "range": [
                14,
                15
            ],
            "loc": {
                "start": {
                    "line": 1,
                    "column": 14
                },
                "end": {
                    "line": 1,
                    "column": 15
                }
            }
        },
        {
            "type": "Numeric",
            "value": "42",
            "range": [
                15,
                17
            ],
            "loc": {
                "start": {
                    "line": 1,
                    "column": 15
                },
                "end": {
                    "line": 1,
                    "column": 17
                }
            }
        },
        {
            "type": "Punctuator",
            "value": "]",
            "range": [
                17,
                18
            ],
            "loc": {
                "start": {
                    "line": 1,
                    "column": 17
                },
                "end": {
                    "line": 1,
                    "column": 18
                }
            }
        }
    ],

    ';function f(){} /42/': [
        {
            "type": "Punctuator",
            "value": ";",
            "range": [
                0,
                1
            ],
            "loc": {
                "start": {
                    "line": 1,
                    "column": 0
                },
                "end": {
                    "line": 1,
                    "column": 1
                }
            }
        },
        {
            "type": "Keyword",
            "value": "function",
            "range": [
                1,
                9
            ],
            "loc": {
                "start": {
                    "line": 1,
                    "column": 1
                },
                "end": {
                    "line": 1,
                    "column": 9
                }
            }
        },
        {
            "type": "Identifier",
            "value": "f",
            "range": [
                10,
                11
            ],
            "loc": {
                "start": {
                    "line": 1,
                    "column": 10
                },
                "end": {
                    "line": 1,
                    "column": 11
                }
            }
        },
        {
            "type": "Punctuator",
            "value": "(",
            "range": [
                11,
                12
            ],
            "loc": {
                "start": {
                    "line": 1,
                    "column": 11
                },
                "end": {
                    "line": 1,
                    "column": 12
                }
            }
        },
        {
            "type": "Punctuator",
            "value": ")",
            "range": [
                12,
                13
            ],
            "loc": {
                "start": {
                    "line": 1,
                    "column": 12
                },
                "end": {
                    "line": 1,
                    "column": 13
                }
            }
        },
        {
            "type": "Punctuator",
            "value": "{",
            "range": [
                13,
                14
            ],
            "loc": {
                "start": {
                    "line": 1,
                    "column": 13
                },
                "end": {
                    "line": 1,
                    "column": 14
                }
            }
        },
        {
            "type": "Punctuator",
            "value": "}",
            "range": [
                14,
                15
            ],
            "loc": {
                "start": {
                    "line": 1,
                    "column": 14
                },
                "end": {
                    "line": 1,
                    "column": 15
                }
            }
        },
        {
            "type": "RegularExpression",
            "value": "/42/",
            "range": [
                16,
                20
            ],
            "loc": {
                "start": {
                    "line": 1,
                    "column": 16
                },
                "end": {
                    "line": 1,
                    "column": 20
                }
            }
        }
    ],

    'void /42/': [
        {
            "type": "Keyword",
            "value": "void",
            "range": [
                0,
                4
            ],
            "loc": {
                "start": {
                    "line": 1,
                    "column": 0
                },
                "end": {
                    "line": 1,
                    "column": 4
                }
            }
        },
        {
            "type": "RegularExpression",
            "value": "/42/",
            "range": [
                5,
                9
            ],
            "loc": {
                "start": {
                    "line": 1,
                    "column": 5
                },
                "end": {
                    "line": 1,
                    "column": 9
                }
            }
        }
    ],

    '/42/': [
        {
            "type": "RegularExpression",
            "value": "/42/",
            "range": [
                0,
                4
            ],
            "loc": {
                "start": {
                    "line": 1,
                    "column": 0
                },
                "end": {
                    "line": 1,
                    "column": 4
                }
            }
        }
    ],

    'foo[/42]': [
        {
            "type": "Identifier",
            "value": "foo",
            "range": [
                0,
                3
            ],
            "loc": {
                "start": {
                    "line": 1,
                    "column": 0
                },
                "end": {
                    "line": 1,
                    "column": 3
                }
            }
        },
        {
            "type": "Punctuator",
            "value": "[",
            "range": [
                3,
                4
            ],
            "loc": {
                "start": {
                    "line": 1,
                    "column": 3
                },
                "end": {
                    "line": 1,
                    "column": 4
                }
            }
        }
    ],

    '[a] / b': [
        {
            "type": "Punctuator",
            "value": "[",
            "range": [
                0,
                1
            ],
            "loc": {
                "start": {
                    "line": 1,
                    "column": 0
                },
                "end": {
                    "line": 1,
                    "column": 1
                }
            }
        },
        {
            "type": "Identifier",
            "value": "a",
            "range": [
                1,
                2
            ],
            "loc": {
                "start": {
                    "line": 1,
                    "column": 1
                },
                "end": {
                    "line": 1,
                    "column": 2
                }
            }
        },
        {
            "type": "Punctuator",
            "value": "]",
            "range": [
                2,
                3
            ],
            "loc": {
                "start": {
                    "line": 1,
                    "column": 2
                },
                "end": {
                    "line": 1,
                    "column": 3
                }
            }
        },
        {
            "type": "Punctuator",
            "value": "/",
            "range": [
                4,
                5
            ],
            "loc": {
                "start": {
                    "line": 1,
                    "column": 4
                },
                "end": {
                    "line": 1,
                    "column": 5
                }
            }
        },
        {
            "type": "Identifier",
            "value": "b",
            "range": [
                6,
                7
            ],
            "loc": {
                "start": {
                    "line": 1,
                    "column": 6
                },
                "end": {
                    "line": 1,
                    "column": 7
                }
            }
        }
    ],

    '': [],

    '/42': {
        tokenize: true,
        index: 3,
        lineNumber: 1,
        column: 4,
        message: 'Error: Line 1: Invalid regular expression: missing /'
    },

    'foo[/42': {
        tokenize: true,
        index: 7,
        lineNumber: 1,
        column: 8,
        message: 'Error: Line 1: Invalid regular expression: missing /'
    }

},

'API': {
    'parse()': {
        call: 'parse',
        args: [],
        result: {
            type: 'Program',
            body: [{
                type: 'ExpressionStatement',
                expression: {
                    type: 'Identifier',
                    name: 'undefined'
                }
            }]
        }
    },

    'parse(null)': {
        call: 'parse',
        args: [null],
        result: {
            type: 'Program',
            body: [{
                type: 'ExpressionStatement',
                expression: {
                    type: 'Literal',
                    value: null,
                    raw: 'null'
                }
            }]
        }
    },

    'parse(42)': {
        call: 'parse',
        args: [42],
        result: {
            type: 'Program',
            body: [{
                type: 'ExpressionStatement',
                expression: {
                    type: 'Literal',
                    value: 42,
                    raw: '42'
                }
            }]
        }
    },

    'parse(true)': {
        call: 'parse',
        args: [true],
        result: {
            type: 'Program',
            body: [{
                type: 'ExpressionStatement',
                expression: {
                    type: 'Literal',
                    value: true,
                    raw: 'true'
                }
            }]
        }
    },

    'parse(undefined)': {
        call: 'parse',
        args: [void 0],
        result: {
            type: 'Program',
            body: [{
                type: 'ExpressionStatement',
                expression: {
                    type: 'Identifier',
                    name: 'undefined'
                }
            }]
        }
    },

    'parse(new String("test"))': {
        call: 'parse',
        args: [new String('test')],
        result: {
            type: 'Program',
            body: [{
                type: 'ExpressionStatement',
                expression: {
                    type: 'Identifier',
                    name: 'test'
                }
            }]
        }
    },

    'parse(new Number(42))': {
        call: 'parse',
        args: [new Number(42)],
        result: {
            type: 'Program',
            body: [{
                type: 'ExpressionStatement',
                expression: {
                    type: 'Literal',
                    value: 42,
                    raw: '42'
                }
            }]
        }
    },

    'parse(new Boolean(true))': {
        call: 'parse',
        args: [new Boolean(true)],
        result: {
            type: 'Program',
            body: [{
                type: 'ExpressionStatement',
                expression: {
                    type: 'Literal',
                    value: true,
                    raw: 'true'
                }
            }]
        }
    },

    'Syntax': {
        property: 'Syntax',
        result: {
            AssignmentExpression: 'AssignmentExpression',
            ArrayExpression: 'ArrayExpression',
            BlockStatement: 'BlockStatement',
            BinaryExpression: 'BinaryExpression',
            BreakStatement: 'BreakStatement',
            CallExpression: 'CallExpression',
            CatchClause: 'CatchClause',
            ConditionalExpression: 'ConditionalExpression',
            ContinueStatement: 'ContinueStatement',
            DoWhileStatement: 'DoWhileStatement',
            DebuggerStatement: 'DebuggerStatement',
            EmptyStatement: 'EmptyStatement',
            ExpressionStatement: 'ExpressionStatement',
            ForStatement: 'ForStatement',
            ForInStatement: 'ForInStatement',
            FunctionDeclaration: 'FunctionDeclaration',
            FunctionExpression: 'FunctionExpression',
            Identifier: 'Identifier',
            IfStatement: 'IfStatement',
            Literal: 'Literal',
            LabeledStatement: 'LabeledStatement',
            LogicalExpression: 'LogicalExpression',
            MemberExpression: 'MemberExpression',
            NewExpression: 'NewExpression',
            ObjectExpression: 'ObjectExpression',
            Program: 'Program',
            Property: 'Property',
            ReturnStatement: 'ReturnStatement',
            SequenceExpression: 'SequenceExpression',
            SwitchStatement: 'SwitchStatement',
            SwitchCase: 'SwitchCase',
            ThisExpression: 'ThisExpression',
            ThrowStatement: 'ThrowStatement',
            TryStatement: 'TryStatement',
            UnaryExpression: 'UnaryExpression',
            UpdateExpression: 'UpdateExpression',
            VariableDeclaration: 'VariableDeclaration',
            VariableDeclarator: 'VariableDeclarator',
            WhileStatement: 'WhileStatement',
            WithStatement: 'WithStatement'
        }
    },

    'tokenize()': {
      call: 'tokenize',
      args: [],
      result: [{
        type: 'Identifier',
        value: 'undefined'
      }]
    },

    'tokenize(null)': {
      call: 'tokenize',
      args: [null],
      result: [{
        type: 'Null',
        value: 'null'
      }]
    },

    'tokenize(42)': {
      call: 'tokenize',
      args: [42],
      result: [{
        type: 'Numeric',
        value: '42'
      }]
    },

    'tokenize(true)': {
      call: 'tokenize',
      args: [true],
      result: [{
        type: 'Boolean',
        value: 'true'
      }]
    },

    'tokenize(undefined)': {
      call: 'tokenize',
      args: [void 0],
      result: [{
        type: 'Identifier',
        value: 'undefined'
      }]
    },

    'tokenize(new String("test"))': {
      call: 'tokenize',
      args: [new String('test')],
      result: [{
        type: 'Identifier',
        value: 'test'
      }]
    },

    'tokenize(new Number(42))': {
      call: 'tokenize',
      args: [new Number(42)],
      result: [{
        type: 'Numeric',
        value: '42'
      }]
    },

    'tokenize(new Boolean(true))': {
      call: 'tokenize',
      args: [new Boolean(true)],
      result: [{
        type: 'Boolean',
        value: 'true'
      }]
    }
},

'Tolerant parse': {
    'return': {
        type: 'Program',
        body: [{
            type: 'ReturnStatement',
            'argument': null,
            range: [0, 6],
            loc: {
                start: { line: 1, column: 0 },
                end: { line: 1, column: 6 }
            }
        }],
        range: [0, 6],
        loc: {
            start: { line: 1, column: 0 },
            end: { line: 1, column: 6 }
        },
        errors: [{
            index: 6,
            lineNumber: 1,
            column: 7,
            message: 'Error: Line 1: Illegal return statement'
        }]
    },

    '(function () { \'use strict\'; with (i); }())': {
        type: 'Program',
        body: [{
            type: 'ExpressionStatement',
            expression: {
                type: 'CallExpression',
                callee: {
                    type: 'FunctionExpression',
                    id: null,
                    params: [],
                    defaults: [],
                    body: {
                        type: 'BlockStatement',
                        body: [{
                            type: 'ExpressionStatement',
                            expression: {
                                type: 'Literal',
                                value: 'use strict',
                                raw: '\'use strict\'',
                                range: [15, 27],
                                loc: {
                                    start: { line: 1, column: 15 },
                                    end: { line: 1, column: 27 }
                                }
                            },
                            range: [15, 28],
                            loc: {
                                start: { line: 1, column: 15 },
                                end: { line: 1, column: 28 }
                            }
                        }, {
                            type: 'WithStatement',
                            object: {
                                type: 'Identifier',
                                name: 'i',
                                range: [35, 36],
                                loc: {
                                    start: { line: 1, column: 35 },
                                    end: { line: 1, column: 36 }
                                }
                            },
                            body: {
                                type: 'EmptyStatement',
                                range: [37, 38],
                                loc: {
                                    start: { line: 1, column: 37 },
                                    end: { line: 1, column: 38 }
                                }
                            },
                            range: [29, 38],
                            loc: {
                                start: { line: 1, column: 29 },
                                end: { line: 1, column: 38 }
                            }
                        }],
                        range: [13, 40],
                        loc: {
                            start: { line: 1, column: 13 },
                            end: { line: 1, column: 40 }
                        }
                    },
                    rest: null,
                    generator: false,
                    expression: false,
                    range: [1, 40],
                    loc: {
                        start: { line: 1, column: 1 },
                        end: { line: 1, column: 40 }
                    }
                },
                'arguments': [],
                range: [1, 42],
                loc: {
                    start: { line: 1, column: 1 },
                    end: { line: 1, column: 42 }
                }
            },
            range: [0, 43],
            loc: {
                start: { line: 1, column: 0 },
                end: { line: 1, column: 43 }
            }
        }],
        range: [0, 43],
        loc: {
            start: { line: 1, column: 0 },
            end: { line: 1, column: 43 }
        },
        errors: [{
            index: 29,
            lineNumber: 1,
            column: 30,
            message: 'Error: Line 1: Strict mode code may not include a with statement'
        }]
    },

    '(function () { \'use strict\'; 021 }())': {
        type: 'Program',
        body: [{
            type: 'ExpressionStatement',
            expression: {
                type: 'CallExpression',
                callee: {
                    type: 'FunctionExpression',
                    id: null,
                    params: [],
                    defaults: [],
                    body: {
                        type: 'BlockStatement',
                        body: [{
                            type: 'ExpressionStatement',
                            expression: {
                                type: 'Literal',
                                value: 'use strict',
                                raw: '\'use strict\'',
                                range: [15, 27],
                                loc: {
                                    start: { line: 1, column: 15 },
                                    end: { line: 1, column: 27 }
                                }
                            },
                            range: [15, 28],
                            loc: {
                                start: { line: 1, column: 15 },
                                end: { line: 1, column: 28 }
                            }
                        }, {
                            type: 'ExpressionStatement',
                            expression: {
                                type: 'Literal',
                                value: 17,
                                raw: "021",
                                range: [29, 32],
                                loc: {
                                    start: { line: 1, column: 29 },
                                    end: { line: 1, column: 32 }
                                }
                            },
                            range: [29, 33],
                            loc: {
                                start: { line: 1, column: 29 },
                                end: { line: 1, column: 33 }
                            }
                        }],
                        range: [13, 34],
                        loc: {
                            start: { line: 1, column: 13 },
                            end: { line: 1, column: 34 }
                        }
                    },
                    rest: null,
                    generator: false,
                    expression: false,
                    range: [1, 34],
                    loc: {
                        start: { line: 1, column: 1 },
                        end: { line: 1, column: 34 }
                    }
                },
                'arguments': [],
                range: [1, 36],
                loc: {
                    start: { line: 1, column: 1 },
                    end: { line: 1, column: 36 }
                }
            },
            range: [0, 37],
            loc: {
                start: { line: 1, column: 0 },
                end: { line: 1, column: 37 }
            }
        }],
        range: [0, 37],
        loc: {
            start: { line: 1, column: 0 },
            end: { line: 1, column: 37 }
        },
        errors: [{
            index: 29,
            lineNumber: 1,
            column: 30,
            message: 'Error: Line 1: Octal literals are not allowed in strict mode.'
        }]
    },

    '"use strict"; delete x': {
        type: 'Program',
        body: [{
            type: 'ExpressionStatement',
            expression: {
                type: 'Literal',
                value: 'use strict',
                raw: '"use strict"',
                range: [0, 12],
                loc: {
                    start: { line: 1, column: 0 },
                    end: { line: 1, column: 12 }
                }
            },
            range: [0, 13],
            loc: {
                start: { line: 1, column: 0 },
                end: { line: 1, column: 13 }
            }
        }, {
            type: 'ExpressionStatement',
            expression: {
                type: 'UnaryExpression',
                operator: 'delete',
                argument: {
                    type: 'Identifier',
                    name: 'x',
                    range: [21, 22],
                    loc: {
                        start: { line: 1, column: 21 },
                        end: { line: 1, column: 22 }
                    }
                },
                prefix: true,
                range: [14, 22],
                loc: {
                    start: { line: 1, column: 14 },
                    end: { line: 1, column: 22 }
                }
            },
            range: [14, 22],
            loc: {
                start: { line: 1, column: 14 },
                end: { line: 1, column: 22 }
            }
        }],
        range: [0, 22],
        loc: {
            start: { line: 1, column: 0 },
            end: { line: 1, column: 22 }
        },
        errors: [{
            index: 22,
            lineNumber: 1,
            column: 23,
            message: 'Error: Line 1: Delete of an unqualified identifier in strict mode.'
        }]
    },

    '"use strict"; try {} catch (eval) {}': {
        type: 'Program',
        body: [{
            type: 'ExpressionStatement',
            expression: {
                type: 'Literal',
                value: 'use strict',
                raw: '"use strict"',
                range: [0, 12],
                loc: {
                    start: { line: 1, column: 0 },
                    end: { line: 1, column: 12 }
                }
            },
            range: [0, 13],
            loc: {
                start: { line: 1, column: 0 },
                end: { line: 1, column: 13 }
            }
        }, {
            type: 'TryStatement',
            block: {
                type: 'BlockStatement',
                body: [],
                range: [18, 20],
                loc: {
                    start: { line: 1, column: 18 },
                    end: { line: 1, column: 20 }
                }
            },
            guardedHandlers: [],
            handlers: [{
                type: 'CatchClause',
                param: {
                    type: 'Identifier',
                    name: 'eval',
                    range: [28, 32],
                    loc: {
                        start: { line: 1, column: 28 },
                        end: { line: 1, column: 32 }
                    }
                },
                body: {
                    type: 'BlockStatement',
                    body: [],
                    range: [34, 36],
                    loc: {
                        start: { line: 1, column: 34 },
                        end: { line: 1, column: 36 }
                    }
                },
                range: [21, 36],
                loc: {
                    start: { line: 1, column: 21 },
                    end: { line: 1, column: 36 }
                }
            }],
            finalizer: null,
            range: [14, 36],
            loc: {
                start: { line: 1, column: 14 },
                end: { line: 1, column: 36 }
            }
        }],
        range: [0, 36],
        loc: {
            start: { line: 1, column: 0 },
            end: { line: 1, column: 36 }
        },
        errors: [{
            index: 32,
            lineNumber: 1,
            column: 33,
            message: 'Error: Line 1: Catch variable may not be eval or arguments in strict mode'
        }]
    },

    '"use strict"; try {} catch (arguments) {}': {
        type: 'Program',
        body: [{
            type: 'ExpressionStatement',
            expression: {
                type: 'Literal',
                value: 'use strict',
                raw: '"use strict"',
                range: [0, 12],
                loc: {
                    start: { line: 1, column: 0 },
                    end: { line: 1, column: 12 }
                }
            },
            range: [0, 13],
            loc: {
                start: { line: 1, column: 0 },
                end: { line: 1, column: 13 }
            }
        }, {
            type: 'TryStatement',
            block: {
                type: 'BlockStatement',
                body: [],
                range: [18, 20],
                loc: {
                    start: { line: 1, column: 18 },
                    end: { line: 1, column: 20 }
                }
            },
            guardedHandlers: [],
            handlers: [{
                type: 'CatchClause',
                param: {
                    type: 'Identifier',
                    name: 'arguments',
                    range: [28, 37],
                    loc: {
                        start: { line: 1, column: 28 },
                        end: { line: 1, column: 37 }
                    }
                },
                body: {
                    type: 'BlockStatement',
                    body: [],
                    range: [39, 41],
                    loc: {
                        start: { line: 1, column: 39 },
                        end: { line: 1, column: 41 }
                    }
                },
                range: [21, 41],
                loc: {
                    start: { line: 1, column: 21 },
                    end: { line: 1, column: 41 }
                }
            }],
            finalizer: null,
            range: [14, 41],
            loc: {
                start: { line: 1, column: 14 },
                end: { line: 1, column: 41 }
            }
        }],
        range: [0, 41],
        loc: {
            start: { line: 1, column: 0 },
            end: { line: 1, column: 41 }
        },
        errors: [{
            index: 37,
            lineNumber: 1,
            column: 38,
            message: 'Error: Line 1: Catch variable may not be eval or arguments in strict mode'
        }]
    },

    '"use strict"; var eval;': {
        type: 'Program',
        body: [{
            type: 'ExpressionStatement',
            expression: {
                type: 'Literal',
                value: 'use strict',
                raw: '"use strict"',
                range: [0, 12],
                loc: {
                    start: { line: 1, column: 0 },
                    end: { line: 1, column: 12 }
                }
            },
            range: [0, 13],
            loc: {
                start: { line: 1, column: 0 },
                end: { line: 1, column: 13 }
            }
        }, {
            type: 'VariableDeclaration',
            declarations: [{
                type: 'VariableDeclarator',
                id: {
                    type: 'Identifier',
                    name: 'eval',
                    range: [18, 22],
                    loc: {
                        start: { line: 1, column: 18 },
                        end: { line: 1, column: 22 }
                    }
                },
                init: null,
                range: [18, 22],
                loc: {
                    start: { line: 1, column: 18 },
                    end: { line: 1, column: 22 }
                }
            }],
            kind: 'var',
            range: [14, 23],
            loc: {
                start: { line: 1, column: 14 },
                end: { line: 1, column: 23 }
            }
        }],
        range: [0, 23],
        loc: {
            start: { line: 1, column: 0 },
            end: { line: 1, column: 23 }
        },
        errors: [{
            index: 22,
            lineNumber: 1,
            column: 23,
            message: 'Error: Line 1: Variable name may not be eval or arguments in strict mode'
        }]
    },

    '"use strict"; var arguments;': {
        type: 'Program',
        body: [{
            type: 'ExpressionStatement',
            expression: {
                type: 'Literal',
                value: 'use strict',
                raw: '"use strict"',
                range: [0, 12],
                loc: {
                    start: { line: 1, column: 0 },
                    end: { line: 1, column: 12 }
                }
            },
            range: [0, 13],
            loc: {
                start: { line: 1, column: 0 },
                end: { line: 1, column: 13 }
            }
        }, {
            type: 'VariableDeclaration',
            declarations: [{
                type: 'VariableDeclarator',
                id: {
                    type: 'Identifier',
                    name: 'arguments',
                    range: [18, 27],
                    loc: {
                        start: { line: 1, column: 18 },
                        end: { line: 1, column: 27 }
                    }
                },
                init: null,
                range: [18, 27],
                loc: {
                    start: { line: 1, column: 18 },
                    end: { line: 1, column: 27 }
                }
            }],
            kind: 'var',
            range: [14, 28],
            loc: {
                start: { line: 1, column: 14 },
                end: { line: 1, column: 28 }
            }
        }],
        range: [0, 28],
        loc: {
            start: { line: 1, column: 0 },
            end: { line: 1, column: 28 }
        },
        errors: [{
            index: 27,
            lineNumber: 1,
            column: 28,
            message: 'Error: Line 1: Variable name may not be eval or arguments in strict mode'
        }]
    },

    '"use strict"; eval = 0;': {
        type: 'Program',
        body: [{
            type: 'ExpressionStatement',
            expression: {
                type: 'Literal',
                value: 'use strict',
                raw: '"use strict"',
                range: [0, 12],
                loc: {
                    start: { line: 1, column: 0 },
                    end: { line: 1, column: 12 }
                }
            },
            range: [0, 13],
            loc: {
                start: { line: 1, column: 0 },
                end: { line: 1, column: 13 }
            }
        }, {
            type: 'ExpressionStatement',
            expression: {
                type: 'AssignmentExpression',
                operator: '=',
                left: {
                    type: 'Identifier',
                    name: 'eval',
                    range: [14, 18],
                    loc: {
                        start: { line: 1, column: 14 },
                        end: { line: 1, column: 18 }
                    }
                },
                right: {
                    type: 'Literal',
                    value: 0,
                    raw: '0',
                    range: [21, 22],
                    loc: {
                        start: { line: 1, column: 21 },
                        end: { line: 1, column: 22 }
                    }
                },
                range: [14, 22],
                loc: {
                    start: { line: 1, column: 14 },
                    end: { line: 1, column: 22 }
                }
            },
            range: [14, 23],
            loc: {
                start: { line: 1, column: 14 },
                end: { line: 1, column: 23 }
            }
        }],
        range: [0, 23],
        loc: {
            start: { line: 1, column: 0 },
            end: { line: 1, column: 23 }
        },
        errors: [{
            index: 14,
            lineNumber: 1,
            column: 15,
            message: 'Error: Line 1: Assignment to eval or arguments is not allowed in strict mode'
        }]
    },

    '"use strict"; eval++;': {
        type: 'Program',
        body: [{
            type: 'ExpressionStatement',
            expression: {
                type: 'Literal',
                value: 'use strict',
                raw: '"use strict"',
                range: [0, 12],
                loc: {
                    start: { line: 1, column: 0 },
                    end: { line: 1, column: 12 }
                }
            },
            range: [0, 13],
            loc: {
                start: { line: 1, column: 0 },
                end: { line: 1, column: 13 }
            }
        }, {
            type: 'ExpressionStatement',
            expression: {
                type: 'UpdateExpression',
                operator: '++',
                argument: {
                    type: 'Identifier',
                    name: 'eval',
                    range: [14, 18],
                    loc: {
                        start: { line: 1, column: 14 },
                        end: { line: 1, column: 18 }
                    }
                },
                prefix: false,
                range: [14, 20],
                loc: {
                    start: { line: 1, column: 14 },
                    end: { line: 1, column: 20 }
                }
            },
            range: [14, 21],
            loc: {
                start: { line: 1, column: 14 },
                end: { line: 1, column: 21 }
            }
        }],
        range: [0, 21],
        loc: {
            start: { line: 1, column: 0 },
            end: { line: 1, column: 21 }
        },
        errors: [{
            index: 18,
            lineNumber: 1,
            column: 19,
            message: 'Error: Line 1: Postfix increment/decrement may not have eval or arguments operand in strict mode'
        }]
    },

    '"use strict"; --eval;': {
        type: 'Program',
        body: [{
            type: 'ExpressionStatement',
            expression: {
                type: 'Literal',
                value: 'use strict',
                raw: '"use strict"',
                range: [0, 12],
                loc: {
                    start: { line: 1, column: 0 },
                    end: { line: 1, column: 12 }
                }
            },
            range: [0, 13],
            loc: {
                start: { line: 1, column: 0 },
                end: { line: 1, column: 13 }
            }
        }, {
            type: 'ExpressionStatement',
            expression: {
                type: 'UpdateExpression',
                operator: '--',
                argument: {
                    type: 'Identifier',
                    name: 'eval',
                    range: [16, 20],
                    loc: {
                        start: { line: 1, column: 16 },
                        end: { line: 1, column: 20 }
                    }
                },
                prefix: true,
                range: [14, 20],
                loc: {
                    start: { line: 1, column: 14 },
                    end: { line: 1, column: 20 }
                }
            },
            range: [14, 21],
            loc: {
                start: { line: 1, column: 14 },
                end: { line: 1, column: 21 }
            }
        }],
        range: [0, 21],
        loc: {
            start: { line: 1, column: 0 },
            end: { line: 1, column: 21 }
        },
        errors: [{
            index: 20,
            lineNumber: 1,
            column: 21,
            message: 'Error: Line 1: Prefix increment/decrement may not have eval or arguments operand in strict mode'
        }]
    },

    '"use strict"; arguments = 0;': {
        type: 'Program',
        body: [{
            type: 'ExpressionStatement',
            expression: {
                type: 'Literal',
                value: 'use strict',
                raw: '"use strict"',
                range: [0, 12],
                loc: {
                    start: { line: 1, column: 0 },
                    end: { line: 1, column: 12 }
                }
            },
            range: [0, 13],
            loc: {
                start: { line: 1, column: 0 },
                end: { line: 1, column: 13 }
            }
        }, {
            type: 'ExpressionStatement',
            expression: {
                type: 'AssignmentExpression',
                operator: '=',
                left: {
                    type: 'Identifier',
                    name: 'arguments',
                    range: [14, 23],
                    loc: {
                        start: { line: 1, column: 14 },
                        end: { line: 1, column: 23 }
                    }
                },
                right: {
                    type: 'Literal',
                    value: 0,
                    raw: '0',
                    range: [26, 27],
                    loc: {
                        start: { line: 1, column: 26 },
                        end: { line: 1, column: 27 }
                    }
                },
                range: [14, 27],
                loc: {
                    start: { line: 1, column: 14 },
                    end: { line: 1, column: 27 }
                }
            },
            range: [14, 28],
            loc: {
                start: { line: 1, column: 14 },
                end: { line: 1, column: 28 }
            }
        }],
        range: [0, 28],
        loc: {
            start: { line: 1, column: 0 },
            end: { line: 1, column: 28 }
        },
        errors: [{
            index: 14,
            lineNumber: 1,
            column: 15,
            message: 'Error: Line 1: Assignment to eval or arguments is not allowed in strict mode'
        }]
    },

    '"use strict"; arguments--;': {
        type: 'Program',
        body: [{
            type: 'ExpressionStatement',
            expression: {
                type: 'Literal',
                value: 'use strict',
                raw: '"use strict"',
                range: [0, 12],
                loc: {
                    start: { line: 1, column: 0 },
                    end: { line: 1, column: 12 }
                }
            },
            range: [0, 13],
            loc: {
                start: { line: 1, column: 0 },
                end: { line: 1, column: 13 }
            }
        }, {
            type: 'ExpressionStatement',
            expression: {
                type: 'UpdateExpression',
                operator: '--',
                argument: {
                    type: 'Identifier',
                    name: 'arguments',
                    range: [14, 23],
                    loc: {
                        start: { line: 1, column: 14 },
                        end: { line: 1, column: 23 }
                    }
                },
                prefix: false,
                range: [14, 25],
                loc: {
                    start: { line: 1, column: 14 },
                    end: { line: 1, column: 25 }
                }
            },
            range: [14, 26],
            loc: {
                start: { line: 1, column: 14 },
                end: { line: 1, column: 26 }
            }
        }],
        range: [0, 26],
        loc: {
            start: { line: 1, column: 0 },
            end: { line: 1, column: 26 }
        },
        errors: [{
            index: 23,
            lineNumber: 1,
            column: 24,
            message: 'Error: Line 1: Postfix increment/decrement may not have eval or arguments operand in strict mode'
        }]
    },

    '"use strict"; ++arguments;': {
        type: 'Program',
        body: [{
            type: 'ExpressionStatement',
            expression: {
                type: 'Literal',
                value: 'use strict',
                raw: '"use strict"',
                range: [0, 12],
                loc: {
                    start: { line: 1, column: 0 },
                    end: { line: 1, column: 12 }
                }
            },
            range: [0, 13],
            loc: {
                start: { line: 1, column: 0 },
                end: { line: 1, column: 13 }
            }
        }, {
            type: 'ExpressionStatement',
            expression: {
                type: 'UpdateExpression',
                operator: '++',
                argument: {
                    type: 'Identifier',
                    name: 'arguments',
                    range: [16, 25],
                    loc: {
                        start: { line: 1, column: 16 },
                        end: { line: 1, column: 25 }
                    }
                },
                prefix: true,
                range: [14, 25],
                loc: {
                    start: { line: 1, column: 14 },
                    end: { line: 1, column: 25 }
                }
            },
            range: [14, 26],
            loc: {
                start: { line: 1, column: 14 },
                end: { line: 1, column: 26 }
            }
        }],
        range: [0, 26],
        loc: {
            start: { line: 1, column: 0 },
            end: { line: 1, column: 26 }
        },
        errors: [{
            index: 25,
            lineNumber: 1,
            column: 26,
            message: 'Error: Line 1: Prefix increment/decrement may not have eval or arguments operand in strict mode'
        }]
    },

    '"use strict";x={y:1,y:1}': {
        type: 'Program',
        body: [{
            type: 'ExpressionStatement',
            expression: {
                type: 'Literal',
                value: 'use strict',
                raw: '"use strict"',
                range: [0, 12],
                loc: {
                    start: { line: 1, column: 0 },
                    end: { line: 1, column: 12 }
                }
            },
            range: [0, 13],
            loc: {
                start: { line: 1, column: 0 },
                end: { line: 1, column: 13 }
            }
        }, {
            type: 'ExpressionStatement',
            expression: {
                type: 'AssignmentExpression',
                operator: '=',
                left: {
                    type: 'Identifier',
                    name: 'x',
                    range: [13, 14],
                    loc: {
                        start: { line: 1, column: 13 },
                        end: { line: 1, column: 14 }
                    }
                },
                right: {
                    type: 'ObjectExpression',
                    properties: [{
                        type: 'Property',
                        key: {
                            type: 'Identifier',
                            name: 'y',
                            range: [16, 17],
                            loc: {
                                start: { line: 1, column: 16 },
                                end: { line: 1, column: 17 }
                            }
                        },
                        value: {
                            type: 'Literal',
                            value: 1,
                            raw: '1',
                            range: [18, 19],
                            loc: {
                                start: { line: 1, column: 18 },
                                end: { line: 1, column: 19 }
                            }
                        },
                        kind: 'init',
                        range: [16, 19],
                        loc: {
                            start: { line: 1, column: 16 },
                            end: { line: 1, column: 19 }
                        }
                    }, {
                        type: 'Property',
                        key: {
                            type: 'Identifier',
                            name: 'y',
                            range: [20, 21],
                            loc: {
                                start: { line: 1, column: 20 },
                                end: { line: 1, column: 21 }
                            }
                        },
                        value: {
                            type: 'Literal',
                            value: 1,
                            raw: '1',
                            range: [22, 23],
                            loc: {
                                start: { line: 1, column: 22 },
                                end: { line: 1, column: 23 }
                            }
                        },
                        kind: 'init',
                        range: [20, 23],
                        loc: {
                            start: { line: 1, column: 20 },
                            end: { line: 1, column: 23 }
                        }
                    }],
                    range: [15, 24],
                    loc: {
                        start: { line: 1, column: 15 },
                        end: { line: 1, column: 24 }
                    }
                },
                range: [13, 24],
                loc: {
                    start: { line: 1, column: 13 },
                    end: { line: 1, column: 24 }
                }
            },
            range: [13, 24],
            loc: {
                start: { line: 1, column: 13 },
                end: { line: 1, column: 24 }
            }
        }],
        range: [0, 24],
        loc: {
            start: { line: 1, column: 0 },
            end: { line: 1, column: 24 }
        },
        errors: [{
            index: 23,
            lineNumber: 1,
            column: 24,
            message: 'Error: Line 1: Duplicate data property in object literal not allowed in strict mode'
        }]
    },

    '"use strict"; function eval() {};': {
        type: 'Program',
        body: [{
            type: 'ExpressionStatement',
            expression: {
                type: 'Literal',
                value: 'use strict',
                raw: '"use strict"',
                range: [0, 12],
                loc: {
                    start: { line: 1, column: 0 },
                    end: { line: 1, column: 12 }
                }
            },
            range: [0, 13],
            loc: {
                start: { line: 1, column: 0 },
                end: { line: 1, column: 13 }
            }
        }, {
            type: 'FunctionDeclaration',
            id: {
                type: 'Identifier',
                name: 'eval',
                range: [23, 27],
                loc: {
                    start: { line: 1, column: 23 },
                    end: { line: 1, column: 27 }
                }
            },
            params: [],
            defaults: [],
            body: {
                type: 'BlockStatement',
                body: [],
                range: [30, 32],
                loc: {
                    start: { line: 1, column: 30 },
                    end: { line: 1, column: 32 }
                }
            },
            rest: null,
            generator: false,
            expression: false,
            range: [14, 32],
            loc: {
                start: { line: 1, column: 14 },
                end: { line: 1, column: 32 }
            }
        }, {
            type: 'EmptyStatement',
            range: [32, 33],
            loc: {
                start: { line: 1, column: 32 },
                end: { line: 1, column: 33 }
            }
        }],
        range: [0, 33],
        loc: {
            start: { line: 1, column: 0 },
            end: { line: 1, column: 33 }
        },
        errors: [{
            index: 23,
            lineNumber: 1,
            column: 24,
            message: 'Error: Line 1: Function name may not be eval or arguments in strict mode'
        }]
    },

    '"use strict"; function arguments() {};': {
        type: 'Program',
        body: [{
            type: 'ExpressionStatement',
            expression: {
                type: 'Literal',
                value: 'use strict',
                raw: '"use strict"',
                range: [0, 12],
                loc: {
                    start: { line: 1, column: 0 },
                    end: { line: 1, column: 12 }
                }
            },
            range: [0, 13],
            loc: {
                start: { line: 1, column: 0 },
                end: { line: 1, column: 13 }
            }
        }, {
            type: 'FunctionDeclaration',
            id: {
                type: 'Identifier',
                name: 'arguments',
                range: [23, 32],
                loc: {
                    start: { line: 1, column: 23 },
                    end: { line: 1, column: 32 }
                }
            },
            params: [],
            defaults: [],
            body: {
                type: 'BlockStatement',
                body: [],
                range: [35, 37],
                loc: {
                    start: { line: 1, column: 35 },
                    end: { line: 1, column: 37 }
                }
            },
            rest: null,
            generator: false,
            expression: false,
            range: [14, 37],
            loc: {
                start: { line: 1, column: 14 },
                end: { line: 1, column: 37 }
            }
        }, {
            type: 'EmptyStatement',
            range: [37, 38],
            loc: {
                start: { line: 1, column: 37 },
                end: { line: 1, column: 38 }
            }
        }],
        range: [0, 38],
        loc: {
            start: { line: 1, column: 0 },
            end: { line: 1, column: 38 }
        },
        errors: [{
            index: 23,
            lineNumber: 1,
            column: 24,
            message: 'Error: Line 1: Function name may not be eval or arguments in strict mode'
        }]
    },

    '"use strict"; function interface() {};': {
        type: 'Program',
        body: [{
            type: 'ExpressionStatement',
            expression: {
                type: 'Literal',
                value: 'use strict',
                raw: '"use strict"',
                range: [0, 12],
                loc: {
                    start: { line: 1, column: 0 },
                    end: { line: 1, column: 12 }
                }
            },
            range: [0, 13],
            loc: {
                start: { line: 1, column: 0 },
                end: { line: 1, column: 13 }
            }
        }, {
            type: 'FunctionDeclaration',
            id: {
                type: 'Identifier',
                name: 'interface',
                range: [23, 32],
                loc: {
                    start: { line: 1, column: 23 },
                    end: { line: 1, column: 32 }
                }
            },
            params: [],
            defaults: [],
            body: {
                type: 'BlockStatement',
                body: [],
                range: [35, 37],
                loc: {
                    start: { line: 1, column: 35 },
                    end: { line: 1, column: 37 }
                }
            },
            rest: null,
            generator: false,
            expression: false,
            range: [14, 37],
            loc: {
                start: { line: 1, column: 14 },
                end: { line: 1, column: 37 }
            }
        }, {
            type: 'EmptyStatement',
            range: [37, 38],
            loc: {
                start: { line: 1, column: 37 },
                end: { line: 1, column: 38 }
            }
        }],
        range: [0, 38],
        loc: {
            start: { line: 1, column: 0 },
            end: { line: 1, column: 38 }
        },
        errors: [{
            index: 23,
            lineNumber: 1,
            column: 24,
            message: 'Error: Line 1: Use of future reserved word in strict mode'
        }]
    },

    '"use strict"; (function eval() {});': {
        type: 'Program',
        body: [{
            type: 'ExpressionStatement',
            expression: {
                type: 'Literal',
                value: 'use strict',
                raw: '"use strict"',
                range: [0, 12],
                loc: {
                    start: { line: 1, column: 0 },
                    end: { line: 1, column: 12 }
                }
            },
            range: [0, 13],
            loc: {
                start: { line: 1, column: 0 },
                end: { line: 1, column: 13 }
            }
        }, {
            type: 'ExpressionStatement',
            expression: {
                type: 'FunctionExpression',
                id: {
                    type: 'Identifier',
                    name: 'eval',
                    range: [24, 28],
                    loc: {
                        start: { line: 1, column: 24 },
                        end: { line: 1, column: 28 }
                    }
                },
                params: [],
                defaults: [],
                body: {
                    type: 'BlockStatement',
                    body: [],
                    range: [31, 33],
                    loc: {
                        start: { line: 1, column: 31 },
                        end: { line: 1, column: 33 }
                    }
                },
                rest: null,
                generator: false,
                expression: false,
                range: [15, 33],
                loc: {
                    start: { line: 1, column: 15 },
                    end: { line: 1, column: 33 }
                }
            },
            range: [14, 35],
            loc: {
                start: { line: 1, column: 14 },
                end: { line: 1, column: 35 }
            }
        }],
        range: [0, 35],
        loc: {
            start: { line: 1, column: 0 },
            end: { line: 1, column: 35 }
        },
        errors: [{
            index: 24,
            lineNumber: 1,
            column: 25,
            message: 'Error: Line 1: Function name may not be eval or arguments in strict mode'
        }]
    },

    '"use strict"; (function arguments() {});': {
        type: 'Program',
        body: [{
            type: 'ExpressionStatement',
            expression: {
                type: 'Literal',
                value: 'use strict',
                raw: '"use strict"',
                range: [0, 12],
                loc: {
                    start: { line: 1, column: 0 },
                    end: { line: 1, column: 12 }
                }
            },
            range: [0, 13],
            loc: {
                start: { line: 1, column: 0 },
                end: { line: 1, column: 13 }
            }
        }, {
            type: 'ExpressionStatement',
            expression: {
                type: 'FunctionExpression',
                id: {
                    type: 'Identifier',
                    name: 'arguments',
                    range: [24, 33],
                    loc: {
                        start: { line: 1, column: 24 },
                        end: { line: 1, column: 33 }
                    }
                },
                params: [],
                defaults: [],
                body: {
                    type: 'BlockStatement',
                    body: [],
                    range: [36, 38],
                    loc: {
                        start: { line: 1, column: 36 },
                        end: { line: 1, column: 38 }
                    }
                },
                rest: null,
                generator: false,
                expression: false,
                range: [15, 38],
                loc: {
                    start: { line: 1, column: 15 },
                    end: { line: 1, column: 38 }
                }
            },
            range: [14, 40],
            loc: {
                start: { line: 1, column: 14 },
                end: { line: 1, column: 40 }
            }
        }],
        range: [0, 40],
        loc: {
            start: { line: 1, column: 0 },
            end: { line: 1, column: 40 }
        },
        errors: [{
            index: 24,
            lineNumber: 1,
            column: 25,
            message: 'Error: Line 1: Function name may not be eval or arguments in strict mode'
        }]
    },

    '"use strict"; (function interface() {});': {
        type: 'Program',
        body: [{
            type: 'ExpressionStatement',
            expression: {
                type: 'Literal',
                value: 'use strict',
                raw: '"use strict"',
                range: [0, 12],
                loc: {
                    start: { line: 1, column: 0 },
                    end: { line: 1, column: 12 }
                }
            },
            range: [0, 13],
            loc: {
                start: { line: 1, column: 0 },
                end: { line: 1, column: 13 }
            }
        }, {
            type: 'ExpressionStatement',
            expression: {
                type: 'FunctionExpression',
                id: {
                    type: 'Identifier',
                    name: 'interface',
                    range: [24, 33],
                    loc: {
                        start: { line: 1, column: 24 },
                        end: { line: 1, column: 33 }
                    }
                },
                params: [],
                defaults: [],
                body: {
                    type: 'BlockStatement',
                    body: [],
                    range: [36, 38],
                    loc: {
                        start: { line: 1, column: 36 },
                        end: { line: 1, column: 38 }
                    }
                },
                rest: null,
                generator: false,
                expression: false,
                range: [15, 38],
                loc: {
                    start: { line: 1, column: 15 },
                    end: { line: 1, column: 38 }
                }
            },
            range: [14, 40],
            loc: {
                start: { line: 1, column: 14 },
                end: { line: 1, column: 40 }
            }
        }],
        range: [0, 40],
        loc: {
            start: { line: 1, column: 0 },
            end: { line: 1, column: 40 }
        },
        errors: [{
            index: 24,
            lineNumber: 1,
            column: 25,
            message: 'Error: Line 1: Use of future reserved word in strict mode'
        }]
    },

    '"use strict"; function f(eval) {};': {
        type: 'Program',
        body: [{
            type: 'ExpressionStatement',
            expression: {
                type: 'Literal',
                value: 'use strict',
                raw: '"use strict"',
                range: [0, 12],
                loc: {
                    start: { line: 1, column: 0 },
                    end: { line: 1, column: 12 }
                }
            },
            range: [0, 13],
            loc: {
                start: { line: 1, column: 0 },
                end: { line: 1, column: 13 }
            }
        }, {
            type: 'FunctionDeclaration',
            id: {
                type: 'Identifier',
                name: 'f',
                range: [23, 24],
                loc: {
                    start: { line: 1, column: 23 },
                    end: { line: 1, column: 24 }
                }
            },
            params: [{
                type: 'Identifier',
                name: 'eval',
                range: [25, 29],
                loc: {
                    start: { line: 1, column: 25 },
                    end: { line: 1, column: 29 }
                }
            }],
            defaults: [],
            body: {
                type: 'BlockStatement',
                body: [],
                range: [31, 33],
                loc: {
                    start: { line: 1, column: 31 },
                    end: { line: 1, column: 33 }
                }
            },
            rest: null,
            generator: false,
            expression: false,
            range: [14, 33],
            loc: {
                start: { line: 1, column: 14 },
                end: { line: 1, column: 33 }
            }
        }, {
            type: 'EmptyStatement',
            range: [33, 34],
            loc: {
                start: { line: 1, column: 33 },
                end: { line: 1, column: 34 }
            }
        }],
        range: [0, 34],
        loc: {
            start: { line: 1, column: 0 },
            end: { line: 1, column: 34 }
        },
        errors: [{
            index: 25,
            lineNumber: 1,
            column: 26,
            message: 'Error: Line 1: Parameter name eval or arguments is not allowed in strict mode'
        }]
    },

    '"use strict"; function f(arguments) {};': {
        type: 'Program',
        body: [{
            type: 'ExpressionStatement',
            expression: {
                type: 'Literal',
                value: 'use strict',
                raw: '"use strict"',
                range: [0, 12],
                loc: {
                    start: { line: 1, column: 0 },
                    end: { line: 1, column: 12 }
                }
            },
            range: [0, 13],
            loc: {
                start: { line: 1, column: 0 },
                end: { line: 1, column: 13 }
            }
        }, {
            type: 'FunctionDeclaration',
            id: {
                type: 'Identifier',
                name: 'f',
                range: [23, 24],
                loc: {
                    start: { line: 1, column: 23 },
                    end: { line: 1, column: 24 }
                }
            },
            params: [{
                type: 'Identifier',
                name: 'arguments',
                range: [25, 34],
                loc: {
                    start: { line: 1, column: 25 },
                    end: { line: 1, column: 34 }
                }
            }],
            defaults: [],
            body: {
                type: 'BlockStatement',
                body: [],
                range: [36, 38],
                loc: {
                    start: { line: 1, column: 36 },
                    end: { line: 1, column: 38 }
                }
            },
            rest: null,
            generator: false,
            expression: false,
            range: [14, 38],
            loc: {
                start: { line: 1, column: 14 },
                end: { line: 1, column: 38 }
            }
        }, {
            type: 'EmptyStatement',
            range: [38, 39],
            loc: {
                start: { line: 1, column: 38 },
                end: { line: 1, column: 39 }
            }
        }],
        range: [0, 39],
        loc: {
            start: { line: 1, column: 0 },
            end: { line: 1, column: 39 }
        },
        errors: [{
            index: 25,
            lineNumber: 1,
            column: 26,
            message: 'Error: Line 1: Parameter name eval or arguments is not allowed in strict mode'
        }]
    },

    '"use strict"; function f(foo,  foo) {};': {
        type: 'Program',
        body: [{
            type: 'ExpressionStatement',
            expression: {
                type: 'Literal',
                value: 'use strict',
                raw: '"use strict"',
                range: [0, 12],
                loc: {
                    start: { line: 1, column: 0 },
                    end: { line: 1, column: 12 }
                }
            },
            range: [0, 13],
            loc: {
                start: { line: 1, column: 0 },
                end: { line: 1, column: 13 }
            }
        }, {
            type: 'FunctionDeclaration',
            id: {
                type: 'Identifier',
                name: 'f',
                range: [23, 24],
                loc: {
                    start: { line: 1, column: 23 },
                    end: { line: 1, column: 24 }
                }
            },
            params: [{
                type: 'Identifier',
                name: 'foo',
                range: [25, 28],
                loc: {
                    start: { line: 1, column: 25 },
                    end: { line: 1, column: 28 }
                }
            }, {
                type: 'Identifier',
                name: 'foo',
                range: [31, 34],
                loc: {
                    start: { line: 1, column: 31 },
                    end: { line: 1, column: 34 }
                }
            }],
            defaults: [],
            body: {
                type: 'BlockStatement',
                body: [],
                range: [36, 38],
                loc: {
                    start: { line: 1, column: 36 },
                    end: { line: 1, column: 38 }
                }
            },
            rest: null,
            generator: false,
            expression: false,
            range: [14, 38],
            loc: {
                start: { line: 1, column: 14 },
                end: { line: 1, column: 38 }
            }
        }, {
            type: 'EmptyStatement',
            range: [38, 39],
            loc: {
                start: { line: 1, column: 38 },
                end: { line: 1, column: 39 }
            }
        }],
        range: [0, 39],
        loc: {
            start: { line: 1, column: 0 },
            end: { line: 1, column: 39 }
        },
        errors: [{
            index: 31,
            lineNumber: 1,
            column: 32,
            message: 'Error: Line 1: Strict mode function may not have duplicate parameter names'
        }]
    },

    '"use strict"; (function f(eval) {});': {
        type: 'Program',
        body: [{
            type: 'ExpressionStatement',
            expression: {
                type: 'Literal',
                value: 'use strict',
                raw: '"use strict"',
                range: [0, 12],
                loc: {
                    start: { line: 1, column: 0 },
                    end: { line: 1, column: 12 }
                }
            },
            range: [0, 13],
            loc: {
                start: { line: 1, column: 0 },
                end: { line: 1, column: 13 }
            }
        }, {
            type: 'ExpressionStatement',
            expression: {
                type: 'FunctionExpression',
                id: {
                    type: 'Identifier',
                    name: 'f',
                    range: [24, 25],
                    loc: {
                        start: { line: 1, column: 24 },
                        end: { line: 1, column: 25 }
                    }
                },
                params: [{
                    type: 'Identifier',
                    name: 'eval',
                    range: [26, 30],
                    loc: {
                        start: { line: 1, column: 26 },
                        end: { line: 1, column: 30 }
                    }
                }],
                defaults: [],
                body: {
                    type: 'BlockStatement',
                    body: [],
                    range: [32, 34],
                    loc: {
                        start: { line: 1, column: 32 },
                        end: { line: 1, column: 34 }
                    }
                },
                rest: null,
                generator: false,
                expression: false,
                range: [15, 34],
                loc: {
                    start: { line: 1, column: 15 },
                    end: { line: 1, column: 34 }
                }
            },
            range: [14, 36],
            loc: {
                start: { line: 1, column: 14 },
                end: { line: 1, column: 36 }
            }
        }],
        range: [0, 36],
        loc: {
            start: { line: 1, column: 0 },
            end: { line: 1, column: 36 }
        },
        errors: [{
            index: 26,
            lineNumber: 1,
            column: 27,
            message: 'Error: Line 1: Parameter name eval or arguments is not allowed in strict mode'
        }]
    },

    '"use strict"; (function f(arguments) {});': {
        type: 'Program',
        body: [{
            type: 'ExpressionStatement',
            expression: {
                type: 'Literal',
                value: 'use strict',
                raw: '"use strict"',
                range: [0, 12],
                loc: {
                    start: { line: 1, column: 0 },
                    end: { line: 1, column: 12 }
                }
            },
            range: [0, 13],
            loc: {
                start: { line: 1, column: 0 },
                end: { line: 1, column: 13 }
            }
        }, {
            type: 'ExpressionStatement',
            expression: {
                type: 'FunctionExpression',
                id: {
                    type: 'Identifier',
                    name: 'f',
                    range: [24, 25],
                    loc: {
                        start: { line: 1, column: 24 },
                        end: { line: 1, column: 25 }
                    }
                },
                params: [{
                    type: 'Identifier',
                    name: 'arguments',
                    range: [26, 35],
                    loc: {
                        start: { line: 1, column: 26 },
                        end: { line: 1, column: 35 }
                    }
                }],
                defaults: [],
                body: {
                    type: 'BlockStatement',
                    body: [],
                    range: [37, 39],
                    loc: {
                        start: { line: 1, column: 37 },
                        end: { line: 1, column: 39 }
                    }
                },
                rest: null,
                generator: false,
                expression: false,
                range: [15, 39],
                loc: {
                    start: { line: 1, column: 15 },
                    end: { line: 1, column: 39 }
                }
            },
            range: [14, 41],
            loc: {
                start: { line: 1, column: 14 },
                end: { line: 1, column: 41 }
            }
        }],
        range: [0, 41],
        loc: {
            start: { line: 1, column: 0 },
            end: { line: 1, column: 41 }
        },
        errors: [{
            index: 26,
            lineNumber: 1,
            column: 27,
            message: 'Error: Line 1: Parameter name eval or arguments is not allowed in strict mode'
        }]
    },

    '"use strict"; (function f(foo,  foo) {});': {
        type: 'Program',
        body: [{
            type: 'ExpressionStatement',
            expression: {
                type: 'Literal',
                value: 'use strict',
                raw: '"use strict"',
                range: [0, 12],
                loc: {
                    start: { line: 1, column: 0 },
                    end: { line: 1, column: 12 }
                }
            },
            range: [0, 13],
            loc: {
                start: { line: 1, column: 0 },
                end: { line: 1, column: 13 }
            }
        }, {
            type: 'ExpressionStatement',
            expression: {
                type: 'FunctionExpression',
                id: {
                    type: 'Identifier',
                    name: 'f',
                    range: [24, 25],
                    loc: {
                        start: { line: 1, column: 24 },
                        end: { line: 1, column: 25 }
                    }
                },
                params: [{
                    type: 'Identifier',
                    name: 'foo',
                    range: [26, 29],
                    loc: {
                        start: { line: 1, column: 26 },
                        end: { line: 1, column: 29 }
                    }
                }, {
                    type: 'Identifier',
                    name: 'foo',
                    range: [32, 35],
                    loc: {
                        start: { line: 1, column: 32 },
                        end: { line: 1, column: 35 }
                    }
                }],
                defaults: [],
                body: {
                    type: 'BlockStatement',
                    body: [],
                    range: [37, 39],
                    loc: {
                        start: { line: 1, column: 37 },
                        end: { line: 1, column: 39 }
                    }
                },
                rest: null,
                generator: false,
                expression: false,
                range: [15, 39],
                loc: {
                    start: { line: 1, column: 15 },
                    end: { line: 1, column: 39 }
                }
            },
            range: [14, 41],
            loc: {
                start: { line: 1, column: 14 },
                end: { line: 1, column: 41 }
            }
        }],
        range: [0, 41],
        loc: {
            start: { line: 1, column: 0 },
            end: { line: 1, column: 41 }
        },
        errors: [{
            index: 32,
            lineNumber: 1,
            column: 33,
            message: 'Error: Line 1: Strict mode function may not have duplicate parameter names'
        }]
    },

    '"use strict"; x = { set f(eval) {} }' : {
        type: 'Program',
        body: [{
            type: 'ExpressionStatement',
            expression: {
                type: 'Literal',
                value: 'use strict',
                raw: '"use strict"',
                range: [0, 12],
                loc: {
                    start: { line: 1, column: 0 },
                    end: { line: 1, column: 12 }
                }
            },
            range: [0, 13],
            loc: {
                start: { line: 1, column: 0 },
                end: { line: 1, column: 13 }
            }
        }, {
            type: 'ExpressionStatement',
            expression: {
                type: 'AssignmentExpression',
                operator: '=',
                left: {
                    type: 'Identifier',
                    name: 'x',
                    range: [14, 15],
                    loc: {
                        start: { line: 1, column: 14 },
                        end: { line: 1, column: 15 }
                    }
                },
                right: {
                    type: 'ObjectExpression',
                    properties: [{
                        type: 'Property',
                        key: {
                            type: 'Identifier',
                            name: 'f',
                            range: [24, 25],
                            loc: {
                                start: { line: 1, column: 24 },
                                end: { line: 1, column: 25 }
                            }
                        },
                        value : {
                            type: 'FunctionExpression',
                            id: null,
                            params: [{
                                type: 'Identifier',
                                name: 'eval',
                                range: [26, 30],
                                loc: {
                                    start: { line: 1, column: 26 },
                                    end: { line: 1, column: 30 }
                                }
                            }],
                            defaults: [],
                            body: {
                                type: 'BlockStatement',
                                body: [],
                                range: [32, 34],
                                loc: {
                                    start: { line: 1, column: 32 },
                                    end: { line: 1, column: 34 }
                                }
                            },
                            rest: null,
                            generator: false,
                            expression: false,
                            range: [32, 34],
                            loc: {
                                start: { line: 1, column: 32 },
                                end: { line: 1, column: 34 }
                            }
                        },
                        kind: 'set',
                        range: [20, 34],
                        loc: {
                            start: { line: 1, column: 20 },
                            end: { line: 1, column: 34 }
                        }
                    }],
                    range: [18, 36],
                    loc: {
                        start: { line: 1, column: 18 },
                        end: { line: 1, column: 36 }
                    }
                },
                range: [14, 36],
                loc: {
                    start: { line: 1, column: 14 },
                    end: { line: 1, column: 36 }
                }
            },
            range: [14, 36],
            loc: {
                start: { line: 1, column: 14 },
                end: { line: 1, column: 36 }
            }
        }],
        range: [0, 36],
        loc: {
            start: { line: 1, column: 0 },
            end: { line: 1, column: 36 }
        },
        errors: [{
            index: 26,
            lineNumber: 1,
            column: 27,
            message: 'Error: Line 1: Parameter name eval or arguments is not allowed in strict mode'
        }]
    },

    'function hello() { "octal directive\\1"; "use strict"; }': {
        type: 'Program',
        body: [{
            type: 'FunctionDeclaration',
            id: {
                type: 'Identifier',
                name: 'hello',
                range: [9, 14],
                loc: {
                    start: { line: 1, column: 9 },
                    end: { line: 1, column: 14 }
                }
            },
            params: [],
            defaults: [],
            body: {
                type: 'BlockStatement',
                body: [{
                    type: 'ExpressionStatement',
                    expression: {
                        type: 'Literal',
                        value: 'octal directive\u0001',
                        raw: '"octal directive\\1"',
                        range: [19, 38],
                        loc: {
                            start: { line: 1, column: 19 },
                            end: { line: 1, column: 38 }
                        }
                    },
                    range: [19, 39],
                    loc: {
                        start: { line: 1, column: 19 },
                        end: { line: 1, column: 39 }
                    }
                }, {
                    type: 'ExpressionStatement',
                    expression: {
                        type: 'Literal',
                        value: 'use strict',
                        raw: '"use strict"',
                        range: [40, 52],
                        loc: {
                            start: { line: 1, column: 40 },
                            end: { line: 1, column: 52 }
                        }
                    },
                    range: [40, 53],
                    loc: {
                        start: { line: 1, column: 40 },
                        end: { line: 1, column: 53 }
                    }
                }],
                range: [17, 55],
                loc: {
                    start: { line: 1, column: 17 },
                    end: { line: 1, column: 55 }
                }
            },
            rest: null,
            generator: false,
            expression: false,
            range: [0, 55],
            loc: {
                start: { line: 1, column: 0 },
                end: { line: 1, column: 55 }
            }
        }],
        range: [0, 55],
        loc: {
            start: { line: 1, column: 0 },
            end: { line: 1, column: 55 }
        },
        errors: [{
            index: 19,
            lineNumber: 1,
            column: 20,
            message: 'Error: Line 1: Octal literals are not allowed in strict mode.'
        }]
    },

    '"\\1"; \'use strict\';': {
        type: 'Program',
        body: [{
            type: 'ExpressionStatement',
            expression: {
                type: 'Literal',
                value: '\u0001',
                raw: '"\\1"',
                range: [0, 4],
                loc: {
                    start: { line: 1, column: 0 },
                    end: { line: 1, column: 4 }
                }
            },
            range: [0, 5],
            loc: {
                start: { line: 1, column: 0 },
                end: { line: 1, column: 5 }
            }
        }, {
            type: 'ExpressionStatement',
            expression: {
                type: 'Literal',
                value: 'use strict',
                raw: '\'use strict\'',
                range: [6, 18],
                loc: {
                    start: { line: 1, column: 6 },
                    end: { line: 1, column: 18 }
                }
            },
            range: [6, 19],
            loc: {
                start: { line: 1, column: 6 },
                end: { line: 1, column: 19 }
            }
        }],
        range: [0, 19],
        loc: {
            start: { line: 1, column: 0 },
            end: { line: 1, column: 19 }
        },
        errors: [{
            index: 0,
            lineNumber: 1,
            column: 1,
            message: 'Error: Line 1: Octal literals are not allowed in strict mode.'
        }]
    },

    '"use strict"; var x = { 014: 3}': {
        type: 'Program',
        body: [{
            type: 'ExpressionStatement',
            expression: {
                type: 'Literal',
                value: 'use strict',
                raw: '"use strict"',
                range: [0, 12],
                loc: {
                    start: { line: 1, column: 0 },
                    end: { line: 1, column: 12 }
                }
            },
            range: [0, 13],
            loc: {
                start: { line: 1, column: 0 },
                end: { line: 1, column: 13 }
            }
        }, {
            type: 'VariableDeclaration',
            declarations: [{
                type: 'VariableDeclarator',
                id: {
                    type: 'Identifier',
                    name: 'x',
                    range: [18, 19],
                    loc: {
                        start: { line: 1, column: 18 },
                        end: { line: 1, column: 19 }
                    }
                },
                init: {
                    type: 'ObjectExpression',
                    properties: [{
                        type: 'Property',
                        key: {
                            type: 'Literal',
                            value: 12,
                            raw: '014',
                            range: [24, 27],
                            loc: {
                                start: { line: 1, column: 24 },
                                end: { line: 1, column: 27 }
                            }
                        },
                        value: {
                            type: 'Literal',
                            value: 3,
                            raw: '3',
                            range: [29, 30],
                            loc: {
                                start: { line: 1, column: 29 },
                                end: { line: 1, column: 30 }
                            }
                        },
                        kind: 'init',
                        range: [24, 30],
                        loc: {
                            start: { line: 1, column: 24 },
                            end: { line: 1, column: 30 }
                        }
                    }],
                    range: [22, 31],
                    loc: {
                        start: { line: 1, column: 22 },
                        end: { line: 1, column: 31 }
                    }
                },
                range: [18, 31],
                loc: {
                    start: { line: 1, column: 18 },
                    end: { line: 1, column: 31 }
                }
            }],
            kind: 'var',
            range: [14, 31],
            loc: {
                start: { line: 1, column: 14 },
                end: { line: 1, column: 31 }
            }
        }],
        range: [0, 31],
        loc: {
            start: { line: 1, column: 0 },
            end: { line: 1, column: 31 }
        },
        errors: [{
            index: 24,
            lineNumber: 1,
            column: 25,
            message: 'Error: Line 1: Octal literals are not allowed in strict mode.'
        }]
    },

    '"use strict"; var x = { get i() {}, get i() {} }': {
        type: 'Program',
        body: [{
            type: 'ExpressionStatement',
            expression: {
                type: 'Literal',
                value: 'use strict',
                raw: '"use strict"',
                range: [0, 12],
                loc: {
                    start: { line: 1, column: 0 },
                    end: { line: 1, column: 12 }
                }
            },
            range: [0, 13],
            loc: {
                start: { line: 1, column: 0 },
                end: { line: 1, column: 13 }
            }
        }, {
            type: 'VariableDeclaration',
            declarations: [{
                type: 'VariableDeclarator',
                id: {
                    type: 'Identifier',
                    name: 'x',
                    range: [18, 19],
                    loc: {
                        start: { line: 1, column: 18 },
                        end: { line: 1, column: 19 }
                    }
                },
                init: {
                    type: 'ObjectExpression',
                    properties: [{
                        type: 'Property',
                        key: {
                            type: 'Identifier',
                            name: 'i',
                            range: [28, 29],
                            loc: {
                                start: { line: 1, column: 28 },
                                end: { line: 1, column: 29 }
                            }
                        },
                        value: {
                            type: 'FunctionExpression',
                            id: null,
                            params: [],
                            defaults: [],
                            body: {
                                type: 'BlockStatement',
                                body: [],
                                range: [32, 34],
                                loc: {
                                    start: { line: 1, column: 32 },
                                    end: { line: 1, column: 34 }
                                }
                            },
                            rest: null,
                            generator: false,
                            expression: false,
                            range: [32, 34],
                            loc: {
                                start: { line: 1, column: 32 },
                                end: { line: 1, column: 34 }
                            }
                        },
                        kind: 'get',
                        range: [24, 34],
                        loc: {
                            start: { line: 1, column: 24 },
                            end: { line: 1, column: 34 }
                        }
                    }, {
                        type: 'Property',
                        key: {
                            type: 'Identifier',
                            name: 'i',
                            range: [40, 41],
                            loc: {
                                start: { line: 1, column: 40 },
                                end: { line: 1, column: 41 }
                            }
                        },
                        value: {
                            type: 'FunctionExpression',
                            id: null,
                            params: [],
                            defaults: [],
                            body: {
                                type: 'BlockStatement',
                                body: [],
                                range: [44, 46],
                                loc: {
                                    start: { line: 1, column: 44 },
                                    end: { line: 1, column: 46 }
                                }
                            },
                            rest: null,
                            generator: false,
                            expression: false,
                            range: [44, 46],
                            loc: {
                                start: { line: 1, column: 44 },
                                end: { line: 1, column: 46 }
                            }
                        },
                        kind: 'get',
                        range: [36, 46],
                        loc: {
                            start: { line: 1, column: 36 },
                            end: { line: 1, column: 46 }
                        }
                    }],
                    range: [22, 48],
                    loc: {
                        start: { line: 1, column: 22 },
                        end: { line: 1, column: 48 }
                    }
                },
                range: [18, 48],
                loc: {
                    start: { line: 1, column: 18 },
                    end: { line: 1, column: 48 }
                }
            }],
            kind: 'var',
            range: [14, 48],
            loc: {
                start: { line: 1, column: 14 },
                end: { line: 1, column: 48 }
            }
        }],
        range: [0, 48],
        loc: {
            start: { line: 1, column: 0 },
            end: { line: 1, column: 48 }
        },
        errors: [{
            index: 46,
            lineNumber: 1,
            column: 47,
            message: 'Error: Line 1: Object literal may not have multiple get/set accessors with the same name'
        }]
    },

    '"use strict"; var x = { i: 42, get i() {} }': {
        type: 'Program',
        body: [{
            type: 'ExpressionStatement',
            expression: {
                type: 'Literal',
                value: 'use strict',
                raw: '"use strict"',
                range: [0, 12],
                loc: {
                    start: { line: 1, column: 0 },
                    end: { line: 1, column: 12 }
                }
            },
            range: [0, 13],
            loc: {
                start: { line: 1, column: 0 },
                end: { line: 1, column: 13 }
            }
        }, {
            type: 'VariableDeclaration',
            declarations: [{
                type: 'VariableDeclarator',
                id: {
                    type: 'Identifier',
                    name: 'x',
                    range: [18, 19],
                    loc: {
                        start: { line: 1, column: 18 },
                        end: { line: 1, column: 19 }
                    }
                },
                init: {
                    type: 'ObjectExpression',
                    properties: [{
                        type: 'Property',
                        key: {
                            type: 'Identifier',
                            name: 'i',
                            range: [24, 25],
                            loc: {
                                start: { line: 1, column: 24 },
                                end: { line: 1, column: 25 }
                            }
                        },
                        value: {
                            type: 'Literal',
                            value: 42,
                            raw: '42',
                            range: [27, 29],
                            loc: {
                                start: { line: 1, column: 27 },
                                end: { line: 1, column: 29 }
                            }
                        },
                        kind: 'init',
                        range: [24, 29],
                        loc: {
                            start: { line: 1, column: 24 },
                            end: { line: 1, column: 29 }
                        }
                    }, {
                        type: 'Property',
                        key: {
                            type: 'Identifier',
                            name: 'i',
                            range: [35, 36],
                            loc: {
                                start: { line: 1, column: 35 },
                                end: { line: 1, column: 36 }
                            }
                        },
                        value: {
                            type: 'FunctionExpression',
                            id: null,
                            params: [],
                            defaults: [],
                            body: {
                                type: 'BlockStatement',
                                body: [],
                                range: [39, 41],
                                loc: {
                                    start: { line: 1, column: 39 },
                                    end: { line: 1, column: 41 }
                                }
                            },
                            rest: null,
                            generator: false,
                            expression: false,
                            range: [39, 41],
                            loc: {
                                start: { line: 1, column: 39 },
                                end: { line: 1, column: 41 }
                            }
                        },
                        kind: 'get',
                        range: [31, 41],
                        loc: {
                            start: { line: 1, column: 31 },
                            end: { line: 1, column: 41 }
                        }
                    }],
                    range: [22, 43],
                    loc: {
                        start: { line: 1, column: 22 },
                        end: { line: 1, column: 43 }
                    }
                },
                range: [18, 43],
                loc: {
                    start: { line: 1, column: 18 },
                    end: { line: 1, column: 43 }
                }
            }],
            kind: 'var',
            range: [14, 43],
            loc: {
                start: { line: 1, column: 14 },
                end: { line: 1, column: 43 }
            }
        }],
        range: [0, 43],
        loc: {
            start: { line: 1, column: 0 },
            end: { line: 1, column: 43 }
        },
        errors: [{
            index: 41,
            lineNumber: 1,
            column: 42,
            message: 'Error: Line 1: Object literal may not have data and accessor property with the same name'
        }]
    },

    '"use strict"; var x = { set i(x) {}, i: 42 }': {
        type: 'Program',
        body: [{
            type: 'ExpressionStatement',
            expression: {
                type: 'Literal',
                value: 'use strict',
                raw: '"use strict"',
                range: [0, 12],
                loc: {
                    start: { line: 1, column: 0 },
                    end: { line: 1, column: 12 }
                }
            },
            range: [0, 13],
            loc: {
                start: { line: 1, column: 0 },
                end: { line: 1, column: 13 }
            }
        }, {
            type: 'VariableDeclaration',
            declarations: [{
                type: 'VariableDeclarator',
                id: {
                    type: 'Identifier',
                    name: 'x',
                    range: [18, 19],
                    loc: {
                        start: { line: 1, column: 18 },
                        end: { line: 1, column: 19 }
                    }
                },
                init: {
                    type: 'ObjectExpression',
                    properties: [{
                        type: 'Property',
                        key: {
                            type: 'Identifier',
                            name: 'i',
                            range: [28, 29],
                            loc: {
                                start: { line: 1, column: 28 },
                                end: { line: 1, column: 29 }
                            }
                        },
                        value: {
                            type: 'FunctionExpression',
                            id: null,
                            params: [{
                                type: 'Identifier',
                                name: 'x',
                                range: [30, 31],
                                loc: {
                                    start: { line: 1, column: 30 },
                                    end: { line: 1, column: 31 }
                                }
                            }],
                            defaults: [],
                            body: {
                                type: 'BlockStatement',
                                body: [],
                                range: [33, 35],
                                loc: {
                                    start: { line: 1, column: 33 },
                                    end: { line: 1, column: 35 }
                                }
                            },
                            rest: null,
                            generator: false,
                            expression: false,
                            range: [33, 35],
                            loc: {
                                start: { line: 1, column: 33 },
                                end: { line: 1, column: 35 }
                            }
                        },
                        kind: 'set',
                        range: [24, 35],
                        loc: {
                            start: { line: 1, column: 24 },
                            end: { line: 1, column: 35 }
                        }
                    }, {
                        type: 'Property',
                        key: {
                            type: 'Identifier',
                            name: 'i',
                            range: [37, 38],
                            loc: {
                                start: { line: 1, column: 37 },
                                end: { line: 1, column: 38 }
                            }
                        },
                        value: {
                            type: 'Literal',
                            value: 42,
                            raw: '42',
                            range: [40, 42],
                            loc: {
                                start: { line: 1, column: 40 },
                                end: { line: 1, column: 42 }
                            }
                        },
                        kind: 'init',
                        range: [37, 42],
                        loc: {
                            start: { line: 1, column: 37 },
                            end: { line: 1, column: 42 }
                        }
                    }],
                    range: [22, 44],
                    loc: {
                        start: { line: 1, column: 22 },
                        end: { line: 1, column: 44 }
                    }
                },
                range: [18, 44],
                loc: {
                    start: { line: 1, column: 18 },
                    end: { line: 1, column: 44 }
                }
            }],
            kind: 'var',
            range: [14, 44],
            loc: {
                start: { line: 1, column: 14 },
                end: { line: 1, column: 44 }
            }
        }],
        range: [0, 44],
        loc: {
            start: { line: 1, column: 0 },
            end: { line: 1, column: 44 }
        },
        errors: [{
            index: 42,
            lineNumber: 1,
            column: 43,
            message: 'Error: Line 1: Object literal may not have data and accessor property with the same name'
        }]

    },

    '({ set s() { } })': {
        type: 'Program',
        body: [{
            type: 'ExpressionStatement',
            expression: {
                type: 'ObjectExpression',
                properties: [{
                    type: 'Property',
                    key: {
                        type: 'Identifier',
                        name: 's',
                        range: [7, 8],
                        loc: {
                            start: { line: 1, column: 7 },
                            end: { line: 1, column: 8 }
                        }
                    },
                    value: {
                        type: 'FunctionExpression',
                        id: null,
                        params: [],
                        defaults: [],
                        body: {
                            type: 'BlockStatement',
                            body: [],
                            range: [11, 14],
                            loc: {
                                start: { line: 1, column: 11 },
                                end: { line: 1, column: 14 }
                            }
                        },
                        rest: null,
                        generator: false,
                        expression: false,
                        range: [11, 14],
                        loc: {
                            start: { line: 1, column: 11 },
                            end: { line: 1, column: 14 }
                        }
                    },
                    kind: 'set',
                    range: [3, 14],
                    loc: {
                        start: { line: 1, column: 3 },
                        end: { line: 1, column: 14 }
                    }
                }],
                range: [1, 16],
                loc: {
                    start: { line: 1, column: 1 },
                    end: { line: 1, column: 16 }
                }
            },
            range: [0, 17],
            loc: {
                start: { line: 1, column: 0 },
                end: { line: 1, column: 17 }
            }
        }],
        range: [0, 17],
        loc: {
            start: { line: 1, column: 0 },
            end: { line: 1, column: 17 }
        },
        errors: [{
            index: 9,
            lineNumber: 1,
            column: 10,
            message: 'Error: Line 1: Unexpected token )'
        }]
    },

    'foo("bar") = baz': {
        type: 'Program',
        body: [{
            type: 'ExpressionStatement',
            expression: {
                type: 'AssignmentExpression',
                operator: '=',
                left: {
                    type: 'CallExpression',
                    callee: {
                        type: 'Identifier',
                        name: 'foo',
                        range: [0, 3],
                        loc: {
                            start: { line: 1, column: 0 },
                            end: { line: 1, column: 3 }
                        }
                    },
                    'arguments': [{
                        type: 'Literal',
                        value: 'bar',
                        raw: '"bar"',
                        range: [4, 9],
                        loc: {
                            start: { line: 1, column: 4 },
                            end: { line: 1, column: 9 }
                        }
                    }],
                    range: [0, 10],
                    loc: {
                        start: { line: 1, column: 0 },
                        end: { line: 1, column: 10 }
                    }
                },
                right: {
                    type: 'Identifier',
                    name: 'baz',
                    range: [13, 16],
                    loc: {
                        start: { line: 1, column: 13 },
                        end: { line: 1, column: 16 }
                    }
                },
                range: [0, 16],
                loc: {
                    start: { line: 1, column: 0 },
                    end: { line: 1, column: 16 }
                }
            },
            range: [0, 16],
            loc: {
                start: { line: 1, column: 0 },
                end: { line: 1, column: 16 }
            }
        }],
        range: [0, 16],
        loc: {
            start: { line: 1, column: 0 },
            end: { line: 1, column: 16 }
        },
        errors: [{
            index: 10,
            lineNumber: 1,
            column: 11,
            message: 'Error: Line 1: Invalid left-hand side in assignment'
        }]
    },

    '1 = 2': {
        type: 'Program',
        body: [{
            type: 'ExpressionStatement',
            expression: {
                type: 'AssignmentExpression',
                operator: '=',
                left: {
                    type: 'Literal',
                    value: 1,
                    raw: '1',
                    range: [0, 1],
                    loc: {
                        start: { line: 1, column: 0 },
                        end: { line: 1, column: 1 }
                    }
                },
                right: {
                    type: 'Literal',
                    value: 2,
                    raw: '2',
                    range: [4, 5],
                    loc: {
                        start: { line: 1, column: 4 },
                        end: { line: 1, column: 5 }
                    }
                },
                range: [0, 5],
                loc: {
                    start: { line: 1, column: 0 },
                    end: { line: 1, column: 5 }
                }
            },
            range: [0, 5],
            loc: {
                start: { line: 1, column: 0 },
                end: { line: 1, column: 5 }
            }
        }],
        range: [0, 5],
        loc: {
            start: { line: 1, column: 0 },
            end: { line: 1, column: 5 }
        },
        errors: [{
            index: 1,
            lineNumber: 1,
            column: 2,
            message: 'Error: Line 1: Invalid left-hand side in assignment'
        }]
    },

    '3++': {
        type: 'Program',
        body: [{
            type: 'ExpressionStatement',
            expression: {
                type: 'UpdateExpression',
                operator: '++',
                argument: {
                    type: 'Literal',
                    value: 3,
                    raw: '3',
                    range: [0, 1],
                    loc: {
                        start: { line: 1, column: 0 },
                        end: { line: 1, column: 1 }
                    }
                },
                prefix: false,
                range: [0, 3],
                loc: {
                    start: { line: 1, column: 0 },
                    end: { line: 1, column: 3 }
                }
            },
            range: [0, 3],
            loc: {
                start: { line: 1, column: 0 },
                end: { line: 1, column: 3 }
            }
        }],
        range: [0, 3],
        loc: {
            start: { line: 1, column: 0 },
            end: { line: 1, column: 3 }
        },
        errors: [{
            index: 1,
            lineNumber: 1,
            column: 2,
            message: 'Error: Line 1: Invalid left-hand side in assignment'
        }]
    },

    '--4': {
        type: 'Program',
        body: [{
            type: 'ExpressionStatement',
            expression: {
                type: 'UpdateExpression',
                operator: '--',
                argument: {
                    type: 'Literal',
                    value: 4,
                    raw: '4',
                    range: [2, 3],
                    loc: {
                        start: { line: 1, column: 2 },
                        end: { line: 1, column: 3 }
                    }
                },
                prefix: true,
                range: [0, 3],
                loc: {
                    start: { line: 1, column: 0 },
                    end: { line: 1, column: 3 }
                }
            },
            range: [0, 3],
            loc: {
                start: { line: 1, column: 0 },
                end: { line: 1, column: 3 }
            }
        }],
        range: [0, 3],
        loc: {
            start: { line: 1, column: 0 },
            end: { line: 1, column: 3 }
        },
        errors: [{
            index: 3,
            lineNumber: 1,
            column: 4,
            message: 'Error: Line 1: Invalid left-hand side in assignment'
        }]
    },

    'for (5 in []) {}': {
        type: 'Program',
        body: [{
            type: 'ForInStatement',
            left: {
                type: 'Literal',
                value: 5,
                raw: '5',
                range: [5, 6],
                loc: {
                    start: { line: 1, column: 5 },
                    end: { line: 1, column: 6 }
                }
            },
            right: {
                type: 'ArrayExpression',
                elements: [],
                range: [10, 12],
                loc: {
                    start: { line: 1, column: 10 },
                    end: { line: 1, column: 12 }
                }
            },
            body: {
                type: 'BlockStatement',
                body: [],
                range: [14, 16],
                loc: {
                    start: { line: 1, column: 14 },
                    end: { line: 1, column: 16 }
                }
            },
            each: false,
            range: [0, 16],
            loc: {
                start: { line: 1, column: 0 },
                end: { line: 1, column: 16 }
            }
        }],
        range: [0, 16],
        loc: {
            start: { line: 1, column: 0 },
            end: { line: 1, column: 16 }
        },
        errors: [{
            index: 6,
            lineNumber: 1,
            column: 7,
            message: 'Error: Line 1: Invalid left-hand side in for-in'
        }]
    },

    'var x = /[P QR]/\\g': {
        type: "Program",
        body: [{
            type: "VariableDeclaration",
            declarations: [{
                type: "VariableDeclarator",
                id: {
                    type: "Identifier",
                    name: "x",
                    range: [4, 5],
                    loc: {
                        start: { line: 1, column: 4 },
                        end: { line: 1, column: 5 }
                    }
                },
                init: {
                    type: "Literal",
                    value: "/[P QR]/g",
                    raw: "/[P QR]/\\g",
                    range: [8, 18],
                    loc: {
                        start: { line: 1, column: 8 },
                        end: { line: 1, column: 18 }
                    }
                },
                range: [4, 18],
                loc: {
                    start: { line: 1, column: 4 },
                    end: { line: 1, column: 18 }
                }
            }],
            kind: "var",
            range: [0, 18],
            loc: {
                start: { line: 1, column: 0 },
                end: { line: 1, column: 18 }
            }
        }],
        range: [0, 18],
        loc: {
            start: { line: 1, column: 0 },
            end: { line: 1, column: 18 }
        },
        errors: [{
            index: 17,
            lineNumber: 1,
            column: 18,
            message: "Error: Line 1: Unexpected token ILLEGAL"
        }]
    },

    'var x = /[P QR]/\\\\u0067': {
        type: "Program",
        body: [{
            type: "VariableDeclaration",
            declarations: [{
                type: "VariableDeclarator",
                id: {
                    type: "Identifier",
                    name: "x",
                    range: [4, 5],
                    loc: {
                        start: { line: 1, column: 4 },
                        end: { line: 1, column: 5 }
                    }
                },
                init: {
                    type: "Literal",
                    value: "/[P QR]/g",
                    raw: "/[P QR]/\\\\u0067",
                    range: [8, 23],
                    loc: {
                        start: { line: 1, column: 8 },
                        end: { line: 1, column: 23 }
                    }
                },
                range: [4, 23],
                loc: {
                    start: { line: 1, column: 4 },
                    end: { line: 1, column: 23 }
                }
            }],
            kind: "var",
            range: [0, 23],
            loc: {
                start: { line: 1, column: 0 },
                end: { line: 1, column: 23 }
            }
        }],
        range: [0, 23],
        loc: {
            start: { line: 1, column: 0 },
            end: { line: 1, column: 23 }
        },
        errors: [{
            index: 17,
            lineNumber: 1,
            column: 18,
            message: "Error: Line 1: Unexpected token ILLEGAL"
        }, {
            index: 23,
            lineNumber: 1,
            column: 24,
            message: "Error: Line 1: Unexpected token ILLEGAL"
        }]
    }

}

};