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

CreateTypeBuilder() private method

private CreateTypeBuilder ( ) : bool
return bool
		bool CreateTypeBuilder ()
		{
			//
			// Sets .size to 1 for structs with no instance fields
			//
			int type_size = Kind == MemberKind.Struct && first_nonstatic_field == null ? 1 : 0;

			if (IsTopLevel) {
				// TODO: Completely wrong
				if (Module.GlobalRootNamespace.IsNamespace (Name)) {
					Report.Error (519, Location, "`{0}' clashes with a predefined namespace", Name);
				}

				TypeBuilder = Module.CreateBuilder (Name, TypeAttr, type_size);
			} else {
				TypeBuilder = Parent.TypeBuilder.DefineNestedType (Basename, TypeAttr, null, type_size);
			}

			if (DeclaringAssembly.Importer != null)
				DeclaringAssembly.Importer.AddCompiledType (TypeBuilder, spec);

			spec.SetMetaInfo (TypeBuilder);
			spec.MemberCache = new MemberCache (this);
			spec.DeclaringType = Parent.CurrentType;

			if (!IsTopLevel)
				Parent.MemberCache.AddMember (spec);

			if (IsGeneric) {
				string[] param_names = new string[TypeParameters.Length];
				for (int i = 0; i < TypeParameters.Length; i++)
					param_names [i] = TypeParameters[i].Name;

				all_tp_builders = TypeBuilder.DefineGenericParameters (param_names);

				int offset = CurrentTypeParametersStartIndex;
				for (int i = offset; i < all_tp_builders.Length; i++) {
					CurrentTypeParameters [i - offset].Define (all_tp_builders [i], spec);
				}
			}

			return true;
		}