getEnv now supports a 'default' parameter; refs #6019

This commit is contained in:
Andreas Rumpf 2017-10-30 17:21:05 +01:00
commit 0895064983
5 changed files with 12 additions and 5 deletions

View file

@ -37,3 +37,5 @@
This means its results are more precise and it can't run into an infinite loop This means its results are more precise and it can't run into an infinite loop
anymore. anymore.
- Added ``typetraits.$`` as an alias for ``typetraits.name``. - Added ``typetraits.$`` as an alias for ``typetraits.name``.
- ``os.getEnv`` now takes an optional ``default`` parameter that tells ``getEnv``
what to return if the environment variable does not exist.

View file

@ -79,7 +79,7 @@ proc setupVM*(module: PSym; cache: IdentCache; scriptName: string;
setResult(a, osproc.execCmd getString(a, 0)) setResult(a, osproc.execCmd getString(a, 0))
cbconf getEnv: cbconf getEnv:
setResult(a, os.getEnv(a.getString 0)) setResult(a, os.getEnv(a.getString 0, a.getString 1))
cbconf existsEnv: cbconf existsEnv:
setResult(a, os.existsEnv(a.getString 0)) setResult(a, os.existsEnv(a.getString 0))
cbconf dirExists: cbconf dirExists:

View file

@ -47,6 +47,11 @@ template wrap1s_ospaths(op) {.dirty.} =
setResult(a, op(getString(a, 0))) setResult(a, op(getString(a, 0)))
ospathsop op ospathsop op
template wrap2s_ospaths(op) {.dirty.} =
proc `op Wrapper`(a: VmArgs) {.nimcall.} =
setResult(a, op(getString(a, 0), getString(a, 1)))
ospathsop op
template wrap1s_system(op) {.dirty.} = template wrap1s_system(op) {.dirty.} =
proc `op Wrapper`(a: VmArgs) {.nimcall.} = proc `op Wrapper`(a: VmArgs) {.nimcall.} =
setResult(a, op(getString(a, 0))) setResult(a, op(getString(a, 0)))
@ -96,7 +101,7 @@ proc registerAdditionalOps*(c: PCtx) =
wrap1f_math(ceil) wrap1f_math(ceil)
wrap2f_math(fmod) wrap2f_math(fmod)
wrap1s_ospaths(getEnv) wrap2s_ospaths(getEnv)
wrap1s_ospaths(existsEnv) wrap1s_ospaths(existsEnv)
wrap1s_os(dirExists) wrap1s_os(dirExists)
wrap1s_os(fileExists) wrap1s_os(fileExists)

View file

@ -94,7 +94,7 @@ proc findEnvVar(key: string): int =
if startsWith(environment[i], temp): return i if startsWith(environment[i], temp): return i
return -1 return -1
proc getEnv*(key: string): TaintedString {.tags: [ReadEnvEffect].} = proc getEnv*(key: string, default = ""): TaintedString {.tags: [ReadEnvEffect].} =
## Returns the value of the `environment variable`:idx: named `key`. ## Returns the value of the `environment variable`:idx: named `key`.
## ##
## If the variable does not exist, "" is returned. To distinguish ## If the variable does not exist, "" is returned. To distinguish
@ -108,7 +108,7 @@ proc getEnv*(key: string): TaintedString {.tags: [ReadEnvEffect].} =
return TaintedString(substr(environment[i], find(environment[i], '=')+1)) return TaintedString(substr(environment[i], find(environment[i], '=')+1))
else: else:
var env = c_getenv(key) var env = c_getenv(key)
if env == nil: return TaintedString("") if env == nil: return TaintedString(default)
result = TaintedString($env) result = TaintedString($env)
proc existsEnv*(key: string): bool {.tags: [ReadEnvEffect].} = proc existsEnv*(key: string): bool {.tags: [ReadEnvEffect].} =

View file

@ -106,7 +106,7 @@ proc cmpic*(a, b: string): int =
## Compares `a` and `b` ignoring case. ## Compares `a` and `b` ignoring case.
cmpIgnoreCase(a, b) cmpIgnoreCase(a, b)
proc getEnv*(key: string): string {.tags: [ReadIOEffect].} = proc getEnv*(key: string; default = ""): string {.tags: [ReadIOEffect].} =
## Retrieves the environment variable of name `key`. ## Retrieves the environment variable of name `key`.
builtin builtin