• Georg Schmid's avatar
    [torque] Add Generic Structs · 1d9a5d88
    Georg Schmid authored
    This CL introduces generic Torque structs. Generics are grounded early in the Torque compilation pipeline, meaning that every instantiation of a generic struct with concrete types will be turned into a distinct StructType.
    
    As an example, consider a Tuple of types T1, T2:
    
      struct Tuple<T1: type, T2: type> {
        const fst: T1;
        const snd: T2;
      }
    
    which can be manipulated using generic macros, such as
    
      macro Swap<T1: type, T2: type>(tuple: Tuple<T1, T2>): Tuple<T2, T1> {
        return Tuple<T2, T1>{fst: tuple.snd, snd: tuple.fst};
      }
    
    Currently there is no type inference for struct instantiation sites, so type arguments have to be provided explicitly:
    
      const intptrAndSmi = Tuple<intptr, Smi>{fst: 1, snd: 2};
    
    R=sigurds@chromium.org, tebbi@chromium.org
    
    Change-Id: I43111561cbe53144db473dc844a478045644ef6c
    Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/1714868
    Commit-Queue: Georg Schmid <gsps@google.com>
    Reviewed-by: 's avatarTobias Tebbi <tebbi@chromium.org>
    Reviewed-by: 's avatarSigurd Schneider <sigurds@chromium.org>
    Cr-Commit-Position: refs/heads/master@{#62878}
    1d9a5d88
test-torque.cc 17.1 KB