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); } } }