{
{ CLP$RESCAN_WILD_CARD_LEX_UNIT updates its PARSE parameter to designate the
{ next lexical unit that may include "wild card" characters.  The unit kind
{ clc$lex_wild_card_name can be thought of as "compound" units comprised of one
{ or more of the "simple" units: clc$lex_name, clc$lex_long_name,
{ clc$lex_alpha_number, clc$lex_unsigned_decimal, clc$lex_query,
{ clc$lex_multiply, clc$lex_exponentiate, and clc$lex_subtract.
{ For this procedure, the current unit upon entry will be (part of) the current
{ unit upon exit, whereas CLP$SCAN_WILD_CARD_LEXICAL_UNIT always moves on to
{ the next unit.
{ This procedure requires that the UNITS_ARRAY field of the PARSE parameter be
{ non-NIL.
{

  PROCEDURE [INLINE] clp$rescan_wild_card_lex_unit
    (VAR parse {input, output} : clt$parse_state);

?? PUSH (LISTEXT := ON) ??

    VAR
      wild_card_encountered: boolean;


    IF parse.unit.kind IN $clt$lexical_unit_kinds
          [clc$lex_name, clc$lex_long_name, clc$lex_query,
          clc$lex_multiply, clc$lex_exponentiate]
          THEN
      wild_card_encountered := FALSE;

    /scan_wild_card_units/
      WHILE TRUE DO
        IF parse.unit.kind IN $clt$lexical_unit_kinds
              [clc$lex_query, clc$lex_multiply, clc$lex_exponentiate,
              clc$lex_subtract] THEN
          wild_card_encountered := TRUE;
        IFEND;

        IF parse.index >= parse.index_limit THEN
          EXIT /scan_wild_card_units/;
        ELSE
          CASE parse.units_array^ [parse.units_array_index + 1].kind OF
          = clc$lex_name, clc$lex_long_name, clc$lex_alpha_number,
                clc$lex_unsigned_decimal, clc$lex_query,
                clc$lex_multiply, clc$lex_exponentiate =
            ;
          = clc$lex_subtract =
            CASE parse.units_array^ [parse.units_array_index + 2].kind OF
            = clc$lex_name, clc$lex_long_name, clc$lex_alpha_number,
                  clc$lex_query, clc$lex_multiply, clc$lex_exponentiate =
              ;
            = clc$lex_unsigned_decimal =
              IF NOT (parse.units_array^ [parse.units_array_index + 3].kind
                    IN $clt$lexical_unit_kinds [clc$lex_name,
                    clc$lex_long_name, clc$lex_alpha_number, clc$lex_query,
                    clc$lex_multiply, clc$lex_exponentiate]) THEN
                EXIT /scan_wild_card_units/;
              IFEND;
            ELSE
              EXIT /scan_wild_card_units/;
            CASEND;
          ELSE
            EXIT /scan_wild_card_units/;
          CASEND;
        IFEND;

        parse.units_array_index := parse.units_array_index + 1;
        parse.unit.kind := parse.units_array^ [parse.units_array_index].kind;
        parse.index := parse.index + parse.units_array^
              [parse.units_array_index].size;
      WHILEND /scan_wild_card_units/;

      IF wild_card_encountered THEN
        parse.unit.kind := clc$lex_wild_card_name;
        parse.unit.size := parse.index - parse.unit_index;
      IFEND;
    IFEND;

  PROCEND clp$rescan_wild_card_lex_unit;

*copyc clt$lexical_unit_kinds
*copyc clt$parse_state
?? POP ??
