blob: 8a0c56a54e51556e34cc963f0ae7039b682f20f8 [file] [log] [blame]
This version of go/types is part of the prototype that implements the
extended Go language as outlined by the latest generics draft design.
DISCLAIMER
This code is based on the std/library's go/types package but it has
been modified heavily. Please bear in mind that:
- This is a prototype. Expect bugs, incomplete parts, and suboptimal
and (gulp) possibly ugly code.
- While all the major aspects of the generics design draft have been
implemented, parts are missing, especially around the operations permitted
on operands of generic types. In such cases, the result is most often
an error reporting that a certain operation is not permitted even though
it should be according to the draft design.
- As prototyping continues, expect refinement and possibly divergence
from the most recent draft design published.
EXAMPLE CODE
For tests and example code (with detailed comments) look for files
with suffix .go2 in the testdata and examples subdirectories.
(The suffix .go2 is solely to distinguish them from regular Go code and
to prevent gofmt from touching them. We expect a proper implementation to
keep using .go .)
RUNNING THE TYPE-CHECKER
The type-checker is automatically run as part of the go2go tool.
To experiment with generic code, it is recommened to use that tool.
But the type-checker can also be run stand-alone on source code if
so desired. There are two primary ways:
1) By building the gotype tool in this source directory:
go build gotype.go
and then running the resulting binary on some input files
./gotype <package files>
(Make sure to use the correct go tool when building.)
2) By using the type-checker's TestCheck test function which
accepts a list of user provided files:
go test -run Check$ -errlist -files <package files>
For instance:
go test -run Check$ -files examples/types.go2
TestCheck will match any type errors against ERROR comments
in the source files and complain about discrepancies.
To report the errors instead, use:
go test -run Check$ -errlist -files examples/types.go2
To see a trace of the type checker progress, use the -v flag:
go test -v -run Check$ -errlist -files examples/types.go2
(When playing with this code, sometimes go vet gets in the
way, so it can be helpful to also provide -vet off.)