Commit 9d634e50 authored by Robert Griesemer's avatar Robert Griesemer

gofmt: rewriter matches apply to expressions only

Fixes #1384.

R=rsc
CC=golang-dev
https://golang.org/cl/3912041
parent ee58cc79
...@@ -111,15 +111,18 @@ func match(m map[string]reflect.Value, pattern, val reflect.Value) bool { ...@@ -111,15 +111,18 @@ func match(m map[string]reflect.Value, pattern, val reflect.Value) bool {
if m != nil && pattern.Type() == identType { if m != nil && pattern.Type() == identType {
name := pattern.Interface().(*ast.Ident).Name name := pattern.Interface().(*ast.Ident).Name
if isWildcard(name) { if isWildcard(name) {
if old, ok := m[name]; ok { // wildcards only match expressions
return match(nil, old, val) if _, ok := val.Interface().(ast.Expr); ok {
if old, ok := m[name]; ok {
return match(nil, old, val)
}
m[name] = val
return true
} }
m[name] = val
return true
} }
} }
// Otherwise, the expressions must match recursively. // Otherwise, pattern and val must match recursively.
if pattern == nil || val == nil { if pattern == nil || val == nil {
return pattern == nil && val == nil return pattern == nil && val == nil
} }
...@@ -204,7 +207,7 @@ func subst(m map[string]reflect.Value, pattern reflect.Value, pos reflect.Value) ...@@ -204,7 +207,7 @@ func subst(m map[string]reflect.Value, pattern reflect.Value, pos reflect.Value)
if pos != nil && pattern.Type() == positionType { if pos != nil && pattern.Type() == positionType {
// use new position only if old position was valid in the first place // use new position only if old position was valid in the first place
if old := pattern.Interface().(token.Position); !old.IsValid() { if old := pattern.Interface().(token.Pos); !old.IsValid() {
return pattern return pattern
} }
return pos return pos
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment