コード例 #1
0
        protected virtual void CheckAbstractExtern(ResolveContext rc)
        {
            if (Parent.Kind == TypeKind.Interface)
            {
                return;
            }

            if (this is MethodCore && (this as MethodCore).HasBody)
            {
                if ((mod_flags & Modifiers.EXTERN) != 0)
                {
                    rc.Report.Error(202, Location, "`{0}' cannot declare a body because it is marked extern",
                                    GetSignatureForError());
                }

                if ((mod_flags & Modifiers.ABSTRACT) != 0)
                {
                    rc.Report.Error(203, Location, "`{0}' cannot declare a body because it is marked abstract",
                                    GetSignatureForError());
                }
            }
            else
            {
                if ((mod_flags & (Modifiers.ABSTRACT | Modifiers.EXTERN | Modifiers.PARTIAL)) == 0 && !(Parent is DelegateDeclaration))
                {
                    PropertyMethod pm = this as PropertyMethod;
                    if (pm is IndexerGetterDeclaration || pm is IndexerSetterDeclaration)
                    {
                        pm = null;
                    }

                    if (pm != null && pm.Property.AccessorSecond == null)
                    {
                        rc.Report.Error(204, Location,
                                        "`{0}' must have a body because it is not marked abstract or extern. The property can be automatically implemented when you define both accessors",
                                        GetSignatureForError());
                    }


                    rc.Report.Error(205, Location, "`{0}' must have a body because it is not marked abstract, extern, or partial",
                                    GetSignatureForError());
                }
            }
        }
コード例 #2
0
 // TODO:IMPL
 protected void CheckAccessorNameConflict(PropertyMethod m)
 {
 }