Commit Graph

574 Commits

Author SHA1 Message Date
Robert Griesemer e841ad2e00 go/types: fix minor typo in comment
Change-Id: I2d696655c409f94a5ab6a3837b4b83bc7eb0b15d
Reviewed-on: https://go-review.googlesource.com/11366
Reviewed-by: Robert Griesemer <gri@golang.org>
2015-06-23 21:03:00 +00:00
Robert Griesemer 8c8cd541fa go/types: in string(x) conversions, x must be of integer type
Fixes golang/go#11357.

Change-Id: Id6994a0fe3830cf56d3dbdd60a4dff89404e5a41
Reviewed-on: https://go-review.googlesource.com/11365
Reviewed-by: Alan Donovan <adonovan@google.com>
2015-06-23 20:21:05 +00:00
Robert Griesemer 6369699504 go/types: better error message for certain unaary/binary expression errors
Fixes golang/go#11367.

Change-Id: Ic7f1bad51165685097c909fd18c245a57924cdc8
Reviewed-on: https://go-review.googlesource.com/11363
Reviewed-by: Alan Donovan <adonovan@google.com>
2015-06-23 19:43:07 +00:00
Robert Griesemer e9a746de6e go/types: add missing test for constant shifts
Fixes golang/go#11325.

Change-Id: Ic302098fffd337fcfa31274319cdbd78907a6d5d
Reviewed-on: https://go-review.googlesource.com/11344
Reviewed-by: Alan Donovan <adonovan@google.com>
2015-06-22 22:52:46 +00:00
Robert Griesemer af817890aa go/gccgoimporter: fix tests for Plan9
This is a backport of https://go-review.googlesource.com/#/c/11194/.

Change-Id: I2f8a8efec77a29258c85f5a1b11cd9deb81853d0
Reviewed-on: https://go-review.googlesource.com/11210
Reviewed-by: Ian Lance Taylor <iant@golang.org>
2015-06-18 00:30:47 +00:00
Robert Griesemer 605d5bf7f5 go/gcimporter, go/types: skip nacl-arm for some tests
Backport of https://go-review.googlesource.com/9674 .

Change-Id: Ie86bea98e910616b2d6a49387b1aed973d4f1c66
Reviewed-on: https://go-review.googlesource.com/11126
Reviewed-by: Alan Donovan <adonovan@google.com>
2015-06-15 20:50:49 +00:00
Robert Griesemer f9379e5b1f go/types: be robust in the presence of incorrect/missing position info
Fixes go/loader test crash.

TBR: adonovan

Change-Id: I91dba5e001afa0ee188ccea4db904a6ce744c4d0
Reviewed-on: https://go-review.googlesource.com/11042
Reviewed-by: Robert Griesemer <gri@golang.org>
2015-06-13 01:27:06 +00:00
Robert Griesemer e5c3ebe4c7 go/pointer: fix build (provide correct args to types.NewSignature and types.Eval)
TBR: adonovan

Change-Id: I4b43b566278ede6b780a59f986c0fc392a5ef4ac
Reviewed-on: https://go-review.googlesource.com/11041
Reviewed-by: Robert Griesemer <gri@golang.org>
2015-06-13 01:08:28 +00:00
Robert Griesemer f389b29208 go/ssa: fix build (remove unused params to types.NewSignature)
TBR: adonovan

Change-Id: I669140d6e0735804625b0327caa51f4e1807d277
Reviewed-on: https://go-review.googlesource.com/11040
Reviewed-by: Robert Griesemer <gri@golang.org>
2015-06-13 00:57:15 +00:00
Robert Griesemer 136b4e419b go/types: revert most recent change - we cannot rely on 1.5 features quite yet
Revert "go/types: fix Eval to use correct file set when evaluating an expression"

This reverts commit d241a1448b.

