     case classField     = 0x4 // A concrete class field: syntax e.g. `c1`
     case tailElements   = 0x5 // A tail allocated element of a class: syntax `ct`
     case anyValueFields = 0x6 // Any number of any value fields (struct, tuple, enum): syntax `v**`
-    case anyClassField  = 0x7 // Any class field, including tail elements: syntax `c*`
-    
+
     // "Large" kinds: starting from here the low 3 bits must be 1.
     // This and all following kinds (we'll add in the future) cannot have a field index.
+    case anyClassField  = 0x7 // Any class field, including tail elements: syntax `c*`    
     case anything       = 0xf // Any number of any fields: syntax `**`
 
     public var isValueField: Bool {

    assert(kind != .anything || bytes == 0, "'anything' only allowed in last path component")
    var idx = index
    var b = bytes
    if (b >> 56) != 0 { return Self(.anything) }
    b = (b << 8) | UInt64(((idx & 0xf) << 4) | (kind.rawValue << 1))
    idx >>= 4
    while idx != 0 {

  /// returns true for `v**.c3`
  /// returns true for `**`
  /// returns false for `s0.c3` (because e.g. `s1` would not match)
  public var topMatchesAnyValueField: Bool {
    switch top.kind {
      case .anyValueFields, .anything: return true
      default: return false
    }
  }

  /// Returns true if the path does not have any class projections.
  /// For example:
  /// returns true for `v**`
  /// returns false for `c0`
  /// returns false for `**` (because '**' can have any number of class projections)
  public var hasNoClassProjection: Bool {
    return matches(pattern: Self(.anyValueFields))
  }

  /// Returns true if the path has at least one class projection.
  /// For example:
  /// returns false for `v**`
  /// returns true for `v**.c0.s1.v**`
  /// returns false for `**` (because '**' can have zero class projections)
  public var hasClassProjection: Bool {
    var p = self
    while true {
      let (k, _, numBits) = p.top
      if k == .root { return false }
      if k.isClassField { return true }
      p = p.pop(numBits: numBits)
    }
  }

