Skip to content

Commit abad6b7

Browse files
authored
Merge pull request #203 from jpco/newvars
Update vars so that its option parsing is less "primitive"
2 parents ec37900 + bba138a commit abad6b7

File tree

1 file changed

+29
-28
lines changed

1 file changed

+29
-28
lines changed

initial.es

Lines changed: 29 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -220,9 +220,7 @@ fn cd dir {
220220
}
221221

222222
# The vars function is provided for cultural compatibility with
223-
# rc's whatis when used without arguments. The option parsing
224-
# is very primitive; perhaps es should provide a getopt-like
225-
# builtin.
223+
# rc's whatis when used without arguments.
226224
#
227225
# The options to vars can be partitioned into two categories:
228226
# those which pick variables based on their source (-e for
@@ -237,17 +235,10 @@ fn cd dir {
237235
# unless it is on the noexport list.
238236

239237
fn vars {
240-
# choose default options
241-
if {~ $* -a} {
242-
* = -v -f -s -e -p -i
243-
} {
244-
if {!~ $* -[vfs]} { * = $* -v }
245-
if {!~ $* -[epi]} { * = $* -e }
246-
}
247238
# check args
248239
for (i = $*)
249-
if {!~ $i -[vfsepi]} {
250-
throw error vars illegal option: $i -- usage: vars '-[vfsepia]'
240+
if {!~ $i -*} {
241+
throw error vars illegal option: $i -- usage: vars -[vfsepia]
251242
}
252243
let (
253244
vars = false
@@ -256,34 +247,44 @@ fn vars {
256247
export = false
257248
priv = false
258249
intern = false
250+
all = false
259251
) {
260-
for (i = $*) if (
261-
{~ $i -v} {vars = true}
262-
{~ $i -f} {fns = true}
263-
{~ $i -s} {sets = true}
264-
{~ $i -e} {export = true}
265-
{~ $i -p} {priv = true}
266-
{~ $i -i} {intern = true}
252+
for (a = $*)
253+
for (i = <={%fsplit '' <={~~ $a -*}})
254+
if (
255+
{~ $i v} {vars = true}
256+
{~ $i f} {fns = true}
257+
{~ $i s} {sets = true}
258+
{~ $i e} {export = true}
259+
{~ $i p} {priv = true}
260+
{~ $i i} {intern = true}
261+
{~ $i a} {all = true}
267262
{throw error vars vars: bad option: $i}
268263
)
264+
if {!{$vars || $fns || $sets}} {
265+
vars = true
266+
}
267+
if {!{$export || $priv || $intern}} {
268+
export = true
269+
}
269270
let (
270-
dovar = @ var {
271+
fn dovar var {
271272
# print functions and/or settor vars
272-
if {if {~ $var fn-*} $fns {~ $var set-*} $sets $vars} {
273+
if {$all || if {~ $var fn-*} $fns {~ $var set-*} $sets $vars} {
273274
echo <={%var $var}
274275
}
275276
}
276277
) {
277-
if {$export || $priv} {
278-
for (var = <= $&vars)
278+
if {$all || $export || $priv} {
279+
for (var = <=$&vars)
279280
# if not exported but in priv
280-
if {if {~ $var $noexport} $priv $export} {
281-
$dovar $var
281+
if {$all || if {~ $var $noexport} $priv $export} {
282+
dovar $var
282283
}
283284
}
284-
if {$intern} {
285-
for (var = <= $&internals)
286-
$dovar $var
285+
if {$all || $intern} {
286+
for (var = <=$&internals)
287+
dovar $var
287288
}
288289
}
289290
}

0 commit comments

Comments
 (0)