Add convenience function 'var-ref*'

* geesh/environment.scm (var-ref*): New public function.
* geesh/word.scm (word->qword): Use it to simplify things.
This commit is contained in:
Timothy Sample 2018-07-16 22:48:47 -04:00
parent da1746f2d6
commit 020adfc58b
2 changed files with 8 additions and 2 deletions

View File

@ -23,6 +23,7 @@
make-environment
environment?
var-ref
var-ref*
set-var!
environment->environ))
@ -50,6 +51,11 @@
@var{name} is unset, return @code{#f}."
(assoc-ref (environment-vars env) name))
(define (var-ref* env name)
"Get the value of the variable @var{name} in @var{env}. If
@var{name} is unset return @code{\"\"}."
(or (var-ref env name) ""))
(define (set-var! env name val)
"Set the variable @var{name} to @var{val} in @var{env}."
(set-environment-vars! env (acons name val

View File

@ -112,7 +112,7 @@ and arithmetic substitions using the environment @var{env}."
(('<sh-cmd-sub> . exps)
((eval-cmd-sub) exps))
(('<sh-ref> name)
(or (var-ref env name) ""))
(var-ref* env name))
(('<sh-ref-or> name default)
(or (var-ref env name)
(word->qword env (or default ""))))
@ -150,7 +150,7 @@ and arithmetic substitions using the environment @var{env}."
(('<sh-ref-skip-min> name pattern) (error "Not implemented"))
(('<sh-ref-skip-max> name pattern) (error "Not implemented"))
(('<sh-ref-length> name)
(number->string (string-length (or (var-ref env name) ""))))
(number->string (string-length (var-ref* env name))))
(_ (map (cut word->qword env <>) word))))
(define* (expand-word env word #:key (split? #t) (rhs-tildes? #f))