
  PROCEDURE [INLINE] clp$compute_variable_name_hash
    (    name: clt$variable_name;
     VAR hashed_name: clt$variable_name;
     VAR hash: clt$variable_name_hash);

?? PUSH (LISTEXT := ON) ??

    TYPE
      four_chars = 0 .. 0ffffffff(16),
      three_chars = 0 .. 0ffffff(16);

    VAR
      scratch_pad: record
        p1: four_chars,
        p2: four_chars,
        p3: four_chars,
        p4: four_chars,
        p5: four_chars,
        p6: four_chars,
        p7: four_chars,
        p8: three_chars,
      recend,
      swap: four_chars;


    #UNCHECKED_CONVERSION (name, scratch_pad);

{ Swap the first group of four characters in the name with the third group of
{ four characters to improve the distribution of names within a search tree.
{ (This operation can be undone by clp$unhash_variable_name.)

    swap := scratch_pad.p3;
    scratch_pad.p3 := scratch_pad.p1;
    scratch_pad.p1 := swap;

    hash := (scratch_pad.p1 + scratch_pad.p2 + scratch_pad.p3 +
          scratch_pad.p4 + scratch_pad.p5 + scratch_pad.p6 + scratch_pad.p7 +
          scratch_pad.p8) MOD clc$max_variable_hash_groups;

    #UNCHECKED_CONVERSION (scratch_pad, hashed_name);

  PROCEND clp$compute_variable_name_hash;

*copyc clc$max_variable_hash_groups
*copyc clt$variable_name
*copyc clt$variable_name_hash
*copyc ost$name
?? POP ??
