Commit Graph

210 Commits

Author SHA1 Message Date
Robert Griesemer d6902b2ad5 go/tools/go/gcimporter: avoid possible endless loops in case of errors
R=adonovan
CC=golang-dev
https://golang.org/cl/39630045
2013-12-09 15:43:31 -08:00
Peter Collingbourne 7dcd8ded7c go.tools/go/types: handle embedded interfaces in NewInterface
R=gri
CC=golang-dev
https://golang.org/cl/39040043
2013-12-09 13:37:24 -08:00
Robert Griesemer ff84d756df go.tools/go/types: avoid spurious error in a common case
R=adonovan
CC=golang-dev
https://golang.org/cl/36900043
2013-12-03 17:51:54 -08:00
Robert Griesemer 14cf5b0a28 go.tools/go/types: fun with Hilbert: a const arithmetic test
This test generates a program that declares the constant
elements of an n*n Hilbert matrix, its inverse, and the
constant elements of the explicit product of the two.
The product should be the identity matrix; that check is
also expressed as a constant expression. Type-checking
verifies that the product is indeed the identity matrix
by asserting the result of the identity check (using the
assert built-in which is available for type-check tests).

The test is run for n = 5. Other values can be tested via
the -H flag, say: go test -run=Hilbert -H=100

The generated program can be written to a file for testing
the constant arithmetic of a compiler: go test -out=test.go

Because of the mathematically precise constant arithmetic
of go/types, this test should always succeed and is only
limited by the size of the matrix. It does run successfully
from n = 0 to values larger than 100.

The Hilbert matrix is famous for being ill-conditioned and
thus exposes arithmetic imprecision very quickly. The gc
compiler only produces a correct result for n = 0 (trivially),
and n = 1 at the moment.

R=adonovan, rsc
CC=golang-dev
https://golang.org/cl/35840043
2013-12-03 13:36:57 -08:00
Robert Griesemer 62a3fc7538 go.tools/go/types: clean up internal iota in all cases
R=dsymonds
CC=golang-dev
https://golang.org/cl/33570043
2013-11-26 17:48:47 -08:00
Robert Griesemer 3d343e42d1 go.tools/go/types: constants must have constant types
R=adonovan
CC=golang-dev
https://golang.org/cl/33210043
2013-11-26 12:42:52 -08:00
Robert Griesemer bbf45e5e0c go.tools/go/types: missing assignment checks when assigning to _
R=adonovan, gri
CC=golang-dev
https://golang.org/cl/31340044
2013-11-26 09:34:12 -08:00
Robert Griesemer b9c2c88573 go.tools/go/types: add Package.SetImports
R=adonovan, neelance
CC=golang-dev
https://golang.org/cl/32500043
2013-11-26 09:19:17 -08:00
Richard Musiol 397114a391 go.tools/go/gcimporter: ImportData has no need for *bufio.Reader, can get just io.Reader.
R=golang-dev, gri
CC=golang-dev
https://golang.org/cl/31620043
2013-11-24 12:48:45 -08:00
Robert Griesemer 8c9bb9c1e3 go.tools/go/types: various cleanups
- use unpack also for assignments
- run benchmarks only requested (-b flag)

R=adonovan
CC=golang-dev
https://golang.org/cl/31190044
2013-11-22 20:34:07 -08:00
Robert Griesemer 007f41d43e go.tools/go/types: more benchmarks, clearer results
The benchmarks don't permit clear-cut apples-to-apples
comparisons since they depend on the very source code
they are testing. But they do give an indication of
the approximate performance - as a sanity test.

Using 3 different code bases makes it apparent that
there's some difference in performance per code base;
i.e., the lines/s speed varies pretty strongly. This
may be due to setup costs, or other issues. We should
investigate eventually.

R=adonovan
CC=golang-dev
https://golang.org/cl/30650043
2013-11-21 21:08:29 -08:00
Robert Griesemer ef434a14da go.tools/go/types: record correct type for parenthesized x.(T) in comma-ok expressions
Fixes golang/go#6796.

R=adonovan
CC=golang-dev
https://golang.org/cl/30070044
2013-11-21 09:11:57 -08:00
Richard Musiol 88e2928490 go.tools/go/types: Do not throw error on division of complex variables by zero.
See http://play.golang.org/p/DrgLKnHaUW
Seems like division of a variable by zero should only throw an error if the variable is an integer.

R=golang-dev, mtj, gri
CC=golang-dev, gri
https://golang.org/cl/29500047
2013-11-20 13:42:30 -08:00
Robert Griesemer b4286c4c1b go.tools/go/types: missing checks for select statements
Also: Use defer to make sure scopes are always closed
even in case of early exits via bailout (and don't cause
an imbalanced scope error in debug mode).

R=adonovan, gri
CC=golang-dev
https://golang.org/cl/29300043
2013-11-19 13:58:01 -08:00
Robert Griesemer 849643aaaf go.tools: cleanups (added copyrights to astutil, clearer logic in go/types)
R=adonovan
CC=golang-dev
https://golang.org/cl/29110043
2013-11-19 09:07:02 -08:00
Robert Griesemer df6f0829a2 go.tools/go/types: complete expr and type string functions
- consolidate them in (expr|type)string[_test].go
- support for printing all ast.Expr
- fix printing of type: chan (<-chan int) (parentheses)
- more consistent names, comments, and exports

R=adonovan
CC=golang-dev
https://golang.org/cl/28680043
2013-11-18 22:38:48 -08:00
Robert Griesemer 65aa1a4fbe go.tools/go/types: String method for Initializers
Plus a couple of minor fixes.

R=adonovan
CC=golang-dev
https://golang.org/cl/28540043
2013-11-18 11:26:49 -08:00
Robert Griesemer e785f050b6 go.tools/go/types: add missing checks for short variable declarations
Fixes golang/go#6766.

R=adonovan
CC=golang-dev
https://golang.org/cl/24330044
2013-11-15 14:26:29 -08:00
Robert Griesemer 01f122e48b go.tools/go/gcimporter: fix build by adjusting test to new print output
R=adonovan, bradfitz
CC=golang-dev
https://golang.org/cl/26430049
2013-11-15 11:58:23 -08:00
Alan Donovan 45992044b5 go.tools/go/types: SelectionString: print method with selective package-qualification.
R=gri, gri
CC=golang-dev
https://golang.org/cl/26570048
2013-11-15 12:35:03 -05:00
Alan Donovan 0820934407 go.tools/go/types: add TypeString, ObjectString utilities
These are variants of Type.String(), Object.String() that
accept a 'from *Package' argument.  If provided, package
qualification is omitted when printing named types belonging
to that package.

This is useful for UIs where a package is implied by context
e.g. ssadump disassembly, oracle output.

+ Test.

R=gri, gri, gordon.klaus
CC=golang-dev
https://golang.org/cl/22190048
2013-11-15 09:20:46 -05:00
Robert Griesemer 91e5190eb9 go.tools/go/types: minor cleanups
R=adonovan
CC=golang-dev
https://golang.org/cl/26430045
2013-11-14 21:38:04 -08:00
Robert Griesemer 27563ff576 go.tools/go/types: move gcimporter to its own package
- fixed a couple of TODOs
- various cleanups along the way
- adjusted clients

Once submitted, clients of go/types that don't explicitly
specify Config.Import will need to add the extra import:

import _ "code.google.com/p/go.tools/go/gcimporter"

to install the default (gc) importer in go/types.

R=adonovan, gri
CC=golang-dev
https://golang.org/cl/26390043
2013-11-14 14:11:43 -08:00
Robert Griesemer d1184e294e go.tools/go/types: fix build
(I inadvertently submitted a modified file.)

R=adonovan
CC=golang-dev
https://golang.org/cl/22750044
2013-11-13 15:21:38 -08:00
Richard Musiol cfc002f30b go.tools/go/types: Do not throw error on division of float variables by zero.
R=golang-dev, gri
CC=golang-dev
https://golang.org/cl/26040043
2013-11-13 15:16:19 -08:00
Alan Donovan 3f686cae84 go.tools/go/types: print named types with package qualification.
Depending on the context, printing only the package name can
be ambiguous or even incorrect since it is valid only within
the environment of a given file's import specs.

(The standard library packages are mostly unique in their last
segment, but this is not the case for proprietary repos.)

R=gri, gri
CC=golang-dev
https://golang.org/cl/26300043
2013-11-13 16:03:41 -05:00
Robert Griesemer f339918a70 go.tools/go/exact: some factoring, more tests
R=adonovan
CC=golang-dev
https://golang.org/cl/25440043
2013-11-12 12:45:43 -08:00
Richard Musiol a5baa859ae go.tools/go/exact: Fix for exact.BinaryOp. It was modifying its argument.
R=golang-dev, gri, mail
CC=golang-dev
https://golang.org/cl/24570043
2013-11-12 10:06:24 -08:00
Alan Donovan d8292e2a38 go.tools/go/types: cache method set for pointer-to-named in the Named.
This change improves the complete running time of 'ssadump cmd/oracle' by ~20%.

R=gri, gri
CC=golang-dev
https://golang.org/cl/22910045
2013-11-11 17:20:27 -05:00
Robert Griesemer c798b9cca0 go.tools/go/types: check validity of import paths
This check is currently done in go/parser as well but
eventually can be removed from there (after Go 1.2).

R=adonovan
CC=golang-dev
https://golang.org/cl/22240045
2013-11-08 14:14:58 -08:00
Robert Griesemer 7b183d1766 go.tools/go/types, cmd/gotype: fix early bailout
Clients must have chance to look at panics they
are raising.

R=adonovan
CC=golang-dev
https://golang.org/cl/23820043
2013-11-08 12:52:57 -08:00
Robert Griesemer e8fe66cd57 go.tools/go/types: print initialization cycles
Also: Always report cycle at first (in source order)
variable in the cycle.

