/// <summary>
        /// Parse a <see cref="LineDirective"/>.
        /// </summary>
        public LineDirective(Parser parser, CodeObject parent)
            : base(parser, parent)
        {
            Token token = parser.NextTokenSameLine(false);  // Move past the keyword

            if (token != null)
            {
                // Parse the directive type
                _directiveType = ParseLineDirectiveType(parser.TokenText);
                if (_directiveType != LineDirectiveType.Number)
                {
                    parser.NextToken();  // Move past the directive type
                }
                else
                {
                    // Parse the line number
                    if (!int.TryParse(token.Text, out _number))
                    {
                        _number = int.MaxValue;
                        parser.AttachMessage(this, "Integer value expected", token);
                    }
                    token = parser.NextTokenSameLine(false);  // Move past the number
                    if (token != null)
                    {
                        // Get the filename
                        _fileName = token.Text;
                        parser.NextToken();  // Move past filename
                    }
                }
            }
            MoveEOLComment(parser.LastToken);
        }
        /// <summary>
        /// Format a <see cref="LineDirectiveType"/> as a string.
        /// </summary>
        public static string LineDirectiveTypeToString(LineDirectiveType directiveType)
        {
            switch (directiveType)
            {
            case LineDirectiveType.Default: return(ParseTokenDefault);

            case LineDirectiveType.Hidden:  return(ParseTokenHidden);
            }
            return("");
        }
 /// <summary>
 /// Create a <see cref="LineDirective"/> with the specified type.
 /// </summary>
 public LineDirective(LineDirectiveType directiveType)
 {
     _directiveType = directiveType;
 }