• Manos Koukoutos's avatar
    [wasm-gc] Implement iso-recursive types · fe531e1f
    Manos Koukoutos authored
    This CL replaces the equirecursive type system for wasm-gc with the
    isorecursive hybrid type system presented here:
    https://github.com/WebAssembly/gc/issues/257.
    
    In broad strokes, this includes the following changes:
    - In the module decoder, remove equirecursive types. Implement recursive
      type groups, subtype definitions, and function/struct/array
      definitions. Treat nominal modules as syntactic sugar of an
      isorecursive module, where all types belong in the same recursive
      group.
    - Remove rtt.sub and all related infrastructure.
    - Change subtyping to work with explicit supertypes only.
    - Add ValidSubtypeDefinition in subtyping, to check that subtype
      declarations are valid during decoding.
    - Remove the subtyping cache.
    - Add support for functions to have specific signature index in
      WasmModuleBuilder and in test-gc.cc.
    - Adapt tests.
    
    Current restrictions:
    - Recursive groups are not stored beyond decoding.
    - Type canonicalization is not implemented. No tests relying on types
      being considered identical post-canonicalization.
    - No cross-module subtyping is possible. Tests relying on cross-module
      subtyping have been commented out.
    
    Bug: v8:7748
    Change-Id: I69fd04ecc5611f6230c95d5c89d1c520163fffae
    Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/3416239Reviewed-by: 's avatarTobias Tebbi <tebbi@chromium.org>
    Reviewed-by: 's avatarJakob Kummerow <jkummerow@chromium.org>
    Commit-Queue: Manos Koukoutos <manoskouk@chromium.org>
    Cr-Commit-Position: refs/heads/main@{#78816}
    fe531e1f
wasm-module-builder.cc 32.2 KB