Change-Id: Ie16c57da2732d8b079108efef100fc956b71f737
Reviewed-on: https://go-review.googlesource.com/11010
Reviewed-by: David Symonds <dsymonds@golang.org>
2015-06-13 00:06:15 +00:00
Robert Griesemer d241a1448b go/types: fix Eval to use correct file set when evaluating an expression
Change-Id: I221bd26cc90755de57c8f1941cabddd14d56584d
Reviewed-on: https://go-review.googlesource.com/10999
Reviewed-by: Alan Donovan <adonovan@google.com>
2015-06-12 23:51:01 +00:00
Robert Griesemer b5429ae521 go/types: fix comment (missed in last commit)
Change-Id: I4ea2a6b89b44b11cbcf771d0aab3e30370f59d31
Reviewed-on: https://go-review.googlesource.com/10996
Reviewed-by: Robert Griesemer <gri@golang.org>
2015-06-12 23:17:17 +00:00
Robert Griesemer ee0cf325b1 go/types: provide full source file extent to file scope
Change-Id: Ib3472ab9e6b5bae0b03474ea57857fde1afbd43a
Reviewed-on: https://go-review.googlesource.com/10995
Reviewed-by: Alan Donovan <adonovan@google.com>
2015-06-12 23:15:45 +00:00
Robert Griesemer 44761a8f84 go/types: remove unused scope parameter from NewSignature
Change-Id: I93c4185d7eeafde43b6b512b6e574d3332401c09
Reviewed-on: https://go-review.googlesource.com/10994
Reviewed-by: Alan Donovan <adonovan@google.com>
2015-06-12 23:15:00 +00:00
Robert Griesemer 3c2fc37aec go/gccgoimporter: remove incorrect scope passed to NewSignature
Change-Id: I4b9670dc72ef85b852361aa5524a55b82d88e8f2
Reviewed-on: https://go-review.googlesource.com/10993
Reviewed-by: Alan Donovan <adonovan@google.com>
2015-06-12 23:06:12 +00:00
Robert Griesemer 568df9f49c go/types: remove global vars in test
Change-Id: I5fb61a38362a40c706ba5cb8968c387c8dc4aef2
Reviewed-on: https://go-review.googlesource.com/10992
Reviewed-by: Alan Donovan <adonovan@google.com>
2015-06-12 23:05:41 +00:00
Robert Griesemer 665374f1c8 go/types: add pos parameter to Eval; remove New, EvalNode
Scopes now have "extent" information; that is they provide a
range [scope.Pos(), scope.End()) which describes the source
text range covered by the scope. It requires that the incoming
AST has correct position information; also the extent for the
Universe and for package scopes is not set (positions are invalid).

Objects have a new (currently unexported) scopePos position,
which is the position at which the object becomes visible inside
its *Scope.

Scope.LookupParent takes an addition parameter pos. If valid, an
identifier is looked up as if found at position pos. This can be
used to find the object corresponding to an identifier at position
pos after scopes have been completely populated (and thus may
contain the same identifier which may be defined only later in the
source text).

Fixes #9980.

Change-Id: Icb49c44c5c3d4b93c0718ce2a769ec468877709d
Reviewed-on: https://go-review.googlesource.com/10800
Reviewed-by: Alan Donovan <adonovan@google.com>
2015-06-12 23:04:54 +00:00
Alan Donovan ac303766f5 go/ssa/interp: don't run encoding/pem tests in interpreter
since they use quick.Check, which requires the unimplemented
(reflect.Value).SetString.

Also:
- Add reflect.Type.{In,NumIn} methods, whose absence
  was only the proximate cause of the failed test.
- Delete bodies of reflect.Value methods so that it's obvious a
  function that should be intrinsic is missing.

