Esempio n. 1
0
            protected override void Push(IEnumerable <ParameterExpression> parameters)
            {
                var newScope = new Dictionary <ParameterExpression, ParameterExpression>();

                foreach (var parameter in parameters)
                {
                    var originalName = parameter.Name;
                    var newName      = originalName;

                    if (string.IsNullOrWhiteSpace(originalName))
                    {
                        originalName = _unnamedParameterRenamePrefix;
                        newName      = parameter.ToString();
                    }

                    // TODO: This can be optimized by providing prefix matching functionality in the syntax trie.
                    var i = 0;
                    while (_trie.Contains(newName))
                    {
                        newName = originalName + i++;
                    }

                    var newParameter = parameter;

                    if (newName != originalName)
                    {
                        newParameter = Expression.Parameter(parameter.Type, newName);
                    }

                    newScope[parameter] = newParameter;
                    _trie.Add(newName);
                }

                _environment.Push(newScope);
            }
Esempio n. 2
0
            public Impl(string unnamedParameterRenamePrefix)
            {
                _unnamedParameterRenamePrefix = unnamedParameterRenamePrefix;

                _trie = new SyntaxTrie();
                _trie.Add(unnamedParameterRenamePrefix);

                _environment = new Stack <Dictionary <ParameterExpression, ParameterExpression> >();
            }