public static IMember CreateMember(MemberModel model, ModuleFactory mf, IGlobalScope gs, IPythonType declaringType) { var unkType = mf.Module.Interpreter.UnknownType; switch (model) { case ClassModel cm: return(new PythonLazyClassType(cm, mf, gs, declaringType)); case FunctionModel fm: return(new PythonLazyFunctionType(fm, mf, gs, declaringType)); case PropertyModel pm: return(new PythonLazyPropertyType(pm, mf, gs, declaringType)); case NamedTupleModel ntm: var itemTypes = ntm.ItemTypes.Select(n => mf.ConstructType(n) ?? unkType).ToArray(); return(new NamedTupleType(ntm.Name, ntm.ItemNames, itemTypes, mf.Module, ntm.IndexSpan.ToSpan())); case TypeVarModel tvm: return(new GenericTypeParameter(tvm.Name, mf.Module, tvm.Constraints.Select(n => mf.ConstructType(n) ?? unkType).ToArray(), mf.ConstructType(tvm.Bound), tvm.Covariant, tvm.Contravariant, default)); case VariableModel vm: var m = mf.ConstructMember(vm.Value) ?? unkType; return(new Variable(vm.Name, m, VariableSource.Declaration, new Location(mf.Module, vm.IndexSpan?.ToSpan() ?? default))); } Debug.Fail("Unsupported model type."); return(null); }
public override IMember Create(ModuleFactory mf, IPythonType declaringType, IGlobalScope gs) { if (_cls != null) { return(_cls); } _cls = new PythonClassType(Name, new Location(mf.Module, IndexSpan.ToSpan())); var bases = CreateBases(mf, gs); _cls.SetBases(bases); _cls.SetDocumentation(Documentation); if (GenericParameterValues.Length > 0) { _cls.StoreGenericParameters( _cls, _cls.GenericParameters.Keys.ToArray(), GenericParameterValues.ToDictionary( k => _cls.GenericParameters.Keys.First(x => x == k.Name), v => mf.ConstructType(v.Type) ) ); } var all = Classes.Concat <MemberModel>(Properties).Concat(Methods).Concat(Fields); foreach (var m in all) { _cls.AddMember(m.Name, m.Create(mf, _cls, gs), false); } return(_cls); }
public override IMember Create(ModuleFactory mf, IPythonType declaringType, IGlobalScope gs) { var bound = mf.ConstructType(Bound); bound = bound.IsUnknown() ? null : bound; return(new GenericTypeParameter(Name, mf.Module, Constraints.Select(mf.ConstructType).ToArray(), bound, Covariant, Contravariant, default)); }
protected override void EnsureContent(ClassModel cm) { var bases = CreateBases(cm, ModuleFactory, GlobalScope); _cls.SetBases(bases); if (cm.GenericParameterValues.Length > 0) { _cls.StoreGenericParameters( _cls, _cls.GenericParameters.Keys.ToArray(), cm.GenericParameterValues.ToDictionary( k => _cls.GenericParameters.Keys.First(x => x == k.Name), v => ModuleFactory.ConstructType(v.Type) ) ); } foreach (var model in GetMemberModels(cm)) { _cls.AddMember(model.Name, MemberFactory.CreateMember(model, ModuleFactory, GlobalScope, _cls), false); } _cls.AddMember("__class__", _cls, true); }
private IParameterInfo ConstructParameter(ModuleFactory mf, ParameterModel pm) => new ParameterInfo(pm.Name, mf.ConstructType(pm.Type), pm.Kind, mf.ConstructMember(pm.DefaultValue));