protected TypeDeclarationStatementNodeBase(string name, FormalParameterNode[] parameters, AttributeNode[] attributes)
            : base(name)
        {
            if (parameters == null)
                ThrowHelper.ThrowArgumentNullException(() => parameters);

            if (attributes == null)
                ThrowHelper.ThrowArgumentNullException(() => attributes);

            Parameters = parameters.ToList();
            Attributes = attributes.ToList();

            AddChildren(Parameters);
            AddChildren(Attributes);
        }
        public VariableDeclarationStatementNode(string name, TypeNameNode variableType, ExpressionNode initialValue, AttributeNode[] attributes)
        {
            if (name == null)
                ThrowHelper.ThrowArgumentNullException(() => name);

            if (variableType == null)
                ThrowHelper.ThrowArgumentNullException(() => variableType);

            if (initialValue == null)
                ThrowHelper.ThrowArgumentNullException(() => initialValue);

            InitialValue = initialValue;
            Identifier = new IdentifierExpressionNode(name, null);
            VariableType = variableType;
            Attributes = attributes.ToList();

            AddChildren(Identifier, VariableType, InitialValue);
            AddChildren(Attributes);
        }