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); }
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)) }); }
private Assignment _CreateResultAssignment(Expression result) { return(new Assignment(new VariableExpression(InvocationExpression.GetResultIdentifier(_methodName)), result)); }