diff options
author | ringabout <43030857+ringabout@users.noreply.github.com> | 2023-10-11 19:27:22 +0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-10-11 13:27:22 +0200 |
commit | 14d25eedfd5ada29fcd3690919e40623563b98fa (patch) | |
tree | 1473a130ee2a817c747ef9ab89c5ab07e0bed4d5 | |
parent | 2cf214d6d46d11024e6420520e39eed779da284e (diff) | |
download | Nim-14d25eedfd5ada29fcd3690919e40623563b98fa.tar.gz |
suppress incorrect var T destructor warnings for newFinalizer in stdlib (#22810)
in `std/nre` ```nim proc initRegex(pattern: string, flags: int, study = true): Regex = new(result, destroyRegex) ``` gives incorrect warnings like ``` C:\Users\blue\Documents\Nim\lib\impure\nre.nim(252, 6) Error: A custom '=destroy' hook which takes a 'var T' parameter is deprecated; it should take a 'T' parameter [Deprecated ```
-rw-r--r-- | compiler/semmagic.nim | 4 | ||||
-rw-r--r-- | compiler/semstmts.nim | 4 |
2 files changed, 5 insertions, 3 deletions
diff --git a/compiler/semmagic.nim b/compiler/semmagic.nim index b5990161e..6f2ddd95a 100644 --- a/compiler/semmagic.nim +++ b/compiler/semmagic.nim @@ -526,7 +526,9 @@ proc semNewFinalize(c: PContext; n: PNode): PNode = selfPtr.add transFormedSym.ast[bodyPos][1] selfPtr.typ = selfSymbolType transFormedSym.ast[bodyPos][1] = c.semExpr(c, selfPtr) - bindTypeHook(c, transFormedSym, n, attachedDestructor) + # TODO: suppress var destructor warnings; if newFinalizer is not + # TODO: deprecated, try to implement plain T destructor + bindTypeHook(c, transFormedSym, n, attachedDestructor, suppressVarDestructorWarning = true) result = addDefaultFieldForNew(c, n) proc semPrivateAccess(c: PContext, n: PNode): PNode = diff --git a/compiler/semstmts.nim b/compiler/semstmts.nim index 2df1c42b3..a4de874ba 100644 --- a/compiler/semstmts.nim +++ b/compiler/semstmts.nim @@ -1904,7 +1904,7 @@ proc bindDupHook(c: PContext; s: PSym; n: PNode; op: TTypeAttachedOp) = incl(s.flags, sfUsed) incl(s.flags, sfOverridden) -proc bindTypeHook(c: PContext; s: PSym; n: PNode; op: TTypeAttachedOp) = +proc bindTypeHook(c: PContext; s: PSym; n: PNode; op: TTypeAttachedOp; suppressVarDestructorWarning = false) = let t = s.typ var noError = false let cond = case op @@ -1923,7 +1923,7 @@ proc bindTypeHook(c: PContext; s: PSym; n: PNode; op: TTypeAttachedOp) = elif obj.kind == tyGenericInvocation: obj = obj[0] else: break if obj.kind in {tyObject, tyDistinct, tySequence, tyString}: - if op == attachedDestructor and t[1].kind == tyVar: + if (not suppressVarDestructorWarning) and op == attachedDestructor and t[1].kind == tyVar: message(c.config, n.info, warnDeprecated, "A custom '=destroy' hook which takes a 'var T' parameter is deprecated; it should take a 'T' parameter") obj = canonType(c, obj) let ao = getAttachedOp(c.graph, obj, op) |