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); }
public Impl(string unnamedParameterRenamePrefix) { _unnamedParameterRenamePrefix = unnamedParameterRenamePrefix; _trie = new SyntaxTrie(); _trie.Add(unnamedParameterRenamePrefix); _environment = new Stack <Dictionary <ParameterExpression, ParameterExpression> >(); }