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));
        }
Пример #2
0
            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);
            }