R=adonovan, gri
CC=golang-dev
https://golang.org/cl/23370043
2013-11-08 12:06:10 -08:00
Robert Griesemer 0f193b767d go.tools/go/types: simplified GcImportedTypes test
R=adonovan
CC=golang-dev
https://golang.org/cl/23340043
2013-11-08 08:56:55 -08:00
Robert Griesemer 7520cff8d3 go.tools/go/types: remove a workaround for 386 bug
R=adonovan
CC=golang-dev
https://golang.org/cl/23350043
2013-11-08 08:55:16 -08:00
Robert Griesemer 7123ca00a8 go.tools/go/types: fix bug in init cycle detection
Initialization cycles need to reported for cycles
that contain variables, even if they don't end in
a variable.

This fixes the last known issue with the existing
std library tests.

R=adonovan, gri
CC=golang-dev
https://golang.org/cl/22200049
2013-11-06 17:47:54 -08:00
Robert Griesemer eb67edd047 go.tools/go/types: add test cases for pending issues
The gc compiler is inconsistent how it handles method
"mentions" with respect to initialization cycle detection
(see issue 6703 for details). Pending a spec clarification,
this CL assumes that for a method to be "mentioned", it
must be mentioned as a method expression rather than a
method value (closer in intent to "syntactic" mention).

R=adonovan
CC=golang-dev
https://golang.org/cl/22050044
2013-11-06 09:55:03 -08:00
Alan Donovan 2e7d5a8b6b go.tools/ssa: dump types in "pkg."-unqualified form where appropriate.
Also: types.Typ[types.UnsafePointer].String() now always prints as "unsafe.Pointer".

R=gri
CC=golang-dev
https://golang.org/cl/21820044
2013-11-05 17:32:45 -05:00
Robert Griesemer 8e64946a3a go.tools/go/types: better error messages for api tests
R=adonovan
CC=golang-dev
https://golang.org/cl/22140043
2013-11-05 13:42:31 -08:00
Robert Griesemer 8b05c30f06 go.tools/go/types: track cycles through methods
R=adonovan
CC=golang-dev
https://golang.org/cl/22070043
2013-11-05 11:47:22 -08:00
Robert Griesemer b33df7e76a go.tools/go/types: track init cycles through closures
R=adonovan
CC=golang-dev
https://golang.org/cl/21790044
2013-11-05 10:51:13 -08:00
Robert Griesemer 9d1e9ed2ab go.tools/go/types: track init cycles through functions
- Info.InitOrder now provides list of Initializers
  (vars + init expr), handling n:1 decls and blank
  identifiers
- added respective API test
- cycles detected through function "mentions"

Missing: cycles through method "mentions" and via
         closures

R=adonovan
CC=golang-dev
https://golang.org/cl/21810043
2013-11-05 09:25:25 -08:00
Robert Griesemer d259ea48d1 go.tools/go/types: first cut at checking variable initialization cycles
Missing:
- dependencies via functions (incl. closures and methods)
- more tests (incl. API test)

R=adonovan
CC=golang-dev
https://golang.org/cl/20510043
2013-10-31 21:47:35 -07:00
Robert Griesemer fb0632eb7d go.tools/go/types: Provide explicit type checker Error.
R=adonovan
CC=golang-dev
https://golang.org/cl/20400044
2013-10-31 12:01:00 -07:00
Robert Griesemer 3eb9e504e3 go.tools/go/types: update a TODO comment (not a TODO anymore)
R=adonovan
TBR=adonovan
CC=golang-dev
https://golang.org/cl/17440043
2013-10-25 15:37:03 -07:00
Robert Griesemer b98997fdfe go.tools/go/types: enable std lib test of map key types
R=adonovan
CC=golang-dev
https://golang.org/cl/17390043
2013-10-25 14:38:52 -07:00
Robert Griesemer 65aaa0093c go.tools/go/types: check map key type when it is fully known
Fixes golang/go#6667.

R=adonovan
CC=golang-dev
https://golang.org/cl/17360043
2013-10-25 14:32:14 -07:00
Robert Griesemer 1e05a58b11 go.tools/go/types: consistently use 'elem' instead of 'elt'
This is simply a rename of unexported struct fields.
No other changes.

R=adonovan
CC=golang-dev
https://golang.org/cl/17330043
2013-10-25 13:59:40 -07:00
Robert Griesemer cf08eefe7f go.tools/go/types: test cases for comparisons
- better error messages
- in contrast to a long-standing TODO, comparisons
  between interface and non-interface types always
  worked correctly

R=adonovan
CC=golang-dev
https://golang.org/cl/17310043
2013-10-25 13:16:45 -07:00
Robert Griesemer 69f5b543df go.tools/go/types: check for duplicate types in type switches
R=adonovan
CC=golang-dev
https://golang.org/cl/16860043
2013-10-24 15:20:03 -07:00
Alan Donovan 96bdcd22e3 go.tools/go/types: add Var.IsField() accessor, and print "field" not "var".
R=gri
CC=golang-dev
https://golang.org/cl/16780043
2013-10-24 17:07:11 -04:00