1 package C1 2 3 import "strings" 4 5 func example() { 6 x := "foo" 7 println(x[:len(x)]) 8 9 // Match, but the transformation is not sound w.r.t. possible side effects. 10 println(strings.Repeat("*", 3)[:len(strings.Repeat("*", 3))]) 11 12 // No match, since second use of wildcard doesn't match first. 13 println(strings.Repeat("*", 3)[:len(strings.Repeat("*", 2))]) 14 15 // Recursive match demonstrating bottom-up rewrite: 16 // only after the inner replacement occurs does the outer syntax match. 17 println((x[:len(x)])[:len(x[:len(x)])]) 18 // -> (x[:len(x)]) 19 // -> x 20 } 21