]> Cypherpunks repositories - gostls13.git/commitdiff
go/constant: share the empty string
authorAlan Donovan <adonovan@google.com>
Mon, 15 Aug 2022 17:05:01 +0000 (13:05 -0400)
committerGopher Robot <gobot@golang.org>
Mon, 15 Aug 2022 17:42:12 +0000 (17:42 +0000)
This saves 11,000 allocations when loading the standard library
in golang.org/x/tools/go/ssa form.

Change-Id: I8aa32b0641c1a3dde29e6ee76c760006035dd56d
Reviewed-on: https://go-review.googlesource.com/c/go/+/423934
TryBot-Result: Gopher Robot <gobot@golang.org>
Reviewed-by: Cuong Manh Le <cuong.manhle.vn@gmail.com>
Run-TryBot: Alan Donovan <adonovan@google.com>
Run-TryBot: Robert Griesemer <gri@google.com>
Reviewed-by: Robert Griesemer <gri@google.com>
Auto-Submit: Alan Donovan <adonovan@google.com>

src/go/constant/value.go

index 36c29d8c271c9caed9b33a8e277432a3b597f8c7..f8d03cf3756c15c3915e1fc2dc6bafcb514bff83 100644 (file)
@@ -380,7 +380,14 @@ func MakeUnknown() Value { return unknownVal{} }
 func MakeBool(b bool) Value { return boolVal(b) }
 
 // MakeString returns the String value for s.
-func MakeString(s string) Value { return &stringVal{s: s} }
+func MakeString(s string) Value {
+       if s == "" {
+               return &emptyString // common case
+       }
+       return &stringVal{s: s}
+}
+
+var emptyString stringVal
 
 // MakeInt64 returns the Int value for x.
 func MakeInt64(x int64) Value { return int64Val(x) }