Web Inspector: Update Esprima to trunk (minor fixes)
authorjoepeck@webkit.org <joepeck@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Thu, 15 Aug 2019 18:14:45 +0000 (18:14 +0000)
committerjoepeck@webkit.org <joepeck@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Thu, 15 Aug 2019 18:14:45 +0000 (18:14 +0000)
https://bugs.webkit.org/show_bug.cgi?id=200691
<rdar://problem/54276170>

Rubber-stamped by Devin Rousso.

Source/WebInspectorUI:

* UserInterface/External/Esprima/esprima.js:
Updated to jquery/esprima@5e55171feb5adbc2b1d28ef4b2628d5ea9af0848.

* UserInterface/Models/ScriptSyntaxTree.js:
(WI.ScriptSyntaxTree.prototype._gatherIdentifiersInDeclaration.gatherIdentifiers):
(WI.ScriptSyntaxTree.prototype._gatherIdentifiersInDeclaration):
(WI.ScriptSyntaxTree.prototype._recurse):
(WI.ScriptSyntaxTree.prototype._createInternalSyntaxTree):
(WI.ScriptSyntaxTree):
* UserInterface/Workers/Formatter/ESTreeWalker.js:
(ESTreeWalker.prototype._walkChildren):
(ESTreeWalker):
* UserInterface/Workers/Formatter/EsprimaFormatter.js:
(EsprimaFormatter.prototype._handleTokenAtNode):
- SpreadProperty => SpreadElement.
- RestProperty => RestElement.

Source/WebInspectorUI/../../LayoutTests:

* inspector/model/parse-script-syntax-tree-expected.txt:
* inspector/model/parse-script-syntax-tree.html:
- SpreadProperty => SpreadElement.
- RestProperty => RestElement.

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@248732 268f45cc-cd09-0410-ab3c-d52691b4dbfc

LayoutTests/ChangeLog
LayoutTests/inspector/model/parse-script-syntax-tree-expected.txt
LayoutTests/inspector/model/parse-script-syntax-tree.html
Source/WebInspectorUI/ChangeLog
Source/WebInspectorUI/UserInterface/External/Esprima/esprima.js
Source/WebInspectorUI/UserInterface/Models/ScriptSyntaxTree.js
Source/WebInspectorUI/UserInterface/Workers/Formatter/ESTreeWalker.js
Source/WebInspectorUI/UserInterface/Workers/Formatter/EsprimaFormatter.js

index 04511c4..21f6b6f 100644 (file)
@@ -1,3 +1,16 @@
+2019-08-15  Joseph Pecoraro  <pecoraro@apple.com>
+
+        Web Inspector: Update Esprima to trunk (minor fixes)
+        https://bugs.webkit.org/show_bug.cgi?id=200691
+        <rdar://problem/54276170>
+
+        Rubber-stamped by Devin Rousso.
+
+        * inspector/model/parse-script-syntax-tree-expected.txt:
+        * inspector/model/parse-script-syntax-tree.html:
+        - SpreadProperty => SpreadElement.
+        - RestProperty => RestElement.
+
 2019-08-15  Saam Barati  <sbarati@apple.com>
 
         [WHLSL] Make length, clamp, operator+, operator-, operator*, operator/, operator[], operator[]=, operator.xy, operator.xy=, native
index e5f8afa..14f9146 100644 (file)
@@ -28,7 +28,7 @@ passed MemberExpression
 passed NewExpression
 passed ObjectExpression
 passed Property
-passed RestStatement
+passed RestElement
 passed ReturnStatement
 passed SequenceExpression
 passed SwitchStatement
@@ -44,8 +44,7 @@ passed WithStatement
 passed YieldExpression
 passed ClassStatement, Super, MetaProperty
 passed Import
-passed RestProperty
-passed SpreadProperty
+passed SpreadElement
 passed AssignmentPattern
 passed ArrowFunctionExpression
 passed Async Functions
index 51fec3c..20ade86 100644 (file)
@@ -364,12 +364,22 @@ function test()
     InspectorTest.assert(node.right.properties[0].key.type === WI.ScriptSyntaxTree.NodeType.Literal);
     InspectorTest.log("passed Property");
 
+    node = makeNode("let { ...rest } = { x: 1, y: 0 }", false);
+    InspectorTest.assert(node.type === WI.ScriptSyntaxTree.NodeType.VariableDeclaration);
+    InspectorTest.assert(node.kind === "let");
+    InspectorTest.assert(node.declarations.length === 1);
+    InspectorTest.assert(node.declarations[0].type === WI.ScriptSyntaxTree.NodeType.VariableDeclarator);
+    InspectorTest.assert(node.declarations[0].id.type === WI.ScriptSyntaxTree.NodeType.ObjectPattern);
+    InspectorTest.assert(node.declarations[0].id.properties.length === 1);
+    InspectorTest.assert(node.declarations[0].id.properties[0].type === WI.ScriptSyntaxTree.NodeType.RestElement);
+    InspectorTest.assert(node.declarations[0].id.properties[0].argument.type === WI.ScriptSyntaxTree.NodeType.Identifier);
+    InspectorTest.assert(node.declarations[0].id.properties[0].argument.name === "rest");
     node = makeNode("function foo(...things) { return things; }", false);
     InspectorTest.assert(node.params.length === 1);
     InspectorTest.assert(node.params[0].type === WI.ScriptSyntaxTree.NodeType.RestElement);
     InspectorTest.assert(node.params[0].argument.type === WI.ScriptSyntaxTree.NodeType.Identifier);
     InspectorTest.assert(node.params[0].argument.name === "things");
-    InspectorTest.log("passed RestStatement");
+    InspectorTest.log("passed RestElement");
 
     node = makeNode("function foo() { return 20; }", false);
     InspectorTest.assert(node.body.body[0].type === WI.ScriptSyntaxTree.NodeType.ReturnStatement);
@@ -534,18 +544,6 @@ function test()
     InspectorTest.assert(node.arguments[0].type === WI.ScriptSyntaxTree.NodeType.Literal);
     InspectorTest.log("passed Import");
 
-    node = makeNode("let { ...rest } = { x: 1, y: 0 }", false);
-    InspectorTest.assert(node.type === WI.ScriptSyntaxTree.NodeType.VariableDeclaration);
-    InspectorTest.assert(node.kind === "let");
-    InspectorTest.assert(node.declarations.length === 1);
-    InspectorTest.assert(node.declarations[0].type === WI.ScriptSyntaxTree.NodeType.VariableDeclarator);
-    InspectorTest.assert(node.declarations[0].id.type === WI.ScriptSyntaxTree.NodeType.ObjectPattern);
-    InspectorTest.assert(node.declarations[0].id.properties.length === 1);
-    InspectorTest.assert(node.declarations[0].id.properties[0].type === WI.ScriptSyntaxTree.NodeType.RestProperty);
-    InspectorTest.assert(node.declarations[0].id.properties[0].argument.type === WI.ScriptSyntaxTree.NodeType.Identifier);
-    InspectorTest.assert(node.declarations[0].id.properties[0].argument.name === "rest");
-    InspectorTest.log("passed RestProperty");
-
     node = makeNode("let n = { ...spread }", false);
     InspectorTest.assert(node.type === WI.ScriptSyntaxTree.NodeType.VariableDeclaration);
     InspectorTest.assert(node.kind === "let");
@@ -553,10 +551,10 @@ function test()
     InspectorTest.assert(node.declarations[0].type === WI.ScriptSyntaxTree.NodeType.VariableDeclarator);
     InspectorTest.assert(node.declarations[0].init.type === WI.ScriptSyntaxTree.NodeType.ObjectExpression);
     InspectorTest.assert(node.declarations[0].init.properties.length === 1);
-    InspectorTest.assert(node.declarations[0].init.properties[0].type === WI.ScriptSyntaxTree.NodeType.SpreadProperty);
+    InspectorTest.assert(node.declarations[0].init.properties[0].type === WI.ScriptSyntaxTree.NodeType.SpreadElement);
     InspectorTest.assert(node.declarations[0].init.properties[0].argument.type === WI.ScriptSyntaxTree.NodeType.Identifier);
     InspectorTest.assert(node.declarations[0].init.properties[0].argument.name === "spread");
-    InspectorTest.log("passed SpreadProperty");
+    InspectorTest.log("passed SpreadElement");
 
     node = makeNode("let [x=20] = [];", false);
     InspectorTest.assert(node.type === WI.ScriptSyntaxTree.NodeType.VariableDeclaration);
index cd113b4..127f876 100644 (file)
@@ -1,3 +1,28 @@
+2019-08-15  Joseph Pecoraro  <pecoraro@apple.com>
+
+        Web Inspector: Update Esprima to trunk (minor fixes)
+        https://bugs.webkit.org/show_bug.cgi?id=200691
+        <rdar://problem/54276170>
+
+        Rubber-stamped by Devin Rousso.
+
+        * UserInterface/External/Esprima/esprima.js:
+        Updated to jquery/esprima@5e55171feb5adbc2b1d28ef4b2628d5ea9af0848.
+
+        * UserInterface/Models/ScriptSyntaxTree.js:
+        (WI.ScriptSyntaxTree.prototype._gatherIdentifiersInDeclaration.gatherIdentifiers):
+        (WI.ScriptSyntaxTree.prototype._gatherIdentifiersInDeclaration):
+        (WI.ScriptSyntaxTree.prototype._recurse):
+        (WI.ScriptSyntaxTree.prototype._createInternalSyntaxTree):
+        (WI.ScriptSyntaxTree):
+        * UserInterface/Workers/Formatter/ESTreeWalker.js:
+        (ESTreeWalker.prototype._walkChildren):
+        (ESTreeWalker):
+        * UserInterface/Workers/Formatter/EsprimaFormatter.js:
+        (EsprimaFormatter.prototype._handleTokenAtNode):
+        - SpreadProperty => SpreadElement.
+        - RestProperty => RestElement.
+
 2019-08-15  Devin Rousso  <drousso@apple.com>
 
         Web Inspector: Uncaught Exception: Content request failed.
index 67e3926..9c33b9d 100644 (file)
@@ -57,6 +57,7 @@ return /******/ (function(modules) { // webpackBootstrap
 /* 0 */
 /***/ function(module, exports, __webpack_require__) {
 
+    "use strict";
     /*
       Copyright JS Foundation and other contributors, https://js.foundation/
 
@@ -80,7 +81,7 @@ return /******/ (function(modules) { // webpackBootstrap
       (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
       THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
     */
-    "use strict";
+    Object.defineProperty(exports, "__esModule", { value: true });
     var comment_handler_1 = __webpack_require__(1);
     var jsx_parser_1 = __webpack_require__(3);
     var parser_1 = __webpack_require__(8);
@@ -180,8 +181,9 @@ return /******/ (function(modules) { // webpackBootstrap
 /***/ function(module, exports, __webpack_require__) {
 
     "use strict";
+    Object.defineProperty(exports, "__esModule", { value: true });
     var syntax_1 = __webpack_require__(2);
-    var CommentHandler = (function () {
+    var CommentHandler = /** @class */ (function () {
         function CommentHandler() {
             this.attach = false;
             this.comments = [];
@@ -211,20 +213,20 @@ return /******/ (function(modules) { // webpackBootstrap
             var trailingComments = [];
             if (this.trailing.length > 0) {
                 for (var i = this.trailing.length - 1; i >= 0; --i) {
-                    var entry_1 = this.trailing[i];
-                    if (entry_1.start >= metadata.end.offset) {
-                        trailingComments.unshift(entry_1.comment);
+                    var entry = this.trailing[i];
+                    if (entry.start >= metadata.end.offset) {
+                        trailingComments.unshift(entry.comment);
                     }
                 }
                 this.trailing.length = 0;
                 return trailingComments;
             }
-            var entry = this.stack[this.stack.length - 1];
-            if (entry && entry.node.trailingComments) {
-                var firstComment = entry.node.trailingComments[0];
+            var last = this.stack[this.stack.length - 1];
+            if (last && last.node.trailingComments) {
+                var firstComment = last.node.trailingComments[0];
                 if (firstComment && firstComment.range[0] >= metadata.end.offset) {
-                    trailingComments = entry.node.trailingComments;
-                    delete entry.node.trailingComments;
+                    trailingComments = last.node.trailingComments;
+                    delete last.node.trailingComments;
                 }
             }
             return trailingComments;
@@ -334,6 +336,7 @@ return /******/ (function(modules) { // webpackBootstrap
 /***/ function(module, exports) {
 
     "use strict";
+    Object.defineProperty(exports, "__esModule", { value: true });
     exports.Syntax = {
         AssignmentExpression: 'AssignmentExpression',
         AssignmentPattern: 'AssignmentPattern',
@@ -383,11 +386,9 @@ return /******/ (function(modules) { // webpackBootstrap
         Program: 'Program',
         Property: 'Property',
         RestElement: 'RestElement',
-        RestProperty: 'RestProperty',
         ReturnStatement: 'ReturnStatement',
         SequenceExpression: 'SequenceExpression',
         SpreadElement: 'SpreadElement',
-        SpreadProperty: 'SpreadProperty',
         Super: 'Super',
         SwitchCase: 'SwitchCase',
         SwitchStatement: 'SwitchStatement',
@@ -413,11 +414,20 @@ return /******/ (function(modules) { // webpackBootstrap
 
     "use strict";
 /* istanbul ignore next */
-    var __extends = (this && this.__extends) || function (d, b) {
-        for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
-        function __() { this.constructor = d; }
-        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
-    };
+    var __extends = (this && this.__extends) || (function () {
+        var extendStatics = function (d, b) {
+            extendStatics = Object.setPrototypeOf ||
+                ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
+                function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
+            return extendStatics(d, b);
+        };
+        return function (d, b) {
+            extendStatics(d, b);
+            function __() { this.constructor = d; }
+            d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
+        };
+    })();
+    Object.defineProperty(exports, "__esModule", { value: true });
     var character_1 = __webpack_require__(4);
     var JSXNode = __webpack_require__(5);
     var jsx_syntax_1 = __webpack_require__(6);
@@ -451,7 +461,7 @@ return /******/ (function(modules) { // webpackBootstrap
         }
         return qualifiedName;
     }
-    var JSXParser = (function (_super) {
+    var JSXParser = /** @class */ (function (_super) {
         __extends(JSXParser, _super);
         function JSXParser(code, options, delegate) {
             return _super.call(this, code, options, delegate) || this;
@@ -638,7 +648,7 @@ return /******/ (function(modules) { // webpackBootstrap
                     end: this.scanner.index
                 };
             }
-            return this.scanner.throwUnexpectedToken();
+            return this.scanner.lex();
         };
         JSXParser.prototype.nextJSXToken = function () {
             this.collectComments();
@@ -822,9 +832,9 @@ return /******/ (function(modules) { // webpackBootstrap
             this.expectJSX('<');
             if (this.matchJSX('/')) {
                 this.expectJSX('/');
-                var name_3 = this.parseJSXElementName();
+                var elementName = this.parseJSXElementName();
                 this.expectJSX('>');
-                return this.finalize(node, new JSXNode.JSXClosingElement(name_3));
+                return this.finalize(node, new JSXNode.JSXClosingElement(elementName));
             }
             var name = this.parseJSXElementName();
             var attributes = this.parseJSXAttributes();
@@ -937,6 +947,9 @@ return /******/ (function(modules) { // webpackBootstrap
             this.finishJSX();
             return element;
         };
+        JSXParser.prototype.isStartOfExpression = function () {
+            return _super.prototype.isStartOfExpression.call(this) || this.match('<');
+        };
         return JSXParser;
     }(parser_1.Parser));
     exports.JSXParser = JSXParser;
@@ -947,12 +960,13 @@ return /******/ (function(modules) { // webpackBootstrap
 /***/ function(module, exports) {
 
     "use strict";
+    Object.defineProperty(exports, "__esModule", { value: true });
     // See also tools/generate-unicode-regex.js.
     var Regex = {
-        // Unicode v8.0.0 NonAsciiIdentifierStart:
-        NonAsciiIdentifierStart: /[\xAA\xB5\xBA\xC0-\xD6\xD8-\xF6\xF8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0370-\u0374\u0376\u0377\u037A-\u037D\u037F\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5\u03F7-\u0481\u048A-\u052F\u0531-\u0556\u0559\u0561-\u0587\u05D0-\u05EA\u05F0-\u05F2\u0620-\u064A\u066E\u066F\u0671-\u06D3\u06D5\u06E5\u06E6\u06EE\u06EF\u06FA-\u06FC\u06FF\u0710\u0712-\u072F\u074D-\u07A5\u07B1\u07CA-\u07EA\u07F4\u07F5\u07FA\u0800-\u0815\u081A\u0824\u0828\u0840-\u0858\u08A0-\u08B4\u0904-\u0939\u093D\u0950\u0958-\u0961\u0971-\u0980\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BD\u09CE\u09DC\u09DD\u09DF-\u09E1\u09F0\u09F1\u0A05-\u0A0A\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A59-\u0A5C\u0A5E\u0A72-\u0A74\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABD\u0AD0\u0AE0\u0AE1\u0AF9\u0B05-\u0B0C\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3D\u0B5C\u0B5D\u0B5F-\u0B61\u0B71\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BD0\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C39\u0C3D\u0C58-\u0C5A\u0C60\u0C61\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBD\u0CDE\u0CE0\u0CE1\u0CF1\u0CF2\u0D05-\u0D0C\u0D0E-\u0D10\u0D12-\u0D3A\u0D3D\u0D4E\u0D5F-\u0D61\u0D7A-\u0D7F\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0E01-\u0E30\u0E32\u0E33\u0E40-\u0E46\u0E81\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD-\u0EB0\u0EB2\u0EB3\u0EBD\u0EC0-\u0EC4\u0EC6\u0EDC-\u0EDF\u0F00\u0F40-\u0F47\u0F49-\u0F6C\u0F88-\u0F8C\u1000-\u102A\u103F\u1050-\u1055\u105A-\u105D\u1061\u1065\u1066\u106E-\u1070\u1075-\u1081\u108E\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310\u1312-\u1315\u1318-\u135A\u1380-\u138F\u13A0-\u13F5\u13F8-\u13FD\u1401-\u166C\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u16EE-\u16F8\u1700-\u170C\u170E-\u1711\u1720-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17D7\u17DC\u1820-\u1877\u1880-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191E\u1950-\u196D\u1970-\u1974\u1980-\u19AB\u19B0-\u19C9\u1A00-\u1A16\u1A20-\u1A54\u1AA7\u1B05-\u1B33\u1B45-\u1B4B\u1B83-\u1BA0\u1BAE\u1BAF\u1BBA-\u1BE5\u1C00-\u1C23\u1C4D-\u1C4F\u1C5A-\u1C7D\u1CE9-\u1CEC\u1CEE-\u1CF1\u1CF5\u1CF6\u1D00-\u1DBF\u1E00-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u2071\u207F\u2090-\u209C\u2102\u2107\u210A-\u2113\u2115\u2118-\u211D\u2124\u2126\u2128\u212A-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2160-\u2188\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CEE\u2CF2\u2CF3\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D80-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\u3005-\u3007\u3021-\u3029\u3031-\u3035\u3038-\u303C\u3041-\u3096\u309B-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312D\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FD5\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA61F\uA62A\uA62B\uA640-\uA66E\uA67F-\uA69D\uA6A0-\uA6EF\uA717-\uA71F\uA722-\uA788\uA78B-\uA7AD\uA7B0-\uA7B7\uA7F7-\uA801\uA803-\uA805\uA807-\uA80A\uA80C-\uA822\uA840-\uA873\uA882-\uA8B3\uA8F2-\uA8F7\uA8FB\uA8FD\uA90A-\uA925\uA930-\uA946\uA960-\uA97C\uA984-\uA9B2\uA9CF\uA9E0-\uA9E4\uA9E6-\uA9EF\uA9FA-\uA9FE\uAA00-\uAA28\uAA40-\uAA42\uAA44-\uAA4B\uAA60-\uAA76\uAA7A\uAA7E-\uAAAF\uAAB1\uAAB5\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB-\uAADD\uAAE0-\uAAEA\uAAF2-\uAAF4\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E\uAB30-\uAB5A\uAB5C-\uAB65\uAB70-\uABE2\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D\uFB1F-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE70-\uFE74\uFE76-\uFEFC\uFF21-\uFF3A\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC]|\uD800[\uDC00-\uDC0B\uDC0D-\uDC26\uDC28-\uDC3A\uDC3C\uDC3D\uDC3F-\uDC4D\uDC50-\uDC5D\uDC80-\uDCFA\uDD40-\uDD74\uDE80-\uDE9C\uDEA0-\uDED0\uDF00-\uDF1F\uDF30-\uDF4A\uDF50-\uDF75\uDF80-\uDF9D\uDFA0-\uDFC3\uDFC8-\uDFCF\uDFD1-\uDFD5]|\uD801[\uDC00-\uDC9D\uDD00-\uDD27\uDD30-\uDD63\uDE00-\uDF36\uDF40-\uDF55\uDF60-\uDF67]|\uD802[\uDC00-\uDC05\uDC08\uDC0A-\uDC35\uDC37\uDC38\uDC3C\uDC3F-\uDC55\uDC60-\uDC76\uDC80-\uDC9E\uDCE0-\uDCF2\uDCF4\uDCF5\uDD00-\uDD15\uDD20-\uDD39\uDD80-\uDDB7\uDDBE\uDDBF\uDE00\uDE10-\uDE13\uDE15-\uDE17\uDE19-\uDE33\uDE60-\uDE7C\uDE80-\uDE9C\uDEC0-\uDEC7\uDEC9-\uDEE4\uDF00-\uDF35\uDF40-\uDF55\uDF60-\uDF72\uDF80-\uDF91]|\uD803[\uDC00-\uDC48\uDC80-\uDCB2\uDCC0-\uDCF2]|\uD804[\uDC03-\uDC37\uDC83-\uDCAF\uDCD0-\uDCE8\uDD03-\uDD26\uDD50-\uDD72\uDD76\uDD83-\uDDB2\uDDC1-\uDDC4\uDDDA\uDDDC\uDE00-\uDE11\uDE13-\uDE2B\uDE80-\uDE86\uDE88\uDE8A-\uDE8D\uDE8F-\uDE9D\uDE9F-\uDEA8\uDEB0-\uDEDE\uDF05-\uDF0C\uDF0F\uDF10\uDF13-\uDF28\uDF2A-\uDF30\uDF32\uDF33\uDF35-\uDF39\uDF3D\uDF50\uDF5D-\uDF61]|\uD805[\uDC80-\uDCAF\uDCC4\uDCC5\uDCC7\uDD80-\uDDAE\uDDD8-\uDDDB\uDE00-\uDE2F\uDE44\uDE80-\uDEAA\uDF00-\uDF19]|\uD806[\uDCA0-\uDCDF\uDCFF\uDEC0-\uDEF8]|\uD808[\uDC00-\uDF99]|\uD809[\uDC00-\uDC6E\uDC80-\uDD43]|[\uD80C\uD840-\uD868\uD86A-\uD86C\uD86F-\uD872][\uDC00-\uDFFF]|\uD80D[\uDC00-\uDC2E]|\uD811[\uDC00-\uDE46]|\uD81A[\uDC00-\uDE38\uDE40-\uDE5E\uDED0-\uDEED\uDF00-\uDF2F\uDF40-\uDF43\uDF63-\uDF77\uDF7D-\uDF8F]|\uD81B[\uDF00-\uDF44\uDF50\uDF93-\uDF9F]|\uD82C[\uDC00\uDC01]|\uD82F[\uDC00-\uDC6A\uDC70-\uDC7C\uDC80-\uDC88\uDC90-\uDC99]|\uD835[\uDC00-\uDC54\uDC56-\uDC9C\uDC9E\uDC9F\uDCA2\uDCA5\uDCA6\uDCA9-\uDCAC\uDCAE-\uDCB9\uDCBB\uDCBD-\uDCC3\uDCC5-\uDD05\uDD07-\uDD0A\uDD0D-\uDD14\uDD16-\uDD1C\uDD1E-\uDD39\uDD3B-\uDD3E\uDD40-\uDD44\uDD46\uDD4A-\uDD50\uDD52-\uDEA5\uDEA8-\uDEC0\uDEC2-\uDEDA\uDEDC-\uDEFA\uDEFC-\uDF14\uDF16-\uDF34\uDF36-\uDF4E\uDF50-\uDF6E\uDF70-\uDF88\uDF8A-\uDFA8\uDFAA-\uDFC2\uDFC4-\uDFCB]|\uD83A[\uDC00-\uDCC4]|\uD83B[\uDE00-\uDE03\uDE05-\uDE1F\uDE21\uDE22\uDE24\uDE27\uDE29-\uDE32\uDE34-\uDE37\uDE39\uDE3B\uDE42\uDE47\uDE49\uDE4B\uDE4D-\uDE4F\uDE51\uDE52\uDE54\uDE57\uDE59\uDE5B\uDE5D\uDE5F\uDE61\uDE62\uDE64\uDE67-\uDE6A\uDE6C-\uDE72\uDE74-\uDE77\uDE79-\uDE7C\uDE7E\uDE80-\uDE89\uDE8B-\uDE9B\uDEA1-\uDEA3\uDEA5-\uDEA9\uDEAB-\uDEBB]|\uD869[\uDC00-\uDED6\uDF00-\uDFFF]|\uD86D[\uDC00-\uDF34\uDF40-\uDFFF]|\uD86E[\uDC00-\uDC1D\uDC20-\uDFFF]|\uD873[\uDC00-\uDEA1]|\uD87E[\uDC00-\uDE1D]/,
-        // Unicode v8.0.0 NonAsciiIdentifierPart:
-        NonAsciiIdentifierPart: /[\xAA\xB5\xB7\xBA\xC0-\xD6\xD8-\xF6\xF8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0300-\u0374\u0376\u0377\u037A-\u037D\u037F\u0386-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5\u03F7-\u0481\u0483-\u0487\u048A-\u052F\u0531-\u0556\u0559\u0561-\u0587\u0591-\u05BD\u05BF\u05C1\u05C2\u05C4\u05C5\u05C7\u05D0-\u05EA\u05F0-\u05F2\u0610-\u061A\u0620-\u0669\u066E-\u06D3\u06D5-\u06DC\u06DF-\u06E8\u06EA-\u06FC\u06FF\u0710-\u074A\u074D-\u07B1\u07C0-\u07F5\u07FA\u0800-\u082D\u0840-\u085B\u08A0-\u08B4\u08E3-\u0963\u0966-\u096F\u0971-\u0983\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BC-\u09C4\u09C7\u09C8\u09CB-\u09CE\u09D7\u09DC\u09DD\u09DF-\u09E3\u09E6-\u09F1\u0A01-\u0A03\u0A05-\u0A0A\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A3C\u0A3E-\u0A42\u0A47\u0A48\u0A4B-\u0A4D\u0A51\u0A59-\u0A5C\u0A5E\u0A66-\u0A75\u0A81-\u0A83\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABC-\u0AC5\u0AC7-\u0AC9\u0ACB-\u0ACD\u0AD0\u0AE0-\u0AE3\u0AE6-\u0AEF\u0AF9\u0B01-\u0B03\u0B05-\u0B0C\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3C-\u0B44\u0B47\u0B48\u0B4B-\u0B4D\u0B56\u0B57\u0B5C\u0B5D\u0B5F-\u0B63\u0B66-\u0B6F\u0B71\u0B82\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BBE-\u0BC2\u0BC6-\u0BC8\u0BCA-\u0BCD\u0BD0\u0BD7\u0BE6-\u0BEF\u0C00-\u0C03\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C39\u0C3D-\u0C44\u0C46-\u0C48\u0C4A-\u0C4D\u0C55\u0C56\u0C58-\u0C5A\u0C60-\u0C63\u0C66-\u0C6F\u0C81-\u0C83\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBC-\u0CC4\u0CC6-\u0CC8\u0CCA-\u0CCD\u0CD5\u0CD6\u0CDE\u0CE0-\u0CE3\u0CE6-\u0CEF\u0CF1\u0CF2\u0D01-\u0D03\u0D05-\u0D0C\u0D0E-\u0D10\u0D12-\u0D3A\u0D3D-\u0D44\u0D46-\u0D48\u0D4A-\u0D4E\u0D57\u0D5F-\u0D63\u0D66-\u0D6F\u0D7A-\u0D7F\u0D82\u0D83\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0DCA\u0DCF-\u0DD4\u0DD6\u0DD8-\u0DDF\u0DE6-\u0DEF\u0DF2\u0DF3\u0E01-\u0E3A\u0E40-\u0E4E\u0E50-\u0E59\u0E81\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD-\u0EB9\u0EBB-\u0EBD\u0EC0-\u0EC4\u0EC6\u0EC8-\u0ECD\u0ED0-\u0ED9\u0EDC-\u0EDF\u0F00\u0F18\u0F19\u0F20-\u0F29\u0F35\u0F37\u0F39\u0F3E-\u0F47\u0F49-\u0F6C\u0F71-\u0F84\u0F86-\u0F97\u0F99-\u0FBC\u0FC6\u1000-\u1049\u1050-\u109D\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310\u1312-\u1315\u1318-\u135A\u135D-\u135F\u1369-\u1371\u1380-\u138F\u13A0-\u13F5\u13F8-\u13FD\u1401-\u166C\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u16EE-\u16F8\u1700-\u170C\u170E-\u1714\u1720-\u1734\u1740-\u1753\u1760-\u176C\u176E-\u1770\u1772\u1773\u1780-\u17D3\u17D7\u17DC\u17DD\u17E0-\u17E9\u180B-\u180D\u1810-\u1819\u1820-\u1877\u1880-\u18AA\u18B0-\u18F5\u1900-\u191E\u1920-\u192B\u1930-\u193B\u1946-\u196D\u1970-\u1974\u1980-\u19AB\u19B0-\u19C9\u19D0-\u19DA\u1A00-\u1A1B\u1A20-\u1A5E\u1A60-\u1A7C\u1A7F-\u1A89\u1A90-\u1A99\u1AA7\u1AB0-\u1ABD\u1B00-\u1B4B\u1B50-\u1B59\u1B6B-\u1B73\u1B80-\u1BF3\u1C00-\u1C37\u1C40-\u1C49\u1C4D-\u1C7D\u1CD0-\u1CD2\u1CD4-\u1CF6\u1CF8\u1CF9\u1D00-\u1DF5\u1DFC-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u200C\u200D\u203F\u2040\u2054\u2071\u207F\u2090-\u209C\u20D0-\u20DC\u20E1\u20E5-\u20F0\u2102\u2107\u210A-\u2113\u2115\u2118-\u211D\u2124\u2126\u2128\u212A-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2160-\u2188\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CF3\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D7F-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\u2DE0-\u2DFF\u3005-\u3007\u3021-\u302F\u3031-\u3035\u3038-\u303C\u3041-\u3096\u3099-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312D\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FD5\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA62B\uA640-\uA66F\uA674-\uA67D\uA67F-\uA6F1\uA717-\uA71F\uA722-\uA788\uA78B-\uA7AD\uA7B0-\uA7B7\uA7F7-\uA827\uA840-\uA873\uA880-\uA8C4\uA8D0-\uA8D9\uA8E0-\uA8F7\uA8FB\uA8FD\uA900-\uA92D\uA930-\uA953\uA960-\uA97C\uA980-\uA9C0\uA9CF-\uA9D9\uA9E0-\uA9FE\uAA00-\uAA36\uAA40-\uAA4D\uAA50-\uAA59\uAA60-\uAA76\uAA7A-\uAAC2\uAADB-\uAADD\uAAE0-\uAAEF\uAAF2-\uAAF6\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E\uAB30-\uAB5A\uAB5C-\uAB65\uAB70-\uABEA\uABEC\uABED\uABF0-\uABF9\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE00-\uFE0F\uFE20-\uFE2F\uFE33\uFE34\uFE4D-\uFE4F\uFE70-\uFE74\uFE76-\uFEFC\uFF10-\uFF19\uFF21-\uFF3A\uFF3F\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC]|\uD800[\uDC00-\uDC0B\uDC0D-\uDC26\uDC28-\uDC3A\uDC3C\uDC3D\uDC3F-\uDC4D\uDC50-\uDC5D\uDC80-\uDCFA\uDD40-\uDD74\uDDFD\uDE80-\uDE9C\uDEA0-\uDED0\uDEE0\uDF00-\uDF1F\uDF30-\uDF4A\uDF50-\uDF7A\uDF80-\uDF9D\uDFA0-\uDFC3\uDFC8-\uDFCF\uDFD1-\uDFD5]|\uD801[\uDC00-\uDC9D\uDCA0-\uDCA9\uDD00-\uDD27\uDD30-\uDD63\uDE00-\uDF36\uDF40-\uDF55\uDF60-\uDF67]|\uD802[\uDC00-\uDC05\uDC08\uDC0A-\uDC35\uDC37\uDC38\uDC3C\uDC3F-\uDC55\uDC60-\uDC76\uDC80-\uDC9E\uDCE0-\uDCF2\uDCF4\uDCF5\uDD00-\uDD15\uDD20-\uDD39\uDD80-\uDDB7\uDDBE\uDDBF\uDE00-\uDE03\uDE05\uDE06\uDE0C-\uDE13\uDE15-\uDE17\uDE19-\uDE33\uDE38-\uDE3A\uDE3F\uDE60-\uDE7C\uDE80-\uDE9C\uDEC0-\uDEC7\uDEC9-\uDEE6\uDF00-\uDF35\uDF40-\uDF55\uDF60-\uDF72\uDF80-\uDF91]|\uD803[\uDC00-\uDC48\uDC80-\uDCB2\uDCC0-\uDCF2]|\uD804[\uDC00-\uDC46\uDC66-\uDC6F\uDC7F-\uDCBA\uDCD0-\uDCE8\uDCF0-\uDCF9\uDD00-\uDD34\uDD36-\uDD3F\uDD50-\uDD73\uDD76\uDD80-\uDDC4\uDDCA-\uDDCC\uDDD0-\uDDDA\uDDDC\uDE00-\uDE11\uDE13-\uDE37\uDE80-\uDE86\uDE88\uDE8A-\uDE8D\uDE8F-\uDE9D\uDE9F-\uDEA8\uDEB0-\uDEEA\uDEF0-\uDEF9\uDF00-\uDF03\uDF05-\uDF0C\uDF0F\uDF10\uDF13-\uDF28\uDF2A-\uDF30\uDF32\uDF33\uDF35-\uDF39\uDF3C-\uDF44\uDF47\uDF48\uDF4B-\uDF4D\uDF50\uDF57\uDF5D-\uDF63\uDF66-\uDF6C\uDF70-\uDF74]|\uD805[\uDC80-\uDCC5\uDCC7\uDCD0-\uDCD9\uDD80-\uDDB5\uDDB8-\uDDC0\uDDD8-\uDDDD\uDE00-\uDE40\uDE44\uDE50-\uDE59\uDE80-\uDEB7\uDEC0-\uDEC9\uDF00-\uDF19\uDF1D-\uDF2B\uDF30-\uDF39]|\uD806[\uDCA0-\uDCE9\uDCFF\uDEC0-\uDEF8]|\uD808[\uDC00-\uDF99]|\uD809[\uDC00-\uDC6E\uDC80-\uDD43]|[\uD80C\uD840-\uD868\uD86A-\uD86C\uD86F-\uD872][\uDC00-\uDFFF]|\uD80D[\uDC00-\uDC2E]|\uD811[\uDC00-\uDE46]|\uD81A[\uDC00-\uDE38\uDE40-\uDE5E\uDE60-\uDE69\uDED0-\uDEED\uDEF0-\uDEF4\uDF00-\uDF36\uDF40-\uDF43\uDF50-\uDF59\uDF63-\uDF77\uDF7D-\uDF8F]|\uD81B[\uDF00-\uDF44\uDF50-\uDF7E\uDF8F-\uDF9F]|\uD82C[\uDC00\uDC01]|\uD82F[\uDC00-\uDC6A\uDC70-\uDC7C\uDC80-\uDC88\uDC90-\uDC99\uDC9D\uDC9E]|\uD834[\uDD65-\uDD69\uDD6D-\uDD72\uDD7B-\uDD82\uDD85-\uDD8B\uDDAA-\uDDAD\uDE42-\uDE44]|\uD835[\uDC00-\uDC54\uDC56-\uDC9C\uDC9E\uDC9F\uDCA2\uDCA5\uDCA6\uDCA9-\uDCAC\uDCAE-\uDCB9\uDCBB\uDCBD-\uDCC3\uDCC5-\uDD05\uDD07-\uDD0A\uDD0D-\uDD14\uDD16-\uDD1C\uDD1E-\uDD39\uDD3B-\uDD3E\uDD40-\uDD44\uDD46\uDD4A-\uDD50\uDD52-\uDEA5\uDEA8-\uDEC0\uDEC2-\uDEDA\uDEDC-\uDEFA\uDEFC-\uDF14\uDF16-\uDF34\uDF36-\uDF4E\uDF50-\uDF6E\uDF70-\uDF88\uDF8A-\uDFA8\uDFAA-\uDFC2\uDFC4-\uDFCB\uDFCE-\uDFFF]|\uD836[\uDE00-\uDE36\uDE3B-\uDE6C\uDE75\uDE84\uDE9B-\uDE9F\uDEA1-\uDEAF]|\uD83A[\uDC00-\uDCC4\uDCD0-\uDCD6]|\uD83B[\uDE00-\uDE03\uDE05-\uDE1F\uDE21\uDE22\uDE24\uDE27\uDE29-\uDE32\uDE34-\uDE37\uDE39\uDE3B\uDE42\uDE47\uDE49\uDE4B\uDE4D-\uDE4F\uDE51\uDE52\uDE54\uDE57\uDE59\uDE5B\uDE5D\uDE5F\uDE61\uDE62\uDE64\uDE67-\uDE6A\uDE6C-\uDE72\uDE74-\uDE77\uDE79-\uDE7C\uDE7E\uDE80-\uDE89\uDE8B-\uDE9B\uDEA1-\uDEA3\uDEA5-\uDEA9\uDEAB-\uDEBB]|\uD869[\uDC00-\uDED6\uDF00-\uDFFF]|\uD86D[\uDC00-\uDF34\uDF40-\uDFFF]|\uD86E[\uDC00-\uDC1D\uDC20-\uDFFF]|\uD873[\uDC00-\uDEA1]|\uD87E[\uDC00-\uDE1D]|\uDB40[\uDD00-\uDDEF]/
+        // Unicode v12.1.0 NonAsciiIdentifierStart:
+        NonAsciiIdentifierStart: /[\xAA\xB5\xBA\xC0-\xD6\xD8-\xF6\xF8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0370-\u0374\u0376\u0377\u037A-\u037D\u037F\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5\u03F7-\u0481\u048A-\u052F\u0531-\u0556\u0559\u0560-\u0588\u05D0-\u05EA\u05EF-\u05F2\u0620-\u064A\u066E\u066F\u0671-\u06D3\u06D5\u06E5\u06E6\u06EE\u06EF\u06FA-\u06FC\u06FF\u0710\u0712-\u072F\u074D-\u07A5\u07B1\u07CA-\u07EA\u07F4\u07F5\u07FA\u0800-\u0815\u081A\u0824\u0828\u0840-\u0858\u0860-\u086A\u08A0-\u08B4\u08B6-\u08BD\u0904-\u0939\u093D\u0950\u0958-\u0961\u0971-\u0980\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BD\u09CE\u09DC\u09DD\u09DF-\u09E1\u09F0\u09F1\u09FC\u0A05-\u0A0A\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A59-\u0A5C\u0A5E\u0A72-\u0A74\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABD\u0AD0\u0AE0\u0AE1\u0AF9\u0B05-\u0B0C\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3D\u0B5C\u0B5D\u0B5F-\u0B61\u0B71\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BD0\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C39\u0C3D\u0C58-\u0C5A\u0C60\u0C61\u0C80\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBD\u0CDE\u0CE0\u0CE1\u0CF1\u0CF2\u0D05-\u0D0C\u0D0E-\u0D10\u0D12-\u0D3A\u0D3D\u0D4E\u0D54-\u0D56\u0D5F-\u0D61\u0D7A-\u0D7F\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0E01-\u0E30\u0E32\u0E33\u0E40-\u0E46\u0E81\u0E82\u0E84\u0E86-\u0E8A\u0E8C-\u0EA3\u0EA5\u0EA7-\u0EB0\u0EB2\u0EB3\u0EBD\u0EC0-\u0EC4\u0EC6\u0EDC-\u0EDF\u0F00\u0F40-\u0F47\u0F49-\u0F6C\u0F88-\u0F8C\u1000-\u102A\u103F\u1050-\u1055\u105A-\u105D\u1061\u1065\u1066\u106E-\u1070\u1075-\u1081\u108E\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310\u1312-\u1315\u1318-\u135A\u1380-\u138F\u13A0-\u13F5\u13F8-\u13FD\u1401-\u166C\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u16EE-\u16F8\u1700-\u170C\u170E-\u1711\u1720-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17D7\u17DC\u1820-\u1878\u1880-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191E\u1950-\u196D\u1970-\u1974\u1980-\u19AB\u19B0-\u19C9\u1A00-\u1A16\u1A20-\u1A54\u1AA7\u1B05-\u1B33\u1B45-\u1B4B\u1B83-\u1BA0\u1BAE\u1BAF\u1BBA-\u1BE5\u1C00-\u1C23\u1C4D-\u1C4F\u1C5A-\u1C7D\u1C80-\u1C88\u1C90-\u1CBA\u1CBD-\u1CBF\u1CE9-\u1CEC\u1CEE-\u1CF3\u1CF5\u1CF6\u1CFA\u1D00-\u1DBF\u1E00-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u2071\u207F\u2090-\u209C\u2102\u2107\u210A-\u2113\u2115\u2118-\u211D\u2124\u2126\u2128\u212A-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2160-\u2188\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CEE\u2CF2\u2CF3\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D80-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\u3005-\u3007\u3021-\u3029\u3031-\u3035\u3038-\u303C\u3041-\u3096\u309B-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312F\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FEF\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA61F\uA62A\uA62B\uA640-\uA66E\uA67F-\uA69D\uA6A0-\uA6EF\uA717-\uA71F\uA722-\uA788\uA78B-\uA7BF\uA7C2-\uA7C6\uA7F7-\uA801\uA803-\uA805\uA807-\uA80A\uA80C-\uA822\uA840-\uA873\uA882-\uA8B3\uA8F2-\uA8F7\uA8FB\uA8FD\uA8FE\uA90A-\uA925\uA930-\uA946\uA960-\uA97C\uA984-\uA9B2\uA9CF\uA9E0-\uA9E4\uA9E6-\uA9EF\uA9FA-\uA9FE\uAA00-\uAA28\uAA40-\uAA42\uAA44-\uAA4B\uAA60-\uAA76\uAA7A\uAA7E-\uAAAF\uAAB1\uAAB5\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB-\uAADD\uAAE0-\uAAEA\uAAF2-\uAAF4\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E\uAB30-\uAB5A\uAB5C-\uAB67\uAB70-\uABE2\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D\uFB1F-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE70-\uFE74\uFE76-\uFEFC\uFF21-\uFF3A\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC]|\uD800[\uDC00-\uDC0B\uDC0D-\uDC26\uDC28-\uDC3A\uDC3C\uDC3D\uDC3F-\uDC4D\uDC50-\uDC5D\uDC80-\uDCFA\uDD40-\uDD74\uDE80-\uDE9C\uDEA0-\uDED0\uDF00-\uDF1F\uDF2D-\uDF4A\uDF50-\uDF75\uDF80-\uDF9D\uDFA0-\uDFC3\uDFC8-\uDFCF\uDFD1-\uDFD5]|\uD801[\uDC00-\uDC9D\uDCB0-\uDCD3\uDCD8-\uDCFB\uDD00-\uDD27\uDD30-\uDD63\uDE00-\uDF36\uDF40-\uDF55\uDF60-\uDF67]|\uD802[\uDC00-\uDC05\uDC08\uDC0A-\uDC35\uDC37\uDC38\uDC3C\uDC3F-\uDC55\uDC60-\uDC76\uDC80-\uDC9E\uDCE0-\uDCF2\uDCF4\uDCF5\uDD00-\uDD15\uDD20-\uDD39\uDD80-\uDDB7\uDDBE\uDDBF\uDE00\uDE10-\uDE13\uDE15-\uDE17\uDE19-\uDE35\uDE60-\uDE7C\uDE80-\uDE9C\uDEC0-\uDEC7\uDEC9-\uDEE4\uDF00-\uDF35\uDF40-\uDF55\uDF60-\uDF72\uDF80-\uDF91]|\uD803[\uDC00-\uDC48\uDC80-\uDCB2\uDCC0-\uDCF2\uDD00-\uDD23\uDF00-\uDF1C\uDF27\uDF30-\uDF45\uDFE0-\uDFF6]|\uD804[\uDC03-\uDC37\uDC83-\uDCAF\uDCD0-\uDCE8\uDD03-\uDD26\uDD44\uDD50-\uDD72\uDD76\uDD83-\uDDB2\uDDC1-\uDDC4\uDDDA\uDDDC\uDE00-\uDE11\uDE13-\uDE2B\uDE80-\uDE86\uDE88\uDE8A-\uDE8D\uDE8F-\uDE9D\uDE9F-\uDEA8\uDEB0-\uDEDE\uDF05-\uDF0C\uDF0F\uDF10\uDF13-\uDF28\uDF2A-\uDF30\uDF32\uDF33\uDF35-\uDF39\uDF3D\uDF50\uDF5D-\uDF61]|\uD805[\uDC00-\uDC34\uDC47-\uDC4A\uDC5F\uDC80-\uDCAF\uDCC4\uDCC5\uDCC7\uDD80-\uDDAE\uDDD8-\uDDDB\uDE00-\uDE2F\uDE44\uDE80-\uDEAA\uDEB8\uDF00-\uDF1A]|\uD806[\uDC00-\uDC2B\uDCA0-\uDCDF\uDCFF\uDDA0-\uDDA7\uDDAA-\uDDD0\uDDE1\uDDE3\uDE00\uDE0B-\uDE32\uDE3A\uDE50\uDE5C-\uDE89\uDE9D\uDEC0-\uDEF8]|\uD807[\uDC00-\uDC08\uDC0A-\uDC2E\uDC40\uDC72-\uDC8F\uDD00-\uDD06\uDD08\uDD09\uDD0B-\uDD30\uDD46\uDD60-\uDD65\uDD67\uDD68\uDD6A-\uDD89\uDD98\uDEE0-\uDEF2]|\uD808[\uDC00-\uDF99]|\uD809[\uDC00-\uDC6E\uDC80-\uDD43]|[\uD80C\uD81C-\uD820\uD840-\uD868\uD86A-\uD86C\uD86F-\uD872\uD874-\uD879][\uDC00-\uDFFF]|\uD80D[\uDC00-\uDC2E]|\uD811[\uDC00-\uDE46]|\uD81A[\uDC00-\uDE38\uDE40-\uDE5E\uDED0-\uDEED\uDF00-\uDF2F\uDF40-\uDF43\uDF63-\uDF77\uDF7D-\uDF8F]|\uD81B[\uDE40-\uDE7F\uDF00-\uDF4A\uDF50\uDF93-\uDF9F\uDFE0\uDFE1\uDFE3]|\uD821[\uDC00-\uDFF7]|\uD822[\uDC00-\uDEF2]|\uD82C[\uDC00-\uDD1E\uDD50-\uDD52\uDD64-\uDD67\uDD70-\uDEFB]|\uD82F[\uDC00-\uDC6A\uDC70-\uDC7C\uDC80-\uDC88\uDC90-\uDC99]|\uD835[\uDC00-\uDC54\uDC56-\uDC9C\uDC9E\uDC9F\uDCA2\uDCA5\uDCA6\uDCA9-\uDCAC\uDCAE-\uDCB9\uDCBB\uDCBD-\uDCC3\uDCC5-\uDD05\uDD07-\uDD0A\uDD0D-\uDD14\uDD16-\uDD1C\uDD1E-\uDD39\uDD3B-\uDD3E\uDD40-\uDD44\uDD46\uDD4A-\uDD50\uDD52-\uDEA5\uDEA8-\uDEC0\uDEC2-\uDEDA\uDEDC-\uDEFA\uDEFC-\uDF14\uDF16-\uDF34\uDF36-\uDF4E\uDF50-\uDF6E\uDF70-\uDF88\uDF8A-\uDFA8\uDFAA-\uDFC2\uDFC4-\uDFCB]|\uD838[\uDD00-\uDD2C\uDD37-\uDD3D\uDD4E\uDEC0-\uDEEB]|\uD83A[\uDC00-\uDCC4\uDD00-\uDD43\uDD4B]|\uD83B[\uDE00-\uDE03\uDE05-\uDE1F\uDE21\uDE22\uDE24\uDE27\uDE29-\uDE32\uDE34-\uDE37\uDE39\uDE3B\uDE42\uDE47\uDE49\uDE4B\uDE4D-\uDE4F\uDE51\uDE52\uDE54\uDE57\uDE59\uDE5B\uDE5D\uDE5F\uDE61\uDE62\uDE64\uDE67-\uDE6A\uDE6C-\uDE72\uDE74-\uDE77\uDE79-\uDE7C\uDE7E\uDE80-\uDE89\uDE8B-\uDE9B\uDEA1-\uDEA3\uDEA5-\uDEA9\uDEAB-\uDEBB]|\uD869[\uDC00-\uDED6\uDF00-\uDFFF]|\uD86D[\uDC00-\uDF34\uDF40-\uDFFF]|\uD86E[\uDC00-\uDC1D\uDC20-\uDFFF]|\uD873[\uDC00-\uDEA1\uDEB0-\uDFFF]|\uD87A[\uDC00-\uDFE0]|\uD87E[\uDC00-\uDE1D]/,
+        // Unicode v12.1.0 NonAsciiIdentifierPart:
+        NonAsciiIdentifierPart: /[\xAA\xB5\xB7\xBA\xC0-\xD6\xD8-\xF6\xF8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0300-\u0374\u0376\u0377\u037A-\u037D\u037F\u0386-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5\u03F7-\u0481\u0483-\u0487\u048A-\u052F\u0531-\u0556\u0559\u0560-\u0588\u0591-\u05BD\u05BF\u05C1\u05C2\u05C4\u05C5\u05C7\u05D0-\u05EA\u05EF-\u05F2\u0610-\u061A\u0620-\u0669\u066E-\u06D3\u06D5-\u06DC\u06DF-\u06E8\u06EA-\u06FC\u06FF\u0710-\u074A\u074D-\u07B1\u07C0-\u07F5\u07FA\u07FD\u0800-\u082D\u0840-\u085B\u0860-\u086A\u08A0-\u08B4\u08B6-\u08BD\u08D3-\u08E1\u08E3-\u0963\u0966-\u096F\u0971-\u0983\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BC-\u09C4\u09C7\u09C8\u09CB-\u09CE\u09D7\u09DC\u09DD\u09DF-\u09E3\u09E6-\u09F1\u09FC\u09FE\u0A01-\u0A03\u0A05-\u0A0A\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A3C\u0A3E-\u0A42\u0A47\u0A48\u0A4B-\u0A4D\u0A51\u0A59-\u0A5C\u0A5E\u0A66-\u0A75\u0A81-\u0A83\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABC-\u0AC5\u0AC7-\u0AC9\u0ACB-\u0ACD\u0AD0\u0AE0-\u0AE3\u0AE6-\u0AEF\u0AF9-\u0AFF\u0B01-\u0B03\u0B05-\u0B0C\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3C-\u0B44\u0B47\u0B48\u0B4B-\u0B4D\u0B56\u0B57\u0B5C\u0B5D\u0B5F-\u0B63\u0B66-\u0B6F\u0B71\u0B82\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BBE-\u0BC2\u0BC6-\u0BC8\u0BCA-\u0BCD\u0BD0\u0BD7\u0BE6-\u0BEF\u0C00-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C39\u0C3D-\u0C44\u0C46-\u0C48\u0C4A-\u0C4D\u0C55\u0C56\u0C58-\u0C5A\u0C60-\u0C63\u0C66-\u0C6F\u0C80-\u0C83\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBC-\u0CC4\u0CC6-\u0CC8\u0CCA-\u0CCD\u0CD5\u0CD6\u0CDE\u0CE0-\u0CE3\u0CE6-\u0CEF\u0CF1\u0CF2\u0D00-\u0D03\u0D05-\u0D0C\u0D0E-\u0D10\u0D12-\u0D44\u0D46-\u0D48\u0D4A-\u0D4E\u0D54-\u0D57\u0D5F-\u0D63\u0D66-\u0D6F\u0D7A-\u0D7F\u0D82\u0D83\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0DCA\u0DCF-\u0DD4\u0DD6\u0DD8-\u0DDF\u0DE6-\u0DEF\u0DF2\u0DF3\u0E01-\u0E3A\u0E40-\u0E4E\u0E50-\u0E59\u0E81\u0E82\u0E84\u0E86-\u0E8A\u0E8C-\u0EA3\u0EA5\u0EA7-\u0EBD\u0EC0-\u0EC4\u0EC6\u0EC8-\u0ECD\u0ED0-\u0ED9\u0EDC-\u0EDF\u0F00\u0F18\u0F19\u0F20-\u0F29\u0F35\u0F37\u0F39\u0F3E-\u0F47\u0F49-\u0F6C\u0F71-\u0F84\u0F86-\u0F97\u0F99-\u0FBC\u0FC6\u1000-\u1049\u1050-\u109D\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310\u1312-\u1315\u1318-\u135A\u135D-\u135F\u1369-\u1371\u1380-\u138F\u13A0-\u13F5\u13F8-\u13FD\u1401-\u166C\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u16EE-\u16F8\u1700-\u170C\u170E-\u1714\u1720-\u1734\u1740-\u1753\u1760-\u176C\u176E-\u1770\u1772\u1773\u1780-\u17D3\u17D7\u17DC\u17DD\u17E0-\u17E9\u180B-\u180D\u1810-\u1819\u1820-\u1878\u1880-\u18AA\u18B0-\u18F5\u1900-\u191E\u1920-\u192B\u1930-\u193B\u1946-\u196D\u1970-\u1974\u1980-\u19AB\u19B0-\u19C9\u19D0-\u19DA\u1A00-\u1A1B\u1A20-\u1A5E\u1A60-\u1A7C\u1A7F-\u1A89\u1A90-\u1A99\u1AA7\u1AB0-\u1ABD\u1B00-\u1B4B\u1B50-\u1B59\u1B6B-\u1B73\u1B80-\u1BF3\u1C00-\u1C37\u1C40-\u1C49\u1C4D-\u1C7D\u1C80-\u1C88\u1C90-\u1CBA\u1CBD-\u1CBF\u1CD0-\u1CD2\u1CD4-\u1CFA\u1D00-\u1DF9\u1DFB-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u200C\u200D\u203F\u2040\u2054\u2071\u207F\u2090-\u209C\u20D0-\u20DC\u20E1\u20E5-\u20F0\u2102\u2107\u210A-\u2113\u2115\u2118-\u211D\u2124\u2126\u2128\u212A-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2160-\u2188\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CF3\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D7F-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\u2DE0-\u2DFF\u3005-\u3007\u3021-\u302F\u3031-\u3035\u3038-\u303C\u3041-\u3096\u3099-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312F\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FEF\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA62B\uA640-\uA66F\uA674-\uA67D\uA67F-\uA6F1\uA717-\uA71F\uA722-\uA788\uA78B-\uA7BF\uA7C2-\uA7C6\uA7F7-\uA827\uA840-\uA873\uA880-\uA8C5\uA8D0-\uA8D9\uA8E0-\uA8F7\uA8FB\uA8FD-\uA92D\uA930-\uA953\uA960-\uA97C\uA980-\uA9C0\uA9CF-\uA9D9\uA9E0-\uA9FE\uAA00-\uAA36\uAA40-\uAA4D\uAA50-\uAA59\uAA60-\uAA76\uAA7A-\uAAC2\uAADB-\uAADD\uAAE0-\uAAEF\uAAF2-\uAAF6\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E\uAB30-\uAB5A\uAB5C-\uAB67\uAB70-\uABEA\uABEC\uABED\uABF0-\uABF9\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE00-\uFE0F\uFE20-\uFE2F\uFE33\uFE34\uFE4D-\uFE4F\uFE70-\uFE74\uFE76-\uFEFC\uFF10-\uFF19\uFF21-\uFF3A\uFF3F\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC]|\uD800[\uDC00-\uDC0B\uDC0D-\uDC26\uDC28-\uDC3A\uDC3C\uDC3D\uDC3F-\uDC4D\uDC50-\uDC5D\uDC80-\uDCFA\uDD40-\uDD74\uDDFD\uDE80-\uDE9C\uDEA0-\uDED0\uDEE0\uDF00-\uDF1F\uDF2D-\uDF4A\uDF50-\uDF7A\uDF80-\uDF9D\uDFA0-\uDFC3\uDFC8-\uDFCF\uDFD1-\uDFD5]|\uD801[\uDC00-\uDC9D\uDCA0-\uDCA9\uDCB0-\uDCD3\uDCD8-\uDCFB\uDD00-\uDD27\uDD30-\uDD63\uDE00-\uDF36\uDF40-\uDF55\uDF60-\uDF67]|\uD802[\uDC00-\uDC05\uDC08\uDC0A-\uDC35\uDC37\uDC38\uDC3C\uDC3F-\uDC55\uDC60-\uDC76\uDC80-\uDC9E\uDCE0-\uDCF2\uDCF4\uDCF5\uDD00-\uDD15\uDD20-\uDD39\uDD80-\uDDB7\uDDBE\uDDBF\uDE00-\uDE03\uDE05\uDE06\uDE0C-\uDE13\uDE15-\uDE17\uDE19-\uDE35\uDE38-\uDE3A\uDE3F\uDE60-\uDE7C\uDE80-\uDE9C\uDEC0-\uDEC7\uDEC9-\uDEE6\uDF00-\uDF35\uDF40-\uDF55\uDF60-\uDF72\uDF80-\uDF91]|\uD803[\uDC00-\uDC48\uDC80-\uDCB2\uDCC0-\uDCF2\uDD00-\uDD27\uDD30-\uDD39\uDF00-\uDF1C\uDF27\uDF30-\uDF50\uDFE0-\uDFF6]|\uD804[\uDC00-\uDC46\uDC66-\uDC6F\uDC7F-\uDCBA\uDCD0-\uDCE8\uDCF0-\uDCF9\uDD00-\uDD34\uDD36-\uDD3F\uDD44-\uDD46\uDD50-\uDD73\uDD76\uDD80-\uDDC4\uDDC9-\uDDCC\uDDD0-\uDDDA\uDDDC\uDE00-\uDE11\uDE13-\uDE37\uDE3E\uDE80-\uDE86\uDE88\uDE8A-\uDE8D\uDE8F-\uDE9D\uDE9F-\uDEA8\uDEB0-\uDEEA\uDEF0-\uDEF9\uDF00-\uDF03\uDF05-\uDF0C\uDF0F\uDF10\uDF13-\uDF28\uDF2A-\uDF30\uDF32\uDF33\uDF35-\uDF39\uDF3B-\uDF44\uDF47\uDF48\uDF4B-\uDF4D\uDF50\uDF57\uDF5D-\uDF63\uDF66-\uDF6C\uDF70-\uDF74]|\uD805[\uDC00-\uDC4A\uDC50-\uDC59\uDC5E\uDC5F\uDC80-\uDCC5\uDCC7\uDCD0-\uDCD9\uDD80-\uDDB5\uDDB8-\uDDC0\uDDD8-\uDDDD\uDE00-\uDE40\uDE44\uDE50-\uDE59\uDE80-\uDEB8\uDEC0-\uDEC9\uDF00-\uDF1A\uDF1D-\uDF2B\uDF30-\uDF39]|\uD806[\uDC00-\uDC3A\uDCA0-\uDCE9\uDCFF\uDDA0-\uDDA7\uDDAA-\uDDD7\uDDDA-\uDDE1\uDDE3\uDDE4\uDE00-\uDE3E\uDE47\uDE50-\uDE99\uDE9D\uDEC0-\uDEF8]|\uD807[\uDC00-\uDC08\uDC0A-\uDC36\uDC38-\uDC40\uDC50-\uDC59\uDC72-\uDC8F\uDC92-\uDCA7\uDCA9-\uDCB6\uDD00-\uDD06\uDD08\uDD09\uDD0B-\uDD36\uDD3A\uDD3C\uDD3D\uDD3F-\uDD47\uDD50-\uDD59\uDD60-\uDD65\uDD67\uDD68\uDD6A-\uDD8E\uDD90\uDD91\uDD93-\uDD98\uDDA0-\uDDA9\uDEE0-\uDEF6]|\uD808[\uDC00-\uDF99]|\uD809[\uDC00-\uDC6E\uDC80-\uDD43]|[\uD80C\uD81C-\uD820\uD840-\uD868\uD86A-\uD86C\uD86F-\uD872\uD874-\uD879][\uDC00-\uDFFF]|\uD80D[\uDC00-\uDC2E]|\uD811[\uDC00-\uDE46]|\uD81A[\uDC00-\uDE38\uDE40-\uDE5E\uDE60-\uDE69\uDED0-\uDEED\uDEF0-\uDEF4\uDF00-\uDF36\uDF40-\uDF43\uDF50-\uDF59\uDF63-\uDF77\uDF7D-\uDF8F]|\uD81B[\uDE40-\uDE7F\uDF00-\uDF4A\uDF4F-\uDF87\uDF8F-\uDF9F\uDFE0\uDFE1\uDFE3]|\uD821[\uDC00-\uDFF7]|\uD822[\uDC00-\uDEF2]|\uD82C[\uDC00-\uDD1E\uDD50-\uDD52\uDD64-\uDD67\uDD70-\uDEFB]|\uD82F[\uDC00-\uDC6A\uDC70-\uDC7C\uDC80-\uDC88\uDC90-\uDC99\uDC9D\uDC9E]|\uD834[\uDD65-\uDD69\uDD6D-\uDD72\uDD7B-\uDD82\uDD85-\uDD8B\uDDAA-\uDDAD\uDE42-\uDE44]|\uD835[\uDC00-\uDC54\uDC56-\uDC9C\uDC9E\uDC9F\uDCA2\uDCA5\uDCA6\uDCA9-\uDCAC\uDCAE-\uDCB9\uDCBB\uDCBD-\uDCC3\uDCC5-\uDD05\uDD07-\uDD0A\uDD0D-\uDD14\uDD16-\uDD1C\uDD1E-\uDD39\uDD3B-\uDD3E\uDD40-\uDD44\uDD46\uDD4A-\uDD50\uDD52-\uDEA5\uDEA8-\uDEC0\uDEC2-\uDEDA\uDEDC-\uDEFA\uDEFC-\uDF14\uDF16-\uDF34\uDF36-\uDF4E\uDF50-\uDF6E\uDF70-\uDF88\uDF8A-\uDFA8\uDFAA-\uDFC2\uDFC4-\uDFCB\uDFCE-\uDFFF]|\uD836[\uDE00-\uDE36\uDE3B-\uDE6C\uDE75\uDE84\uDE9B-\uDE9F\uDEA1-\uDEAF]|\uD838[\uDC00-\uDC06\uDC08-\uDC18\uDC1B-\uDC21\uDC23\uDC24\uDC26-\uDC2A\uDD00-\uDD2C\uDD30-\uDD3D\uDD40-\uDD49\uDD4E\uDEC0-\uDEF9]|\uD83A[\uDC00-\uDCC4\uDCD0-\uDCD6\uDD00-\uDD4B\uDD50-\uDD59]|\uD83B[\uDE00-\uDE03\uDE05-\uDE1F\uDE21\uDE22\uDE24\uDE27\uDE29-\uDE32\uDE34-\uDE37\uDE39\uDE3B\uDE42\uDE47\uDE49\uDE4B\uDE4D-\uDE4F\uDE51\uDE52\uDE54\uDE57\uDE59\uDE5B\uDE5D\uDE5F\uDE61\uDE62\uDE64\uDE67-\uDE6A\uDE6C-\uDE72\uDE74-\uDE77\uDE79-\uDE7C\uDE7E\uDE80-\uDE89\uDE8B-\uDE9B\uDEA1-\uDEA3\uDEA5-\uDEA9\uDEAB-\uDEBB]|\uD869[\uDC00-\uDED6\uDF00-\uDFFF]|\uD86D[\uDC00-\uDF34\uDF40-\uDFFF]|\uD86E[\uDC00-\uDC1D\uDC20-\uDFFF]|\uD873[\uDC00-\uDEA1\uDEB0-\uDFFF]|\uD87A[\uDC00-\uDFE0]|\uD87E[\uDC00-\uDE1D]|\uDB40[\uDD00-\uDDEF]/
     };
     exports.Character = {
         /* tslint:disable:no-bitwise */
@@ -972,18 +986,18 @@ return /******/ (function(modules) { // webpackBootstrap
         },
         // https://tc39.github.io/ecma262/#sec-names-and-keywords
         isIdentifierStart: function (cp) {
-            return (cp === 0x24) || (cp === 0x5F) ||
-                (cp >= 0x41 && cp <= 0x5A) ||
-                (cp >= 0x61 && cp <= 0x7A) ||
-                (cp === 0x5C) ||
+            return (cp === 0x24) || (cp === 0x5F) || // $ (dollar) and _ (underscore)
+                (cp >= 0x41 && cp <= 0x5A) || // A..Z
+                (cp >= 0x61 && cp <= 0x7A) || // a..z
+                (cp === 0x5C) || // \ (backslash)
                 ((cp >= 0x80) && Regex.NonAsciiIdentifierStart.test(exports.Character.fromCodePoint(cp)));
         },
         isIdentifierPart: function (cp) {
-            return (cp === 0x24) || (cp === 0x5F) ||
-                (cp >= 0x41 && cp <= 0x5A) ||
-                (cp >= 0x61 && cp <= 0x7A) ||
-                (cp >= 0x30 && cp <= 0x39) ||
-                (cp === 0x5C) ||
+            return (cp === 0x24) || (cp === 0x5F) || // $ (dollar) and _ (underscore)
+                (cp >= 0x41 && cp <= 0x5A) || // A..Z
+                (cp >= 0x61 && cp <= 0x7A) || // a..z
+                (cp >= 0x30 && cp <= 0x39) || // 0..9
+                (cp === 0x5C) || // \ (backslash)
                 ((cp >= 0x80) && Regex.NonAsciiIdentifierPart.test(exports.Character.fromCodePoint(cp)));
         },
         // https://tc39.github.io/ecma262/#sec-literals-numeric-literals
@@ -991,8 +1005,8 @@ return /******/ (function(modules) { // webpackBootstrap
             return (cp >= 0x30 && cp <= 0x39); // 0..9
         },
         isHexDigit: function (cp) {
-            return (cp >= 0x30 && cp <= 0x39) ||
-                (cp >= 0x41 && cp <= 0x46) ||
+            return (cp >= 0x30 && cp <= 0x39) || // 0..9
+                (cp >= 0x41 && cp <= 0x46) || // A..F
                 (cp >= 0x61 && cp <= 0x66); // a..f
         },
         isOctalDigit: function (cp) {
@@ -1006,9 +1020,10 @@ return /******/ (function(modules) { // webpackBootstrap
 /***/ function(module, exports, __webpack_require__) {
 
     "use strict";
+    Object.defineProperty(exports, "__esModule", { value: true });
     var jsx_syntax_1 = __webpack_require__(6);
     /* tslint:disable:max-classes-per-file */
-    var JSXClosingElement = (function () {
+    var JSXClosingElement = /** @class */ (function () {
         function JSXClosingElement(name) {
             this.type = jsx_syntax_1.JSXSyntax.JSXClosingElement;
             this.name = name;
@@ -1016,7 +1031,7 @@ return /******/ (function(modules) { // webpackBootstrap
         return JSXClosingElement;
     }());
     exports.JSXClosingElement = JSXClosingElement;
-    var JSXElement = (function () {
+    var JSXElement = /** @class */ (function () {
         function JSXElement(openingElement, children, closingElement) {
             this.type = jsx_syntax_1.JSXSyntax.JSXElement;
             this.openingElement = openingElement;
@@ -1026,14 +1041,14 @@ return /******/ (function(modules) { // webpackBootstrap
         return JSXElement;
     }());
     exports.JSXElement = JSXElement;
-    var JSXEmptyExpression = (function () {
+    var JSXEmptyExpression = /** @class */ (function () {
         function JSXEmptyExpression() {
             this.type = jsx_syntax_1.JSXSyntax.JSXEmptyExpression;
         }
         return JSXEmptyExpression;
     }());
     exports.JSXEmptyExpression = JSXEmptyExpression;
-    var JSXExpressionContainer = (function () {
+    var JSXExpressionContainer = /** @class */ (function () {
         function JSXExpressionContainer(expression) {
             this.type = jsx_syntax_1.JSXSyntax.JSXExpressionContainer;
             this.expression = expression;
@@ -1041,7 +1056,7 @@ return /******/ (function(modules) { // webpackBootstrap
         return JSXExpressionContainer;
     }());
     exports.JSXExpressionContainer = JSXExpressionContainer;
-    var JSXIdentifier = (function () {
+    var JSXIdentifier = /** @class */ (function () {
         function JSXIdentifier(name) {
             this.type = jsx_syntax_1.JSXSyntax.JSXIdentifier;
             this.name = name;
@@ -1049,7 +1064,7 @@ return /******/ (function(modules) { // webpackBootstrap
         return JSXIdentifier;
     }());
     exports.JSXIdentifier = JSXIdentifier;
-    var JSXMemberExpression = (function () {
+    var JSXMemberExpression = /** @class */ (function () {
         function JSXMemberExpression(object, property) {
             this.type = jsx_syntax_1.JSXSyntax.JSXMemberExpression;
             this.object = object;
@@ -1058,7 +1073,7 @@ return /******/ (function(modules) { // webpackBootstrap
         return JSXMemberExpression;
     }());
     exports.JSXMemberExpression = JSXMemberExpression;
-    var JSXAttribute = (function () {
+    var JSXAttribute = /** @class */ (function () {
         function JSXAttribute(name, value) {
             this.type = jsx_syntax_1.JSXSyntax.JSXAttribute;
             this.name = name;
@@ -1067,7 +1082,7 @@ return /******/ (function(modules) { // webpackBootstrap
         return JSXAttribute;
     }());
     exports.JSXAttribute = JSXAttribute;
-    var JSXNamespacedName = (function () {
+    var JSXNamespacedName = /** @class */ (function () {
         function JSXNamespacedName(namespace, name) {
             this.type = jsx_syntax_1.JSXSyntax.JSXNamespacedName;
             this.namespace = namespace;
@@ -1076,7 +1091,7 @@ return /******/ (function(modules) { // webpackBootstrap
         return JSXNamespacedName;
     }());
     exports.JSXNamespacedName = JSXNamespacedName;
-    var JSXOpeningElement = (function () {
+    var JSXOpeningElement = /** @class */ (function () {
         function JSXOpeningElement(name, selfClosing, attributes) {
             this.type = jsx_syntax_1.JSXSyntax.JSXOpeningElement;
             this.name = name;
@@ -1086,7 +1101,7 @@ return /******/ (function(modules) { // webpackBootstrap
         return JSXOpeningElement;
     }());
     exports.JSXOpeningElement = JSXOpeningElement;
-    var JSXSpreadAttribute = (function () {
+    var JSXSpreadAttribute = /** @class */ (function () {
         function JSXSpreadAttribute(argument) {
             this.type = jsx_syntax_1.JSXSyntax.JSXSpreadAttribute;
             this.argument = argument;
@@ -1094,7 +1109,7 @@ return /******/ (function(modules) { // webpackBootstrap
         return JSXSpreadAttribute;
     }());
     exports.JSXSpreadAttribute = JSXSpreadAttribute;
-    var JSXText = (function () {
+    var JSXText = /** @class */ (function () {
         function JSXText(value, raw) {
             this.type = jsx_syntax_1.JSXSyntax.JSXText;
             this.value = value;
@@ -1110,6 +1125,7 @@ return /******/ (function(modules) { // webpackBootstrap
 /***/ function(module, exports) {
 
     "use strict";
+    Object.defineProperty(exports, "__esModule", { value: true });
     exports.JSXSyntax = {
         JSXAttribute: 'JSXAttribute',
         JSXClosingElement: 'JSXClosingElement',
@@ -1130,9 +1146,10 @@ return /******/ (function(modules) { // webpackBootstrap
 /***/ function(module, exports, __webpack_require__) {
 
     "use strict";
+    Object.defineProperty(exports, "__esModule", { value: true });
     var syntax_1 = __webpack_require__(2);
     /* tslint:disable:max-classes-per-file */
-    var ArrayExpression = (function () {
+    var ArrayExpression = /** @class */ (function () {
         function ArrayExpression(elements) {
             this.type = syntax_1.Syntax.ArrayExpression;
             this.elements = elements;
@@ -1140,7 +1157,7 @@ return /******/ (function(modules) { // webpackBootstrap
         return ArrayExpression;
     }());
     exports.ArrayExpression = ArrayExpression;
-    var ArrayPattern = (function () {
+    var ArrayPattern = /** @class */ (function () {
         function ArrayPattern(elements) {
             this.type = syntax_1.Syntax.ArrayPattern;
             this.elements = elements;
@@ -1148,7 +1165,7 @@ return /******/ (function(modules) { // webpackBootstrap
         return ArrayPattern;
     }());
     exports.ArrayPattern = ArrayPattern;
-    var ArrowFunctionExpression = (function () {
+    var ArrowFunctionExpression = /** @class */ (function () {
         function ArrowFunctionExpression(params, body, expression) {
             this.type = syntax_1.Syntax.ArrowFunctionExpression;
             this.id = null;
@@ -1161,7 +1178,7 @@ return /******/ (function(modules) { // webpackBootstrap
         return ArrowFunctionExpression;
     }());
     exports.ArrowFunctionExpression = ArrowFunctionExpression;
-    var AssignmentExpression = (function () {
+    var AssignmentExpression = /** @class */ (function () {
         function AssignmentExpression(operator, left, right) {
             this.type = syntax_1.Syntax.AssignmentExpression;
             this.operator = operator;
@@ -1171,7 +1188,7 @@ return /******/ (function(modules) { // webpackBootstrap
         return AssignmentExpression;
     }());
     exports.AssignmentExpression = AssignmentExpression;
-    var AssignmentPattern = (function () {
+    var AssignmentPattern = /** @class */ (function () {
         function AssignmentPattern(left, right) {
             this.type = syntax_1.Syntax.AssignmentPattern;
             this.left = left;
@@ -1180,7 +1197,7 @@ return /******/ (function(modules) { // webpackBootstrap
         return AssignmentPattern;
     }());
     exports.AssignmentPattern = AssignmentPattern;
-    var AsyncArrowFunctionExpression = (function () {
+    var AsyncArrowFunctionExpression = /** @class */ (function () {
         function AsyncArrowFunctionExpression(params, body, expression) {
             this.type = syntax_1.Syntax.ArrowFunctionExpression;
             this.id = null;
@@ -1193,7 +1210,7 @@ return /******/ (function(modules) { // webpackBootstrap
         return AsyncArrowFunctionExpression;
     }());
     exports.AsyncArrowFunctionExpression = AsyncArrowFunctionExpression;
-    var AsyncFunctionDeclaration = (function () {
+    var AsyncFunctionDeclaration = /** @class */ (function () {
         function AsyncFunctionDeclaration(id, params, body) {
             this.type = syntax_1.Syntax.FunctionDeclaration;
             this.id = id;
@@ -1206,7 +1223,7 @@ return /******/ (function(modules) { // webpackBootstrap
         return AsyncFunctionDeclaration;
     }());
     exports.AsyncFunctionDeclaration = AsyncFunctionDeclaration;
-    var AsyncFunctionExpression = (function () {
+    var AsyncFunctionExpression = /** @class */ (function () {
         function AsyncFunctionExpression(id, params, body) {
             this.type = syntax_1.Syntax.FunctionExpression;
             this.id = id;
@@ -1219,7 +1236,7 @@ return /******/ (function(modules) { // webpackBootstrap
         return AsyncFunctionExpression;
     }());
     exports.AsyncFunctionExpression = AsyncFunctionExpression;
-    var AwaitExpression = (function () {
+    var AwaitExpression = /** @class */ (function () {
         function AwaitExpression(argument) {
             this.type = syntax_1.Syntax.AwaitExpression;
             this.argument = argument;
@@ -1227,7 +1244,7 @@ return /******/ (function(modules) { // webpackBootstrap
         return AwaitExpression;
     }());
     exports.AwaitExpression = AwaitExpression;
-    var BinaryExpression = (function () {
+    var BinaryExpression = /** @class */ (function () {
         function BinaryExpression(operator, left, right) {
             var logical = (operator === '||' || operator === '&&');
             this.type = logical ? syntax_1.Syntax.LogicalExpression : syntax_1.Syntax.BinaryExpression;
@@ -1238,7 +1255,7 @@ return /******/ (function(modules) { // webpackBootstrap
         return BinaryExpression;
     }());
     exports.BinaryExpression = BinaryExpression;
-    var BlockStatement = (function () {
+    var BlockStatement = /** @class */ (function () {
         function BlockStatement(body) {
             this.type = syntax_1.Syntax.BlockStatement;
             this.body = body;
@@ -1246,7 +1263,7 @@ return /******/ (function(modules) { // webpackBootstrap
         return BlockStatement;
     }());
     exports.BlockStatement = BlockStatement;
-    var BreakStatement = (function () {
+    var BreakStatement = /** @class */ (function () {
         function BreakStatement(label) {
             this.type = syntax_1.Syntax.BreakStatement;
             this.label = label;
@@ -1254,7 +1271,7 @@ return /******/ (function(modules) { // webpackBootstrap
         return BreakStatement;
     }());
     exports.BreakStatement = BreakStatement;
-    var CallExpression = (function () {
+    var CallExpression = /** @class */ (function () {
         function CallExpression(callee, args) {
             this.type = syntax_1.Syntax.CallExpression;
             this.callee = callee;
@@ -1263,7 +1280,7 @@ return /******/ (function(modules) { // webpackBootstrap
         return CallExpression;
     }());
     exports.CallExpression = CallExpression;
-    var CatchClause = (function () {
+    var CatchClause = /** @class */ (function () {
         function CatchClause(param, body) {
             this.type = syntax_1.Syntax.CatchClause;
             this.param = param;
@@ -1272,7 +1289,7 @@ return /******/ (function(modules) { // webpackBootstrap
         return CatchClause;
     }());
     exports.CatchClause = CatchClause;
-    var ClassBody = (function () {
+    var ClassBody = /** @class */ (function () {
         function ClassBody(body) {
             this.type = syntax_1.Syntax.ClassBody;
             this.body = body;
@@ -1280,7 +1297,7 @@ return /******/ (function(modules) { // webpackBootstrap
         return ClassBody;
     }());
     exports.ClassBody = ClassBody;
-    var ClassDeclaration = (function () {
+    var ClassDeclaration = /** @class */ (function () {
         function ClassDeclaration(id, superClass, body) {
             this.type = syntax_1.Syntax.ClassDeclaration;
             this.id = id;
@@ -1290,7 +1307,7 @@ return /******/ (function(modules) { // webpackBootstrap
         return ClassDeclaration;
     }());
     exports.ClassDeclaration = ClassDeclaration;
-    var ClassExpression = (function () {
+    var ClassExpression = /** @class */ (function () {
         function ClassExpression(id, superClass, body) {
             this.type = syntax_1.Syntax.ClassExpression;
             this.id = id;
@@ -1300,7 +1317,7 @@ return /******/ (function(modules) { // webpackBootstrap
         return ClassExpression;
     }());
     exports.ClassExpression = ClassExpression;
-    var ComputedMemberExpression = (function () {
+    var ComputedMemberExpression = /** @class */ (function () {
         function ComputedMemberExpression(object, property) {
             this.type = syntax_1.Syntax.MemberExpression;
             this.computed = true;
@@ -1310,7 +1327,7 @@ return /******/ (function(modules) { // webpackBootstrap
         return ComputedMemberExpression;
     }());
     exports.ComputedMemberExpression = ComputedMemberExpression;
-    var ConditionalExpression = (function () {
+    var ConditionalExpression = /** @class */ (function () {
         function ConditionalExpression(test, consequent, alternate) {
             this.type = syntax_1.Syntax.ConditionalExpression;
             this.test = test;
@@ -1320,7 +1337,7 @@ return /******/ (function(modules) { // webpackBootstrap
         return ConditionalExpression;
     }());
     exports.ConditionalExpression = ConditionalExpression;
-    var ContinueStatement = (function () {
+    var ContinueStatement = /** @class */ (function () {
         function ContinueStatement(label) {
             this.type = syntax_1.Syntax.ContinueStatement;
             this.label = label;
@@ -1328,14 +1345,14 @@ return /******/ (function(modules) { // webpackBootstrap
         return ContinueStatement;
     }());
     exports.ContinueStatement = ContinueStatement;
-    var DebuggerStatement = (function () {
+    var DebuggerStatement = /** @class */ (function () {
         function DebuggerStatement() {
             this.type = syntax_1.Syntax.DebuggerStatement;
         }
         return DebuggerStatement;
     }());
     exports.DebuggerStatement = DebuggerStatement;
-    var Directive = (function () {
+    var Directive = /** @class */ (function () {
         function Directive(expression, directive) {
             this.type = syntax_1.Syntax.ExpressionStatement;
             this.expression = expression;
@@ -1344,7 +1361,7 @@ return /******/ (function(modules) { // webpackBootstrap
         return Directive;
     }());
     exports.Directive = Directive;
-    var DoWhileStatement = (function () {
+    var DoWhileStatement = /** @class */ (function () {
         function DoWhileStatement(body, test) {
             this.type = syntax_1.Syntax.DoWhileStatement;
             this.body = body;
@@ -1353,14 +1370,14 @@ return /******/ (function(modules) { // webpackBootstrap
         return DoWhileStatement;
     }());
     exports.DoWhileStatement = DoWhileStatement;
-    var EmptyStatement = (function () {
+    var EmptyStatement = /** @class */ (function () {
         function EmptyStatement() {
             this.type = syntax_1.Syntax.EmptyStatement;
         }
         return EmptyStatement;
     }());
     exports.EmptyStatement = EmptyStatement;
-    var ExportAllDeclaration = (function () {
+    var ExportAllDeclaration = /** @class */ (function () {
         function ExportAllDeclaration(source) {
             this.type = syntax_1.Syntax.ExportAllDeclaration;
             this.source = source;
@@ -1368,7 +1385,7 @@ return /******/ (function(modules) { // webpackBootstrap
         return ExportAllDeclaration;
     }());
     exports.ExportAllDeclaration = ExportAllDeclaration;
-    var ExportDefaultDeclaration = (function () {
+    var ExportDefaultDeclaration = /** @class */ (function () {
         function ExportDefaultDeclaration(declaration) {
             this.type = syntax_1.Syntax.ExportDefaultDeclaration;
             this.declaration = declaration;
@@ -1376,7 +1393,7 @@ return /******/ (function(modules) { // webpackBootstrap
         return ExportDefaultDeclaration;
     }());
     exports.ExportDefaultDeclaration = ExportDefaultDeclaration;
-    var ExportNamedDeclaration = (function () {
+    var ExportNamedDeclaration = /** @class */ (function () {
         function ExportNamedDeclaration(declaration, specifiers, source) {
             this.type = syntax_1.Syntax.ExportNamedDeclaration;
             this.declaration = declaration;
@@ -1386,7 +1403,7 @@ return /******/ (function(modules) { // webpackBootstrap
         return ExportNamedDeclaration;
     }());
     exports.ExportNamedDeclaration = ExportNamedDeclaration;
-    var ExportSpecifier = (function () {
+    var ExportSpecifier = /** @class */ (function () {
         function ExportSpecifier(local, exported) {
             this.type = syntax_1.Syntax.ExportSpecifier;
             this.exported = exported;
@@ -1395,7 +1412,7 @@ return /******/ (function(modules) { // webpackBootstrap
         return ExportSpecifier;
     }());
     exports.ExportSpecifier = ExportSpecifier;
-    var ExpressionStatement = (function () {
+    var ExpressionStatement = /** @class */ (function () {
         function ExpressionStatement(expression) {
             this.type = syntax_1.Syntax.ExpressionStatement;
             this.expression = expression;
@@ -1403,7 +1420,7 @@ return /******/ (function(modules) { // webpackBootstrap
         return ExpressionStatement;
     }());
     exports.ExpressionStatement = ExpressionStatement;
-    var ForInStatement = (function () {
+    var ForInStatement = /** @class */ (function () {
         function ForInStatement(left, right, body) {
             this.type = syntax_1.Syntax.ForInStatement;
             this.left = left;
@@ -1414,7 +1431,7 @@ return /******/ (function(modules) { // webpackBootstrap
         return ForInStatement;
     }());
     exports.ForInStatement = ForInStatement;
-    var ForOfStatement = (function () {
+    var ForOfStatement = /** @class */ (function () {
         function ForOfStatement(left, right, body) {
             this.type = syntax_1.Syntax.ForOfStatement;
             this.left = left;
@@ -1424,7 +1441,7 @@ return /******/ (function(modules) { // webpackBootstrap
         return ForOfStatement;
     }());
     exports.ForOfStatement = ForOfStatement;
-    var ForStatement = (function () {
+    var ForStatement = /** @class */ (function () {
         function ForStatement(init, test, update, body) {
             this.type = syntax_1.Syntax.ForStatement;
             this.init = init;
@@ -1435,7 +1452,7 @@ return /******/ (function(modules) { // webpackBootstrap
         return ForStatement;
     }());
     exports.ForStatement = ForStatement;
-    var FunctionDeclaration = (function () {
+    var FunctionDeclaration = /** @class */ (function () {
         function FunctionDeclaration(id, params, body, generator) {
             this.type = syntax_1.Syntax.FunctionDeclaration;
             this.id = id;
@@ -1448,7 +1465,7 @@ return /******/ (function(modules) { // webpackBootstrap
         return FunctionDeclaration;
     }());
     exports.FunctionDeclaration = FunctionDeclaration;
-    var FunctionExpression = (function () {
+    var FunctionExpression = /** @class */ (function () {
         function FunctionExpression(id, params, body, generator) {
             this.type = syntax_1.Syntax.FunctionExpression;
             this.id = id;
@@ -1461,7 +1478,7 @@ return /******/ (function(modules) { // webpackBootstrap
         return FunctionExpression;
     }());
     exports.FunctionExpression = FunctionExpression;
-    var Identifier = (function () {
+    var Identifier = /** @class */ (function () {
         function Identifier(name) {
             this.type = syntax_1.Syntax.Identifier;
             this.name = name;
@@ -1469,7 +1486,7 @@ return /******/ (function(modules) { // webpackBootstrap
         return Identifier;
     }());
     exports.Identifier = Identifier;
-    var IfStatement = (function () {
+    var IfStatement = /** @class */ (function () {
         function IfStatement(test, consequent, alternate) {
             this.type = syntax_1.Syntax.IfStatement;
             this.test = test;
@@ -1479,14 +1496,14 @@ return /******/ (function(modules) { // webpackBootstrap
         return IfStatement;
     }());
     exports.IfStatement = IfStatement;
-    var Import = (function () {
+    var Import = /** @class */ (function () {
         function Import() {
             this.type = syntax_1.Syntax.Import;
         }
         return Import;
     }());
     exports.Import = Import;
-    var ImportDeclaration = (function () {
+    var ImportDeclaration = /** @class */ (function () {
         function ImportDeclaration(specifiers, source) {
             this.type = syntax_1.Syntax.ImportDeclaration;
             this.specifiers = specifiers;
@@ -1495,7 +1512,7 @@ return /******/ (function(modules) { // webpackBootstrap
         return ImportDeclaration;
     }());
     exports.ImportDeclaration = ImportDeclaration;
-    var ImportDefaultSpecifier = (function () {
+    var ImportDefaultSpecifier = /** @class */ (function () {
         function ImportDefaultSpecifier(local) {
             this.type = syntax_1.Syntax.ImportDefaultSpecifier;
             this.local = local;
@@ -1503,7 +1520,7 @@ return /******/ (function(modules) { // webpackBootstrap
         return ImportDefaultSpecifier;
     }());
     exports.ImportDefaultSpecifier = ImportDefaultSpecifier;
-    var ImportNamespaceSpecifier = (function () {
+    var ImportNamespaceSpecifier = /** @class */ (function () {
         function ImportNamespaceSpecifier(local) {
             this.type = syntax_1.Syntax.ImportNamespaceSpecifier;
             this.local = local;
@@ -1511,7 +1528,7 @@ return /******/ (function(modules) { // webpackBootstrap
         return ImportNamespaceSpecifier;
     }());
     exports.ImportNamespaceSpecifier = ImportNamespaceSpecifier;
-    var ImportSpecifier = (function () {
+    var ImportSpecifier = /** @class */ (function () {
         function ImportSpecifier(local, imported) {
             this.type = syntax_1.Syntax.ImportSpecifier;
             this.local = local;
@@ -1520,7 +1537,7 @@ return /******/ (function(modules) { // webpackBootstrap
         return ImportSpecifier;
     }());
     exports.ImportSpecifier = ImportSpecifier;
-    var LabeledStatement = (function () {
+    var LabeledStatement = /** @class */ (function () {
         function LabeledStatement(label, body) {
             this.type = syntax_1.Syntax.LabeledStatement;
             this.label = label;
@@ -1529,7 +1546,7 @@ return /******/ (function(modules) { // webpackBootstrap
         return LabeledStatement;
     }());
     exports.LabeledStatement = LabeledStatement;
-    var Literal = (function () {
+    var Literal = /** @class */ (function () {
         function Literal(value, raw) {
             this.type = syntax_1.Syntax.Literal;
             this.value = value;
@@ -1538,7 +1555,7 @@ return /******/ (function(modules) { // webpackBootstrap
         return Literal;
     }());
     exports.Literal = Literal;
-    var MetaProperty = (function () {
+    var MetaProperty = /** @class */ (function () {
         function MetaProperty(meta, property) {
             this.type = syntax_1.Syntax.MetaProperty;
             this.meta = meta;
@@ -1547,7 +1564,7 @@ return /******/ (function(modules) { // webpackBootstrap
         return MetaProperty;
     }());
     exports.MetaProperty = MetaProperty;
-    var MethodDefinition = (function () {
+    var MethodDefinition = /** @class */ (function () {
         function MethodDefinition(key, computed, value, kind, isStatic) {
             this.type = syntax_1.Syntax.MethodDefinition;
             this.key = key;
@@ -1559,7 +1576,7 @@ return /******/ (function(modules) { // webpackBootstrap
         return MethodDefinition;
     }());
     exports.MethodDefinition = MethodDefinition;
-    var Module = (function () {
+    var Module = /** @class */ (function () {
         function Module(body) {
             this.type = syntax_1.Syntax.Program;
             this.body = body;
@@ -1568,7 +1585,7 @@ return /******/ (function(modules) { // webpackBootstrap
         return Module;
     }());
     exports.Module = Module;
-    var NewExpression = (function () {
+    var NewExpression = /** @class */ (function () {
         function NewExpression(callee, args) {
             this.type = syntax_1.Syntax.NewExpression;
             this.callee = callee;
@@ -1577,7 +1594,7 @@ return /******/ (function(modules) { // webpackBootstrap
         return NewExpression;
     }());
     exports.NewExpression = NewExpression;
-    var ObjectExpression = (function () {
+    var ObjectExpression = /** @class */ (function () {
         function ObjectExpression(properties) {
             this.type = syntax_1.Syntax.ObjectExpression;
             this.properties = properties;
@@ -1585,7 +1602,7 @@ return /******/ (function(modules) { // webpackBootstrap
         return ObjectExpression;
     }());
     exports.ObjectExpression = ObjectExpression;
-    var ObjectPattern = (function () {
+    var ObjectPattern = /** @class */ (function () {
         function ObjectPattern(properties) {
             this.type = syntax_1.Syntax.ObjectPattern;
             this.properties = properties;
@@ -1593,7 +1610,7 @@ return /******/ (function(modules) { // webpackBootstrap
         return ObjectPattern;
     }());
     exports.ObjectPattern = ObjectPattern;
-    var Property = (function () {
+    var Property = /** @class */ (function () {
         function Property(kind, key, computed, value, method, shorthand) {
             this.type = syntax_1.Syntax.Property;
             this.key = key;
@@ -1606,7 +1623,7 @@ return /******/ (function(modules) { // webpackBootstrap
         return Property;
     }());
     exports.Property = Property;
-    var RegexLiteral = (function () {
+    var RegexLiteral = /** @class */ (function () {
         function RegexLiteral(value, raw, pattern, flags) {
             this.type = syntax_1.Syntax.Literal;
             this.value = value;
@@ -1616,7 +1633,7 @@ return /******/ (function(modules) { // webpackBootstrap
         return RegexLiteral;
     }());
     exports.RegexLiteral = RegexLiteral;
-    var RestElement = (function () {
+    var RestElement = /** @class */ (function () {
         function RestElement(argument) {
             this.type = syntax_1.Syntax.RestElement;
             this.argument = argument;
@@ -1624,15 +1641,7 @@ return /******/ (function(modules) { // webpackBootstrap
         return RestElement;
     }());
     exports.RestElement = RestElement;
-    var RestProperty = (function () {
-        function RestProperty(argument) {
-            this.type = syntax_1.Syntax.RestProperty;
-            this.argument = argument;
-        }
-        return RestProperty;
-    }());
-    exports.RestProperty = RestProperty;
-    var ReturnStatement = (function () {
+    var ReturnStatement = /** @class */ (function () {
         function ReturnStatement(argument) {
             this.type = syntax_1.Syntax.ReturnStatement;
             this.argument = argument;
@@ -1640,7 +1649,7 @@ return /******/ (function(modules) { // webpackBootstrap
         return ReturnStatement;
     }());
     exports.ReturnStatement = ReturnStatement;
-    var Script = (function () {
+    var Script = /** @class */ (function () {
         function Script(body) {
             this.type = syntax_1.Syntax.Program;
             this.body = body;
@@ -1649,7 +1658,7 @@ return /******/ (function(modules) { // webpackBootstrap
         return Script;
     }());
     exports.Script = Script;
-    var SequenceExpression = (function () {
+    var SequenceExpression = /** @class */ (function () {
         function SequenceExpression(expressions) {
             this.type = syntax_1.Syntax.SequenceExpression;
             this.expressions = expressions;
@@ -1657,7 +1666,7 @@ return /******/ (function(modules) { // webpackBootstrap
         return SequenceExpression;
     }());
     exports.SequenceExpression = SequenceExpression;
-    var SpreadElement = (function () {
+    var SpreadElement = /** @class */ (function () {
         function SpreadElement(argument) {
             this.type = syntax_1.Syntax.SpreadElement;
             this.argument = argument;
@@ -1665,15 +1674,7 @@ return /******/ (function(modules) { // webpackBootstrap
         return SpreadElement;
     }());
     exports.SpreadElement = SpreadElement;
-    var SpreadProperty = (function () {
-        function SpreadProperty(argument) {
-            this.type = syntax_1.Syntax.SpreadProperty;
-            this.argument = argument;
-        }
-        return SpreadProperty;
-    }());
-    exports.SpreadProperty = SpreadProperty;
-    var StaticMemberExpression = (function () {
+    var StaticMemberExpression = /** @class */ (function () {
         function StaticMemberExpression(object, property) {
             this.type = syntax_1.Syntax.MemberExpression;
             this.computed = false;
@@ -1683,14 +1684,14 @@ return /******/ (function(modules) { // webpackBootstrap
         return StaticMemberExpression;
     }());
     exports.StaticMemberExpression = StaticMemberExpression;
-    var Super = (function () {
+    var Super = /** @class */ (function () {
         function Super() {
             this.type = syntax_1.Syntax.Super;
         }
         return Super;
     }());
     exports.Super = Super;
-    var SwitchCase = (function () {
+    var SwitchCase = /** @class */ (function () {
         function SwitchCase(test, consequent) {
             this.type = syntax_1.Syntax.SwitchCase;
             this.test = test;
@@ -1699,7 +1700,7 @@ return /******/ (function(modules) { // webpackBootstrap
         return SwitchCase;
     }());
     exports.SwitchCase = SwitchCase;
-    var SwitchStatement = (function () {
+    var SwitchStatement = /** @class */ (function () {
         function SwitchStatement(discriminant, cases) {
             this.type = syntax_1.Syntax.SwitchStatement;
             this.discriminant = discriminant;
@@ -1708,7 +1709,7 @@ return /******/ (function(modules) { // webpackBootstrap
         return SwitchStatement;
     }());
     exports.SwitchStatement = SwitchStatement;
-    var TaggedTemplateExpression = (function () {
+    var TaggedTemplateExpression = /** @class */ (function () {
         function TaggedTemplateExpression(tag, quasi) {
             this.type = syntax_1.Syntax.TaggedTemplateExpression;
             this.tag = tag;
@@ -1717,7 +1718,7 @@ return /******/ (function(modules) { // webpackBootstrap
         return TaggedTemplateExpression;
     }());
     exports.TaggedTemplateExpression = TaggedTemplateExpression;
-    var TemplateElement = (function () {
+    var TemplateElement = /** @class */ (function () {
         function TemplateElement(value, tail) {
             this.type = syntax_1.Syntax.TemplateElement;
             this.value = value;
@@ -1726,7 +1727,7 @@ return /******/ (function(modules) { // webpackBootstrap
         return TemplateElement;
     }());
     exports.TemplateElement = TemplateElement;
-    var TemplateLiteral = (function () {
+    var TemplateLiteral = /** @class */ (function () {
         function TemplateLiteral(quasis, expressions) {
             this.type = syntax_1.Syntax.TemplateLiteral;
             this.quasis = quasis;
@@ -1735,14 +1736,14 @@ return /******/ (function(modules) { // webpackBootstrap
         return TemplateLiteral;
     }());
     exports.TemplateLiteral = TemplateLiteral;
-    var ThisExpression = (function () {
+    var ThisExpression = /** @class */ (function () {
         function ThisExpression() {
             this.type = syntax_1.Syntax.ThisExpression;
         }
         return ThisExpression;
     }());
     exports.ThisExpression = ThisExpression;
-    var ThrowStatement = (function () {
+    var ThrowStatement = /** @class */ (function () {
         function ThrowStatement(argument) {
             this.type = syntax_1.Syntax.ThrowStatement;
             this.argument = argument;
@@ -1750,7 +1751,7 @@ return /******/ (function(modules) { // webpackBootstrap
         return ThrowStatement;
     }());
     exports.ThrowStatement = ThrowStatement;
-    var TryStatement = (function () {
+    var TryStatement = /** @class */ (function () {
         function TryStatement(block, handler, finalizer) {
             this.type = syntax_1.Syntax.TryStatement;
             this.block = block;
@@ -1760,7 +1761,7 @@ return /******/ (function(modules) { // webpackBootstrap
         return TryStatement;
     }());
     exports.TryStatement = TryStatement;
-    var UnaryExpression = (function () {
+    var UnaryExpression = /** @class */ (function () {
         function UnaryExpression(operator, argument) {
             this.type = syntax_1.Syntax.UnaryExpression;
             this.operator = operator;
@@ -1770,7 +1771,7 @@ return /******/ (function(modules) { // webpackBootstrap
         return UnaryExpression;
     }());
     exports.UnaryExpression = UnaryExpression;
-    var UpdateExpression = (function () {
+    var UpdateExpression = /** @class */ (function () {
         function UpdateExpression(operator, argument, prefix) {
             this.type = syntax_1.Syntax.UpdateExpression;
             this.operator = operator;
@@ -1780,7 +1781,7 @@ return /******/ (function(modules) { // webpackBootstrap
         return UpdateExpression;
     }());
     exports.UpdateExpression = UpdateExpression;
-    var VariableDeclaration = (function () {
+    var VariableDeclaration = /** @class */ (function () {
         function VariableDeclaration(declarations, kind) {
             this.type = syntax_1.Syntax.VariableDeclaration;
             this.declarations = declarations;
@@ -1789,7 +1790,7 @@ return /******/ (function(modules) { // webpackBootstrap
         return VariableDeclaration;
     }());
     exports.VariableDeclaration = VariableDeclaration;
-    var VariableDeclarator = (function () {
+    var VariableDeclarator = /** @class */ (function () {
         function VariableDeclarator(id, init) {
             this.type = syntax_1.Syntax.VariableDeclarator;
             this.id = id;
@@ -1798,7 +1799,7 @@ return /******/ (function(modules) { // webpackBootstrap
         return VariableDeclarator;
     }());
     exports.VariableDeclarator = VariableDeclarator;
-    var WhileStatement = (function () {
+    var WhileStatement = /** @class */ (function () {
         function WhileStatement(test, body) {
             this.type = syntax_1.Syntax.WhileStatement;
             this.test = test;
@@ -1807,7 +1808,7 @@ return /******/ (function(modules) { // webpackBootstrap
         return WhileStatement;
     }());
     exports.WhileStatement = WhileStatement;
-    var WithStatement = (function () {
+    var WithStatement = /** @class */ (function () {
         function WithStatement(object, body) {
             this.type = syntax_1.Syntax.WithStatement;
             this.object = object;
@@ -1816,7 +1817,7 @@ return /******/ (function(modules) { // webpackBootstrap
         return WithStatement;
     }());
     exports.WithStatement = WithStatement;
-    var YieldExpression = (function () {
+    var YieldExpression = /** @class */ (function () {
         function YieldExpression(argument, delegate) {
             this.type = syntax_1.Syntax.YieldExpression;
             this.argument = argument;
@@ -1832,6 +1833,7 @@ return /******/ (function(modules) { // webpackBootstrap
 /***/ function(module, exports, __webpack_require__) {
 
     "use strict";
+    Object.defineProperty(exports, "__esModule", { value: true });
     var assert_1 = __webpack_require__(9);
     var error_handler_1 = __webpack_require__(10);
     var messages_1 = __webpack_require__(11);
@@ -1840,7 +1842,7 @@ return /******/ (function(modules) { // webpackBootstrap
     var syntax_1 = __webpack_require__(2);
     var token_1 = __webpack_require__(13);
     var ArrowParameterPlaceHolder = 'ArrowParameterPlaceHolder';
-    var Parser = (function () {
+    var Parser = /** @class */ (function () {
         function Parser(code, options, delegate) {
             if (options === void 0) { options = {}; }
             this.config = {
@@ -2119,11 +2121,18 @@ return /******/ (function(modules) { // webpackBootstrap
                 column: this.startMarker.column
             };
         };
-        Parser.prototype.startNode = function (token) {
+        Parser.prototype.startNode = function (token, lastLineStart) {
+            if (lastLineStart === void 0) { lastLineStart = 0; }
+            var column = token.start - token.lineStart;
+            var line = token.lineNumber;
+            if (column < 0) {
+                column += lastLineStart;
+                line--;
+            }
             return {
                 index: token.start,
-                line: token.lineNumber,
-                column: token.start - token.lineStart
+                line: line,
+                column: column
             };
         };
         Parser.prototype.finalize = function (marker, node) {
@@ -2458,7 +2467,7 @@ return /******/ (function(modules) { // webpackBootstrap
             var isGenerator = false;
             var node = this.createNode();
             var previousAllowYield = this.context.allowYield;
-            this.context.allowYield = false;
+            this.context.allowYield = true;
             var params = this.parseFormalParameters();
             var method = this.parsePropertyMethod(params);
             this.context.allowYield = previousAllowYield;
@@ -2526,26 +2535,10 @@ return /******/ (function(modules) { // webpackBootstrap
             if (token.type === 3 /* Identifier */) {
                 var id = token.value;
                 this.nextToken();
-                if (id === 'async' && !this.hasLineTerminator) {
-                    computed = this.match('[');
-                    if (computed) {
-                        isAsync = true;
-                        key = this.parseObjectPropertyKey();
-                    }
-                    else {
-                        var punctuator = this.lookahead.value;
-                        if (punctuator !== ':' && punctuator !== '(' && punctuator !== '*') {
-                            isAsync = true;
-                            token = this.lookahead;
-                            id = token.value;
-                            this.nextToken();
-                        }
-                        key = this.finalize(node, new Node.Identifier(id));
-                    }
-                }
-                else {
-                    key = this.finalize(node, new Node.Identifier(id));
-                }
+                computed = this.match('[');
+                isAsync = !this.hasLineTerminator && (id === 'async') &&
+                    !this.match(':') && !this.match('(') && !this.match('*') && !this.match(',');
+                key = isAsync ? this.parseObjectPropertyKey() : this.finalize(node, new Node.Identifier(id));
             }
             else if (this.match('*')) {
                 this.nextToken();
@@ -2614,19 +2607,13 @@ return /******/ (function(modules) { // webpackBootstrap
             }
             return this.finalize(node, new Node.Property(kind, key, computed, value, method, shorthand));
         };
-        Parser.prototype.parseSpreadProperty = function () {
-            var node = this.createNode();
-            this.expect('...');
-            var arg = this.inheritCoverGrammar(this.parseAssignmentExpression);
-            return this.finalize(node, new Node.SpreadProperty(arg));
-        };
         Parser.prototype.parseObjectInitializer = function () {
             var node = this.createNode();
             this.expect('{');
             var properties = [];
             var hasProto = { value: false };
             while (!this.match('}')) {
-                properties.push(this.match('...') ? this.parseSpreadProperty() : this.parseObjectProperty(hasProto));
+                properties.push(this.match('...') ? this.parseSpreadElement() : this.parseObjectProperty(hasProto));
                 if (!this.match('}')) {
                     this.expectCommaSeparator();
                 }
@@ -2678,10 +2665,6 @@ return /******/ (function(modules) { // webpackBootstrap
                     expr.type = syntax_1.Syntax.RestElement;
                     this.reinterpretExpressionAsPattern(expr.argument);
                     break;
-                case syntax_1.Syntax.SpreadProperty:
-                    expr.type = syntax_1.Syntax.RestProperty;
-                    this.reinterpretExpressionAsPattern(expr.argument);
-                    break;
                 case syntax_1.Syntax.ArrayExpression:
                     expr.type = syntax_1.Syntax.ArrayPattern;
                     for (var i = 0; i < expr.elements.length; i++) {
@@ -2694,7 +2677,7 @@ return /******/ (function(modules) { // webpackBootstrap
                     expr.type = syntax_1.Syntax.ObjectPattern;
                     for (var i = 0; i < expr.properties.length; i++) {
                         var property = expr.properties[i];
-                        this.reinterpretExpressionAsPattern(property.type === syntax_1.Syntax.SpreadProperty ? property : property.value);
+                        this.reinterpretExpressionAsPattern(property.type === syntax_1.Syntax.SpreadElement ? property : property.value);
                     }
                     break;
                 case syntax_1.Syntax.AssignmentExpression:
@@ -2815,10 +2798,10 @@ return /******/ (function(modules) { // webpackBootstrap
                                 else {
                                     this.reinterpretExpressionAsPattern(expr);
                                 }
-                                var params_1 = (expr.type === syntax_1.Syntax.SequenceExpression ? expr.expressions : [expr]);
+                                var parameters = (expr.type === syntax_1.Syntax.SequenceExpression ? expr.expressions : [expr]);
                                 expr = {
                                     type: ArrowParameterPlaceHolder,
-                                    params: params_1,
+                                    params: parameters,
                                     async: false
                                 };
                             }
@@ -2967,6 +2950,9 @@ return /******/ (function(modules) { // webpackBootstrap
                     }
                     expr = this.finalize(this.startNode(startToken), new Node.CallExpression(expr, args));
                     if (asyncArrow && this.match('=>')) {
+                        for (var i = 0; i < args.length; ++i) {
+                            this.reinterpretExpressionAsPattern(args[i]);
+                        }
                         expr = {
                             type: ArrowParameterPlaceHolder,
                             params: args,
@@ -3173,12 +3159,15 @@ return /******/ (function(modules) { // webpackBootstrap
                 // Final reduce to clean-up the stack.
                 var i = stack.length - 1;
                 expr = stack[i];
-                markers.pop();
+                var lastMarker = markers.pop();
                 while (i > 1) {
-                    var node = this.startNode(markers.pop());
+                    var marker = markers.pop();
+                    var lastLineStart = lastMarker && lastMarker.lineStart;
+                    var node = this.startNode(marker, lastLineStart);
                     var operator = stack[i - 1];
                     expr = this.finalize(node, new Node.BinaryExpression(operator, stack[i - 2], expr));
                     i -= 2;
+                    lastMarker = marker;
                 }
             }
             return expr;
@@ -3208,7 +3197,6 @@ return /******/ (function(modules) { // webpackBootstrap
                     this.validateParam(options, param, param.name);
                     break;
                 case syntax_1.Syntax.RestElement:
-                case syntax_1.Syntax.RestProperty:
                     this.checkPatternParam(options, param.argument);
                     break;
                 case syntax_1.Syntax.AssignmentPattern:
@@ -3224,7 +3212,7 @@ return /******/ (function(modules) { // webpackBootstrap
                 case syntax_1.Syntax.ObjectPattern:
                     for (var i = 0; i < param.properties.length; i++) {
                         var property = param.properties[i];
-                        this.checkPatternParam(options, (property.type === syntax_1.Syntax.RestProperty) ? property : property.value);
+                        this.checkPatternParam(options, (property.type === syntax_1.Syntax.RestElement) ? property : property.value);
                     }
                     break;
                 default:
@@ -3298,13 +3286,16 @@ return /******/ (function(modules) { // webpackBootstrap
                 var startToken = this.lookahead;
                 var token = startToken;
                 expr = this.parseConditionalExpression();
-                if (token.type === 3 /* Identifier */ && (token.lineNumber === this.lookahead.lineNumber) && token.value === 'async' && (this.lookahead.type === 3 /* Identifier */)) {
-                    var arg = this.parsePrimaryExpression();
-                    expr = {
-                        type: ArrowParameterPlaceHolder,
-                        params: [arg],
-                        async: true
-                    };
+                if (token.type === 3 /* Identifier */ && (token.lineNumber === this.lookahead.lineNumber) && token.value === 'async') {
+                    if (this.lookahead.type === 3 /* Identifier */ || this.matchKeyword('yield')) {
+                        var arg = this.parsePrimaryExpression();
+                        this.reinterpretExpressionAsPattern(arg);
+                        expr = {
+                            type: ArrowParameterPlaceHolder,
+                            params: [arg],
+                            async: true
+                        };
+                    }
                 }
                 if (expr.type === ArrowParameterPlaceHolder || this.match('=>')) {
                     // https://tc39.github.io/ecma262/#sec-arrow-function-definitions
@@ -3326,8 +3317,16 @@ return /******/ (function(modules) { // webpackBootstrap
                         this.context.await = isAsync;
                         var node = this.startNode(startToken);
                         this.expect('=>');
-                        var body = this.match('{') ? this.parseFunctionSourceElements() :
-                            this.isolateCoverGrammar(this.parseAssignmentExpression);
+                        var body = void 0;
+                        if (this.match('{')) {
+                            var previousAllowIn = this.context.allowIn;
+                            this.context.allowIn = true;
+                            body = this.parseFunctionSourceElements();
+                            this.context.allowIn = previousAllowIn;
+                        }
+                        else {
+                            body = this.isolateCoverGrammar(this.parseAssignmentExpression);
+                        }
                         var expression = body.type !== syntax_1.Syntax.BlockStatement;
                         if (this.context.strict && list.firstRestricted) {
                             this.throwUnexpectedToken(list.firstRestricted, list.message);
@@ -3584,7 +3583,7 @@ return /******/ (function(modules) { // webpackBootstrap
             if (!this.match('}')) {
                 this.throwError(messages_1.Messages.PropertyAfterRestProperty);
             }
-            return this.finalize(node, new Node.RestProperty(arg));
+            return this.finalize(node, new Node.RestElement(arg));
         };
         Parser.prototype.parseObjectPattern = function (params, kind) {
             var node = this.createNode();
@@ -3968,8 +3967,10 @@ return /******/ (function(modules) { // webpackBootstrap
             }
             var node = this.createNode();
             this.expectKeyword('return');
-            var hasArgument = !this.match(';') && !this.match('}') &&
-                !this.hasLineTerminator && this.lookahead.type !== 2 /* EOF */;
+            var hasArgument = (!this.match(';') && !this.match('}') &&
+                !this.hasLineTerminator && this.lookahead.type !== 2 /* EOF */) ||
+                this.lookahead.type === 8 /* StringLiteral */ ||
+                this.lookahead.type === 10 /* Template */;
             var argument = hasArgument ? this.parseExpression() : null;
             this.consumeSemicolon();
             return this.finalize(node, new Node.ReturnStatement(argument));
@@ -4534,7 +4535,7 @@ return /******/ (function(modules) { // webpackBootstrap
             var node = this.createNode();
             var isGenerator = false;
             var previousAllowYield = this.context.allowYield;
-            this.context.allowYield = false;
+            this.context.allowYield = !isGenerator;
             var formalParameters = this.parseFormalParameters();
             if (formalParameters.params.length > 0) {
                 this.tolerateError(messages_1.Messages.BadGetterArity);
@@ -4547,7 +4548,7 @@ return /******/ (function(modules) { // webpackBootstrap
             var node = this.createNode();
             var isGenerator = false;
             var previousAllowYield = this.context.allowYield;
-            this.context.allowYield = false;
+            this.context.allowYield = !isGenerator;
             var formalParameters = this.parseFormalParameters();
             if (formalParameters.params.length !== 1) {
                 this.tolerateError(messages_1.Messages.BadSetterArity);
@@ -4648,13 +4649,8 @@ return /******/ (function(modules) { // webpackBootstrap
                         isAsync = true;
                         token = this.lookahead;
                         key = this.parseObjectPropertyKey();
-                        if (token.type === 3 /* Identifier */) {
-                            if (token.value === 'get' || token.value === 'set') {
-                                this.tolerateUnexpectedToken(token);
-                            }
-                            else if (token.value === 'constructor') {
-                                this.tolerateUnexpectedToken(token, messages_1.Messages.ConstructorIsAsync);
-                            }
+                        if (token.type === 3 /* Identifier */ && token.value === 'constructor') {
+                            this.tolerateUnexpectedToken(token, messages_1.Messages.ConstructorIsAsync);
                         }
                     }
                 }
@@ -4767,6 +4763,7 @@ return /******/ (function(modules) { // webpackBootstrap
         Parser.prototype.parseModule = function () {
             this.context.strict = true;
             this.context.isModule = true;
+            this.scanner.isModule = true;
             var node = this.createNode();
             var body = this.parseDirectivePrologues();
             while (this.lookahead.type !== 2 /* EOF */) {
@@ -5028,11 +5025,12 @@ return /******/ (function(modules) { // webpackBootstrap
 /* 9 */
 /***/ function(module, exports) {
 
+    "use strict";
     // Ensure the condition is true, otherwise throw an error.
     // This is only to have a better contract semantic, i.e. another safety net
     // to catch a logic error. The condition shall be fulfilled in normal case.
     // Do NOT use this to enforce a certain condition on any user input.
-    "use strict";
+    Object.defineProperty(exports, "__esModule", { value: true });
     function assert(condition, message) {
         /* istanbul ignore if */
         if (!condition) {
@@ -5046,9 +5044,10 @@ return /******/ (function(modules) { // webpackBootstrap
 /* 10 */
 /***/ function(module, exports) {
 
-    /* tslint:disable:max-classes-per-file */
     "use strict";
-    var ErrorHandler = (function () {
+    /* tslint:disable:max-classes-per-file */
+    Object.defineProperty(exports, "__esModule", { value: true });
+    var ErrorHandler = /** @class */ (function () {
         function ErrorHandler() {
             this.errors = [];
             this.tolerant = false;
@@ -5109,6 +5108,7 @@ return /******/ (function(modules) { // webpackBootstrap
 /***/ function(module, exports) {
 
     "use strict";
+    Object.defineProperty(exports, "__esModule", { value: true });
     // Error messages should be identical to V8.
     exports.Messages = {
         BadImportCallArity: 'Unexpected token',
@@ -5180,6 +5180,7 @@ return /******/ (function(modules) { // webpackBootstrap
 /***/ function(module, exports, __webpack_require__) {
 
     "use strict";
+    Object.defineProperty(exports, "__esModule", { value: true });
     var assert_1 = __webpack_require__(9);
     var character_1 = __webpack_require__(4);
     var messages_1 = __webpack_require__(11);
@@ -5189,11 +5190,12 @@ return /******/ (function(modules) { // webpackBootstrap
     function octalValue(ch) {
         return '01234567'.indexOf(ch);
     }
-    var Scanner = (function () {
+    var Scanner = /** @class */ (function () {
         function Scanner(code, handler) {
             this.source = code;
             this.errorHandler = handler;
             this.trackComment = false;
+            this.isModule = false;
             this.length = code.length;
             this.index = 0;
             this.lineNumber = (code.length > 0) ? 1 : 0;
@@ -5364,7 +5366,7 @@ return /******/ (function(modules) { // webpackBootstrap
                     this.lineStart = this.index;
                     start = true;
                 }
-                else if (ch === 0x2F) {
+                else if (ch === 0x2F) { // U+002F is '/'
                     ch = this.source.charCodeAt(this.index + 1);
                     if (ch === 0x2F) {
                         this.index += 2;
@@ -5374,7 +5376,7 @@ return /******/ (function(modules) { // webpackBootstrap
                         }
                         start = true;
                     }
-                    else if (ch === 0x2A) {
+                    else if (ch === 0x2A) { // U+002A is '*'
                         this.index += 2;
                         var comment = this.skipMultiLineComment();
                         if (this.trackComment) {
@@ -5385,7 +5387,7 @@ return /******/ (function(modules) { // webpackBootstrap
                         break;
                     }
                 }
-                else if (start && ch === 0x2D) {
+                else if (start && ch === 0x2D) { // U+002D is '-'
                     // U+003E is '>'
                     if ((this.source.charCodeAt(this.index + 1) === 0x2D) && (this.source.charCodeAt(this.index + 2) === 0x3E)) {
                         // '-->' is a single-line comment
@@ -5399,7 +5401,7 @@ return /******/ (function(modules) { // webpackBootstrap
                         break;
                     }
                 }
-                else if (ch === 0x3C) {
+                else if (ch === 0x3C && !this.isModule) { // U+003C is '<'
                     if (this.source.slice(this.index + 1, this.index + 4) === '!--') {
                         this.index += 4; // `<!--`
                         var comment = this.skipSingleLineComment(4);
@@ -5925,11 +5927,11 @@ return /******/ (function(modules) { // webpackBootstrap
                                     str += this.scanUnicodeCodePointEscape();
                                 }
                                 else {
-                                    var unescaped_1 = this.scanHexEscape(ch);
-                                    if (unescaped_1 === null) {
+                                    var unescapedChar = this.scanHexEscape(ch);
+                                    if (unescapedChar === null) {
                                         this.throwUnexpectedToken();
                                     }
-                                    str += unescaped_1;
+                                    str += unescapedChar;
                                 }
                                 break;
                             case 'x':
@@ -6049,9 +6051,9 @@ return /******/ (function(modules) { // webpackBootstrap
                                 }
                                 else {
                                     var restore = this.index;
-                                    var unescaped_2 = this.scanHexEscape(ch);
-                                    if (unescaped_2 !== null) {
-                                        cooked += unescaped_2;
+                                    var unescapedChar = this.scanHexEscape(ch);
+                                    if (unescapedChar !== null) {
+                                        cooked += unescapedChar;
                                     }
                                     else {
                                         this.index = restore;
@@ -6144,6 +6146,10 @@ return /******/ (function(modules) { // webpackBootstrap
             var self = this;
             if (flags.indexOf('u') >= 0) {
                 tmp = tmp
+                    // Replace every Unicode escape sequence with the equivalent
+                    // BMP character or a constant ASCII code point in the case of
+                    // astral symbols. (See the above note on `astralSubstitute`
+                    // for more information.)
                     .replace(/\\u\{([0-9a-fA-F]+)\}|\\u([a-fA-F0-9]{4})/g, function ($0, $1, $2) {
                     var codePoint = parseInt($1 || $2, 16);
                     if (codePoint > 0x10FFFF) {
@@ -6154,6 +6160,9 @@ return /******/ (function(modules) { // webpackBootstrap
                     }
                     return astralSubstitute;
                 })
+                    // Replace each paired surrogate with a single ASCII symbol to
+                    // avoid throwing on regular expressions that are only valid in
+                    // combination with the "u" flag.
                     .replace(/[\uD800-\uDBFF][\uDC00-\uDFFF]/g, astralSubstitute);
             }
             // First, detect invalid regular expressions.
@@ -6329,7 +6338,7 @@ return /******/ (function(modules) { // webpackBootstrap
 /***/ function(module, exports) {
 
     "use strict";
-    ;
+    Object.defineProperty(exports, "__esModule", { value: true });
     exports.TokenName = {};
     exports.TokenName[1 /* BooleanLiteral */] = 'Boolean';
     exports.TokenName[2 /* EOF */] = '<end>';
@@ -6347,8 +6356,9 @@ return /******/ (function(modules) { // webpackBootstrap
 /* 14 */
 /***/ function(module, exports) {
 
-    // Generated by generate-xhtml-entities.js. DO NOT MODIFY!
     "use strict";
+    // Generated by generate-xhtml-entities.js. DO NOT MODIFY!
+    Object.defineProperty(exports, "__esModule", { value: true });
     exports.XHTMLEntities = {
         quot: '\u0022',
         amp: '\u0026',
@@ -6610,10 +6620,11 @@ return /******/ (function(modules) { // webpackBootstrap
 /***/ function(module, exports, __webpack_require__) {
 
     "use strict";
+    Object.defineProperty(exports, "__esModule", { value: true });
     var error_handler_1 = __webpack_require__(10);
     var scanner_1 = __webpack_require__(12);
     var token_1 = __webpack_require__(13);
-    var Reader = (function () {
+    var Reader = /** @class */ (function () {
         function Reader() {
             this.values = [];
             this.curly = this.paren = -1;
@@ -6641,22 +6652,22 @@ return /******/ (function(modules) { // webpackBootstrap
                     regex = false;
                     break;
                 case ')':
-                    var check = this.values[this.paren - 1];
-                    regex = (check === 'if' || check === 'while' || check === 'for' || check === 'with');
+                    var keyword = this.values[this.paren - 1];
+                    regex = (keyword === 'if' || keyword === 'while' || keyword === 'for' || keyword === 'with');
                     break;
                 case '}':
                     // Dividing a function by anything makes little sense,
                     // but we have to check for that.
-                    regex = false;
+                    regex = true;
                     if (this.values[this.curly - 3] === 'function') {
                         // Anonymous function, e.g. function(){} /42
-                        var check_1 = this.values[this.curly - 4];
-                        regex = check_1 ? !this.beforeFunctionExpression(check_1) : false;
+                        var check = this.values[this.curly - 4];
+                        regex = check ? !this.beforeFunctionExpression(check) : false;
                     }
                     else if (this.values[this.curly - 4] === 'function') {
                         // Named function, e.g. function f(){} /42/
-                        var check_2 = this.values[this.curly - 5];
-                        regex = check_2 ? !this.beforeFunctionExpression(check_2) : true;
+                        var check = this.values[this.curly - 5];
+                        regex = check ? !this.beforeFunctionExpression(check) : true;
                     }
                     break;
                 default:
@@ -6680,7 +6691,7 @@ return /******/ (function(modules) { // webpackBootstrap
         };
         return Reader;
     }());
-    var Tokenizer = (function () {
+    var Tokenizer = /** @class */ (function () {
         function Tokenizer(code, config) {
             this.errorHandler = new error_handler_1.ErrorHandler();
             this.errorHandler.tolerant = config ? (typeof config.tolerant === 'boolean' && config.tolerant) : false;
@@ -6725,9 +6736,17 @@ return /******/ (function(modules) { // webpackBootstrap
                             end: {}
                         };
                     }
+                    var maybeRegex = (this.scanner.source[this.scanner.index] === '/') && this.reader.isRegexStart();
                     var token = void 0;
-                    if (this.scanner.source[this.scanner.index] === '/') {
-                        token = this.reader.isRegexStart() ? this.scanner.scanRegExp() : this.scanner.scanPunctuator();
+                    if (maybeRegex) {
+                        var state = this.scanner.saveState();
+                        try {
+                            token = this.scanner.scanRegExp();
+                        }
+                        catch (e) {
+                            this.scanner.restoreState(state);
+                            token = this.scanner.lex();
+                        }
                     }
                     else {
                         token = this.scanner.lex();
@@ -6765,4 +6784,3 @@ return /******/ (function(modules) { // webpackBootstrap
 /***/ }
 /******/ ])
 });
-;
index a31eec5..2f77698 100644 (file)
@@ -283,7 +283,6 @@ WI.ScriptSyntaxTree = class ScriptSyntaxTree
                 case WI.ScriptSyntaxTree.NodeType.AssignmentPattern:
                     return gatherIdentifiers(node.left);
                 case WI.ScriptSyntaxTree.NodeType.RestElement:
-                case WI.ScriptSyntaxTree.NodeType.RestProperty:
                     return gatherIdentifiers(node.argument);
                 default:
                     console.assert(false, "Unexpected node type in variable declarator: " + node.type);
@@ -291,7 +290,7 @@ WI.ScriptSyntaxTree = class ScriptSyntaxTree
             }
         }
 
-        console.assert(node.type === WI.ScriptSyntaxTree.NodeType.Identifier || node.type === WI.ScriptSyntaxTree.NodeType.ObjectPattern || node.type === WI.ScriptSyntaxTree.NodeType.ArrayPattern || node.type === WI.ScriptSyntaxTree.NodeType.RestElement || node.type === WI.ScriptSyntaxTree.NodeType.RestProperty);
+        console.assert(node.type === WI.ScriptSyntaxTree.NodeType.Identifier || node.type === WI.ScriptSyntaxTree.NodeType.ObjectPattern || node.type === WI.ScriptSyntaxTree.NodeType.ArrayPattern || node.type === WI.ScriptSyntaxTree.NodeType.RestElement);
 
         return gatherIdentifiers(node);
     }
@@ -425,9 +424,6 @@ WI.ScriptSyntaxTree = class ScriptSyntaxTree
         case WI.ScriptSyntaxTree.NodeType.RestElement:
             this._recurse(node.argument, callback, state);
             break;
-        case WI.ScriptSyntaxTree.NodeType.RestProperty:
-            this._recurse(node.argument, callback, state);
-            break;
         case WI.ScriptSyntaxTree.NodeType.ReturnStatement:
             this._recurse(node.argument, callback, state);
             break;
@@ -437,9 +433,6 @@ WI.ScriptSyntaxTree = class ScriptSyntaxTree
         case WI.ScriptSyntaxTree.NodeType.SpreadElement:
             this._recurse(node.argument, callback, state);
             break;
-        case WI.ScriptSyntaxTree.NodeType.SpreadProperty:
-            this._recurse(node.argument, callback, state);
-            break;
         case WI.ScriptSyntaxTree.NodeType.SwitchStatement:
             this._recurse(node.discriminant, callback, state);
             this._recurseArray(node.cases, callback, state);
@@ -851,12 +844,6 @@ WI.ScriptSyntaxTree = class ScriptSyntaxTree
                 argument: this._createInternalSyntaxTree(node.argument)
             };
             break;
-        case "RestProperty":
-            result = {
-                type: WI.ScriptSyntaxTree.NodeType.RestProperty,
-                argument: this._createInternalSyntaxTree(node.argument),
-            };
-            break;
         case "ReturnStatement":
             result = {
                 type: WI.ScriptSyntaxTree.NodeType.ReturnStatement,
@@ -875,12 +862,6 @@ WI.ScriptSyntaxTree = class ScriptSyntaxTree
                 argument: this._createInternalSyntaxTree(node.argument),
             };
             break;
-        case "SpreadProperty":
-            result = {
-                type: WI.ScriptSyntaxTree.NodeType.SpreadProperty,
-                argument: this._createInternalSyntaxTree(node.argument),
-            };
-            break;
         case "Super":
             result = {
                 type: WI.ScriptSyntaxTree.NodeType.Super
@@ -1124,11 +1105,9 @@ WI.ScriptSyntaxTree.NodeType = {
     Program: Symbol("program"),
     Property: Symbol("property"),
     RestElement: Symbol("rest-element"),
-    RestProperty: Symbol("rest-property"),
     ReturnStatement: Symbol("return-statement"),
     SequenceExpression: Symbol("sequence-expression"),
     SpreadElement: Symbol("spread-element"),
-    SpreadProperty: Symbol("spread-property"),
     Super: Symbol("super"),
     SwitchCase: Symbol("switch-case"),
     SwitchStatement: Symbol("switch-statement"),
index fafcb6a..5dbed41 100644 (file)
@@ -182,9 +182,6 @@ ESTreeWalker = class ESTreeWalker
         case "RestElement":
             this._walk(node.argument, node);
             break;
-        case "RestProperty":
-            this._walk(node.argument, node);
-            break;
         case "ReturnStatement":
             this._walk(node.argument, node);
             break;
@@ -194,9 +191,6 @@ ESTreeWalker = class ESTreeWalker
         case "SpreadElement":
             this._walk(node.argument, node);
             break;
-        case "SpreadProperty":
-            this._walk(node.argument, node);
-            break;
         case "SwitchStatement":
             this._walk(node.discriminant, node);
             this._walkArray(node.cases, node);
index 47407d4..3cfe935 100644 (file)
@@ -828,12 +828,10 @@ EsprimaFormatter = class EsprimaFormatter
         // Include these here so we get only get warnings about unhandled nodes.
         if (nodeType === "ExpressionStatement"
             || nodeType === "SpreadElement"
-            || nodeType === "SpreadProperty"
             || nodeType === "Super"
             || nodeType === "Import"
             || nodeType === "MetaProperty"
             || nodeType === "RestElement"
-            || nodeType === "RestProperty"
             || nodeType === "TemplateElement"
             || nodeType === "TemplateLiteral"
             || nodeType === "DebuggerStatement"