Tests of reduction of calls to multi-statement bodies. | |
a1: reduced to a block with a parameter binding decl. | |
(Parameter x can't be substituted by z without a shadowing conflict.) | |
a2: reduced with parameter substitution (no shadowing). | |
a3: literalized, because of the return statement. | |
-- go.mod -- | |
module testdata | |
go 1.12 | |
-- a/a1.go -- | |
package a | |
func _() { | |
z := 1 | |
f(z, 2) //@ inline(re"f", out1) | |
} | |
func f(x, y int) { | |
z := 1 | |
print(x + y + z) | |
} | |
-- out1 -- | |
package a | |
func _() { | |
z := 1 | |
{ | |
var x int = z | |
z := 1 | |
print(x + 2 + z) | |
} //@ inline(re"f", out1) | |
} | |
func f(x, y int) { | |
z := 1 | |
print(x + y + z) | |
} | |
-- a/a2.go -- | |
package a | |
func _() { | |
a := 1 | |
f(a, 2) //@ inline(re"f", out2) | |
} | |
-- out2 -- | |
package a | |
func _() { | |
a := 1 | |
z := 1 | |
print(a + 2 + z) //@ inline(re"f", out2) | |
} | |
-- a/a3.go -- | |
package a | |
func _() { | |
a := 1 | |
g(a, 2) //@ inline(re"g", out3) | |
} | |
func g(x, y int) int { | |
z := 1 | |
return x + y + z | |
} | |
-- out3 -- | |
package a | |
func _() { | |
a := 1 | |
func() int { z := 1; return a + 2 + z }() //@ inline(re"g", out3) | |
} | |
func g(x, y int) int { | |
z := 1 | |
return x + y + z | |
} |