• Leszek Swirski's avatar
    [hashtable] Allow GlobalDictionary to have holes · 82726b64
    Leszek Swirski authored
    Rather than marking deleted GlobalDictionary entries with a "The Hole"
    valued PropertyCell, we now remove those PropertyCells entirely and
    use the standard HashTable deleted item marker (also the Hole).
    
    This comes with several simplifications:
    
      1) We no longer need a customizable IsKey method on HastTable shapes,
         which was only used by GlobalDictionary to mark "The Hole" cells
         as not real keys,
      2) We can get rid of IsLive/IsKey from the Shape entirely, and define
         it directly in the HashTable, which will also allow us (in the
         future) to encourage caching of "undefined" and "Hole" where used
         for IsKey checks,
      3) PropertyCell invalidation doesn't necessarily have to allocate a
         new replacement cell (specifically, on deletion), nor does it have
         to deal with cells that contain the Hole,
      4) kNeedsHoleCheck is renamed to kMatchNeedsHoleCheck (to be explicit
         that this is only needed to guard IsMatch, which may do an
         indentity comparison and thus not need the HoleCheck guard). It's
         also moved out of BaseShape and into the various shapes that
         define IsMatch, to make them more explicitly think about the
         value,
      5) Modified some while loops into for loops to allow clearer use of
         "continue" on successful hole checks.
    
    Change-Id: If591cbb6b49d59726bdc615413aba4f78fd64632
    Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/2292230
    Commit-Queue: Leszek Swirski <leszeks@chromium.org>
    Auto-Submit: Leszek Swirski <leszeks@chromium.org>
    Reviewed-by: 's avatarIgor Sheludko <ishell@chromium.org>
    Cr-Commit-Position: refs/heads/master@{#68807}
    82726b64
js-objects.cc 226 KB