summaryrefslogtreecommitdiff
path: root/src/cmd/cgo/ast.go
diff options
context:
space:
mode:
Diffstat (limited to 'src/cmd/cgo/ast.go')
-rw-r--r--src/cmd/cgo/ast.go20
1 files changed, 11 insertions, 9 deletions
diff --git a/src/cmd/cgo/ast.go b/src/cmd/cgo/ast.go
index 2eae22aed..46e33686d 100644
--- a/src/cmd/cgo/ast.go
+++ b/src/cmd/cgo/ast.go
@@ -30,7 +30,7 @@ func parse(name string, flags uint) *ast.File {
}
os.Exit(2)
}
- fatal("parsing %s: %s", name, err)
+ fatalf("parsing %s: %s", name, err)
}
return ast1
}
@@ -180,7 +180,7 @@ func (f *File) saveExport(x interface{}, context string) {
return
}
for _, c := range n.Doc.List {
- if string(c.Text[0:9]) != "//export " {
+ if !strings.HasPrefix(string(c.Text), "//export ") {
continue
}
@@ -325,26 +325,28 @@ func (f *File) walk(x interface{}, context string, visit func(*File, interface{}
f.walk(n.Results, "expr", visit)
case *ast.BranchStmt:
case *ast.BlockStmt:
- f.walk(n.List, "stmt", visit)
+ f.walk(n.List, context, visit)
case *ast.IfStmt:
f.walk(n.Init, "stmt", visit)
f.walk(&n.Cond, "expr", visit)
f.walk(n.Body, "stmt", visit)
f.walk(n.Else, "stmt", visit)
case *ast.CaseClause:
- f.walk(n.Values, "expr", visit)
+ if context == "typeswitch" {
+ context = "type"
+ } else {
+ context = "expr"
+ }
+ f.walk(n.List, context, visit)
f.walk(n.Body, "stmt", visit)
case *ast.SwitchStmt:
f.walk(n.Init, "stmt", visit)
f.walk(&n.Tag, "expr", visit)
- f.walk(n.Body, "stmt", visit)
- case *ast.TypeCaseClause:
- f.walk(n.Types, "type", visit)
- f.walk(n.Body, "stmt", visit)
+ f.walk(n.Body, "switch", visit)
case *ast.TypeSwitchStmt:
f.walk(n.Init, "stmt", visit)
f.walk(n.Assign, "stmt", visit)
- f.walk(n.Body, "stmt", visit)
+ f.walk(n.Body, "typeswitch", visit)
case *ast.CommClause:
f.walk(n.Comm, "stmt", visit)
f.walk(n.Body, "stmt", visit)