1
0
mirror of https://github.com/golang/go synced 2024-10-01 07:28:35 -06:00
The Go programming language
Go to file
Alan Donovan 9f640c2abb go.tools/ssa: record lvalue/rvalue distinction precisely in DebugRef.
A DebugRef associates a source expression E with an ssa.Value
V, but until now did not record whether V was the value or the
address of E.  So, we would guess from the "pointerness" of
the Value, leading to confusion in some cases, e.g.

   type N *N
   var n N
   n = &n  // lvalue and rvalue are both pointers

Now we explicitly record 'IsAddress bool' in DebugRef, and
plumb this everywhere: through (*Function).ValueForExpr and
(*Program).VarValue, all the way to forming the pointer
analysis query.

Also:
- VarValue now treats each reference to a global distinctly,
  just like it does for other vars.  So:
    var g int
    func f() {
   	g = 1     // VarValue(g) == Const(1:int), !isAddress
        print(g)  // VarValue(g) == Global(g), isAddress
    }
- DebugRefs are not emitted for references to predeclared
  identifiers (nil, built-in).
- DebugRefs no longer prevent lifting of an Alloc var into a
  register; now we update or discard the debug info.
- TestValueForExpr: improve coverage of ssa.EnclosingFunction
  by putting expectations in methods and init funcs, not just
  normal funcs.
- oracle: fix golden file broken by recent
  (*types.Var).IsField change.

R=gri
CC=golang-dev
https://golang.org/cl/16610045
2013-10-24 18:31:50 -04:00
blog go.tools/blog: replace "\\" with "/" in path string to be compatible with windows platform 2013-10-08 16:55:56 +11:00
call go.tools/pointer: use new callgraph API. 2013-09-25 17:17:42 -04:00
cmd go.tools/ssa: CreateTestMainPackage: synthesize test driver as a package ("testmain") not 'main' function. 2013-10-23 18:07:53 -04:00
dashboard go.tools/dashboard: clone main repo from local path if it already exists locally. 2013-10-07 09:06:32 -07:00
go go.tools/go/types: check for duplicate types in type switches 2013-10-24 15:20:03 -07:00
godoc go.tools/godoc/static: fix & escape in codewalks 2013-10-13 22:22:48 -04:00
importer go.tools/ssa: implement correct control flow for recovered panic. 2013-10-14 15:38:56 -04:00
oracle go.tools/ssa: record lvalue/rvalue distinction precisely in DebugRef. 2013-10-24 18:31:50 -04:00
playground go.tools/present: add support for non Go code execution 2013-10-14 14:14:08 -07:00
pointer go.tools/ssa: CreateTestMainPackage: synthesize test driver as a package ("testmain") not 'main' function. 2013-10-23 18:07:53 -04:00
present present/code.go: remove residual file from an hg merge. 2013-10-02 11:02:33 +10:00
ssa go.tools/ssa: record lvalue/rvalue distinction precisely in DebugRef. 2013-10-24 18:31:50 -04:00
.hgignore go.empty: prototype for new subrepository 2012-01-25 14:45:13 -05:00
AUTHORS go.empty: prototype for new subrepository 2012-01-25 14:45:13 -05:00
codereview.cfg go.empty: prototype for new subrepository 2012-01-25 14:45:13 -05:00
CONTRIBUTORS go.empty: prototype for new subrepository 2012-01-25 14:45:13 -05:00
LICENSE LICENSE: add 2012-03-17 15:20:58 +11:00
PATENTS go.empty: add PATENTS file to the subrepo. 2012-04-16 11:24:04 +10:00
README go.tools/README: update to make truthful 2013-10-09 11:47:05 -07:00

This subrepository holds the source for various packages and tools that support
the Go programming language.

Some of the tools, godoc and vet for example, are included in binary Go distributions.
Others, including the Go oracle and the test coverage tool, can be fetched with "go get".

Packages include a type-checker for Go and an implementation of the Single Static
Assignment (SSA) representation for Go programs.

To submit changes to this repository, see http://golang.org/doc/contribute.html.