func mapKeys()

in lib/collections.go [1172:1200]


func mapKeys(val ref.Val) ref.Val {
	mapK, ok := val.(traits.Mapper)
	if !ok {
		return types.ValOrErr(mapK, "no such overload")
	}
	n, ok := mapK.Size().(types.Int)
	if !ok {
		return types.NewErr("unable to get size of map")
	}
	keys := make([]ref.Val, 0, n)
	if mapK.Size() != types.IntZero {
		canSort := true
		it := mapK.Iterator()
		for it.HasNext() == types.True {
			k := it.Next()
			keys = append(keys, k)
			_, ok := k.(traits.Comparer)
			if !ok {
				canSort = false
			}
		}
		if canSort {
			sort.Slice(keys, func(i, j int) bool {
				return keys[i].(traits.Comparer).Compare(keys[j]) == types.Int(-1)
			})
		}
	}
	return types.NewRefValList(types.DefaultTypeAdapter, keys)
}