aboutsummaryrefslogtreecommitdiff
path: root/test/inline.go
diff options
context:
space:
mode:
authorMatthew Dempsky <mdempsky@google.com>2020-10-29 01:13:16 -0700
committerMatthew Dempsky <mdempsky@google.com>2020-11-06 20:49:11 +0000
commit5736eb0013cb8c9b67432c98b08f68e9f370810c (patch)
tree3f3c0d5e330409476bf37cf3a7707d75e28911fc /test/inline.go
parent362d25f2c82980860cb4eb5bfd0648116504788d (diff)
downloadgo-5736eb0013cb8c9b67432c98b08f68e9f370810c.tar.gz
go-5736eb0013cb8c9b67432c98b08f68e9f370810c.zip
cmd/compile: support inlining of type switches
This CL adds support for inlining type switches, including exporting and importing them. Type switches are represented mostly the same as expression switches. However, if the type switch guard includes a short variable declaration, then there are two differences: (1) there's an ONONAME (in the OTYPESW's Left) to represent the overall pseudo declaration; and (2) there's an ONAME (in each OCASE's Rlist) to represent the per-case variables. For simplicity, this CL simply writes out each variable separately using iimport/iiexport's normal Vargen mechanism for disambiguating identically named variables within a function. This could be improved somewhat, but inlinable type switches are probably too uncommon to merit the complexity. While here, remove "case OCASE" from typecheck1. We only type check "case" clauses as part of a "select" or "switch" statement, never as standalone statements. Fixes #37837 Change-Id: I8f42f6c9afdd821d6202af4a6bf1dbcbba0ef424 Reviewed-on: https://go-review.googlesource.com/c/go/+/266203 Run-TryBot: Matthew Dempsky <mdempsky@google.com> TryBot-Result: Go Bot <gobot@golang.org> Reviewed-by: Keith Randall <khr@golang.org> Trust: Matthew Dempsky <mdempsky@google.com>
Diffstat (limited to 'test/inline.go')
-rw-r--r--test/inline.go3
1 files changed, 1 insertions, 2 deletions
diff --git a/test/inline.go b/test/inline.go
index 470414f883..d754f06e03 100644
--- a/test/inline.go
+++ b/test/inline.go
@@ -152,8 +152,7 @@ func switchBreak(x, y int) int {
return n
}
-// can't currently inline functions with a type switch
-func switchType(x interface{}) int { // ERROR "x does not escape"
+func switchType(x interface{}) int { // ERROR "can inline switchType" "x does not escape"
switch x.(type) {
case int:
return x.(int)