示例#1
0
        /// <inheritdoc />
        public Node Visit(MethodDeclarationParseNode d)
        {
            var ret = new MethodNode(d.Token, d);
            var sig = (SignatureNode)d.Signature.Visit(this);

            ret.Signature   = sig;
            ret.Annotations = sig.Annotations;
            string name = sig.Name;

            ret.Confidential = (d.Signature.Annotations != null &&
                                d.Signature.Annotations.HasAnnotation("confidential"));
            ret.Abstract = (d.Signature.Annotations != null &&
                            d.Signature.Annotations.HasAnnotation("abstract"));
            foreach (ParseNode p in d.Body)
            {
                if (!(p is CommentParseNode))
                {
                    ret.Add(p.Visit(this));
                }
            }
            // Indicate whether this method returns a fresh object
            ret.Fresh = (d.Body.Count > 0 && d.Body[d.Body.Count - 1] is
                         ObjectParseNode);
            return(ret);
        }
示例#2
0
 /// <inheritdoc/>
 public virtual ParseNode Visit(MethodDeclarationParseNode d)
 {
     d.Signature.Visit(this);
     foreach (var p in d.Body)
     {
         p.Visit(this);
     }
     return(d);
 }
示例#3
0
        public XmlElement Visit(MethodDeclarationParseNode d)
        {
            var el = makeNode(d, "method-declaration");

            addProperty(el, "signature", d.Signature);
            addProperty(el, "returntype", d.ReturnType);
            addProperty(el, "body", d.Body);
            return(el);
        }
示例#4
0
        /// <inheritdoc />
        public Node Visit(TypeStatementParseNode tspn)
        {
            var meth = new MethodDeclarationParseNode(tspn.Token);
            var spn  = new SignatureParseNode(tspn.Token);
            var spp  = new OrdinarySignaturePartParseNode((IdentifierParseNode)tspn.BaseName);

            spp.GenericParameters = tspn.GenericParameters;
            spn.AddPart(spp);
            meth.Signature = spn;
            var tpn = tspn.Body as InterfaceParseNode;

            if (tpn != null)
            {
                tpn.Name = ((IdentifierParseNode)tspn.BaseName).Name;
            }
            meth.Body.Add(tspn.Body);
            return(meth.Visit(this));
        }
示例#5
0
        /// <inheritdoc />
        public Node Visit(TraitDeclarationParseNode d)
        {
            var constructor = new MethodDeclarationParseNode(d.Token);

            constructor.Signature = d.Signature;
            var instanceObj = new ObjectParseNode(d.Token);

            instanceObj.Body = d.Body;
            constructor.Body.Add(instanceObj);
            var ret = (MethodNode)constructor.Visit(this);

            // Traits are public by default.
            // The next line makes them public always; it is not
            // possible to have a confidential trait. It is unclear
            // whether that should be permitted or not.
            ret.Confidential = false;
            return(ret);
        }