From edc151fa64290401ad20a7a426525af2711230c3 Mon Sep 17 00:00:00 2001 From: Andreas Rumpf Date: Thu, 20 Jun 2019 19:41:03 +0200 Subject: [PATCH] [other] new experimental pragma .nodestroy for easier custom destructors (cherry picked from commit 55da84e1412fc345217c997c7bab575c00c8532b) --- compiler/pragmas.nim | 9 ++++++--- compiler/wordrecg.nim | 4 ++-- 2 files changed, 8 insertions(+), 5 deletions(-) diff --git a/compiler/pragmas.nim b/compiler/pragmas.nim index 2065f587d9..94e6a4332c 100644 --- a/compiler/pragmas.nim +++ b/compiler/pragmas.nim @@ -25,9 +25,9 @@ const wBorrow, wExtern, wImportCompilerProc, wThread, wImportCpp, wImportObjC, wAsmNoStackFrame, wError, wDiscardable, wNoInit, wCodegenDecl, wGensym, wInject, wRaises, wTags, wLocks, wDelegator, wGcSafe, - wConstructor, wExportNims, wUsed, wLiftLocals, wStacktrace, wLinetrace} - converterPragmas* = procPragmas - methodPragmas* = procPragmas+{wBase}-{wImportCpp} + wConstructor, wExportNims, wUsed, wLiftLocals, wStacktrace, wLinetrace, wNoDestroy} + converterPragmas* = procPragmas - {wNoDestroy} + methodPragmas* = procPragmas+{wBase}-{wImportCpp, wNoDestroy} templatePragmas* = {wDeprecated, wError, wGensym, wInject, wDirty, wDelegator, wExportNims, wUsed, wPragma} macroPragmas* = {FirstCallConv..LastCallConv, wImportc, wExportc, @@ -874,6 +874,9 @@ proc singlePragma(c: PContext, sym: PSym, n: PNode, i: var int, if sym.typ[0] != nil: localError(c.config, sym.ast[paramsPos][0].info, ".noreturn with return type not allowed") + of wNoDestroy: + noVal(c, it) + incl(sym.flags, sfGeneratedOp) of wDynlib: processDynLib(c, it, sym) of wCompilerProc, wCore: diff --git a/compiler/wordrecg.nim b/compiler/wordrecg.nim index ef59fc979d..07921f0b3b 100644 --- a/compiler/wordrecg.nim +++ b/compiler/wordrecg.nim @@ -57,7 +57,7 @@ type wAssertions, wPatterns, wTrMacros, wWarnings, wHints, wOptimization, wRaises, wWrites, wReads, wSize, wEffects, wTags, wDeadCodeElimUnused, # deprecated, dead code elim always happens - wSafecode, wPackage, wNoForward, wReorder, wNoRewrite, + wSafecode, wPackage, wNoForward, wReorder, wNoRewrite, wNoDestroy, wPragma, wCompileTime, wNoInit, wPassc, wPassl, wBorrow, wDiscardable, @@ -148,7 +148,7 @@ const "assertions", "patterns", "trmacros", "warnings", "hints", "optimization", "raises", "writes", "reads", "size", "effects", "tags", "deadcodeelim", # deprecated, dead code elim always happens - "safecode", "package", "noforward", "reorder", "norewrite", + "safecode", "package", "noforward", "reorder", "norewrite", "nodestroy", "pragma", "compiletime", "noinit", "passc", "passl", "borrow", "discardable", "fieldchecks",