Matthew Dempsky 5736eb0013 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>
2020-11-06 20:49:11 +00:00
..
2019-03-06 18:53:12 +00:00
2020-03-25 22:22:20 +00:00
2019-09-08 17:28:20 +00:00
2015-01-29 13:07:30 +00:00
2019-09-08 17:28:20 +00:00
2018-10-06 15:40:03 +00:00
2015-07-11 14:36:33 +00:00
2015-07-11 14:36:33 +00:00
2020-04-13 21:56:15 +00:00
2019-09-08 17:28:20 +00:00
2018-04-30 19:39:18 +00:00
2019-09-08 17:28:20 +00:00
2019-03-18 20:10:55 +00:00
2019-11-01 20:13:05 +00:00
2014-10-27 18:59:02 -04:00
2013-02-11 18:20:52 -05:00
2018-11-26 14:13:53 +00:00
2018-11-27 15:36:08 +00:00
2018-11-26 14:13:53 +00:00
2019-09-08 17:28:20 +00:00
2018-03-01 21:11:16 +00:00
2020-10-06 22:49:38 +00:00
2018-12-03 16:48:21 +00:00
2019-09-08 17:28:20 +00:00

The test directory contains tests of the Go tool chain and runtime. It includes black box tests, regression tests, and error output tests. They are run as part of all.bash.

To run just these tests, execute:

../bin/go run run.go

To run just tests from specified files in this directory, execute:

../bin/go run run.go -- file1.go file2.go ...

Standard library tests should be written as regular Go tests in the appropriate package.

The tool chain and runtime also have regular Go tests in their packages. The main reasons to add a new test to this directory are:

  • it is most naturally expressed using the test runner; or
  • it is also applicable to gccgo and other Go tool chains.