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); }
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); }
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); }
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); }