diff options
author | Andreas Rumpf <rumpf_a@web.de> | 2019-06-20 19:41:03 +0200 |
---|---|---|
committer | Andreas Rumpf <rumpf_a@web.de> | 2019-06-20 19:41:03 +0200 |
commit | 55da84e1412fc345217c997c7bab575c00c8532b (patch) | |
tree | f25aa2da68a347278f2df895c40e542058764617 /compiler | |
parent | f310cf52502fbf7ac27600a06f26fd00d06e0e3a (diff) | |
download | Nim-55da84e1412fc345217c997c7bab575c00c8532b.tar.gz |
[other] new experimental pragma .nodestroy for easier custom destructors
Diffstat (limited to 'compiler')
-rw-r--r-- | compiler/pragmas.nim | 9 | ||||
-rw-r--r-- | compiler/wordrecg.nim | 4 |
2 files changed, 8 insertions, 5 deletions
diff --git a/compiler/pragmas.nim b/compiler/pragmas.nim index 2065f587d..94e6a4332 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 ef59fc979..07921f0b3 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", |