• KOBAYASHI Shuji's avatar
    Use type tag for hash code in `ht_hash_func()` · 11212096
    KOBAYASHI Shuji authored
    The function corresponding to `ht_hash_func()` was as follows in the days of
    khash implementation (before d78acc7a).
    
      ```c
      mrb_hash_ht_hash_func(mrb_state *mrb, mrb_value key)
      {
        enum mrb_vtype t = mrb_type(key);
        ...
        switch (t) {
        ...
        default:
          hv = mrb_funcall(mrb, key, "hash", 0);
          h = (khint_t)t ^ (khint_t)mrb_fixnum(hv);
          break;
        }
        ...
      }
      ```
    
    When switched to the segmented list implementation (d78acc7a), this function
    was changed as follows.
    
      ```c
      sg_hash_func(mrb_state *mrb, seglist *t, mrb_value key)
      {
        enum mrb_vtype tt = mrb_type(key);
        ...
        switch (tt) {
        ...
        default:
          hv = mrb_funcall(mrb, key, "hash", 0);
          h = (size_t)t ^ (size_t)mrb_fixnum(hv);
          break;
        }
        ...
      }
      ```
    
    Since the argument `t` was added, the variable for type tag was changed from
    `t` to `tt`, but the variable used in the expression of `h` remained `t`.
    
    Probably this is an omission of change, so fixed it.
    11212096
hash.c 33.6 KB