diff options
Diffstat (limited to 'src/cmd/compile/internal/noder')
| -rw-r--r-- | src/cmd/compile/internal/noder/writer.go | 26 |
1 files changed, 1 insertions, 25 deletions
diff --git a/src/cmd/compile/internal/noder/writer.go b/src/cmd/compile/internal/noder/writer.go index 79c884c22f..f68a3875df 100644 --- a/src/cmd/compile/internal/noder/writer.go +++ b/src/cmd/compile/internal/noder/writer.go @@ -1448,7 +1448,7 @@ func (w *writer) forStmt(stmt *syntax.ForStmt) { w.convRTTI(src, dstType) } - keyType, valueType := w.p.rangeTypes(rang.X) + keyType, valueType := types2.RangeKeyVal(w.p.typeOf(rang.X)) assign(0, keyType) assign(1, valueType) } @@ -1489,30 +1489,6 @@ func (w *writer) distinctVars(stmt *syntax.ForStmt) bool { return is122 || lv > 0 && lv != 3 } -// rangeTypes returns the types of values produced by ranging over -// expr. -func (pw *pkgWriter) rangeTypes(expr syntax.Expr) (key, value types2.Type) { - typ := pw.typeOf(expr) - switch typ := types2.CoreType(typ).(type) { - case *types2.Pointer: // must be pointer to array - return types2.Typ[types2.Int], types2.CoreType(typ.Elem()).(*types2.Array).Elem() - case *types2.Array: - return types2.Typ[types2.Int], typ.Elem() - case *types2.Slice: - return types2.Typ[types2.Int], typ.Elem() - case *types2.Basic: - if typ.Info()&types2.IsString != 0 { - return types2.Typ[types2.Int], runeTypeName.Type() - } - case *types2.Map: - return typ.Key(), typ.Elem() - case *types2.Chan: - return typ.Elem(), nil - } - pw.fatalf(expr, "unexpected range type: %v", typ) - panic("unreachable") -} - func (w *writer) ifStmt(stmt *syntax.IfStmt) { cond := w.p.staticBool(&stmt.Cond) |
