prefix()

in web/jslint/src/main/resources/data/jslint-2020-03-28.js [2771:2865]


prefix("{", function () {
  var the_brace = token;
  var seen = empty();
  the_brace.expression = [];

  if (next_token.id !== "}") {
    (function member() {
      var extra;
      var full;
      var id;
      var name = next_token;
      var value;
      advance();

      if ((name.id === "get" || name.id === "set") && next_token.identifier) {
        if (!option.getset) {
          warn("unexpected_a", name);
        }

        extra = name.id;
        full = extra + " " + next_token.id;
        name = next_token;
        advance();
        id = survey(name);

        if (seen[full] === true || seen[id] === true) {
          warn("duplicate_a", name);
        }

        seen[id] = false;
        seen[full] = true;
      } else {
        id = survey(name);

        if (typeof seen[id] === "boolean") {
          warn("duplicate_a", name);
        }

        seen[id] = true;
      }

      if (name.identifier) {
        if (next_token.id === "}" || next_token.id === ",") {
          if (typeof extra === "string") {
            advance("(");
          }

          value = expression(Infinity, true);
        } else if (next_token.id === "(") {
          value = do_function({
            arity: "unary",
            from: name.from,
            id: "function",
            line: name.line,
            name: typeof extra === "string" ? extra : id,
            thru: name.from
          });
        } else {
          if (typeof extra === "string") {
            advance("(");
          }

          var the_colon = next_token;
          advance(":");
          value = expression(0);

          if (value.id === name.id && value.id !== "function") {
            warn("unexpected_a", the_colon, ": " + name.id);
          }
        }

        value.label = name;

        if (typeof extra === "string") {
          value.extra = extra;
        }

        the_brace.expression.push(value);
      } else {
        advance(":");
        value = expression(0);
        value.label = name;
        the_brace.expression.push(value);
      }

      if (next_token.id === ",") {
        advance(",");
        return member();
      }
    })();
  }

  advance("}");
  return the_brace;
});