Skip to content

Commit

Permalink
Reuse a single StringBuilder alloc in Tokener
Browse files Browse the repository at this point in the history
  • Loading branch information
atifaziz committed Jan 31, 2018
1 parent 44609ad commit 56df984
Showing 1 changed file with 4 additions and 3 deletions.
7 changes: 4 additions & 3 deletions src/Tokener.cs
Original file line number Diff line number Diff line change
Expand Up @@ -52,6 +52,7 @@ public static IEnumerable<Token> Tokenize(TextReader reader)
public static IEnumerable<Token> Tokenize(string input)
{
var reader = new Reader(input ?? string.Empty);
StringBuilder sb = null;

while (reader.Read() is char ch)
{
Expand Down Expand Up @@ -156,7 +157,7 @@ public static IEnumerable<Token> Tokenize(string input)
// Single- or double-quoted strings
//
case '\"':
case '\'': yield return ParseString(reader, /* quote */ ch); break;
case '\'': yield return ParseString(reader, /* quote */ ch, ref sb); break;

default:
throw new FormatException(string.Format("Invalid character at position {0}.", reader.Position));
Expand Down Expand Up @@ -186,7 +187,7 @@ static string ParseHash(Reader reader)
return text;
}

static Token ParseString(Reader reader, char quote)
static Token ParseString(Reader reader, char quote, ref StringBuilder sb)
{
Debug.Assert(reader != null);

Expand All @@ -204,7 +205,7 @@ static Token ParseString(Reader reader, char quote)
var strpos = reader.Position;
reader.MarkFromNext(); // skipping quote

StringBuilder sb = null;
sb?.Clear();

for (var done = false; !done;)
{
Expand Down

0 comments on commit 56df984

Please sign in to comment.