mirror of
https://github.com/golang/go
synced 2024-10-02 22:25:08 +00:00
go/types, types2: enable range over int w/o need for goexperiment
For #61405. Change-Id: I047ec31bc36b1707799ffef25506070613477d1f Reviewed-on: https://go-review.googlesource.com/c/go/+/538718 Reviewed-by: Cherry Mui <cherryyz@google.com> Auto-Submit: Robert Griesemer <gri@google.com> TryBot-Result: Gopher Robot <gobot@golang.org> Run-TryBot: Robert Griesemer <gri@google.com> Reviewed-by: Robert Griesemer <gri@google.com>
This commit is contained in:
parent
e5ef484691
commit
11677d983e
|
@ -994,7 +994,7 @@ func rangeKeyVal(typ Type) (key, val Type, cause string, isFunc, ok bool) {
|
|||
if isString(typ) {
|
||||
return Typ[Int], universeRune, "", false, true // use 'rune' name
|
||||
}
|
||||
if buildcfg.Experiment.Range && isInteger(typ) {
|
||||
if isInteger(typ) {
|
||||
return orig, nil, "", false, true
|
||||
}
|
||||
case *Array:
|
||||
|
|
|
@ -979,7 +979,7 @@ func rangeKeyVal(typ Type) (key, val Type, cause string, isFunc, ok bool) {
|
|||
if isString(typ) {
|
||||
return Typ[Int], universeRune, "", false, true // use 'rune' name
|
||||
}
|
||||
if buildcfg.Experiment.Range && isInteger(typ) {
|
||||
if isInteger(typ) {
|
||||
return orig, nil, "", false, true
|
||||
}
|
||||
case *Array:
|
||||
|
|
65
src/internal/types/testdata/spec/range_int.go
vendored
Normal file
65
src/internal/types/testdata/spec/range_int.go
vendored
Normal file
|
@ -0,0 +1,65 @@
|
|||
// Copyright 2023 The Go Authors. All rights reserved.
|
||||
// Use of this source code is governed by a BSD-style
|
||||
// license that can be found in the LICENSE file.
|
||||
|
||||
// This is a subset of the tests in range.go for range over integers,
|
||||
// with extra tests, and without the need for -goexperiment=range.
|
||||
|
||||
package p
|
||||
|
||||
type MyInt int32
|
||||
|
||||
func _() {
|
||||
for range -1 {
|
||||
}
|
||||
for range 0 {
|
||||
}
|
||||
for range 1 {
|
||||
}
|
||||
for range uint8(1) {
|
||||
}
|
||||
for range int64(1) {
|
||||
}
|
||||
for range MyInt(1) {
|
||||
}
|
||||
for range 'x' {
|
||||
}
|
||||
for range 1.0 /* ERROR "cannot range over 1.0 (untyped float constant 1)" */ {
|
||||
}
|
||||
|
||||
var i int
|
||||
var mi MyInt
|
||||
for i := range 10 {
|
||||
_ = i
|
||||
}
|
||||
for i = range 10 {
|
||||
_ = i
|
||||
}
|
||||
for i, j /* ERROR "range over 10 (untyped int constant) permits only one iteration variable" */ := range 10 {
|
||||
_, _ = i, j
|
||||
}
|
||||
for i /* ERROR "cannot use i (value of type MyInt) as int value in assignment" */ = range MyInt(10) {
|
||||
_ = i
|
||||
}
|
||||
for mi := range MyInt(10) {
|
||||
_ = mi
|
||||
}
|
||||
for mi = range MyInt(10) {
|
||||
_ = mi
|
||||
}
|
||||
}
|
||||
|
||||
func _[T int | string](x T) {
|
||||
for range x /* ERROR "cannot range over x (variable of type T constrained by int | string): no core type" */ {
|
||||
}
|
||||
}
|
||||
|
||||
func _[T int | int64](x T) {
|
||||
for range x /* ERROR "cannot range over x (variable of type T constrained by int | int64): no core type" */ {
|
||||
}
|
||||
}
|
||||
|
||||
func _[T ~int](x T) {
|
||||
for range x { // ok
|
||||
}
|
||||
}
|
Loading…
Reference in a new issue