mirror of
https://github.com/tinygo-org/tinygo.git
synced 2026-08-24 22:39:04 +00:00
compiler: add support for Go 1.23 range-over-func
This commit is contained in:
committed by
Ron Evans
parent
1d1f4fc401
commit
8b626e6ea7
@@ -1963,7 +1963,7 @@ func (b *builder) getValue(expr ssa.Value, pos token.Pos) llvm.Value {
|
|||||||
return value
|
return value
|
||||||
} else {
|
} else {
|
||||||
// indicates a compiler bug
|
// indicates a compiler bug
|
||||||
panic("local has not been parsed: " + expr.String())
|
panic("SSA value not previously found in function: " + expr.String())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+1
-1
@@ -218,7 +218,7 @@ func (c *compilerContext) getFunction(fn *ssa.Function) (llvm.Type, llvm.Value)
|
|||||||
// should be created right away.
|
// should be created right away.
|
||||||
// The exception is the package initializer, which does appear in the
|
// The exception is the package initializer, which does appear in the
|
||||||
// *ssa.Package members and so shouldn't be created here.
|
// *ssa.Package members and so shouldn't be created here.
|
||||||
if fn.Synthetic != "" && fn.Synthetic != "package initializer" && fn.Synthetic != "generic function" {
|
if fn.Synthetic != "" && fn.Synthetic != "package initializer" && fn.Synthetic != "generic function" && fn.Synthetic != "range-over-func yield" {
|
||||||
irbuilder := c.ctx.NewBuilder()
|
irbuilder := c.ctx.NewBuilder()
|
||||||
b := newBuilder(c, irbuilder, fn)
|
b := newBuilder(c, irbuilder, fn)
|
||||||
b.createFunction()
|
b.createFunction()
|
||||||
|
|||||||
@@ -97,6 +97,9 @@ func TestBuild(t *testing.T) {
|
|||||||
if minor >= 22 {
|
if minor >= 22 {
|
||||||
tests = append(tests, "go1.22/")
|
tests = append(tests, "go1.22/")
|
||||||
}
|
}
|
||||||
|
if minor >= 23 {
|
||||||
|
tests = append(tests, "go1.23/")
|
||||||
|
}
|
||||||
|
|
||||||
if *testTarget != "" {
|
if *testTarget != "" {
|
||||||
// This makes it possible to run one specific test (instead of all),
|
// This makes it possible to run one specific test (instead of all),
|
||||||
|
|||||||
Vendored
+3
@@ -0,0 +1,3 @@
|
|||||||
|
module github.com/tinygo-org/tinygo/testdata/go1.23
|
||||||
|
|
||||||
|
go 1.23
|
||||||
Vendored
+18
@@ -0,0 +1,18 @@
|
|||||||
|
package main
|
||||||
|
|
||||||
|
func main() {
|
||||||
|
testFuncRange(counter)
|
||||||
|
}
|
||||||
|
|
||||||
|
func testFuncRange(f func(yield func(int) bool)) {
|
||||||
|
for i := range f {
|
||||||
|
println(i)
|
||||||
|
}
|
||||||
|
println("go1.23 has lift-off!")
|
||||||
|
}
|
||||||
|
|
||||||
|
func counter(yield func(int) bool) {
|
||||||
|
for i := 10; i >= 1; i-- {
|
||||||
|
yield(i)
|
||||||
|
}
|
||||||
|
}
|
||||||
Vendored
+11
@@ -0,0 +1,11 @@
|
|||||||
|
10
|
||||||
|
9
|
||||||
|
8
|
||||||
|
7
|
||||||
|
6
|
||||||
|
5
|
||||||
|
4
|
||||||
|
3
|
||||||
|
2
|
||||||
|
1
|
||||||
|
go1.23 has lift-off!
|
||||||
Reference in New Issue
Block a user