summary refs log tree commit diff stats
diff options
context:
space:
mode:
-rw-r--r--compiler/lineinfos.nim3
-rw-r--r--compiler/main.nim28
-rw-r--r--compiler/options.nim2
-rw-r--r--testament/testament.nim10
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,