From 218acfe3671a5a4b7a4c203b6010fdacbe32051c Mon Sep 17 00:00:00 2001 From: shirleyquirk <31934565+shirleyquirk@users.noreply.github.com> Date: Tue, 27 Oct 2020 12:38:46 +0000 Subject: [PATCH] fixes #10456,#12928 issues when chaining templates to sortedByIt (#15734) * update c_malloc's to csize_t fix for broken --os:ios * I'm an idiot sorry * Create talgorithm.nim * workaround for #10456 I don't understand the intricacies of how lambdalifting and template expansions interact with lent, so i don't know how to fix the real problem, but this sidesteps whatever issue that is. * working test, use typeof rather than auto --- lib/pure/algorithm.nim | 2 +- tests/stdlib/talgorithm.nim | 18 ++++++++++++++++++ 2 files changed, 19 insertions(+), 1 deletion(-) create mode 100644 tests/stdlib/talgorithm.nim diff --git a/lib/pure/algorithm.nim b/lib/pure/algorithm.nim index a277d14294..ff835b57a0 100644 --- a/lib/pure/algorithm.nim +++ b/lib/pure/algorithm.nim @@ -501,7 +501,7 @@ template sortedByIt*(seq1, op: untyped): untyped = # Nested sort assert people.sortedByIt((it.age, it.name)) == @[(name: "p2", age: 20), (name: "p3", age: 30), (name: "p4", age: 30), (name: "p1", age: 60)] - var result = sorted(seq1, proc(x, y: typeof(seq1[0])): int = + var result = sorted(seq1, proc(x, y: typeof(items(seq1), typeOfIter)): int = var it {.inject.} = x let a = op it = y diff --git a/tests/stdlib/talgorithm.nim b/tests/stdlib/talgorithm.nim new file mode 100644 index 0000000000..85ae792196 --- /dev/null +++ b/tests/stdlib/talgorithm.nim @@ -0,0 +1,18 @@ +discard """ + output:'''@["3", "2", "1"] + ''' +""" +#12928,10456 +import sequtils, strutils, algorithm, json + +proc test() = + try: + let info = parseJson(""" + {"a": ["1", "2", "3"]} + """) + let prefixes = info["a"].getElems().mapIt(it.getStr()).sortedByIt(it).reversed() + echo prefixes + except: + discard + +test()