Commit 8d075bee authored by Matthew Dempsky's avatar Matthew Dempsky

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: 's avatarBrad Fitzpatrick <bradfitz@golang.org>
parent 19912e1d
...@@ -755,7 +755,7 @@ func (l *lexer) number(c rune) { ...@@ -755,7 +755,7 @@ func (l *lexer) number(c rune) {
} }
done: done:
litbuf = "literal " + str litbuf = "" // lazily initialized in (*parser).syntax_error
l.nlsemi = true l.nlsemi = true
l.tok = LLITERAL l.tok = LLITERAL
} }
......
...@@ -102,6 +102,9 @@ func (p *parser) syntax_error(msg string) { ...@@ -102,6 +102,9 @@ func (p *parser) syntax_error(msg string) {
tok = "name" tok = "name"
} }
case LLITERAL: case LLITERAL:
if litbuf == "" {
litbuf = "literal " + lexbuf.String()
}
tok = litbuf tok = litbuf
case LOPER: case LOPER:
tok = goopnames[p.op] tok = goopnames[p.op]
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment