Ejemplo n.º 1
0
        // Constructor call
        public override IMember CreateInstance(IArgumentSet args)
        {
            var builtins = DeclaringModule.Interpreter.ModuleResolution.BuiltinsModule;

            // Specializations
            switch (Name)
            {
            case "list":
                return(PythonCollectionType.CreateList(builtins, args));

            case "dict": {
                // self, then contents
                var contents = args.Values <IMember>().Skip(1).FirstOrDefault();
                return(new PythonDictionary(builtins, contents));
            }

            case "tuple": {
                var contents = args.Values <IMember>();
                return(PythonCollectionType.CreateTuple(builtins, contents));
            }
            }

            // Metaclasses return type, not instance.
            if (Bases.MaybeEnumerate().Any(b => b.Name == "type" && b.DeclaringModule.ModuleType == ModuleType.Builtins))
            {
                return(this);
            }

            return(new PythonInstance(this));
        }
        public override IMember Index(IPythonInstance instance, IArgumentSet args)
        {
            var defaultReturn = base.Index(instance, args);
            var fromBases     = Bases
                                .MaybeEnumerate()
                                .Select(b => b.Index(instance, args))
                                .Except(new[] { defaultReturn, UnknownType })
                                .FirstOrDefault();

            return(fromBases ?? defaultReturn);
        }