Esempio n. 1
0
        public IMember GetMember(IModuleContext context, string name)
        {
            IMember member;

            lock (_members) {
                if (_members.TryGetValue(name, out member))
                {
                    return(member);
                }

                // Special case names that we want to add to our own _members dict
                switch (name)
                {
                case "__mro__":
                    member = _members[name] = new AstPythonSequence(
                        (context as IPythonInterpreter)?.GetBuiltinType(BuiltinTypeId.Tuple),
                        DeclaringModule,
                        Mro
                        );
                    return(member);
                }
            }
            foreach (var m in Mro.Skip(1))
            {
                member = m.GetMember(context, name);
                if (member != null)
                {
                    return(member);
                }
            }
            return(null);
        }
Esempio n. 2
0
        public override IMember GetMember(string name)
        {
            lock (MembersLock) {
                if (Members.TryGetValue(name, out var member))
                {
                    return(member);
                }
            }

            // Special case names that we want to add to our own Members dict
            var is3x = DeclaringModule.Interpreter.LanguageVersion.Is3x();

            switch (name)
            {
            case "__mro__":
            case "mro":
                return(is3x ? PythonCollectionType.CreateList(DeclaringModule, Mro) : UnknownType as IMember);

            case "__dict__":
                return(is3x ? DeclaringModule.Interpreter.GetBuiltinType(BuiltinTypeId.Dict) : UnknownType);

            case @"__weakref__":
                return(is3x ? DeclaringModule.Interpreter.GetBuiltinType(BuiltinTypeId.Object) : UnknownType);
            }

            using (_memberGuard.Push(this, out var reentered)) {
                if (!reentered)
                {
                    return(Mro.Skip(1).Select(c => c.GetMember(name)).ExcludeDefault().FirstOrDefault());
                }
                return(null);
            }
        }
        public override IEnumerable <string> GetMemberNames()
        {
            var names = new HashSet <string>();

            names.UnionWith(Members.Keys);
            foreach (var m in Mro.Skip(1))
            {
                names.UnionWith(m.GetMemberNames());
            }
            return(DeclaringModule.Interpreter.LanguageVersion.Is3x() ? names.Concat(_classMethods).Distinct() : names);
        }
Esempio n. 4
0
        public override IEnumerable <string> GetMemberNames()
        {
            var names = new HashSet <string>();

            lock (_lock) {
                names.UnionWith(Members.Keys);
            }
            foreach (var m in Mro.Skip(1))
            {
                names.UnionWith(m.GetMemberNames());
            }
            return(names);
        }
Esempio n. 5
0
        public IEnumerable <string> GetMemberNames(IModuleContext moduleContext)
        {
            var names = new HashSet <string>();

            lock (_members) {
                names.UnionWith(_members.Keys);
            }

            foreach (var m in Mro.Skip(1))
            {
                names.UnionWith(m.GetMemberNames(moduleContext));
            }

            return(names);
        }