private ISet <VariableAlias> _CollectAliases(string source) { var semanticModel = _documentFactory.CreateSemanticModel(source); var forStatement = semanticModel.SyntaxTree.GetRoot().DescendantNodes().OfType <ForStatementSyntax>().Single(); var code = CodeFactory.Create(forStatement, semanticModel); var variableAccesses = VariableAccesses.Collect(code); var cfg = ControlFlowGraphFactory.Create(code); return(ExternalArrayAliasCollector.Collect(semanticModel, forStatement, variableAccesses)); }
private IEnumerable <VariableAlias> _GetAliasesAtLoopEntry(TLoopStatementSyntax loopStatement, VariableAccesses variableAccesses) { // TODO maybe use a different Expression to setup the input aliases instead of variables. This might cause trouble when forgetting this situation in further changes. var filtered = variableAccesses.DeclaredVariables .Concat(variableAccesses.ReadArrays.Concat(variableAccesses.WrittenArrays).Select(array => array.Name)) .ToImmutableHashSet(); var variables = variableAccesses.ReadVariables .Union(variableAccesses.WrittenVariables) .Except(filtered) .Select(variableName => new VariableAlias(variableName, new VariableExpression(variableName))) .Concat(ExternalArrayAliasCollector.Collect(_semanticModel, loopStatement, variableAccesses)) .ToImmutableHashSet(); return(variables); }