Skip to content

Commit 03015d6

Browse files
committed
Reduce GC pressure caused by scanner temporary strings
1 parent f9c777d commit 03015d6

File tree

1 file changed

+8
-8
lines changed

1 file changed

+8
-8
lines changed

internal/scanner/scanner.go

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1504,12 +1504,12 @@ func (s *Scanner) scanTemplateAndSetTokenValue(shouldEmitInvalidEscapeError bool
15041504
startedWithBacktick := s.char() == '`'
15051505
s.pos++
15061506
start := s.pos
1507-
contents := ""
1507+
b := strings.Builder{}
15081508
var token ast.Kind
15091509
for {
15101510
ch := s.char()
15111511
if ch < 0 || ch == '`' {
1512-
contents += s.text[start:s.pos]
1512+
b.WriteString(s.text[start:s.pos])
15131513
if ch == '`' {
15141514
s.pos++
15151515
} else {
@@ -1520,32 +1520,32 @@ func (s *Scanner) scanTemplateAndSetTokenValue(shouldEmitInvalidEscapeError bool
15201520
break
15211521
}
15221522
if ch == '$' && s.charAt(1) == '{' {
1523-
contents += s.text[start:s.pos]
1523+
b.WriteString(s.text[start:s.pos])
15241524
s.pos += 2
15251525
token = core.IfElse(startedWithBacktick, ast.KindTemplateHead, ast.KindTemplateMiddle)
15261526
break
15271527
}
15281528
if ch == '\\' {
1529-
contents += s.text[start:s.pos]
1530-
contents += s.scanEscapeSequence(EscapeSequenceScanningFlagsString | core.IfElse(shouldEmitInvalidEscapeError, EscapeSequenceScanningFlagsReportErrors, 0))
1529+
b.WriteString(s.text[start:s.pos])
1530+
b.WriteString(s.scanEscapeSequence(EscapeSequenceScanningFlagsString | core.IfElse(shouldEmitInvalidEscapeError, EscapeSequenceScanningFlagsReportErrors, 0)))
15311531
start = s.pos
15321532
continue
15331533
}
15341534
// Speculated ECMAScript 6 Spec 11.8.6.1:
15351535
// <CR><LF> and <CR> LineTerminatorSequences are normalized to <LF> for Template Values
15361536
if ch == '\r' {
1537-
contents += s.text[start:s.pos]
1537+
b.WriteString(s.text[start:s.pos])
15381538
s.pos++
15391539
if s.char() == '\n' {
15401540
s.pos++
15411541
}
1542-
contents += "\n"
1542+
b.WriteString("\n")
15431543
start = s.pos
15441544
continue
15451545
}
15461546
s.pos++
15471547
}
1548-
s.tokenValue = contents
1548+
s.tokenValue = b.String()
15491549
return token
15501550
}
15511551

0 commit comments

Comments
 (0)