Пример #1
0
        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"));
                }
            }
        }
Пример #2
0
 private static IEnumerable <AstToken> GetUsages(DeclRefExprProperties saidMsg, AstToken methodDecl)
 {
     return(methodDecl.VisitEnumerable
            (
                x => x.unknownName == "DeclRefExpr" && new DeclRefExprProperties(x).Equals(saidMsg)
            ));
 }
Пример #3
0
        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}");
                }
            }
        }