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); }
/// <summary> /// Creates a new type for a built-in exception which is the root concrete type. /// </summary> private static PythonType /*!*/ CreateSubType(PythonType /*!*/ baseType, Type /*!*/ concreteType, Func <string, Exception, Exception> exceptionMaker) { Assert.NotNull(baseType, concreteType); PythonType myType = DynamicHelpers.GetPythonTypeFromType(concreteType); myType.ResolutionOrder = Mro.Calculate(myType, new PythonType[] { baseType }); myType.BaseTypes = new PythonType[] { baseType }; myType.HasDictionary = true; myType._makeException = exceptionMaker; return(myType); }
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); }
public override IMember GetMember(string name) { IMember member; lock (_lock) { if (Members.TryGetValue(name, out 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.Interpreter, LocationInfo.Empty, Mro) : UnknownType); case "__dict__": return(is3x ? DeclaringModule.Interpreter.GetBuiltinType(BuiltinTypeId.Dict) : UnknownType); case @"__weakref__": return(is3x ? DeclaringModule.Interpreter.GetBuiltinType(BuiltinTypeId.Object) : UnknownType); } } if (Push(this)) { try { foreach (var m in Mro.Reverse()) { if (m == this) { return(member); } member = member ?? m.GetMember(name); } } finally { Pop(); } } return(null); }
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, (context as IPythonInterpreter)?.GetBuiltinType(BuiltinTypeId.TupleIterator) ); return(member); } } if (Push()) { try { foreach (var m in Mro.Reverse()) { if (m == this) { return(member); } member = member ?? m.GetMember(context, name); } } finally { Pop(); } } return(null); }
public override IMember GetMember(string name) { // Push/Pop should be lock protected. 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.Interpreter, 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) { foreach (var m in Mro.Reverse()) { if (m == this) { return(member); } member = member ?? m.GetMember(name); } } return(null); } }