summary refs log tree commit diff stats
path: root/compiler/nim.nim
diff options
context:
space:
mode:
authorTimothee Cour <timothee.cour2@gmail.com>2019-12-19 14:53:01 +0100
committerAndreas Rumpf <rumpf_a@web.de>2019-12-19 14:53:01 +0100
commit206a4cee7787af34865b07ff078df33967af184d (patch)
treea1239457e096a8bc47f919aa51fdee96ffb72a53 /compiler/nim.nim
parentcb0a20b9b4521be066f5878f77c224540f73f779 (diff)
downloadNim-206a4cee7787af34865b07ff078df33967af184d.tar.gz
fix cmdline bugs affecting nimBetterRun correctness (#12933) [backport]
Diffstat (limited to 'compiler/nim.nim')
-rw-r--r--compiler/nim.nim18
1 files changed, 15 insertions, 3 deletions
diff --git a/compiler/nim.nim b/compiler/nim.nim
index ec7e8b8dc..cc1dc2fe7 100644
--- a/compiler/nim.nim
+++ b/compiler/nim.nim
@@ -40,19 +40,31 @@ proc prependCurDir(f: AbsoluteFile): AbsoluteFile =
   else:
     result = f
 
+proc addCmdPrefix*(result: var string, kind: CmdLineKind) =
+  # consider moving this to std/parseopt
+  case kind
+  of cmdLongOption: result.add "--"
+  of cmdShortOption: result.add "-"
+  of cmdArgument, cmdEnd: discard
+
 proc processCmdLine(pass: TCmdLinePass, cmd: string; config: ConfigRef) =
   var p = parseopt.initOptParser(cmd)
   var argsCount = 0
+
+  config.commandLine.setLen 0
+    # bugfix: otherwise, config.commandLine ends up duplicated
+
   while true:
     parseopt.next(p)
     case p.kind
     of cmdEnd: break
     of cmdLongOption, cmdShortOption:
       config.commandLine.add " "
-      config.commandLine.add p.key
+      config.commandLine.addCmdPrefix p.kind
+      config.commandLine.add p.key.quoteShell # quoteShell to be future proof
       if p.val.len > 0:
         config.commandLine.add ':'
-        config.commandLine.add p.val
+        config.commandLine.add p.val.quoteShell
 
       if p.key == " ":
         p.key = "-"
@@ -61,7 +73,7 @@ proc processCmdLine(pass: TCmdLinePass, cmd: string; config: ConfigRef) =
         processSwitch(pass, p, config)
     of cmdArgument:
       config.commandLine.add " "
-      config.commandLine.add p.key
+      config.commandLine.add p.key.quoteShell
       if processArgument(pass, p, argsCount, config): break
   if pass == passCmd2:
     if {optRun, optWasNimscript} * config.globalOptions == {} and