Change-Id: Ib64b8f4953a913f4ead90e376bda70419adb87cb
Reviewed-on: https://go-review.googlesource.com/10796
Reviewed-by: Robert Griesemer <gri@golang.org>
2015-06-06 15:50:50 +00:00
Robert Griesemer de24c4870a go/types: remove unused return value (minor cleanup)
Change-Id: I37dd83100b7e977e1d5a06ae84a93a40bbd651c3
Reviewed-on: https://go-review.googlesource.com/10773
Reviewed-by: Alan Donovan <adonovan@google.com>
2015-06-05 18:41:51 +00:00
Robert Griesemer e262ee18f0 go/types/typeutil: add missing copyright notices
Change-Id: I101c033ffc20fde38b0f0b075f559aa10a6e43d0
Reviewed-on: https://go-review.googlesource.com/10772
Reviewed-by: Alan Donovan <adonovan@google.com>
2015-06-05 18:11:17 +00:00
Robert Griesemer 3f8eecd15b go/types: move MethodSetCache into package go/types/typeutil
Change-Id: Iba5d7c2df533948a5b28373b077cc0476a6745ad
Reviewed-on: https://go-review.googlesource.com/10770
Reviewed-by: Alan Donovan <adonovan@google.com>
2015-06-05 17:34:01 +00:00
Alan Donovan 8ccf558e8a cmd/callgraph: update flag docstring
And add a TODO.

Change-Id: I51c63b32e9ac4309cdfb8228348a5d528f36a919
Reviewed-on: https://go-review.googlesource.com/10489
Reviewed-by: Robert Griesemer <gri@golang.org>
2015-05-29 17:21:31 +00:00
Robert Griesemer 5e9beacd77 go/types: fix error message for embedded non-interface types in interfaces
Backport of https://go-review.googlesource.com/#/c/10466/ .

Change-Id: Ib88a9707ea8ad6e2dbfaeb2edeb586a968abd508
Reviewed-on: https://go-review.googlesource.com/10468
Reviewed-by: Alan Donovan <adonovan@google.com>
2015-05-28 20:04:54 +00:00
Robert Griesemer 8c8390201d go/types: exclude test/fixedbugs/issue7746.go from tests
This backports an anlogous change made to std repo go/types and
enables running the tests again in a reasonable amount of time.

Change-Id: Ied59f6788b7b180f34c918a3c94d50c892b15f32
Reviewed-on: https://go-review.googlesource.com/10467
Reviewed-by: Alan Donovan <adonovan@google.com>
2015-05-28 19:10:56 +00:00
Alan Donovan 3d1847243e oracle: disable parser bailout
This change sets ParserMode=AllErrors so that the parser is never
allowed to discard the AST and use a dummy one just because it saw too
many errors.

Also, change (*loader.Program).PathEnclosingInterval so that other
clients that forget to set this flag don't panic while calling
fset.File(f.Pos()).Base() on an ast.File f with no position info.

Change-Id: Ie544f169d367d2aa85426212b27063dc72e36fb1
Reviewed-on: https://go-review.googlesource.com/10290
Reviewed-by: Robert Griesemer <gri@golang.org>
2015-05-20 20:27:48 +00:00
Josh Bleecher Snyder 3f8aef80c8 go/ast/astutil: set Pos for import name
Failing to set this when adding a named import
to an existing block at the 0th position
caused the Lparen position to be set to zero.
As a result, the specs were printed as if
they were a single spec, not a group.
This made it appear as if imports had
been swallowed.

See CL 8663 for more context
and the original bug report.

CL 2050 fixed most similar cases
but missed this one.

Change-Id: Ic578fbb8040fa3d3d41db5bde2b839e394801608
Reviewed-on: https://go-review.googlesource.com/10252
Reviewed-by: Robert Griesemer <gri@golang.org>
2015-05-19 23:10:16 +00:00
Alan Donovan 5df6d9290d go/ssa/interp: remove hash/crc32 from test suite, since it uses Examples
Change-Id: Ia87b7f6d589cd22028b437a94355f499fbedd18a
Reviewed-on: https://go-review.googlesource.com/9928
Reviewed-by: Alan Donovan <adonovan@google.com>
2015-05-12 17:41:59 +00:00
Alan Donovan fb47c16287 go/buildutil: fix usage message for -tags flag
Now:

% gorename -h
Usage of ./gorename:
...
  -tags build tags
        a list of build tags to consider...

