ICSharpCode.NRefactory.MonoCSharp.Struct.IsUnmanagedType C# (CSharp) Method

IsUnmanagedType() public method

public IsUnmanagedType ( ) : bool
return bool
		public override bool IsUnmanagedType ()
		{
			if (has_unmanaged_check_done)
				return is_unmanaged;

			if (requires_delayed_unmanagedtype_check)
				return true;

			var parent_def = Parent.PartialContainer;
			if (parent_def != null && parent_def.IsGenericOrParentIsGeneric) {
				has_unmanaged_check_done = true;
				return false;
			}

			if (first_nonstatic_field != null) {
				requires_delayed_unmanagedtype_check = true;

				foreach (var member in Members) {
					var f = member as Field;
					if (f == null)
						continue;

					if (f.IsStatic)
						continue;

					// It can happen when recursive unmanaged types are defined
					// struct S { S* s; }
					TypeSpec mt = f.MemberType;
					if (mt == null) {
						return true;
					}

					if (mt.IsUnmanaged)
						continue;

					has_unmanaged_check_done = true;
					return false;
				}

				has_unmanaged_check_done = true;
			}

			is_unmanaged = true;
			return true;
		}