summary refs log tree commit diff stats
diff options
context:
space:
mode:
authorshirleyquirk <31934565+shirleyquirk@users.noreply.github.com>2020-10-27 12:38:46 +0000
committerGitHub <noreply@github.com>2020-10-27 12:38:46 +0000
commit218acfe3671a5a4b7a4c203b6010fdacbe32051c (patch)
treee5eaf744040a27db8f41aecc13fdbd4a1df825d2
parent12143d90c828bb4142751a6511ce790aac8aca51 (diff)
downloadNim-218acfe3671a5a4b7a4c203b6010fdacbe32051c.tar.gz
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
-rw-r--r--lib/pure/algorithm.nim2
-rw-r--r--tests/stdlib/talgorithm.nim18
2 files changed, 19 insertions, 1 deletions
diff --git a/lib/pure/algorithm.nim b/lib/pure/algorithm.nim
index a277d1429..ff835b57a 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 000000000..85ae79219
--- /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()