public override TypeBuilder DefineType() { if (TypeBuilder != null) { return(TypeBuilder); } if (IsTopLevel) { if (TypeManager.NamespaceClash(Name, Location)) { return(null); } ModuleBuilder builder = CodeGen.Module.Builder; TypeBuilder = builder.DefineType( Name, TypeAttr, TypeManager.multicast_delegate_type); } else { TypeBuilder builder = Parent.TypeBuilder; string name = Name.Substring(1 + Name.LastIndexOf('.')); TypeBuilder = builder.DefineNestedType( name, TypeAttr, TypeManager.multicast_delegate_type); } TypeManager.AddUserType(this); #if GMCS_SOURCE if (IsGeneric) { string[] param_names = new string [TypeParameters.Length]; for (int i = 0; i < TypeParameters.Length; i++) { param_names [i] = TypeParameters [i].Name; } GenericTypeParameterBuilder[] gen_params; gen_params = TypeBuilder.DefineGenericParameters(param_names); int offset = CountTypeParameters - CurrentTypeParameters.Length; for (int i = offset; i < gen_params.Length; i++) { CurrentTypeParameters [i - offset].Define(gen_params [i]); } foreach (TypeParameter type_param in CurrentTypeParameters) { if (!type_param.Resolve(this)) { return(null); } } Expression current = new SimpleName( MemberName.Basename, TypeParameters, Location); current = current.ResolveAsTypeTerminal(this, false); if (current == null) { return(null); } CurrentType = current.Type; } #endif return(TypeBuilder); }