• Manos Koukoutos's avatar
    [wasm-gc] Change ValueType representation to account for new types · 52f65296
    Manos Koukoutos authored
    Motivation:
    Changes to the typed function references and gc proposals solidified
    the notion of heap type, clarified nullable vs. non-nullable reference
    types, and introduced rtts, which contain an integer depth field in
    addition to a heap type. This required us to overhaul our ValueType
    representation, which results in extensive changes.
    
    To keep this CL "small", we do not try to implement the binary encoding
    as described in the proposals, but rather devise a simpler one of our
    own (see below). Also, we do not try to implement additional
    functionality for the new types.
    
    Changes:
    - Introduce HeapType. Move heap types from ValueType to HeapType.
    - Introduce Nullability for reference types.
    - Rework ValueType helper methods.
    - Introduce rtts in ValueType with an integer depth field. Include depth
      in the ValueType encoding.
    - Make the constructor of ValueType private, instead expose static
      functions which explicitly state what they create.
    - Change every switch statement on ValueType::Kind. Sometimes, we need
      nested switches.
    - Introduce temporary constants in ValueTypeCode for nullable types,
      use them for decoding.
    - In WasmGlobalObject, split 'flags' into 'raw_type' and 'is_mutable'.
    - Change IsSubtypeOfRef to IsSubtypeOfHeap and implement changes in
      subtyping.
    - kWasmFuncRef initializers are now non-nullable. Initializers are
      only required to be subtypes of the declared global type.
    - Change tests and fuzzers as needed.
    
    Bug: v8:7748
    Change-Id: If41f783bd4128443b07e94188cea7dd53ab0bfa5
    Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/2247657
    Commit-Queue: Manos Koukoutos <manoskouk@chromium.org>
    Reviewed-by: 's avatarClemens Backes <clemensb@chromium.org>
    Reviewed-by: 's avatarJakob Kummerow <jkummerow@chromium.org>
    Cr-Commit-Position: refs/heads/master@{#68408}
    52f65296
test-gc.cc 19.3 KB