mirror of
https://github.com/nim-lang/Nim.git
synced 2026-02-13 06:43:52 +00:00
remove conflicting default call in tables.getOrDefault (#24265)
fixes #23587 As explained in the issue, `getOrDefault` has a parameter named `default` that can be a proc after generic instantiation. But the parameter having a proc type [overrides all other overloads](f73e03b132/compiler/semexprs.nim (L1203)) including the magic `system.default` overload and causes a compile error if the proc doesn't match the normal use of `default`. To fix this, the `result = default(B)` initializer call is removed because it's not needed, `result` is always set in `getOrDefaultImpl` when a default value is provided. This is still a suspicious behavior of the compiler but `tables` working has a higher priority. (cherry picked from commit67ea754b7f)
This commit is contained in:
@@ -314,3 +314,18 @@ block countTableWithoutInit:
|
||||
d.inc("f")
|
||||
merge(d, e)
|
||||
doAssert d["f"] == 7
|
||||
|
||||
block: # issue #23587
|
||||
type
|
||||
A = proc ()
|
||||
|
||||
proc main =
|
||||
let repo = initTable[uint32, A]()
|
||||
|
||||
let c1 = repo.getOrDefault(uint32(1), nil)
|
||||
doAssert c1.isNil
|
||||
|
||||
let c2 = repo.getOrDefault(uint32(1), A(nil))
|
||||
doAssert c2.isNil
|
||||
|
||||
main()
|
||||
|
||||
Reference in New Issue
Block a user