private bool IsCorrectExplicitMemberImplOrNoExplicitMemberAtAll(TypeMember member, IMember entity)
        {
            ExplicitMemberInfo info = ((IExplicitMember)member).ExplicitInfo;

            return(info == null ||
                   entity.DeclaringType == GetType(info.InterfaceType));
        }
        override public void OnExplicitMemberInfo(ExplicitMemberInfo node)
        {
            TypeMember member = (TypeMember)node.ParentNode;

            CheckExplicitMemberValidity((IExplicitMember)member);
            member.Visibility = TypeMemberModifiers.Private;
        }
        private bool IsCorrectExplicitMemberImplOrNoExplicitMemberAtAll(TypeMember member, IMember entity)
        {
            ExplicitMemberInfo info = ((IExplicitMember)member).ExplicitInfo;

            if (info == null)
            {
                return(true);
            }
            if (info.Entity != null)
            {
                return(false);                // already bound to another member
            }
            return(entity.DeclaringType == GetType(info.InterfaceType));
        }
示例#4
0
        void CheckExplicitImpl(IExplicitMember member)
        {
            ExplicitMemberInfo ei = member.ExplicitInfo;

            if (null == ei)
            {
                return;
            }

            TypeMember node = (TypeMember)member;

            if (TypeMemberModifiers.None != node.Modifiers)
            {
                Error(
                    CompilerErrorFactory.ExplicitImplMustNotHaveModifiers(
                        node,
                        ei.InterfaceType.Name,
                        node.Name));
            }
        }
        public override void OnExplicitMemberInfo(ExplicitMemberInfo node)
        {
            var member = (TypeMember)node.ParentNode;

            if (!CheckExplicitMemberValidity((IExplicitMember)member))
            {
                return;
            }

            var interfaceType = GetEntity(node.InterfaceType);
            var baseMember    = FindBaseMemberOf((IMember)member.Entity, interfaceType);

            if (null == baseMember)
            {
                Error(CompilerErrorFactory.NotAMemberOfExplicitInterface(member, interfaceType));
                return;
            }

            TraceImplements(member, baseMember);
            node.Entity = baseMember;
        }
示例#6
0
 override public void OnExplicitMemberInfo(ExplicitMemberInfo node)
 {
     Visit(node.InterfaceType);
 }
        public override void LeaveExplicitMemberInfo(ExplicitMemberInfo node)
        {
            var member = (TypeMember)node.ParentNode;

            member.Modifiers |= TypeMemberModifiers.Private | TypeMemberModifiers.Virtual;
        }
示例#8
0
 public override void OnExplicitMemberInfo(ExplicitMemberInfo node)
 {
     throw new NotImplementedException();
     IL_0006 :;
 }
 public override void OnExplicitMemberInfo(ExplicitMemberInfo node)
 {
     base.OnExplicitMemberInfo(node);
     Check(node);
 }