mirror of
https://github.com/nim-lang/Nim.git
synced 2025-12-29 01:14:41 +00:00
89 lines
2.4 KiB
Nim
89 lines
2.4 KiB
Nim
#
|
|
#
|
|
# The Nimrod Compiler
|
|
# (c) Copyright 2013 Andreas Rumpf
|
|
#
|
|
# See the file "copying.txt", included in this
|
|
# distribution, for details about the copyright.
|
|
#
|
|
|
|
# This module handles the conditional symbols.
|
|
|
|
import
|
|
strtabs, platform, strutils, idents
|
|
|
|
# We need to use a PStringTable here as defined symbols are always guaranteed
|
|
# to be style insensitive. Otherwise hell would break lose.
|
|
var gSymbols: PStringTable
|
|
|
|
proc defineSymbol*(symbol: string) =
|
|
gSymbols[symbol] = "true"
|
|
|
|
proc undefSymbol*(symbol: string) =
|
|
gSymbols[symbol] = "false"
|
|
|
|
proc isDefined*(symbol: string): bool =
|
|
if gSymbols.hasKey(symbol):
|
|
result = gSymbols[symbol] == "true"
|
|
|
|
proc isDefined*(symbol: PIdent): bool = isDefined(symbol.s)
|
|
|
|
iterator definedSymbolNames*: string =
|
|
for key, val in pairs(gSymbols):
|
|
if val == "true": yield key
|
|
|
|
proc countDefinedSymbols*(): int =
|
|
result = 0
|
|
for key, val in pairs(gSymbols):
|
|
if val == "true": inc(result)
|
|
|
|
proc initDefines*() =
|
|
gSymbols = newStringTable(modeStyleInsensitive)
|
|
defineSymbol("nimrod") # 'nimrod' is always defined
|
|
# for bootstrapping purposes and old code:
|
|
defineSymbol("nimhygiene")
|
|
defineSymbol("niminheritable")
|
|
defineSymbol("nimmixin")
|
|
defineSymbol("nimeffects")
|
|
defineSymbol("nimbabel")
|
|
defineSymbol("nimcomputedgoto")
|
|
|
|
# add platform specific symbols:
|
|
case targetCPU
|
|
of cpuI386: defineSymbol("x86")
|
|
of cpuIa64: defineSymbol("itanium")
|
|
of cpuAmd64: defineSymbol("x8664")
|
|
else: discard
|
|
case targetOS
|
|
of osDos:
|
|
defineSymbol("msdos")
|
|
of osWindows:
|
|
defineSymbol("mswindows")
|
|
defineSymbol("win32")
|
|
of osLinux, osMorphos, osSkyos, osIrix, osPalmos, osQnx, osAtari, osAix,
|
|
osHaiku:
|
|
# these are all 'unix-like'
|
|
defineSymbol("unix")
|
|
defineSymbol("posix")
|
|
of osSolaris:
|
|
defineSymbol("sunos")
|
|
defineSymbol("unix")
|
|
defineSymbol("posix")
|
|
of osNetbsd, osFreebsd, osOpenbsd:
|
|
defineSymbol("unix")
|
|
defineSymbol("bsd")
|
|
defineSymbol("posix")
|
|
of osMacos:
|
|
defineSymbol("macintosh")
|
|
of osMacosx:
|
|
defineSymbol("macintosh")
|
|
defineSymbol("unix")
|
|
defineSymbol("posix")
|
|
else: discard
|
|
defineSymbol("cpu" & $CPU[targetCPU].bit)
|
|
defineSymbol(normalize(EndianToStr[CPU[targetCPU].endian]))
|
|
defineSymbol(CPU[targetCPU].name)
|
|
defineSymbol(platform.OS[targetOS].name)
|
|
if platform.OS[targetOS].props.contains(ospLacksThreadVars):
|
|
defineSymbol("emulatedthreadvars")
|