Exemplo n.º 1
0
            private void _UpdateAliases(string variableName, Expression value)
            {
                State.ExceptWith(State.Where(alias => alias.Source.Equals(variableName)).ToImmutableHashSet());

                string aliasedVariableName = null;

                switch (value)
                {
                case VariableExpression variable:
                    aliasedVariableName = variable.Name;
                    break;

                case InvocationExpression invocation:
                    if (_interprocedural)
                    {
                        // As the analysis is rather imprecise in terms of method invocations, any available
                        // instance of the result identifier contains exactly the same information.
                        aliasedVariableName = InvocationExpression.GetResultIdentifier(invocation.Name);
                    }
                    break;
                }

                if (aliasedVariableName == null)
                {
                    State.Add(new VariableAlias(variableName, value));
                    return;
                }

                var aliases = State.Where(alias => alias.Source.Equals(aliasedVariableName))
                              .Select(alias => new VariableAlias(variableName, alias.Target))
                              .ToImmutableHashSet();

                State.UnionWith(aliases);
            }
Exemplo n.º 2
0
 private static IEnumerable <Instruction> _CreateResultDeclaration(MethodDeclarationSyntax method)
 {
     if (method.ReturnType is PredefinedTypeSyntax type && type.Keyword.IsKind(SyntaxKind.VoidKeyword))
     {
         return(Enumerable.Empty <Instruction>());
     }
     return(new[] { new Declaration(InvocationExpression.GetResultIdentifier(method.Identifier.Text)) });
 }
Exemplo n.º 3
0
 private Assignment _CreateResultAssignment(Expression result)
 {
     return(new Assignment(new VariableExpression(InvocationExpression.GetResultIdentifier(_methodName)), result));
 }