private DumpedShaderInfo DumpShader()
        {
            DumpedShaderInfo result = new DumpedShaderInfo();

            string text = Span.ToString();
            var lines = text.Split(new string[] { "\r\n", "\n" }, StringSplitOptions.None);

            var lineCount = lines.Length;
            var sparkLineRanges = new SourceRange[lineCount];
            var lineErrorMasks = new string[lineCount][];
            var hlslLineRemap = new int[lineCount];

            var rangeStack = new Stack<SourceRange>();
            rangeStack.Push(_defaultRange);

            var writer = new System.IO.StringWriter();

            var maskedErrors = new Stack<string>();

            int remapLineNumber = 1;
            for (int ii = 0; ii < lineCount; ++ii)
            {
                var line = lines[ii];
                var lineNumber = ii + 1;

                hlslLineRemap[ii] = remapLineNumber;
                if (line.StartsWith(startSourceRange))
                {
                    var rangeStr = line.Substring(startSourceRange.Length);
                    SourceRange range = SourceRange.Parse(rangeStr);
                    rangeStack.Push(range);
                }
                else if (line.StartsWith(endSourceRange))
                {
                    rangeStack.Pop();
                }
                else if (line.StartsWith(PushErrorMaskString))
                {
                    var errorStr = line.Substring(PushErrorMaskString.Length);
                    maskedErrors.Push(errorStr.Trim());
                }
                else if (line.StartsWith(PopErrorMaskString))
                {
                    maskedErrors.Pop();
                }
                else
                {
                    if (writer != null)
                        writer.WriteLine(lines[ii]);
                    remapLineNumber++;
                }
                sparkLineRanges[ii] = rangeStack.Peek();
                lineErrorMasks[ii] = maskedErrors.ToArray();
            }

            result.hlslLineRemap = hlslLineRemap;
            result.sparkLineRanges = sparkLineRanges;
            result.strippedText = writer.ToString();
            result.lineErrorMasks = lineErrorMasks;

            return result;
        }
        private DumpedFileInfo DumpFile(DumpedShaderInfo shader, string profile)
        {
            DumpedFileInfo result = new DumpedFileInfo();

            var baseName = string.Format(
                "{0}_{1}_{2}",
                _defaultRange.fileName,
                _shaderClassName,
                profile);
            baseName = baseName.Replace('.', '_');
            var path = baseName + ".hlsl";

            var writer = new System.IO.StreamWriter(path);
            writer.Write(shader.strippedText);
            writer.Close();

            result.path = path;

            return result;
        }