/// <summary>
        /// Pushes the parameters of a new declaration site into a new scope in the symbol table.
        /// </summary>
        /// <param name="parameters">Parameters of the declaration site.</param>
        protected override void Push(IEnumerable <ParameterExpression> parameters)
        {
            if (parameters == null)
            {
                throw new ArgumentNullException(nameof(parameters));
            }

            _symbolTable.Push();

            foreach (var parameter in parameters)
            {
                _symbolTable.Add(parameter, GetState(parameter));
            }
        }
        private void PushCore(IEnumerable <KeyValuePair <ParameterExpression, TState> > scope)
        {
            _symbolTable.Push();

            foreach (var entry in scope)
            {
                _symbolTable.Add(entry.Key, entry.Value);
            }
        }