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);
        }
Exemplo n.º 2
0
        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);
        }
Exemplo n.º 3
0
        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));
        }
Exemplo n.º 4
0
        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);
        }
Exemplo n.º 5
0
 private IParameterInfo ConstructParameter(ModuleFactory mf, ParameterModel pm)
 => new ParameterInfo(pm.Name, mf.ConstructType(pm.Type), pm.Kind, mf.ConstructMember(pm.DefaultValue));