bool CreateTypeBuilder ()
{
//
// Sets .size to 1 for structs with no instance fields
//
int type_size = Kind == MemberKind.Struct && first_nonstatic_field == null && !(this is StateMachine) ? 1 : 0;
var parent_def = Parent as TypeDefinition;
if (parent_def == null) {
var sb = new StringBuilder ();
CreateMetadataName (sb);
TypeBuilder = Module.CreateBuilder (sb.ToString (), TypeAttr, type_size);
} else {
TypeBuilder = parent_def.TypeBuilder.DefineNestedType (FilterNestedName (MemberName.Basename), TypeAttr, null, type_size);
}
if (DeclaringAssembly.Importer != null)
DeclaringAssembly.Importer.AddCompiledType (TypeBuilder, spec);
spec.SetMetaInfo (TypeBuilder);
spec.MemberCache = new MemberCache (this);
TypeParameters parentAllTypeParameters = null;
if (parent_def != null) {
spec.DeclaringType = Parent.CurrentType;
parent_def.MemberCache.AddMember (spec);
parentAllTypeParameters = parent_def.all_type_parameters;
}
if (MemberName.TypeParameters != null || parentAllTypeParameters != null) {
var tparam_names = CreateTypeParameters (parentAllTypeParameters);
all_tp_builders = TypeBuilder.DefineGenericParameters (tparam_names);
if (CurrentTypeParameters != null) {
CurrentTypeParameters.Create (spec, CurrentTypeParametersStartIndex, this);
CurrentTypeParameters.Define (all_tp_builders);
}
}
return true;
}