1
0
mirror of https://github.com/golang/go synced 2024-11-12 04:30:22 -07:00

cmd/compile: lazily initialize litbuf

Instead of eagerly creating strings like "literal 2.01" for every
lexed number in case we need to mention it in an error message, defer
this work to (*parser).syntax_error.

name      old allocs/op  new allocs/op  delta
Template      482k ± 0%      482k ± 0%  -0.12%   (p=0.000 n=9+10)
GoTypes      1.35M ± 0%     1.35M ± 0%  -0.04%  (p=0.015 n=10+10)
Compiler     5.45M ± 0%     5.44M ± 0%  -0.12%    (p=0.000 n=9+8)

Change-Id: I333b3c80e583864914412fb38f8c0b7f1d8c8821
Reviewed-on: https://go-review.googlesource.com/22480
Run-TryBot: Matthew Dempsky <mdempsky@google.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
This commit is contained in:
Matthew Dempsky 2016-04-26 10:55:32 -07:00
parent 19912e1d0a
commit 8d075beeef
2 changed files with 4 additions and 1 deletions

View File

@ -755,7 +755,7 @@ func (l *lexer) number(c rune) {
}
done:
litbuf = "literal " + str
litbuf = "" // lazily initialized in (*parser).syntax_error
l.nlsemi = true
l.tok = LLITERAL
}

View File

@ -102,6 +102,9 @@ func (p *parser) syntax_error(msg string) {
tok = "name"
}
case LLITERAL:
if litbuf == "" {
litbuf = "literal " + lexbuf.String()
}
tok = litbuf
case LOPER:
tok = goopnames[p.op]