make two-argument withValues untyped (#26052)

The twp-argument form of `withValue` are expression when the branches
themselves are expressions.
This commit is contained in:
Jacek Sieka
2026-08-03 11:55:32 +02:00
committed by GitHub
parent 234f01510f
commit 8d18bdb3dc
3 changed files with 19 additions and 3 deletions

View File

@@ -95,7 +95,7 @@ template withValue*[A, B](t: var SharedTable[A, B], key: A,
release(t.lock)
template withValue*[A, B](t: var SharedTable[A, B], key: A,
value, body1, body2: untyped) =
value, body1, body2: untyped): untyped =
## Retrieves the value at `t[key]`.
## `value` can be modified in the scope of the `withValue` call.
runnableExamples:

View File

@@ -636,7 +636,7 @@ template withValue*[A, B](t: var Table[A, B], key: A, value, body: untyped) =
body
template withValue*[A, B](t: var Table[A, B], key: A,
value, body1, body2: untyped) =
value, body1, body2: untyped): untyped =
## Retrieves the value at `t[key]`.
##
## `value` can be modified in the scope of the `withValue` call.
@@ -677,7 +677,7 @@ template withValue*[A, B](t: var Table[A, B], key: A,
body2
template withValue*[A, B](t: Table[A, B], key: A,
value, body1, body2: untyped) =
value, body1, body2: untyped): untyped =
## Retrieves the value at `t[key]` if it exists, assigns
## it to the variable `value` and executes `body`
runnableExamples:

View File

@@ -33,6 +33,22 @@ s2[p2] = 45_000
s3[p1] = 30_000
s3[p2] = 45_000
block: # two-argument form of withValue forms expression
block: # Present
let sal = salaries.withValue(p1, sal):
sal[]
do:
0
doAssert sal == 30_000
block: # Missing
let sal = salaries.withValue(Person(), sal):
sal[]
do:
0
doAssert sal == 0
block: # Short form
doAssert salaries.withValue(p1, sal, sal[], 0) == 30_000
block: # Ordered table should preserve order after deletion
var
s4 = initOrderedTable[int, int]()