sink parameter inference for types that have destructors (#13544)
* ensure capitalize doesn't take an inferred sink parameter * sink parameter inference: first version, for now disabled. Changed that sink parameters can be consumed multiple times in order to adhere to our spec. * sink inference can now be disabled with .nosinks; sometimes for proc type interop this is required * fixes yet another critical DFA bug * better implementation that also understands if expressions etc * document sink parameter inference and allow for global disabling
This commit is contained in:
parent
614fb7567c
commit
a0eca75182
19 changed files with 158 additions and 28 deletions
|
|
@ -701,7 +701,7 @@ proc capitalize*(s: string): string {.noSideEffect, procvar,
|
|||
doAssert capitalize("βeta") == "Βeta"
|
||||
|
||||
if len(s) == 0:
|
||||
return s
|
||||
return ""
|
||||
var
|
||||
rune: Rune
|
||||
i = 0
|
||||
|
|
|
|||
|
|
@ -15,8 +15,10 @@ proc `$`(info: InstantiationInfo): string =
|
|||
|
||||
# ---------------------------------------------------------------------------
|
||||
|
||||
when not defined(nimHasSinkInference):
|
||||
{.pragma: nosinks.}
|
||||
|
||||
proc raiseAssert*(msg: string) {.noinline, noreturn.} =
|
||||
proc raiseAssert*(msg: string) {.noinline, noreturn, nosinks.} =
|
||||
sysFatal(AssertionError, msg)
|
||||
|
||||
proc failedAssertImpl*(msg: string) {.raises: [], tags: [].} =
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue