Mono.CSharp.TypeContainer.CheckRecursiveDefinition C# (CSharp) Method

CheckRecursiveDefinition() private method

private CheckRecursiveDefinition ( TypeContainer tc ) : System.TypeSpec
tc TypeContainer
return System.TypeSpec
		TypeSpec CheckRecursiveDefinition (TypeContainer tc)
		{
			if (InTransit != null)
				return spec;

			InTransit = tc;

			if (base_type_expr != null) {
				var ptc = base_type.MemberDefinition as TypeContainer;
				if (ptc != null && ptc.CheckRecursiveDefinition (this) != null)
					return base_type;
			}

			if (iface_exprs != null) {
				foreach (TypeExpr iface in iface_exprs) {
					// the interface might not have been resolved, prevents a crash, see #442144
					if (iface == null)
						continue;
					var ptc = iface.Type.MemberDefinition as Interface;
					if (ptc != null && ptc.CheckRecursiveDefinition (this) != null)
						return iface.Type;
				}
			}

			if (!IsTopLevel && Parent.PartialContainer.CheckRecursiveDefinition (this) != null)
				return spec;

			InTransit = null;
			return null;
		}