lno := setlineno(a)
n.Right = nil
- var v1 *Node
- if n.List.Len() != 0 {
+ var v1, v2 *Node
+ l := n.List.Len()
+ if l > 0 {
v1 = n.List.First()
}
- var v2 *Node
- if n.List.Len() > 1 && !isblank(n.List.Second()) {
+
+ if l > 1 {
v2 = n.List.Second()
}
- if v1 == nil && v2 != nil {
- Fatalf("walkrange: v2 != nil while v1 == nil")
+ if isblank(v2) {
+ v2 = nil
}
- var ifGuard *Node
+ if isblank(v1) && v2 == nil {
+ v1 = nil
+ }
- translatedLoopOp := OFOR
+ if v1 == nil && v2 != nil {
+ Fatalf("walkrange: v2 != nil while v1 == nil")
+ }
// n.List has no meaning anymore, clear it
// to avoid erroneous processing by racewalk.
n.List.Set(nil)
+ var ifGuard *Node
+
+ translatedLoopOp := OFOR
+
var body []*Node
var init []*Node
switch t.Etype {
return c
}
+const alphabet = "abcdefghijklmnopqrstuvwxyz"
+
+func testblankvars() {
+ n := 0
+ for range alphabet {
+ n++
+ }
+ if n != 26 {
+ println("for range: wrong count", n, "want 26")
+ panic("fail")
+ }
+ n = 0
+ for _ = range alphabet {
+ n++
+ }
+ if n != 26 {
+ println("for _ = range: wrong count", n, "want 26")
+ panic("fail")
+ }
+ n = 0
+ for _, _ = range alphabet {
+ n++
+ }
+ if n != 26 {
+ println("for _, _ = range: wrong count", n, "want 26")
+ panic("fail")
+ }
+ s := 0
+ for i, _ := range alphabet {
+ s += i
+ }
+ if s != 325 {
+ println("for i, _ := range: wrong sum", s, "want 325")
+ panic("fail")
+ }
+ r := rune(0)
+ for _, v := range alphabet {
+ r += v
+ }
+ if r != 2847 {
+ println("for _, v := range: wrong sum", r, "want 2847")
+ panic("fail")
+ }
+}
+
func testchan() {
s := ""
for i := range seq('a', 'z') {
s += string(i)
}
- if s != "abcdefghijklmnopqrstuvwxyz" {
+ if s != alphabet {
println("Wanted lowercase alphabet; got", s)
panic("fail")
}
}
if n != 26 {
println("testchan wrong count", n, "want 26")
+ panic("fail")
}
}
}
func main() {
+ testblankvars()
testchan()
testarray()
testarray1()