summary refs log tree commit diff stats
path: root/compiler/backendpragmas.nim
diff options
context:
space:
mode:
Diffstat (limited to 'compiler/backendpragmas.nim')
-rw-r--r--compiler/backendpragmas.nim25
1 files changed, 25 insertions, 0 deletions
diff --git a/compiler/backendpragmas.nim b/compiler/backendpragmas.nim
new file mode 100644
index 000000000..b18644810
--- /dev/null
+++ b/compiler/backendpragmas.nim
@@ -0,0 +1,25 @@
+import pragmas, options, ast, trees
+
+proc pushBackendOption(optionsStack: var seq[TOptions], options: var TOptions) =
+  optionsStack.add options
+
+proc popBackendOption(optionsStack: var seq[TOptions], options: var TOptions) =
+  options = optionsStack[^1]
+  optionsStack.setLen(optionsStack.len-1)
+
+proc processPushBackendOption*(optionsStack: var seq[TOptions], options: var TOptions,
+                           n: PNode, start: int) =
+  pushBackendOption(optionsStack, options)
+  for i in start..<n.len:
+    let it = n[i]
+    if it.kind in nkPragmaCallKinds and it.len == 2 and it[1].kind == nkIntLit:
+      let sw = whichPragma(it[0])
+      let opts = pragmaToOptions(sw)
+      if opts != {}:
+        if it[1].intVal != 0:
+          options.incl opts
+        else:
+          options.excl opts
+
+template processPopBackendOption*(optionsStack: var seq[TOptions], options: var TOptions) =
+  popBackendOption(optionsStack, options)