Пример #1
0
        //define method attribute, increase scope, and check body
        public void VisitNode(MethodDeclaration node)
        {
            //VisitChildren(node);
            var          typeVisitor = new TypeVisitor();
            AbstractNode firstChild  = node.Child;

            var returnTypeNode = firstChild.Sib;

            returnTypeNode.Accept(typeVisitor);

            var attr = new MethodAttributes("Method");

            attr.returnType = CreateTypeDiscriptor(typeVisitor.type).type;
            var MethodSig = returnTypeNode.Sib;

            MethodSig.Child.Accept(this);  // visiting first child to get the name of method
            var methodName = this.name;

            attr.methodName         = methodName;
            Console.ForegroundColor = ConsoleColor.Green;
            Console.WriteLine("< In MethodDeclaration.VisitNode for " + node.ClassName() + " > " + name + " " + attr.returnType);
            Console.ResetColor();
            table.enter(name, attr);
            //table.PrintTable();
            SetCurrentMethod(attr);
            // Visiting Paramter of methods
            if (MethodSig.Child.Sib != null)
            {
                MethodSig.Child.Sib.Accept(this);
            }

            var methodBodyNode = MethodSig.Sib;

            methodBodyNode.Accept(this);
        }
        //define method attribute, increase scope, and check body
        public void VisitNode(MethodDeclaration node)
        {
            Console.ForegroundColor = ConsoleColor.Green;
            Console.WriteLine("< In TopDeclVisitor.VisitNode for " + node.ClassName() + " >");
            Console.ResetColor();

            VisitChildren(node);
        }