gitlab.com/Raven-IO/raven-delve@v1.22.4/_fixtures/scopetest.go (about) 1 package main 2 3 func f1(x int) {} 4 func f2(x int) {} 5 func f3(x int) {} 6 func f4(x int) {} 7 func f5(x int) {} 8 func f6(x int) {} 9 func gret1(x int) int { 10 return x - 1 11 } 12 13 var boolvar = true 14 15 func gretbool() bool { 16 x := boolvar 17 boolvar = !boolvar 18 return x 19 } 20 func gret3() (int, int, int) { return 0, 1, 2 } 21 22 var v = []int{0, 1, 2} 23 var ch = make(chan int, 1) 24 var floatch = make(chan float64, 1) 25 var iface interface{} = 13 26 27 func TestNestedFor() { 28 a := 0 29 f1(a) // a int = 0 30 for i := 0; i < 5; i++ { 31 f2(i) // a int = 0, i int 32 for i := 1; i < 5; i++ { 33 f3(i) // a int = 0, i int = 0, i int = 1 34 i++ 35 f3(i) 36 } 37 f4(i) // a int = 0, i int = 0 38 } 39 f5(a) 40 } 41 func TestOas2() { 42 if a, b, c := gret3(); a != 1 { 43 f1(a) // a int = 0, b int = 1, c int = 2 44 f1(b) // a int = 0, b int = 1, c int = 2 45 f1(c) // a int = 0, b int = 1, c int = 2 46 } 47 for i, x := range v { 48 f1(i) // i int = 0, x int = 0 49 f1(x) // i int = 0, x int = 0 50 } 51 if a, ok := <-ch; ok { 52 f1(a) // a int = 12, ok bool = true 53 } 54 if a, ok := iface.(int); ok { 55 f1(a) // a int = 13, ok bool = true 56 } 57 } 58 func TestIfElse(x int) { 59 if x := gret1(x); x != 0 { 60 a := 0 61 f1(a) // x int = 2, x int = 1, a int = 0 62 f1(x) 63 } else { 64 b := 1 65 f1(b) // x int = 1, x int = 0, b int = 1 66 f1(x + 1) 67 } 68 } 69 func TestSwitch(in int) { 70 switch x := gret1(in); x { 71 case 0: 72 i := x + 5 73 f1(x) // in int = 1, x int = 0, i int = 5 74 f1(i) 75 case 1: 76 j := x + 10 77 f1(x) 78 f1(j) // in int = 2, x int = 1, j int = 11 79 case 2: 80 k := x + 2 81 f1(x) 82 f1(k) // in int = 3, x int = 2, k int = 4 83 } 84 } 85 func TestTypeSwitch(iface interface{}) { 86 switch x := iface.(type) { 87 case int: 88 f1(x) // iface interface{}, x int = 1 89 case uint8: 90 f1(int(x)) // iface interface{}, x uint8 = 2 91 case float64: 92 f1(int(x) + 1) // iface interface{}, x float64 = 3.0 93 } 94 } 95 func TestSelectScope() { 96 select { 97 case i := <-ch: 98 f1(i) // i int = 13 99 case f := <-floatch: 100 f1(int(f)) // f float64 = 14.0 101 } 102 } 103 func TestBlock() { 104 a := 1 105 f1(a) // a int = 1 106 { 107 b := 2 108 a := 3 109 f1(b) // a int = 1, a int = 3, b int = 2 110 f1(a) // a int = 1, a int = 3, b int = 2 111 } 112 } 113 func TestDiscontiguousRanges() { 114 a := 0 115 f1(a) // a int = 0 116 { 117 b := 0 118 f2(b) // a int = 0, b int = 0 119 if gretbool() { 120 c := 0 121 f3(c) // a int = 0, b int = 0, c int = 0 122 } else { 123 c := 1.1 124 f4(int(c)) // a int = 0, b int = 0, c float64 = 1.1 125 } 126 f5(b) // a int = 0, b int = 0 127 } 128 f6(a) // a int = 0 129 } 130 func TestClosureScope() { 131 a := 1 132 b := 1 133 f := func(c int) { 134 d := 3 135 f1(a) // a int = 1, c int = 3, d int = 3 136 f1(c) 137 f1(d) 138 if e := 3; e != 0 { 139 f1(e) // a int = 1, c int = 3, d int = 3, e int = 3 140 } 141 } 142 f(3) 143 f1(b) 144 } 145 func TestClosureShadow() { 146 v := 1 147 closure := func() { 148 f1(v) // v int = 1 149 v := 2 150 f1(v) // v int = 1, v int = 2 151 for i := 0; i < 1; i++ { 152 f1(v) // v int = 1, v int = 2, i int = 0 153 } 154 } 155 closure() 156 } 157 func main() { 158 ch <- 12 159 TestNestedFor() 160 TestOas2() 161 TestIfElse(2) 162 TestIfElse(1) 163 TestSwitch(3) 164 TestSwitch(2) 165 TestSwitch(1) 166 TestTypeSwitch(1) 167 TestTypeSwitch(uint8(2)) 168 TestTypeSwitch(float64(3.0)) 169 ch <- 13 170 TestSelectScope() 171 floatch <- 14.0 172 TestSelectScope() 173 TestBlock() 174 TestDiscontiguousRanges() 175 TestDiscontiguousRanges() 176 TestClosureScope() 177 TestClosureShadow() 178 }