private static IEnumerable <DeclRefExprProperties> GetVariableThatGetsSaid(AstToken methodDecl) { var memberExpressions = methodDecl.VisitEnumerable ( x => x.Type == AstType.MemberExpr && x.parent.Type == AstType.CXXMemberCallExpr && x.properties.Contains("->Say") ); foreach (var memberExpression in memberExpressions) { var otherchildren = memberExpression.parent .VisitEnumerable(x => x != memberExpression) .Where(x => x.Type == AstType.DeclRefExpr) .Select(x => new DeclRefExprProperties(x)) .ToList() ; //Just take the last one if (otherchildren.Count == 1) { yield return(otherchildren.FirstOrDefault()); } else { //Multiple (path: pSession->Say( &vMSG )) yield return(otherchildren.FirstOrDefault(x => x.Token.properties[0] == "CPacket")); } } }
private static IEnumerable <AstToken> GetUsages(DeclRefExprProperties saidMsg, AstToken methodDecl) { return(methodDecl.VisitEnumerable ( x => x.Type == AstType.DeclRefExpr && new DeclRefExprProperties(x).Equals(saidMsg) )); }