diff options
author | Timothee Cour <timothee.cour2@gmail.com> | 2019-12-19 14:53:01 +0100 |
---|---|---|
committer | Andreas Rumpf <rumpf_a@web.de> | 2019-12-19 14:53:01 +0100 |
commit | 206a4cee7787af34865b07ff078df33967af184d (patch) | |
tree | a1239457e096a8bc47f919aa51fdee96ffb72a53 /compiler/nim.nim | |
parent | cb0a20b9b4521be066f5878f77c224540f73f779 (diff) | |
download | Nim-206a4cee7787af34865b07ff078df33967af184d.tar.gz |
fix cmdline bugs affecting nimBetterRun correctness (#12933) [backport]
Diffstat (limited to 'compiler/nim.nim')
-rw-r--r-- | compiler/nim.nim | 18 |
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 |