private static IEnumerable <DeclRefExprProperties> GetVariableThatGetsSaid(AstToken methodDecl) { var memberExpressions = methodDecl.VisitEnumerable ( x => x.unknownName == "MemberExpr" && x.parent.unknownName == "CXXMemberCallExpr" && x.properties.Contains("->Say") ); foreach (var memberExpression in memberExpressions) { var otherchildren = memberExpression.parent .VisitEnumerable(x => x != memberExpression) .Where(x => x.unknownName == "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.unknownName == "DeclRefExpr" && new DeclRefExprProperties(x).Equals(saidMsg) )); }
private static void ProcessSetInstruction(AstToken methodDecl) { var setId = methodDecl.VisitEnumerable(x => x.unknownName == "MemberExpr" && x.properties.Contains(".SetID")).FirstOrDefault(); if (setId != null) { var literals = setId.parent.VisitEnumerable(x => x.unknownName == "BinaryOperator"); foreach (var literal in literals) { var exp = literal.AsExpression(); Console.WriteLine($"Set: {exp}"); } } }