diff options
author | Chris Broadfoot <cbro@golang.org> | 2016-08-02 14:05:48 -0700 |
---|---|---|
committer | Chris Broadfoot <cbro@golang.org> | 2016-08-02 14:06:13 -0700 |
commit | ae68090d000c0a4a6cda0ef44a59809f914e2358 (patch) | |
tree | 36bba9f02559ae977f523e9668bef425aad96bd5 | |
parent | c628d83ec5309cd679e16c734456fed1b9a85806 (diff) | |
parent | 2da5633eb9091608047881953f75b489a3134cdc (diff) | |
download | go-ae68090d000c0a4a6cda0ef44a59809f914e2358.tar.gz go-ae68090d000c0a4a6cda0ef44a59809f914e2358.zip |
all: merge master into release-branch.go1.7
Change-Id: I177856ea2bc9943cbde28ca9afa145b6ea5b0942
-rw-r--r-- | src/cmd/doc/doc_test.go | 16 | ||||
-rw-r--r-- | src/cmd/doc/pkg.go | 28 | ||||
-rw-r--r-- | src/cmd/doc/testdata/pkg.go | 7 | ||||
-rw-r--r-- | src/runtime/sys_darwin_386.s | 7 | ||||
-rw-r--r-- | src/runtime/sys_darwin_amd64.s | 1 |
5 files changed, 48 insertions, 11 deletions
diff --git a/src/cmd/doc/doc_test.go b/src/cmd/doc/doc_test.go index 5cb1ec990e..453a3d53aa 100644 --- a/src/cmd/doc/doc_test.go +++ b/src/cmd/doc/doc_test.go @@ -61,6 +61,7 @@ var tests = []test{ `var ExportedVariable = 1`, // Simple variable. `var VarOne = 1`, // First entry in variable block. `func ExportedFunc\(a int\) bool`, // Function. + `func ReturnUnexported\(\) unexportedType`, // Function with unexported return type. `type ExportedType struct { ... }`, // Exported type. `const ExportedTypedConstant ExportedType = iota`, // Typed constant. `const ExportedTypedConstant_unexported unexportedType`, // Typed constant, exported for unexported type. @@ -89,9 +90,10 @@ var tests = []test{ "full package with u", []string{`-u`, p}, []string{ - `const ExportedConstant = 1`, // Simple constant. - `const internalConstant = 2`, // Internal constants. - `func internalFunc\(a int\) bool`, // Internal functions. + `const ExportedConstant = 1`, // Simple constant. + `const internalConstant = 2`, // Internal constants. + `func internalFunc\(a int\) bool`, // Internal functions. + `func ReturnUnexported\(\) unexportedType`, // Function with unexported return type. }, []string{ `Comment about exported constant`, // No comment for simple constant. @@ -221,6 +223,7 @@ var tests = []test{ `func \(ExportedType\) ExportedMethod\(a int\) bool`, `const ExportedTypedConstant ExportedType = iota`, // Must include associated constant. `func ExportedTypeConstructor\(\) \*ExportedType`, // Must include constructor. + `io.Reader.*Comment on line with embedded Reader.`, }, []string{ `unexportedField`, // No unexported field. @@ -228,6 +231,7 @@ var tests = []test{ `Comment about exported method.`, // No comment about exported method. `unexportedMethod`, // No unexported method. `unexportedTypedConstant`, // No unexported constant. + `error`, // No embedded error. }, }, // Type -u with unexported fields. @@ -243,6 +247,8 @@ var tests = []test{ `\*ExportedEmbeddedType.*Comment on line with exported embedded \*field.`, `unexportedType.*Comment on line with unexported embedded field.`, `\*unexportedType.*Comment on line with unexported embedded \*field.`, + `io.Reader.*Comment on line with embedded Reader.`, + `error.*Comment on line with embedded error.`, `func \(ExportedType\) unexportedMethod\(a int\) bool`, `unexportedTypedConstant`, }, @@ -274,6 +280,8 @@ var tests = []test{ `type ExportedInterface interface`, // Interface definition. `Comment before exported method.*\n.*ExportedMethod\(\)` + `.*Comment on line with exported method`, + `io.Reader.*Comment on line with embedded Reader.`, + `error.*Comment on line with embedded error.`, `Has unexported methods`, }, []string{ @@ -293,6 +301,8 @@ var tests = []test{ `Comment before exported method.*\n.*ExportedMethod\(\)` + `.*Comment on line with exported method`, `unexportedMethod\(\).*Comment on line with unexported method.`, + `io.Reader.*Comment on line with embedded Reader.`, + `error.*Comment on line with embedded error.`, }, []string{ `Has unexported methods`, diff --git a/src/cmd/doc/pkg.go b/src/cmd/doc/pkg.go index efd681d514..defddfd74a 100644 --- a/src/cmd/doc/pkg.go +++ b/src/cmd/doc/pkg.go @@ -317,7 +317,9 @@ func (pkg *Package) funcSummary(funcs []*doc.Func, showConstructors bool) { isConstructor = make(map[*doc.Func]bool) for _, typ := range pkg.doc.Types { for _, constructor := range typ.Funcs { - isConstructor[constructor] = true + if isExported(typ.Name) { + isConstructor[constructor] = true + } } } } @@ -494,14 +496,19 @@ func trimUnexportedElems(spec *ast.TypeSpec) { } switch typ := spec.Type.(type) { case *ast.StructType: - typ.Fields = trimUnexportedFields(typ.Fields, "fields") + typ.Fields = trimUnexportedFields(typ.Fields, false) case *ast.InterfaceType: - typ.Methods = trimUnexportedFields(typ.Methods, "methods") + typ.Methods = trimUnexportedFields(typ.Methods, true) } } // trimUnexportedFields returns the field list trimmed of unexported fields. -func trimUnexportedFields(fields *ast.FieldList, what string) *ast.FieldList { +func trimUnexportedFields(fields *ast.FieldList, isInterface bool) *ast.FieldList { + what := "methods" + if !isInterface { + what = "fields" + } + trimmed := false list := make([]*ast.Field, 0, len(fields.List)) for _, field := range fields.List { @@ -511,12 +518,23 @@ func trimUnexportedFields(fields *ast.FieldList, what string) *ast.FieldList { // Nothing else is allowed. switch ident := field.Type.(type) { case *ast.Ident: + if isInterface && ident.Name == "error" && ident.Obj == nil { + // For documentation purposes, we consider the builtin error + // type special when embedded in an interface, such that it + // always gets shown publicly. + list = append(list, field) + continue + } names = []*ast.Ident{ident} case *ast.StarExpr: // Must have the form *identifier. - if ident, ok := ident.X.(*ast.Ident); ok { + // This is only valid on embedded types in structs. + if ident, ok := ident.X.(*ast.Ident); ok && !isInterface { names = []*ast.Ident{ident} } + case *ast.SelectorExpr: + // An embedded type may refer to a type in another package. + names = []*ast.Ident{ident.Sel} } if names == nil { // Can only happen if AST is incorrect. Safe to continue with a nil list. diff --git a/src/cmd/doc/testdata/pkg.go b/src/cmd/doc/testdata/pkg.go index 5f79414b33..6a52ac2f65 100644 --- a/src/cmd/doc/testdata/pkg.go +++ b/src/cmd/doc/testdata/pkg.go @@ -66,6 +66,8 @@ type ExportedType struct { *ExportedEmbeddedType // Comment on line with exported embedded *field. unexportedType // Comment on line with unexported embedded field. *unexportedType // Comment on line with unexported embedded *field. + io.Reader // Comment on line with embedded Reader. + error // Comment on line with embedded error. } // Comment about exported method. @@ -96,6 +98,8 @@ type ExportedInterface interface { // Comment before exported method. ExportedMethod() // Comment on line with exported method. unexportedMethod() // Comment on line with unexported method. + io.Reader // Comment on line with embedded Reader. + error // Comment on line with embedded error. } // Comment about unexported type. @@ -119,3 +123,6 @@ const unexportedTypedConstant unexportedType = 1 // In a separate section to tes // For case matching. const CaseMatch = 1 const Casematch = 2 + +func ReturnUnexported() unexportedType { return 0 } +func ReturnExported() ExportedType { return ExportedType{} } diff --git a/src/runtime/sys_darwin_386.s b/src/runtime/sys_darwin_386.s index 83f4709f38..b5e65e6869 100644 --- a/src/runtime/sys_darwin_386.s +++ b/src/runtime/sys_darwin_386.s @@ -196,15 +196,16 @@ timeloop: systime: // Fall back to system call (usually first call in this thread) - LEAL 12(SP), AX // must be non-nil, unused + LEAL 16(SP), AX // must be non-nil, unused MOVL AX, 4(SP) MOVL $0, 8(SP) // time zone pointer + MOVL $0, 12(SP) // required as of Sierra; Issue 16570 MOVL $116, AX INT $0x80 CMPL AX, $0 JNE inreg - MOVL 12(SP), AX - MOVL 16(SP), DX + MOVL 16(SP), AX + MOVL 20(SP), DX inreg: // sec is in AX, usec in DX // convert to DX:AX nsec diff --git a/src/runtime/sys_darwin_amd64.s b/src/runtime/sys_darwin_amd64.s index e4837ce291..ea2cc068f6 100644 --- a/src/runtime/sys_darwin_amd64.s +++ b/src/runtime/sys_darwin_amd64.s @@ -157,6 +157,7 @@ systime: // Fall back to system call (usually first call in this thread). MOVQ SP, DI MOVQ $0, SI + MOVQ $0, DX // required as of Sierra; Issue 16570 MOVL $(0x2000000+116), AX SYSCALL CMPQ AX, $0 |