From 8d075beeef137455b9dc40f1c724b495f3ceda26 Mon Sep 17 00:00:00 2001 From: Matthew Dempsky Date: Tue, 26 Apr 2016 10:55:32 -0700 Subject: [PATCH] cmd/compile: lazily initialize litbuf MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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 TryBot-Result: Gobot Gobot Reviewed-by: Brad Fitzpatrick --- src/cmd/compile/internal/gc/lex.go | 2 +- src/cmd/compile/internal/gc/parser.go | 3 +++ 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/src/cmd/compile/internal/gc/lex.go b/src/cmd/compile/internal/gc/lex.go index 09fed98985..8608a6229c 100644 --- a/src/cmd/compile/internal/gc/lex.go +++ b/src/cmd/compile/internal/gc/lex.go @@ -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 } diff --git a/src/cmd/compile/internal/gc/parser.go b/src/cmd/compile/internal/gc/parser.go index 97a18497ff..55f352590b 100644 --- a/src/cmd/compile/internal/gc/parser.go +++ b/src/cmd/compile/internal/gc/parser.go @@ -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]