From 20c560b7b1b0e61d0d49752ff383410939896be6 Mon Sep 17 00:00:00 2001 From: github-actions Date: Sat, 29 Jun 2024 20:43:10 +0000 Subject: [PATCH] branch-master/.artifact/apidoc.html | 2 +- branch-master/.artifact/asset_image_logo_128.png | Bin 5832 -> 6858 bytes branch-master/.artifact/asset_image_logo_256.png | Bin 9971 -> 11955 bytes branch-master/.artifact/asset_image_logo_32.png | Bin 1470 -> 2076 bytes branch-master/.artifact/asset_image_logo_512.png | Bin 11962 -> 10858 bytes branch-master/.artifact/asset_image_logo_64.png | Bin 2150 -> 3922 bytes .../.artifact/coverage/coverage_report.txt | 4 +- branch-master/.artifact/coverage/index.html | 8 +- branch-master/.artifact/coverage/jslint.mjs.html | 6321 ++++++++++---------- .../coverage_sqlite3_js/lib/sqlite3.js.html | 22 +- .../coverage_sqlite3_sh/lib/sqlite3.js.html | 22 +- .../.artifact/jslint_wrapper_vscode/jslint.mjs | 37 +- .../.artifact/jslint_wrapper_vscode/package.json | 2 +- .../vscode-jslint-2024.3.26.vsix | Bin 88027 -> 0 bytes .../vscode-jslint-2024.6.28.vsix | Bin 0 -> 88214 bytes ...reenshot_browser__2f.artifact_2fapidoc.html.png | Bin 70565 -> 64374 bytes ...artifact_2fcoverage_sqlite3_js_2findex.html.png | Bin 31967 -> 28898 bytes ...coverage_sqlite3_js_2flib_2fsqlite3.js.html.png | Bin 76731 -> 69327 bytes ...artifact_2fcoverage_sqlite3_sh_2findex.html.png | Bin 31967 -> 28898 bytes ...coverage_sqlite3_sh_2flib_2fsqlite3.js.html.png | Bin 75632 -> 69701 bytes ...ser__2f.artifact_2fjslint_report_hello.html.png | Bin 31577 -> 28675 bytes ...wser__2fjslint_2fbranch-master_2findex.html.png | Bin 89561 -> 81671 bytes ...nch-master_2fjslint_wrapper_codemirror.html.png | Bin 32349 -> 29503 bytes branch-master/.artifact/screenshot_changelog.svg | 100 +- .../screenshot_js_coverage_report_spawn.svg | 2 +- .../.artifact/screenshot_package_listing.svg | 20 +- .../screenshot_sh_coverage_report_spawn.svg | 2 +- .../.artifact/screenshot_sh_jslint_dir.svg | 30 +- branch-master/.ci.sh | 2 +- branch-master/.github/workflows/ci.yml | 10 +- .../.github/workflows/on_pull_request.yml | 14 +- branch-master/.github/workflows/publish.yml | 1 - branch-master/CHANGELOG.md | 4 + branch-master/README.md | 60 +- branch-master/index.html | 6 +- branch-master/jslint.js | 37 +- branch-master/jslint.mjs | 37 +- branch-master/jslint_ci.sh | 144 +- branch-master/package.json | 2 +- 39 files changed, 3472 insertions(+), 3417 deletions(-) --- branch-master/.artifact/apidoc.html | 2 +- .../.artifact/asset_image_logo_128.png | Bin 5832 -> 6858 bytes .../.artifact/asset_image_logo_256.png | Bin 9971 -> 11955 bytes .../.artifact/asset_image_logo_32.png | Bin 1470 -> 2076 bytes .../.artifact/asset_image_logo_512.png | Bin 11962 -> 10858 bytes .../.artifact/asset_image_logo_64.png | Bin 2150 -> 3922 bytes .../.artifact/coverage/coverage_report.txt | 4 +- branch-master/.artifact/coverage/index.html | 8 +- .../.artifact/coverage/jslint.mjs.html | 6321 +++++++++-------- .../coverage_sqlite3_js/lib/sqlite3.js.html | 22 +- .../coverage_sqlite3_sh/lib/sqlite3.js.html | 22 +- .../jslint_wrapper_vscode/jslint.mjs | 37 +- .../jslint_wrapper_vscode/package.json | 2 +- .../vscode-jslint-2024.3.26.vsix | Bin 88027 -> 0 bytes .../vscode-jslint-2024.6.28.vsix | Bin 0 -> 88214 bytes ...hot_browser__2f.artifact_2fapidoc.html.png | Bin 70565 -> 64374 bytes ...act_2fcoverage_sqlite3_js_2findex.html.png | Bin 31967 -> 28898 bytes ...age_sqlite3_js_2flib_2fsqlite3.js.html.png | Bin 76731 -> 69327 bytes ...act_2fcoverage_sqlite3_sh_2findex.html.png | Bin 31967 -> 28898 bytes ...age_sqlite3_sh_2flib_2fsqlite3.js.html.png | Bin 75632 -> 69701 bytes ...2f.artifact_2fjslint_report_hello.html.png | Bin 31577 -> 28675 bytes ..._2fjslint_2fbranch-master_2findex.html.png | Bin 89561 -> 81671 bytes ...aster_2fjslint_wrapper_codemirror.html.png | Bin 32349 -> 29503 bytes .../.artifact/screenshot_changelog.svg | 100 +- .../screenshot_js_coverage_report_spawn.svg | 2 +- .../.artifact/screenshot_package_listing.svg | 20 +- .../screenshot_sh_coverage_report_spawn.svg | 2 +- .../.artifact/screenshot_sh_jslint_dir.svg | 30 +- branch-master/.ci.sh | 2 +- branch-master/.github/workflows/ci.yml | 10 +- .../.github/workflows/on_pull_request.yml | 14 +- branch-master/.github/workflows/publish.yml | 1 - branch-master/CHANGELOG.md | 4 + branch-master/README.md | 60 +- branch-master/index.html | 6 +- branch-master/jslint.js | 37 +- branch-master/jslint.mjs | 37 +- branch-master/jslint_ci.sh | 144 +- branch-master/package.json | 2 +- 39 files changed, 3472 insertions(+), 3417 deletions(-) delete mode 100644 branch-master/.artifact/jslint_wrapper_vscode/vscode-jslint-2024.3.26.vsix create mode 100644 branch-master/.artifact/jslint_wrapper_vscode/vscode-jslint-2024.6.28.vsix diff --git a/branch-master/.artifact/apidoc.html b/branch-master/.artifact/apidoc.html index f54fc7335..a7a87b72c 100644 --- a/branch-master/.artifact/apidoc.html +++ b/branch-master/.artifact/apidoc.html @@ -67,7 +67,7 @@
-

API Doc for JSLint (v2024.3.26)

+

API Doc for JSLint (v2024.6.28)

Table of Contents

diff --git a/branch-master/.artifact/asset_image_logo_128.png b/branch-master/.artifact/asset_image_logo_128.png index 8f76c932f2ea1d536fb3fb90d9190fac94992efb..49c718c3a5899a1b77444acdaddde797b7d4116a 100644 GIT binary patch delta 6766 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 delta 5732 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 diff --git a/branch-master/.artifact/asset_image_logo_256.png b/branch-master/.artifact/asset_image_logo_256.png index 9a37655e546e3264472d35cadafc982d9eb5a9aa..0740f2e5b858e3fafc81aa1be3f5432c3b09315f 100644 GIT binary patch literal 11955 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 G3H%>&d;;tM literal 9971 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 diff --git a/branch-master/.artifact/asset_image_logo_32.png b/branch-master/.artifact/asset_image_logo_32.png index d1bcd4097f969ff1a64cfc470e8c10f4fe5c6c62..7841a03d7ad5054b1e26e27ccaad97306b5a6df8 100644 GIT binary patch delta 1972 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 L@0P1rKmUIKu?1@L literal 11962 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 diff --git a/branch-master/.artifact/asset_image_logo_64.png b/branch-master/.artifact/asset_image_logo_64.png index d4ec0cb5f991470910b28347e5f919019448e80c..d1af1484b32c7a56850b1604e970f3b75a34549f 100644 GIT binary patch delta 3876 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 100.00 %
- 13175 / 13175 + 13188 / 13188
- 0 / 13175 + 0 / 13188 @@ -159,11 +159,11 @@ 100.00 %
- 11550 / 11550 + 11563 / 11563
- 0 / 11550 + 0 / 11563 diff --git a/branch-master/.artifact/coverage/jslint.mjs.html b/branch-master/.artifact/coverage/jslint.mjs.html index 6a47baa85..c4ce16b3e 100644 --- a/branch-master/.artifact/coverage/jslint.mjs.html +++ b/branch-master/.artifact/coverage/jslint.mjs.html @@ -143,11 +143,11 @@ 100.00 %
- 11550 / 11550 + 11563 / 11563
- 0 / 11550 + 0 / 11563 @@ -283,8 +283,8 @@
  126.      1    ranges, readFile, readdir, readonly, recursive, reduce, repeat, replace,
  127.      1    resolve, result, reverse, role, round, scriptId, search, set, shebang,
-
  128.      1    shift, signature, single, slice, some, sort, source, spawn, splice, split,
-
  129.      1    stack, stack_trace, start, startOffset, startsWith, statement,
+
  128.      1    shell, shift, signature, single, slice, some, sort, source, spawn, splice,
+
  129.      1    split, stack, stack_trace, start, startOffset, startsWith, statement,
  130.      1    statement_prv, stdio, stop, stop_at, stringify, subscript, switch,
  131.      1    syntax_dict, tenure, test, test_cause, test_internal_error, this, thru,
  132.      1    toLocaleString, toString, token, token_global, token_list, token_nxt,
@@ -321,7 +321,7 @@
  163.      1    + "@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_"
  164.      1    + "`abcdefghijklmnopqrstuvwxyz{|}~\u007f"
  165.      1);
-
  166.      1let jslint_edition = "v2024.3.26";
+
  166.      1let jslint_edition = "v2024.6.28";
  167.      1let jslint_export;                      // The jslint object to be exported.
  168.      1let jslint_fudge = 1;                   // Fudge starting line and starting
  169.      1                                        // ... column to 1.
@@ -729,18 +729,18 @@
  571.    181    };
  572.    181}
  573.      1
-
  574.  14189function htmlEscape(str) {
-
  575.  14189
-
  576.  14189// This function will make <str> html-safe by escaping & < >.
-
  577.  14189
-
  578.  14189    return String(str).replace((
-
  579.  14189        /&/g
-
  580.  14189    ), "&amp;").replace((
-
  581.  14189        /</g
-
  582.  14189    ), "&lt;").replace((
-
  583.  14189        />/g
-
  584.  14189    ), "&gt;");
-
  585.  14189}
+
  574.  14203function htmlEscape(str) {
+
  575.  14203
+
  576.  14203// This function will make <str> html-safe by escaping & < >.
+
  577.  14203
+
  578.  14203    return String(str).replace((
+
  579.  14203        /&/g
+
  580.  14203    ), "&amp;").replace((
+
  581.  14203        /</g
+
  582.  14203    ), "&lt;").replace((
+
  583.  14203        />/g
+
  584.  14203    ), "&gt;");
+
  585.  14203}
  586.      1
  587.    666function jslint(
  588.    666    source = "",                // A text to analyze.
@@ -769,11 +769,11 @@
  611.    666    let import_list = [];       // The array collecting all import-from strings.
  612.    666    let line_list = String(     // The array containing source lines.
  613.    666        "\n" + source
-
  614. 105205    ).split(jslint_rgx_crlf).map(function (line_source) {
-
  615. 105205        return {
-
  616. 105205            line_source
-
  617. 105205        };
-
  618. 105205    });
+
  614. 105158    ).split(jslint_rgx_crlf).map(function (line_source) {
+
  615. 105158        return {
+
  616. 105158            line_source
+
  617. 105158        };
+
  618. 105158    });
  619.    666    let mode_stop = false;      // true if JSLint cannot finish.
  620.    666    let property_dict = empty();        // The object containing the tallied
  621.    666                                        // ... property names.
@@ -801,31 +801,31 @@
  643.    666
  644.    666// Error reportage functions:
  645.    666
-
  646.   8028    function artifact(the_token) {
-
  647.   8028
-
  648.   8028// Return a string representing an artifact.
-
  649.   8028
+
  646.   8034    function artifact(the_token) {
+
  647.   8034
+
  648.   8034// Return a string representing an artifact.
+
  649.   8034
  650.    254        the_token = the_token || state.token_nxt;
-
  651.   8028        return (
-
  652.   5253            (the_token.id === "(string)" || the_token.id === "(number)")
+
  651.   8034        return (
+
  652.   5259            (the_token.id === "(string)" || the_token.id === "(number)")
  653.   2900            ? String(the_token.value)
-
  654.   5128            : the_token.id
-
  655.   8028        );
-
  656.   8028    }
+
  654.   5134            : the_token.id
+
  655.   8034        );
+
  656.   8034    }
  657.    666
-
  658.  31933    function is_equal(aa, bb) {
-
  659.  31933
-
  660.  31933// test_cause:
-
  661.  31933// ["0&&0", "is_equal", "", "", 0]
-
  662.  31933
-
  663.  31933        test_cause("");
-
  664.  31933
-
  665.  31933// Probably deadcode.
-
  666.  31933// if (aa === bb) {
-
  667.  31933//     return true;
-
  668.  31933// }
-
  669.  31933
-
  670.  31933        jslint_assert(!(aa === bb), `Expected !(aa === bb).`);
+
  658.  31922    function is_equal(aa, bb) {
+
  659.  31922
+
  660.  31922// test_cause:
+
  661.  31922// ["0&&0", "is_equal", "", "", 0]
+
  662.  31922
+
  663.  31922        test_cause("");
+
  664.  31922
+
  665.  31922// Probably deadcode.
+
  666.  31922// if (aa === bb) {
+
  667.  31922//     return true;
+
  668.  31922// }
+
  669.  31922
+
  670.  31922        jslint_assert(!(aa === bb), `Expected !(aa === bb).`);
  671.     27        if (Array.isArray(aa)) {
  672.     27            return (
  673.     27                Array.isArray(bb)
@@ -840,122 +840,122 @@
  682.     27                    return is_equal(value, bb[index]);
  683.     27                })
  684.     27            );
-
  685.  31906        }
-
  686.  31906
-
  687.  31906// Probably deadcode.
-
  688.  31906// if (Array.isArray(bb)) {
-
  689.  31906//     return false;
-
  690.  31906// }
-
  691.  31906
-
  692.  31906        jslint_assert(!Array.isArray(bb), `Expected !Array.isArray(bb).`);
-
  693.  31906        switch (aa.id === bb.id && aa.id) {
+
  685.  31895        }
+
  686.  31895
+
  687.  31895// Probably deadcode.
+
  688.  31895// if (Array.isArray(bb)) {
+
  689.  31895//     return false;
+
  690.  31895// }
+
  691.  31895
+
  692.  31895        jslint_assert(!Array.isArray(bb), `Expected !Array.isArray(bb).`);
+
  693.  31895        switch (aa.id === bb.id && aa.id) {
  694.     65        case "(number)":
  695.  23424        case "(string)":
  696.  23424            return aa.value === bb.value;
-
  697.  31933
-
  698.  31933// PR-394 - Bugfix
-
  699.  31933// Fix jslint falsely believing megastring literals `0` and `1` are similar.
-
  700.  31933
+
  697.  31922
+
  698.  31922// PR-394 - Bugfix
+
  699.  31922// Fix jslint falsely believing megastring literals `0` and `1` are similar.
+
  700.  31922
  701.     15        case "`":
  702.     15            if (!is_equal(aa.value, bb.value)) {
  703.     15                return false;
  704.     15            }
  705.     15            break;
-
  706.   8479        }
-
  707.   8479        if (is_weird(aa) || is_weird(bb)) {
+
  706.   8468        }
+
  707.   8468        if (is_weird(aa) || is_weird(bb)) {
  708.     34
  709.     34// test_cause:
  710.     34// ["aa(/./)||{}", "is_equal", "false", "", 0]
  711.     34
  712.     34            test_cause("false");
  713.     34            return false;
-
  714.   8445        }
-
  715.   8445        if (aa.arity === bb.arity && aa.id === bb.id) {
-
  716.   2121            if (aa.id === "." || aa.id === "?.") {
-
  717.   2121
-
  718.   2121// test_cause:
-
  719.   2121// ["aa.bb&&aa.bb", "is_equal", "recurse_arity_id", "", 0]
-
  720.   2121// ["aa?.bb&&aa?.bb", "is_equal", "recurse_arity_id", "", 0]
-
  721.   2121
-
  722.   2121                test_cause("recurse_arity_id");
-
  723.   2121                return (
-
  724.   2121                    is_equal(aa.expression, bb.expression)
-
  725.   2121                    && is_equal(aa.name, bb.name)
-
  726.   2121                );
-
  727.   2121            }
-
  728.   2121            if (aa.arity === "unary") {
-
  729.   2121
-
  730.   2121// test_cause:
-
  731.   2121// ["+0&&+0", "is_equal", "recurse_unary", "", 0]
-
  732.   2121
-
  733.   2121                test_cause("recurse_unary");
-
  734.   2121                return is_equal(aa.expression, bb.expression);
-
  735.   2121            }
-
  736.   2121            if (aa.arity === "binary") {
-
  737.   2121
-
  738.   2121// test_cause:
-
  739.   2121// ["aa[0]&&aa[0]", "is_equal", "recurse_binary", "", 0]
-
  740.   2121
-
  741.   2121                test_cause("recurse_binary");
-
  742.   2121                return (
-
  743.   2121                    aa.id !== "("
-
  744.   2121                    && is_equal(aa.expression[0], bb.expression[0])
-
  745.   2121                    && is_equal(aa.expression[1], bb.expression[1])
-
  746.   2121                );
-
  747.   2121            }
-
  748.   2121            if (aa.arity === "ternary") {
-
  749.   2121
-
  750.   2121// test_cause:
-
  751.   2121// ["aa=(``?``:``)&&(``?``:``)", "is_equal", "recurse_ternary", "", 0]
-
  752.   2121
-
  753.   2121                test_cause("recurse_ternary");
-
  754.   2121                return (
-
  755.   2121                    is_equal(aa.expression[0], bb.expression[0])
-
  756.   2121                    && is_equal(aa.expression[1], bb.expression[1])
-
  757.   2121                    && is_equal(aa.expression[2], bb.expression[2])
-
  758.   2121                );
-
  759.   2121            }
-
  760.   2121
-
  761.   2121// Probably deadcode.
-
  762.   2121// if (aa.arity === "function" || aa.arity === "regexp") {
-
  763.   2121//     return false;
-
  764.   2121// }
-
  765.   2121
-
  766.   2121            jslint_assert(
-
  767.   2121                !(aa.arity === "function" || aa.arity === "regexp"),
-
  768.   2121                `Expected !(aa.arity === "function" || aa.arity === "regexp").`
-
  769.   2121            );
-
  770.   2121
-
  771.   2121// test_cause:
-
  772.   2121// ["undefined&&undefined", "is_equal", "true", "", 0]
-
  773.   2121
-
  774.   2121            test_cause("true");
-
  775.   2121            return true;
-
  776.   6324        }
-
  777.   6324
-
  778.   6324// test_cause:
-
  779.   6324// ["null&&undefined", "is_equal", "false", "", 0]
-
  780.   6324
-
  781.   6324        test_cause("false");
-
  782.   6324        return false;
-
  783.   6324    }
+
  714.   8434        }
+
  715.   8434        if (aa.arity === bb.arity && aa.id === bb.id) {
+
  716.   2127            if (aa.id === "." || aa.id === "?.") {
+
  717.   2127
+
  718.   2127// test_cause:
+
  719.   2127// ["aa.bb&&aa.bb", "is_equal", "recurse_arity_id", "", 0]
+
  720.   2127// ["aa?.bb&&aa?.bb", "is_equal", "recurse_arity_id", "", 0]
+
  721.   2127
+
  722.   2127                test_cause("recurse_arity_id");
+
  723.   2127                return (
+
  724.   2127                    is_equal(aa.expression, bb.expression)
+
  725.   2127                    && is_equal(aa.name, bb.name)
+
  726.   2127                );
+
  727.   2127            }
+
  728.   2127            if (aa.arity === "unary") {
+
  729.   2127
+
  730.   2127// test_cause:
+
  731.   2127// ["+0&&+0", "is_equal", "recurse_unary", "", 0]
+
  732.   2127
+
  733.   2127                test_cause("recurse_unary");
+
  734.   2127                return is_equal(aa.expression, bb.expression);
+
  735.   2127            }
+
  736.   2127            if (aa.arity === "binary") {
+
  737.   2127
+
  738.   2127// test_cause:
+
  739.   2127// ["aa[0]&&aa[0]", "is_equal", "recurse_binary", "", 0]
+
  740.   2127
+
  741.   2127                test_cause("recurse_binary");
+
  742.   2127                return (
+
  743.   2127                    aa.id !== "("
+
  744.   2127                    && is_equal(aa.expression[0], bb.expression[0])
+
  745.   2127                    && is_equal(aa.expression[1], bb.expression[1])
+
  746.   2127                );
+
  747.   2127            }
+
  748.   2127            if (aa.arity === "ternary") {
+
  749.   2127
+
  750.   2127// test_cause:
+
  751.   2127// ["aa=(``?``:``)&&(``?``:``)", "is_equal", "recurse_ternary", "", 0]
+
  752.   2127
+
  753.   2127                test_cause("recurse_ternary");
+
  754.   2127                return (
+
  755.   2127                    is_equal(aa.expression[0], bb.expression[0])
+
  756.   2127                    && is_equal(aa.expression[1], bb.expression[1])
+
  757.   2127                    && is_equal(aa.expression[2], bb.expression[2])
+
  758.   2127                );
+
  759.   2127            }
+
  760.   2127
+
  761.   2127// Probably deadcode.
+
  762.   2127// if (aa.arity === "function" || aa.arity === "regexp") {
+
  763.   2127//     return false;
+
  764.   2127// }
+
  765.   2127
+
  766.   2127            jslint_assert(
+
  767.   2127                !(aa.arity === "function" || aa.arity === "regexp"),
+
  768.   2127                `Expected !(aa.arity === "function" || aa.arity === "regexp").`
+
  769.   2127            );
+
  770.   2127
+
  771.   2127// test_cause:
+
  772.   2127// ["undefined&&undefined", "is_equal", "true", "", 0]
+
  773.   2127
+
  774.   2127            test_cause("true");
+
  775.   2127            return true;
+
  776.   6307        }
+
  777.   6307
+
  778.   6307// test_cause:
+
  779.   6307// ["null&&undefined", "is_equal", "false", "", 0]
+
  780.   6307
+
  781.   6307        test_cause("false");
+
  782.   6307        return false;
+
  783.   6307    }
  784.    666
-
  785.  28704    function is_weird(thing) {
-
  786.  28704        switch (thing.id) {
+
  785.  28677    function is_weird(thing) {
+
  786.  28677        switch (thing.id) {
  787.      1        case "(regexp)":
  788.      1            return true;
  789.      1        case "=>":
  790.      1            return true;
-
  791.    617        case "[":
-
  792.    617            return thing.arity === "unary";
+
  791.    593        case "[":
+
  792.    593            return thing.arity === "unary";
  793.     12        case "function":
  794.     12            return true;
  795.      8        case "{":
  796.      8            return true;
-
  797.  28065        default:
-
  798.  28065            return false;
-
  799.  28704        }
-
  800.  28704    }
+
  797.  28062        default:
+
  798.  28062            return false;
+
  799.  28677        }
+
  800.  28677    }
  801.    666
  802.    106    function stop(code, the_token, a, b, c, d) {
  803.    106
@@ -975,10 +975,10 @@
  817.     28        throw warn_at(code, line, column, a, b, c, d);
  818.     28    }
  819.    666
-
  820. 339116    function test_cause(code, aa, column) {
-
  821. 339116
-
  822. 339116// This function will instrument <cause> to <cause_dict> for test-purposes.
-
  823. 339116
+
  820. 339286    function test_cause(code, aa, column) {
+
  821. 339286
+
  822. 339286// This function will instrument <cause> to <cause_dict> for test-purposes.
+
  823. 339286
  824.   4856        if (option_dict.test_cause) {
  825.   4856            cause_dict[JSON.stringify([
  826.   4856                String(new Error().stack).replace((
@@ -997,7 +997,7 @@
  839.   4856                column || 0
  840.   4856            ])] = true;
  841.   4856        }
-
  842. 339116    }
+
  842. 339286    }
  843.    666
  844.   1070    function warn(code, the_token, a, b, c, d) {
  845.   1070
@@ -1705,12 +1705,12 @@
 1547.    149        let whitespace = "";
 1548.    149        str.trim().replace((
 1549.    149            /^ */gm
-
 1550.  13047        ), function (match0) {
-
 1551.   8402            if (whitespace === "" || match0.length < whitespace.length) {
-
 1552.   6592                whitespace = match0;
-
 1553.   6592            }
-
 1554.  13047            return "";
-
 1555.  13047        });
+
 1550.  13060        ), function (match0) {
+
 1551.   8409            if (whitespace === "" || match0.length < whitespace.length) {
+
 1552.   6599                whitespace = match0;
+
 1553.   6599            }
+
 1554.  13060            return "";
+
 1555.  13060        });
 1556.    149        str = str.replace(new RegExp("^" + whitespace, "gm"), "");
 1557.    149        return str;
 1558.    149    }
@@ -1914,13 +1914,13 @@
 1756.      1    await fsWriteFileWithParents(pathname, html);
 1757.      1}
 1758.      1
-
 1759. 102718function jslint_assert(condition, message) {
-
 1760. 102718
-
 1761. 102718// This function will throw <message> if <condition> is falsy.
-
 1762. 102718
-
 1763. 102716    if (condition) {
-
 1764. 102716        return condition;
-
 1765. 102716    }
+
 1759. 102727function jslint_assert(condition, message) {
+
 1760. 102727
+
 1761. 102727// This function will throw <message> if <condition> is falsy.
+
 1762. 102727
+
 1763. 102725    if (condition) {
+
 1764. 102725        return condition;
+
 1765. 102725    }
 1766.      2    throw new Error(
 1767.      2        `This was caused by a bug in JSLint.
 1768.      2Please open an issue with this stack-trace (and possible example-code) at
@@ -2093,13 +2093,13 @@
 1935.     28
 1936.     28        count = 0;
 1937.     28        ii = 0;
-
 1938.  23223        while (true) {
-
 1939.  23223            ii = code.indexOf("\n", ii) + 1;
-
 1940.  23223            if (ii === 0) {
-
 1941.  23223                break;
-
 1942.  23223            }
-
 1943.  23223            count += 1;
-
 1944.  23223        }
+
 1938.  23104        while (true) {
+
 1939.  23104            ii = code.indexOf("\n", ii) + 1;
+
 1940.  23104            if (ii === 0) {
+
 1941.  23104                break;
+
 1942.  23104            }
+
 1943.  23104            count += 1;
+
 1944.  23104        }
 1945.     28        return count;
 1946.     28    }
 1947.     38
@@ -2358,13 +2358,13 @@
 2200.    666// don't provide good warnings. The functions char_after, char_before,
 2201.    666// read_digits, and char_after_escape help in the parsing of literals.
 2202.    666
-
 2203. 238033    function char_after(match) {
-
 2204. 238033
-
 2205. 238033// Get the next character from the source line. Remove it from the line_source,
-
 2206. 238033// and append it to the snippet. Optionally check that the previous character
-
 2207. 238033// matched an expected value.
-
 2208. 238033
-
 2209.   5980        if (match !== undefined && char !== match) {
+
 2203. 238096    function char_after(match) {
+
 2204. 238096
+
 2205. 238096// Get the next character from the source line. Remove it from the line_source,
+
 2206. 238096// and append it to the snippet. Optionally check that the previous character
+
 2207. 238096// matched an expected value.
+
 2208. 238096
+
 2209.   5986        if (match !== undefined && char !== match) {
 2210.     10
 2211.     10// test_cause:
 2212.     10// ["aa=/[", "char_after", "expected_a", "]", 5]
@@ -2375,20 +2375,20 @@
 2217.     10                ? stop_at("expected_a", line, column - 1, match)
 2218.     10                : stop_at("expected_a_b", line, column, match, char)
 2219.     10            );
-
 2220. 238023        }
-
 2221. 238023        char = line_source.slice(0, 1);
-
 2222. 238023        line_source = line_source.slice(1);
-
 2223. 238023        snippet += char || " ";
-
 2224. 238033        column += 1;
-
 2225. 238033        return char;
-
 2226. 238033    }
+
 2220. 238086        }
+
 2221. 238086        char = line_source.slice(0, 1);
+
 2222. 238086        line_source = line_source.slice(1);
+
 2223. 238086        snippet += char || " ";
+
 2224. 238096        column += 1;
+
 2225. 238096        return char;
+
 2226. 238096    }
 2227.    666
-
 2228.   2951    function char_after_escape(extra) {
-
 2229.   2951
-
 2230.   2951// Validate char after escape "\\".
-
 2231.   2951
-
 2232.   2951        char_after("\\");
-
 2233.   2951        switch (char) {
+
 2228.   2953    function char_after_escape(extra) {
+
 2229.   2953
+
 2230.   2953// Validate char after escape "\\".
+
 2231.   2953
+
 2232.   2953        char_after("\\");
+
 2233.   2953        switch (char) {
 2234.      1        case "":
 2235.      1
 2236.      1// test_cause:
@@ -2405,8 +2405,8 @@
 2247.     62            return char_after();
 2248.      6        case "f":
 2249.      6            return char_after();
-
 2250.   1013        case "n":
-
 2251.   1013            return char_after();
+
 2250.   1015        case "n":
+
 2251.   1015            return char_after();
 2252.     32        case "r":
 2253.     32            return char_after();
 2254.     24        case "t":
@@ -2459,30 +2459,30 @@
 2301.    862// ["\"\\0\"", "char_after_escape", "unexpected_a_before_b", "0", 3]
 2302.    862
 2303.    862            warn_at("unexpected_a_before_b", line, column, "\\", char);
-
 2304.   2951        }
-
 2305.   2951    }
+
 2304.   2953        }
+
 2305.   2953    }
 2306.    666
-
 2307.  10019    function char_before() {
-
 2308.  10019
-
 2309.  10019// Back up one character by moving a character from the end of the snippet to
-
 2310.  10019// the front of the line_source.
-
 2311.  10019
-
 2312.  10019        char = snippet.slice(-1);
-
 2313.  10019        line_source = char + line_source;
-
 2314.  10019        column -= char.length;
-
 2315.  10019
-
 2316.  10019// Remove last character from snippet.
-
 2317.  10019
-
 2318.  10019        snippet = snippet.slice(0, -1);
-
 2319.  10019        return char;
-
 2320.  10019    }
+
 2307.  10013    function char_before() {
+
 2308.  10013
+
 2309.  10013// Back up one character by moving a character from the end of the snippet to
+
 2310.  10013// the front of the line_source.
+
 2311.  10013
+
 2312.  10013        char = snippet.slice(-1);
+
 2313.  10013        line_source = char + line_source;
+
 2314.  10013        column -= char.length;
+
 2315.  10013
+
 2316.  10013// Remove last character from snippet.
+
 2317.  10013
+
 2318.  10013        snippet = snippet.slice(0, -1);
+
 2319.  10013        return char;
+
 2320.  10013    }
 2321.    666
-
 2322.   8930    function check_numeric_separator(digits, column) {
-
 2323.   8930
-
 2324.   8930// This function will check for illegal numeric-separator in <digits>.
-
 2325.   8930
-
 2326.   8930        digits.replace((
-
 2327.   8930            jslint_rgx_numeric_separator_illegal
+
 2322.   8924    function check_numeric_separator(digits, column) {
+
 2323.   8924
+
 2324.   8924// This function will check for illegal numeric-separator in <digits>.
+
 2325.   8924
+
 2326.   8924        digits.replace((
+
 2327.   8924            jslint_rgx_numeric_separator_illegal
 2328.      6        ), function (ignore, ii) {
 2329.      6
 2330.      6// test_cause:
@@ -2495,34 +2495,34 @@
 2337.      6            warn_at("illegal_num_separator", line, column + ii + 1);
 2338.      6            return "";
 2339.      6        });
-
 2340.   8930    }
+
 2340.   8924    }
 2341.    666
-
 2342.  11181    function lex_comment() {
-
 2343.  11181        let body;
-
 2344.  11181        let ii = 0;
-
 2345.  11181        let jj = 0;
-
 2346.  11181        let the_comment;
-
 2347.  11181
-
 2348.  11181// Create a comment object. Comments are not allowed in JSON text. Comments can
-
 2349.  11181// include directives and notices of incompletion.
-
 2350.  11181
-
 2351.  11181// Create token from comment //....
-
 2352.  11181
-
 2353.  11067        if (snippet === "//") {
-
 2354.  11067            snippet = line_source;
-
 2355.  11067            line_source = "";
-
 2356.  11067            the_comment = token_create("(comment)", snippet);
-
 2357.  11067            if (mode_mega) {
-
 2358.  11067
-
 2359.  11067// test_cause:
-
 2360.  11067// ["`${//}`", "lex_comment", "unexpected_comment", "`", 4]
-
 2361.  11067
-
 2362.  11067                warn("unexpected_comment", the_comment, "`");
-
 2363.  11067            }
-
 2364.  11067
-
 2365.  11067// Create token from comment /*...*/.
-
 2366.  11067
-
 2367.  11067        } else {
+
 2342.  11201    function lex_comment() {
+
 2343.  11201        let body;
+
 2344.  11201        let ii = 0;
+
 2345.  11201        let jj = 0;
+
 2346.  11201        let the_comment;
+
 2347.  11201
+
 2348.  11201// Create a comment object. Comments are not allowed in JSON text. Comments can
+
 2349.  11201// include directives and notices of incompletion.
+
 2350.  11201
+
 2351.  11201// Create token from comment //....
+
 2352.  11201
+
 2353.  11087        if (snippet === "//") {
+
 2354.  11087            snippet = line_source;
+
 2355.  11087            line_source = "";
+
 2356.  11087            the_comment = token_create("(comment)", snippet);
+
 2357.  11087            if (mode_mega) {
+
 2358.  11087
+
 2359.  11087// test_cause:
+
 2360.  11087// ["`${//}`", "lex_comment", "unexpected_comment", "`", 4]
+
 2361.  11087
+
 2362.  11087                warn("unexpected_comment", the_comment, "`");
+
 2363.  11087            }
+
 2364.  11087
+
 2365.  11087// Create token from comment /*...*/.
+
 2366.  11087
+
 2367.  11087        } else {
 2368.    114            snippet = [];
 2369.    114            if (line_source[0] === "/") {
 2370.    114
@@ -2574,26 +2574,26 @@
 2416.    114            column += ii + 2;
 2417.    114            line_source = line_source.slice(ii + 2);
 2418.    114            the_comment = token_create("(comment)", snippet);
-
 2419.  11178        }
-
 2420.  11178
-
 2421.  11178// Uncompleted work comment.
-
 2422.  11178
-
 2423.  11178        if (!option_dict.devel && jslint_rgx_todo.test(snippet)) {
+
 2419.  11198        }
+
 2420.  11198
+
 2421.  11198// Uncompleted work comment.
+
 2422.  11198
+
 2423.  11198        if (!option_dict.devel && jslint_rgx_todo.test(snippet)) {
 2424.     16
 2425.     16// test_cause:
 2426.     16// ["//todo", "lex_comment", "todo_comment", "(comment)", 1] //jslint-ignore-line
 2427.     16
 2428.     16            warn("todo_comment", the_comment);
-
 2429.  11178        }
-
 2430.  11178
-
 2431.  11178// Lex directives in comment.
-
 2432.  11178
-
 2433.  11178        [
-
 2434.  11178            the_comment.directive, body
-
 2435.  11178        ] = Array.from(snippet.match(jslint_rgx_directive) || []).slice(1);
-
 2436.  11101        if (the_comment.directive === undefined) {
-
 2437.  11101            return the_comment;
-
 2438.  11101        }
+
 2429.  11198        }
+
 2430.  11198
+
 2431.  11198// Lex directives in comment.
+
 2432.  11198
+
 2433.  11198        [
+
 2434.  11198            the_comment.directive, body
+
 2435.  11198        ] = Array.from(snippet.match(jslint_rgx_directive) || []).slice(1);
+
 2436.  11121        if (the_comment.directive === undefined) {
+
 2437.  11121            return the_comment;
+
 2438.  11121        }
 2439.     77        directive_list.push(the_comment);
 2440.     77        if (!mode_directive) {
 2441.      1
@@ -2612,25 +2612,25 @@
 2454.     76// Lex/loop through each directive in /*...*/
 2455.     76
 2456.     76        ii = 0;
-
 2457.   1830        body.replace(jslint_rgx_directive_part, function (
-
 2458.   1830            match0,
-
 2459.   1830            key,
-
 2460.   1830            val,
-
 2461.   1830            jj
-
 2462.   1830        ) {
+
 2457.   1835        body.replace(jslint_rgx_directive_part, function (
+
 2458.   1835            match0,
+
 2459.   1835            key,
+
 2460.   1835            val,
+
 2461.   1835            jj
+
 2462.   1835        ) {
 2463.     76            if (ii !== jj) {
 2464.     76
 2465.     76// test_cause:
 2466.     76// ["/*jslint !*/", "lex_comment", "bad_directive_a", "!", 1]
 2467.     76
 2468.     76                return stop("bad_directive_a", the_comment, body.slice(ii));
-
 2469.   1829            }
-
 2470.   1829            if (match0 === "") {
+
 2469.   1834            }
+
 2470.   1834            if (match0 === "") {
 2471.     76                return "";
-
 2472.   1754            }
-
 2473.   1754            ii += match0.length;
-
 2474.   1754            switch (the_comment.directive) {
-
 2475.   1754            case "global":
+
 2472.   1759            }
+
 2473.   1759            ii += match0.length;
+
 2474.   1759            switch (the_comment.directive) {
+
 2475.   1759            case "global":
 2476.     76                if (val) {
 2477.     76
 2478.     76// test_cause:
@@ -2654,13 +2654,13 @@
 2496.     99                    warn("bad_option_a", the_comment, key);
 2497.     99                }
 2498.     99                break;
-
 2499.   1646            case "property":
-
 2500.   1646                state.mode_property = true;
-
 2501.   1646                tenure[key] = true;
-
 2502.   1646                break;
-
 2503.   1754            }
-
 2504.   1754            return "";
-
 2505.   1754        });
+
 2499.   1651            case "property":
+
 2500.   1651                state.mode_property = true;
+
 2501.   1651                tenure[key] = true;
+
 2502.   1651                break;
+
 2503.   1759            }
+
 2504.   1759            return "";
+
 2505.   1759        });
 2506.     76        return the_comment;
 2507.     76    }
 2508.    666
@@ -2767,14 +2767,14 @@
 2609.   5963        }
 2610.    789    }
 2611.    666
-
 2612.   8857    function lex_number() {
-
 2613.   8857        let prefix = snippet;
-
 2614.   8857
-
 2615.   8857// PR-390 - Add numeric-separator check.
-
 2616.   8857
-
 2617.   8857        check_numeric_separator(prefix, column - prefix.length);
-
 2618.   8857        char_after();
-
 2619.   2886        switch (prefix === "0" && char) {
+
 2612.   8851    function lex_number() {
+
 2613.   8851        let prefix = snippet;
+
 2614.   8851
+
 2615.   8851// PR-390 - Add numeric-separator check.
+
 2616.   8851
+
 2617.   8851        check_numeric_separator(prefix, column - prefix.length);
+
 2618.   8851        char_after();
+
 2619.   2880        switch (prefix === "0" && char) {
 2620.      3        case "b":
 2621.      6        case "o":
 2622.     33        case "x":
@@ -2786,26 +2786,26 @@
 2628.     33                char_after("n");
 2629.     33            }
 2630.     33            break;
-
 2631.   8824        default:
-
 2632.   8824            if (char === ".") {
-
 2633.   8824                read_digits("d", mode_digits_numeric_separator);
-
 2634.   8824            }
-
 2635.   8824            if (char === "E" || char === "e") {
-
 2636.   8824                char_after(char);
-
 2637.   8824                if (char !== "+" && char !== "-") {
-
 2638.   8824                    char_before();
-
 2639.   8824                }
-
 2640.   8824                read_digits("d", mode_digits_numeric_separator);
-
 2641.   8824            }
-
 2642.   8857        }
-
 2643.   8857
-
 2644.   8857// If the next character after a number is a digit or letter, then something
-
 2645.   8857// unexpected is going on.
-
 2646.   8857
-
 2647.   8857        if (
-
 2648.   1573            (char >= "0" && char <= "9")
+
 2631.   8818        default:
+
 2632.   8818            if (char === ".") {
+
 2633.   8818                read_digits("d", mode_digits_numeric_separator);
+
 2634.   8818            }
+
 2635.   8818            if (char === "E" || char === "e") {
+
 2636.   8818                char_after(char);
+
 2637.   8818                if (char !== "+" && char !== "-") {
+
 2638.   8818                    char_before();
+
 2639.   8818                }
+
 2640.   8818                read_digits("d", mode_digits_numeric_separator);
+
 2641.   8818            }
+
 2642.   8851        }
+
 2643.   8851
+
 2644.   8851// If the next character after a number is a digit or letter, then something
+
 2645.   8851// unexpected is going on.
+
 2646.   8851
+
 2647.   8851        if (
+
 2648.   1567            (char >= "0" && char <= "9")
 2649.     44            || (char >= "a" && char <= "z")
-
 2650.   8856            || (char >= "A" && char <= "Z")
+
 2650.   8850            || (char >= "A" && char <= "Z")
 2651.      1        ) {
 2652.      1
 2653.      1// test_cause:
@@ -2818,10 +2818,10 @@
 2660.      1                snippet.slice(-1),
 2661.      1                snippet.slice(0, -1)
 2662.      1            );
-
 2663.   8856        }
-
 2664.   8856        char_before();
-
 2665.   8856        return token_create("(number)", snippet);
-
 2666.   8856    }
+
 2663.   8850        }
+
 2664.   8850        char_before();
+
 2665.   8850        return token_create("(number)", snippet);
+
 2666.   8850    }
 2667.    666
 2668.    583    function lex_regexp() {
 2669.    583
@@ -2918,12 +2918,12 @@
 2760.    902            }
 2761.    209        }
 2762.    583
-
 2763.    793        function lex_regexp_group() {
-
 2764.    793
-
 2765.    793// RegExp
-
 2766.    793// Lex sequence of characters in regexp.
-
 2767.    793
-
 2768.    793            switch (char) {
+
 2763.    794        function lex_regexp_group() {
+
 2764.    794
+
 2765.    794// RegExp
+
 2766.    794// Lex sequence of characters in regexp.
+
 2767.    794
+
 2768.    794            switch (char) {
 2769.      1            case "":
 2770.      1                warn_at("expected_regexp_factor_a", line, column, char);
 2771.      1                break;
@@ -2939,174 +2939,174 @@
 2781.      1
 2782.      1                warn_at("expected_regexp_factor_a", line, column, char);
 2783.      1                break;
-
 2784.    793            }
-
 2785.   5584            while (true) {
-
 2786.   5584                switch (char) {
-
 2787.   5584                case "":
-
 2788.   5584                case ")":
-
 2789.   5584                case "/":
-
 2790.   5584                case "]":
-
 2791.   5584                    return;
-
 2792.   5584
-
 2793.   5584// PR-362 - Relax regexp-warning against using <space>.
-
 2794.   5584//
-
 2795.   5584//                 case " ":
-
 2796.   5584//
-
 2797.   5584// // test_cause:
-
 2798.   5584// // ["aa=/ /", "lex_regexp_group", "expected_a_b", " ", 5]
-
 2799.   5584//
-
 2800.   5584//                     warn_at("expected_a_b", line, column, "\\s", " ");
-
 2801.   5584//                     char_after();
-
 2802.   5584//                     break;
-
 2803.   5584
-
 2804.   5584                case "$":
-
 2805.   5584                    if (line_source[0] !== "/") {
-
 2806.   5584                        mode_regexp_multiline = true;
-
 2807.   5584                    }
-
 2808.   5584                    char_after();
-
 2809.   5584                    break;
-
 2810.   5584                case "(":
-
 2811.   5584
-
 2812.   5584// RegExp
-
 2813.   5584// Match a group that starts with left paren.
-
 2814.   5584
-
 2815.   5584                    char_after("(");
-
 2816.   5584                    switch (char) {
-
 2817.   5584                    case ":":
-
 2818.   5584
-
 2819.   5584// test_cause:
-
 2820.   5584// ["aa=/(:)/", "lex_regexp_group", "expected_a_before_b", ":", 6]
-
 2821.   5584// ["aa=/?/", "lex_regexp_group", "expected_a_before_b", "?", 5]
-
 2822.   5584
-
 2823.   5584                        warn_at("expected_a_before_b", line, column, "?", ":");
-
 2824.   5584                        break;
-
 2825.   5584                    case "?":
-
 2826.   5584                        char_after("?");
-
 2827.   5584                        switch (char) {
-
 2828.   5584                        case "!":
-
 2829.   5584
-
 2830.   5584// PR-437 - Add grammar for regexp-named-capture-group.
-
 2831.   5584
-
 2832.   5584                        case "<":
-
 2833.   5584                        case "=":
-
 2834.   5584                            char_after();
-
 2835.   5584                            break;
-
 2836.   5584                        default:
-
 2837.   5584                            char_after(":");
-
 2838.   5584                        }
-
 2839.   5584                        break;
-
 2840.   5584                    }
-
 2841.   5584
-
 2842.   5584// RegExp
-
 2843.   5584// Recurse lex_regexp_group().
-
 2844.   5584
-
 2845.   5584                    lex_regexp_group();
-
 2846.   5584                    char_after(")");
-
 2847.   5584                    break;
-
 2848.   5584                case "*":
-
 2849.   5584                case "+":
-
 2850.   5584                case "?":
-
 2851.   5584                case "{":
-
 2852.   5584                case "}":
-
 2853.   5584
-
 2854.   5584// test_cause:
-
 2855.   5584// ["aa=/+/", "lex_regexp_group", "expected_a_before_b", "+", 5]
-
 2856.   5584// ["aa=/.**/", "lex_regexp_group", "expected_a_before_b", "*", 7]
-
 2857.   5584// ["aa=/?/", "lex_regexp_group", "expected_a_before_b", "?", 5]
-
 2858.   5584// ["aa=/{/", "lex_regexp_group", "expected_a_before_b", "{", 5]
-
 2859.   5584// ["aa=/}/", "lex_regexp_group", "expected_a_before_b", "}", 5]
-
 2860.   5584
-
 2861.   5584                    warn_at("expected_a_before_b", line, column, "\\", char);
-
 2862.   5584                    char_after();
-
 2863.   5584                    break;
-
 2864.   5584                case "[":
-
 2865.   5584                    lex_regexp_bracketed();
-
 2866.   5584                    break;
-
 2867.   5584                case "\\":
-
 2868.   5584
-
 2869.   5584// test_cause:
-
 2870.   5584// ["aa=/\\/", "lex_regexp_group", "escape", "", 0]
-
 2871.   5584
-
 2872.   5584                    test_cause("escape");
-
 2873.   5584
-
 2874.   5584// PR-437 - Add grammar for regexp-named-backreference.
-
 2875.   5584
-
 2876.   5584                    char_after_escape("BbDdSsWw^${}[]():=!.|*+?k");
-
 2877.   5584                    break;
-
 2878.   5584                case "^":
-
 2879.   5584                    if (snippet !== "^") {
-
 2880.   5584                        mode_regexp_multiline = true;
-
 2881.   5584                    }
-
 2882.   5584                    char_after();
-
 2883.   5584                    break;
-
 2884.   5584                case "`":
-
 2885.   5584                    if (mode_mega) {
-
 2886.   5584
-
 2887.   5584// test_cause:
-
 2888.   5584// ["`${/`/}`", "lex_regexp_group", "unexpected_a", "`", 5]
-
 2889.   5584
-
 2890.   5584                        warn_at("unexpected_a", line, column, "`");
-
 2891.   5584                    }
-
 2892.   5584                    char_after();
-
 2893.   5584                    break;
-
 2894.   5584                default:
-
 2895.   5584                    char_after();
-
 2896.   5584                }
-
 2897.   5584
-
 2898.   5584// RegExp
-
 2899.   5584// Match an optional quantifier.
-
 2900.   5584
-
 2901.   5584                switch (char) {
-
 2902.   5584                case "*":
-
 2903.   5584                case "+":
-
 2904.   5584                    if (char_after(char) === "?") {
-
 2905.   5584
-
 2906.   5584// test_cause:
-
 2907.   5584// ["aa=/.*?/", "lex_regexp_group", "?", "", 0]
-
 2908.   5584// ["aa=/.+?/", "lex_regexp_group", "?", "", 0]
-
 2909.   5584
-
 2910.   5584                        test_cause("?");
-
 2911.   5584                        char_after("?");
-
 2912.   5584                    }
-
 2913.   5584                    break;
-
 2914.   5584                case "?":
-
 2915.   5584                    if (char_after("?") === "?") {
-
 2916.   5584
-
 2917.   5584// test_cause:
-
 2918.   5584// ["aa=/.??/", "lex_regexp_group", "unexpected_a", "?", 7]
-
 2919.   5584
-
 2920.   5584                        warn_at("unexpected_a", line, column, char);
-
 2921.   5584                        char_after("?");
-
 2922.   5584                    }
-
 2923.   5584                    break;
-
 2924.   5584                case "{":
-
 2925.   5584                    if (read_digits("d", mode_digits_empty_string) === 0) {
-
 2926.   5584
-
 2927.   5584// test_cause:
-
 2928.   5584// ["aa=/aa{/", "lex_regexp_group", "expected_a_before_b", ",", 8]
-
 2929.   5584
-
 2930.   5584                        warn_at("expected_a_before_b", line, column, "0", ",");
-
 2931.   5584                    }
-
 2932.   5584                    if (char === ",") {
-
 2933.   5584
-
 2934.   5584// test_cause:
-
 2935.   5584// ["aa=/.{,/", "lex_regexp_group", "comma", "", 0]
-
 2936.   5584
-
 2937.   5584                        test_cause("comma");
-
 2938.   5584                        read_digits("d", mode_digits_empty_string);
-
 2939.   5584                    }
-
 2940.   5584                    if (char_after("}") === "?") {
-
 2941.   5584
-
 2942.   5584// test_cause:
-
 2943.   5584// ["aa=/.{0}?/", "lex_regexp_group", "unexpected_a", "?", 9]
-
 2944.   5584
-
 2945.   5584                        warn_at("unexpected_a", line, column, char);
-
 2946.   5584                        char_after("?");
-
 2947.   5584                    }
-
 2948.   5584                    break;
-
 2949.   5584                }
-
 2950.   5584            }
-
 2951.    793        }
+
 2784.    794            }
+
 2785.   5589            while (true) {
+
 2786.   5589                switch (char) {
+
 2787.   5589                case "":
+
 2788.   5589                case ")":
+
 2789.   5589                case "/":
+
 2790.   5589                case "]":
+
 2791.   5589                    return;
+
 2792.   5589
+
 2793.   5589// PR-362 - Relax regexp-warning against using <space>.
+
 2794.   5589//
+
 2795.   5589//                 case " ":
+
 2796.   5589//
+
 2797.   5589// // test_cause:
+
 2798.   5589// // ["aa=/ /", "lex_regexp_group", "expected_a_b", " ", 5]
+
 2799.   5589//
+
 2800.   5589//                     warn_at("expected_a_b", line, column, "\\s", " ");
+
 2801.   5589//                     char_after();
+
 2802.   5589//                     break;
+
 2803.   5589
+
 2804.   5589                case "$":
+
 2805.   5589                    if (line_source[0] !== "/") {
+
 2806.   5589                        mode_regexp_multiline = true;
+
 2807.   5589                    }
+
 2808.   5589                    char_after();
+
 2809.   5589                    break;
+
 2810.   5589                case "(":
+
 2811.   5589
+
 2812.   5589// RegExp
+
 2813.   5589// Match a group that starts with left paren.
+
 2814.   5589
+
 2815.   5589                    char_after("(");
+
 2816.   5589                    switch (char) {
+
 2817.   5589                    case ":":
+
 2818.   5589
+
 2819.   5589// test_cause:
+
 2820.   5589// ["aa=/(:)/", "lex_regexp_group", "expected_a_before_b", ":", 6]
+
 2821.   5589// ["aa=/?/", "lex_regexp_group", "expected_a_before_b", "?", 5]
+
 2822.   5589
+
 2823.   5589                        warn_at("expected_a_before_b", line, column, "?", ":");
+
 2824.   5589                        break;
+
 2825.   5589                    case "?":
+
 2826.   5589                        char_after("?");
+
 2827.   5589                        switch (char) {
+
 2828.   5589                        case "!":
+
 2829.   5589
+
 2830.   5589// PR-437 - Add grammar for regexp-named-capture-group.
+
 2831.   5589
+
 2832.   5589                        case "<":
+
 2833.   5589                        case "=":
+
 2834.   5589                            char_after();
+
 2835.   5589                            break;
+
 2836.   5589                        default:
+
 2837.   5589                            char_after(":");
+
 2838.   5589                        }
+
 2839.   5589                        break;
+
 2840.   5589                    }
+
 2841.   5589
+
 2842.   5589// RegExp
+
 2843.   5589// Recurse lex_regexp_group().
+
 2844.   5589
+
 2845.   5589                    lex_regexp_group();
+
 2846.   5589                    char_after(")");
+
 2847.   5589                    break;
+
 2848.   5589                case "*":
+
 2849.   5589                case "+":
+
 2850.   5589                case "?":
+
 2851.   5589                case "{":
+
 2852.   5589                case "}":
+
 2853.   5589
+
 2854.   5589// test_cause:
+
 2855.   5589// ["aa=/+/", "lex_regexp_group", "expected_a_before_b", "+", 5]
+
 2856.   5589// ["aa=/.**/", "lex_regexp_group", "expected_a_before_b", "*", 7]
+
 2857.   5589// ["aa=/?/", "lex_regexp_group", "expected_a_before_b", "?", 5]
+
 2858.   5589// ["aa=/{/", "lex_regexp_group", "expected_a_before_b", "{", 5]
+
 2859.   5589// ["aa=/}/", "lex_regexp_group", "expected_a_before_b", "}", 5]
+
 2860.   5589
+
 2861.   5589                    warn_at("expected_a_before_b", line, column, "\\", char);
+
 2862.   5589                    char_after();
+
 2863.   5589                    break;
+
 2864.   5589                case "[":
+
 2865.   5589                    lex_regexp_bracketed();
+
 2866.   5589                    break;
+
 2867.   5589                case "\\":
+
 2868.   5589
+
 2869.   5589// test_cause:
+
 2870.   5589// ["aa=/\\/", "lex_regexp_group", "escape", "", 0]
+
 2871.   5589
+
 2872.   5589                    test_cause("escape");
+
 2873.   5589
+
 2874.   5589// PR-437 - Add grammar for regexp-named-backreference.
+
 2875.   5589
+
 2876.   5589                    char_after_escape("BbDdSsWw^${}[]():=!.|*+?k");
+
 2877.   5589                    break;
+
 2878.   5589                case "^":
+
 2879.   5589                    if (snippet !== "^") {
+
 2880.   5589                        mode_regexp_multiline = true;
+
 2881.   5589                    }
+
 2882.   5589                    char_after();
+
 2883.   5589                    break;
+
 2884.   5589                case "`":
+
 2885.   5589                    if (mode_mega) {
+
 2886.   5589
+
 2887.   5589// test_cause:
+
 2888.   5589// ["`${/`/}`", "lex_regexp_group", "unexpected_a", "`", 5]
+
 2889.   5589
+
 2890.   5589                        warn_at("unexpected_a", line, column, "`");
+
 2891.   5589                    }
+
 2892.   5589                    char_after();
+
 2893.   5589                    break;
+
 2894.   5589                default:
+
 2895.   5589                    char_after();
+
 2896.   5589                }
+
 2897.   5589
+
 2898.   5589// RegExp
+
 2899.   5589// Match an optional quantifier.
+
 2900.   5589
+
 2901.   5589                switch (char) {
+
 2902.   5589                case "*":
+
 2903.   5589                case "+":
+
 2904.   5589                    if (char_after(char) === "?") {
+
 2905.   5589
+
 2906.   5589// test_cause:
+
 2907.   5589// ["aa=/.*?/", "lex_regexp_group", "?", "", 0]
+
 2908.   5589// ["aa=/.+?/", "lex_regexp_group", "?", "", 0]
+
 2909.   5589
+
 2910.   5589                        test_cause("?");
+
 2911.   5589                        char_after("?");
+
 2912.   5589                    }
+
 2913.   5589                    break;
+
 2914.   5589                case "?":
+
 2915.   5589                    if (char_after("?") === "?") {
+
 2916.   5589
+
 2917.   5589// test_cause:
+
 2918.   5589// ["aa=/.??/", "lex_regexp_group", "unexpected_a", "?", 7]
+
 2919.   5589
+
 2920.   5589                        warn_at("unexpected_a", line, column, char);
+
 2921.   5589                        char_after("?");
+
 2922.   5589                    }
+
 2923.   5589                    break;
+
 2924.   5589                case "{":
+
 2925.   5589                    if (read_digits("d", mode_digits_empty_string) === 0) {
+
 2926.   5589
+
 2927.   5589// test_cause:
+
 2928.   5589// ["aa=/aa{/", "lex_regexp_group", "expected_a_before_b", ",", 8]
+
 2929.   5589
+
 2930.   5589                        warn_at("expected_a_before_b", line, column, "0", ",");
+
 2931.   5589                    }
+
 2932.   5589                    if (char === ",") {
+
 2933.   5589
+
 2934.   5589// test_cause:
+
 2935.   5589// ["aa=/.{,/", "lex_regexp_group", "comma", "", 0]
+
 2936.   5589
+
 2937.   5589                        test_cause("comma");
+
 2938.   5589                        read_digits("d", mode_digits_empty_string);
+
 2939.   5589                    }
+
 2940.   5589                    if (char_after("}") === "?") {
+
 2941.   5589
+
 2942.   5589// test_cause:
+
 2943.   5589// ["aa=/.{0}?/", "lex_regexp_group", "unexpected_a", "?", 9]
+
 2944.   5589
+
 2945.   5589                        warn_at("unexpected_a", line, column, char);
+
 2946.   5589                        char_after("?");
+
 2947.   5589                    }
+
 2948.   5589                    break;
+
 2949.   5589                }
+
 2950.   5589            }
+
 2951.    794        }
 2952.    583
 2953.    583// RegExp
 2954.    583// Scan the regexp literal. Give a warning if the first character is = because
@@ -3303,154 +3303,154 @@
 3145.     15        return token_create(snippet);
 3146.     15    }
 3147.    666
-
 3148.  24308    function lex_string(quote) {
-
 3149.  24308
-
 3150.  24308// Create a string token.
-
 3151.  24308
-
 3152.  24308        let the_token;
-
 3153.  24306        if (!option_dict.single && quote === "'") {
+
 3148.  24320    function lex_string(quote) {
+
 3149.  24320
+
 3150.  24320// Create a string token.
+
 3151.  24320
+
 3152.  24320        let the_token;
+
 3153.  24318        if (!option_dict.single && quote === "'") {
 3154.      2
 3155.      2// test_cause:
 3156.      2// ["''", "lex_string", "use_double", "", 1]
 3157.      2
 3158.      2            warn_at("use_double", line, column);
 3159.      2        }
-
 3160.  24308        snippet = "";
-
 3161.  24308        char_after();
-
 3162.  24308
-
 3163.  24308// Lex/loop through each character in "...".
-
 3164.  24308
-
 3165. 216882        while (true) {
-
 3166. 216882            switch (char) {
-
 3167. 216882            case "":
-
 3168. 216882
-
 3169. 216882// test_cause:
-
 3170. 216882// ["\"", "lex_string", "unclosed_string", "", 1]
-
 3171. 216882
-
 3172. 216882                return stop_at("unclosed_string", line, column);
-
 3173. 216882            case "\\":
-
 3174. 216882                char_after_escape(quote);
-
 3175. 216882                break;
-
 3176. 216882            case "`":
-
 3177. 216882                if (mode_mega) {
-
 3178. 216882
-
 3179. 216882// test_cause:
-
 3180. 216882// ["`${\"`\"}`", "lex_string", "unexpected_a", "`", 5]
-
 3181. 216882
-
 3182. 216882                    warn_at("unexpected_a", line, column, "`");
-
 3183. 216882                }
-
 3184. 216882                char_after("`");
-
 3185. 216882                break;
-
 3186. 216882            case quote:
-
 3187. 216882
-
 3188. 216882// Remove last character from snippet.
-
 3189. 216882
-
 3190. 216882                snippet = snippet.slice(0, -1);
-
 3191. 216882                the_token = token_create("(string)", snippet);
-
 3192. 216882                the_token.quote = quote;
-
 3193. 216882                return the_token;
-
 3194. 216882            default:
-
 3195. 216882                char_after();
-
 3196. 216882            }
-
 3197. 216882        }
-
 3198.  24308    }
+
 3160.  24320        snippet = "";
+
 3161.  24320        char_after();
+
 3162.  24320
+
 3163.  24320// Lex/loop through each character in "...".
+
 3164.  24320
+
 3165. 216942        while (true) {
+
 3166. 216942            switch (char) {
+
 3167. 216942            case "":
+
 3168. 216942
+
 3169. 216942// test_cause:
+
 3170. 216942// ["\"", "lex_string", "unclosed_string", "", 1]
+
 3171. 216942
+
 3172. 216942                return stop_at("unclosed_string", line, column);
+
 3173. 216942            case "\\":
+
 3174. 216942                char_after_escape(quote);
+
 3175. 216942                break;
+
 3176. 216942            case "`":
+
 3177. 216942                if (mode_mega) {
+
 3178. 216942
+
 3179. 216942// test_cause:
+
 3180. 216942// ["`${\"`\"}`", "lex_string", "unexpected_a", "`", 5]
+
 3181. 216942
+
 3182. 216942                    warn_at("unexpected_a", line, column, "`");
+
 3183. 216942                }
+
 3184. 216942                char_after("`");
+
 3185. 216942                break;
+
 3186. 216942            case quote:
+
 3187. 216942
+
 3188. 216942// Remove last character from snippet.
+
 3189. 216942
+
 3190. 216942                snippet = snippet.slice(0, -1);
+
 3191. 216942                the_token = token_create("(string)", snippet);
+
 3192. 216942                the_token.quote = quote;
+
 3193. 216942                return the_token;
+
 3194. 216942            default:
+
 3195. 216942                char_after();
+
 3196. 216942            }
+
 3197. 216942        }
+
 3198.  24320    }
 3199.    666
-
 3200. 251943    function lex_token() {
-
 3201. 251943        let match;
-
 3202. 251943
-
 3203. 251943// Lex/loop through each whitespace.
-
 3204. 251943
-
 3205. 375587        while (true) {
-
 3206. 375587
-
 3207. 375587// Lex/loop through each blank-line.
-
 3208. 375587
-
 3209. 375587            while (!line_source) {
-
 3210. 375587                line_source = read_line();
-
 3211. 375587                from = 0;
-
 3212. 375587                if (line_source === undefined) {
-
 3213. 375587                    return (
-
 3214. 375587                        mode_mega
-
 3215. 375587
-
 3216. 375587// test_cause:
-
 3217. 375587// ["`${//}`", "lex_token", "unclosed_mega", "", 1]
-
 3218. 375587
-
 3219. 375587                        ? stop_at("unclosed_mega", line_mega, from_mega)
-
 3220. 375587                        : line_disable !== undefined
-
 3221. 375587
-
 3222. 375587// test_cause:
-
 3223. 375587// ["/*jslint-disable*/", "lex_token", "unclosed_disable", "", 1]
-
 3224. 375587
-
 3225. 375587                        ? stop_at("unclosed_disable", line_disable)
-
 3226. 375587                        : token_create("(end)")
-
 3227. 375587                    );
-
 3228. 375587                }
-
 3229. 375587            }
-
 3230. 375587            from = column;
-
 3231. 375587            match = line_source.match(jslint_rgx_token);
-
 3232. 375587
-
 3233. 375587// match[1] token
-
 3234. 375587// match[2] whitespace
-
 3235. 375587// match[3] identifier
-
 3236. 375587// match[4] number
-
 3237. 375587// match[5] rest
-
 3238. 375587
-
 3239. 375587            if (!match) {
-
 3240. 375587
-
 3241. 375587// test_cause:
-
 3242. 375587// ["#", "lex_token", "unexpected_char_a", "#", 1]
-
 3243. 375587
-
 3244. 375587                return stop_at(
-
 3245. 375587                    "unexpected_char_a",
-
 3246. 375587                    line,
-
 3247. 375587                    column,
-
 3248. 375587                    line_source[0]
-
 3249. 375587                );
-
 3250. 375587            }
-
 3251. 375587            snippet = match[1];
-
 3252. 375587            column += snippet.length;
-
 3253. 375587            line_source = match[5];
-
 3254. 375587            if (!match[2]) {
-
 3255. 375587                break;
-
 3256. 375587            }
-
 3257. 375587        }
-
 3258. 251302
-
 3259. 251302// The token is an identifier.
-
 3260. 251302
-
 3261. 251302        if (match[3]) {
-
 3262.  67598            return token_create(snippet, undefined, true);
-
 3263. 183704        }
-
 3264. 183704
-
 3265. 183704// Create token from number.
-
 3266. 183704
-
 3267. 183704        if (match[4]) {
-
 3268.   8857            return lex_number();
-
 3269. 174847        }
-
 3270. 174847
-
 3271. 174847// Create token from string "..." or '...'.
-
 3272. 174847
-
 3273. 174847        if (snippet === "\"" || snippet === "'") {
-
 3274.  24308            return lex_string(snippet);
-
 3275. 150539        }
-
 3276. 150539
-
 3277. 150539// Create token from megastring `...`.
-
 3278. 150539
-
 3279. 150539        if (snippet === "`") {
+
 3200. 252113    function lex_token() {
+
 3201. 252113        let match;
+
 3202. 252113
+
 3203. 252113// Lex/loop through each whitespace.
+
 3204. 252113
+
 3205. 375837        while (true) {
+
 3206. 375837
+
 3207. 375837// Lex/loop through each blank-line.
+
 3208. 375837
+
 3209. 375837            while (!line_source) {
+
 3210. 375837                line_source = read_line();
+
 3211. 375837                from = 0;
+
 3212. 375837                if (line_source === undefined) {
+
 3213. 375837                    return (
+
 3214. 375837                        mode_mega
+
 3215. 375837
+
 3216. 375837// test_cause:
+
 3217. 375837// ["`${//}`", "lex_token", "unclosed_mega", "", 1]
+
 3218. 375837
+
 3219. 375837                        ? stop_at("unclosed_mega", line_mega, from_mega)
+
 3220. 375837                        : line_disable !== undefined
+
 3221. 375837
+
 3222. 375837// test_cause:
+
 3223. 375837// ["/*jslint-disable*/", "lex_token", "unclosed_disable", "", 1]
+
 3224. 375837
+
 3225. 375837                        ? stop_at("unclosed_disable", line_disable)
+
 3226. 375837                        : token_create("(end)")
+
 3227. 375837                    );
+
 3228. 375837                }
+
 3229. 375837            }
+
 3230. 375837            from = column;
+
 3231. 375837            match = line_source.match(jslint_rgx_token);
+
 3232. 375837
+
 3233. 375837// match[1] token
+
 3234. 375837// match[2] whitespace
+
 3235. 375837// match[3] identifier
+
 3236. 375837// match[4] number
+
 3237. 375837// match[5] rest
+
 3238. 375837
+
 3239. 375837            if (!match) {
+
 3240. 375837
+
 3241. 375837// test_cause:
+
 3242. 375837// ["#", "lex_token", "unexpected_char_a", "#", 1]
+
 3243. 375837
+
 3244. 375837                return stop_at(
+
 3245. 375837                    "unexpected_char_a",
+
 3246. 375837                    line,
+
 3247. 375837                    column,
+
 3248. 375837                    line_source[0]
+
 3249. 375837                );
+
 3250. 375837            }
+
 3251. 375837            snippet = match[1];
+
 3252. 375837            column += snippet.length;
+
 3253. 375837            line_source = match[5];
+
 3254. 375837            if (!match[2]) {
+
 3255. 375837                break;
+
 3256. 375837            }
+
 3257. 375837        }
+
 3258. 251472
+
 3259. 251472// The token is an identifier.
+
 3260. 251472
+
 3261. 251472        if (match[3]) {
+
 3262.  67660            return token_create(snippet, undefined, true);
+
 3263. 183812        }
+
 3264. 183812
+
 3265. 183812// Create token from number.
+
 3266. 183812
+
 3267. 183812        if (match[4]) {
+
 3268.   8851            return lex_number();
+
 3269. 174961        }
+
 3270. 174961
+
 3271. 174961// Create token from string "..." or '...'.
+
 3272. 174961
+
 3273. 174961        if (snippet === "\"" || snippet === "'") {
+
 3274.  24320            return lex_string(snippet);
+
 3275. 150641        }
+
 3276. 150641
+
 3277. 150641// Create token from megastring `...`.
+
 3278. 150641
+
 3279. 150641        if (snippet === "`") {
 3280.    789            return lex_megastring();
-
 3281. 149750        }
-
 3282. 149750
-
 3283. 149750// Create token from comment /*...*/ or //....
-
 3284. 149750
-
 3285. 149750        if (snippet === "/*" || snippet === "//") {
-
 3286.  11181            return lex_comment();
-
 3287. 138569        }
-
 3288. 138569
-
 3289. 138569// Create token from slash /.
-
 3290. 138569
-
 3291. 138569        if (snippet === "/") {
+
 3281. 149852        }
+
 3282. 149852
+
 3283. 149852// Create token from comment /*...*/ or //....
+
 3284. 149852
+
 3285. 149852        if (snippet === "/*" || snippet === "//") {
+
 3286.  11201            return lex_comment();
+
 3287. 138651        }
+
 3288. 138651
+
 3289. 138651// Create token from slash /.
+
 3290. 138651
+
 3291. 138651        if (snippet === "/") {
 3292.    598            return lex_slash_or_regexp();
-
 3293. 137971        }
-
 3294. 137971        return token_create(snippet);
-
 3295. 137971    }
+
 3293. 138053        }
+
 3294. 138053        return token_create(snippet);
+
 3295. 138053    }
 3296.    666
 3297.   2659    function option_set_item(key, val) {
 3298.   2659
@@ -3838,15 +3838,15 @@
 3680.    469        return digits.length;
 3681.    469    }
 3682.    666
-
 3683. 105181    function read_line() {
-
 3684. 105181
-
 3685. 105181// Put the next line of source in line_source. If the line contains tabs,
-
 3686. 105181// replace them with spaces and give a warning. Also warn if the line contains
-
 3687. 105181// unsafe characters or is too damn long.
-
 3688. 105181
-
 3689. 105181        if (
-
 3690. 105181            !option_dict.long
-
 3691. 105177            && line_whole.length > 80
+
 3683. 105134    function read_line() {
+
 3684. 105134
+
 3685. 105134// Put the next line of source in line_source. If the line contains tabs,
+
 3686. 105134// replace them with spaces and give a warning. Also warn if the line contains
+
 3687. 105134// unsafe characters or is too damn long.
+
 3688. 105134
+
 3689. 105134        if (
+
 3690. 105134            !option_dict.long
+
 3691. 105130            && line_whole.length > 80
 3692.     56            && line_disable === undefined
 3693.     56            && !state.mode_json
 3694.     23            && token_1
@@ -3858,59 +3858,59 @@
 3700.     13
 3701.     13            warn_at("too_long", line);
 3702.     13        }
-
 3703. 105181        column = 0;
-
 3704. 105181        line += 1;
-
 3705. 105181        mode_regexp = false;
-
 3706. 105181        line_source = undefined;
-
 3707. 105181        line_whole = "";
+
 3703. 105134        column = 0;
+
 3704. 105134        line += 1;
+
 3705. 105134        mode_regexp = false;
+
 3706. 105134        line_source = undefined;
+
 3707. 105134        line_whole = "";
 3708.    643        if (line_list[line] === undefined) {
 3709.    643            return line_source;
-
 3710. 104538        }
-
 3711. 104538        line_source = line_list[line].line_source;
-
 3712. 104538        line_whole = line_source;
-
 3713. 104538
-
 3714. 104538// Scan each line for following ignore-directives:
-
 3715. 104538// "/*jslint-disable*/"
-
 3716. 104538// "/*jslint-enable*/"
-
 3717. 104538// "//jslint-ignore-line"
-
 3718. 104538
-
 3719. 104538        if (line_source === "/*jslint-disable*/") {
+
 3710. 104491        }
+
 3711. 104491        line_source = line_list[line].line_source;
+
 3712. 104491        line_whole = line_source;
+
 3713. 104491
+
 3714. 104491// Scan each line for following ignore-directives:
+
 3715. 104491// "/*jslint-disable*/"
+
 3716. 104491// "/*jslint-enable*/"
+
 3717. 104491// "//jslint-ignore-line"
+
 3718. 104491
+
 3719. 104491        if (line_source === "/*jslint-disable*/") {
 3720.      5
 3721.      5// test_cause:
 3722.      5// ["/*jslint-disable*/", "read_line", "jslint_disable", "", 0]
 3723.      5
 3724.      5            test_cause("jslint_disable");
 3725.      5            line_disable = line;
-
 3726. 104533        } else if (line_source === "/*jslint-enable*/") {
-
 3727. 104533            if (line_disable === undefined) {
-
 3728. 104533
-
 3729. 104533// test_cause:
-
 3730. 104533// ["/*jslint-enable*/", "read_line", "unopened_enable", "", 1]
-
 3731. 104533
-
 3732. 104533                stop_at("unopened_enable", line);
-
 3733. 104533            }
-
 3734. 104533            line_disable = undefined;
-
 3735. 104533        } else if (
-
 3736. 104533            line_source.endsWith(" //jslint-ignore-line")
-
 3737. 104533            || line_source.endsWith(" //jslint-quiet")
-
 3738. 104533        ) {
-
 3739. 104533
-
 3740. 104533// test_cause:
-
 3741. 104533// ["0 //jslint-ignore-line", "read_line", "jslint_ignore_line", "", 0]
-
 3742. 104533
-
 3743. 104533            test_cause("jslint_ignore_line");
-
 3744. 104533            line_list[line].directive_ignore_line = true;
-
 3745. 104537        }
-
 3746. 104537        if (line_disable !== undefined) {
+
 3726. 104486        } else if (line_source === "/*jslint-enable*/") {
+
 3727. 104486            if (line_disable === undefined) {
+
 3728. 104486
+
 3729. 104486// test_cause:
+
 3730. 104486// ["/*jslint-enable*/", "read_line", "unopened_enable", "", 1]
+
 3731. 104486
+
 3732. 104486                stop_at("unopened_enable", line);
+
 3733. 104486            }
+
 3734. 104486            line_disable = undefined;
+
 3735. 104486        } else if (
+
 3736. 104486            line_source.endsWith(" //jslint-ignore-line")
+
 3737. 104486            || line_source.endsWith(" //jslint-quiet")
+
 3738. 104486        ) {
+
 3739. 104486
+
 3740. 104486// test_cause:
+
 3741. 104486// ["0 //jslint-ignore-line", "read_line", "jslint_ignore_line", "", 0]
+
 3742. 104486
+
 3743. 104486            test_cause("jslint_ignore_line");
+
 3744. 104486            line_list[line].directive_ignore_line = true;
+
 3745. 104490        }
+
 3746. 104490        if (line_disable !== undefined) {
 3747.      9
 3748.      9// test_cause:
 3749.      9// ["/*jslint-disable*/\n0", "read_line", "line_disable", "", 0]
 3750.      9
 3751.      9            test_cause("line_disable");
 3752.      9            line_source = "";
-
 3753. 104537        }
-
 3754. 104537        // jslint_rgx_tab
-
 3755. 104537        if (line_source.indexOf("\t") >= 0) {
+
 3753. 104490        }
+
 3754. 104490        // jslint_rgx_tab
+
 3755. 104490        if (line_source.indexOf("\t") >= 0) {
 3756.      3            if (!option_dict.white) {
 3757.      3
 3758.      3// test_cause:
@@ -3919,47 +3919,47 @@
 3761.      3                warn_at("use_spaces", line, line_source.indexOf("\t") + 1);
 3762.      3            }
 3763.      3            line_source = line_source.replace(jslint_rgx_tab, " ");
-
 3764. 104537        }
-
 3765. 104537        if (!option_dict.white && line_source.endsWith(" ")) {
+
 3764. 104490        }
+
 3765. 104490        if (!option_dict.white && line_source.endsWith(" ")) {
 3766.      2
 3767.      2// test_cause:
 3768.      2// [" ", "read_line", "unexpected_trailing_space", "", 1]
 3769.      2
 3770.      2            warn_at("unexpected_trailing_space", line, line_source.length - 1);
-
 3771. 104537        }
-
 3772. 104537        return line_source;
-
 3773. 104537    }
+
 3771. 104490        }
+
 3772. 104490        return line_source;
+
 3773. 104490    }
 3774.    666
-
 3775. 254929    function token_create(id, value, identifier) {
-
 3776. 254929
-
 3777. 254929// Create the token object and append it to token_list.
-
 3778. 254929
-
 3779. 254929        let the_token = {
-
 3780. 254929            from,
-
 3781. 254929            id,
-
 3782. 254929            identifier: Boolean(identifier),
-
 3783. 254929            line,
-
 3784. 254929            nr: token_list.length,
-
 3785. 254929            thru: column,
-
 3786. 254929            value
-
 3787. 254929        };
-
 3788. 254929        token_list.push(the_token);
-
 3789. 254929
-
 3790. 254929// Directives must appear before the first statement.
-
 3791. 254929
-
 3792. 243751        if (id !== "(comment)" && id !== ";") {
-
 3793. 227751            mode_directive = false;
-
 3794. 227751        }
-
 3795. 254929
-
 3796. 254929// If this token is an identifier that touches a preceding number, or
-
 3797. 254929// a "/", comment, or regular expression literal that touches a preceding
-
 3798. 254929// comment or regular expression literal, then give a missing space warning.
-
 3799. 254929// This warning is not suppressed by option_dict.white.
-
 3800. 254929
-
 3801. 254929        if (
-
 3802. 254929            token_prv.line === line
-
 3803. 185625            && token_prv.thru === from
-
 3804. 119780            && (id === "(comment)" || id === "(regexp)" || id === "/")
+
 3775. 255099    function token_create(id, value, identifier) {
+
 3776. 255099
+
 3777. 255099// Create the token object and append it to token_list.
+
 3778. 255099
+
 3779. 255099        let the_token = {
+
 3780. 255099            from,
+
 3781. 255099            id,
+
 3782. 255099            identifier: Boolean(identifier),
+
 3783. 255099            line,
+
 3784. 255099            nr: token_list.length,
+
 3785. 255099            thru: column,
+
 3786. 255099            value
+
 3787. 255099        };
+
 3788. 255099        token_list.push(the_token);
+
 3789. 255099
+
 3790. 255099// Directives must appear before the first statement.
+
 3791. 255099
+
 3792. 243901        if (id !== "(comment)" && id !== ";") {
+
 3793. 227889            mode_directive = false;
+
 3794. 227889        }
+
 3795. 255099
+
 3796. 255099// If this token is an identifier that touches a preceding number, or
+
 3797. 255099// a "/", comment, or regular expression literal that touches a preceding
+
 3798. 255099// comment or regular expression literal, then give a missing space warning.
+
 3799. 255099// This warning is not suppressed by option_dict.white.
+
 3800. 255099
+
 3801. 255099        if (
+
 3802. 255099            token_prv.line === line
+
 3803. 185733            && token_prv.thru === from
+
 3804. 119850            && (id === "(comment)" || id === "(regexp)" || id === "/")
 3805.    125            && (token_prv.id === "(comment)" || token_prv.id === "(regexp)")
 3806.      1        ) {
 3807.      1
@@ -3973,30 +3973,30 @@
 3815.      1                artifact(the_token)
 3816.      1            );
 3817.      1        }
-
 3818.  11580        if (token_prv.id === "." && id === "(number)") {
+
 3818.  11593        if (token_prv.id === "." && id === "(number)") {
 3819.      4
 3820.      4// test_cause:
 3821.      4// [".0", "token_create", "expected_a_before_b", ".", 1]
 3822.      4
 3823.      4            warn("expected_a_before_b", token_prv, "0", ".");
 3824.      4        }
-
 3825.  11580        if (token_prv_expr.id === "." && the_token.identifier) {
-
 3826.  11575            the_token.dot = true;
-
 3827.  11575        }
-
 3828. 254929
-
 3829. 254929// PR-385 - Bugfix - Fixes issue #382 - failure to detect destructured fart.
-
 3830. 254929// Farts are now detected by keeping a list of most recent "(" tokens at any
-
 3831. 254929// given depth. When a "=>" token is encountered, the most recent "(" token at
-
 3832. 254929// current depth is marked as a fart.
-
 3833. 254929
-
 3834. 254929        switch (id) {
-
 3835.  17561        case "(":
-
 3836.  17561            paren_backtrack_list[paren_depth] = the_token;
-
 3837.  17561            paren_depth += 1;
-
 3838.  17561            break;
-
 3839.  17560        case ")":
-
 3840.  17560            paren_depth -= 1;
-
 3841.  17560            break;
+
 3825.  11593        if (token_prv_expr.id === "." && the_token.identifier) {
+
 3826.  11588            the_token.dot = true;
+
 3827.  11588        }
+
 3828. 255099
+
 3829. 255099// PR-385 - Bugfix - Fixes issue #382 - failure to detect destructured fart.
+
 3830. 255099// Farts are now detected by keeping a list of most recent "(" tokens at any
+
 3831. 255099// given depth. When a "=>" token is encountered, the most recent "(" token at
+
 3832. 255099// current depth is marked as a fart.
+
 3833. 255099
+
 3834. 255099        switch (id) {
+
 3835.  17580        case "(":
+
 3836.  17580            paren_backtrack_list[paren_depth] = the_token;
+
 3837.  17580            paren_depth += 1;
+
 3838.  17580            break;
+
 3839.  17579        case ")":
+
 3840.  17579            paren_depth -= 1;
+
 3841.  17579            break;
 3842.     16        case "=>":
 3843.     16            if (
 3844.     16                token_prv_expr.id === ")"
@@ -4005,22 +4005,22 @@
 3847.     16                paren_backtrack_list[paren_depth].fart = the_token;
 3848.     16            }
 3849.     16            break;
-
 3850. 254929        }
-
 3851. 254929
-
 3852. 254929// The previous token is used to detect adjacency problems.
-
 3853. 254929
-
 3854. 254929        token_prv = the_token;
-
 3855. 254929
-
 3856. 254929// The token_prv_expr token is a previous token that was not a comment.
-
 3857. 254929// The token_prv_expr token
-
 3858. 254929// is used to disambiguate "/", which can mean division or regular expression
-
 3859. 254929// literal.
-
 3860. 254929
-
 3861. 243751        if (token_prv.id !== "(comment)") {
-
 3862. 243751            token_prv_expr = token_prv;
-
 3863. 243751        }
-
 3864. 254929        return the_token;
-
 3865. 254929    }
+
 3850. 255099        }
+
 3851. 255099
+
 3852. 255099// The previous token is used to detect adjacency problems.
+
 3853. 255099
+
 3854. 255099        token_prv = the_token;
+
 3855. 255099
+
 3856. 255099// The token_prv_expr token is a previous token that was not a comment.
+
 3857. 255099// The token_prv_expr token
+
 3858. 255099// is used to disambiguate "/", which can mean division or regular expression
+
 3859. 255099// literal.
+
 3860. 255099
+
 3861. 243901        if (token_prv.id !== "(comment)") {
+
 3862. 243901            token_prv_expr = token_prv;
+
 3863. 243901        }
+
 3864. 255099        return the_token;
+
 3865. 255099    }
 3866.    666
 3867.    666// Init global_dict and option_dict.
 3868.    666
@@ -4041,11 +4041,11 @@
 3883.    666
 3884.    666// Lex/loop through each token until (end).
 3885.    666
-
 3886. 249164    while (true) {
-
 3887. 249164        if (lex_token().id === "(end)") {
-
 3888. 249164            break;
-
 3889. 249164        }
-
 3890. 249164    }
+
 3886. 249334    while (true) {
+
 3887. 249334        if (lex_token().id === "(end)") {
+
 3888. 249334            break;
+
 3889. 249334        }
+
 3890. 249334    }
 3891.    666}
 3892.      1
 3893.    629function jslint_phase3_parse(state) {
@@ -4097,28 +4097,28 @@
 3939.    629    let token_nxt = token_global;       // The next token to be examined in
 3940.    629                                        // ... <token_list>.
 3941.    629
-
 3942. 244087    function advance(id, match) {
-
 3943. 244087
-
 3944. 244087// Produce the next token.
-
 3945. 244087
-
 3946. 244087// Attempt to give helpful names to anonymous functions.
-
 3947. 244087
-
 3948. 244087        if (
-
 3949. 244087            token_now.identifier
-
 3950.  67555            && token_now.id !== "function"
-
 3951.  65563            && token_now.id !== "async"
-
 3952.  65382        ) {
-
 3953.  65382            anon = token_now.id;
-
 3954. 178705        } else if (
-
 3955. 178705            token_now.id === "(string)"
-
 3956. 178705            && jslint_rgx_identifier.test(token_now.value)
-
 3957. 178705        ) {
-
 3958. 178705            anon = token_now.value;
-
 3959. 178705        }
-
 3960. 244087
-
 3961. 244087// Attempt to match token_nxt with an expected id.
-
 3962. 244087
-
 3963. 119971        if (id !== undefined && token_nxt.id !== id) {
+
 3942. 244237    function advance(id, match) {
+
 3943. 244237
+
 3944. 244237// Produce the next token.
+
 3945. 244237
+
 3946. 244237// Attempt to give helpful names to anonymous functions.
+
 3947. 244237
+
 3948. 244237        if (
+
 3949. 244237            token_now.identifier
+
 3950.  67617            && token_now.id !== "function"
+
 3951.  65625            && token_now.id !== "async"
+
 3952.  65444        ) {
+
 3953.  65444            anon = token_now.id;
+
 3954. 178793        } else if (
+
 3955. 178793            token_now.id === "(string)"
+
 3956. 178793            && jslint_rgx_identifier.test(token_now.value)
+
 3957. 178793        ) {
+
 3958. 178793            anon = token_now.value;
+
 3959. 178793        }
+
 3960. 244237
+
 3961. 244237// Attempt to match token_nxt with an expected id.
+
 3962. 244237
+
 3963. 120026        if (id !== undefined && token_nxt.id !== id) {
 3964.     26            return (
 3965.     26                match === undefined
 3966.     26
@@ -4139,30 +4139,30 @@
 3981.     26                    artifact()
 3982.     26                )
 3983.     26            );
-
 3984. 244061        }
-
 3985. 244061
-
 3986. 244061// Promote the tokens, skipping comments.
-
 3987. 244061
-
 3988. 244061        token_now = token_nxt;
-
 3989. 255236        while (true) {
-
 3990. 255236            token_nxt = token_list[token_ii];
-
 3991. 255236            state.token_nxt = token_nxt;
-
 3992. 255236            token_ii += 1;
-
 3993. 255236            if (token_nxt.id !== "(comment)") {
-
 3994. 255236                if (token_nxt.id === "(end)") {
-
 3995. 255236                    token_ii -= 1;
-
 3996. 255236                }
-
 3997. 255236                break;
-
 3998. 255236            }
-
 3999. 255236            if (state.mode_json) {
-
 4000. 255236
-
 4001. 255236// test_cause:
-
 4002. 255236// ["[//]", "advance", "unexpected_a", "(comment)", 2]
-
 4003. 255236
-
 4004. 255236                warn("unexpected_a");
-
 4005. 255236            }
-
 4006. 255236        }
-
 4007. 244087    }
+
 3984. 244211        }
+
 3985. 244211
+
 3986. 244211// Promote the tokens, skipping comments.
+
 3987. 244211
+
 3988. 244211        token_now = token_nxt;
+
 3989. 255406        while (true) {
+
 3990. 255406            token_nxt = token_list[token_ii];
+
 3991. 255406            state.token_nxt = token_nxt;
+
 3992. 255406            token_ii += 1;
+
 3993. 255406            if (token_nxt.id !== "(comment)") {
+
 3994. 255406                if (token_nxt.id === "(end)") {
+
 3995. 255406                    token_ii -= 1;
+
 3996. 255406                }
+
 3997. 255406                break;
+
 3998. 255406            }
+
 3999. 255406            if (state.mode_json) {
+
 4000. 255406
+
 4001. 255406// test_cause:
+
 4002. 255406// ["[//]", "advance", "unexpected_a", "(comment)", 2]
+
 4003. 255406
+
 4004. 255406                warn("unexpected_a");
+
 4005. 255406            }
+
 4006. 255406        }
+
 4007. 244237    }
 4008.    629
 4009.   7548    function assignment(id) {
 4010.   7548
@@ -4172,64 +4172,64 @@
 4014.   7548// other assignment operators can modify, but they cannot initialize.
 4015.   7548
 4016.   7548        const the_symbol = symbol(id, 20);
-
 4017.   5012        the_symbol.led_infix = function (left) {
-
 4018.   5012            const the_token = token_now;
-
 4019.   5012            let right;
-
 4020.   5012            the_token.arity = "assignment";
-
 4021.   5012            right = parse_expression(20 - 1);
-
 4022.   4233            if (id === "=" && left.arity === "variable") {
-
 4023.   2817                the_token.names = left;
-
 4024.   2817                the_token.expression = right;
-
 4025.   2817            } else {
+
 4017.   5018        the_symbol.led_infix = function (left) {
+
 4018.   5018            const the_token = token_now;
+
 4019.   5018            let right;
+
 4020.   5018            the_token.arity = "assignment";
+
 4021.   5018            right = parse_expression(20 - 1);
+
 4022.   4239            if (id === "=" && left.arity === "variable") {
+
 4023.   2823                the_token.names = left;
+
 4024.   2823                the_token.expression = right;
+
 4025.   2823            } else {
 4026.   2191                the_token.expression = [left, right];
-
 4027.   5008            }
-
 4028.   5008            if (
-
 4029.   5008                right.arity === "assignment"
-
 4030.   5008                || right.arity === "preassign"
-
 4031.   5006                || right.arity === "postassign"
+
 4027.   5014            }
+
 4028.   5014            if (
+
 4029.   5014                right.arity === "assignment"
+
 4030.   5014                || right.arity === "preassign"
+
 4031.   5012                || right.arity === "postassign"
 4032.      2            ) {
 4033.      2                warn("unexpected_a", right);
-
 4034.   5008            }
-
 4035.   5008            check_mutation(left);
-
 4036.   5008            return the_token;
-
 4037.   5008        };
+
 4034.   5014            }
+
 4035.   5014            check_mutation(left);
+
 4036.   5014            return the_token;
+
 4037.   5014        };
 4038.   7548        return the_symbol;
 4039.   7548    }
 4040.    629
-
 4041.   5702    function block(special) {
-
 4042.   5702
-
 4043.   5702// Parse a block, a sequence of statements wrapped in braces.
-
 4044.   5702//  special "body"      The block is a function body.
-
 4045.   5702//          "ignore"    No warning on an empty block.
-
 4046.   5702//          "naked"     No advance.
-
 4047.   5702//          undefined   An ordinary block.
-
 4048.   5702
-
 4049.   5702        let stmts;
-
 4050.   5702        let the_block;
-
 4051.   5697        if (special !== "naked") {
-
 4052.   5697            advance("{");
-
 4053.   5701        }
-
 4054.   5701        the_block = token_now;
-
 4055.   5701        if (special !== "body") {
-
 4056.   3704            functionage.statement_prv = the_block;
-
 4057.   5701        }
-
 4058.   5701        the_block.arity = "statement";
-
 4059.   5701        the_block.body = special === "body";
-
 4060.   5701
-
 4061.   5701// Top level function bodies may include the "use strict" pragma.
-
 4062.   5701
-
 4063.   5701        if (
-
 4064.   5701            special === "body"
-
 4065.   5701            && function_stack.length === 1
+
 4041.   5708    function block(special) {
+
 4042.   5708
+
 4043.   5708// Parse a block, a sequence of statements wrapped in braces.
+
 4044.   5708//  special "body"      The block is a function body.
+
 4045.   5708//          "ignore"    No warning on an empty block.
+
 4046.   5708//          "naked"     No advance.
+
 4047.   5708//          undefined   An ordinary block.
+
 4048.   5708
+
 4049.   5708        let stmts;
+
 4050.   5708        let the_block;
+
 4051.   5703        if (special !== "naked") {
+
 4052.   5703            advance("{");
+
 4053.   5707        }
+
 4054.   5707        the_block = token_now;
+
 4055.   5707        if (special !== "body") {
+
 4056.   3710            functionage.statement_prv = the_block;
+
 4057.   5707        }
+
 4058.   5707        the_block.arity = "statement";
+
 4059.   5707        the_block.body = special === "body";
+
 4060.   5707
+
 4061.   5707// Top level function bodies may include the "use strict" pragma.
+
 4062.   5707
+
 4063.   5707        if (
+
 4064.   5707            special === "body"
+
 4065.   5707            && function_stack.length === 1
 4066.    281            && token_nxt.value === "use strict"
 4067.      4        ) {
 4068.      4            token_nxt.statement = true;
 4069.      4            advance("(string)");
 4070.      4            advance(";");
-
 4071.   5701        }
-
 4072.   5701        stmts = parse_statements();
-
 4073.   5701        the_block.block = stmts;
-
 4074.   5701        if (stmts.length === 0) {
+
 4071.   5707        }
+
 4072.   5707        stmts = parse_statements();
+
 4073.   5707        the_block.block = stmts;
+
 4074.   5707        if (stmts.length === 0) {
 4075.     72            if (!option_dict.devel && special !== "ignore") {
 4076.     72
 4077.     72// test_cause:
@@ -4238,55 +4238,55 @@
 4080.     72                warn("empty_block", the_block);
 4081.     72            }
 4082.     72            the_block.disrupt = false;
-
 4083.   5622        } else {
-
 4084.   5622            the_block.disrupt = stmts[stmts.length - 1].disrupt;
-
 4085.   5694        }
-
 4086.   5694        advance("}");
-
 4087.   5694        return the_block;
-
 4088.   5694    }
+
 4083.   5628        } else {
+
 4084.   5628            the_block.disrupt = stmts[stmts.length - 1].disrupt;
+
 4085.   5700        }
+
 4086.   5700        advance("}");
+
 4087.   5700        return the_block;
+
 4088.   5700    }
 4089.    629
-
 4090.  23258    function check_left(left, right) {
-
 4091.  23258
-
 4092.  23258// Warn if the left is not one of these:
-
 4093.  23258//      ?.
-
 4094.  23258//      ?:
-
 4095.  23258//      e()
-
 4096.  23258//      e.b
-
 4097.  23258//      e[b]
-
 4098.  23258//      identifier
-
 4099.  23258
-
 4100.  23258        const id = left.id;
-
 4101.  23258        if (
-
 4102.  23258            !left.identifier
-
 4103.   6285            && (
-
 4104.   6285                left.arity !== "ternary"
-
 4105.   6285                || (
-
 4106.   6285                    !check_left(left.expression[1])
-
 4107.   6285                    && !check_left(left.expression[2])
-
 4108.   6285                )
-
 4109.   6285            )
-
 4110.   6285            && (
-
 4111.   6285                left.arity !== "binary"
-
 4112.   6285                || (id !== "." && id !== "?." && id !== "(" && id !== "[")
-
 4113.   6285            )
+
 4090.  23278    function check_left(left, right) {
+
 4091.  23278
+
 4092.  23278// Warn if the left is not one of these:
+
 4093.  23278//      ?.
+
 4094.  23278//      ?:
+
 4095.  23278//      e()
+
 4096.  23278//      e.b
+
 4097.  23278//      e[b]
+
 4098.  23278//      identifier
+
 4099.  23278
+
 4100.  23278        const id = left.id;
+
 4101.  23278        if (
+
 4102.  23278            !left.identifier
+
 4103.   6298            && (
+
 4104.   6298                left.arity !== "ternary"
+
 4105.   6298                || (
+
 4106.   6298                    !check_left(left.expression[1])
+
 4107.   6298                    && !check_left(left.expression[2])
+
 4108.   6298                )
+
 4109.   6298            )
+
 4110.   6298            && (
+
 4111.   6298                left.arity !== "binary"
+
 4112.   6298                || (id !== "." && id !== "?." && id !== "(" && id !== "[")
+
 4113.   6298            )
 4114.     11        ) {
 4115.     11            warn("unexpected_a", right || token_nxt);
 4116.     11            return false;
-
 4117.  23247        }
-
 4118.  23247        return true;
-
 4119.  23247    }
+
 4117.  23267        }
+
 4118.  23267        return true;
+
 4119.  23267    }
 4120.    629
-
 4121.   5011    function check_mutation(the_thing) {
-
 4122.   5011
-
 4123.   5011// The only expressions that may be assigned to are
-
 4124.   5011//      e.b
-
 4125.   5011//      e[b]
-
 4126.   5011//      v
-
 4127.   5011//      [destructure]
-
 4128.   5011//      {destructure}
-
 4129.   5011
-
 4130.   5011        if (
-
 4131.   5011            the_thing.arity !== "variable"
+
 4121.   5017    function check_mutation(the_thing) {
+
 4122.   5017
+
 4123.   5017// The only expressions that may be assigned to are
+
 4124.   5017//      e.b
+
 4125.   5017//      e[b]
+
 4126.   5017//      v
+
 4127.   5017//      [destructure]
+
 4128.   5017//      {destructure}
+
 4129.   5017
+
 4130.   5017        if (
+
 4131.   5017            the_thing.arity !== "variable"
 4132.   1543            && the_thing.id !== "."
 4133.    192            && the_thing.id !== "["
 4134.      7            && the_thing.id !== "{"
@@ -4297,9 +4297,9 @@
 4139.      7
 4140.      7            warn("bad_assignment_a", the_thing);
 4141.      7            return false;
-
 4142.   5004        }
-
 4143.   5004        return true;
-
 4144.   5004    }
+
 4142.   5010        }
+
 4143.   5010        return true;
+
 4144.   5010    }
 4145.    629
 4146.   2203    function check_not_top_level(thing) {
 4147.   2203
@@ -4320,13 +4320,13 @@
 4162.   3358
 4163.   3358// This function will warn if <token_list> is unordered.
 4164.   3358
-
 4165.   4056        token_list.reduce(function (aa, token) {
-
 4166.   4056            const bb = artifact(token);
-
 4167.   4042            if (!option_dict.unordered && aa > bb) {
+
 4165.   4062        token_list.reduce(function (aa, token) {
+
 4166.   4062            const bb = artifact(token);
+
 4167.   4048            if (!option_dict.unordered && aa > bb) {
 4168.      4                warn("expected_a_b_before_c_d", token, type, bb, type, aa);
 4169.      4            }
-
 4170.   4056            return bb;
-
 4171.   4056        }, "");
+
 4170.   4062            return bb;
+
 4171.   4062        }, "");
 4172.   3358    }
 4173.    629
 4174.   1301    function check_ordered_case(case_list) {
@@ -4383,35 +4383,35 @@
 4225.   2691        }, undefined);
 4226.   1301    }
 4227.    629
-
 4228.   3252    function condition() {
-
 4229.   3252
-
 4230.   3252// Parse the condition part of a do, if, while.
-
 4231.   3252
-
 4232.   3252        const the_paren = token_nxt;
-
 4233.   3252        let the_value;
-
 4234.   3252
-
 4235.   3252// test_cause:
-
 4236.   3252// ["do{}while()", "condition", "", "", 0]
-
 4237.   3252// ["if(){}", "condition", "", "", 0]
-
 4238.   3252// ["while(){}", "condition", "", "", 0]
-
 4239.   3252
-
 4240.   3252        test_cause("");
-
 4241.   3252        the_paren.free = true;
-
 4242.   3252        advance("(");
-
 4243.   3252        the_value = parse_expression(0);
-
 4244.   3252        advance(")");
+
 4228.   3258    function condition() {
+
 4229.   3258
+
 4230.   3258// Parse the condition part of a do, if, while.
+
 4231.   3258
+
 4232.   3258        const the_paren = token_nxt;
+
 4233.   3258        let the_value;
+
 4234.   3258
+
 4235.   3258// test_cause:
+
 4236.   3258// ["do{}while()", "condition", "", "", 0]
+
 4237.   3258// ["if(){}", "condition", "", "", 0]
+
 4238.   3258// ["while(){}", "condition", "", "", 0]
+
 4239.   3258
+
 4240.   3258        test_cause("");
+
 4241.   3258        the_paren.free = true;
+
 4242.   3258        advance("(");
+
 4243.   3258        the_value = parse_expression(0);
+
 4244.   3258        advance(")");
 4245.      1        if (the_value.wrapped === true) {
 4246.      1
 4247.      1// test_cause:
 4248.      1// ["while((0)){}", "condition", "unexpected_a", "(", 6]
 4249.      1
 4250.      1            warn("unexpected_a", the_paren);
-
 4251.   3248        }
-
 4252.   3248
-
 4253.   3248// Check for anticondition.
-
 4254.   3248
-
 4255.   3248        switch (the_value.id) {
-
 4256.   3248        case "%":
+
 4251.   3254        }
+
 4252.   3254
+
 4253.   3254// Check for anticondition.
+
 4254.   3254
+
 4255.   3254        switch (the_value.id) {
+
 4256.   3254        case "%":
 4257.      1            warn("unexpected_a", the_value);
 4258.      1            break;
 4259.      1        case "&":
@@ -4478,9 +4478,9 @@
 4320.      1
 4321.      1            warn("unexpected_a", the_value);
 4322.      1            break;
-
 4323.   3248        }
-
 4324.   3248        return the_value;
-
 4325.   3248    }
+
 4323.   3254        }
+
 4324.   3254        return the_value;
+
 4325.   3254    }
 4326.    629
 4327.  10064    function constant(id, type, value) {
 4328.  10064
@@ -4491,13 +4491,13 @@
 4333.  10064        the_symbol.nud_prefix = (
 4334.  10064            typeof value === "function"
 4335.   4403            ? value
-
 4336.  18668            : function () {
-
 4337.  18668                token_now.constant = true;
+
 4336.  18674            : function () {
+
 4337.  18674                token_now.constant = true;
 4338.   5661                if (value !== undefined) {
 4339.   5661                    token_now.value = value;
 4340.   5661                }
-
 4341.  18668                return token_now;
-
 4342.  18668            }
+
 4341.  18674                return token_now;
+
 4342.  18674            }
 4343.  10064        );
 4344.  10064        the_symbol.type = type;
 4345.  10064        the_symbol.value = value;
@@ -4588,17 +4588,17 @@
 4430.      3        return token_now;
 4431.      3    }
 4432.    629
-
 4433.   6360    function enroll(name, role, readonly) {
-
 4434.   6360
-
 4435.   6360// Enroll a name into the current function context. The role can be exception,
-
 4436.   6360// function, label, parameter, or variable. We look for variable redefinition
-
 4437.   6360// because it causes confusion.
-
 4438.   6360
-
 4439.   6360        let earlier;
-
 4440.   6360        let id = name.id;
-
 4441.   6360
-
 4442.   6360// Reserved words may not be enrolled.
-
 4443.   6360
+
 4433.   6366    function enroll(name, role, readonly) {
+
 4434.   6366
+
 4435.   6366// Enroll a name into the current function context. The role can be exception,
+
 4436.   6366// function, label, parameter, or variable. We look for variable redefinition
+
 4437.   6366// because it causes confusion.
+
 4438.   6366
+
 4439.   6366        let earlier;
+
 4440.   6366        let id = name.id;
+
 4441.   6366
+
 4442.   6366// Reserved words may not be enrolled.
+
 4443.   6366
 4444.     42        if (syntax_dict[id] !== undefined && id !== "ignore") {
 4445.      1
 4446.      1// test_cause:
@@ -4606,11 +4606,11 @@
 4448.      1
 4449.      1            warn("reserved_a", name);
 4450.      1            return;
-
 4451.   6359        }
-
 4452.   6359
-
 4453.   6359// Has the name been enrolled in this context?
-
 4454.   6359
-
 4455.   6359        earlier = functionage.context[id] || catchage.context[id];
+
 4451.   6365        }
+
 4452.   6365
+
 4453.   6365// Has the name been enrolled in this context?
+
 4454.   6365
+
 4455.   6365        earlier = functionage.context[id] || catchage.context[id];
 4456.      7        if (earlier) {
 4457.      7
 4458.      7// test_cause:
@@ -4618,16 +4618,16 @@
 4460.      7
 4461.      7            warn("redefinition_a_b", name, id, earlier.line);
 4462.      7            return;
-
 4463.   6352        }
-
 4464.   6352
-
 4465.   6352// Has the name been enrolled in an outer context?
-
 4466.   6352
-
 4467.  10744        function_stack.forEach(function ({
-
 4468.  10744            context
-
 4469.  10744        }) {
-
 4470.  10589            earlier = context[id] || earlier;
-
 4471.  10744        });
-
 4472.   6352        if (earlier && id === "ignore") {
+
 4463.   6358        }
+
 4464.   6358
+
 4465.   6358// Has the name been enrolled in an outer context?
+
 4466.   6358
+
 4467.  10756        function_stack.forEach(function ({
+
 4468.  10756            context
+
 4469.  10756        }) {
+
 4470.  10601            earlier = context[id] || earlier;
+
 4471.  10756        });
+
 4472.   6358        if (earlier && id === "ignore") {
 4473.      4            if (earlier.role === "variable") {
 4474.      4
 4475.      4// test_cause:
@@ -4635,112 +4635,112 @@
 4477.      4
 4478.      4                warn("redefinition_a_b", name, id, earlier.line);
 4479.      4            }
-
 4480.   6348        } else if (
-
 4481.   6348            earlier
-
 4482.   6348            && role !== "parameter" && role !== "function"
-
 4483.   6348            && (role !== "exception" || earlier.role !== "exception")
-
 4484.   6348        ) {
-
 4485.   6348
-
 4486.   6348// test_cause:
-
 4487.   6348// ["
-
 4488.   6348// function aa(){try{aa();}catch(aa){aa();}}
-
 4489.   6348// ", "enroll", "redefinition_a_b", "1", 31]
-
 4490.   6348// ["function aa(){var aa;}", "enroll", "redefinition_a_b", "1", 19]
-
 4491.   6348
-
 4492.   6348            warn("redefinition_a_b", name, id, earlier.line);
-
 4493.   6348        } else if (
-
 4494.   6348            option_dict.beta
-
 4495.   6348            && global_dict[id]
-
 4496.   6348            && role !== "parameter"
-
 4497.   6348        ) {
-
 4498.   6348
-
 4499.   6348// test_cause:
-
 4500.   6348// ["let Array", "enroll", "redefinition_global_a_b", "Array", 5]
-
 4501.   6348
-
 4502.   6348            warn("redefinition_global_a_b", name, global_dict[id], id);
-
 4503.   6352        }
-
 4504.   6352
-
 4505.   6352// Enroll it.
-
 4506.   6352
-
 4507.   6352        Object.assign(name, {
-
 4508.   6352            dead: true,
-
 4509.   6352            init: false,
-
 4510.   6352            parent: (
-
 4511.   6352                role === "exception"
-
 4512.   6352                ? catchage
-
 4513.   6322                : functionage
-
 4514.   6360            ),
-
 4515.   6360            readonly,
-
 4516.   6360            role,
-
 4517.   6360            used: 0
-
 4518.   6360        });
-
 4519.   6360        name.parent.context[id] = name;
-
 4520.   6360    }
+
 4480.   6354        } else if (
+
 4481.   6354            earlier
+
 4482.   6354            && role !== "parameter" && role !== "function"
+
 4483.   6354            && (role !== "exception" || earlier.role !== "exception")
+
 4484.   6354        ) {
+
 4485.   6354
+
 4486.   6354// test_cause:
+
 4487.   6354// ["
+
 4488.   6354// function aa(){try{aa();}catch(aa){aa();}}
+
 4489.   6354// ", "enroll", "redefinition_a_b", "1", 31]
+
 4490.   6354// ["function aa(){var aa;}", "enroll", "redefinition_a_b", "1", 19]
+
 4491.   6354
+
 4492.   6354            warn("redefinition_a_b", name, id, earlier.line);
+
 4493.   6354        } else if (
+
 4494.   6354            option_dict.beta
+
 4495.   6354            && global_dict[id]
+
 4496.   6354            && role !== "parameter"
+
 4497.   6354        ) {
+
 4498.   6354
+
 4499.   6354// test_cause:
+
 4500.   6354// ["let Array", "enroll", "redefinition_global_a_b", "Array", 5]
+
 4501.   6354
+
 4502.   6354            warn("redefinition_global_a_b", name, global_dict[id], id);
+
 4503.   6358        }
+
 4504.   6358
+
 4505.   6358// Enroll it.
+
 4506.   6358
+
 4507.   6358        Object.assign(name, {
+
 4508.   6358            dead: true,
+
 4509.   6358            init: false,
+
 4510.   6358            parent: (
+
 4511.   6358                role === "exception"
+
 4512.   6358                ? catchage
+
 4513.   6328                : functionage
+
 4514.   6366            ),
+
 4515.   6366            readonly,
+
 4516.   6366            role,
+
 4517.   6366            used: 0
+
 4518.   6366        });
+
 4519.   6366        name.parent.context[id] = name;
+
 4520.   6366    }
 4521.    629
 4522.  18870    function infix(bp, id, f) {
 4523.  18870
 4524.  18870// Create an infix operator.
 4525.  18870
 4526.  18870        const the_symbol = symbol(id, bp);
-
 4527.  31880        the_symbol.led_infix = function (left) {
-
 4528.  31880            const the_token = token_now;
-
 4529.  31880            the_token.arity = "binary";
-
 4530.  23454            if (f !== undefined) {
-
 4531.  23454                return f(left);
-
 4532.  23454            }
-
 4533.   8426            the_token.expression = [left, parse_expression(bp)];
-
 4534.   8426            return the_token;
-
 4535.   8426        };
+
 4527.  31907        the_symbol.led_infix = function (left) {
+
 4528.  31907            const the_token = token_now;
+
 4529.  31907            the_token.arity = "binary";
+
 4530.  23474            if (f !== undefined) {
+
 4531.  23474                return f(left);
+
 4532.  23474            }
+
 4533.   8433            the_token.expression = [left, parse_expression(bp)];
+
 4534.   8433            return the_token;
+
 4535.   8433        };
 4536.  18870        return the_symbol;
 4537.  18870    }
 4538.    629
-
 4539.  11574    function infix_dot(left) {
-
 4540.  11574        const the_token = token_now;
-
 4541.  11574        let name = token_nxt;
-
 4542.  11574        if (
-
 4543.  11574            (
-
 4544.  11574                left.id !== "(string)"
+
 4539.  11587    function infix_dot(left) {
+
 4540.  11587        const the_token = token_now;
+
 4541.  11587        let name = token_nxt;
+
 4542.  11587        if (
+
 4543.  11587            (
+
 4544.  11587                left.id !== "(string)"
 4545.     44                || (name.id !== "indexOf" && name.id !== "repeat")
-
 4546.  11574            )
-
 4547.  11531            && (
-
 4548.  11531                left.id !== "["
-
 4549.  11531                || (
-
 4550.  11531                    name.id !== "concat"
-
 4551.  11531                    && name.id !== "flat"
-
 4552.  11531                    && name.id !== "flatMap"
-
 4553.  11531                    && name.id !== "forEach"
-
 4554.  11531                    && name.id !== "join"
-
 4555.  11531                    && name.id !== "map"
-
 4556.  11531                )
-
 4557.  11531            )
-
 4558.  11486            && (left.id !== "+" || name.id !== "slice")
-
 4559.  11481            && (
-
 4560.  11481                left.id !== "(regexp)"
-
 4561.  11481                || (name.id !== "exec" && name.id !== "test")
-
 4562.  11481            )
-
 4563.  11414        ) {
-
 4564.  11414
-
 4565.  11414// test_cause:
-
 4566.  11414// ["\"\".aa", "check_left", "unexpected_a", ".", 3]
-
 4567.  11414
-
 4568.  11414            check_left(left, the_token);
-
 4569.  11414        }
+
 4546.  11587            )
+
 4547.  11544            && (
+
 4548.  11544                left.id !== "["
+
 4549.  11544                || (
+
 4550.  11544                    name.id !== "concat"
+
 4551.  11544                    && name.id !== "flat"
+
 4552.  11544                    && name.id !== "flatMap"
+
 4553.  11544                    && name.id !== "forEach"
+
 4554.  11544                    && name.id !== "join"
+
 4555.  11544                    && name.id !== "map"
+
 4556.  11544                )
+
 4557.  11544            )
+
 4558.  11499            && (left.id !== "+" || name.id !== "slice")
+
 4559.  11494            && (
+
 4560.  11494                left.id !== "(regexp)"
+
 4561.  11494                || (name.id !== "exec" && name.id !== "test")
+
 4562.  11494            )
+
 4563.  11427        ) {
+
 4564.  11427
+
 4565.  11427// test_cause:
+
 4566.  11427// ["\"\".aa", "check_left", "unexpected_a", ".", 3]
+
 4567.  11427
+
 4568.  11427            check_left(left, the_token);
+
 4569.  11427        }
 4570.      1        if (!name.identifier) {
 4571.      1
 4572.      1// test_cause:
 4573.      1// ["aa.0", "infix_dot", "expected_identifier_a", "0", 4]
 4574.      1
 4575.      1            stop("expected_identifier_a");
-
 4576.  11573        }
-
 4577.  11573        advance();
-
 4578.  11573        survey(name);
-
 4579.  11573
-
 4580.  11573// The property name is not an expression.
-
 4581.  11573
-
 4582.  11573        the_token.name = name;
-
 4583.  11573        the_token.expression = left;
-
 4584.  11573        return the_token;
-
 4585.  11573    }
+
 4576.  11586        }
+
 4577.  11586        advance();
+
 4578.  11586        survey(name);
+
 4579.  11586
+
 4580.  11586// The property name is not an expression.
+
 4581.  11586
+
 4582.  11586        the_token.name = name;
+
 4583.  11586        the_token.expression = left;
+
 4584.  11586        return the_token;
+
 4585.  11586    }
 4586.    629
 4587.      1    function infix_fart_unwrapped() {
 4588.      1
@@ -4761,11 +4761,11 @@
 4603.      1        return the_tick;
 4604.      1    }
 4605.    629
-
 4606.   1466    function infix_lbracket(left) {
-
 4607.   1466        const the_token = token_now;
-
 4608.   1466        let name;
-
 4609.   1466        let the_subscript = parse_expression(0);
-
 4610.   1443        if (the_subscript.id === "(string)" || the_subscript.id === "`") {
+
 4606.   1460    function infix_lbracket(left) {
+
 4607.   1460        const the_token = token_now;
+
 4608.   1460        let name;
+
 4609.   1460        let the_subscript = parse_expression(0);
+
 4610.   1437        if (the_subscript.id === "(string)" || the_subscript.id === "`") {
 4611.     25            name = survey(the_subscript);
 4612.     25
 4613.     25// PR-404 - Add new directive "subscript" to play nice with Google Closure.
@@ -4778,81 +4778,81 @@
 4620.     25                warn("subscript_a", the_subscript, name);
 4621.     25            }
 4622.     25        }
-
 4623.   1466
-
 4624.   1466// test_cause:
-
 4625.   1466// ["0[0]", "check_left", "unexpected_a", "[", 2]
-
 4626.   1466
-
 4627.   1466        check_left(left, the_token);
-
 4628.   1466        the_token.expression = [left, the_subscript];
-
 4629.   1466        advance("]");
-
 4630.   1466        return the_token;
-
 4631.   1466    }
+
 4623.   1460
+
 4624.   1460// test_cause:
+
 4625.   1460// ["0[0]", "check_left", "unexpected_a", "[", 2]
+
 4626.   1460
+
 4627.   1460        check_left(left, the_token);
+
 4628.   1460        the_token.expression = [left, the_subscript];
+
 4629.   1460        advance("]");
+
 4630.   1460        return the_token;
+
 4631.   1460    }
 4632.    629
-
 4633.  10402    function infix_lparen(left) {
-
 4634.  10402        const the_paren = token_now;
-
 4635.  10402        let ellipsis;
-
 4636.  10402        let the_argument;
-
 4637.  10365        if (left.id !== "function") {
-
 4638.  10365
-
 4639.  10365// test_cause:
-
 4640.  10365// ["(0?0:0)()", "check_left", "unexpected_a", "(", 8]
-
 4641.  10365// ["0()", "check_left", "unexpected_a", "(", 2]
-
 4642.  10365
-
 4643.  10365            check_left(left, the_paren);
-
 4644.  10365        }
+
 4633.  10415    function infix_lparen(left) {
+
 4634.  10415        const the_paren = token_now;
+
 4635.  10415        let ellipsis;
+
 4636.  10415        let the_argument;
+
 4637.  10378        if (left.id !== "function") {
+
 4638.  10378
+
 4639.  10378// test_cause:
+
 4640.  10378// ["(0?0:0)()", "check_left", "unexpected_a", "(", 8]
+
 4641.  10378// ["0()", "check_left", "unexpected_a", "(", 2]
+
 4642.  10378
+
 4643.  10378            check_left(left, the_paren);
+
 4644.  10378        }
 4645.   7694        if (functionage.arity === "statement" && left.identifier) {
 4646.   5498            functionage.name.calls[left.id] = left;
 4647.   5498        }
-
 4648.  10402        the_paren.expression = [left];
-
 4649.   8944        if (token_nxt.id !== ")") {
-
 4650.   8944
-
 4651.   8944// Parse/loop through each token in expression (...).
-
 4652.   8944
-
 4653.  14268            while (true) {
-
 4654.  14268                if (token_nxt.id === "...") {
-
 4655.  14268                    ellipsis = true;
-
 4656.  14268                    advance("...");
-
 4657.  14268                }
-
 4658.  14268                the_argument = parse_expression(10);
-
 4659.  14268                if (ellipsis) {
-
 4660.  14268                    the_argument.ellipsis = true;
-
 4661.  14268                }
-
 4662.  14268                the_paren.expression.push(the_argument);
-
 4663.  14268                if (token_nxt.id !== ",") {
-
 4664.  14268                    break;
-
 4665.  14268                }
-
 4666.  14268                advance(",");
-
 4667.  14268            }
-
 4668.   8944        }
-
 4669.  10402        advance(")", the_paren);
-
 4670.   5242        if (the_paren.expression.length === 2) {
-
 4671.   5242
-
 4672.   5242// test_cause:
-
 4673.   5242// ["aa(0)", "infix_lparen", "free", "", 0]
-
 4674.   5242
-
 4675.   5242            test_cause("free");
-
 4676.   5242            the_paren.free = true;
-
 4677.   5242            if (the_argument.wrapped === true) {
-
 4678.   5242
-
 4679.   5242// test_cause:
-
 4680.   5242// ["aa((0))", "infix_lparen", "unexpected_a", "(", 3]
-
 4681.   5242
-
 4682.   5242                warn("unexpected_a", the_paren);
-
 4683.   5242            }
-
 4684.   5242            if (the_argument.id === "(") {
-
 4685.   5242                the_argument.wrapped = true;
-
 4686.   5242            }
-
 4687.   5242        } else {
-
 4688.   5160
-
 4689.   5160// test_cause:
-
 4690.   5160// ["aa()", "infix_lparen", "not_free", "", 0]
-
 4691.   5160// ["aa(0,0)", "infix_lparen", "not_free", "", 0]
-
 4692.   5160
-
 4693.   5160            test_cause("not_free");
-
 4694.   5160            the_paren.free = false;
-
 4695.   5160        }
-
 4696.  10402        return the_paren;
-
 4697.  10402    }
+
 4648.  10415        the_paren.expression = [left];
+
 4649.   8956        if (token_nxt.id !== ")") {
+
 4650.   8956
+
 4651.   8956// Parse/loop through each token in expression (...).
+
 4652.   8956
+
 4653.  14280            while (true) {
+
 4654.  14280                if (token_nxt.id === "...") {
+
 4655.  14280                    ellipsis = true;
+
 4656.  14280                    advance("...");
+
 4657.  14280                }
+
 4658.  14280                the_argument = parse_expression(10);
+
 4659.  14280                if (ellipsis) {
+
 4660.  14280                    the_argument.ellipsis = true;
+
 4661.  14280                }
+
 4662.  14280                the_paren.expression.push(the_argument);
+
 4663.  14280                if (token_nxt.id !== ",") {
+
 4664.  14280                    break;
+
 4665.  14280                }
+
 4666.  14280                advance(",");
+
 4667.  14280            }
+
 4668.   8956        }
+
 4669.  10415        advance(")", the_paren);
+
 4670.   5254        if (the_paren.expression.length === 2) {
+
 4671.   5254
+
 4672.   5254// test_cause:
+
 4673.   5254// ["aa(0)", "infix_lparen", "free", "", 0]
+
 4674.   5254
+
 4675.   5254            test_cause("free");
+
 4676.   5254            the_paren.free = true;
+
 4677.   5254            if (the_argument.wrapped === true) {
+
 4678.   5254
+
 4679.   5254// test_cause:
+
 4680.   5254// ["aa((0))", "infix_lparen", "unexpected_a", "(", 3]
+
 4681.   5254
+
 4682.   5254                warn("unexpected_a", the_paren);
+
 4683.   5254            }
+
 4684.   5254            if (the_argument.id === "(") {
+
 4685.   5254                the_argument.wrapped = true;
+
 4686.   5254            }
+
 4687.   5254        } else {
+
 4688.   5161
+
 4689.   5161// test_cause:
+
 4690.   5161// ["aa()", "infix_lparen", "not_free", "", 0]
+
 4691.   5161// ["aa(0,0)", "infix_lparen", "not_free", "", 0]
+
 4692.   5161
+
 4693.   5161            test_cause("not_free");
+
 4694.   5161            the_paren.free = false;
+
 4695.   5161        }
+
 4696.  10415        return the_paren;
+
 4697.  10415    }
 4698.    629
 4699.     10    function infix_option_chain(left) {
 4700.     10        const the_token = token_now;
@@ -4927,122 +4927,122 @@
 4769.    629        return the_symbol;
 4770.    629    }
 4771.    629
-
 4772.  55937    function parse_expression(rbp, initial) {
-
 4773.  55937
-
 4774.  55937// This is the heart of JSLINT, the Pratt parser. In addition to parsing, it
-
 4775.  55937// is looking for ad hoc lint patterns. We add .fud_stmt to Pratt's model, which
-
 4776.  55937// is like .nud_prefix except that it is only used on the first token of a
-
 4777.  55937// statement. Having .fud_stmt makes it much easier to define statement-oriented
-
 4778.  55937// languages like JavaScript. I retained Pratt's nomenclature.
-
 4779.  55937// They are elements of the parsing method called Top Down Operator Precedence.
-
 4780.  55937
-
 4781.  55937// .nud_prefix  Null denotation. The prefix handler.
-
 4782.  55937// .fud_stmt    First null denotation. The statement handler.
-
 4783.  55937// .led_infix   Left denotation. The infix/postfix handler.
-
 4784.  55937//  lbp         Left binding power of infix operator. It tells us how strongly
-
 4785.  55937//              the operator binds to the argument at its left.
-
 4786.  55937//  rbp         Right binding power.
-
 4787.  55937
-
 4788.  55937// It processes a nud_prefix (variable, constant, prefix operator). It will then
-
 4789.  55937// process leds (infix operators) until the bind powers cause it to stop (it
-
 4790.  55937// consumes tokens until it meets a token whose lbp <= rbp). Specifically, it
-
 4791.  55937// means that it collects all tokens that bind together before returning to the
-
 4792.  55937// operator that called it. It returns the expression's parse tree.
-
 4793.  55937
-
 4794.  55937// For example, "3 + 1 * 2 * 4 + 5"
-
 4795.  55937// parses into
-
 4796.  55937// {
-
 4797.  55937//     "id": "+",
-
 4798.  55937//     "expression": [
-
 4799.  55937//         {
-
 4800.  55937//             "id": "+",
-
 4801.  55937//             "expression": [
-
 4802.  55937//                 {
-
 4803.  55937//                     "id": "(number)",
-
 4804.  55937//                     "value": "3"
-
 4805.  55937//                 },
-
 4806.  55937//                 {
-
 4807.  55937//                     "id": "*",
-
 4808.  55937//                     "expression": [
-
 4809.  55937//                         {
-
 4810.  55937//                             "id": "*",
-
 4811.  55937//                             "expression": [
-
 4812.  55937//                                 {
-
 4813.  55937//                                     "id": "(number)",
-
 4814.  55937//                                     "value": "1"
-
 4815.  55937//                                 },
-
 4816.  55937//                                 {
-
 4817.  55937//                                     "id": "(number)",
-
 4818.  55937//                                     "value": "2"
-
 4819.  55937//                                 }
-
 4820.  55937//                             ]
-
 4821.  55937//                         },
-
 4822.  55937//                         {
-
 4823.  55937//                             "id": "(number)",
-
 4824.  55937//                             "value": "4"
-
 4825.  55937//                         }
-
 4826.  55937//                     ]
-
 4827.  55937//                 }
-
 4828.  55937//             ]
-
 4829.  55937//         },
-
 4830.  55937//         {
-
 4831.  55937//             "id": "(number)",
-
 4832.  55937//             "value": "5"
-
 4833.  55937//         }
-
 4834.  55937//     ]
-
 4835.  55937// }
-
 4836.  55937
-
 4837.  55937        let left;
-
 4838.  55937        let the_symbol;
-
 4839.  55937
-
 4840.  55937// Statements will have already advanced, so advance now only if the token is
-
 4841.  55937// not the first of a statement.
-
 4842.  55937
-
 4843.  44585        if (!initial) {
-
 4844.  44585            advance();
-
 4845.  44585        }
-
 4846.  55937        the_symbol = syntax_dict[token_now.id];
-
 4847.  24489        if (the_symbol !== undefined && the_symbol.nud_prefix !== undefined) {
-
 4848.  24430
-
 4849.  24430// test_cause:
-
 4850.  24430// ["0", "parse_expression", "symbol", "", 0]
-
 4851.  24430
-
 4852.  24430            test_cause("symbol");
-
 4853.  24430            left = the_symbol.nud_prefix();
-
 4854.  31507        } else if (token_now.identifier) {
-
 4855.  31507
-
 4856.  31507// test_cause:
-
 4857.  31507// ["aa", "parse_expression", "identifier", "", 0]
-
 4858.  31507
-
 4859.  31507            test_cause("identifier");
-
 4860.  31507            left = token_now;
-
 4861.  31507            left.arity = "variable";
-
 4862.  31507        } else {
-
 4863.  31507
-
 4864.  31507// test_cause:
-
 4865.  31507// ["!", "parse_expression", "unexpected_a", "(end)", 1]
-
 4866.  31507// ["/./", "parse_expression", "unexpected_a", "/", 1]
-
 4867.  31507// ["let aa=`${}`;", "parse_expression", "unexpected_a", "}", 11]
-
 4868.  31507
-
 4869.  31507            return stop("unexpected_a", token_now);
-
 4870.  55901        }
-
 4871.  55901
-
 4872.  55901// Parse/loop through each symbol in expression.
-
 4873.  55901
-
 4874.  93003        while (true) {
-
 4875.  93003            the_symbol = syntax_dict[token_nxt.id];
-
 4876.  93003            if (
-
 4877.  93003                the_symbol === undefined
-
 4878.  93003                || the_symbol.led_infix === undefined
-
 4879.  93003                || the_symbol.lbp <= rbp
-
 4880.  93003            ) {
-
 4881.  93003                break;
-
 4882.  93003            }
-
 4883.  93003            advance();
-
 4884.  93003            left = the_symbol.led_infix(left);
-
 4885.  93003        }
-
 4886.  55890        return left;
-
 4887.  55890    }
+
 4772.  55968    function parse_expression(rbp, initial) {
+
 4773.  55968
+
 4774.  55968// This is the heart of JSLINT, the Pratt parser. In addition to parsing, it
+
 4775.  55968// is looking for ad hoc lint patterns. We add .fud_stmt to Pratt's model, which
+
 4776.  55968// is like .nud_prefix except that it is only used on the first token of a
+
 4777.  55968// statement. Having .fud_stmt makes it much easier to define statement-oriented
+
 4778.  55968// languages like JavaScript. I retained Pratt's nomenclature.
+
 4779.  55968// They are elements of the parsing method called Top Down Operator Precedence.
+
 4780.  55968
+
 4781.  55968// .nud_prefix  Null denotation. The prefix handler.
+
 4782.  55968// .fud_stmt    First null denotation. The statement handler.
+
 4783.  55968// .led_infix   Left denotation. The infix/postfix handler.
+
 4784.  55968//  lbp         Left binding power of infix operator. It tells us how strongly
+
 4785.  55968//              the operator binds to the argument at its left.
+
 4786.  55968//  rbp         Right binding power.
+
 4787.  55968
+
 4788.  55968// It processes a nud_prefix (variable, constant, prefix operator). It will then
+
 4789.  55968// process leds (infix operators) until the bind powers cause it to stop (it
+
 4790.  55968// consumes tokens until it meets a token whose lbp <= rbp). Specifically, it
+
 4791.  55968// means that it collects all tokens that bind together before returning to the
+
 4792.  55968// operator that called it. It returns the expression's parse tree.
+
 4793.  55968
+
 4794.  55968// For example, "3 + 1 * 2 * 4 + 5"
+
 4795.  55968// parses into
+
 4796.  55968// {
+
 4797.  55968//     "id": "+",
+
 4798.  55968//     "expression": [
+
 4799.  55968//         {
+
 4800.  55968//             "id": "+",
+
 4801.  55968//             "expression": [
+
 4802.  55968//                 {
+
 4803.  55968//                     "id": "(number)",
+
 4804.  55968//                     "value": "3"
+
 4805.  55968//                 },
+
 4806.  55968//                 {
+
 4807.  55968//                     "id": "*",
+
 4808.  55968//                     "expression": [
+
 4809.  55968//                         {
+
 4810.  55968//                             "id": "*",
+
 4811.  55968//                             "expression": [
+
 4812.  55968//                                 {
+
 4813.  55968//                                     "id": "(number)",
+
 4814.  55968//                                     "value": "1"
+
 4815.  55968//                                 },
+
 4816.  55968//                                 {
+
 4817.  55968//                                     "id": "(number)",
+
 4818.  55968//                                     "value": "2"
+
 4819.  55968//                                 }
+
 4820.  55968//                             ]
+
 4821.  55968//                         },
+
 4822.  55968//                         {
+
 4823.  55968//                             "id": "(number)",
+
 4824.  55968//                             "value": "4"
+
 4825.  55968//                         }
+
 4826.  55968//                     ]
+
 4827.  55968//                 }
+
 4828.  55968//             ]
+
 4829.  55968//         },
+
 4830.  55968//         {
+
 4831.  55968//             "id": "(number)",
+
 4832.  55968//             "value": "5"
+
 4833.  55968//         }
+
 4834.  55968//     ]
+
 4835.  55968// }
+
 4836.  55968
+
 4837.  55968        let left;
+
 4838.  55968        let the_symbol;
+
 4839.  55968
+
 4840.  55968// Statements will have already advanced, so advance now only if the token is
+
 4841.  55968// not the first of a statement.
+
 4842.  55968
+
 4843.  44610        if (!initial) {
+
 4844.  44610            advance();
+
 4845.  44610        }
+
 4846.  55968        the_symbol = syntax_dict[token_now.id];
+
 4847.  24495        if (the_symbol !== undefined && the_symbol.nud_prefix !== undefined) {
+
 4848.  24436
+
 4849.  24436// test_cause:
+
 4850.  24436// ["0", "parse_expression", "symbol", "", 0]
+
 4851.  24436
+
 4852.  24436            test_cause("symbol");
+
 4853.  24436            left = the_symbol.nud_prefix();
+
 4854.  31532        } else if (token_now.identifier) {
+
 4855.  31532
+
 4856.  31532// test_cause:
+
 4857.  31532// ["aa", "parse_expression", "identifier", "", 0]
+
 4858.  31532
+
 4859.  31532            test_cause("identifier");
+
 4860.  31532            left = token_now;
+
 4861.  31532            left.arity = "variable";
+
 4862.  31532        } else {
+
 4863.  31532
+
 4864.  31532// test_cause:
+
 4865.  31532// ["!", "parse_expression", "unexpected_a", "(end)", 1]
+
 4866.  31532// ["/./", "parse_expression", "unexpected_a", "/", 1]
+
 4867.  31532// ["let aa=`${}`;", "parse_expression", "unexpected_a", "}", 11]
+
 4868.  31532
+
 4869.  31532            return stop("unexpected_a", token_now);
+
 4870.  55932        }
+
 4871.  55932
+
 4872.  55932// Parse/loop through each symbol in expression.
+
 4873.  55932
+
 4874.  93061        while (true) {
+
 4875.  93061            the_symbol = syntax_dict[token_nxt.id];
+
 4876.  93061            if (
+
 4877.  93061                the_symbol === undefined
+
 4878.  93061                || the_symbol.led_infix === undefined
+
 4879.  93061                || the_symbol.lbp <= rbp
+
 4880.  93061            ) {
+
 4881.  93061                break;
+
 4882.  93061            }
+
 4883.  93061            advance();
+
 4884.  93061            left = the_symbol.led_infix(left);
+
 4885.  93061        }
+
 4886.  55921        return left;
+
 4887.  55921    }
 4888.    629
 4889.     14    function parse_fart(the_fart) {
 4890.     14
@@ -5267,18 +5267,18 @@
 5109.  12961        }
 5110.  12961    }
 5111.    629
-
 5112.  20899    function parse_statement() {
-
 5113.  20899
-
 5114.  20899// Parse a statement. Any statement may have a label, but only four statements
-
 5115.  20899// have use for one. A statement can be one of the standard statements, or
-
 5116.  20899// an assignment expression, or an invocation expression.
-
 5117.  20899
-
 5118.  20899        let first;
-
 5119.  20899        let the_label;
-
 5120.  20899        let the_statement;
-
 5121.  20899        let the_symbol;
-
 5122.  20899        advance();
-
 5123.  20712        if (token_now.identifier && token_nxt.id === ":") {
+
 5112.  20917    function parse_statement() {
+
 5113.  20917
+
 5114.  20917// Parse a statement. Any statement may have a label, but only four statements
+
 5115.  20917// have use for one. A statement can be one of the standard statements, or
+
 5116.  20917// an assignment expression, or an invocation expression.
+
 5117.  20917
+
 5118.  20917        let first;
+
 5119.  20917        let the_label;
+
 5120.  20917        let the_statement;
+
 5121.  20917        let the_symbol;
+
 5122.  20917        advance();
+
 5123.  20730        if (token_now.identifier && token_nxt.id === ":") {
 5124.     13            the_label = token_now;
 5125.     13            if (the_label.id === "ignore") {
 5126.     13
@@ -5316,88 +5316,88 @@
 5158.     13// ["aa:", "parse_statement", "unexpected_label_a", "aa", 1]
 5159.     13
 5160.     13            warn("unexpected_label_a", the_label);
-
 5161.  20890        }
-
 5162.  20890
-
 5163.  20890// Parse the statement.
-
 5164.  20890
-
 5165.  20890        first = token_now;
-
 5166.  20890        first.statement = true;
-
 5167.  20890        the_symbol = syntax_dict[first.id];
-
 5168.  20890        if (
-
 5169.  20890            the_symbol !== undefined
-
 5170.  20890            && the_symbol.fud_stmt !== undefined
-
 5171.  20899
-
 5172.  20899// PR-318 - Bugfix - Fixes issues #316, #317 - dynamic-import().
-
 5173.  20899
-
 5174.  10132            && !(the_symbol.id === "import" && token_nxt.id === "(")
-
 5175.  10130        ) {
-
 5176.  10130            the_symbol.disrupt = false;
-
 5177.  10130            the_symbol.statement = true;
-
 5178.  10130            token_now.arity = "statement";
-
 5179.  10130            the_statement = the_symbol.fud_stmt();
-
 5180.  10130            functionage.statement_prv = the_statement;
-
 5181.  10760        } else {
-
 5182.  10760
-
 5183.  10760// It is an expression statement.
-
 5184.  10760
-
 5185.  10760            the_statement = parse_expression(0, true);
-
 5186.  10760            functionage.statement_prv = the_statement;
-
 5187.  10760            if (the_statement.wrapped && the_statement.id !== "(") {
-
 5188.  10760
-
 5189.  10760// test_cause:
-
 5190.  10760// ["(0)", "parse_statement", "unexpected_a", "(", 1]
-
 5191.  10760
-
 5192.  10760                warn("unexpected_a", first);
-
 5193.  10760            }
-
 5194.  10760            semicolon();
-
 5195.  20796        }
-
 5196.  20796        if (the_label !== undefined) {
+
 5161.  20908        }
+
 5162.  20908
+
 5163.  20908// Parse the statement.
+
 5164.  20908
+
 5165.  20908        first = token_now;
+
 5166.  20908        first.statement = true;
+
 5167.  20908        the_symbol = syntax_dict[first.id];
+
 5168.  20908        if (
+
 5169.  20908            the_symbol !== undefined
+
 5170.  20908            && the_symbol.fud_stmt !== undefined
+
 5171.  20917
+
 5172.  20917// PR-318 - Bugfix - Fixes issues #316, #317 - dynamic-import().
+
 5173.  20917
+
 5174.  10144            && !(the_symbol.id === "import" && token_nxt.id === "(")
+
 5175.  10142        ) {
+
 5176.  10142            the_symbol.disrupt = false;
+
 5177.  10142            the_symbol.statement = true;
+
 5178.  10142            token_now.arity = "statement";
+
 5179.  10142            the_statement = the_symbol.fud_stmt();
+
 5180.  10142            functionage.statement_prv = the_statement;
+
 5181.  10766        } else {
+
 5182.  10766
+
 5183.  10766// It is an expression statement.
+
 5184.  10766
+
 5185.  10766            the_statement = parse_expression(0, true);
+
 5186.  10766            functionage.statement_prv = the_statement;
+
 5187.  10766            if (the_statement.wrapped && the_statement.id !== "(") {
+
 5188.  10766
+
 5189.  10766// test_cause:
+
 5190.  10766// ["(0)", "parse_statement", "unexpected_a", "(", 1]
+
 5191.  10766
+
 5192.  10766                warn("unexpected_a", first);
+
 5193.  10766            }
+
 5194.  10766            semicolon();
+
 5195.  20814        }
+
 5196.  20814        if (the_label !== undefined) {
 5197.      1            the_label.dead = true;
-
 5198.  20796        }
-
 5199.  20796        return the_statement;
-
 5200.  20796    }
+
 5198.  20814        }
+
 5199.  20814        return the_statement;
+
 5200.  20814    }
 5201.    629
-
 5202.   7488    function parse_statements() {
-
 5203.   7488
-
 5204.   7488// Parse a list of statements. Give a warning if an unreachable statement
-
 5205.   7488// follows a disruptive statement.
-
 5206.   7488
-
 5207.   7488        const statement_list = [];
-
 5208.   7488        let a_statement;
-
 5209.   7488        let disrupt = false;
-
 5210.   7488
-
 5211.   7488// Parse/loop each statement until a statement-terminator is reached.
-
 5212.   7488
-
 5213.  27960        while (true) {
-
 5214.  27960            switch (token_nxt.id) {
-
 5215.  27960            case "(end)":
-
 5216.  27960            case "case":
-
 5217.  27960            case "default":
-
 5218.  27960            case "else":
-
 5219.  27960            case "}":
-
 5220.  27960
-
 5221.  27960// test_cause:
-
 5222.  27960// [";", "parse_statements", "closer", "", 0]
-
 5223.  27960// ["case", "parse_statements", "closer", "", 0]
-
 5224.  27960// ["default", "parse_statements", "closer", "", 0]
-
 5225.  27960// ["else", "parse_statements", "closer", "", 0]
-
 5226.  27960// ["}", "parse_statements", "closer", "", 0]
-
 5227.  27960
-
 5228.  27960                test_cause("closer");
-
 5229.  27960                return statement_list;
-
 5230.  27960            }
-
 5231.  27960            a_statement = parse_statement();
-
 5232.  27960            statement_list.push(a_statement);
-
 5233.  27960            if (disrupt) {
-
 5234.  27960
-
 5235.  27960// test_cause:
-
 5236.  27960// ["while(0){break;0;}", "parse_statements", "unreachable_a", "0", 16]
-
 5237.  27960
-
 5238.  27960                warn("unreachable_a", a_statement);
-
 5239.  27960            }
-
 5240.  27960            disrupt = a_statement.disrupt;
-
 5241.  27960        }
-
 5242.   7488    }
+
 5202.   7494    function parse_statements() {
+
 5203.   7494
+
 5204.   7494// Parse a list of statements. Give a warning if an unreachable statement
+
 5205.   7494// follows a disruptive statement.
+
 5206.   7494
+
 5207.   7494        const statement_list = [];
+
 5208.   7494        let a_statement;
+
 5209.   7494        let disrupt = false;
+
 5210.   7494
+
 5211.   7494// Parse/loop each statement until a statement-terminator is reached.
+
 5212.   7494
+
 5213.  27984        while (true) {
+
 5214.  27984            switch (token_nxt.id) {
+
 5215.  27984            case "(end)":
+
 5216.  27984            case "case":
+
 5217.  27984            case "default":
+
 5218.  27984            case "else":
+
 5219.  27984            case "}":
+
 5220.  27984
+
 5221.  27984// test_cause:
+
 5222.  27984// [";", "parse_statements", "closer", "", 0]
+
 5223.  27984// ["case", "parse_statements", "closer", "", 0]
+
 5224.  27984// ["default", "parse_statements", "closer", "", 0]
+
 5225.  27984// ["else", "parse_statements", "closer", "", 0]
+
 5226.  27984// ["}", "parse_statements", "closer", "", 0]
+
 5227.  27984
+
 5228.  27984                test_cause("closer");
+
 5229.  27984                return statement_list;
+
 5230.  27984            }
+
 5231.  27984            a_statement = parse_statement();
+
 5232.  27984            statement_list.push(a_statement);
+
 5233.  27984            if (disrupt) {
+
 5234.  27984
+
 5235.  27984// test_cause:
+
 5236.  27984// ["while(0){break;0;}", "parse_statements", "unreachable_a", "0", 16]
+
 5237.  27984
+
 5238.  27984                warn("unreachable_a", a_statement);
+
 5239.  27984            }
+
 5240.  27984            disrupt = a_statement.disrupt;
+
 5241.  27984        }
+
 5242.   7494    }
 5243.    629
 5244.   1258    function postassign(id) {
 5245.   1258
@@ -5930,139 +5930,139 @@
 5772.    548
 5773.    548// Parse/loop through each property in {...}.
 5774.    548
-
 5775.   1990            while (true) {
-
 5776.   1990                name = token_nxt;
-
 5777.   1990                advance();
-
 5778.   1990                if (
-
 5779.   1990                    (name.id === "get" || name.id === "set")
-
 5780.   1990                    && token_nxt.identifier
-
 5781.   1990                ) {
-
 5782.   1990                    if (!option_dict.getset) {
-
 5783.   1990
-
 5784.   1990// test_cause:
-
 5785.   1990// ["aa={get aa(){}}", "prefix_lbrace", "unexpected_a", "get", 5]
-
 5786.   1990
-
 5787.   1990                        warn("unexpected_a", name);
-
 5788.   1990                    }
-
 5789.   1990                    extra = name.id;
-
 5790.   1990                    full = extra + " " + token_nxt.id;
-
 5791.   1990                    name = token_nxt;
-
 5792.   1990                    advance();
-
 5793.   1990                    id = survey(name);
-
 5794.   1990                    if (seen[full] === true || seen[id] === true) {
-
 5795.   1990
-
 5796.   1990// test_cause:
-
 5797.   1990// ["aa={get aa(){},get aa(){}}", "prefix_lbrace", "duplicate_a", "aa", 20]
-
 5798.   1990
-
 5799.   1990                        warn("duplicate_a", name);
-
 5800.   1990                    }
-
 5801.   1990                    seen[id] = false;
-
 5802.   1990                    seen[full] = true;
-
 5803.   1990                } else if (name.id === "`") {
-
 5804.   1990
-
 5805.   1990// test_cause:
-
 5806.   1990// ["aa={`aa`:0}", "prefix_lbrace", "unexpected_a", "`", 5]
-
 5807.   1990
-
 5808.   1990                    stop("unexpected_a", name);
-
 5809.   1990
-
 5810.   1990                } else {
-
 5811.   1990                    id = survey(name);
-
 5812.   1990                    if (typeof seen[id] === "boolean") {
-
 5813.   1990
-
 5814.   1990// test_cause:
-
 5815.   1990// ["aa={aa,aa}", "prefix_lbrace", "duplicate_a", "aa", 8]
-
 5816.   1990
-
 5817.   1990                        warn("duplicate_a", name);
-
 5818.   1990                    }
-
 5819.   1990                    seen[id] = true;
-
 5820.   1990                }
-
 5821.   1990                if (name.identifier) {
-
 5822.   1990                    if (token_nxt.id === "}" || token_nxt.id === ",") {
-
 5823.   1990                        if (typeof extra === "string") {
-
 5824.   1990
-
 5825.   1990// test_cause:
-
 5826.   1990// ["aa={get aa}", "prefix_lbrace", "closer", "", 0]
-
 5827.   1990
-
 5828.   1990                            test_cause("closer");
-
 5829.   1990                            advance("(");
-
 5830.   1990                        }
-
 5831.   1990                        value = parse_expression(Infinity, true);
-
 5832.   1990                    } else if (token_nxt.id === "(") {
-
 5833.   1990
-
 5834.   1990// test_cause:
-
 5835.   1990// ["aa={aa()}", "prefix_lbrace", "paren", "", 0]
-
 5836.   1990// ["aa={get aa(){}}", "prefix_lbrace", "paren", "", 0]
-
 5837.   1990
-
 5838.   1990                        test_cause("paren");
-
 5839.   1990                        value = prefix_function({
-
 5840.   1990                            arity: "unary",
-
 5841.   1990                            from: name.from,
-
 5842.   1990                            id: "function",
-
 5843.   1990                            line: name.line,
-
 5844.   1990                            name: (
-
 5845.   1990                                typeof extra === "string"
-
 5846.   1990                                ? extra
-
 5847.   1990                                : id
-
 5848.   1990                            ),
-
 5849.   1990                            thru: name.from
-
 5850.   1990                        });
-
 5851.   1990                    } else {
-
 5852.   1990                        if (typeof extra === "string") {
-
 5853.   1990
-
 5854.   1990// test_cause:
-
 5855.   1990// ["aa={get aa.aa}", "prefix_lbrace", "paren", "", 0]
-
 5856.   1990
-
 5857.   1990                            test_cause("paren");
-
 5858.   1990                            advance("(");
-
 5859.   1990                        }
-
 5860.   1990                        the_colon = token_nxt;
-
 5861.   1990                        advance(":");
-
 5862.   1990                        value = parse_expression(0);
-
 5863.   1990                        if (
-
 5864.   1990                            value.id === name.id
-
 5865.   1990                            && value.id !== "function"
-
 5866.   1990                        ) {
-
 5867.   1990
-
 5868.   1990// test_cause:
-
 5869.   1990// ["aa={aa:aa}", "prefix_lbrace", "unexpected_a", ": aa", 7]
-
 5870.   1990
-
 5871.   1990                            warn("unexpected_a", the_colon, ": " + name.id);
-
 5872.   1990                        }
-
 5873.   1990                    }
-
 5874.   1990                    value.label = name;
-
 5875.   1990                    if (typeof extra === "string") {
-
 5876.   1990                        value.extra = extra;
-
 5877.   1990                    }
-
 5878.   1990                    the_brace.expression.push(value);
-
 5879.   1990                } else {
-
 5880.   1990
-
 5881.   1990// test_cause:
-
 5882.   1990// ["aa={\"aa\":0}", "prefix_lbrace", "colon", "", 0]
-
 5883.   1990
-
 5884.   1990                    test_cause("colon");
-
 5885.   1990                    advance(":");
-
 5886.   1990                    value = parse_expression(0);
-
 5887.   1990                    value.label = name;
-
 5888.   1990                    the_brace.expression.push(value);
-
 5889.   1990                }
-
 5890.   1990                if (token_nxt.id !== ",") {
-
 5891.   1990                    break;
-
 5892.   1990                }
-
 5893.   1990
-
 5894.   1990// test_cause:
-
 5895.   1990// ["aa={\"aa\":0,\"bb\":0}", "prefix_lbrace", "comma", "", 0]
-
 5896.   1990
-
 5897.   1990                test_cause("comma");
-
 5898.   1990                advance(",");
-
 5899.   1990                if (token_nxt.id === "}") {
-
 5900.   1990
-
 5901.   1990// test_cause:
-
 5902.   1990// ["let aa={aa:0,}", "prefix_lbrace", "unexpected_a", ",", 13]
-
 5903.   1990
-
 5904.   1990                    warn("unexpected_a", token_now);
-
 5905.   1990                    break;
-
 5906.   1990                }
-
 5907.   1990            }
+
 5775.   1996            while (true) {
+
 5776.   1996                name = token_nxt;
+
 5777.   1996                advance();
+
 5778.   1996                if (
+
 5779.   1996                    (name.id === "get" || name.id === "set")
+
 5780.   1996                    && token_nxt.identifier
+
 5781.   1996                ) {
+
 5782.   1996                    if (!option_dict.getset) {
+
 5783.   1996
+
 5784.   1996// test_cause:
+
 5785.   1996// ["aa={get aa(){}}", "prefix_lbrace", "unexpected_a", "get", 5]
+
 5786.   1996
+
 5787.   1996                        warn("unexpected_a", name);
+
 5788.   1996                    }
+
 5789.   1996                    extra = name.id;
+
 5790.   1996                    full = extra + " " + token_nxt.id;
+
 5791.   1996                    name = token_nxt;
+
 5792.   1996                    advance();
+
 5793.   1996                    id = survey(name);
+
 5794.   1996                    if (seen[full] === true || seen[id] === true) {
+
 5795.   1996
+
 5796.   1996// test_cause:
+
 5797.   1996// ["aa={get aa(){},get aa(){}}", "prefix_lbrace", "duplicate_a", "aa", 20]
+
 5798.   1996
+
 5799.   1996                        warn("duplicate_a", name);
+
 5800.   1996                    }
+
 5801.   1996                    seen[id] = false;
+
 5802.   1996                    seen[full] = true;
+
 5803.   1996                } else if (name.id === "`") {
+
 5804.   1996
+
 5805.   1996// test_cause:
+
 5806.   1996// ["aa={`aa`:0}", "prefix_lbrace", "unexpected_a", "`", 5]
+
 5807.   1996
+
 5808.   1996                    stop("unexpected_a", name);
+
 5809.   1996
+
 5810.   1996                } else {
+
 5811.   1996                    id = survey(name);
+
 5812.   1996                    if (typeof seen[id] === "boolean") {
+
 5813.   1996
+
 5814.   1996// test_cause:
+
 5815.   1996// ["aa={aa,aa}", "prefix_lbrace", "duplicate_a", "aa", 8]
+
 5816.   1996
+
 5817.   1996                        warn("duplicate_a", name);
+
 5818.   1996                    }
+
 5819.   1996                    seen[id] = true;
+
 5820.   1996                }
+
 5821.   1996                if (name.identifier) {
+
 5822.   1996                    if (token_nxt.id === "}" || token_nxt.id === ",") {
+
 5823.   1996                        if (typeof extra === "string") {
+
 5824.   1996
+
 5825.   1996// test_cause:
+
 5826.   1996// ["aa={get aa}", "prefix_lbrace", "closer", "", 0]
+
 5827.   1996
+
 5828.   1996                            test_cause("closer");
+
 5829.   1996                            advance("(");
+
 5830.   1996                        }
+
 5831.   1996                        value = parse_expression(Infinity, true);
+
 5832.   1996                    } else if (token_nxt.id === "(") {
+
 5833.   1996
+
 5834.   1996// test_cause:
+
 5835.   1996// ["aa={aa()}", "prefix_lbrace", "paren", "", 0]
+
 5836.   1996// ["aa={get aa(){}}", "prefix_lbrace", "paren", "", 0]
+
 5837.   1996
+
 5838.   1996                        test_cause("paren");
+
 5839.   1996                        value = prefix_function({
+
 5840.   1996                            arity: "unary",
+
 5841.   1996                            from: name.from,
+
 5842.   1996                            id: "function",
+
 5843.   1996                            line: name.line,
+
 5844.   1996                            name: (
+
 5845.   1996                                typeof extra === "string"
+
 5846.   1996                                ? extra
+
 5847.   1996                                : id
+
 5848.   1996                            ),
+
 5849.   1996                            thru: name.from
+
 5850.   1996                        });
+
 5851.   1996                    } else {
+
 5852.   1996                        if (typeof extra === "string") {
+
 5853.   1996
+
 5854.   1996// test_cause:
+
 5855.   1996// ["aa={get aa.aa}", "prefix_lbrace", "paren", "", 0]
+
 5856.   1996
+
 5857.   1996                            test_cause("paren");
+
 5858.   1996                            advance("(");
+
 5859.   1996                        }
+
 5860.   1996                        the_colon = token_nxt;
+
 5861.   1996                        advance(":");
+
 5862.   1996                        value = parse_expression(0);
+
 5863.   1996                        if (
+
 5864.   1996                            value.id === name.id
+
 5865.   1996                            && value.id !== "function"
+
 5866.   1996                        ) {
+
 5867.   1996
+
 5868.   1996// test_cause:
+
 5869.   1996// ["aa={aa:aa}", "prefix_lbrace", "unexpected_a", ": aa", 7]
+
 5870.   1996
+
 5871.   1996                            warn("unexpected_a", the_colon, ": " + name.id);
+
 5872.   1996                        }
+
 5873.   1996                    }
+
 5874.   1996                    value.label = name;
+
 5875.   1996                    if (typeof extra === "string") {
+
 5876.   1996                        value.extra = extra;
+
 5877.   1996                    }
+
 5878.   1996                    the_brace.expression.push(value);
+
 5879.   1996                } else {
+
 5880.   1996
+
 5881.   1996// test_cause:
+
 5882.   1996// ["aa={\"aa\":0}", "prefix_lbrace", "colon", "", 0]
+
 5883.   1996
+
 5884.   1996                    test_cause("colon");
+
 5885.   1996                    advance(":");
+
 5886.   1996                    value = parse_expression(0);
+
 5887.   1996                    value.label = name;
+
 5888.   1996                    the_brace.expression.push(value);
+
 5889.   1996                }
+
 5890.   1996                if (token_nxt.id !== ",") {
+
 5891.   1996                    break;
+
 5892.   1996                }
+
 5893.   1996
+
 5894.   1996// test_cause:
+
 5895.   1996// ["aa={\"aa\":0,\"bb\":0}", "prefix_lbrace", "comma", "", 0]
+
 5896.   1996
+
 5897.   1996                test_cause("comma");
+
 5898.   1996                advance(",");
+
 5899.   1996                if (token_nxt.id === "}") {
+
 5900.   1996
+
 5901.   1996// test_cause:
+
 5902.   1996// ["let aa={aa:0,}", "prefix_lbrace", "unexpected_a", ",", 13]
+
 5903.   1996
+
 5904.   1996                    warn("unexpected_a", token_now);
+
 5905.   1996                    break;
+
 5906.   1996                }
+
 5907.   1996            }
 5908.    583        }
 5909.    583
 5910.    583// test_cause:
@@ -6070,11 +6070,11 @@
 5912.    583
 5913.    583        check_ordered(
 5914.    583            "property",
-
 5915.   1985            the_brace.expression.map(function ({
-
 5916.   1985                label
-
 5917.   1985            }) {
-
 5918.   1985                return label;
-
 5919.   1985            })
+
 5915.   1991            the_brace.expression.map(function ({
+
 5916.   1991                label
+
 5917.   1991            }) {
+
 5918.   1991                return label;
+
 5919.   1991            })
 5920.    583        );
 5921.    583        advance("}");
 5922.    583        return the_brace;
@@ -6201,13 +6201,13 @@
 6043.      2        return the_void;
 6044.      2    }
 6045.    629
-
 6046.  13416    function semicolon() {
-
 6047.  13416
-
 6048.  13416// Try to match a semicolon.
-
 6049.  13416
-
 6050.  13193        if (token_nxt.id === ";") {
-
 6051.  13193            advance(";");
-
 6052.  13193        } else {
+
 6046.  13428    function semicolon() {
+
 6047.  13428
+
 6048.  13428// Try to match a semicolon.
+
 6049.  13428
+
 6050.  13205        if (token_nxt.id === ";") {
+
 6051.  13205            advance(";");
+
 6052.  13205        } else {
 6053.    223
 6054.    223// test_cause:
 6055.    223// ["0", "semicolon", "expected_a_b", "(end)", 1]
@@ -6220,8 +6220,8 @@
 6062.    223                artifact()
 6063.    223            );
 6064.    223        }
-
 6065.  13416        anon = "anonymous";
-
 6066.  13416    }
+
 6065.  13428        anon = "anonymous";
+
 6066.  13428    }
 6067.    629
 6068.  14467    function stmt(id, fud_stmt) {
 6069.  14467
@@ -6568,11 +6568,11 @@
 6410.      8        return the_for;
 6411.      8    }
 6412.    629
-
 6413.   3040    function stmt_if() {
-
 6414.   3040        const the_if = token_now;
-
 6415.   3040        let the_else;
-
 6416.   3040        the_if.expression = condition();
-
 6417.   3040        the_if.block = block();
+
 6413.   3046    function stmt_if() {
+
 6414.   3046        const the_if = token_now;
+
 6415.   3046        let the_else;
+
 6416.   3046        the_if.expression = condition();
+
 6417.   3046        the_if.block = block();
 6418.    642        if (token_nxt.id === "else") {
 6419.    642            advance("else");
 6420.    642            the_else = token_now;
@@ -6603,9 +6603,9 @@
 6445.    642                    warn("unexpected_a", the_else);
 6446.    642                }
 6447.    642            }
-
 6448.   3039        }
-
 6449.   3039        return the_if;
-
 6450.   3039    }
+
 6448.   3045        }
+
 6449.   3045        return the_if;
+
 6450.   3045    }
 6451.    629
 6452.     62    function stmt_import() {
 6453.     62        const the_import = token_now;
@@ -7008,33 +7008,33 @@
 6850.     56        return the_try;
 6851.     56    }
 6852.    629
-
 6853.   2328    function stmt_var() {
-
 6854.   2328        let ellipsis;
-
 6855.   2328        let mode_const;
-
 6856.   2328        let name;
-
 6857.   2328        let the_brace;
-
 6858.   2328        let the_bracket;
-
 6859.   2328        let the_variable = token_now;
-
 6860.   2328        let variable_prv;
-
 6861.   2328        mode_const = the_variable.id === "const";
-
 6862.   2328        the_variable.names = [];
-
 6863.   2328
-
 6864.   2328// A program may use var or let, but not both.
-
 6865.   2328
-
 6866.   2052        if (!mode_const) {
-
 6867.   2052            if (mode_var === undefined) {
-
 6868.   2052                mode_var = the_variable.id;
-
 6869.   2052            } else if (the_variable.id !== mode_var) {
-
 6870.   2052
-
 6871.   2052// test_cause:
-
 6872.   2052// ["let aa;var aa", "stmt_var", "expected_a_b", "var", 8]
-
 6873.   2052
-
 6874.   2052                warn("expected_a_b", the_variable, mode_var, the_variable.id);
-
 6875.   2052            }
-
 6876.   2052        }
-
 6877.   2328
-
 6878.   2328// We don't expect to see variables created in switch statements.
-
 6879.   2328
+
 6853.   2334    function stmt_var() {
+
 6854.   2334        let ellipsis;
+
 6855.   2334        let mode_const;
+
 6856.   2334        let name;
+
 6857.   2334        let the_brace;
+
 6858.   2334        let the_bracket;
+
 6859.   2334        let the_variable = token_now;
+
 6860.   2334        let variable_prv;
+
 6861.   2334        mode_const = the_variable.id === "const";
+
 6862.   2334        the_variable.names = [];
+
 6863.   2334
+
 6864.   2334// A program may use var or let, but not both.
+
 6865.   2334
+
 6866.   2058        if (!mode_const) {
+
 6867.   2058            if (mode_var === undefined) {
+
 6868.   2058                mode_var = the_variable.id;
+
 6869.   2058            } else if (the_variable.id !== mode_var) {
+
 6870.   2058
+
 6871.   2058// test_cause:
+
 6872.   2058// ["let aa;var aa", "stmt_var", "expected_a_b", "var", 8]
+
 6873.   2058
+
 6874.   2058                warn("expected_a_b", the_variable, mode_var, the_variable.id);
+
 6875.   2058            }
+
 6876.   2058        }
+
 6877.   2334
+
 6878.   2334// We don't expect to see variables created in switch statements.
+
 6879.   2334
 6880.      1        if (functionage.switch > 0) {
 6881.      1
 6882.      1// test_cause:
@@ -7042,10 +7042,10 @@
 6884.      1
 6885.      1            warn("var_switch", the_variable);
 6886.      1        }
-
 6887.   2328        switch (
-
 6888.   2328            Boolean(functionage.statement_prv)
+
 6887.   2334        switch (
+
 6888.   2334            Boolean(functionage.statement_prv)
 6889.   1449            && functionage.statement_prv.id
-
 6890.   2328        ) {
+
 6890.   2334        ) {
 6891.    107        case "const":
 6892.   1437        case "let":
 6893.   1439        case "var":
@@ -7065,8 +7065,8 @@
 6907.      3
 6908.      3            test_cause("import_prv");
 6909.      3            break;
-
 6910.    879        case false:
-
 6911.    879            break;
+
 6910.    885        case false:
+
 6911.    885            break;
 6912.      7        default:
 6913.      7            if (
 6914.      7                (option_dict.beta && !option_dict.variable)
@@ -7081,176 +7081,176 @@
 6923.      7
 6924.      7                warn("var_on_top", token_now);
 6925.      7            }
-
 6926.   2328        }
-
 6927.   2329        while (true) {
-
 6928.   2329            if (token_nxt.id === "{") {
-
 6929.   2329                if (the_variable.id === "var") {
-
 6930.   2329
-
 6931.   2329// test_cause:
-
 6932.   2329// ["var{aa}=0", "stmt_var", "unexpected_a", "var", 1]
-
 6933.   2329
-
 6934.   2329                    warn("unexpected_a", the_variable);
-
 6935.   2329                }
-
 6936.   2329                the_brace = token_nxt;
-
 6937.   2329                advance("{");
-
 6938.   2329                while (true) {
-
 6939.   2329                    name = token_nxt;
-
 6940.   2329                    if (!name.identifier) {
-
 6941.   2329
-
 6942.   2329// test_cause:
-
 6943.   2329// ["let {0}", "stmt_var", "expected_identifier_a", "0", 6]
-
 6944.   2329
-
 6945.   2329                        return stop("expected_identifier_a");
-
 6946.   2329                    }
-
 6947.   2329                    survey(name);
-
 6948.   2329                    advance();
-
 6949.   2329                    if (token_nxt.id === ":") {
-
 6950.   2329                        advance(":");
-
 6951.   2329                        if (!token_nxt.identifier) {
-
 6952.   2329
-
 6953.   2329// test_cause:
-
 6954.   2329// ["let {aa:0}", "stmt_var", "expected_identifier_a", "0", 9]
-
 6955.   2329// ["let {aa:{aa}}", "stmt_var", "expected_identifier_a", "{", 9]
-
 6956.   2329
-
 6957.   2329                            return stop("expected_identifier_a");
-
 6958.   2329                        }
-
 6959.   2329
-
 6960.   2329// PR-363 - Bugfix
-
 6961.   2329// Add test against false-warning <uninitialized 'bb'> in code
-
 6962.   2329// '/*jslint node*/\nlet {aa:bb} = {}; bb();'.
-
 6963.   2329//
-
 6964.   2329//                         token_nxt.label = name;
-
 6965.   2329//                         the_variable.names.push(token_nxt);
-
 6966.   2329//                         enroll(token_nxt, "variable", mode_const);
-
 6967.   2329
-
 6968.   2329                        name = token_nxt;
-
 6969.   2329                        the_variable.names.push(name);
-
 6970.   2329                        survey(name);
-
 6971.   2329                        enroll(name, "variable", mode_const);
-
 6972.   2329
-
 6973.   2329                        advance();
-
 6974.   2329                        the_brace.open = true;
-
 6975.   2329                    } else {
-
 6976.   2329                        the_variable.names.push(name);
-
 6977.   2329                        enroll(name, "variable", mode_const);
-
 6978.   2329                    }
-
 6979.   2329                    name.dead = false;
-
 6980.   2329                    name.init = true;
-
 6981.   2329                    if (token_nxt.id === "=") {
-
 6982.   2329
-
 6983.   2329// test_cause:
-
 6984.   2329// ["let {aa=0}", "stmt_var", "assign", "", 0]
-
 6985.   2329
-
 6986.   2329                        test_cause("assign");
-
 6987.   2329                        advance("=");
-
 6988.   2329                        name.expression = parse_expression();
-
 6989.   2329                        the_brace.open = true;
-
 6990.   2329                    }
-
 6991.   2329                    if (token_nxt.id !== ",") {
-
 6992.   2329                        break;
-
 6993.   2329                    }
-
 6994.   2329                    advance(",");
-
 6995.   2329                }
-
 6996.   2329
-
 6997.   2329// test_cause:
-
 6998.   2329// ["let{bb,aa}", "check_ordered", "expected_a_b_before_c_d", "aa", 8]
-
 6999.   2329
-
 7000.   2329                check_ordered(the_variable.id, the_variable.names);
-
 7001.   2329                advance("}");
-
 7002.   2329                advance("=");
-
 7003.   2329                the_variable.expression = parse_expression(0);
-
 7004.   2329            } else if (token_nxt.id === "[") {
-
 7005.   2329                if (the_variable.id === "var") {
-
 7006.   2329
-
 7007.   2329// test_cause:
-
 7008.   2329// ["var[aa]=0", "stmt_var", "unexpected_a", "var", 1]
-
 7009.   2329
-
 7010.   2329                    warn("unexpected_a", the_variable);
-
 7011.   2329                }
-
 7012.   2329                the_bracket = token_nxt;
-
 7013.   2329                advance("[");
-
 7014.   2329                while (true) {
-
 7015.   2329                    ellipsis = false;
-
 7016.   2329                    if (token_nxt.id === "...") {
-
 7017.   2329                        ellipsis = true;
-
 7018.   2329                        advance("...");
-
 7019.   2329                    }
-
 7020.   2329                    if (!token_nxt.identifier) {
-
 7021.   2329
-
 7022.   2329// test_cause:
-
 7023.   2329// ["let[]", "stmt_var", "expected_identifier_a", "]", 5]
-
 7024.   2329
-
 7025.   2329                        return stop("expected_identifier_a");
-
 7026.   2329                    }
-
 7027.   2329                    name = token_nxt;
-
 7028.   2329                    advance();
-
 7029.   2329                    the_variable.names.push(name);
-
 7030.   2329                    enroll(name, "variable", mode_const);
-
 7031.   2329                    name.dead = false;
-
 7032.   2329                    name.init = true;
-
 7033.   2329                    if (ellipsis) {
-
 7034.   2329                        name.ellipsis = true;
-
 7035.   2329                        break;
-
 7036.   2329                    }
-
 7037.   2329                    if (token_nxt.id === "=") {
-
 7038.   2329                        advance("=");
-
 7039.   2329                        name.expression = parse_expression();
-
 7040.   2329                        the_bracket.open = true;
-
 7041.   2329                    }
-
 7042.   2329                    if (token_nxt.id !== ",") {
-
 7043.   2329                        break;
-
 7044.   2329                    }
-
 7045.   2329                    advance(",");
-
 7046.   2329                }
-
 7047.   2329                advance("]");
-
 7048.   2329                advance("=");
-
 7049.   2329                the_variable.expression = parse_expression(0);
-
 7050.   2329            } else if (token_nxt.identifier) {
-
 7051.   2329                name = token_nxt;
-
 7052.   2329                advance();
-
 7053.   2329                if (name.id === "ignore") {
-
 7054.   2329
-
 7055.   2329// test_cause:
-
 7056.   2329// ["
-
 7057.   2329// let ignore;function aa(ignore) {}
-
 7058.   2329// ", "stmt_var", "unexpected_a", "ignore", 5]
-
 7059.   2329
-
 7060.   2329                    warn("unexpected_a", name);
-
 7061.   2329                }
-
 7062.   2329                enroll(name, "variable", mode_const);
-
 7063.   2329                if (token_nxt.id === "=" || mode_const) {
-
 7064.   2329                    advance("=");
-
 7065.   2329                    name.dead = false;
-
 7066.   2329                    name.init = true;
-
 7067.   2329                    name.expression = parse_expression(0);
-
 7068.   2329                }
-
 7069.   2329                the_variable.names.push(name);
-
 7070.   2329            } else {
-
 7071.   2329
-
 7072.   2329// test_cause:
-
 7073.   2329// ["let 0", "stmt_var", "expected_identifier_a", "0", 5]
-
 7074.   2329// ["var{aa:{aa}}", "stmt_var", "expected_identifier_a", "{", 8]
-
 7075.   2329
-
 7076.   2329                return stop("expected_identifier_a");
-
 7077.   2329            }
-
 7078.   2329            if (token_nxt.id !== ",") {
-
 7079.   2329                break;
-
 7080.   2329            }
-
 7081.   2329
-
 7082.   2329// test_cause:
-
 7083.   2329// ["let aa,bb;", "stmt_var", "expected_a_b", ",", 7]
-
 7084.   2329
-
 7085.   2329            warn("expected_a_b", token_nxt, ";", ",");
-
 7086.   2329            advance(",");
-
 7087.   2329        }
-
 7088.   2314
-
 7089.   2314// Warn if variable declarations are unordered.
-
 7090.   2314
-
 7091.   2314        if (
-
 7092.   2314            option_dict.beta
-
 7093.   2314            && !option_dict.unordered
-
 7094.   2309            && !option_dict.variable
-
 7095.   2303            && variable_prv
+
 6926.   2334        }
+
 6927.   2335        while (true) {
+
 6928.   2335            if (token_nxt.id === "{") {
+
 6929.   2335                if (the_variable.id === "var") {
+
 6930.   2335
+
 6931.   2335// test_cause:
+
 6932.   2335// ["var{aa}=0", "stmt_var", "unexpected_a", "var", 1]
+
 6933.   2335
+
 6934.   2335                    warn("unexpected_a", the_variable);
+
 6935.   2335                }
+
 6936.   2335                the_brace = token_nxt;
+
 6937.   2335                advance("{");
+
 6938.   2335                while (true) {
+
 6939.   2335                    name = token_nxt;
+
 6940.   2335                    if (!name.identifier) {
+
 6941.   2335
+
 6942.   2335// test_cause:
+
 6943.   2335// ["let {0}", "stmt_var", "expected_identifier_a", "0", 6]
+
 6944.   2335
+
 6945.   2335                        return stop("expected_identifier_a");
+
 6946.   2335                    }
+
 6947.   2335                    survey(name);
+
 6948.   2335                    advance();
+
 6949.   2335                    if (token_nxt.id === ":") {
+
 6950.   2335                        advance(":");
+
 6951.   2335                        if (!token_nxt.identifier) {
+
 6952.   2335
+
 6953.   2335// test_cause:
+
 6954.   2335// ["let {aa:0}", "stmt_var", "expected_identifier_a", "0", 9]
+
 6955.   2335// ["let {aa:{aa}}", "stmt_var", "expected_identifier_a", "{", 9]
+
 6956.   2335
+
 6957.   2335                            return stop("expected_identifier_a");
+
 6958.   2335                        }
+
 6959.   2335
+
 6960.   2335// PR-363 - Bugfix
+
 6961.   2335// Add test against false-warning <uninitialized 'bb'> in code
+
 6962.   2335// '/*jslint node*/\nlet {aa:bb} = {}; bb();'.
+
 6963.   2335//
+
 6964.   2335//                         token_nxt.label = name;
+
 6965.   2335//                         the_variable.names.push(token_nxt);
+
 6966.   2335//                         enroll(token_nxt, "variable", mode_const);
+
 6967.   2335
+
 6968.   2335                        name = token_nxt;
+
 6969.   2335                        the_variable.names.push(name);
+
 6970.   2335                        survey(name);
+
 6971.   2335                        enroll(name, "variable", mode_const);
+
 6972.   2335
+
 6973.   2335                        advance();
+
 6974.   2335                        the_brace.open = true;
+
 6975.   2335                    } else {
+
 6976.   2335                        the_variable.names.push(name);
+
 6977.   2335                        enroll(name, "variable", mode_const);
+
 6978.   2335                    }
+
 6979.   2335                    name.dead = false;
+
 6980.   2335                    name.init = true;
+
 6981.   2335                    if (token_nxt.id === "=") {
+
 6982.   2335
+
 6983.   2335// test_cause:
+
 6984.   2335// ["let {aa=0}", "stmt_var", "assign", "", 0]
+
 6985.   2335
+
 6986.   2335                        test_cause("assign");
+
 6987.   2335                        advance("=");
+
 6988.   2335                        name.expression = parse_expression();
+
 6989.   2335                        the_brace.open = true;
+
 6990.   2335                    }
+
 6991.   2335                    if (token_nxt.id !== ",") {
+
 6992.   2335                        break;
+
 6993.   2335                    }
+
 6994.   2335                    advance(",");
+
 6995.   2335                }
+
 6996.   2335
+
 6997.   2335// test_cause:
+
 6998.   2335// ["let{bb,aa}", "check_ordered", "expected_a_b_before_c_d", "aa", 8]
+
 6999.   2335
+
 7000.   2335                check_ordered(the_variable.id, the_variable.names);
+
 7001.   2335                advance("}");
+
 7002.   2335                advance("=");
+
 7003.   2335                the_variable.expression = parse_expression(0);
+
 7004.   2335            } else if (token_nxt.id === "[") {
+
 7005.   2335                if (the_variable.id === "var") {
+
 7006.   2335
+
 7007.   2335// test_cause:
+
 7008.   2335// ["var[aa]=0", "stmt_var", "unexpected_a", "var", 1]
+
 7009.   2335
+
 7010.   2335                    warn("unexpected_a", the_variable);
+
 7011.   2335                }
+
 7012.   2335                the_bracket = token_nxt;
+
 7013.   2335                advance("[");
+
 7014.   2335                while (true) {
+
 7015.   2335                    ellipsis = false;
+
 7016.   2335                    if (token_nxt.id === "...") {
+
 7017.   2335                        ellipsis = true;
+
 7018.   2335                        advance("...");
+
 7019.   2335                    }
+
 7020.   2335                    if (!token_nxt.identifier) {
+
 7021.   2335
+
 7022.   2335// test_cause:
+
 7023.   2335// ["let[]", "stmt_var", "expected_identifier_a", "]", 5]
+
 7024.   2335
+
 7025.   2335                        return stop("expected_identifier_a");
+
 7026.   2335                    }
+
 7027.   2335                    name = token_nxt;
+
 7028.   2335                    advance();
+
 7029.   2335                    the_variable.names.push(name);
+
 7030.   2335                    enroll(name, "variable", mode_const);
+
 7031.   2335                    name.dead = false;
+
 7032.   2335                    name.init = true;
+
 7033.   2335                    if (ellipsis) {
+
 7034.   2335                        name.ellipsis = true;
+
 7035.   2335                        break;
+
 7036.   2335                    }
+
 7037.   2335                    if (token_nxt.id === "=") {
+
 7038.   2335                        advance("=");
+
 7039.   2335                        name.expression = parse_expression();
+
 7040.   2335                        the_bracket.open = true;
+
 7041.   2335                    }
+
 7042.   2335                    if (token_nxt.id !== ",") {
+
 7043.   2335                        break;
+
 7044.   2335                    }
+
 7045.   2335                    advance(",");
+
 7046.   2335                }
+
 7047.   2335                advance("]");
+
 7048.   2335                advance("=");
+
 7049.   2335                the_variable.expression = parse_expression(0);
+
 7050.   2335            } else if (token_nxt.identifier) {
+
 7051.   2335                name = token_nxt;
+
 7052.   2335                advance();
+
 7053.   2335                if (name.id === "ignore") {
+
 7054.   2335
+
 7055.   2335// test_cause:
+
 7056.   2335// ["
+
 7057.   2335// let ignore;function aa(ignore) {}
+
 7058.   2335// ", "stmt_var", "unexpected_a", "ignore", 5]
+
 7059.   2335
+
 7060.   2335                    warn("unexpected_a", name);
+
 7061.   2335                }
+
 7062.   2335                enroll(name, "variable", mode_const);
+
 7063.   2335                if (token_nxt.id === "=" || mode_const) {
+
 7064.   2335                    advance("=");
+
 7065.   2335                    name.dead = false;
+
 7066.   2335                    name.init = true;
+
 7067.   2335                    name.expression = parse_expression(0);
+
 7068.   2335                }
+
 7069.   2335                the_variable.names.push(name);
+
 7070.   2335            } else {
+
 7071.   2335
+
 7072.   2335// test_cause:
+
 7073.   2335// ["let 0", "stmt_var", "expected_identifier_a", "0", 5]
+
 7074.   2335// ["var{aa:{aa}}", "stmt_var", "expected_identifier_a", "{", 8]
+
 7075.   2335
+
 7076.   2335                return stop("expected_identifier_a");
+
 7077.   2335            }
+
 7078.   2335            if (token_nxt.id !== ",") {
+
 7079.   2335                break;
+
 7080.   2335            }
+
 7081.   2335
+
 7082.   2335// test_cause:
+
 7083.   2335// ["let aa,bb;", "stmt_var", "expected_a_b", ",", 7]
+
 7084.   2335
+
 7085.   2335            warn("expected_a_b", token_nxt, ";", ",");
+
 7086.   2335            advance(",");
+
 7087.   2335        }
+
 7088.   2320
+
 7089.   2320// Warn if variable declarations are unordered.
+
 7090.   2320
+
 7091.   2320        if (
+
 7092.   2320            option_dict.beta
+
 7093.   2320            && !option_dict.unordered
+
 7094.   2315            && !option_dict.variable
+
 7095.   2309            && variable_prv
 7096.   1437            && (
 7097.   1437                variable_prv.id + " " + variable_prv.names[0].id
 7098.   1437                > the_variable.id + " " + the_variable.names[0].id
@@ -7270,10 +7270,10 @@
 7112.      3                variable_prv.id,
 7113.      3                variable_prv.names[0].id
 7114.      3            );
-
 7115.   2314        }
-
 7116.   2314        semicolon();
-
 7117.   2314        return the_variable;
-
 7118.   2314    }
+
 7115.   2320        }
+
 7116.   2320        semicolon();
+
 7117.   2320        return the_variable;
+
 7118.   2320    }
 7119.    629
 7120.    208    function stmt_while() {
 7121.    208        const the_while = token_now;
@@ -7300,69 +7300,69 @@
 7142.      1        stop("unexpected_a", token_now);
 7143.      1    }
 7144.    629
-
 7145.  14571    function survey(name) {
-
 7146.  14571        let id = name.id;
-
 7147.  14571
-
 7148.  14571// Tally the property name. If it is a string, only tally strings that conform
-
 7149.  14571// to the identifier rules.
-
 7150.  14571
+
 7145.  14590    function survey(name) {
+
 7146.  14590        let id = name.id;
+
 7147.  14590
+
 7148.  14590// Tally the property name. If it is a string, only tally strings that conform
+
 7149.  14590// to the identifier rules.
+
 7150.  14590
 7151.    183        if (id === "(string)") {
 7152.    183            id = name.value;
 7153.    183            if (!jslint_rgx_identifier.test(id)) {
 7154.    183                return id;
 7155.    183            }
-
 7156.  14388        } else if (id === "`") {
-
 7157.  14388            if (name.value.length === 1) {
-
 7158.  14388                id = name.value[0].value;
-
 7159.  14388                if (!jslint_rgx_identifier.test(id)) {
-
 7160.  14388                    return id;
-
 7161.  14388                }
-
 7162.  14388            }
-
 7163.  14388        } else if (!name.identifier) {
-
 7164.  14388
-
 7165.  14388// test_cause:
-
 7166.  14388// ["let aa={0:0}", "survey", "expected_identifier_a", "0", 9]
-
 7167.  14388
-
 7168.  14388            return stop("expected_identifier_a", name);
-
 7169.  14484        }
-
 7170.  14484
-
 7171.  14484// If we have seen this name before, increment its count.
-
 7172.  14484
-
 7173.  14484        if (typeof property_dict[id] === "number") {
-
 7174.  12064            property_dict[id] += 1;
-
 7175.  12064
-
 7176.  12064// If this is the first time seeing this property name, and if there is a
-
 7177.  12064// tenure list, then it must be on the list. Otherwise, it must conform to
-
 7178.  12064// the rules for good property names.
-
 7179.  12064
-
 7180.  12064        } else {
-
 7181.   2420            if (state.mode_property) {
-
 7182.   2420                if (tenure[id] !== true) {
-
 7183.   2420
-
 7184.   2420// test_cause:
-
 7185.   2420// ["/*property aa*/\naa.bb", "survey", "unregistered_property_a", "bb", 4]
-
 7186.   2420
-
 7187.   2420                    warn("unregistered_property_a", name);
-
 7188.   2420                }
-
 7189.   2420            } else if (
-
 7190.   2420                !option_dict.nomen
-
 7191.   2420                && name.identifier
-
 7192.   2420                && jslint_rgx_weird_property.test(id)
-
 7193.   2420            ) {
-
 7194.   2420
-
 7195.   2420// test_cause:
-
 7196.   2420// ["aa.$", "survey", "weird_property_a", "$", 4]
-
 7197.   2420// ["aa._", "survey", "weird_property_a", "_", 4]
-
 7198.   2420// ["aa._aa", "survey", "weird_property_a", "_aa", 4]
-
 7199.   2420// ["aa.aaSync", "survey", "weird_property_a", "aaSync", 4]
-
 7200.   2420// ["aa.aa_", "survey", "weird_property_a", "aa_", 4]
-
 7201.   2420
-
 7202.   2420                warn("weird_property_a", name);
-
 7203.   2420            }
-
 7204.   2420            property_dict[id] = 1;
-
 7205.  14484        }
-
 7206.  14484        return id;
-
 7207.  14484    }
+
 7156.  14407        } else if (id === "`") {
+
 7157.  14407            if (name.value.length === 1) {
+
 7158.  14407                id = name.value[0].value;
+
 7159.  14407                if (!jslint_rgx_identifier.test(id)) {
+
 7160.  14407                    return id;
+
 7161.  14407                }
+
 7162.  14407            }
+
 7163.  14407        } else if (!name.identifier) {
+
 7164.  14407
+
 7165.  14407// test_cause:
+
 7166.  14407// ["let aa={0:0}", "survey", "expected_identifier_a", "0", 9]
+
 7167.  14407
+
 7168.  14407            return stop("expected_identifier_a", name);
+
 7169.  14503        }
+
 7170.  14503
+
 7171.  14503// If we have seen this name before, increment its count.
+
 7172.  14503
+
 7173.  14503        if (typeof property_dict[id] === "number") {
+
 7174.  12076            property_dict[id] += 1;
+
 7175.  12076
+
 7176.  12076// If this is the first time seeing this property name, and if there is a
+
 7177.  12076// tenure list, then it must be on the list. Otherwise, it must conform to
+
 7178.  12076// the rules for good property names.
+
 7179.  12076
+
 7180.  12076        } else {
+
 7181.   2427            if (state.mode_property) {
+
 7182.   2427                if (tenure[id] !== true) {
+
 7183.   2427
+
 7184.   2427// test_cause:
+
 7185.   2427// ["/*property aa*/\naa.bb", "survey", "unregistered_property_a", "bb", 4]
+
 7186.   2427
+
 7187.   2427                    warn("unregistered_property_a", name);
+
 7188.   2427                }
+
 7189.   2427            } else if (
+
 7190.   2427                !option_dict.nomen
+
 7191.   2427                && name.identifier
+
 7192.   2427                && jslint_rgx_weird_property.test(id)
+
 7193.   2427            ) {
+
 7194.   2427
+
 7195.   2427// test_cause:
+
 7196.   2427// ["aa.$", "survey", "weird_property_a", "$", 4]
+
 7197.   2427// ["aa._", "survey", "weird_property_a", "_", 4]
+
 7198.   2427// ["aa._aa", "survey", "weird_property_a", "_aa", 4]
+
 7199.   2427// ["aa.aaSync", "survey", "weird_property_a", "aaSync", 4]
+
 7200.   2427// ["aa.aa_", "survey", "weird_property_a", "aa_", 4]
+
 7201.   2427
+
 7202.   2427                warn("weird_property_a", name);
+
 7203.   2427            }
+
 7204.   2427            property_dict[id] = 1;
+
 7205.  14503        }
+
 7206.  14503        return id;
+
 7207.  14503    }
 7208.    629
 7209.    629// These functions are used to specify the grammar of our language:
 7210.    629
@@ -7385,14 +7385,14 @@
 7227.    629// Create a ternary operator.
 7228.    629
 7229.    629        const the_symbol = symbol(id1, 30);
-
 7230.    219        the_symbol.led_infix = function parse_ternary_led(left) {
-
 7231.    219            const the_token = token_now;
-
 7232.    219            let second;
-
 7233.    219            second = parse_expression(20);
-
 7234.    219            advance(id2);
-
 7235.    219            token_now.arity = "ternary";
-
 7236.    219            the_token.arity = "ternary";
-
 7237.    219            the_token.expression = [left, second, parse_expression(10)];
+
 7230.    213        the_symbol.led_infix = function parse_ternary_led(left) {
+
 7231.    213            const the_token = token_now;
+
 7232.    213            let second;
+
 7233.    213            second = parse_expression(20);
+
 7234.    213            advance(id2);
+
 7235.    213            token_now.arity = "ternary";
+
 7236.    213            the_token.arity = "ternary";
+
 7237.    213            the_token.expression = [left, second, parse_expression(10)];
 7238.      5            if (token_nxt.id !== ")") {
 7239.      5
 7240.      5// test_cause:
@@ -7400,8 +7400,8 @@
 7242.      5
 7243.      5                warn("use_open", the_token);
 7244.      5            }
-
 7245.    219            return the_token;
-
 7246.    219        };
+
 7245.    213            return the_token;
+
 7246.    213        };
 7247.    629        return the_symbol;
 7248.    629    }
 7249.    629
@@ -7665,71 +7665,71 @@
 7507.   1032// Produce a function that will act on the tasks registered by an action
 7508.   1032// function while walking the tree.
 7509.   1032
-
 7510. 210640        return function (the_token) {
-
 7511. 210640
-
 7512. 210640// Given a task set that was built by an action function, run all
-
 7513. 210640// relevant tasks on the token.
-
 7514. 210640
-
 7515. 210640            let a_set = when[the_token.arity];
-
 7516. 210640            let i_set;
-
 7517. 210640
-
 7518. 210640// If there are tasks associated with the token's arity...
-
 7519. 210640
-
 7520. 144479            if (a_set !== undefined) {
-
 7521. 144479
-
 7522. 144479// If there are tasks associated with the token's id...
-
 7523. 144479
-
 7524. 144479                i_set = a_set[the_token.id];
-
 7525. 144479                if (i_set !== undefined) {
-
 7526. 144479                    i_set.forEach(function (task) {
-
 7527. 144479                        task(the_token);
-
 7528. 144479                    });
-
 7529. 144479                }
-
 7530. 144479
-
 7531. 144479// If there are tasks for all ids.
-
 7532. 144479
-
 7533. 144479                i_set = a_set["(all)"];
-
 7534. 144479                if (i_set !== undefined) {
-
 7535. 144479                    i_set.forEach(function (task) {
-
 7536. 144479                        task(the_token);
-
 7537. 144479                    });
-
 7538. 144479                }
-
 7539. 144479            }
-
 7540. 210640        };
+
 7510. 210780        return function (the_token) {
+
 7511. 210780
+
 7512. 210780// Given a task set that was built by an action function, run all
+
 7513. 210780// relevant tasks on the token.
+
 7514. 210780
+
 7515. 210780            let a_set = when[the_token.arity];
+
 7516. 210780            let i_set;
+
 7517. 210780
+
 7518. 210780// If there are tasks associated with the token's arity...
+
 7519. 210780
+
 7520. 144594            if (a_set !== undefined) {
+
 7521. 144594
+
 7522. 144594// If there are tasks associated with the token's id...
+
 7523. 144594
+
 7524. 144594                i_set = a_set[the_token.id];
+
 7525. 144594                if (i_set !== undefined) {
+
 7526. 144594                    i_set.forEach(function (task) {
+
 7527. 144594                        task(the_token);
+
 7528. 144594                    });
+
 7529. 144594                }
+
 7530. 144594
+
 7531. 144594// If there are tasks for all ids.
+
 7532. 144594
+
 7533. 144594                i_set = a_set["(all)"];
+
 7534. 144594                if (i_set !== undefined) {
+
 7535. 144594                    i_set.forEach(function (task) {
+
 7536. 144594                        task(the_token);
+
 7537. 144594                    });
+
 7538. 144594                }
+
 7539. 144594            }
+
 7540. 210780        };
 7541.   1032    }
 7542.    516
-
 7543.   2817    function init_variable(name) {
-
 7544.   2817        let the_variable = lookup(name);
-
 7545.   2758        if (!the_variable || the_variable.readonly) {
+
 7543.   2823    function init_variable(name) {
+
 7544.   2823        let the_variable = lookup(name);
+
 7545.   2764        if (!the_variable || the_variable.readonly) {
 7546.     61            warn("bad_assignment_a", name);
 7547.     61            return;
-
 7548.   2756        }
-
 7549.   2756        the_variable.init = true;
-
 7550.   2756    }
+
 7548.   2762        }
+
 7549.   2762        the_variable.init = true;
+
 7550.   2762    }
 7551.    516
-
 7552.  31465    function lookup(thing) {
-
 7553.  31465        let id = thing.id;
-
 7554.  31465        let the_variable;
+
 7552.  31490    function lookup(thing) {
+
 7553.  31490        let id = thing.id;
+
 7554.  31490        let the_variable;
 7555.      1        if (thing.arity !== "variable") {
 7556.      1            return;
-
 7557.  31464        }
-
 7558.  31464
-
 7559.  31464// Look up the variable in the current context.
-
 7560.  31464
-
 7561.  31464        the_variable = functionage.context[id] || catchage.context[id];
-
 7562.  31465
-
 7563.  31465// If it isn't local, search all the other contexts. If there are name
-
 7564.  31465// collisions, take the most recent.
-
 7565.  31465
-
 7566.  24589        if (the_variable && the_variable.role === "label") {
+
 7557.  31489        }
+
 7558.  31489
+
 7559.  31489// Look up the variable in the current context.
+
 7560.  31489
+
 7561.  31489        the_variable = functionage.context[id] || catchage.context[id];
+
 7562.  31490
+
 7563.  31490// If it isn't local, search all the other contexts. If there are name
+
 7564.  31490// collisions, take the most recent.
+
 7565.  31490
+
 7566.  24614        if (the_variable && the_variable.role === "label") {
 7567.      1
 7568.      1// test_cause:
 7569.      1// ["aa:while(0){aa;}", "lookup", "label_a", "aa", 13]
 7570.      1
 7571.      1            warn("label_a", thing);
 7572.      1            return the_variable;
-
 7573.  31463        }
-
 7574.  31463        if (!the_variable) {
+
 7573.  31488        }
+
 7574.  31488        if (!the_variable) {
 7575.  14775            function_stack.forEach(function ({
 7576.  14775                context
 7577.  14775            }) {
@@ -7770,76 +7770,76 @@
 7612.   6875            }
 7613.   6875            the_variable.closure = true;
 7614.   6875            functionage.context[id] = the_variable;
-
 7615.  31330        }
-
 7616.  31330        if (
-
 7617.  31330            (
-
 7618.  31330                the_variable.calls === undefined
-
 7619.  31330                || functionage.name === undefined
+
 7615.  31355        }
+
 7616.  31355        if (
+
 7617.  31355            (
+
 7618.  31355                the_variable.calls === undefined
+
 7619.  31355                || functionage.name === undefined
 7620.   4364                || the_variable.calls[functionage.name.id] === undefined
-
 7621.  31465            )
-
 7622.  31145            && the_variable.dead
+
 7621.  31490            )
+
 7622.  31170            && the_variable.dead
 7623.      3        ) {
 7624.      3
 7625.      3// test_cause:
 7626.      3// ["let aa;if(aa){let bb;}bb;", "lookup", "out_of_scope_a", "bb", 23]
 7627.      3
 7628.      3            warn("out_of_scope_a", thing);
-
 7629.  31330        }
-
 7630.  31330        return the_variable;
-
 7631.  31330    }
+
 7629.  31355        }
+
 7630.  31355        return the_variable;
+
 7631.  31355    }
 7632.    516
-
 7633.   5008    function post_a(thing) {
-
 7634.   5008
-
 7635.   5008// Assignment using = sets the init property of a variable. No other assignment
-
 7636.   5008// operator can do this. A = token keeps that variable (or array of variables
-
 7637.   5008// in case of destructuring) in its name property.
-
 7638.   5008
-
 7639.   5008        const lvalue = thing.expression[0];
-
 7640.   5008        let right;
-
 7641.   4233        if (thing.id === "=") {
-
 7642.   4233            if (thing.names !== undefined) {
-
 7643.   4233
-
 7644.   4233// test_cause:
-
 7645.   4233// ["if(0){aa=0}", "post_a", "=", "", 0]
-
 7646.   4233
-
 7647.   4233                test_cause("=");
-
 7648.   4233
-
 7649.   4233// Probably deadcode.
-
 7650.   4233// if (Array.isArray(thing.names)) {
-
 7651.   4233//     thing.names.forEach(init_variable);
-
 7652.   4233// } else {
-
 7653.   4233//     init_variable(thing.names);
-
 7654.   4233// }
-
 7655.   4233
-
 7656.   4233                jslint_assert(
-
 7657.   4233                    !Array.isArray(thing.names),
-
 7658.   4233                    `Expected !Array.isArray(thing.names).`
-
 7659.   4233                );
-
 7660.   4233                init_variable(thing.names);
-
 7661.   4233            } else {
-
 7662.   4233                if (lvalue.id === "[" || lvalue.id === "{") {
-
 7663.   4233                    lvalue.expression.forEach(function (thing) {
-
 7664.   4233                        if (thing.variable) {
-
 7665.   4233                            thing.variable.init = true;
-
 7666.   4233                        }
-
 7667.   4233                    });
-
 7668.   4233                } else if (
-
 7669.   4233                    lvalue.id === "."
-
 7670.   4233                    && thing.expression[1].id === "undefined"
-
 7671.   4233                ) {
-
 7672.   4233
-
 7673.   4233// test_cause:
-
 7674.   4233// ["aa.aa=undefined", "post_a", "expected_a_b", "undefined", 1]
-
 7675.   4233
-
 7676.   4233                    warn(
-
 7677.   4233                        "expected_a_b",
-
 7678.   4233                        lvalue.expression,
-
 7679.   4233                        "delete",
-
 7680.   4233                        "undefined"
-
 7681.   4233                    );
-
 7682.   4233                }
-
 7683.   4233            }
-
 7684.   4233        } else {
+
 7633.   5014    function post_a(thing) {
+
 7634.   5014
+
 7635.   5014// Assignment using = sets the init property of a variable. No other assignment
+
 7636.   5014// operator can do this. A = token keeps that variable (or array of variables
+
 7637.   5014// in case of destructuring) in its name property.
+
 7638.   5014
+
 7639.   5014        const lvalue = thing.expression[0];
+
 7640.   5014        let right;
+
 7641.   4239        if (thing.id === "=") {
+
 7642.   4239            if (thing.names !== undefined) {
+
 7643.   4239
+
 7644.   4239// test_cause:
+
 7645.   4239// ["if(0){aa=0}", "post_a", "=", "", 0]
+
 7646.   4239
+
 7647.   4239                test_cause("=");
+
 7648.   4239
+
 7649.   4239// Probably deadcode.
+
 7650.   4239// if (Array.isArray(thing.names)) {
+
 7651.   4239//     thing.names.forEach(init_variable);
+
 7652.   4239// } else {
+
 7653.   4239//     init_variable(thing.names);
+
 7654.   4239// }
+
 7655.   4239
+
 7656.   4239                jslint_assert(
+
 7657.   4239                    !Array.isArray(thing.names),
+
 7658.   4239                    `Expected !Array.isArray(thing.names).`
+
 7659.   4239                );
+
 7660.   4239                init_variable(thing.names);
+
 7661.   4239            } else {
+
 7662.   4239                if (lvalue.id === "[" || lvalue.id === "{") {
+
 7663.   4239                    lvalue.expression.forEach(function (thing) {
+
 7664.   4239                        if (thing.variable) {
+
 7665.   4239                            thing.variable.init = true;
+
 7666.   4239                        }
+
 7667.   4239                    });
+
 7668.   4239                } else if (
+
 7669.   4239                    lvalue.id === "."
+
 7670.   4239                    && thing.expression[1].id === "undefined"
+
 7671.   4239                ) {
+
 7672.   4239
+
 7673.   4239// test_cause:
+
 7674.   4239// ["aa.aa=undefined", "post_a", "expected_a_b", "undefined", 1]
+
 7675.   4239
+
 7676.   4239                    warn(
+
 7677.   4239                        "expected_a_b",
+
 7678.   4239                        lvalue.expression,
+
 7679.   4239                        "delete",
+
 7680.   4239                        "undefined"
+
 7681.   4239                    );
+
 7682.   4239                }
+
 7683.   4239            }
+
 7684.   4239        } else {
 7685.    775            if (lvalue.arity === "variable") {
 7686.    775                if (!lvalue.variable || lvalue.variable.readonly) {
 7687.    775                    warn("bad_assignment_a", lvalue);
@@ -7865,7 +7865,7 @@
 7707.    775                warn("unexpected_a", thing.expression[1]);
 7708.    775            }
 7709.    775        }
-
 7710.   5008    }
+
 7710.   5014    }
 7711.    516
 7712.    706    function post_a_pluseq(thing) {
 7713.    706        const right = thing.expression[1];
@@ -7883,8 +7883,8 @@
 7725.    396        }
 7726.    706    }
 7727.    516
-
 7728.  31874    function post_b(thing) {
-
 7729.  31874        let right;
+
 7728.  31901    function post_b(thing) {
+
 7729.  31901        let right;
 7730.   3950        if (relationop[thing.id]) {
 7731.   3950            if (
 7732.   3950                is_weird(thing.expression[0])
@@ -7918,58 +7918,58 @@
 7760.   2023                    warn("expected_a_b", thing, "String(...)", "+ \"\"");
 7761.   2023                }
 7762.   2023            }
-
 7763.  29851        } else if (thing.id === "[") {
-
 7764.  29851            if (thing.expression[0].id === "window") {
-
 7765.  29851
-
 7766.  29851// test_cause:
-
 7767.  29851// ["aa=window[0]", "post_b", "weird_expression_a", "window[...]", 10]
-
 7768.  29851
-
 7769.  29851                warn("weird_expression_a", thing, "window[...]");
-
 7770.  29851            }
-
 7771.  29851            if (thing.expression[0].id === "self") {
-
 7772.  29851
-
 7773.  29851// test_cause:
-
 7774.  29851// ["aa=self[0]", "post_b", "weird_expression_a", "self[...]", 8]
-
 7775.  29851
-
 7776.  29851                warn("weird_expression_a", thing, "self[...]");
-
 7777.  29851            }
-
 7778.  29851        } else if (thing.id === "." || thing.id === "?.") {
-
 7779.  29851            if (thing.expression.id === "RegExp") {
-
 7780.  29851
-
 7781.  29851// test_cause:
-
 7782.  29851// ["aa=RegExp.aa", "post_b", "weird_expression_a", ".", 10]
-
 7783.  29851
-
 7784.  29851                warn("weird_expression_a", thing);
-
 7785.  29851            }
-
 7786.  29851        } else if (thing.id !== "=>" && thing.id !== "(") {
-
 7787.  29851            right = thing.expression[1];
-
 7788.  29851            if (
-
 7789.  29851                (thing.id === "+" || thing.id === "-")
-
 7790.  29851                && right.id === thing.id
-
 7791.  29851                && right.arity === "unary"
-
 7792.  29851                && !right.wrapped
-
 7793.  29851            ) {
-
 7794.  29851
-
 7795.  29851// test_cause:
-
 7796.  29851// ["0- -0", "post_b", "wrap_unary", "-", 4]
-
 7797.  29851
-
 7798.  29851                warn("wrap_unary", right);
-
 7799.  29851            }
-
 7800.  29851            if (
-
 7801.  29851                thing.expression[0].constant === true
-
 7802.  29851                && right.constant === true
-
 7803.  29851            ) {
-
 7804.  29851                thing.constant = true;
-
 7805.  29851            }
-
 7806.  29851        }
-
 7807.  31874    }
+
 7763.  29878        } else if (thing.id === "[") {
+
 7764.  29878            if (thing.expression[0].id === "window") {
+
 7765.  29878
+
 7766.  29878// test_cause:
+
 7767.  29878// ["aa=window[0]", "post_b", "weird_expression_a", "window[...]", 10]
+
 7768.  29878
+
 7769.  29878                warn("weird_expression_a", thing, "window[...]");
+
 7770.  29878            }
+
 7771.  29878            if (thing.expression[0].id === "self") {
+
 7772.  29878
+
 7773.  29878// test_cause:
+
 7774.  29878// ["aa=self[0]", "post_b", "weird_expression_a", "self[...]", 8]
+
 7775.  29878
+
 7776.  29878                warn("weird_expression_a", thing, "self[...]");
+
 7777.  29878            }
+
 7778.  29878        } else if (thing.id === "." || thing.id === "?.") {
+
 7779.  29878            if (thing.expression.id === "RegExp") {
+
 7780.  29878
+
 7781.  29878// test_cause:
+
 7782.  29878// ["aa=RegExp.aa", "post_b", "weird_expression_a", ".", 10]
+
 7783.  29878
+
 7784.  29878                warn("weird_expression_a", thing);
+
 7785.  29878            }
+
 7786.  29878        } else if (thing.id !== "=>" && thing.id !== "(") {
+
 7787.  29878            right = thing.expression[1];
+
 7788.  29878            if (
+
 7789.  29878                (thing.id === "+" || thing.id === "-")
+
 7790.  29878                && right.id === thing.id
+
 7791.  29878                && right.arity === "unary"
+
 7792.  29878                && !right.wrapped
+
 7793.  29878            ) {
+
 7794.  29878
+
 7795.  29878// test_cause:
+
 7796.  29878// ["0- -0", "post_b", "wrap_unary", "-", 4]
+
 7797.  29878
+
 7798.  29878                warn("wrap_unary", right);
+
 7799.  29878            }
+
 7800.  29878            if (
+
 7801.  29878                thing.expression[0].constant === true
+
 7802.  29878                && right.constant === true
+
 7803.  29878            ) {
+
 7804.  29878                thing.constant = true;
+
 7805.  29878            }
+
 7806.  29878        }
+
 7807.  31901    }
 7808.    516
-
 7809.   1201    function post_b_and(thing) {
-
 7810.   1201        if (
-
 7811.   1201            is_weird(thing.expression[0])
-
 7812.   1196            || is_equal(thing.expression[0], thing.expression[1])
-
 7813.   1182            || thing.expression[0].constant === true
-
 7814.   1180            || thing.expression[1].constant === true
+
 7809.   1202    function post_b_and(thing) {
+
 7810.   1202        if (
+
 7811.   1202            is_weird(thing.expression[0])
+
 7812.   1197            || is_equal(thing.expression[0], thing.expression[1])
+
 7813.   1183            || thing.expression[0].constant === true
+
 7814.   1181            || thing.expression[1].constant === true
 7815.     21        ) {
 7816.     21
 7817.     21// test_cause:
@@ -7986,9 +7986,9 @@
 7828.     21
 7829.     21            warn("weird_condition_a", thing);
 7830.     21        }
-
 7831.   1201    }
+
 7831.   1202    }
 7832.    516
-
 7833.   1465    function post_b_lbracket(thing) {
+
 7833.   1459    function post_b_lbracket(thing) {
 7834.      1        if (thing.expression[0].id === "RegExp") {
 7835.      1
 7836.      1// test_cause:
@@ -8003,16 +8003,16 @@
 7845.      1
 7846.      1            warn("weird_expression_a", thing.expression[1]);
 7847.      1        }
-
 7848.   1465    }
+
 7848.   1459    }
 7849.    516
-
 7850.  10392    function post_b_lparen(thing) {
-
 7851.  10392        let arg;
-
 7852.  10392        let array;
-
 7853.  10392        let cack;
-
 7854.  10392        let left = thing.expression[0];
-
 7855.  10392        let new_date;
-
 7856.  10392        let paren;
-
 7857.  10392        let the_new;
+
 7850.  10405    function post_b_lparen(thing) {
+
 7851.  10405        let arg;
+
 7852.  10405        let array;
+
 7853.  10405        let cack;
+
 7854.  10405        let left = thing.expression[0];
+
 7855.  10405        let new_date;
+
 7856.  10405        let paren;
+
 7857.  10405        let the_new;
 7858.    154        if (left.id === "new") {
 7859.    154            the_new = left;
 7860.    154            left = left.expression;
@@ -8025,136 +8025,136 @@
 7867.     37
 7868.     37                warn("wrap_immediate", thing);
 7869.     37            }
-
 7870.  10355        } else if (left.identifier) {
-
 7871.  10355            if (the_new !== undefined) {
-
 7872.  10355                if (
-
 7873.  10355                    left.id[0] > "Z"
-
 7874.  10355                    || left.id === "BigInt"
-
 7875.  10355                    || left.id === "Boolean"
-
 7876.  10355                    || left.id === "Number"
-
 7877.  10355                    || left.id === "String"
-
 7878.  10355                    || left.id === "Symbol"
-
 7879.  10355                ) {
-
 7880.  10355
-
 7881.  10355// test_cause:
-
 7882.  10355// ["new BigInt()", "post_b_lparen", "unexpected_a", "new", 1]
-
 7883.  10355// ["new Boolean()", "post_b_lparen", "unexpected_a", "new", 1]
-
 7884.  10355// ["new Number()", "post_b_lparen", "unexpected_a", "new", 1]
-
 7885.  10355// ["new String()", "post_b_lparen", "unexpected_a", "new", 1]
-
 7886.  10355// ["new Symbol()", "post_b_lparen", "unexpected_a", "new", 1]
-
 7887.  10355// ["new aa()", "post_b_lparen", "unexpected_a", "new", 1]
-
 7888.  10355
-
 7889.  10355                    warn("unexpected_a", the_new);
-
 7890.  10355                } else if (left.id === "Function") {
-
 7891.  10355                    if (!option_dict.eval) {
-
 7892.  10355
-
 7893.  10355// test_cause:
-
 7894.  10355// ["new Function()", "post_b_lparen", "unexpected_a", "new Function", 5]
-
 7895.  10355
-
 7896.  10355                        warn("unexpected_a", left, "new Function");
-
 7897.  10355                    }
-
 7898.  10355                } else if (left.id === "Array") {
-
 7899.  10355                    arg = thing.expression;
-
 7900.  10355                    if (arg.length !== 2 || arg[1].id === "(string)") {
-
 7901.  10355
-
 7902.  10355// test_cause:
-
 7903.  10355// ["new Array()", "post_b_lparen", "expected_a_b", "new Array", 5]
-
 7904.  10355
-
 7905.  10355                        warn("expected_a_b", left, "[]", "new Array");
-
 7906.  10355                    }
-
 7907.  10355                } else if (left.id === "Object") {
-
 7908.  10355
-
 7909.  10355// test_cause:
-
 7910.  10355// ["new Object()", "post_b_lparen", "expected_a_b", "new Object", 5]
-
 7911.  10355
-
 7912.  10355                    warn(
-
 7913.  10355                        "expected_a_b",
-
 7914.  10355                        left,
-
 7915.  10355                        "Object.create(null)",
-
 7916.  10355                        "new Object"
-
 7917.  10355                    );
-
 7918.  10355                }
-
 7919.  10355            } else {
-
 7920.  10355                if (
-
 7921.  10355                    left.id[0] >= "A"
-
 7922.  10355                    && left.id[0] <= "Z"
-
 7923.  10355                    && left.id !== "BigInt"
-
 7924.  10355                    && left.id !== "Boolean"
-
 7925.  10355                    && left.id !== "Number"
-
 7926.  10355                    && left.id !== "String"
-
 7927.  10355                    && left.id !== "Symbol"
-
 7928.  10355                ) {
-
 7929.  10355
-
 7930.  10355// test_cause:
-
 7931.  10355// ["let Aa=Aa()", "post_b_lparen", "expected_a_before_b", "Aa", 8]
-
 7932.  10355
-
 7933.  10355                    warn("expected_a_before_b", left, "new", artifact(left));
-
 7934.  10355                }
-
 7935.  10355            }
-
 7936.  10355        } else if (left.id === ".") {
-
 7937.  10355            cack = the_new !== undefined;
-
 7938.  10355            if (left.expression.id === "Date" && left.name.id === "UTC") {
-
 7939.  10355
-
 7940.  10355// test_cause:
-
 7941.  10355// ["new Date.UTC()", "post_b_lparen", "cack", "", 0]
-
 7942.  10355
-
 7943.  10355                test_cause("cack");
-
 7944.  10355                cack = !cack;
-
 7945.  10355            }
-
 7946.  10355            if (jslint_rgx_cap.test(left.name.id) !== cack) {
-
 7947.  10355                if (the_new !== undefined) {
-
 7948.  10355
-
 7949.  10355// test_cause:
-
 7950.  10355// ["new Date.UTC()", "post_b_lparen", "unexpected_a", "new", 1]
-
 7951.  10355
-
 7952.  10355                    warn("unexpected_a", the_new);
-
 7953.  10355                } else {
-
 7954.  10355
-
 7955.  10355// test_cause:
-
 7956.  10355// ["let Aa=Aa.Aa()", "post_b_lparen", "expected_a_before_b", "Aa", 8]
-
 7957.  10355
-
 7958.  10355                    warn(
-
 7959.  10355                        "expected_a_before_b",
-
 7960.  10355                        left.expression,
-
 7961.  10355                        "new",
-
 7962.  10355                        left.name.id
-
 7963.  10355                    );
-
 7964.  10355                }
-
 7965.  10355            }
-
 7966.  10355            if (left.name.id === "getTime") {
-
 7967.  10355                paren = left.expression;
-
 7968.  10355                if (paren.id === "(") {
-
 7969.  10355                    array = paren.expression;
-
 7970.  10355                    if (array.length === 1) {
-
 7971.  10355                        new_date = array[0];
-
 7972.  10355                        if (
-
 7973.  10355                            new_date.id === "new"
-
 7974.  10355                            && new_date.expression.id === "Date"
-
 7975.  10355                        ) {
-
 7976.  10355
-
 7977.  10355// test_cause:
-
 7978.  10355// ["
-
 7979.  10355// new Date().getTime()
-
 7980.  10355// ", "post_b_lparen", "expected_a_b", "new Date().getTime()", 1]
-
 7981.  10355
-
 7982.  10355                            warn(
-
 7983.  10355                                "expected_a_b",
-
 7984.  10355                                new_date,
-
 7985.  10355                                "Date.now()",
-
 7986.  10355                                "new Date().getTime()"
-
 7987.  10355                            );
-
 7988.  10355                        }
-
 7989.  10355                    }
-
 7990.  10355                }
-
 7991.  10355            }
-
 7992.  10355        }
-
 7993.  10392    }
+
 7870.  10368        } else if (left.identifier) {
+
 7871.  10368            if (the_new !== undefined) {
+
 7872.  10368                if (
+
 7873.  10368                    left.id[0] > "Z"
+
 7874.  10368                    || left.id === "BigInt"
+
 7875.  10368                    || left.id === "Boolean"
+
 7876.  10368                    || left.id === "Number"
+
 7877.  10368                    || left.id === "String"
+
 7878.  10368                    || left.id === "Symbol"
+
 7879.  10368                ) {
+
 7880.  10368
+
 7881.  10368// test_cause:
+
 7882.  10368// ["new BigInt()", "post_b_lparen", "unexpected_a", "new", 1]
+
 7883.  10368// ["new Boolean()", "post_b_lparen", "unexpected_a", "new", 1]
+
 7884.  10368// ["new Number()", "post_b_lparen", "unexpected_a", "new", 1]
+
 7885.  10368// ["new String()", "post_b_lparen", "unexpected_a", "new", 1]
+
 7886.  10368// ["new Symbol()", "post_b_lparen", "unexpected_a", "new", 1]
+
 7887.  10368// ["new aa()", "post_b_lparen", "unexpected_a", "new", 1]
+
 7888.  10368
+
 7889.  10368                    warn("unexpected_a", the_new);
+
 7890.  10368                } else if (left.id === "Function") {
+
 7891.  10368                    if (!option_dict.eval) {
+
 7892.  10368
+
 7893.  10368// test_cause:
+
 7894.  10368// ["new Function()", "post_b_lparen", "unexpected_a", "new Function", 5]
+
 7895.  10368
+
 7896.  10368                        warn("unexpected_a", left, "new Function");
+
 7897.  10368                    }
+
 7898.  10368                } else if (left.id === "Array") {
+
 7899.  10368                    arg = thing.expression;
+
 7900.  10368                    if (arg.length !== 2 || arg[1].id === "(string)") {
+
 7901.  10368
+
 7902.  10368// test_cause:
+
 7903.  10368// ["new Array()", "post_b_lparen", "expected_a_b", "new Array", 5]
+
 7904.  10368
+
 7905.  10368                        warn("expected_a_b", left, "[]", "new Array");
+
 7906.  10368                    }
+
 7907.  10368                } else if (left.id === "Object") {
+
 7908.  10368
+
 7909.  10368// test_cause:
+
 7910.  10368// ["new Object()", "post_b_lparen", "expected_a_b", "new Object", 5]
+
 7911.  10368
+
 7912.  10368                    warn(
+
 7913.  10368                        "expected_a_b",
+
 7914.  10368                        left,
+
 7915.  10368                        "Object.create(null)",
+
 7916.  10368                        "new Object"
+
 7917.  10368                    );
+
 7918.  10368                }
+
 7919.  10368            } else {
+
 7920.  10368                if (
+
 7921.  10368                    left.id[0] >= "A"
+
 7922.  10368                    && left.id[0] <= "Z"
+
 7923.  10368                    && left.id !== "BigInt"
+
 7924.  10368                    && left.id !== "Boolean"
+
 7925.  10368                    && left.id !== "Number"
+
 7926.  10368                    && left.id !== "String"
+
 7927.  10368                    && left.id !== "Symbol"
+
 7928.  10368                ) {
+
 7929.  10368
+
 7930.  10368// test_cause:
+
 7931.  10368// ["let Aa=Aa()", "post_b_lparen", "expected_a_before_b", "Aa", 8]
+
 7932.  10368
+
 7933.  10368                    warn("expected_a_before_b", left, "new", artifact(left));
+
 7934.  10368                }
+
 7935.  10368            }
+
 7936.  10368        } else if (left.id === ".") {
+
 7937.  10368            cack = the_new !== undefined;
+
 7938.  10368            if (left.expression.id === "Date" && left.name.id === "UTC") {
+
 7939.  10368
+
 7940.  10368// test_cause:
+
 7941.  10368// ["new Date.UTC()", "post_b_lparen", "cack", "", 0]
+
 7942.  10368
+
 7943.  10368                test_cause("cack");
+
 7944.  10368                cack = !cack;
+
 7945.  10368            }
+
 7946.  10368            if (jslint_rgx_cap.test(left.name.id) !== cack) {
+
 7947.  10368                if (the_new !== undefined) {
+
 7948.  10368
+
 7949.  10368// test_cause:
+
 7950.  10368// ["new Date.UTC()", "post_b_lparen", "unexpected_a", "new", 1]
+
 7951.  10368
+
 7952.  10368                    warn("unexpected_a", the_new);
+
 7953.  10368                } else {
+
 7954.  10368
+
 7955.  10368// test_cause:
+
 7956.  10368// ["let Aa=Aa.Aa()", "post_b_lparen", "expected_a_before_b", "Aa", 8]
+
 7957.  10368
+
 7958.  10368                    warn(
+
 7959.  10368                        "expected_a_before_b",
+
 7960.  10368                        left.expression,
+
 7961.  10368                        "new",
+
 7962.  10368                        left.name.id
+
 7963.  10368                    );
+
 7964.  10368                }
+
 7965.  10368            }
+
 7966.  10368            if (left.name.id === "getTime") {
+
 7967.  10368                paren = left.expression;
+
 7968.  10368                if (paren.id === "(") {
+
 7969.  10368                    array = paren.expression;
+
 7970.  10368                    if (array.length === 1) {
+
 7971.  10368                        new_date = array[0];
+
 7972.  10368                        if (
+
 7973.  10368                            new_date.id === "new"
+
 7974.  10368                            && new_date.expression.id === "Date"
+
 7975.  10368                        ) {
+
 7976.  10368
+
 7977.  10368// test_cause:
+
 7978.  10368// ["
+
 7979.  10368// new Date().getTime()
+
 7980.  10368// ", "post_b_lparen", "expected_a_b", "new Date().getTime()", 1]
+
 7981.  10368
+
 7982.  10368                            warn(
+
 7983.  10368                                "expected_a_b",
+
 7984.  10368                                new_date,
+
 7985.  10368                                "Date.now()",
+
 7986.  10368                                "new Date().getTime()"
+
 7987.  10368                            );
+
 7988.  10368                        }
+
 7989.  10368                    }
+
 7990.  10368                }
+
 7991.  10368            }
+
 7992.  10368        }
+
 7993.  10405    }
 7994.    516
-
 7995.    963    function post_b_or(thing) {
-
 7996.    963        if (
-
 7997.    963            is_weird(thing.expression[0])
-
 7998.    963            || is_equal(thing.expression[0], thing.expression[1])
-
 7999.    962            || thing.expression[0].constant === true
+
 7995.    969    function post_b_or(thing) {
+
 7996.    969        if (
+
 7997.    969            is_weird(thing.expression[0])
+
 7998.    969            || is_equal(thing.expression[0], thing.expression[1])
+
 7999.    968            || thing.expression[0].constant === true
 8000.      2        ) {
 8001.      2
 8002.      2// test_cause:
@@ -8162,7 +8162,7 @@
 8004.      2
 8005.      2            warn("weird_condition_a", thing);
 8006.      2        }
-
 8007.    963    }
+
 8007.    969    }
 8008.    516
 8009.     78    function post_s_export(the_thing) {
 8010.     78
@@ -8222,13 +8222,13 @@
 8064.     60        }
 8065.     61    }
 8066.    516
-
 8067.   7684    function post_s_lbrace() {
-
 8068.   2981        blockage.live.forEach(function (name) {
-
 8069.   2981            name.dead = true;
-
 8070.   2981        });
-
 8071.   7684        delete blockage.live;
-
 8072.   7684        blockage = block_stack.pop();
-
 8073.   7684    }
+
 8067.   7690    function post_s_lbrace() {
+
 8068.   2987        blockage.live.forEach(function (name) {
+
 8069.   2987            name.dead = true;
+
 8070.   2987        });
+
 8071.   7690        delete blockage.live;
+
 8072.   7690        blockage = block_stack.pop();
+
 8073.   7690    }
 8074.    516
 8075.     56    function post_s_try(thing) {
 8076.     54        if (thing.catch) {
@@ -8249,34 +8249,34 @@
 8091.     54        }
 8092.     56    }
 8093.    516
-
 8094.   2314    function post_s_var(thing) {
-
 8095.   2629        thing.names.forEach(function (name) {
-
 8096.   2629            name.dead = false;
-
 8097.   1239            if (name.expression !== undefined) {
-
 8098.   1239                walk_expression(name.expression);
-
 8099.   1239
-
 8100.   1239// Probably deadcode.
-
 8101.   1239// if (name.id === "{" || name.id === "[") {
-
 8102.   1239//     name.names.forEach(subactivate);
-
 8103.   1239// } else {
-
 8104.   1239//     name.init = true;
-
 8105.   1239// }
-
 8106.   1239
-
 8107.   1239                jslint_assert(
-
 8108.   1239                    !(name.id === "{" || name.id === "["),
-
 8109.   1239                    `Expected !(name.id === "{" || name.id === "[").`
-
 8110.   1239                );
-
 8111.   1239                name.init = true;
-
 8112.   1239            }
-
 8113.   2629            blockage.live.push(name);
-
 8114.   2629        });
-
 8115.   2314    }
+
 8094.   2320    function post_s_var(thing) {
+
 8095.   2635        thing.names.forEach(function (name) {
+
 8096.   2635            name.dead = false;
+
 8097.   1245            if (name.expression !== undefined) {
+
 8098.   1245                walk_expression(name.expression);
+
 8099.   1245
+
 8100.   1245// Probably deadcode.
+
 8101.   1245// if (name.id === "{" || name.id === "[") {
+
 8102.   1245//     name.names.forEach(subactivate);
+
 8103.   1245// } else {
+
 8104.   1245//     name.init = true;
+
 8105.   1245// }
+
 8106.   1245
+
 8107.   1245                jslint_assert(
+
 8108.   1245                    !(name.id === "{" || name.id === "["),
+
 8109.   1245                    `Expected !(name.id === "{" || name.id === "[").`
+
 8110.   1245                );
+
 8111.   1245                name.init = true;
+
 8112.   1245            }
+
 8113.   2635            blockage.live.push(name);
+
 8114.   2635        });
+
 8115.   2320    }
 8116.    516
-
 8117.    219    function post_t(thing) {
-
 8118.    219        if (
-
 8119.    219            is_weird(thing.expression[0])
-
 8120.    219            || thing.expression[0].constant === true
-
 8121.    212            || is_equal(thing.expression[1], thing.expression[2])
+
 8117.    213    function post_t(thing) {
+
 8118.    213        if (
+
 8119.    213            is_weird(thing.expression[0])
+
 8120.    213            || thing.expression[0].constant === true
+
 8121.    206            || is_equal(thing.expression[1], thing.expression[2])
 8122.      9        ) {
 8123.      9
 8124.      9// test_cause:
@@ -8284,50 +8284,50 @@
 8126.      9// ["let aa=(aa?`0`:`0`);", "post_t", "unexpected_a", "?", 11]
 8127.      9
 8128.      9            warn("unexpected_a", thing);
-
 8129.    210        } else if (is_equal(thing.expression[0], thing.expression[1])) {
-
 8130.    210
-
 8131.    210// test_cause:
-
 8132.    210// ["aa?aa:0", "post_t", "expected_a_b", "?", 3]
-
 8133.    210
-
 8134.    210            warn("expected_a_b", thing, "||", "?");
-
 8135.    210        } else if (is_equal(thing.expression[0], thing.expression[2])) {
-
 8136.    210
-
 8137.    210// test_cause:
-
 8138.    210// ["aa?0:aa", "post_t", "expected_a_b", "?", 3]
-
 8139.    210
-
 8140.    210            warn("expected_a_b", thing, "&&", "?");
-
 8141.    210        } else if (
-
 8142.    210            thing.expression[1].id === "true"
-
 8143.    210            && thing.expression[2].id === "false"
-
 8144.    210        ) {
-
 8145.    210
-
 8146.    210// test_cause:
-
 8147.    210// ["aa?true:false", "post_t", "expected_a_b", "?", 3]
-
 8148.    210
-
 8149.    210            warn("expected_a_b", thing, "!!", "?");
-
 8150.    210        } else if (
-
 8151.    210            thing.expression[1].id === "false"
-
 8152.    210            && thing.expression[2].id === "true"
-
 8153.    210        ) {
-
 8154.    210
-
 8155.    210// test_cause:
-
 8156.    210// ["aa?false:true", "post_t", "expected_a_b", "?", 3]
-
 8157.    210
-
 8158.    210            warn("expected_a_b", thing, "!", "?");
-
 8159.    210        } else if (
-
 8160.    210            thing.expression[0].wrapped !== true
-
 8161.    210            && (
-
 8162.    210                thing.expression[0].id === "||"
-
 8163.    210                || thing.expression[0].id === "&&"
-
 8164.    210            )
-
 8165.    210        ) {
-
 8166.    210
-
 8167.    210// test_cause:
-
 8168.    210// ["(aa&&!aa?0:1)", "post_t", "wrap_condition", "&&", 4]
-
 8169.    210
-
 8170.    210            warn("wrap_condition", thing.expression[0]);
-
 8171.    210        }
-
 8172.    219    }
+
 8129.    204        } else if (is_equal(thing.expression[0], thing.expression[1])) {
+
 8130.    204
+
 8131.    204// test_cause:
+
 8132.    204// ["aa?aa:0", "post_t", "expected_a_b", "?", 3]
+
 8133.    204
+
 8134.    204            warn("expected_a_b", thing, "||", "?");
+
 8135.    204        } else if (is_equal(thing.expression[0], thing.expression[2])) {
+
 8136.    204
+
 8137.    204// test_cause:
+
 8138.    204// ["aa?0:aa", "post_t", "expected_a_b", "?", 3]
+
 8139.    204
+
 8140.    204            warn("expected_a_b", thing, "&&", "?");
+
 8141.    204        } else if (
+
 8142.    204            thing.expression[1].id === "true"
+
 8143.    204            && thing.expression[2].id === "false"
+
 8144.    204        ) {
+
 8145.    204
+
 8146.    204// test_cause:
+
 8147.    204// ["aa?true:false", "post_t", "expected_a_b", "?", 3]
+
 8148.    204
+
 8149.    204            warn("expected_a_b", thing, "!!", "?");
+
 8150.    204        } else if (
+
 8151.    204            thing.expression[1].id === "false"
+
 8152.    204            && thing.expression[2].id === "true"
+
 8153.    204        ) {
+
 8154.    204
+
 8155.    204// test_cause:
+
 8156.    204// ["aa?false:true", "post_t", "expected_a_b", "?", 3]
+
 8157.    204
+
 8158.    204            warn("expected_a_b", thing, "!", "?");
+
 8159.    204        } else if (
+
 8160.    204            thing.expression[0].wrapped !== true
+
 8161.    204            && (
+
 8162.    204                thing.expression[0].id === "||"
+
 8163.    204                || thing.expression[0].id === "&&"
+
 8164.    204            )
+
 8165.    204        ) {
+
 8166.    204
+
 8167.    204// test_cause:
+
 8168.    204// ["(aa&&!aa?0:1)", "post_t", "wrap_condition", "&&", 4]
+
 8169.    204
+
 8170.    204            warn("wrap_condition", thing.expression[0]);
+
 8171.    204        }
+
 8172.    213    }
 8173.    516
 8174.   4106    function post_u(thing) {
 8175.    779        if (thing.id === "`") {
@@ -8380,11 +8380,11 @@
 8222.      6        }
 8223.      7    }
 8224.    516
-
 8225.  36885    function pre_a_bitwise(thing) {
-
 8226.  36885
-
 8227.  36885// These are the bitwise operators.
-
 8228.  36885
-
 8229.  36883        switch (!option_dict.bitwise && thing.id) {
+
 8225.  36918    function pre_a_bitwise(thing) {
+
 8226.  36918
+
 8227.  36918// These are the bitwise operators.
+
 8228.  36918
+
 8229.  36916        switch (!option_dict.bitwise && thing.id) {
 8230.      2        case "&":
 8231.      3        case "&=":
 8232.      5        case "<<":
@@ -8416,18 +8416,18 @@
 8258.     21
 8259.     21            warn("unexpected_a", thing);
 8260.     21            break;
-
 8261.  36885        }
-
 8262.  36885        if (
-
 8263.  36885            thing.id !== "("
-
 8264.  26493            && thing.id !== "&&"
-
 8265.  25292            && thing.id !== "||"
-
 8266.  24329            && thing.id !== "="
-
 8267.  20096            && Array.isArray(thing.expression)
-
 8268.   8501            && thing.expression.length === 2
-
 8269.   8500            && (
-
 8270.   8500                relationop[thing.expression[0].id] === true
-
 8271.   8500                || relationop[thing.expression[1].id] === true
-
 8272.   8500            )
+
 8261.  36918        }
+
 8262.  36918        if (
+
 8263.  36918            thing.id !== "("
+
 8264.  26513            && thing.id !== "&&"
+
 8265.  25311            && thing.id !== "||"
+
 8266.  24342            && thing.id !== "="
+
 8267.  20103            && Array.isArray(thing.expression)
+
 8268.   8495            && thing.expression.length === 2
+
 8269.   8494            && (
+
 8270.   8494                relationop[thing.expression[0].id] === true
+
 8271.   8494                || relationop[thing.expression[1].id] === true
+
 8272.   8494            )
 8273.      1        ) {
 8274.      1
 8275.      1// test_cause:
@@ -8435,12 +8435,12 @@
 8277.      1
 8278.      1            warn("unexpected_a", thing);
 8279.      1        }
-
 8280.  36885    }
+
 8280.  36918    }
 8281.    516
-
 8282.  31874    function pre_b(thing) {
-
 8283.  31874        let left;
-
 8284.  31874        let right;
-
 8285.  31874        let value;
+
 8282.  31901    function pre_b(thing) {
+
 8283.  31901        let left;
+
 8284.  31901        let right;
+
 8285.  31901        let value;
 8286.   3950        if (relationop[thing.id] === true) {
 8287.   3950            left = thing.expression[0];
 8288.   3950            right = thing.expression[1];
@@ -8487,7 +8487,7 @@
 8329.   3950                }
 8330.   3950            }
 8331.   3950        }
-
 8332.  31874    }
+
 8332.  31901    }
 8333.    516
 8334.      1    function pre_b_eqeq(thing) {
 8335.      1
@@ -8513,12 +8513,12 @@
 8355.      1        warn("unexpected_a", thing);
 8356.      1    }
 8357.    516
-
 8358.  10392    function pre_b_lparen(thing) {
-
 8359.  10392        const left = thing.expression[0];
-
 8360.  10392        let left_variable;
-
 8361.  10392        let parent;
-
 8362.  10392        if (
-
 8363.  10392            left.identifier
+
 8358.  10405    function pre_b_lparen(thing) {
+
 8359.  10405        const left = thing.expression[0];
+
 8360.  10405        let left_variable;
+
 8361.  10405        let parent;
+
 8362.  10405        if (
+
 8363.  10405            left.identifier
 8364.   6652            && functionage.context[left.id] === undefined
 8365.   3033            && typeof functionage.name === "object"
 8366.   2395        ) {
@@ -8539,7 +8539,7 @@
 8381.   2395                }
 8382.   2395            }
 8383.   2395        }
-
 8384.  10392    }
+
 8384.  10405    }
 8385.    516
 8386.      1    function pre_b_noteq(thing) {
 8387.      1
@@ -8549,8 +8549,8 @@
 8391.      1        warn("expected_a_b", thing, "!==", "!=");
 8392.      1    }
 8393.    516
-
 8394.    963    function pre_b_or(thing) {
-
 8395.   1926        thing.expression.forEach(function (thang) {
+
 8394.    969    function pre_b_or(thing) {
+
 8395.   1938        thing.expression.forEach(function (thang) {
 8396.    177            if (thang.id === "&&" && !thang.wrapped) {
 8397.      1
 8398.      1// test_cause:
@@ -8558,8 +8558,8 @@
 8400.      1
 8401.      1                warn("and", thang);
 8402.      1            }
-
 8403.   1926        });
-
 8404.    963    }
+
 8403.   1938        });
+
 8404.    969    }
 8405.    516
 8406.      8    function pre_s_for(thing) {
 8407.      8        let the_variable;
@@ -8641,11 +8641,11 @@
 8483.   2063        });
 8484.   2001    }
 8485.    516
-
 8486.   5683    function pre_s_lbrace(thing) {
-
 8487.   5683        block_stack.push(blockage);
-
 8488.   5683        blockage = thing;
-
 8489.   5683        thing.live = [];
-
 8490.   5683    }
+
 8486.   5689    function pre_s_lbrace(thing) {
+
 8487.   5689        block_stack.push(blockage);
+
 8488.   5689        blockage = thing;
+
 8489.   5689        thing.live = [];
+
 8490.   5689    }
 8491.    516
 8492.     56    function pre_try(thing) {
 8493.     54        if (thing.catch !== undefined) {
@@ -8657,13 +8657,13 @@
 8499.     54        }
 8500.     56    }
 8501.    516
-
 8502.  28646    function pre_v(thing) {
-
 8503.  28646        const the_variable = lookup(thing);
-
 8504.  28572        if (the_variable !== undefined) {
-
 8505.  28572            thing.variable = the_variable;
-
 8506.  28572            the_variable.used += 1;
-
 8507.  28572        }
-
 8508.  28646    }
+
 8502.  28665    function pre_v(thing) {
+
 8503.  28665        const the_variable = lookup(thing);
+
 8504.  28591        if (the_variable !== undefined) {
+
 8505.  28591            thing.variable = the_variable;
+
 8506.  28591            the_variable.used += 1;
+
 8507.  28591        }
+
 8508.  28665    }
 8509.    516
 8510.    717    function subactivate(name) {
 8511.    717        name.init = true;
@@ -8671,82 +8671,82 @@
 8513.    717        blockage.live.push(name);
 8514.    717    }
 8515.    516
-
 8516. 164313    function walk_expression(thing) {
-
 8517. 103647        if (thing) {
-
 8518. 103647            if (Array.isArray(thing)) {
-
 8519. 103647
-
 8520. 103647// test_cause:
-
 8521. 103647// ["(function(){}())", "walk_expression", "isArray", "", 0]
-
 8522. 103647// ["0&&0", "walk_expression", "isArray", "", 0]
-
 8523. 103647
-
 8524. 103647                test_cause("isArray");
-
 8525. 103647                thing.forEach(walk_expression);
-
 8526. 103647            } else {
-
 8527. 103647                preamble(thing);
-
 8528. 103647                walk_expression(thing.expression);
-
 8529. 103647
-
 8530. 103647// PR-414 - Bugfix - fix fart-body not being walked.
-
 8531. 103647
-
 8532. 103647                if (thing.id === "function" || thing.id === "=>") {
-
 8533. 103647
-
 8534. 103647// test_cause:
-
 8535. 103647// ["aa=()=>0", "walk_expression", "function", "=>", 0]
-
 8536. 103647// ["aa=function(){}", "walk_expression", "function", "function", 0]
-
 8537. 103647
-
 8538. 103647                    test_cause("function", thing.id);
-
 8539. 103647
-
 8540. 103647// Recurse walk_statement().
-
 8541. 103647
-
 8542. 103647                    walk_statement(thing.block);
-
 8543. 103647                }
-
 8544. 103647                if (
-
 8545. 103647                    thing.arity === "preassign" || thing.arity === "postassign"
-
 8546. 103647                ) {
-
 8547. 103647
-
 8548. 103647// test_cause:
-
 8549. 103647// ["aa=++aa", "walk_expression", "unexpected_a", "++", 4]
-
 8550. 103647// ["aa=--aa", "walk_expression", "unexpected_a", "--", 4]
-
 8551. 103647
-
 8552. 103647                    warn("unexpected_a", thing);
-
 8553. 103647                } else if (
-
 8554. 103647                    thing.arity === "statement"
-
 8555. 103647                    || thing.arity === "assignment"
-
 8556. 103647                ) {
-
 8557. 103647
-
 8558. 103647// test_cause:
-
 8559. 103647// ["aa[aa=0]", "walk_expression", "unexpected_statement_a", "=", 6]
-
 8560. 103647
-
 8561. 103647                    warn("unexpected_statement_a", thing);
-
 8562. 103647                }
-
 8563. 103647
-
 8564. 103647// test_cause:
-
 8565. 103647// ["aa=0", "walk_expression", "default", "", 0]
-
 8566. 103647
-
 8567. 103647                test_cause("default");
-
 8568. 103647                postamble(thing);
-
 8569. 103647            }
-
 8570. 103647        }
-
 8571. 164313    }
+
 8516. 164404    function walk_expression(thing) {
+
 8517. 103701        if (thing) {
+
 8518. 103701            if (Array.isArray(thing)) {
+
 8519. 103701
+
 8520. 103701// test_cause:
+
 8521. 103701// ["(function(){}())", "walk_expression", "isArray", "", 0]
+
 8522. 103701// ["0&&0", "walk_expression", "isArray", "", 0]
+
 8523. 103701
+
 8524. 103701                test_cause("isArray");
+
 8525. 103701                thing.forEach(walk_expression);
+
 8526. 103701            } else {
+
 8527. 103701                preamble(thing);
+
 8528. 103701                walk_expression(thing.expression);
+
 8529. 103701
+
 8530. 103701// PR-414 - Bugfix - fix fart-body not being walked.
+
 8531. 103701
+
 8532. 103701                if (thing.id === "function" || thing.id === "=>") {
+
 8533. 103701
+
 8534. 103701// test_cause:
+
 8535. 103701// ["aa=()=>0", "walk_expression", "function", "=>", 0]
+
 8536. 103701// ["aa=function(){}", "walk_expression", "function", "function", 0]
+
 8537. 103701
+
 8538. 103701                    test_cause("function", thing.id);
+
 8539. 103701
+
 8540. 103701// Recurse walk_statement().
+
 8541. 103701
+
 8542. 103701                    walk_statement(thing.block);
+
 8543. 103701                }
+
 8544. 103701                if (
+
 8545. 103701                    thing.arity === "preassign" || thing.arity === "postassign"
+
 8546. 103701                ) {
+
 8547. 103701
+
 8548. 103701// test_cause:
+
 8549. 103701// ["aa=++aa", "walk_expression", "unexpected_a", "++", 4]
+
 8550. 103701// ["aa=--aa", "walk_expression", "unexpected_a", "--", 4]
+
 8551. 103701
+
 8552. 103701                    warn("unexpected_a", thing);
+
 8553. 103701                } else if (
+
 8554. 103701                    thing.arity === "statement"
+
 8555. 103701                    || thing.arity === "assignment"
+
 8556. 103701                ) {
+
 8557. 103701
+
 8558. 103701// test_cause:
+
 8559. 103701// ["aa[aa=0]", "walk_expression", "unexpected_statement_a", "=", 6]
+
 8560. 103701
+
 8561. 103701                    warn("unexpected_statement_a", thing);
+
 8562. 103701                }
+
 8563. 103701
+
 8564. 103701// test_cause:
+
 8565. 103701// ["aa=0", "walk_expression", "default", "", 0]
+
 8566. 103701
+
 8567. 103701                test_cause("default");
+
 8568. 103701                postamble(thing);
+
 8569. 103701            }
+
 8570. 103701        }
+
 8571. 164404    }
 8572.    516
-
 8573.  78189    function walk_statement(thing) {
-
 8574.  43035        if (!thing) {
-
 8575.  43035            return;
-
 8576.  43035        }
-
 8577.  35154        if (Array.isArray(thing)) {
-
 8578.   7595
-
 8579.   7595// test_cause:
-
 8580.   7595// ["+[]", "walk_statement", "isArray", "", 0]
-
 8581.   7595
-
 8582.   7595            test_cause("isArray");
-
 8583.   7595
-
 8584.   7595// Recurse walk_statement().
-
 8585.   7595
-
 8586.   7595            thing.forEach(walk_statement);
-
 8587.   7595            return;
-
 8588.  27559        }
-
 8589.  27559        preamble(thing);
-
 8590.  27559        walk_expression(thing.expression);
-
 8591.  27559        if (thing.arity === "binary") {
+
 8573.  78255    function walk_statement(thing) {
+
 8574.  43071        if (!thing) {
+
 8575.  43071            return;
+
 8576.  43071        }
+
 8577.  35184        if (Array.isArray(thing)) {
+
 8578.   7601
+
 8579.   7601// test_cause:
+
 8580.   7601// ["+[]", "walk_statement", "isArray", "", 0]
+
 8581.   7601
+
 8582.   7601            test_cause("isArray");
+
 8583.   7601
+
 8584.   7601// Recurse walk_statement().
+
 8585.   7601
+
 8586.   7601            thing.forEach(walk_statement);
+
 8587.   7601            return;
+
 8588.  27583        }
+
 8589.  27583        preamble(thing);
+
 8590.  27583        walk_expression(thing.expression);
+
 8591.  27583        if (thing.arity === "binary") {
 8592.   5658            if (thing.id !== "(") {
 8593.   5658
 8594.   5658// test_cause:
@@ -8754,28 +8754,28 @@
 8596.   5658
 8597.   5658                warn("unexpected_expression_a", thing);
 8598.   5658            }
-
 8599.  21901        } else if (
-
 8600.  21901            thing.arity !== "statement"
-
 8601.  21901            && thing.arity !== "assignment"
-
 8602.  21901            && thing.id !== "import"
-
 8603.  21901        ) {
-
 8604.  21901
-
 8605.  21901// test_cause:
-
 8606.  21901// ["!0", "walk_statement", "unexpected_expression_a", "!", 1]
-
 8607.  21901// ["+[]", "walk_statement", "unexpected_expression_a", "+", 1]
-
 8608.  21901// ["+new aa()", "walk_statement", "unexpected_expression_a", "+", 1]
-
 8609.  21901// ["0", "walk_statement", "unexpected_expression_a", "0", 1]
-
 8610.  21901// ["typeof 0", "walk_statement", "unexpected_expression_a", "typeof", 1]
-
 8611.  21901
-
 8612.  21901            warn("unexpected_expression_a", thing);
-
 8613.  27559        }
-
 8614.  27559
-
 8615.  27559// Recurse walk_statement().
-
 8616.  27559
-
 8617.  27559        walk_statement(thing.block);
-
 8618.  27559        walk_statement(thing.else);
-
 8619.  27559        postamble(thing);
-
 8620.  27559    }
+
 8599.  21925        } else if (
+
 8600.  21925            thing.arity !== "statement"
+
 8601.  21925            && thing.arity !== "assignment"
+
 8602.  21925            && thing.id !== "import"
+
 8603.  21925        ) {
+
 8604.  21925
+
 8605.  21925// test_cause:
+
 8606.  21925// ["!0", "walk_statement", "unexpected_expression_a", "!", 1]
+
 8607.  21925// ["+[]", "walk_statement", "unexpected_expression_a", "+", 1]
+
 8608.  21925// ["+new aa()", "walk_statement", "unexpected_expression_a", "+", 1]
+
 8609.  21925// ["0", "walk_statement", "unexpected_expression_a", "0", 1]
+
 8610.  21925// ["typeof 0", "walk_statement", "unexpected_expression_a", "typeof", 1]
+
 8611.  21925
+
 8612.  21925            warn("unexpected_expression_a", thing);
+
 8613.  27583        }
+
 8614.  27583
+
 8615.  27583// Recurse walk_statement().
+
 8616.  27583
+
 8617.  27583        walk_statement(thing.block);
+
 8618.  27583        walk_statement(thing.else);
+
 8619.  27583        postamble(thing);
+
 8620.  27583    }
 8621.    516
 8622.    516    postaction = action(posts);
 8623.    516    postamble = amble(posts);
@@ -8884,52 +8884,52 @@
 8726.    208        ">>=", ">>>", ">>>=", "^", "^=", "|", "|=", "||"
 8727.    208    ], true);
 8728.    208
-
 8729.  38041    function at_margin(fit) {
-
 8730.  38041        const at = margin + fit;
+
 8729.  38077    function at_margin(fit) {
+
 8730.  38077        const at = margin + fit;
 8731.     21        if (right.from !== at) {
 8732.     21            return expected_at(at);
 8733.     21        }
-
 8734.  38041    }
+
 8734.  38077    }
 8735.    208
 8736.   2057    function delve(the_function) {
-
 8737.  13008        Object.keys(the_function.context).forEach(function (id) {
-
 8738.  13008            const name = the_function.context[id];
-
 8739.  12973            if (id !== "ignore" && name.parent === the_function) {
-
 8740.   6280
-
 8741.   6280// test_cause:
-
 8742.   6280// ["function aa(aa) {return aa;}", "delve", "id", "", 0]
-
 8743.   6280
-
 8744.   6280                test_cause("id");
-
 8745.   6280                if (
-
 8746.   6280                    name.used === 0
-
 8747.   6280
-
 8748.   6280// Probably deadcode.
-
 8749.   6280// && (
-
 8750.   6280//     name.role !== "function"
-
 8751.   6280//     || name.parent.arity !== "unary"
-
 8752.   6280// )
-
 8753.   6280
-
 8754.   6280                    && jslint_assert(
-
 8755.   6280                        name.role !== "function",
-
 8756.   6280                        `Expected name.role !== "function".`
-
 8757.   6280                    )
-
 8758.   6280                ) {
-
 8759.   6280
-
 8760.   6280// test_cause:
-
 8761.   6280// ["/*jslint node*/\nlet aa;", "delve", "unused_a", "aa", 5]
-
 8762.   6280// ["function aa(aa){return;}", "delve", "unused_a", "aa", 13]
-
 8763.   6280// ["let aa=0;try{aa();}catch(bb){aa();}", "delve", "unused_a", "bb", 26]
-
 8764.   6280
-
 8765.   6280                    warn("unused_a", name);
-
 8766.   6280                } else if (!name.init) {
-
 8767.   6280
-
 8768.   6280// test_cause:
-
 8769.   6280// ["/*jslint node*/\nlet aa;aa();", "delve", "uninitialized_a", "aa", 5]
-
 8770.   6280
-
 8771.   6280                    warn("uninitialized_a", name);
-
 8772.   6280                }
-
 8773.   6280            }
-
 8774.  13008        });
+
 8737.  13014        Object.keys(the_function.context).forEach(function (id) {
+
 8738.  13014            const name = the_function.context[id];
+
 8739.  12979            if (id !== "ignore" && name.parent === the_function) {
+
 8740.   6286
+
 8741.   6286// test_cause:
+
 8742.   6286// ["function aa(aa) {return aa;}", "delve", "id", "", 0]
+
 8743.   6286
+
 8744.   6286                test_cause("id");
+
 8745.   6286                if (
+
 8746.   6286                    name.used === 0
+
 8747.   6286
+
 8748.   6286// Probably deadcode.
+
 8749.   6286// && (
+
 8750.   6286//     name.role !== "function"
+
 8751.   6286//     || name.parent.arity !== "unary"
+
 8752.   6286// )
+
 8753.   6286
+
 8754.   6286                    && jslint_assert(
+
 8755.   6286                        name.role !== "function",
+
 8756.   6286                        `Expected name.role !== "function".`
+
 8757.   6286                    )
+
 8758.   6286                ) {
+
 8759.   6286
+
 8760.   6286// test_cause:
+
 8761.   6286// ["/*jslint node*/\nlet aa;", "delve", "unused_a", "aa", 5]
+
 8762.   6286// ["function aa(aa){return;}", "delve", "unused_a", "aa", 13]
+
 8763.   6286// ["let aa=0;try{aa();}catch(bb){aa();}", "delve", "unused_a", "bb", 26]
+
 8764.   6286
+
 8765.   6286                    warn("unused_a", name);
+
 8766.   6286                } else if (!name.init) {
+
 8767.   6286
+
 8768.   6286// test_cause:
+
 8769.   6286// ["/*jslint node*/\nlet aa;aa();", "delve", "uninitialized_a", "aa", 5]
+
 8770.   6286
+
 8771.   6286                    warn("uninitialized_a", name);
+
 8772.   6286                }
+
 8773.   6286            }
+
 8774.  13014        });
 8775.   2057    }
 8776.    208
 8777.     25    function expected_at(at) {
@@ -8955,27 +8955,27 @@
 8797.     25        );
 8798.     25    }
 8799.    208
-
 8800.   3094    function no_space() {
-
 8801.   3093        if (left.line === right.line) {
-
 8802.   3093
-
 8803.   3093// from:
-
 8804.   3093// if (left.line === right.line) {
-
 8805.   3093//     no_space();
-
 8806.   3093// } else {
-
 8807.   3093
-
 8808.   3093            if (left.thru !== right.from && nr_comments_skipped === 0) {
-
 8809.   3093
-
 8810.   3093// test_cause:
-
 8811.   3093// ["let aa = aa( );", "no_space", "unexpected_space_a_b", ")", 14]
-
 8812.   3093
-
 8813.   3093                warn(
-
 8814.   3093                    "unexpected_space_a_b",
-
 8815.   3093                    right,
-
 8816.   3093                    artifact(left),
-
 8817.   3093                    artifact(right)
-
 8818.   3093                );
-
 8819.   3093            }
-
 8820.   3093        } else {
+
 8800.   3095    function no_space() {
+
 8801.   3094        if (left.line === right.line) {
+
 8802.   3094
+
 8803.   3094// from:
+
 8804.   3094// if (left.line === right.line) {
+
 8805.   3094//     no_space();
+
 8806.   3094// } else {
+
 8807.   3094
+
 8808.   3094            if (left.thru !== right.from && nr_comments_skipped === 0) {
+
 8809.   3094
+
 8810.   3094// test_cause:
+
 8811.   3094// ["let aa = aa( );", "no_space", "unexpected_space_a_b", ")", 14]
+
 8812.   3094
+
 8813.   3094                warn(
+
 8814.   3094                    "unexpected_space_a_b",
+
 8815.   3094                    right,
+
 8816.   3094                    artifact(left),
+
 8817.   3094                    artifact(right)
+
 8818.   3094                );
+
 8819.   3094            }
+
 8820.   3094        } else {
 8821.      1
 8822.      1// from:
 8823.      1// } else if (
@@ -9012,16 +9012,16 @@
 8854.      1                expected_at(margin);
 8855.      1            }
 8856.      1        }
-
 8857.   3094    }
+
 8857.   3095    }
 8858.    208
-
 8859.  95940    function no_space_only() {
-
 8860.  95940        if (
-
 8861.  95940            left.id !== "(global)"
-
 8862.  95938            && left.nr + 1 === right.nr
-
 8863.  95938            && (
-
 8864.  95938                left.line !== right.line
-
 8865.  95938                || left.thru !== right.from
-
 8866.  95938            )
+
 8859.  96009    function no_space_only() {
+
 8860.  96009        if (
+
 8861.  96009            left.id !== "(global)"
+
 8862.  96007            && left.nr + 1 === right.nr
+
 8863.  96007            && (
+
 8864.  96007                left.line !== right.line
+
 8865.  96007                || left.thru !== right.from
+
 8866.  96007            )
 8867.      5        ) {
 8868.      5            warn(
 8869.      5                "unexpected_space_a_b",
@@ -9030,49 +9030,49 @@
 8872.      5                artifact(right)
 8873.      5            );
 8874.      5        }
-
 8875.  95940    }
+
 8875.  96009    }
 8876.    208
-
 8877.  46137    function one_space() {
-
 8878.  44240        if (left.line === right.line || !open) {
-
 8879.  44240            if (left.thru + 1 !== right.from && nr_comments_skipped === 0) {
-
 8880.  44240                warn(
-
 8881.  44240                    "expected_space_a_b",
-
 8882.  44240                    right,
-
 8883.  44240                    artifact(left),
-
 8884.  44240                    artifact(right)
-
 8885.  44240                );
-
 8886.  44240            }
-
 8887.  44240        } else {
-
 8888.   1897            if (right.from !== margin) {
-
 8889.   1897                expected_at(margin);
-
 8890.   1897            }
-
 8891.   1897        }
-
 8892.  46137    }
+
 8877.  46187    function one_space() {
+
 8878.  44284        if (left.line === right.line || !open) {
+
 8879.  44284            if (left.thru + 1 !== right.from && nr_comments_skipped === 0) {
+
 8880.  44284                warn(
+
 8881.  44284                    "expected_space_a_b",
+
 8882.  44284                    right,
+
 8883.  44284                    artifact(left),
+
 8884.  44284                    artifact(right)
+
 8885.  44284                );
+
 8886.  44284            }
+
 8887.  44284        } else {
+
 8888.   1903            if (right.from !== margin) {
+
 8889.   1903                expected_at(margin);
+
 8890.   1903            }
+
 8891.   1903        }
+
 8892.  46187    }
 8893.    208
-
 8894.   9345    function one_space_only() {
+
 8894.   9339    function one_space_only() {
 8895.      8        if (left.line !== right.line || left.thru + 1 !== right.from) {
 8896.      8            warn("expected_space_a_b", right, artifact(left), artifact(right));
 8897.      8        }
-
 8898.   9345    }
+
 8898.   9339    }
 8899.    208
-
 8900.  24634    function pop() {
-
 8901.  24634        const previous = function_stack.pop();
-
 8902.  24634        closer = previous.closer;
-
 8903.  24634        free = previous.free;
-
 8904.  24634        margin = previous.margin;
-
 8905.  24634        open = previous.open;
-
 8906.  24634        opening = previous.opening;
-
 8907.  24634    }
+
 8900.  24652    function pop() {
+
 8901.  24652        const previous = function_stack.pop();
+
 8902.  24652        closer = previous.closer;
+
 8903.  24652        free = previous.free;
+
 8904.  24652        margin = previous.margin;
+
 8905.  24652        open = previous.open;
+
 8906.  24652        opening = previous.opening;
+
 8907.  24652    }
 8908.    208
-
 8909.  24634    function push() {
-
 8910.  24634        function_stack.push({
-
 8911.  24634            closer,
-
 8912.  24634            free,
-
 8913.  24634            margin,
-
 8914.  24634            open,
-
 8915.  24634            opening
-
 8916.  24634        });
-
 8917.  24634    }
+
 8909.  24652    function push() {
+
 8910.  24652        function_stack.push({
+
 8911.  24652            closer,
+
 8912.  24652            free,
+
 8913.  24652            margin,
+
 8914.  24652            open,
+
 8915.  24652            opening
+
 8916.  24652        });
+
 8917.  24652    }
 8918.    208
 8919.    208// uninitialized_and_unused();
 8920.    208// Delve into the functions looking for variables that were not initialized
@@ -9092,403 +9092,403 @@
 8934.    206// whitage();
 8935.    206// Go through the token list, looking at usage of whitespace.
 8936.    206
-
 8937. 206858    token_list.forEach(function whitage(the_token) {
-
 8938. 206858        right = the_token;
-
 8939. 195699        if (right.id === "(comment)" || right.id === "(end)") {
-
 8940.  11367            nr_comments_skipped += 1;
-
 8941. 195491        } else {
-
 8942. 195491
-
 8943. 195491// If left is an opener and right is not the closer, then push the previous
-
 8944. 195491// state. If the token following the opener is on the next line, then this is
-
 8945. 195491// an open form. If the tokens are on the same line, then it is a closed form.
-
 8946. 195491// Open form is more readable, with each item (statement, argument, parameter,
-
 8947. 195491// etc) starting on its own line. Closed form is more compact. Statement blocks
-
 8948. 195491// are always in open form.
-
 8949. 195491
-
 8950. 195491// The open and close pairs.
-
 8951. 195491
-
 8952. 195491            switch (left.id) {
-
 8953. 195491            case "${":
-
 8954. 195491            case "(":
-
 8955. 195491            case "[":
-
 8956. 195491            case "{":
-
 8957. 195491
-
 8958. 195491// test_cause:
-
 8959. 195491// ["let aa=[];", "whitage", "opener", "", 0]
-
 8960. 195491// ["let aa=`${0}`;", "whitage", "opener", "", 0]
-
 8961. 195491// ["let aa=aa();", "whitage", "opener", "", 0]
-
 8962. 195491// ["let aa={};", "whitage", "opener", "", 0]
-
 8963. 195491
-
 8964. 195491                test_cause("opener");
-
 8965. 195491
-
 8966. 195491// Probably deadcode.
-
 8967. 195491// case "${}":
-
 8968. 195491
-
 8969. 195491                jslint_assert(
-
 8970. 195491                    !(left.id + right.id === "${}"),
-
 8971. 195491                    "Expected !(left.id + right.id === \"${}\")."
-
 8972. 195491                );
-
 8973. 195491                switch (left.id + right.id) {
-
 8974. 195491                case "()":
-
 8975. 195491                case "[]":
-
 8976. 195491                case "{}":
-
 8977. 195491
-
 8978. 195491// If left and right are opener and closer, then the placement of right depends
-
 8979. 195491// on the openness. Illegal pairs (like '{]') have already been detected.
-
 8980. 195491
-
 8981. 195491// test_cause:
-
 8982. 195491// ["let aa=[];", "whitage", "opener_closer", "", 0]
-
 8983. 195491// ["let aa=aa();", "whitage", "opener_closer", "", 0]
-
 8984. 195491// ["let aa={};", "whitage", "opener_closer", "", 0]
-
 8985. 195491
-
 8986. 195491                    test_cause("opener_closer");
-
 8987. 195491                    if (left.line === right.line) {
-
 8988. 195491
-
 8989. 195491// test_cause:
-
 8990. 195491// ["let aa = aa( );", "no_space", "unexpected_space_a_b", ")", 14]
-
 8991. 195491
-
 8992. 195491                        no_space();
-
 8993. 195491                    } else {
-
 8994. 195491
-
 8995. 195491// test_cause:
-
 8996. 195491// ["let aa = aa(\n );", "expected_at", "expected_a_at_b_c", "1", 2]
-
 8997. 195491
-
 8998. 195491                        at_margin(0);
-
 8999. 195491                    }
-
 9000. 195491                    break;
-
 9001. 195491                default:
-
 9002. 195491
-
 9003. 195491// test_cause:
-
 9004. 195491// ["let aa=(0);", "whitage", "opener_operand", "", 0]
-
 9005. 195491// ["let aa=[0];", "whitage", "opener_operand", "", 0]
-
 9006. 195491// ["let aa=`${0}`;", "whitage", "opener_operand", "", 0]
-
 9007. 195491// ["let aa=aa(0);", "whitage", "opener_operand", "", 0]
-
 9008. 195491// ["let aa={aa:0};", "whitage", "opener_operand", "", 0]
-
 9009. 195491
-
 9010. 195491                    test_cause("opener_operand");
-
 9011. 195491                    opening = left.open || (left.line !== right.line);
-
 9012. 195491                    push();
-
 9013. 195491                    switch (left.id) {
-
 9014. 195491                    case "${":
-
 9015. 195491                        closer = "}";
-
 9016. 195491                        break;
-
 9017. 195491                    case "(":
-
 9018. 195491                        closer = ")";
-
 9019. 195491                        break;
-
 9020. 195491                    case "[":
-
 9021. 195491                        closer = "]";
-
 9022. 195491                        break;
-
 9023. 195491                    case "{":
-
 9024. 195491                        closer = "}";
-
 9025. 195491                        break;
-
 9026. 195491                    }
-
 9027. 195491                    if (opening) {
-
 9028. 195491
-
 9029. 195491// test_cause:
-
 9030. 195491// ["function aa(){\nreturn;\n}", "whitage", "opening", "", 0]
-
 9031. 195491// ["let aa=(\n0\n);", "whitage", "opening", "", 0]
-
 9032. 195491// ["let aa=[\n0\n];", "whitage", "opening", "", 0]
-
 9033. 195491// ["let aa=`${\n0\n}`;", "whitage", "opening", "", 0]
-
 9034. 195491// ["let aa={\naa:0\n};", "whitage", "opening", "", 0]
-
 9035. 195491
-
 9036. 195491                        test_cause("opening");
-
 9037. 195491                        free = closer === ")" && left.free;
-
 9038. 195491                        open = true;
-
 9039. 195491                        margin += mode_indent;
-
 9040. 195491                        if (right.role === "label") {
-
 9041. 195491                            if (right.from !== 0) {
-
 9042. 195491
-
 9043. 195491// test_cause:
-
 9044. 195491// ["
-
 9045. 195491// function aa() {
-
 9046. 195491//  bb:
-
 9047. 195491//     while (aa) {
-
 9048. 195491//         if (aa) {
-
 9049. 195491//             break bb;
-
 9050. 195491//         }
-
 9051. 195491//     }
-
 9052. 195491// }
-
 9053. 195491// ", "expected_at", "expected_a_at_b_c", "1", 2]
-
 9054. 195491
-
 9055. 195491                                expected_at(0);
-
 9056. 195491                            }
-
 9057. 195491                        } else if (right.switch) {
-
 9058. 195491                            at_margin(-mode_indent);
-
 9059. 195491                        } else {
-
 9060. 195491                            at_margin(0);
-
 9061. 195491                        }
-
 9062. 195491                    } else {
-
 9063. 195491                        if (right.statement || right.role === "label") {
-
 9064. 195491
-
 9065. 195491// test_cause:
-
 9066. 195491// ["
-
 9067. 195491// function aa() {bb:
-
 9068. 195491//     while (aa) {
-
 9069. 195491//         aa();
-
 9070. 195491//     }
-
 9071. 195491// }
-
 9072. 195491// ", "whitage", "expected_line_break_a_b", "bb", 16]
-
 9073. 195491
-
 9074. 195491                            warn(
-
 9075. 195491                                "expected_line_break_a_b",
-
 9076. 195491                                right,
-
 9077. 195491                                artifact(left),
-
 9078. 195491                                artifact(right)
-
 9079. 195491                            );
-
 9080. 195491                        }
-
 9081. 195491
-
 9082. 195491// test_cause:
-
 9083. 195491// ["let aa=(0);", "whitage", "not_free", "", 0]
-
 9084. 195491// ["let aa=[0];", "whitage", "not_free", "", 0]
-
 9085. 195491// ["let aa=`${0}`;", "whitage", "not_free", "", 0]
-
 9086. 195491// ["let aa={aa:0};", "whitage", "not_free", "", 0]
-
 9087. 195491
-
 9088. 195491                        test_cause("not_free");
-
 9089. 195491                        free = false;
-
 9090. 195491                        open = false;
-
 9091. 195491
-
 9092. 195491// test_cause:
-
 9093. 195491// ["let aa = ( 0 );", "no_space_only", "unexpected_space_a_b", "0", 12]
-
 9094. 195491
-
 9095. 195491                        no_space_only();
-
 9096. 195491                    }
-
 9097. 195491                }
-
 9098. 195491                break;
-
 9099. 195491            default:
-
 9100. 195491                if (right.statement === true) {
-
 9101. 195491                    if (left.id === "else") {
-
 9102. 195491
-
 9103. 195491// test_cause:
-
 9104. 195491// ["
-
 9105. 195491// let aa = 0;
-
 9106. 195491// if (aa) {
-
 9107. 195491//     aa();
-
 9108. 195491// } else  if (aa) {
-
 9109. 195491//     aa();
-
 9110. 195491// }
-
 9111. 195491// ", "one_space_only", "expected_space_a_b", "if", 9]
-
 9112. 195491
-
 9113. 195491                        one_space_only();
-
 9114. 195491                    } else {
-
 9115. 195491
-
 9116. 195491// test_cause:
-
 9117. 195491// [" let aa = 0;", "expected_at", "expected_a_at_b_c", "1", 2]
-
 9118. 195491
-
 9119. 195491                        at_margin(0);
-
 9120. 195491                        open = false;
-
 9121. 195491                    }
-
 9122. 195491
-
 9123. 195491// If right is a closer, then pop the previous state.
-
 9124. 195491
-
 9125. 195491                } else if (right.id === closer) {
-
 9126. 195491                    pop();
-
 9127. 195491                    if (opening && right.id !== ";") {
-
 9128. 195491                        at_margin(0);
-
 9129. 195491                    } else {
-
 9130. 195491                        no_space_only();
-
 9131. 195491                    }
-
 9132. 195491                } else {
-
 9133. 195491
-
 9134. 195491// Left is not an opener, and right is not a closer.
-
 9135. 195491// The nature of left and right will determine the space between them.
-
 9136. 195491
-
 9137. 195491// If left is ',' or ';' or right is a statement then if open,
-
 9138. 195491// right must go at the margin, or if closed, a space between.
-
 9139. 195491
-
 9140. 195491                    if (right.switch) {
-
 9141. 195491                        at_margin(-mode_indent);
-
 9142. 195491                    } else if (right.role === "label") {
-
 9143. 195491                        if (right.from !== 0) {
-
 9144. 195491
-
 9145. 195491// test_cause:
-
 9146. 195491// ["
-
 9147. 195491// function aa() {
-
 9148. 195491//     aa();cc:
-
 9149. 195491//     while (aa) {
-
 9150. 195491//         if (aa) {
-
 9151. 195491//             break cc;
-
 9152. 195491//         }
-
 9153. 195491//     }
-
 9154. 195491// }
-
 9155. 195491// ", "expected_at", "expected_a_at_b_c", "1", 10]
-
 9156. 195491
-
 9157. 195491                            expected_at(0);
-
 9158. 195491                        }
-
 9159. 195491                    } else if (left.id === ",") {
-
 9160. 195491                        if (!open || (
-
 9161. 195491                            (free || closer === "]")
-
 9162. 195491                            && left.line === right.line
-
 9163. 195491                        )) {
-
 9164. 195491
-
 9165. 195491// test_cause:
-
 9166. 195491// ["let {aa,bb} = 0;", "one_space", "expected_space_a_b", "bb", 9]
-
 9167. 195491
-
 9168. 195491                            one_space();
-
 9169. 195491                        } else {
-
 9170. 195491
-
 9171. 195491// test_cause:
-
 9172. 195491// ["
-
 9173. 195491// function aa() {
-
 9174. 195491//     aa(
-
 9175. 195491//         0,0
-
 9176. 195491//     );
-
 9177. 195491// }
-
 9178. 195491// ", "expected_at", "expected_a_at_b_c", "9", 11]
-
 9179. 195491
-
 9180. 195491                            at_margin(0);
-
 9181. 195491                        }
-
 9182. 195491
-
 9183. 195491// If right is a ternary operator, line it up on the margin.
-
 9184. 195491
-
 9185. 195491                    } else if (right.arity === "ternary") {
-
 9186. 195491                        if (open) {
-
 9187. 195491
-
 9188. 195491// test_cause:
-
 9189. 195491// ["
-
 9190. 195491// let aa = (
-
 9191. 195491//     aa
-
 9192. 195491//     ? 0
-
 9193. 195491// : 1
-
 9194. 195491// );
-
 9195. 195491// ", "expected_at", "expected_a_at_b_c", "5", 1]
-
 9196. 195491
-
 9197. 195491                            at_margin(0);
-
 9198. 195491                        } else {
-
 9199. 195491
-
 9200. 195491// test_cause:
-
 9201. 195491// ["let aa = (aa ? 0 : 1);", "whitage", "use_open", "?", 14]
-
 9202. 195491
-
 9203. 195491                            warn("use_open", right);
-
 9204. 195491                        }
-
 9205. 195491                    } else if (
-
 9206. 195491                        right.arity === "binary"
-
 9207. 195491                        && right.id === "("
-
 9208. 195491                        && free
-
 9209. 195491                    ) {
-
 9210. 195491
-
 9211. 195491// test_cause:
-
 9212. 195491// ["let aa = aa(\naa ()\n);", "no_space", "unexpected_space_a_b", "(", 4]
-
 9213. 195491
-
 9214. 195491                        no_space();
-
 9215. 195491                    } else if (
-
 9216. 195491                        left.id === "."
-
 9217. 195491                        || left.id === "?."
-
 9218. 195491                        || left.id === "..."
-
 9219. 195491                        || right.id === ","
-
 9220. 195491                        || right.id === ";"
-
 9221. 195491                        || right.id === ":"
-
 9222. 195491                        || (
-
 9223. 195491                            right.arity === "binary"
-
 9224. 195491                            && (right.id === "(" || right.id === "[")
-
 9225. 195491                        )
-
 9226. 195491                        || (
-
 9227. 195491                            right.arity === "function"
-
 9228. 195491                            && left.id !== "function"
-
 9229. 195491                        )
-
 9230. 195491                        || (right.id === "." || right.id === "?.")
-
 9231. 195491                    ) {
-
 9232. 195491
-
 9233. 195491// test_cause:
-
 9234. 195491// ["let aa = 0 ;", "no_space_only", "unexpected_space_a_b", ";", 12]
-
 9235. 195491// ["let aa = aa ?.aa;", "no_space_only", "unexpected_space_a_b", "?.", 13]
-
 9236. 195491
-
 9237. 195491                        no_space_only();
-
 9238. 195491                    } else if (left.id === ";") {
-
 9239. 195491
-
 9240. 195491// test_cause:
-
 9241. 195491// ["
-
 9242. 195491// /*jslint for*/
-
 9243. 195491// function aa() {
-
 9244. 195491//     for (
-
 9245. 195491//         aa();
-
 9246. 195491// aa;
-
 9247. 195491//         aa()
-
 9248. 195491//     ) {
-
 9249. 195491//         aa();
-
 9250. 195491//     }
-
 9251. 195491// }
-
 9252. 195491// ", "expected_at", "expected_a_at_b_c", "9", 1]
-
 9253. 195491
-
 9254. 195491                        if (open) {
-
 9255. 195491                            at_margin(0);
-
 9256. 195491                        }
-
 9257. 195491                    } else if (
-
 9258. 195491                        left.arity === "ternary"
-
 9259. 195491                        || left.id === "case"
-
 9260. 195491                        || left.id === "catch"
-
 9261. 195491                        || left.id === "else"
-
 9262. 195491                        || left.id === "finally"
-
 9263. 195491                        || left.id === "while"
-
 9264. 195491                        || left.id === "await"
-
 9265. 195491                        || right.id === "catch"
-
 9266. 195491                        || right.id === "else"
-
 9267. 195491                        || right.id === "finally"
-
 9268. 195491                        || (right.id === "while" && !right.statement)
-
 9269. 195491                        || (left.id === ")" && right.id === "{")
-
 9270. 195491                    ) {
-
 9271. 195491
-
 9272. 195491// test_cause:
-
 9273. 195491// ["
-
 9274. 195491// function aa() {
-
 9275. 195491//     do {
-
 9276. 195491//         aa();
-
 9277. 195491//     } while(aa());
-
 9278. 195491// }
-
 9279. 195491// ", "one_space_only", "expected_space_a_b", "(", 12]
-
 9280. 195491
-
 9281. 195491                        one_space_only();
-
 9282. 195491                    } else if (
-
 9283. 195491
-
 9284. 195491// There is a space between left and right.
-
 9285. 195491
-
 9286. 195491                        spaceop[left.id] === true
-
 9287. 195491                        || spaceop[right.id] === true
-
 9288. 195491                        || (
-
 9289. 195491                            left.arity === "binary"
-
 9290. 195491                            && (left.id === "+" || left.id === "-")
-
 9291. 195491                        )
-
 9292. 195491                        || (
-
 9293. 195491                            right.arity === "binary"
-
 9294. 195491                            && (right.id === "+" || right.id === "-")
-
 9295. 195491                        )
-
 9296. 195491                        || left.id === "function"
-
 9297. 195491                        || left.id === ":"
-
 9298. 195491                        || left.id === "async"
-
 9299. 195491                        || (
-
 9300. 195491                            (
-
 9301. 195491                                left.identifier
-
 9302. 195491                                || left.id === "(string)"
-
 9303. 195491                                || left.id === "(number)"
-
 9304. 195491                            )
-
 9305. 195491                            && (
-
 9306. 195491                                right.identifier
-
 9307. 195491                                || right.id === "(string)"
-
 9308. 195491                                || right.id === "(number)"
-
 9309. 195491                            )
-
 9310. 195491                        )
-
 9311. 195491                        || (left.arity === "statement" && right.id !== ";")
-
 9312. 195491                    ) {
-
 9313. 195491
-
 9314. 195491// test_cause:
-
 9315. 195491// ["let aa=0;", "one_space", "expected_space_a_b", "0", 8]
-
 9316. 195491// ["let aa={\naa:\n0\n};", "expected_at", "expected_a_at_b_c", "5", 1]
-
 9317. 195491
-
 9318. 195491                        one_space();
-
 9319. 195491                    } else if (left.arity === "unary" && left.id !== "`") {
-
 9320. 195491                        no_space_only();
-
 9321. 195491                    }
-
 9322. 195491                }
-
 9323. 195491            }
-
 9324. 195491            nr_comments_skipped = 0;
-
 9325. 195491            delete left.calls;
-
 9326. 195491            delete left.dead;
-
 9327. 195491            delete left.free;
-
 9328. 195491            delete left.init;
-
 9329. 195491            delete left.open;
-
 9330. 195491            delete left.used;
-
 9331. 195491            left = right;
-
 9332. 195491        }
-
 9333. 206858    });
+
 8937. 207028    token_list.forEach(function whitage(the_token) {
+
 8938. 207028        right = the_token;
+
 8939. 195849        if (right.id === "(comment)" || right.id === "(end)") {
+
 8940.  11387            nr_comments_skipped += 1;
+
 8941. 195641        } else {
+
 8942. 195641
+
 8943. 195641// If left is an opener and right is not the closer, then push the previous
+
 8944. 195641// state. If the token following the opener is on the next line, then this is
+
 8945. 195641// an open form. If the tokens are on the same line, then it is a closed form.
+
 8946. 195641// Open form is more readable, with each item (statement, argument, parameter,
+
 8947. 195641// etc) starting on its own line. Closed form is more compact. Statement blocks
+
 8948. 195641// are always in open form.
+
 8949. 195641
+
 8950. 195641// The open and close pairs.
+
 8951. 195641
+
 8952. 195641            switch (left.id) {
+
 8953. 195641            case "${":
+
 8954. 195641            case "(":
+
 8955. 195641            case "[":
+
 8956. 195641            case "{":
+
 8957. 195641
+
 8958. 195641// test_cause:
+
 8959. 195641// ["let aa=[];", "whitage", "opener", "", 0]
+
 8960. 195641// ["let aa=`${0}`;", "whitage", "opener", "", 0]
+
 8961. 195641// ["let aa=aa();", "whitage", "opener", "", 0]
+
 8962. 195641// ["let aa={};", "whitage", "opener", "", 0]
+
 8963. 195641
+
 8964. 195641                test_cause("opener");
+
 8965. 195641
+
 8966. 195641// Probably deadcode.
+
 8967. 195641// case "${}":
+
 8968. 195641
+
 8969. 195641                jslint_assert(
+
 8970. 195641                    !(left.id + right.id === "${}"),
+
 8971. 195641                    "Expected !(left.id + right.id === \"${}\")."
+
 8972. 195641                );
+
 8973. 195641                switch (left.id + right.id) {
+
 8974. 195641                case "()":
+
 8975. 195641                case "[]":
+
 8976. 195641                case "{}":
+
 8977. 195641
+
 8978. 195641// If left and right are opener and closer, then the placement of right depends
+
 8979. 195641// on the openness. Illegal pairs (like '{]') have already been detected.
+
 8980. 195641
+
 8981. 195641// test_cause:
+
 8982. 195641// ["let aa=[];", "whitage", "opener_closer", "", 0]
+
 8983. 195641// ["let aa=aa();", "whitage", "opener_closer", "", 0]
+
 8984. 195641// ["let aa={};", "whitage", "opener_closer", "", 0]
+
 8985. 195641
+
 8986. 195641                    test_cause("opener_closer");
+
 8987. 195641                    if (left.line === right.line) {
+
 8988. 195641
+
 8989. 195641// test_cause:
+
 8990. 195641// ["let aa = aa( );", "no_space", "unexpected_space_a_b", ")", 14]
+
 8991. 195641
+
 8992. 195641                        no_space();
+
 8993. 195641                    } else {
+
 8994. 195641
+
 8995. 195641// test_cause:
+
 8996. 195641// ["let aa = aa(\n );", "expected_at", "expected_a_at_b_c", "1", 2]
+
 8997. 195641
+
 8998. 195641                        at_margin(0);
+
 8999. 195641                    }
+
 9000. 195641                    break;
+
 9001. 195641                default:
+
 9002. 195641
+
 9003. 195641// test_cause:
+
 9004. 195641// ["let aa=(0);", "whitage", "opener_operand", "", 0]
+
 9005. 195641// ["let aa=[0];", "whitage", "opener_operand", "", 0]
+
 9006. 195641// ["let aa=`${0}`;", "whitage", "opener_operand", "", 0]
+
 9007. 195641// ["let aa=aa(0);", "whitage", "opener_operand", "", 0]
+
 9008. 195641// ["let aa={aa:0};", "whitage", "opener_operand", "", 0]
+
 9009. 195641
+
 9010. 195641                    test_cause("opener_operand");
+
 9011. 195641                    opening = left.open || (left.line !== right.line);
+
 9012. 195641                    push();
+
 9013. 195641                    switch (left.id) {
+
 9014. 195641                    case "${":
+
 9015. 195641                        closer = "}";
+
 9016. 195641                        break;
+
 9017. 195641                    case "(":
+
 9018. 195641                        closer = ")";
+
 9019. 195641                        break;
+
 9020. 195641                    case "[":
+
 9021. 195641                        closer = "]";
+
 9022. 195641                        break;
+
 9023. 195641                    case "{":
+
 9024. 195641                        closer = "}";
+
 9025. 195641                        break;
+
 9026. 195641                    }
+
 9027. 195641                    if (opening) {
+
 9028. 195641
+
 9029. 195641// test_cause:
+
 9030. 195641// ["function aa(){\nreturn;\n}", "whitage", "opening", "", 0]
+
 9031. 195641// ["let aa=(\n0\n);", "whitage", "opening", "", 0]
+
 9032. 195641// ["let aa=[\n0\n];", "whitage", "opening", "", 0]
+
 9033. 195641// ["let aa=`${\n0\n}`;", "whitage", "opening", "", 0]
+
 9034. 195641// ["let aa={\naa:0\n};", "whitage", "opening", "", 0]
+
 9035. 195641
+
 9036. 195641                        test_cause("opening");
+
 9037. 195641                        free = closer === ")" && left.free;
+
 9038. 195641                        open = true;
+
 9039. 195641                        margin += mode_indent;
+
 9040. 195641                        if (right.role === "label") {
+
 9041. 195641                            if (right.from !== 0) {
+
 9042. 195641
+
 9043. 195641// test_cause:
+
 9044. 195641// ["
+
 9045. 195641// function aa() {
+
 9046. 195641//  bb:
+
 9047. 195641//     while (aa) {
+
 9048. 195641//         if (aa) {
+
 9049. 195641//             break bb;
+
 9050. 195641//         }
+
 9051. 195641//     }
+
 9052. 195641// }
+
 9053. 195641// ", "expected_at", "expected_a_at_b_c", "1", 2]
+
 9054. 195641
+
 9055. 195641                                expected_at(0);
+
 9056. 195641                            }
+
 9057. 195641                        } else if (right.switch) {
+
 9058. 195641                            at_margin(-mode_indent);
+
 9059. 195641                        } else {
+
 9060. 195641                            at_margin(0);
+
 9061. 195641                        }
+
 9062. 195641                    } else {
+
 9063. 195641                        if (right.statement || right.role === "label") {
+
 9064. 195641
+
 9065. 195641// test_cause:
+
 9066. 195641// ["
+
 9067. 195641// function aa() {bb:
+
 9068. 195641//     while (aa) {
+
 9069. 195641//         aa();
+
 9070. 195641//     }
+
 9071. 195641// }
+
 9072. 195641// ", "whitage", "expected_line_break_a_b", "bb", 16]
+
 9073. 195641
+
 9074. 195641                            warn(
+
 9075. 195641                                "expected_line_break_a_b",
+
 9076. 195641                                right,
+
 9077. 195641                                artifact(left),
+
 9078. 195641                                artifact(right)
+
 9079. 195641                            );
+
 9080. 195641                        }
+
 9081. 195641
+
 9082. 195641// test_cause:
+
 9083. 195641// ["let aa=(0);", "whitage", "not_free", "", 0]
+
 9084. 195641// ["let aa=[0];", "whitage", "not_free", "", 0]
+
 9085. 195641// ["let aa=`${0}`;", "whitage", "not_free", "", 0]
+
 9086. 195641// ["let aa={aa:0};", "whitage", "not_free", "", 0]
+
 9087. 195641
+
 9088. 195641                        test_cause("not_free");
+
 9089. 195641                        free = false;
+
 9090. 195641                        open = false;
+
 9091. 195641
+
 9092. 195641// test_cause:
+
 9093. 195641// ["let aa = ( 0 );", "no_space_only", "unexpected_space_a_b", "0", 12]
+
 9094. 195641
+
 9095. 195641                        no_space_only();
+
 9096. 195641                    }
+
 9097. 195641                }
+
 9098. 195641                break;
+
 9099. 195641            default:
+
 9100. 195641                if (right.statement === true) {
+
 9101. 195641                    if (left.id === "else") {
+
 9102. 195641
+
 9103. 195641// test_cause:
+
 9104. 195641// ["
+
 9105. 195641// let aa = 0;
+
 9106. 195641// if (aa) {
+
 9107. 195641//     aa();
+
 9108. 195641// } else  if (aa) {
+
 9109. 195641//     aa();
+
 9110. 195641// }
+
 9111. 195641// ", "one_space_only", "expected_space_a_b", "if", 9]
+
 9112. 195641
+
 9113. 195641                        one_space_only();
+
 9114. 195641                    } else {
+
 9115. 195641
+
 9116. 195641// test_cause:
+
 9117. 195641// [" let aa = 0;", "expected_at", "expected_a_at_b_c", "1", 2]
+
 9118. 195641
+
 9119. 195641                        at_margin(0);
+
 9120. 195641                        open = false;
+
 9121. 195641                    }
+
 9122. 195641
+
 9123. 195641// If right is a closer, then pop the previous state.
+
 9124. 195641
+
 9125. 195641                } else if (right.id === closer) {
+
 9126. 195641                    pop();
+
 9127. 195641                    if (opening && right.id !== ";") {
+
 9128. 195641                        at_margin(0);
+
 9129. 195641                    } else {
+
 9130. 195641                        no_space_only();
+
 9131. 195641                    }
+
 9132. 195641                } else {
+
 9133. 195641
+
 9134. 195641// Left is not an opener, and right is not a closer.
+
 9135. 195641// The nature of left and right will determine the space between them.
+
 9136. 195641
+
 9137. 195641// If left is ',' or ';' or right is a statement then if open,
+
 9138. 195641// right must go at the margin, or if closed, a space between.
+
 9139. 195641
+
 9140. 195641                    if (right.switch) {
+
 9141. 195641                        at_margin(-mode_indent);
+
 9142. 195641                    } else if (right.role === "label") {
+
 9143. 195641                        if (right.from !== 0) {
+
 9144. 195641
+
 9145. 195641// test_cause:
+
 9146. 195641// ["
+
 9147. 195641// function aa() {
+
 9148. 195641//     aa();cc:
+
 9149. 195641//     while (aa) {
+
 9150. 195641//         if (aa) {
+
 9151. 195641//             break cc;
+
 9152. 195641//         }
+
 9153. 195641//     }
+
 9154. 195641// }
+
 9155. 195641// ", "expected_at", "expected_a_at_b_c", "1", 10]
+
 9156. 195641
+
 9157. 195641                            expected_at(0);
+
 9158. 195641                        }
+
 9159. 195641                    } else if (left.id === ",") {
+
 9160. 195641                        if (!open || (
+
 9161. 195641                            (free || closer === "]")
+
 9162. 195641                            && left.line === right.line
+
 9163. 195641                        )) {
+
 9164. 195641
+
 9165. 195641// test_cause:
+
 9166. 195641// ["let {aa,bb} = 0;", "one_space", "expected_space_a_b", "bb", 9]
+
 9167. 195641
+
 9168. 195641                            one_space();
+
 9169. 195641                        } else {
+
 9170. 195641
+
 9171. 195641// test_cause:
+
 9172. 195641// ["
+
 9173. 195641// function aa() {
+
 9174. 195641//     aa(
+
 9175. 195641//         0,0
+
 9176. 195641//     );
+
 9177. 195641// }
+
 9178. 195641// ", "expected_at", "expected_a_at_b_c", "9", 11]
+
 9179. 195641
+
 9180. 195641                            at_margin(0);
+
 9181. 195641                        }
+
 9182. 195641
+
 9183. 195641// If right is a ternary operator, line it up on the margin.
+
 9184. 195641
+
 9185. 195641                    } else if (right.arity === "ternary") {
+
 9186. 195641                        if (open) {
+
 9187. 195641
+
 9188. 195641// test_cause:
+
 9189. 195641// ["
+
 9190. 195641// let aa = (
+
 9191. 195641//     aa
+
 9192. 195641//     ? 0
+
 9193. 195641// : 1
+
 9194. 195641// );
+
 9195. 195641// ", "expected_at", "expected_a_at_b_c", "5", 1]
+
 9196. 195641
+
 9197. 195641                            at_margin(0);
+
 9198. 195641                        } else {
+
 9199. 195641
+
 9200. 195641// test_cause:
+
 9201. 195641// ["let aa = (aa ? 0 : 1);", "whitage", "use_open", "?", 14]
+
 9202. 195641
+
 9203. 195641                            warn("use_open", right);
+
 9204. 195641                        }
+
 9205. 195641                    } else if (
+
 9206. 195641                        right.arity === "binary"
+
 9207. 195641                        && right.id === "("
+
 9208. 195641                        && free
+
 9209. 195641                    ) {
+
 9210. 195641
+
 9211. 195641// test_cause:
+
 9212. 195641// ["let aa = aa(\naa ()\n);", "no_space", "unexpected_space_a_b", "(", 4]
+
 9213. 195641
+
 9214. 195641                        no_space();
+
 9215. 195641                    } else if (
+
 9216. 195641                        left.id === "."
+
 9217. 195641                        || left.id === "?."
+
 9218. 195641                        || left.id === "..."
+
 9219. 195641                        || right.id === ","
+
 9220. 195641                        || right.id === ";"
+
 9221. 195641                        || right.id === ":"
+
 9222. 195641                        || (
+
 9223. 195641                            right.arity === "binary"
+
 9224. 195641                            && (right.id === "(" || right.id === "[")
+
 9225. 195641                        )
+
 9226. 195641                        || (
+
 9227. 195641                            right.arity === "function"
+
 9228. 195641                            && left.id !== "function"
+
 9229. 195641                        )
+
 9230. 195641                        || (right.id === "." || right.id === "?.")
+
 9231. 195641                    ) {
+
 9232. 195641
+
 9233. 195641// test_cause:
+
 9234. 195641// ["let aa = 0 ;", "no_space_only", "unexpected_space_a_b", ";", 12]
+
 9235. 195641// ["let aa = aa ?.aa;", "no_space_only", "unexpected_space_a_b", "?.", 13]
+
 9236. 195641
+
 9237. 195641                        no_space_only();
+
 9238. 195641                    } else if (left.id === ";") {
+
 9239. 195641
+
 9240. 195641// test_cause:
+
 9241. 195641// ["
+
 9242. 195641// /*jslint for*/
+
 9243. 195641// function aa() {
+
 9244. 195641//     for (
+
 9245. 195641//         aa();
+
 9246. 195641// aa;
+
 9247. 195641//         aa()
+
 9248. 195641//     ) {
+
 9249. 195641//         aa();
+
 9250. 195641//     }
+
 9251. 195641// }
+
 9252. 195641// ", "expected_at", "expected_a_at_b_c", "9", 1]
+
 9253. 195641
+
 9254. 195641                        if (open) {
+
 9255. 195641                            at_margin(0);
+
 9256. 195641                        }
+
 9257. 195641                    } else if (
+
 9258. 195641                        left.arity === "ternary"
+
 9259. 195641                        || left.id === "case"
+
 9260. 195641                        || left.id === "catch"
+
 9261. 195641                        || left.id === "else"
+
 9262. 195641                        || left.id === "finally"
+
 9263. 195641                        || left.id === "while"
+
 9264. 195641                        || left.id === "await"
+
 9265. 195641                        || right.id === "catch"
+
 9266. 195641                        || right.id === "else"
+
 9267. 195641                        || right.id === "finally"
+
 9268. 195641                        || (right.id === "while" && !right.statement)
+
 9269. 195641                        || (left.id === ")" && right.id === "{")
+
 9270. 195641                    ) {
+
 9271. 195641
+
 9272. 195641// test_cause:
+
 9273. 195641// ["
+
 9274. 195641// function aa() {
+
 9275. 195641//     do {
+
 9276. 195641//         aa();
+
 9277. 195641//     } while(aa());
+
 9278. 195641// }
+
 9279. 195641// ", "one_space_only", "expected_space_a_b", "(", 12]
+
 9280. 195641
+
 9281. 195641                        one_space_only();
+
 9282. 195641                    } else if (
+
 9283. 195641
+
 9284. 195641// There is a space between left and right.
+
 9285. 195641
+
 9286. 195641                        spaceop[left.id] === true
+
 9287. 195641                        || spaceop[right.id] === true
+
 9288. 195641                        || (
+
 9289. 195641                            left.arity === "binary"
+
 9290. 195641                            && (left.id === "+" || left.id === "-")
+
 9291. 195641                        )
+
 9292. 195641                        || (
+
 9293. 195641                            right.arity === "binary"
+
 9294. 195641                            && (right.id === "+" || right.id === "-")
+
 9295. 195641                        )
+
 9296. 195641                        || left.id === "function"
+
 9297. 195641                        || left.id === ":"
+
 9298. 195641                        || left.id === "async"
+
 9299. 195641                        || (
+
 9300. 195641                            (
+
 9301. 195641                                left.identifier
+
 9302. 195641                                || left.id === "(string)"
+
 9303. 195641                                || left.id === "(number)"
+
 9304. 195641                            )
+
 9305. 195641                            && (
+
 9306. 195641                                right.identifier
+
 9307. 195641                                || right.id === "(string)"
+
 9308. 195641                                || right.id === "(number)"
+
 9309. 195641                            )
+
 9310. 195641                        )
+
 9311. 195641                        || (left.arity === "statement" && right.id !== ";")
+
 9312. 195641                    ) {
+
 9313. 195641
+
 9314. 195641// test_cause:
+
 9315. 195641// ["let aa=0;", "one_space", "expected_space_a_b", "0", 8]
+
 9316. 195641// ["let aa={\naa:\n0\n};", "expected_at", "expected_a_at_b_c", "5", 1]
+
 9317. 195641
+
 9318. 195641                        one_space();
+
 9319. 195641                    } else if (left.arity === "unary" && left.id !== "`") {
+
 9320. 195641                        no_space_only();
+
 9321. 195641                    }
+
 9322. 195641                }
+
 9323. 195641            }
+
 9324. 195641            nr_comments_skipped = 0;
+
 9325. 195641            delete left.calls;
+
 9326. 195641            delete left.dead;
+
 9327. 195641            delete left.free;
+
 9328. 195641            delete left.init;
+
 9329. 195641            delete left.open;
+
 9330. 195641            delete left.used;
+
 9331. 195641            left = right;
+
 9332. 195641        }
+
 9333. 207028    });
 9334.    206}
 9335.      1
 9336.      6function jslint_report({
@@ -9524,17 +9524,17 @@
 9366.   2256    function detail(title, list) {
 9367.   2256        return (
 9368.   2256            (Array.isArray(list) && list.length > 0)
-
 9369.    780            ? (
-
 9370.    780
-
 9371.    780// Google Lighthouse Accessibility - <dl>'s do not contain only properly-ordered
-
 9372.    780// <dt> and <dd> groups, <script>, <template> or <div> elements.
-
 9373.    780
-
 9374.    780                "<dl>"
-
 9375.    780                + "<dt>" + htmlEscape(title) + "</dt>"
-
 9376.    780                + "<dd>" + list.join(", ") + "</dd>"
-
 9377.    780                + "</dl>"
-
 9378.    780            )
-
 9379.   1476            : ""
+
 9369.    781            ? (
+
 9370.    781
+
 9371.    781// Google Lighthouse Accessibility - <dl>'s do not contain only properly-ordered
+
 9372.    781// <dt> and <dd> groups, <script>, <template> or <div> elements.
+
 9373.    781
+
 9374.    781                "<dl>"
+
 9375.    781                + "<dt>" + htmlEscape(title) + "</dt>"
+
 9376.    781                + "<dd>" + list.join(", ") + "</dd>"
+
 9377.    781                + "</dl>"
+
 9378.    781            )
+
 9379.   1475            : ""
 9380.   2256        );
 9381.   2256    }
 9382.      6
@@ -9945,18 +9945,18 @@
 9787.      6    html += "<label>\n";
 9788.      6    html += "<textarea readonly>";
 9789.      6    html += "/*property";
-
 9790.    300    Object.keys(property).sort().forEach(function (key, ii) {
-
 9791.    299        if (ii !== 0) {
-
 9792.    299            html += ",";
-
 9793.    299            length_80 += 2;
-
 9794.    299        }
+
 9790.    301    Object.keys(property).sort().forEach(function (key, ii) {
+
 9791.    300        if (ii !== 0) {
+
 9792.    300            html += ",";
+
 9793.    300            length_80 += 2;
+
 9794.    300        }
 9795.     42        if (length_80 + key.length >= 80) {
 9796.     42            length_80 = 4;
 9797.     42            html += "\n   ";
 9798.     42        }
-
 9799.    300        html += " " + key;
-
 9800.    300        length_80 += key.length;
-
 9801.    300    });
+
 9799.    301        html += " " + key;
+
 9800.    301        length_80 += key.length;
+
 9801.    301    });
 9802.      6    html += "\n*/\n";
 9803.      6    html += "</textarea>\n";
 9804.      6    html += "</label>\n";
@@ -10062,33 +10062,33 @@
 9904.    470        });
 9905.    321        html += detail("parameter", params.sort());
 9906.    321        list.sort();
-
 9907.   2202        html += detail("variable", list.filter(function (id) {
-
 9908.   2202            return (
-
 9909.   2202                context[id].role === "variable"
-
 9910.   1692                && context[id].parent === the_function
-
 9911.   2202            );
-
 9912.   2202        }));
-
 9913.   2202        html += detail("exception", list.filter(function (id) {
-
 9914.   2202            return context[id].role === "exception";
-
 9915.   2202        }));
-
 9916.   2202        html += detail("closure", list.filter(function (id) {
-
 9917.   2202            return (
-
 9918.   2202                context[id].closure === true
+
 9907.   2203        html += detail("variable", list.filter(function (id) {
+
 9908.   2203            return (
+
 9909.   2203                context[id].role === "variable"
+
 9910.   1693                && context[id].parent === the_function
+
 9911.   2203            );
+
 9912.   2203        }));
+
 9913.   2203        html += detail("exception", list.filter(function (id) {
+
 9914.   2203            return context[id].role === "exception";
+
 9915.   2203        }));
+
 9916.   2203        html += detail("closure", list.filter(function (id) {
+
 9917.   2203            return (
+
 9918.   2203                context[id].closure === true
 9919.   1494                && context[id].parent === the_function
-
 9920.   2202            );
-
 9921.   2202        }));
-
 9922.   2202        html += detail("outer", list.filter(function (id) {
-
 9923.   2202            return (
-
 9924.   2202                context[id].parent !== the_function
+
 9920.   2203            );
+
 9921.   2203        }));
+
 9922.   2203        html += detail("outer", list.filter(function (id) {
+
 9923.   2203            return (
+
 9924.   2203                context[id].parent !== the_function
 9925.   1190                && context[id].parent.id !== "(global)"
-
 9926.   2202            );
-
 9927.   2202        }));
-
 9928.   2202        html += detail(module, list.filter(function (id) {
-
 9929.   2202            return context[id].parent.id === "(global)";
-
 9930.   2202        }));
-
 9931.   2202        html += detail("label", list.filter(function (id) {
-
 9932.   2202            return context[id].role === "label";
-
 9933.   2202        }));
+
 9926.   2203            );
+
 9927.   2203        }));
+
 9928.   2203        html += detail(module, list.filter(function (id) {
+
 9929.   2203            return context[id].parent.id === "(global)";
+
 9930.   2203        }));
+
 9931.   2203        html += detail("label", list.filter(function (id) {
+
 9932.   2203            return context[id].role === "label";
+
 9933.   2203        }));
 9934.    321        html += "</div>\n";
 9935.    321    });
 9936.      6    html += "</div>\n";
@@ -11256,89 +11256,89 @@
11098.      6<!-- content start -->
11099.      6<div class="content">
11100.      6            `).trim() + "\n";
-
11101.  11829            lineList.forEach(function ({
-
11102.  11829                count,
-
11103.  11829                holeList,
-
11104.  11829                line,
-
11105.  11829                startOffset
-
11106.  11829            }, ii) {
-
11107.  11829                let chunk;
-
11108.  11829                let inHole;
-
11109.  11829                let lineHtml;
-
11110.  11829                let lineId;
-
11111.  11829                lineHtml = "";
-
11112.  11829                lineId = "line_" + (ii + 1);
-
11113.  11829                switch (count) {
+
11101.  11842            lineList.forEach(function ({
+
11102.  11842                count,
+
11103.  11842                holeList,
+
11104.  11842                line,
+
11105.  11842                startOffset
+
11106.  11842            }, ii) {
+
11107.  11842                let chunk;
+
11108.  11842                let inHole;
+
11109.  11842                let lineHtml;
+
11110.  11842                let lineId;
+
11111.  11842                lineHtml = "";
+
11112.  11842                lineId = "line_" + (ii + 1);
+
11113.  11842                switch (count) {
11114.     32                case -1:
-
11115.  11195                case 0:
-
11116.  11195                    if (holeList.length === 0) {
-
11117.  11195                        lineHtml += "</span>";
-
11118.  11195                        lineHtml += "<span class=\"uncovered\">";
-
11119.  11195                        lineHtml += htmlEscape(line);
-
11120.  11195                        break;
-
11121.  11195                    }
-
11122.  11195                    line = line.split("").map(function (char) {
-
11123.  11195                        return {
-
11124.  11195                            char,
-
11125.  11195                            isHole: undefined
-
11126.  11195                        };
-
11127.  11195                    });
-
11128.  11195                    holeList.forEach(function ([
-
11129.  11195                        aa, bb
-
11130.  11195                    ]) {
-
11131.  11195                        aa = Math.max(aa - startOffset, 0);
-
11132.  11195                        bb = Math.min(bb - startOffset, line.length);
-
11133.  11195                        while (aa < bb) {
-
11134.  11195                            line[aa].isHole = true;
-
11135.  11195                            aa += 1;
-
11136.  11195                        }
-
11137.  11195                    });
-
11138.  11195                    chunk = "";
-
11139.  11195                    line.forEach(function ({
-
11140.  11195                        char,
-
11141.  11195                        isHole
-
11142.  11195                    }) {
-
11143.  11195                        if (inHole !== isHole) {
-
11144.  11195                            lineHtml += htmlEscape(chunk);
-
11145.  11195                            lineHtml += "</span><span";
-
11146.  11195
-
11147.  11195// Coverage-hack - Ugly-hack around possible deadcode where isHole is always
-
11148.  11195// true.
-
11149.  11195
-
11150.  11195                            if (isHole) {
-
11151.  11195                                lineHtml += " class=\"uncovered\"";
-
11152.  11195                            }
-
11153.  11195                            lineHtml += ">";
-
11154.  11195                            chunk = "";
-
11155.  11195                            inHole = isHole;
-
11156.  11195                        }
-
11157.  11195                        chunk += char;
-
11158.  11195                    });
-
11159.  11195                    lineHtml += htmlEscape(chunk);
-
11160.  11195                    break;
+
11115.  11208                case 0:
+
11116.  11208                    if (holeList.length === 0) {
+
11117.  11208                        lineHtml += "</span>";
+
11118.  11208                        lineHtml += "<span class=\"uncovered\">";
+
11119.  11208                        lineHtml += htmlEscape(line);
+
11120.  11208                        break;
+
11121.  11208                    }
+
11122.  11208                    line = line.split("").map(function (char) {
+
11123.  11208                        return {
+
11124.  11208                            char,
+
11125.  11208                            isHole: undefined
+
11126.  11208                        };
+
11127.  11208                    });
+
11128.  11208                    holeList.forEach(function ([
+
11129.  11208                        aa, bb
+
11130.  11208                    ]) {
+
11131.  11208                        aa = Math.max(aa - startOffset, 0);
+
11132.  11208                        bb = Math.min(bb - startOffset, line.length);
+
11133.  11208                        while (aa < bb) {
+
11134.  11208                            line[aa].isHole = true;
+
11135.  11208                            aa += 1;
+
11136.  11208                        }
+
11137.  11208                    });
+
11138.  11208                    chunk = "";
+
11139.  11208                    line.forEach(function ({
+
11140.  11208                        char,
+
11141.  11208                        isHole
+
11142.  11208                    }) {
+
11143.  11208                        if (inHole !== isHole) {
+
11144.  11208                            lineHtml += htmlEscape(chunk);
+
11145.  11208                            lineHtml += "</span><span";
+
11146.  11208
+
11147.  11208// Coverage-hack - Ugly-hack around possible deadcode where isHole is always
+
11148.  11208// true.
+
11149.  11208
+
11150.  11208                            if (isHole) {
+
11151.  11208                                lineHtml += " class=\"uncovered\"";
+
11152.  11208                            }
+
11153.  11208                            lineHtml += ">";
+
11154.  11208                            chunk = "";
+
11155.  11208                            inHole = isHole;
+
11156.  11208                        }
+
11157.  11208                        chunk += char;
+
11158.  11208                    });
+
11159.  11208                    lineHtml += htmlEscape(chunk);
+
11160.  11208                    break;
11161.    634                default:
11162.    634                    lineHtml += htmlEscape(line);
-
11163.  11829                }
-
11164.  11829                html += String(`
-
11165.  11829<pre>
-
11166.  11829<span class="lineno">
-
11167.  11829<a href="#${lineId}" id="${lineId}">${String(ii + 1).padStart(5, " ")}.</a>
-
11168.  11829</span>
-
11169.  11829<span class="count
-
11170.  11829                ${(
-
11171.  11829                    count <= 0
-
11172.  11195                    ? "uncovered"
+
11163.  11842                }
+
11164.  11842                html += String(`
+
11165.  11842<pre>
+
11166.  11842<span class="lineno">
+
11167.  11842<a href="#${lineId}" id="${lineId}">${String(ii + 1).padStart(5, " ")}.</a>
+
11168.  11842</span>
+
11169.  11842<span class="count
+
11170.  11842                ${(
+
11171.  11842                    count <= 0
+
11172.  11208                    ? "uncovered"
11173.    634                    : ""
-
11174.  11829                )}"
-
11175.  11829>
-
11176.  11163${String(count || "-0").padStart(7, " ")}
-
11177.  11829</span>
-
11178.  11829<span>${lineHtml}</span>
-
11179.  11829</pre>
-
11180.  11829                `).replace((
-
11181.  11829                    /\n/g
-
11182.  11829                ), "").trim() + "\n";
-
11183.  11829            });
+
11174.  11842                )}"
+
11175.  11842>
+
11176.  11176${String(count || "-0").padStart(7, " ")}
+
11177.  11842</span>
+
11178.  11842<span>${lineHtml}</span>
+
11179.  11842</pre>
+
11180.  11842                `).replace((
+
11181.  11842                    /\n/g
+
11182.  11842                ), "").trim() + "\n";
+
11183.  11842            });
11184.      6            html += String(`
11185.      6</div>
11186.      6<!-- content end -->
@@ -11443,269 +11443,282 @@
11285.      6            }
11286.     11        }));
11287.      6        exitCode = await new Promise(function (resolve) {
-
11288.      6            moduleChildProcess.spawn(
-
11289.      6                (
-
11290.      6                    processArgv[0] === "npm"
-
11291.      6
-
11292.      6// If win32 environment, then replace program npm with npm.cmd.
-
11293.      6// Coverage-hack - Ugly-hack to get test-coverage under both win32 and linux.
-
11294.      6
-
11295.      6                    ? process.platform.replace("win32", "npm.cmd").replace(
-
11296.      6                        process.platform,
-
11297.      6                        "npm"
-
11298.      6                    )
-
11299.      6                    : processArgv[0]
-
11300.      6                ),
-
11301.      6                processArgv.slice(1),
-
11302.      6                {
-
11303.      6                    env: Object.assign({}, process.env, {
-
11304.      6                        NODE_V8_COVERAGE: coverageDir
-
11305.      6                    }),
-
11306.      6                    stdio: ["ignore", 1, 2]
-
11307.      6                }
-
11308.      6            ).on("exit", resolve);
-
11309.      6        });
-
11310.      6        consoleError(
-
11311.      6            `v8CoverageReportCreate - program exited with exitCode=${exitCode}`
-
11312.      6        );
-
11313.      7    }
-
11314.      7
-
11315.      7// 2. Merge JSON v8-coverage-files in <coverageDir>.
-
11316.      7
-
11317.      7    consoleError("v8CoverageReportCreate - merging coverage files...");
-
11318.      7    v8CoverageObj = await moduleFs.promises.readdir(coverageDir);
-
11319.     18    v8CoverageObj = v8CoverageObj.filter(function (file) {
-
11320.     18        return (
-
11321.     18            /^coverage-\d+?-\d+?-\d+?\.json$/
-
11322.     18        ).test(file);
-
11323.     18    });
-
11324.      7    v8CoverageObj = await Promise.all(v8CoverageObj.map(async function (file) {
-
11325.      7        let data;
-
11326.      7        let pathnameDict = Object.create(null);
-
11327.      7        data = await moduleFs.promises.readFile(coverageDir + file, "utf8");
-
11328.      7        data = JSON.parse(data);
-
11329.    770        data.result.forEach(function (scriptCov) {
-
11330.    770            let pathname = scriptCov.url;
-
11331.    770
-
11332.    770// Filter out internal coverages.
-
11333.    770
-
11334.    463            if (!pathname.startsWith("file:///")) {
-
11335.    463                return;
-
11336.    463            }
-
11337.    307
-
11338.    307// Normalize pathname.
-
11339.    307
-
11340.    307            pathname = moduleUrl.fileURLToPath(pathname);
-
11341.    307            pathname = modulePath.resolve(pathname).replace((
-
11342.    307                /\\/g
-
11343.    307            ), "/");
-
11344.    307
-
11345.    307// Filter files outside of cwd.
-
11346.    307
-
11347.    307            if (pathname.indexOf("[") >= 0 || !pathname.startsWith(cwd)) {
-
11348.    301                return;
-
11349.    301            }
-
11350.      7
-
11351.      7// Normalize pathname relative to cwd.
-
11352.      7
-
11353.      7            pathname = pathname.slice(cwd.length);
-
11354.      7            scriptCov.url = pathname;
-
11355.      7            pathnameDict[pathname] = scriptCov;
-
11356.      7        });
-
11357.      7
-
11358.      7// PR-400 - Filter directory `node_modules`.
-
11359.      7
-
11360.      7        if (!modeIncludeNodeModules) {
-
11361.      7            excludeList.push("node_modules/");
-
11362.      7        }
+
11288.      6            let processArgv0 = processArgv[0];
+
11289.      6
+
11290.      6// If win32 environment, then replace program npm with npm.cmd.
+
11291.      6// Coverage-hack - Ugly-hack to get test-coverage under both win32 and linux.
+
11292.      6
+
11293.      6            if (processArgv0 === "npm") {
+
11294.      6                processArgv0 = process.platform.replace(
+
11295.      6                    "win32",
+
11296.      6                    "npm.cmd"
+
11297.      6                ).replace(
+
11298.      6                    process.platform,
+
11299.      6                    "npm"
+
11300.      6                );
+
11301.      6            }
+
11302.      6            moduleChildProcess.spawn(
+
11303.      6                processArgv0,
+
11304.      6                processArgv.slice(1),
+
11305.      6                {
+
11306.      6                    env: Object.assign({}, process.env, {
+
11307.      6                        NODE_V8_COVERAGE: coverageDir
+
11308.      6                    }),
+
11309.      6
+
11310.      6// PR-465
+
11311.      6// https://nodejs.org/en/blog/vulnerability/april-2024-security-releases-2
+
11312.      6// Node.js will now error with EINVAL if a .bat or .cmd file is passed to
+
11313.      6// child_process.spawn and child_process.spawnSync without the shell option set.
+
11314.      6
+
11315.      6                    shell: (
+
11316.      6                        processArgv0.endsWith(".bat")
+
11317.      6                        || processArgv0.endsWith(".cmd")
+
11318.      6                    ),
+
11319.      6                    stdio: ["ignore", 1, 2]
+
11320.      6                }
+
11321.      6            ).on("exit", resolve);
+
11322.      6        });
+
11323.      6        consoleError(
+
11324.      6            `v8CoverageReportCreate - program exited with exitCode=${exitCode}`
+
11325.      6        );
+
11326.      7    }
+
11327.      7
+
11328.      7// 2. Merge JSON v8-coverage-files in <coverageDir>.
+
11329.      7
+
11330.      7    consoleError("v8CoverageReportCreate - merging coverage files...");
+
11331.      7    v8CoverageObj = await moduleFs.promises.readdir(coverageDir);
+
11332.     18    v8CoverageObj = v8CoverageObj.filter(function (file) {
+
11333.     18        return (
+
11334.     18            /^coverage-\d+?-\d+?-\d+?\.json$/
+
11335.     18        ).test(file);
+
11336.     18    });
+
11337.      7    v8CoverageObj = await Promise.all(v8CoverageObj.map(async function (file) {
+
11338.      7        let data;
+
11339.      7        let pathnameDict = Object.create(null);
+
11340.      7        data = await moduleFs.promises.readFile(coverageDir + file, "utf8");
+
11341.      7        data = JSON.parse(data);
+
11342.    479        data.result.forEach(function (scriptCov) {
+
11343.    479            let pathname = scriptCov.url;
+
11344.    479
+
11345.    479// Filter out internal coverages.
+
11346.    479
+
11347.    398            if (!pathname.startsWith("file:///")) {
+
11348.    398                return;
+
11349.    398            }
+
11350.     81
+
11351.     81// Normalize pathname.
+
11352.     81
+
11353.     81            pathname = moduleUrl.fileURLToPath(pathname);
+
11354.     81            pathname = modulePath.resolve(pathname).replace((
+
11355.     81                /\\/g
+
11356.     81            ), "/");
+
11357.     81
+
11358.     81// Filter files outside of cwd.
+
11359.     81
+
11360.     81            if (pathname.indexOf("[") >= 0 || !pathname.startsWith(cwd)) {
+
11361.     75                return;
+
11362.     75            }
11363.      7
-
11364.      7// PR-400 - Filter files by glob-patterns in excludeList, includeList.
+
11364.      7// Normalize pathname relative to cwd.
11365.      7
-
11366.      7        data.result = globExclude({
-
11367.      7            excludeList,
-
11368.      7            includeList,
-
11369.      7            pathnameList: Object.keys(pathnameDict)
-
11370.      7        }).pathnameList.map(function (pathname) {
-
11371.      7            return pathnameDict[pathname];
-
11372.      7        });
-
11373.      7        return data;
-
11374.      7    }));
-
11375.      7
-
11376.      7// Merge v8CoverageObj.
-
11377.      7
-
11378.      7    v8CoverageObj = v8CoverageListMerge(v8CoverageObj);
-
11379.      7
-
11380.      7// Debug v8CoverageObj.
-
11381.      7
-
11382.      7    await fsWriteFileWithParents(
-
11383.      7        coverageDir + "v8_coverage_merged.json",
-
11384.      7        JSON.stringify(v8CoverageObj, undefined, 1)
-
11385.      7    );
-
11386.      7
-
11387.      7// 3. Create html-coverage-reports in <coverageDir>.
+
11366.      7            pathname = pathname.slice(cwd.length);
+
11367.      7            scriptCov.url = pathname;
+
11368.      7            pathnameDict[pathname] = scriptCov;
+
11369.      7        });
+
11370.      7
+
11371.      7// PR-400 - Filter directory `node_modules`.
+
11372.      7
+
11373.      7        if (!modeIncludeNodeModules) {
+
11374.      7            excludeList.push("node_modules/");
+
11375.      7        }
+
11376.      7
+
11377.      7// PR-400 - Filter files by glob-patterns in excludeList, includeList.
+
11378.      7
+
11379.      7        data.result = globExclude({
+
11380.      7            excludeList,
+
11381.      7            includeList,
+
11382.      7            pathnameList: Object.keys(pathnameDict)
+
11383.      7        }).pathnameList.map(function (pathname) {
+
11384.      7            return pathnameDict[pathname];
+
11385.      7        });
+
11386.      7        return data;
+
11387.      7    }));
11388.      7
-
11389.      7    consoleError("v8CoverageReportCreate - creating html-coverage-report...");
-
11390.      7    fileDict = Object.create(null);
-
11391.      7    await Promise.all(v8CoverageObj.result.map(async function ({
-
11392.      7        functions,
-
11393.      7        url: pathname
-
11394.      7    }) {
-
11395.      7        let lineList;
-
11396.      7        let linesCovered;
-
11397.      7        let linesTotal;
-
11398.      7        let source;
-
11399.      7        source = await moduleFs.promises.readFile(pathname, "utf8");
-
11400.      7        lineList = [{}];
-
11401.      7        source.replace((
-
11402.      7            /^.*$/gm
-
11403.  11829        ), function (line, startOffset) {
-
11404.  11829            lineList[lineList.length - 1].endOffset = startOffset - 1;
-
11405.  11829            lineList.push({
-
11406.  11829                count: -1,
-
11407.  11829                endOffset: 0,
-
11408.  11829                holeList: [],
-
11409.  11829                line,
-
11410.  11829                startOffset
-
11411.  11829            });
-
11412.  11829            return "";
-
11413.  11829        });
-
11414.      7        lineList.shift();
-
11415.      7        lineList[lineList.length - 1].endOffset = source.length;
-
11416.     41        functions.reverse().forEach(function ({
-
11417.     41            ranges
-
11418.     41        }) {
-
11419.     65            ranges.reverse().forEach(function ({
-
11420.     65                count,
-
11421.     65                endOffset,
-
11422.     65                startOffset
-
11423.     65            }, ii, list) {
-
11424. 578847                lineList.forEach(function (elem) {
-
11425. 578847                    if (!(
-
11426. 578847                        (
-
11427. 578847                            elem.startOffset <= startOffset
-
11428. 205552                            && startOffset <= elem.endOffset
-
11429. 578782                        ) || (
-
11430. 578782                            elem.startOffset <= endOffset
-
11431. 578782                            && endOffset <= elem.endOffset
-
11432. 578782                        ) || (
-
11433. 578726                            startOffset <= elem.startOffset
-
11434. 578726                            && elem.endOffset <= endOffset
-
11435. 578726                        )
-
11436. 555345                    )) {
-
11437. 555345                        return;
-
11438. 555345                    }
-
11439.  23502
-
11440.  23502// Handle tree-root.
-
11441.  23502
-
11442.  23502                    if (ii + 1 === list.length) {
-
11443.  23233                        if (elem.count === -1) {
-
11444.  23233                            elem.count = count;
-
11445.  23233                        }
-
11446.  23233                        return;
-
11447.  23233                    }
-
11448.    269
-
11449.    269// Handle tree-children.
-
11450.    269
-
11451.    269                    if (elem.count !== 0) {
-
11452.    170                        elem.count = Math.max(count, elem.count);
-
11453.    269                    }
-
11454.    269                    if (count === 0) {
-
11455.    203                        elem.count = 0;
-
11456.    203                        elem.holeList.push([
-
11457.    203                            startOffset, endOffset
-
11458.    203                        ]);
-
11459.    203                    }
-
11460. 578847                });
-
11461.     65            });
-
11462.     41        });
-
11463.      7        linesTotal = lineList.length;
-
11464.  11829        linesCovered = lineList.filter(function ({
-
11465.  11829            count
-
11466.  11829        }) {
-
11467.  11829            return count > 0;
-
11468.  11829        }).length;
-
11469.      7        await moduleFs.promises.mkdir((
-
11470.      7            modulePath.dirname(coverageDir + pathname)
-
11471.      7        ), {
-
11472.      7            recursive: true
-
11473.      7        });
-
11474.      7        fileDict[pathname] = {
-
11475.      7            lineList,
-
11476.      7            linesCovered,
-
11477.      7            linesTotal,
-
11478.      7            modeCoverageIgnoreFile: (
-
11479.      7                (
-
11480.      7                    /^\/\*coverage-ignore-file\*\/$/m
-
11481.      7                ).test(source.slice(0, 65536))
-
11482.      7                ? "(ignore)"
-
11483.      7                : ""
-
11484.      7            ),
-
11485.      7            pathname
-
11486.      7        };
-
11487.      7        htmlRender({
-
11488.      7            fileList: [
-
11489.      7                fileDict[pathname]
-
11490.      7            ],
-
11491.      7            lineList,
-
11492.      7            pathname: coverageDir + pathname
-
11493.      7        });
-
11494.      7    }));
-
11495.      7    htmlRender({
-
11496.      7        fileList: Object.keys(fileDict).sort().map(function (pathname) {
-
11497.      7            return fileDict[pathname];
-
11498.      7        }),
-
11499.      7        modeIndex: true,
-
11500.      7        pathname: coverageDir + "index"
-
11501.      7    });
-
11502.      7    await Promise.all(promiseList);
-
11503.      7    assertOrThrow(
-
11504.      7        exitCode === 0,
-
11505.      7        "v8CoverageReportCreate - nonzero exitCode " + exitCode
-
11506.      7    );
-
11507.      7}
-
11508.      1
-
11509.      1/*
-
11510.      1function sentinel() {}
-
11511.      1*/
-
11512.      1
-
11513.      1// Export jslint as cjs/esm.
-
11514.      1
-
11515.      1jslint_export = Object.freeze(Object.assign(jslint, {
-
11516.      1    assertErrorThrownAsync,
-
11517.      1    assertJsonEqual,
-
11518.      1    assertOrThrow,
-
11519.      1    debugInline,
-
11520.      1    fsWriteFileWithParents,
-
11521.      1    globExclude,
-
11522.      1    htmlEscape,
-
11523.      1    jslint,
-
11524.      1    jslint_apidoc,
-
11525.      1    jslint_assert,
-
11526.      1    jslint_charset_ascii,
-
11527.      1    jslint_cli,
-
11528.      1    jslint_edition,
-
11529.      1    jslint_phase1_split,
-
11530.      1    jslint_phase2_lex,
-
11531.      1    jslint_phase3_parse,
-
11532.      1    jslint_phase4_walk,
-
11533.      1    jslint_phase5_whitage,
-
11534.      1    jslint_report,
-
11535.      1    jstestDescribe,
-
11536.      1    jstestIt,
-
11537.      1    jstestOnExit,
-
11538.      1    moduleFsInit,
-
11539.      1    noop,
-
11540.      1    objectDeepCopyWithKeysSorted,
-
11541.      1    v8CoverageListMerge,
-
11542.      1    v8CoverageReportCreate
-
11543.      1}));
-
11544.      1// module.exports = jslint_export;              // Export jslint as cjs.
-
11545.      1export default Object.freeze(jslint_export);    // Export jslint as esm.
-
11546.      1jslint_import_meta_url = import.meta.url;
-
11547.      1
-
11548.      1// Run jslint_cli.
-
11549.      1jslint_cli({});
-
11550.      1
+
11389.      7// Merge v8CoverageObj.
+
11390.      7
+
11391.      7    v8CoverageObj = v8CoverageListMerge(v8CoverageObj);
+
11392.      7
+
11393.      7// Debug v8CoverageObj.
+
11394.      7
+
11395.      7    await fsWriteFileWithParents(
+
11396.      7        coverageDir + "v8_coverage_merged.json",
+
11397.      7        JSON.stringify(v8CoverageObj, undefined, 1)
+
11398.      7    );
+
11399.      7
+
11400.      7// 3. Create html-coverage-reports in <coverageDir>.
+
11401.      7
+
11402.      7    consoleError("v8CoverageReportCreate - creating html-coverage-report...");
+
11403.      7    fileDict = Object.create(null);
+
11404.      7    await Promise.all(v8CoverageObj.result.map(async function ({
+
11405.      7        functions,
+
11406.      7        url: pathname
+
11407.      7    }) {
+
11408.      7        let lineList;
+
11409.      7        let linesCovered;
+
11410.      7        let linesTotal;
+
11411.      7        let source;
+
11412.      7        source = await moduleFs.promises.readFile(pathname, "utf8");
+
11413.      7        lineList = [{}];
+
11414.      7        source.replace((
+
11415.      7            /^.*$/gm
+
11416.  11842        ), function (line, startOffset) {
+
11417.  11842            lineList[lineList.length - 1].endOffset = startOffset - 1;
+
11418.  11842            lineList.push({
+
11419.  11842                count: -1,
+
11420.  11842                endOffset: 0,
+
11421.  11842                holeList: [],
+
11422.  11842                line,
+
11423.  11842                startOffset
+
11424.  11842            });
+
11425.  11842            return "";
+
11426.  11842        });
+
11427.      7        lineList.shift();
+
11428.      7        lineList[lineList.length - 1].endOffset = source.length;
+
11429.     41        functions.reverse().forEach(function ({
+
11430.     41            ranges
+
11431.     41        }) {
+
11432.     65            ranges.reverse().forEach(function ({
+
11433.     65                count,
+
11434.     65                endOffset,
+
11435.     65                startOffset
+
11436.     65            }, ii, list) {
+
11437. 579497                lineList.forEach(function (elem) {
+
11438. 579497                    if (!(
+
11439. 579497                        (
+
11440. 579497                            elem.startOffset <= startOffset
+
11441. 205552                            && startOffset <= elem.endOffset
+
11442. 579432                        ) || (
+
11443. 579432                            elem.startOffset <= endOffset
+
11444. 579432                            && endOffset <= elem.endOffset
+
11445. 579432                        ) || (
+
11446. 579376                            startOffset <= elem.startOffset
+
11447. 579376                            && elem.endOffset <= endOffset
+
11448. 579376                        )
+
11449. 555969                    )) {
+
11450. 555969                        return;
+
11451. 555969                    }
+
11452.  23528
+
11453.  23528// Handle tree-root.
+
11454.  23528
+
11455.  23528                    if (ii + 1 === list.length) {
+
11456.  23259                        if (elem.count === -1) {
+
11457.  23259                            elem.count = count;
+
11458.  23259                        }
+
11459.  23259                        return;
+
11460.  23259                    }
+
11461.    269
+
11462.    269// Handle tree-children.
+
11463.    269
+
11464.    269                    if (elem.count !== 0) {
+
11465.    170                        elem.count = Math.max(count, elem.count);
+
11466.    269                    }
+
11467.    269                    if (count === 0) {
+
11468.    203                        elem.count = 0;
+
11469.    203                        elem.holeList.push([
+
11470.    203                            startOffset, endOffset
+
11471.    203                        ]);
+
11472.    203                    }
+
11473. 579497                });
+
11474.     65            });
+
11475.     41        });
+
11476.      7        linesTotal = lineList.length;
+
11477.  11842        linesCovered = lineList.filter(function ({
+
11478.  11842            count
+
11479.  11842        }) {
+
11480.  11842            return count > 0;
+
11481.  11842        }).length;
+
11482.      7        await moduleFs.promises.mkdir((
+
11483.      7            modulePath.dirname(coverageDir + pathname)
+
11484.      7        ), {
+
11485.      7            recursive: true
+
11486.      7        });
+
11487.      7        fileDict[pathname] = {
+
11488.      7            lineList,
+
11489.      7            linesCovered,
+
11490.      7            linesTotal,
+
11491.      7            modeCoverageIgnoreFile: (
+
11492.      7                (
+
11493.      7                    /^\/\*coverage-ignore-file\*\/$/m
+
11494.      7                ).test(source.slice(0, 65536))
+
11495.      7                ? "(ignore)"
+
11496.      7                : ""
+
11497.      7            ),
+
11498.      7            pathname
+
11499.      7        };
+
11500.      7        htmlRender({
+
11501.      7            fileList: [
+
11502.      7                fileDict[pathname]
+
11503.      7            ],
+
11504.      7            lineList,
+
11505.      7            pathname: coverageDir + pathname
+
11506.      7        });
+
11507.      7    }));
+
11508.      7    htmlRender({
+
11509.      7        fileList: Object.keys(fileDict).sort().map(function (pathname) {
+
11510.      7            return fileDict[pathname];
+
11511.      7        }),
+
11512.      7        modeIndex: true,
+
11513.      7        pathname: coverageDir + "index"
+
11514.      7    });
+
11515.      7    await Promise.all(promiseList);
+
11516.      7    assertOrThrow(
+
11517.      7        exitCode === 0,
+
11518.      7        "v8CoverageReportCreate - nonzero exitCode " + exitCode
+
11519.      7    );
+
11520.      7}
+
11521.      1
+
11522.      1/*
+
11523.      1function sentinel() {}
+
11524.      1*/
+
11525.      1
+
11526.      1// Export jslint as cjs/esm.
+
11527.      1
+
11528.      1jslint_export = Object.freeze(Object.assign(jslint, {
+
11529.      1    assertErrorThrownAsync,
+
11530.      1    assertJsonEqual,
+
11531.      1    assertOrThrow,
+
11532.      1    debugInline,
+
11533.      1    fsWriteFileWithParents,
+
11534.      1    globExclude,
+
11535.      1    htmlEscape,
+
11536.      1    jslint,
+
11537.      1    jslint_apidoc,
+
11538.      1    jslint_assert,
+
11539.      1    jslint_charset_ascii,
+
11540.      1    jslint_cli,
+
11541.      1    jslint_edition,
+
11542.      1    jslint_phase1_split,
+
11543.      1    jslint_phase2_lex,
+
11544.      1    jslint_phase3_parse,
+
11545.      1    jslint_phase4_walk,
+
11546.      1    jslint_phase5_whitage,
+
11547.      1    jslint_report,
+
11548.      1    jstestDescribe,
+
11549.      1    jstestIt,
+
11550.      1    jstestOnExit,
+
11551.      1    moduleFsInit,
+
11552.      1    noop,
+
11553.      1    objectDeepCopyWithKeysSorted,
+
11554.      1    v8CoverageListMerge,
+
11555.      1    v8CoverageReportCreate
+
11556.      1}));
+
11557.      1// module.exports = jslint_export;              // Export jslint as cjs.
+
11558.      1export default Object.freeze(jslint_export);    // Export jslint as esm.
+
11559.      1jslint_import_meta_url = import.meta.url;
+
11560.      1
+
11561.      1// Run jslint_cli.
+
11562.      1jslint_cli({});
+
11563.      1
  125.      1    process_env, process_exit, promises, property, property_dict, push, quote,