add compiler/debugutils.nim to help debugging compiler (#17652)

* add compiler/debugutils.nim

* address comments
This commit is contained in:
Timothee Cour
2021-04-06 13:01:34 -07:00
committed by GitHub
parent 020c0a3344
commit 6ab5816866
2 changed files with 35 additions and 7 deletions

19
compiler/debugutils.nim Normal file
View File

@@ -0,0 +1,19 @@
##[
Utilities to help with debugging nim compiler.
Experimental API, subject to change.
]##
import options
var conf0: ConfigRef
proc onNewConfigRef*(conf: ConfigRef) {.inline.} =
## Caches `conf`, which can be retrieved with `getConfigRef`.
## This avoids having to forward `conf` all the way down the call chain to
## procs that need it during a debugging session.
conf0 = conf
proc getConfigRef*(): ConfigRef =
## nil, if -d:nimDebugUtils wasn't specified
result = conf0

View File

@@ -446,6 +446,10 @@ proc newProfileData(): ProfileData =
const foreignPackageNotesDefault* = {
hintProcessing, warnUnknownMagic, hintQuitCalled, hintExecuting, hintUser, warnUser}
proc isDefined*(conf: ConfigRef; symbol: string): bool
import debugutils
proc newConfigRef*(): ConfigRef =
result = ConfigRef(
selectedGC: gcRefc,
@@ -504,16 +508,21 @@ proc newConfigRef*(): ConfigRef =
# enable colors by default on terminals
if terminal.isatty(stderr):
incl(result.globalOptions, optUseColors)
when defined(nimDebugUtils):
onNewConfigRef(result)
proc newPartialConfigRef*(): ConfigRef =
## create a new ConfigRef that is only good enough for error reporting.
result = ConfigRef(
selectedGC: gcRefc,
verbosity: 1,
options: DefaultOptions,
globalOptions: DefaultGlobalOptions,
foreignPackageNotes: foreignPackageNotesDefault,
notes: NotesVerbosity[1], mainPackageNotes: NotesVerbosity[1])
when defined(nimDebugUtils):
result = getConfigRef()
else:
result = ConfigRef(
selectedGC: gcRefc,
verbosity: 1,
options: DefaultOptions,
globalOptions: DefaultGlobalOptions,
foreignPackageNotes: foreignPackageNotesDefault,
notes: NotesVerbosity[1], mainPackageNotes: NotesVerbosity[1])
proc cppDefine*(c: ConfigRef; define: string) =
c.cppDefines.incl define