mirror of
https://github.com/nim-lang/Nim.git
synced 2026-04-18 21:40:32 +00:00
Merge pull request #8019 from yglukhov/proc-stacktrace
Allow stacktrace and linetrace pragmas on procs
This commit is contained in:
@@ -24,8 +24,8 @@ const
|
||||
wCompilerProc, wCore, wProcVar, wDeprecated, wVarargs, wCompileTime, wMerge,
|
||||
wBorrow, wExtern, wImportCompilerProc, wThread, wImportCpp, wImportObjC,
|
||||
wAsmNoStackFrame, wError, wDiscardable, wNoInit, wCodegenDecl,
|
||||
wGensym, wInject, wRaises, wTags, wLocks, wDelegator, wGcSafe,
|
||||
wOverride, wConstructor, wExportNims, wUsed, wLiftLocals}
|
||||
wGensym, wInject, wRaises, wTags, wLocks, wDelegator, wGcSafe, wOverride,
|
||||
wConstructor, wExportNims, wUsed, wLiftLocals, wStacktrace, wLinetrace}
|
||||
converterPragmas* = procPragmas
|
||||
methodPragmas* = procPragmas+{wBase}-{wImportCpp}
|
||||
templatePragmas* = {wImmediate, wDeprecated, wError, wGensym, wInject, wDirty,
|
||||
|
||||
@@ -1489,6 +1489,7 @@ proc semProcAux(c: PContext, n: PNode, kind: TSymKind,
|
||||
# before compiling the proc body, set as current the scope
|
||||
# where the proc was declared
|
||||
let oldScope = c.currentScope
|
||||
let oldOptions = c.config.options
|
||||
#c.currentScope = s.scope
|
||||
pushOwner(c, s)
|
||||
openScope(c)
|
||||
@@ -1569,6 +1570,8 @@ proc semProcAux(c: PContext, n: PNode, kind: TSymKind,
|
||||
popOwner(c)
|
||||
pushOwner(c, s)
|
||||
s.options = c.config.options
|
||||
c.config.options = oldOptions
|
||||
|
||||
if sfOverriden in s.flags or s.name.s[0] == '=': semOverride(c, s, n)
|
||||
if s.name.s[0] in {'.', '('}:
|
||||
if s.name.s in [".", ".()", ".="] and {destructor, dotOperators} * c.features == {}:
|
||||
|
||||
@@ -119,5 +119,23 @@ when isMainModule:
|
||||
verifyStackTrace expectedStackTrace:
|
||||
foo()
|
||||
|
||||
block:
|
||||
proc bar() {.stackTrace: off.} =
|
||||
proc baz() = # Stack trace should be enabled
|
||||
raiseTestException()
|
||||
baz()
|
||||
|
||||
proc foo() =
|
||||
bar()
|
||||
|
||||
const expectedStackTrace = """
|
||||
tproper_stacktrace.nim(139) tproper_stacktrace
|
||||
tproper_stacktrace.nim(129) foo
|
||||
tproper_stacktrace.nim(125) baz
|
||||
tproper_stacktrace.nim(7) raiseTestException
|
||||
"""
|
||||
|
||||
verifyStackTrace expectedStackTrace:
|
||||
foo()
|
||||
|
||||
echo "ok"
|
||||
|
||||
Reference in New Issue
Block a user