Inheritance: PythonContainerNode
Beispiel #1
0
        void BuildFunction(XmlElement element)
        {
            PythonFunction pyFunc;

            Module.Functions.Add(pyFunc = new PythonFunction()
            {
                Name   = element.GetAttribute("name"),
                Region = GetDomRegion(element),
            });

            foreach (XmlElement child in element)
            {
                if (child.LocalName == "doc")
                {
                    pyFunc.Documentation = element.InnerText.Trim();
                }
                else if (child.LocalName == "local")
                {
                    BuildLocal(child, pyFunc);
                }
                else if (child.LocalName == "argument")
                {
                    BuildArgument(child, pyFunc);
                }
            }
        }
Beispiel #2
0
 void BuildLocal(XmlElement element, PythonFunction pyFunc)
 {
     pyFunc.Locals.Add(new PythonLocal()
     {
         Name   = element.GetAttribute("name"),
         Region = GetDomRegion(element)
     });
 }
Beispiel #3
0
 void BuildArgument(XmlElement element, PythonFunction pyFunc)
 {
     pyFunc.Arguments.Add(new PythonArgument()
     {
         Name   = element.GetAttribute("name"),
         Region = pyFunc.Region,
     });
 }
 void BuildLocal(XmlElement element, PythonFunction pyFunc)
 {
     pyFunc.Locals.Add (new PythonLocal () {
         Name   = element.GetAttribute ("name"),
         Region = GetDomRegion (element)
     });
 }
        void BuildFunction(XmlElement element, PythonClass pyClass)
        {
            PythonFunction pyFunc;

            pyClass.Functions.Add (pyFunc = new PythonFunction () {
                Name   = element.GetAttribute ("name"),
                Region = GetDomRegion (element),
            });

            foreach (XmlElement child in element)
                if (child.LocalName == "doc")
                    pyFunc.Documentation = element.InnerText.Trim ();
                else if (child.LocalName == "argument")
                    BuildArgument (child, pyFunc);
        }
        void BuildFunction(XmlElement element)
        {
            PythonFunction pyFunc;

            Module.Functions.Add (pyFunc = new PythonFunction () {
                Name   = element.GetAttribute ("name"),
                Region = GetDomRegion (element),
            });

            foreach (XmlElement child in element)
            {
                if (child.LocalName == "doc")
                {
                    pyFunc.Documentation = element.InnerText.Trim ();
                }
                else if (child.LocalName == "local")
                {
                    BuildLocal (child, pyFunc);
                }
                else if (child.LocalName == "argument")
                {
                    BuildArgument (child, pyFunc);
                }
            }
        }
 void BuildArgument(XmlElement element, PythonFunction pyFunc)
 {
     pyFunc.Arguments.Add (new PythonArgument () {
         Name       = element.GetAttribute("name"),
         Region     = pyFunc.Region,
     });
 }
        // We only try to add simple member expr, such "self.something",
        // which are most likely all the possibilites to declare/initialize
        // a class attribute (field).
        static bool IsSelfAttr(PythonFunction func, MemberExpression expr, out string attrName)
        {
            attrName = null;

            // NameExpression -> Simple name access
            var target = expr.Target as NameExpression;
            if (target == null)
                return false;

            if (func.Arguments.Count == 0 ||
                func.Arguments [0].Name != target.Name)
                return false;

            attrName = expr.Name; // self.Name
            return true;
        }
        public override bool Walk(FunctionDefinition node)
        {
            if (node.IsLambda)
                return base.Walk (node);

            var function = new PythonFunction () {
                Name = node.Name,
                Region = GetDomRegion (node),
                Documentation = node.Documentation
            };

            var parameters = node.Parameters;
            for (int i = 0; i < parameters.Count; i++) {
                var param = parameters [i];

                string name = param.Name;
                if (param.IsList)
                    name = "*" + name;
                else if (param.IsDictionary)
                    name = "**" + name;

                var p = new PythonArgument () {
                    Name = name,
                    Position = i
                };

                function.Arguments.Add (p);
            }

            containers.Peek ().Functions.Add (function);
            containers.Push (function);

            return base.Walk (node);
        }