summary refs log tree commit diff stats
path: root/compiler/backendpragmas.nim
blob: b18644810ac983419b9cee4e7611e5d37c7dd54a (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
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)