private static T Parse <T>(
                ReadOnlySpan <byte> sourceText,
                ParseSyntax <T> parse,
                bool moveNext = true)
                where T : ISyntaxNode
            {
                var parser = new Utf8GraphQLParser(sourceText);

                if (moveNext)
                {
                    parser.MoveNext();
                }
                return(parse(parser));
            }
            private static unsafe T Parse <T>(
                string sourceText,
                ParseSyntax <T> parse,
                bool moveNext = true)
                where T : ISyntaxNode
            {
                if (string.IsNullOrEmpty(sourceText))
                {
                    throw new ArgumentException(
                              LangResources.SourceText_Empty,
                              nameof(sourceText));
                }

                int  length        = checked (sourceText.Length * 4);
                bool useStackalloc =
                    length <= GraphQLConstants.StackallocThreshold;

                byte[]? source = null;

                Span <byte> sourceSpan = useStackalloc
                    ? stackalloc byte[length]
                    : (source = ArrayPool <byte> .Shared.Rent(length));

                try
                {
                    ConvertToBytes(sourceText, ref sourceSpan);
                    var parser = new Utf8GraphQLParser(sourceSpan);
                    if (moveNext)
                    {
                        parser.MoveNext();
                    }
                    return(parse(parser));
                }
                finally
                {
                    if (source != null)
                    {
                        sourceSpan.Clear();
                        ArrayPool <byte> .Shared.Return(source);
                    }
                }
            }