From c39ee7cec035f49579c175966b37e6d12f9c7d1a Mon Sep 17 00:00:00 2001 From: Celestino Amoroso Date: Thu, 23 Apr 2026 22:06:23 +0200 Subject: [PATCH] dict-iterator.go: fixed behaviour of NewDictIterator() with no args --- dict-iterator.go | 64 ++++++++++++++++++++++++++++-------------------- 1 file changed, 38 insertions(+), 26 deletions(-) diff --git a/dict-iterator.go b/dict-iterator.go index 2e1c4a1..adb72ea 100644 --- a/dict-iterator.go +++ b/dict-iterator.go @@ -68,40 +68,52 @@ func (it *DictIterator) makeKeys(m map[any]any, sort sortType) { func NewDictIterator(dict *DictType, args []any) (it *DictIterator, err error) { var sortType = sortTypeNone var s string + var argAny any + it = &DictIterator{a: dict, count: 0, index: -1, keys: nil, iterMode: dictIterModeKeys} if len(args) > 0 { - if s, err = ToGoString(args[0], "sort type"); err == nil { - switch strings.ToLower(s) { - case "a", "asc": - sortType = sortTypeAsc - case "d", "desc": - sortType = sortTypeDesc - case "n", "none", "nosort", "no-sort": - sortType = sortTypeNone - case "", "default": - sortType = sortTypeDefault - default: - err = fmt.Errorf("invalid sort type %q", s) + argAny = args[0] + } else { + argAny = "default" + } + if s, err = ToGoString(argAny, "sort type"); err == nil { + switch strings.ToLower(s) { + case "a", "asc": + sortType = sortTypeAsc + case "d", "desc": + sortType = sortTypeDesc + case "n", "none", "nosort", "no-sort": + sortType = sortTypeNone + case "", "default": + sortType = sortTypeDefault + default: + err = fmt.Errorf("invalid sort type %q", s) + } + + if err == nil { + if len(args) > 1 { + argAny = args[1] + } else { + argAny = "default" } - if err == nil && len(args) > 1 { - if s, err = ToGoString(args[1], "iteration mode"); err == nil { - switch strings.ToLower(s) { - case "k", "key", "keys": - it.iterMode = dictIterModeKeys - case "v", "value", "values": - it.iterMode = dictIterModeValues - case "i", "item", "items": - it.iterMode = dictIterModeItems - case "", "default": - it.iterMode = dictIterModeKeys - default: - err = fmt.Errorf("invalid iteration mode %q", s) - } + if s, err = ToGoString(argAny, "iteration mode"); err == nil { + switch strings.ToLower(s) { + case "k", "key", "keys": + it.iterMode = dictIterModeKeys + case "v", "value", "values": + it.iterMode = dictIterModeValues + case "i", "item", "items": + it.iterMode = dictIterModeItems + case "", "default": + it.iterMode = dictIterModeKeys + default: + err = fmt.Errorf("invalid iteration mode %q", s) } } } } + it.makeKeys(*dict, sortType) return }