in web/jslint/src/main/resources/data/jslint-2020-03-28.js [2901:3039]
function do_var() {
var the_statement = token;
var is_const = the_statement.id === "const";
the_statement.names = []; // A program may use var or let, but not both.
if (!is_const) {
if (var_mode === undefined) {
var_mode = the_statement.id;
} else if (the_statement.id !== var_mode) {
warn("expected_a_b", the_statement, var_mode, the_statement.id);
}
} // We don't expect to see variables created in switch statements.
if (functionage.switch > 0) {
warn("var_switch", the_statement);
}
if (functionage.loop > 0 && the_statement.id === "var") {
warn("var_loop", the_statement);
}
(function next() {
if (next_token.id === "{" && the_statement.id !== "var") {
var the_brace = next_token;
advance("{");
(function pair() {
if (!next_token.identifier) {
return stop("expected_identifier_a", next_token);
}
var name = next_token;
survey(name);
advance();
if (next_token.id === ":") {
advance(":");
if (!next_token.identifier) {
return stop("expected_identifier_a", next_token);
}
next_token.label = name;
the_statement.names.push(next_token);
enroll(next_token, "variable", is_const);
advance();
the_brace.open = true;
} else {
the_statement.names.push(name);
enroll(name, "variable", is_const);
}
name.dead = false;
name.init = true;
if (next_token.id === "=") {
advance("=");
name.expression = expression();
the_brace.open = true;
}
if (next_token.id === ",") {
advance(",");
return pair();
}
})();
advance("}");
advance("=");
the_statement.expression = expression(0);
} else if (next_token.id === "[" && the_statement.id !== "var") {
var the_bracket = next_token;
advance("[");
(function element() {
var ellipsis;
if (next_token.id === "...") {
ellipsis = true;
advance("...");
}
if (!next_token.identifier) {
return stop("expected_identifier_a", next_token);
}
var name = next_token;
advance();
the_statement.names.push(name);
enroll(name, "variable", is_const);
name.dead = false;
name.init = true;
if (ellipsis) {
name.ellipsis = true;
} else {
if (next_token.id === "=") {
advance("=");
name.expression = expression();
the_bracket.open = true;
}
if (next_token.id === ",") {
advance(",");
return element();
}
}
})();
advance("]");
advance("=");
the_statement.expression = expression(0);
} else if (next_token.identifier) {
var name = next_token;
advance();
if (name.id === "ignore") {
warn("unexpected_a", name);
}
enroll(name, "variable", is_const);
if (next_token.id === "=" || is_const) {
advance("=");
name.dead = false;
name.init = true;
name.expression = expression(0);
}
the_statement.names.push(name);
} else {
return stop("expected_identifier_a", next_token);
}
})();
semicolon();
return the_statement;
}