summary refs log tree commit diff stats
diff options
context:
space:
mode:
authorDominik Picheta <dominikpicheta@googlemail.com>2021-10-13 10:09:45 +0100
committerGitHub <noreply@github.com>2021-10-13 11:09:45 +0200
commit2aa97a228aa3a34b48f1af9901f29379fb131a31 (patch)
treead0e2d5b43c70bd1a54d5bd216b2c33873283c5b
parent0ae2d1ea88fdc7b6910ddbc960c7db086be383e4 (diff)
downloadNim-2aa97a228aa3a34b48f1af9901f29379fb131a31.tar.gz
Removes deprecated {.injectStmt.}. Fixes #18666 (#18984)
-rw-r--r--compiler/ccgcalls.nim1
-rw-r--r--compiler/ccgstmts.nim5
-rw-r--r--compiler/cgen.nim3
-rw-r--r--compiler/cgendata.nim1
-rw-r--r--compiler/pragmas.nim8
-rw-r--r--compiler/wordrecg.nim2
-rw-r--r--lib/system/gc_ms.nim10
-rw-r--r--tests/pragmas/tinjectstmt.nim51
8 files changed, 2 insertions, 79 deletions
diff --git a/compiler/ccgcalls.nim b/compiler/ccgcalls.nim
index f6cc6da74..12f366a53 100644
--- a/compiler/ccgcalls.nim
+++ b/compiler/ccgcalls.nim
@@ -801,6 +801,5 @@ proc genAsgnCall(p: BProc, le, ri: PNode, d: var TLoc) =
     genNamedParamCall(p, ri, d)
   else:
     genPrefixCall(p, le, ri, d)
-  postStmtActions(p)
 
 proc genCall(p: BProc, e: PNode, d: var TLoc) = genAsgnCall(p, nil, e, d)
diff --git a/compiler/ccgstmts.nim b/compiler/ccgstmts.nim
index 6cbff6ee9..559849f0d 100644
--- a/compiler/ccgstmts.nim
+++ b/compiler/ccgstmts.nim
@@ -1509,11 +1509,6 @@ proc genPragma(p: BProc, n: PNode) =
   for it in n.sons:
     case whichPragma(it)
     of wEmit: genEmit(p, it)
-    of wInjectStmt:
-      var p = newProc(nil, p.module)
-      p.options.excl {optLineTrace, optStackTrace}
-      genStmts(p, it[1])
-      p.module.injectStmt = p.s(cpsStmts)
     else: discard
 
 
diff --git a/compiler/cgen.nim b/compiler/cgen.nim
index 43410dc60..412a428da 100644
--- a/compiler/cgen.nim
+++ b/compiler/cgen.nim
@@ -271,9 +271,6 @@ proc genLineDir(p: BProc, t: PNode) =
       linefmt(p, cpsStmts, "nimln_($1, $2);$n",
               [line, quotedFilename(p.config, t.info)])
 
-proc postStmtActions(p: BProc) {.inline.} =
-  p.s(cpsStmts).add(p.module.injectStmt)
-
 proc accessThreadLocalVar(p: BProc, s: PSym)
 proc emulatedThreadVars(conf: ConfigRef): bool {.inline.}
 proc genProc(m: BModule, prc: PSym)
diff --git a/compiler/cgendata.nim b/compiler/cgendata.nim
index 3678adacf..88b8d4090 100644
--- a/compiler/cgendata.nim
+++ b/compiler/cgendata.nim
@@ -170,7 +170,6 @@ type
     labels*: Natural          # for generating unique module-scope names
     extensionLoaders*: array['0'..'9', Rope] # special procs for the
                                              # OpenGL wrapper
-    injectStmt*: Rope
     sigConflicts*: CountTable[SigHash]
     g*: BModuleList
     ndi*: NdiFile
diff --git a/compiler/pragmas.nim b/compiler/pragmas.nim
index e9f52c71f..a6e6131d7 100644
--- a/compiler/pragmas.nim
+++ b/compiler/pragmas.nim
@@ -55,7 +55,7 @@ const
     wDeprecated,
     wFloatChecks, wInfChecks, wNanChecks, wPragma, wEmit, wUnroll,
     wLinearScanEnd, wPatterns, wTrMacros, wEffects, wNoForward, wReorder, wComputedGoto,
-    wInjectStmt, wExperimental, wThis, wUsed, wInvariant, wAssume, wAssert}
+    wExperimental, wThis, wUsed, wInvariant, wAssume, wAssert}
   lambdaPragmas* = {FirstCallConv..LastCallConv,
     wNoSideEffect, wSideEffect, wNoreturn, wNosinks, wDynlib, wHeader,
     wThread, wAsmNoStackFrame,
@@ -1204,12 +1204,6 @@ proc singlePragma(c: PContext, sym: PSym, n: PNode, i: var int,
       of wExportNims:
         if sym == nil: invalidPragma(c, it)
         else: magicsys.registerNimScriptSymbol(c.graph, sym)
-      of wInjectStmt:
-        warningDeprecated(c.config, it.info, "'.injectStmt' pragma is deprecated")
-        if it.kind notin nkPragmaCallKinds or it.len != 2:
-          localError(c.config, it.info, "expression expected")
-        else:
-          it[1] = c.semExpr(c, it[1])
       of wExperimental:
         if not isTopLevel(c):
           localError(c.config, n.info, "'experimental' pragma only valid as toplevel statement or in a 'push' environment")
diff --git a/compiler/wordrecg.nim b/compiler/wordrecg.nim
index 4ba807518..ce06effab 100644
--- a/compiler/wordrecg.nim
+++ b/compiler/wordrecg.nim
@@ -80,7 +80,7 @@ type
     wLocalPassc = "localPassC", wBorrow = "borrow", wDiscardable = "discardable",
     wFieldChecks = "fieldChecks", wSubsChar = "subschar", wAcyclic = "acyclic",
     wShallow = "shallow", wUnroll = "unroll", wLinearScanEnd = "linearScanEnd",
-    wComputedGoto = "computedGoto", wInjectStmt = "injectStmt", wExperimental = "experimental",
+    wComputedGoto = "computedGoto", wExperimental = "experimental",
     wWrite = "write", wGensym = "gensym", wInject = "inject", wDirty = "dirty",
     wInheritable = "inheritable", wThreadVar = "threadvar", wEmit = "emit",
     wAsmNoStackFrame = "asmNoStackFrame", wImplicitStatic = "implicitStatic",
diff --git a/lib/system/gc_ms.nim b/lib/system/gc_ms.nim
index 9e306c497..0675b9f2e 100644
--- a/lib/system/gc_ms.nim
+++ b/lib/system/gc_ms.nim
@@ -428,16 +428,6 @@ proc sweep(gch: var GcHeap) =
         if c.refcount == rcBlack: c.refcount = rcWhite
         else: freeCyclicCell(gch, c)
 
-when false:
-  # meant to be used with the now-deprected `.injectStmt`: {.injectStmt: newGcInvariant().}
-  proc newGcInvariant*() =
-    for x in allObjects(gch.region):
-      if isCell(x):
-        var c = cast[PCell](x)
-        if c.typ == nil:
-          writeStackTrace()
-          quit 1
-
 proc markGlobals(gch: var GcHeap) =
   if gch.gcThreadId == 0:
     when defined(nimTracing):
diff --git a/tests/pragmas/tinjectstmt.nim b/tests/pragmas/tinjectstmt.nim
deleted file mode 100644
index c6256bda6..000000000
--- a/tests/pragmas/tinjectstmt.nim
+++ /dev/null
@@ -1,51 +0,0 @@
-discard """
-  joinable: false
-  output:'''
-onInject: 1
-onInject: 2
-ok0
-ok1
-onInject: 3
-onInject: 4
-onInject: 5
-0
-onInject: 6
-onInject: 7
-onInject: 8
-1
-onInject: 9
-onInject: 10
-onInject: 11
-2
-ok2
-onInject: 12
-'''
-"""
-
-# test {.injectStmt.}
-
-#[
-{.injectStmt.} pragma can be used to inject a statement before every
-other statement in the current module. It's now undocumented and may be removed
-in the future and replaced with something more general and without its limitations.
-(e.g. doesn't work in VM or js backends).
-]#
-
-from system/ansi_c import c_printf
-
-var count = 0
-proc onInject*() =
-  count.inc
-  # echo count # xxx would fail, probably infinite recursion
-  c_printf("onInject: %d\n", cast[int](count))
-
-{.injectStmt: onInject().}
-echo "ok0"
-proc main()=
-  echo "ok1"
-  for a in 0..<3:
-    echo a
-  echo "ok2"
-
-static: main() # xxx injectStmt not honored in VM
-main()