| 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.) |