extendPath() public méthode

public extendPath ( Analyzer analyzer, string pathname ) : string
analyzer Analyzer
pathname string
Résultat string
Exemple #1
0
        public DataType VisitClass(ClassDef c)
        {
            var             path      = scope.extendPath(analyzer, c.name.Name);
            ClassType       classType = new ClassType(c.name.Name, scope, path);
            List <DataType> baseTypes = new List <DataType>();

            foreach (var @base in c.args)
            {
                DataType baseType = @base.Accept(this);
                switch (baseType)
                {
                case ClassType _:
                    classType.addSuper(baseType);
                    break;

                case UnionType ut:
                    foreach (DataType parent in ut.types)
                    {
                        classType.addSuper(parent);
                    }
                    break;

                default:
                    analyzer.putProblem(@base, @base + " is not a class");
                    break;
                }
                baseTypes.Add(baseType);
            }

            // XXX: Not sure if we should add "bases", "name" and "dict" here. They
            // must be added _somewhere_ but I'm just not sure if it should be HERE.
            addSpecialAttribute(classType.Table, "__bases__", analyzer.TypeFactory.CreateTuple(baseTypes.ToArray()));
            addSpecialAttribute(classType.Table, "__name__", DataType.Str);
            addSpecialAttribute(classType.Table, "__dict__",
                                analyzer.TypeFactory.CreateDict(DataType.Str, DataType.Unknown));
            addSpecialAttribute(classType.Table, "__module__", DataType.Str);
            addSpecialAttribute(classType.Table, "__doc__", DataType.Str);

            // Bind ClassType to name here before resolving the body because the
            // methods need this type as self.
            scope.Bind(analyzer, c.name, classType, BindingKind.CLASS);
            if (c.body != null)
            {
                var sOld = this.scope;
                this.scope = classType.Table;
                c.body.Accept(this);
                this.scope = sOld;
            }
            return(DataType.Cont);
        }
Exemple #2
0
 ClassType newClass(string name, State table,
                    ClassType superClass, params ClassType[] moreSupers)
 {
     var path = table.extendPath(analyzer, name);
     ClassType t = new ClassType(name, table, path, superClass);
     foreach (ClassType c in moreSupers)
     {
         t.addSuper(c);
     }
     return t;
 }