Change-Id: I46d6906f683407bad6f3dee25c63b139f47e4588
Reviewed-on: https://go-review.googlesource.com/9655
Reviewed-by: Dominik Honnef <dominik@honnef.co>
Reviewed-by: David Crawshaw <crawshaw@golang.org>
2015-05-08 14:48:23 +00:00
David Symonds 863c9c67a8 go/pointer: Remove a mention of the deleted ImportFromBinary option.
Change-Id: I9ca8a5b37afc6ae9603849d233ee6b4976e2b973
Reviewed-on: https://go-review.googlesource.com/9462
Reviewed-by: Alan Donovan <adonovan@google.com>
2015-04-29 01:29:12 +00:00
Alan Donovan ee9a07d373 go/buildutil: TagsFlag provides a flag.Value for setting build.Context.BuildTags from -tags flag.
Add -tags flag to oracle, ssadump, callgraph, gomvpkg, gorename, eg.

Change-Id: I4a818501b2331c4ea589caca37a3ad9d381dc8af
Reviewed-on: https://go-review.googlesource.com/9172
Reviewed-by: David Crawshaw <crawshaw@golang.org>
2015-04-23 14:10:21 +00:00
Alan Donovan bc61fa75b3 go/ssa: acquire TestEnclosingFunction from go/loader package.
Not sure how it ended up there...

Change-Id: I0d48025fd6595714b0c52cadf305b3e06e2b9b84
Reviewed-on: https://go-review.googlesource.com/9171
Reviewed-by: David Crawshaw <crawshaw@golang.org>
2015-04-21 16:27:33 +00:00
Alan Donovan 41d9a0e7b2 go/loader: rename Example functions to appease godoc
And other minor cosmetic tweaks.

Change-Id: Ic75d405e6eca8f29b7e97de66fb86f1f39bcae1e
Reviewed-on: https://go-review.googlesource.com/9035
Reviewed-by: Robert Griesemer <gri@golang.org>
2015-04-17 19:40:02 +00:00
Alan Donovan 9c57c19a58 go/loader: eliminate ImportFromBinary option and PackageCreated hook
The loader package now loads, parses, and type-checks a whole program
from source, and that is all.

Also:
- simplified loader logic
- ssa.Create is gone; use ssautil.CreateProgram.
- ssautil.LoadPackage renamed to BuildPackage.
  It is now independent of go/types' Import hook and the Packages map.
- ssadump: -importbin flag removed.
  The value of this flag was that it caused the tool to print IR
  for only a single package; this is now the normal behaviour.

Fixes #9955

Change-Id: I4571118258ab1a46dccece3241b7dc51401a3acc
Reviewed-on: https://go-review.googlesource.com/8953
Reviewed-by: Robert Griesemer <gri@golang.org>
2015-04-17 18:58:17 +00:00
Alan Donovan 1b6275a2ec go/loader: API examples
Also: make it easier to find packages.  Hide the importMap field
(never used) and expose a (*Program).Package method which searches
importMap and then Created.

Also: move huge comments into doc.go.

Change-Id: Iad96a12524b7c41ad9acd1e806af23171e71fa7c
Reviewed-on: https://go-review.googlesource.com/9030
Reviewed-by: Robert Griesemer <gri@golang.org>
2015-04-17 18:50:18 +00:00
Alan Donovan 77d380c9e6 go/gcimporter: populate (*types.Package).Imports
All importers should populate the set of imported packages.  In Go 1.5
importer API, there will be no package map from which to compute the
transitive closure of dependencies, and SSA package creation needs
this information.

+ test.

Change-Id: I1c2823b07bf7316aa62c80e2ef2a0755cf6f5384
Reviewed-on: https://go-review.googlesource.com/8924
Reviewed-by: Robert Griesemer <gri@golang.org>
2015-04-15 18:12:10 +00:00
Alan Donovan 20186168d5 go/ssa/ssautil: break ssa->loader dependency
Remove all dependencies from non-test code in go/ssa to go/loader,
except the deprecated Create function which will be eliminated in
favor of ssautil.CreateProgram in a mechnanical followup.

