/// <summary>
        /// Adds a child declaration space.
        /// </summary>
        /// <param name="child">The <see cref="LocalDeclarationSpace"/> to add.</param>
        public void AddChildSpace(LocalDeclarationSpace child)
        {
            if (child == null)
            {
                throw new ArgumentNullException("child");
            }
            if (Children.Contains(child))
            {
                throw new InvalidOperationException("the child was already added");
            }

            Children.Add(child);
            child.Parent = this;
        }
        void VisitNewDeclarationSpace(AstNode node)
        {
            var oldDeclarationSpace = currentDeclarationSpace;

            currentDeclarationSpace = new LocalDeclarationSpace();
            if (oldDeclarationSpace != null)
            {
                oldDeclarationSpace.AddChildSpace(currentDeclarationSpace);
            }

            VisitChildren(node);

            nodeDeclarationSpaces.Add(node, currentDeclarationSpace);
            currentDeclarationSpace = oldDeclarationSpace;
        }