mirror of
https://github.com/golang/go
synced 2024-11-14 19:50:21 -07:00
go/types, types2: refactor Checker.rangeStmt for clarity
Change-Id: I0c2f921389416ab222b84f77699fd4b3246ef0e0 Reviewed-on: https://go-review.googlesource.com/c/go/+/581776 Auto-Submit: Robert Griesemer <gri@google.com> Reviewed-by: Robert Griesemer <gri@google.com> LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com> Reviewed-by: Robert Findley <rfindley@google.com>
This commit is contained in:
parent
a4031ea1f5
commit
fd99157f9d
@ -923,19 +923,26 @@ func (check *Checker) rangeStmt(inner stmtContext, s *syntax.ForStmt, rclause *s
|
||||
check.errorf(lhs, InvalidSyntaxTree, "cannot declare %s", lhs)
|
||||
obj = NewVar(lhs.Pos(), check.pkg, "_", nil) // dummy variable
|
||||
}
|
||||
assert(obj.typ == nil)
|
||||
|
||||
// initialize lhs iteration variable, if any
|
||||
typ := rhs[i]
|
||||
if typ == nil {
|
||||
obj.typ = Typ[Invalid]
|
||||
obj.used = true // don't complain about unused variable
|
||||
continue
|
||||
}
|
||||
|
||||
// initialize lhs variable
|
||||
if constIntRange {
|
||||
check.initVar(obj, &x, "range clause")
|
||||
} else if typ := rhs[i]; typ != nil {
|
||||
} else {
|
||||
x.mode = value
|
||||
x.expr = lhs // we don't have a better rhs expression to use here
|
||||
x.typ = typ
|
||||
check.initVar(obj, &x, "assignment") // error is on variable, use "assignment" not "range clause"
|
||||
} else {
|
||||
obj.typ = Typ[Invalid]
|
||||
obj.used = true // don't complain about unused variable
|
||||
}
|
||||
assert(obj.typ != nil)
|
||||
}
|
||||
|
||||
// declare variables
|
||||
@ -954,9 +961,15 @@ func (check *Checker) rangeStmt(inner stmtContext, s *syntax.ForStmt, rclause *s
|
||||
continue
|
||||
}
|
||||
|
||||
// assign to lhs iteration variable, if any
|
||||
typ := rhs[i]
|
||||
if typ == nil {
|
||||
continue
|
||||
}
|
||||
|
||||
if constIntRange {
|
||||
check.assignVar(lhs, nil, &x, "range clause")
|
||||
} else if typ := rhs[i]; typ != nil {
|
||||
} else {
|
||||
x.mode = value
|
||||
x.expr = lhs // we don't have a better rhs expression to use here
|
||||
x.typ = typ
|
||||
|
@ -923,19 +923,26 @@ func (check *Checker) rangeStmt(inner stmtContext, s *ast.RangeStmt) {
|
||||
check.errorf(lhs, InvalidSyntaxTree, "cannot declare %s", lhs)
|
||||
obj = NewVar(lhs.Pos(), check.pkg, "_", nil) // dummy variable
|
||||
}
|
||||
assert(obj.typ == nil)
|
||||
|
||||
// initialize lhs iteration variable, if any
|
||||
typ := rhs[i]
|
||||
if typ == nil {
|
||||
obj.typ = Typ[Invalid]
|
||||
obj.used = true // don't complain about unused variable
|
||||
continue
|
||||
}
|
||||
|
||||
// initialize lhs variable
|
||||
if constIntRange {
|
||||
check.initVar(obj, &x, "range clause")
|
||||
} else if typ := rhs[i]; typ != nil {
|
||||
} else {
|
||||
x.mode = value
|
||||
x.expr = lhs // we don't have a better rhs expression to use here
|
||||
x.typ = typ
|
||||
check.initVar(obj, &x, "assignment") // error is on variable, use "assignment" not "range clause"
|
||||
} else {
|
||||
obj.typ = Typ[Invalid]
|
||||
obj.used = true // don't complain about unused variable
|
||||
}
|
||||
assert(obj.typ != nil)
|
||||
}
|
||||
|
||||
// declare variables
|
||||
@ -954,9 +961,15 @@ func (check *Checker) rangeStmt(inner stmtContext, s *ast.RangeStmt) {
|
||||
continue
|
||||
}
|
||||
|
||||
// assign to lhs iteration variable, if any
|
||||
typ := rhs[i]
|
||||
if typ == nil {
|
||||
continue
|
||||
}
|
||||
|
||||
if constIntRange {
|
||||
check.assignVar(lhs, nil, &x, "range clause")
|
||||
} else if typ := rhs[i]; typ != nil {
|
||||
} else {
|
||||
x.mode = value
|
||||
x.expr = lhs // we don't have a better rhs expression to use here
|
||||
x.typ = typ
|
||||
|
Loading…
Reference in New Issue
Block a user