Add Examples of two main use cases of SSA construction:
loading a complete program from source; and
building a single package, loading its dependencies from import data.

Add tests to ssautil of the two load functions.
Suggestions welcome for better names.

Planned follow-ups:
- replace all references to ssa.Create with ssautil.CreateProgram and eliminate it.
- eliminate support in go/loader for the ImportBinary flag, and the
  PackageCreated hook which is no longer needed since clients can
  create the package themselves (see Example).

Step 1 to fixing issue 9955.

Change-Id: I4e64df67fcd5b7f0c0388047e06cea247fddfec5
Reviewed-on: https://go-review.googlesource.com/8669
Reviewed-by: Robert Griesemer <gri@golang.org>
2015-04-14 18:01:36 +00:00
Robert Griesemer 069d2f3bcb go/types, go/gcimporter: backport changes from std repo
This is a 1:1 backport of the following changes:

https://go-review.googlesource.com/8611
https://go-review.googlesource.com/8621

Change-Id: I4a75d73cb99a7d104d32553f5530408c2b6d81b8
Reviewed-on: https://go-review.googlesource.com/8629
Reviewed-by: Alan Donovan <adonovan@google.com>
2015-04-08 18:15:25 +00:00
Robert Griesemer bf8b6a5c4c go/types: reenable disabled test (backport from std repo go/types)
Change-Id: I93a914dcfc5bd2cfa8078cec683a46225b665e44
Reviewed-on: https://go-review.googlesource.com/8626
Reviewed-by: Alan Donovan <adonovan@google.com>
2015-04-08 16:31:48 +00:00
Alan Donovan 8a634c5831 go/ssa/interp: don't let target calls to runtime.GOMAXPROCS set host state
...otherwise the interpreted program can make the whole test suite
slow.  Just ignore the argument and return the current GOMAXPROCS
value.

Change-Id: Ife2ad6c53e6fdf9feea1d1b231d8d796b3db3a24
Also: add missing intrinsic for os.runtime_beforeExit.
Reviewed-on: https://go-review.googlesource.com/8591
Reviewed-by: Robert Griesemer <gri@golang.org>
2015-04-07 22:31:19 +00:00
Robert Griesemer 5cf8a6b1aa go/types: remove dependency on go/ast/astutil
This package was only imported for the trivial Unparen function.

Change-Id: I14f8d91bc0afaa6ab3aa797a53e42e56b59ffcbe
Reviewed-on: https://go-review.googlesource.com/8499
Reviewed-by: Alan Donovan <adonovan@google.com>
2015-04-06 19:33:09 +00:00
Alan Donovan 8a9ac1b806 go/loader: limit concurrency of I/O operations during parsing
This is a putative fix for the file descriptor exhaustion problem
described in https://github.com/golang/go/issues/10306.

Change-Id: If603fb9bbaec1b53f6b44d15b2c202e4670035ce
Reviewed-on: https://go-review.googlesource.com/8421
Reviewed-by: Matt Joiner <anacrolix@gmail.com>
Reviewed-by: David Crawshaw <crawshaw@golang.org>
2015-04-06 15:15:05 +00:00
Alan Donovan d4e7010150 go/pointer: add TODO comment
Change-Id: Ic383036a6b3aa092aa571694bba86d821428f236
Reviewed-on: https://go-review.googlesource.com/8385
Reviewed-by: David Crawshaw <crawshaw@golang.org>
2015-04-02 18:06:43 +00:00
Josh Bleecher Snyder 57d2ff39c7 go/ast/astutil: match prefix segments when adding imports
AddImport and AddNamedImport attempt to place new
imports in roughly the correct place--and thus the
correct group--by matching prefixes. Matching prefixes
byte-by-byte led to "regexp" being grouped with "rsc.io/p".
Instead, match prefixes by segments.

Fixes golang/go#9961.

