-#if GMCS_SOURCE
- if ((ModFlags & Modifiers.COMPILER_GENERATED) != 0 && !Parent.IsCompilerGenerated)
- MethodBuilder.SetCustomAttribute (TypeManager.GetCompilerGeneratedAttribute (Location));
- if ((ModFlags & Modifiers.DEBUGGER_HIDDEN) != 0)
- MethodBuilder.SetCustomAttribute (TypeManager.GetDebuggerHiddenAttribute (Location));
-#endif
- if (OptAttributes != null)
- OptAttributes.Emit ();
+ base.DoMemberTypeIndependentChecks ();
+
+ CheckAbstractAndExtern (block != null);
+
+ if ((ModFlags & Modifiers.PARTIAL) != 0) {
+ for (int i = 0; i < Parameters.Count; ++i) {
+ IParameterData p = Parameters.FixedParameters [i];
+ if (p.ModFlags == Parameter.Modifier.OUT) {
+ Report.Error (752, Location, "`{0}': A partial method parameters cannot use `out' modifier",
+ GetSignatureForError ());
+ }
+
+ if (p.HasDefaultValue && IsPartialImplementation)
+ ((Parameter) p).Warning_UselessOptionalParameter ();
+ }
+ }
+ }
+
+ protected override void DoMemberTypeDependentChecks ()
+ {
+ base.DoMemberTypeDependentChecks ();
+
+ if (!TypeManager.IsGenericParameter (MemberType)) {
+ if (MemberType.IsAbstract && MemberType.IsSealed) {
+ Report.Error (722, Location, Error722, TypeManager.CSharpName (MemberType));
+ }
+ }
+ }
+
+ public override void Emit ()
+ {
+ if ((ModFlags & Modifiers.COMPILER_GENERATED) != 0 && !Parent.IsCompilerGenerated)
+ PredefinedAttributes.Get.CompilerGenerated.EmitAttribute (MethodBuilder);
+ if ((ModFlags & Modifiers.DEBUGGER_HIDDEN) != 0)
+ PredefinedAttributes.Get.DebuggerHidden.EmitAttribute (MethodBuilder);
+
+ if (TypeManager.IsDynamicType (ReturnType)) {
+ return_attributes = new ReturnParameter (MethodBuilder, Location);
+ return_attributes.EmitPredefined (PredefinedAttributes.Get.Dynamic, Location);
+ }
+
+ if (OptAttributes != null)
+ OptAttributes.Emit ();