diff options
-rw-r--r-- | compiler/lineinfos.nim | 3 | ||||
-rw-r--r-- | compiler/main.nim | 28 | ||||
-rw-r--r-- | compiler/options.nim | 2 | ||||
-rw-r--r-- | testament/testament.nim | 10 |
4 files changed, 29 insertions, 14 deletions
diff --git a/compiler/lineinfos.nim b/compiler/lineinfos.nim index ae5709044..c0826bb5c 100644 --- a/compiler/lineinfos.nim +++ b/compiler/lineinfos.nim @@ -97,7 +97,8 @@ const warnCycleCreated: "$1", warnUser: "$1", hintSuccess: "operation successful: $#", - hintSuccessX: "operation successful ($# lines compiled; $# sec total; $#; $#)", + # keep in sync with `pegSuccess` see testament.nim + hintSuccessX: "$loc LOC; $sec sec; $mem; $build build; $project proj; $output out", hintCC: "CC: \'$1\'", # unused hintLineTooLong: "line too long", hintXDeclaredButNotUsed: "'$1' is declared but not used", diff --git a/compiler/main.nim b/compiler/main.nim index 7a78c66ba..700870241 100644 --- a/compiler/main.nim +++ b/compiler/main.nim @@ -355,16 +355,24 @@ proc mainCommand*(graph: ModuleGraph) = if conf.errorCounter == 0 and conf.cmd notin {cmdInterpret, cmdRun, cmdDump}: - when declared(system.getMaxMem): - let usedMem = formatSize(getMaxMem()) & " peakmem" - else: - let usedMem = formatSize(getTotalMem()) - rawMessage(conf, hintSuccessX, [$conf.linesCompiled, - formatFloat(epochTime() - conf.lastCmdTime, ffDecimal, 3), - usedMem, - if isDefined(conf, "danger"): "Dangerous Release Build" - elif isDefined(conf, "release"): "Release Build" - else: "Debug Build"]) + let mem = + when declared(system.getMaxMem): formatSize(getMaxMem()) & " peakmem" + else: formatSize(getTotalMem()) & " totmem" + let loc = $conf.linesCompiled + let build = if isDefined(conf, "danger"): "Dangerous Release" + elif isDefined(conf, "release"): "Release" + else: "Debug" + let sec = formatFloat(epochTime() - conf.lastCmdTime, ffDecimal, 3) + let project = if optListFullPaths in conf.globalOptions: $conf.projectFull else: $conf.projectName + let output = if optListFullPaths in conf.globalOptions: $conf.getOutFileFull else: $conf.outFile + rawMessage(conf, hintSuccessX, [ + "loc", loc, + "sec", sec, + "mem", mem, + "build", build, + "project", project, + "output", output, + ]) when PrintRopeCacheStats: echo "rope cache stats: " diff --git a/compiler/options.nim b/compiler/options.nim index 9c17ea1e6..9a0fa45b0 100644 --- a/compiler/options.nim +++ b/compiler/options.nim @@ -284,6 +284,8 @@ type severity: Severity) {.closure, gcsafe.} cppCustomNamespace*: string +proc getOutFileFull*(a: ConfigRef): AbsoluteFile = a.outDir / a.outFile + proc hcrOn*(conf: ConfigRef): bool = return optHotCodeReloading in conf.globalOptions template depConfigFields*(fn) {.dirty.} = diff --git a/testament/testament.nim b/testament/testament.nim index 976218f43..a0486cee9 100644 --- a/testament/testament.nim +++ b/testament/testament.nim @@ -74,11 +74,14 @@ let 'template/generic instantiation' ( ' of `' [^`]+ '`' )? ' from here' .* """ pegOtherError = peg"'Error:' \s* {.*}" - pegSuccess = peg"'Hint: operation successful'.*" pegOfInterest = pegLineError / pegOtherError var gTargets = {low(TTarget)..high(TTarget)} +proc isSuccess(input: string): bool = + # not clear how to do the equivalent of pkg/regex's: re"FOO(.*?)BAR" in pegs + input.startsWith("Hint: ") and input.endsWith("[SuccessX]") + proc normalizeMsg(s: string): string = result = newStringOfCap(s.len+1) for x in splitLines(s): @@ -157,7 +160,7 @@ proc callCompiler(cmdTemplate, filename, options, nimcache: string, elif x =~ pegLineTemplate and err == "": # `tmpl` contains the last template expansion before the error tmpl = x - elif x =~ pegSuccess: + elif x.isSuccess: suc = x elif not running(p): break @@ -170,6 +173,7 @@ proc callCompiler(cmdTemplate, filename, options, nimcache: string, result.tfile = "" result.tline = 0 result.tcolumn = 0 + result.err = reNimcCrash if tmpl =~ pegLineTemplate: result.tfile = extractFilename(matches[0]) result.tline = parseInt(matches[1]) @@ -181,7 +185,7 @@ proc callCompiler(cmdTemplate, filename, options, nimcache: string, result.msg = matches[3] elif err =~ pegOtherError: result.msg = matches[0] - elif suc =~ pegSuccess: + elif suc.isSuccess: result.err = reSuccess proc callCCompiler(cmdTemplate, filename, options: string, |