Change-Id: I52b7c58a9a2fbe85c2b5297e50c87d409364bda3
Reviewed-on: https://go-review.googlesource.com/8090
Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
2015-03-30 17:57:25 +00:00
Robert Griesemer af0a4481dd go/types: permit type elision from composite literal map keys
Per pending https://go-review.googlesource.com/2591 .
Depends on: https://go-review.googlesource.com/2621 .

Change-Id: I2aa82916454504b5852518b3ef7fc8637126d0c7
Reviewed-on: https://go-review.googlesource.com/2623
Reviewed-by: Alan Donovan <adonovan@google.com>
2015-03-20 22:18:24 +00:00
Alan Donovan bd8de46c84 go/ssa/interp/testdata: remove comment about now-fixed go/types bug
Change-Id: I55372a40c0049368a74247fe1819be384313f838
Reviewed-on: https://go-review.googlesource.com/7666
Reviewed-by: Robert Griesemer <gri@golang.org>
2015-03-17 17:28:01 +00:00
Alan Donovan 33fcc815f2 go/ssa: fix incorrect SSA code for composite literals
Composite literals are initialized in place where possible, but in
cases the initializer expression refers to the variable that
is being updated

	x = T{a: x.a}

we must ensure that the RHS is fully evaluated before we execute any
stores to x.  This means we need to record the sequence of stores in a
"store buffer" and execute it only once the entire composite literal
has been evaluated.

Fixes issue #10127

Change-Id: If94e3b179beb25feea5b298ed43de6a199aaf347
Reviewed-on: https://go-review.googlesource.com/7533
Reviewed-by: Robert Griesemer <gri@golang.org>
2015-03-17 14:26:39 +00:00
Robert Griesemer e4a1c78f0f go/types: typecheck loop body even if range clause is broken
Be more tolerant in the presence of incorrect range clauses
if for loops and type-check loop body with minimal assumptions
about iteration variables. (Before, in some cases we would simply
ignore the loop body in such cases).

Fixes #10148.

Change-Id: I0b66f81875348088c1a7fa04ccdcbfe768f2eb6c
Reviewed-on: https://go-review.googlesource.com/7525
Reviewed-by: Alan Donovan <adonovan@google.com>
2015-03-13 23:02:41 +00:00
Alan Donovan 868c429971 go/ssa/interp: fix bug causing subelements of aggregates to change address.
Since all SSA values are immutable, no value copying is required for
any operations except those that load from or store to a variable;
those operations must do an aggregate copy, i.e., descend into struct
and array elements.  All other calls to copyVal have been removed;
they were pieces of duct tape, as I had long suspected.

The descent must be based on the static type information, not the
"shape" of the dynamic value, since two reflect.Value structs may have
different internal shapes.  We clobber the true definition of
reflect.Value's underlying type, replacing it with struct{interface{},
interface{}}, which is close enough to make the load/store functions
work.

+ Test

Change-Id: I5e239d91ed0cb2a669a9f75766024fe1f9a5c347
Reviewed-on: https://go-review.googlesource.com/7532
Reviewed-by: Robert Griesemer <gri@golang.org>
2015-03-13 18:22:38 +00:00
Alan Donovan 8cc1c75580 go/loader: support relative imports like the go tool does
Config.Cwd sets the base directory; os.Getwd is its default.

+Test.

Change-Id: I213abfb30085cd1306719ed6f94aeae6a3170bc0
Reviewed-on: https://go-review.googlesource.com/7502
Reviewed-by: Robert Griesemer <gri@golang.org>
2015-03-12 18:51:46 +00:00
Alan Donovan bdcea2c1b3 go/buildutil: use chan (not func) in the ForEachPackage API
The callbacks are intentionally concurrent, making this function very
easy to misuse (most clients so far have got it wrong, even my own).
Using a channel in the API makes the concurrency obvious, the
correct usage easy, and the client control flow simpler.

Change-Id: Ied38c3ed5c98b40eb1b322a984ed9dc092ac0918
Reviewed-on: https://go-review.googlesource.com/3250
Reviewed-by: Sameer Ajmani <sameer@golang.org>
2015-03-05 20:14:20 +00:00