/// <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); }
/// <inheritdoc/> public virtual ParseNode Visit(MethodDeclarationParseNode d) { d.Signature.Visit(this); foreach (var p in d.Body) { p.Visit(this); } return(d); }
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); }
/// <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)); }
/// <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); }