Home | History | Annotate | Download | only in CodeGen

Lines Matching defs:Recursive

4063 /// recursive calls that check aggregate component types.
5945 /// 2. As a means to break recursive member type inclusion.
5948 /// NonRecursive: The type encoding is not recursive;
5949 /// Recursive: The type encoding is recursive;
5952 /// Recursive type encoding.
5955 /// as possible. Whilst it may contain types which are recursive, the type
5956 /// itself is not recursive and thus its encoding may be safely used whenever
5959 /// A Recursive entry will have all of its sub-members expanded as fully as
5960 /// possible. The type itself is recursive and it may contain other types which
5961 /// are recursive. The Recursive encoding must not be used during the expansion
5962 /// of a recursive type's recursive branch. For simplicity the code uses
5963 /// IncompleteCount to reject all usage of Recursive encodings for member types.
5968 /// handle recursive inclusion of types as sub-members. If there is recursion
5976 /// If the cache contains a Recursive encoding for the member type, the
5980 /// cache to break potential recursive inclusion of itself as a sub-member;
5983 /// entry is removed from the cache. If a Recursive encoding was swapped out
5990 /// If a member's encoding is found to be a NonRecursive or Recursive viz:
5992 /// Else the member is part of a recursive type and thus the recursion has
5996 enum Status {NonRecursive, Recursive, Incomplete, IncompleteUsed};
6000 std::string Swapped; // A temporary place holder for a Recursive encoding
6098 /// If there is a Recursive encoding in the cache, it is swapped out and will
6106 assert( (E.Str.empty() || E.State == Recursive) &&
6109 E.Swapped.swap(E.Str); // swap out the Recursive
6117 /// If a Recursive was swapped out by addIncomplete(), it will be replaced.
6130 // We made use of our Incomplete encoding, thus we are recursive.
6137 // Swap the Recursive back.
6140 E.State = Recursive;
6147 /// Recursive (viz: all sub-members were expanded as fully as possible).
6154 assert(E.State==Recursive && E.Str.size() == Str.size() &&
6155 "This is not the same Recursive entry");
6156 // The parent container was not recursive after all, so we could have used
6157 // this Recursive sub-member entry after all, but we assumed the worse when
6163 E.State = IsRecursive? Recursive : NonRecursive;
6168 /// encoding is Recursive, return an empty StringRef.
6176 if (E.State == Recursive && IncompleteCount)
6177 return StringRef(); // We don't use Recursive encodings for member types.
6277 // so that recursive calls to this RecordType will use it whilst building a