reorganise c_typeset code, fixing that regression test
also some int→bool while here
This commit is contained in:
parent
828fbed741
commit
3ad04ea095
28
check.t
28
check.t
@ -1,4 +1,4 @@
|
||||
# $MirOS: src/bin/mksh/check.t,v 1.171 2008/04/01 21:07:20 tg Exp $
|
||||
# $MirOS: src/bin/mksh/check.t,v 1.172 2008/04/01 21:39:44 tg Exp $
|
||||
# $OpenBSD: bksl-nl.t,v 1.2 2001/01/28 23:04:56 niklas Exp $
|
||||
# $OpenBSD: history.t,v 1.5 2001/01/28 23:04:56 niklas Exp $
|
||||
# $OpenBSD: read.t,v 1.3 2003/03/10 03:48:16 david Exp $
|
||||
@ -3741,10 +3741,10 @@ stdin:
|
||||
FNORD_B=2
|
||||
FNORD_C=3
|
||||
FNORD_D=4
|
||||
FNORD_E=1
|
||||
FNORD_F=2
|
||||
FNORD_G=3
|
||||
FNORD_H=4
|
||||
FNORD_E=5
|
||||
FNORD_F=6
|
||||
FNORD_G=7
|
||||
FNORD_H=8
|
||||
integer FNORD_E FNORD_F FNORD_G FNORD_H
|
||||
export FNORD_C FNORD_D FNORD_G FNORD_H
|
||||
readonly FNORD_B FNORD_D FNORD_F FNORD_H
|
||||
@ -3761,6 +3761,8 @@ stdin:
|
||||
print FNORD-6
|
||||
typeset -p
|
||||
print FNORD-7
|
||||
typeset -
|
||||
print FNORD-8
|
||||
} | fgrep FNORD
|
||||
expected-stdout:
|
||||
FNORD-0
|
||||
@ -3772,8 +3774,8 @@ expected-stdout:
|
||||
FNORD-2
|
||||
export FNORD_C=3
|
||||
export FNORD_D=4
|
||||
export FNORD_G=3
|
||||
export FNORD_H=4
|
||||
export FNORD_G=7
|
||||
export FNORD_H=8
|
||||
FNORD-3
|
||||
FNORD_B
|
||||
FNORD_D
|
||||
@ -3782,8 +3784,8 @@ expected-stdout:
|
||||
FNORD-4
|
||||
readonly FNORD_B=2
|
||||
readonly FNORD_D=4
|
||||
readonly FNORD_F=2
|
||||
readonly FNORD_H=4
|
||||
readonly FNORD_F=6
|
||||
readonly FNORD_H=8
|
||||
FNORD-5
|
||||
typeset FNORD_A
|
||||
typeset -r FNORD_B
|
||||
@ -3807,10 +3809,10 @@ expected-stdout:
|
||||
FNORD_B=2
|
||||
FNORD_C=3
|
||||
FNORD_D=4
|
||||
FNORD_E=1
|
||||
FNORD_F=2
|
||||
FNORD_G=3
|
||||
FNORD_H=4
|
||||
FNORD_E=5
|
||||
FNORD_F=6
|
||||
FNORD_G=7
|
||||
FNORD_H=8
|
||||
FNORD-8
|
||||
---
|
||||
name: syntax-1
|
||||
|
65
funcs.c
65
funcs.c
@ -5,7 +5,7 @@
|
||||
|
||||
#include "sh.h"
|
||||
|
||||
__RCSID("$MirOS: src/bin/mksh/funcs.c,v 1.72 2008/03/28 18:46:59 tg Exp $");
|
||||
__RCSID("$MirOS: src/bin/mksh/funcs.c,v 1.73 2008/04/01 21:39:45 tg Exp $");
|
||||
|
||||
/* A leading = means assignments before command are kept;
|
||||
* a leading * means a POSIX special builtin;
|
||||
@ -686,32 +686,32 @@ c_typeset(const char **wp)
|
||||
{
|
||||
struct block *l;
|
||||
struct tbl *vp, **p;
|
||||
Tflag fset = 0, fclr = 0;
|
||||
int thing = 0, func = 0, localv = 0;
|
||||
const char *opts = "L#R#UZ#fi#lprtux"; /* see comment below */
|
||||
Tflag fset = 0, fclr = 0, flag;
|
||||
int thing = 0, field, base, optc;
|
||||
const char *opts;
|
||||
const char *fieldstr, *basestr;
|
||||
int field, base;
|
||||
int optc;
|
||||
Tflag flag;
|
||||
int pflag = 0;
|
||||
bool localv = false, func = false, pflag = false, istset = true;
|
||||
|
||||
switch (**wp) {
|
||||
case 'e': /* export */
|
||||
fset |= EXPORT;
|
||||
opts = "p";
|
||||
istset = false;
|
||||
break;
|
||||
case 'r': /* readonly */
|
||||
fset |= RDONLY;
|
||||
opts = "p";
|
||||
istset = false;
|
||||
break;
|
||||
case 's': /* set */
|
||||
/* called with 'typeset -' */
|
||||
break;
|
||||
case 't': /* typeset */
|
||||
localv = 1;
|
||||
localv = true;
|
||||
break;
|
||||
}
|
||||
|
||||
/* see comment below regarding possible opions */
|
||||
opts = istset ? "L#R#UZ#fi#lprtux" : "p";
|
||||
|
||||
fieldstr = basestr = NULL;
|
||||
builtin_opt.flags |= GF_PLUSOPT;
|
||||
/* at&t ksh seems to have 0-9 as options which are multiplied
|
||||
@ -745,7 +745,7 @@ c_typeset(const char **wp)
|
||||
fieldstr = builtin_opt.optarg;
|
||||
break;
|
||||
case 'f':
|
||||
func = 1;
|
||||
func = true;
|
||||
break;
|
||||
case 'i':
|
||||
flag = INTEGER;
|
||||
@ -755,12 +755,12 @@ c_typeset(const char **wp)
|
||||
flag = LCASEV;
|
||||
break;
|
||||
case 'p':
|
||||
/* posix export/readonly -p flag.
|
||||
* typeset -p is the same as typeset (in pdksh);
|
||||
* here for compatibility with ksh93.
|
||||
*/
|
||||
pflag = 1;
|
||||
continue;
|
||||
/* export, readonly: POSIX -p flag */
|
||||
/* typeset: show values as well */
|
||||
pflag = true;
|
||||
if (istset)
|
||||
continue;
|
||||
break;
|
||||
case 'r':
|
||||
flag = RDONLY;
|
||||
break;
|
||||
@ -939,13 +939,32 @@ c_typeset(const char **wp)
|
||||
if ((vp->flag&UCASEV_AL))
|
||||
shprintf("-u ");
|
||||
if ((vp->flag&INT_U))
|
||||
shprintf("-U ");
|
||||
shprintf("%s\n", vp->name);
|
||||
if (vp->flag&ARRAY)
|
||||
break;
|
||||
shf_puts("-U ", shl_stdout);
|
||||
shf_puts(vp->name, shl_stdout);
|
||||
if (pflag) {
|
||||
char *s = str_val(vp);
|
||||
|
||||
shf_putc('=', shl_stdout);
|
||||
/* at&t ksh can't have
|
||||
* justified integers.. */
|
||||
if ((vp->flag &
|
||||
(INTEGER|LJUST|RJUST)) ==
|
||||
INTEGER)
|
||||
shf_puts(s, shl_stdout);
|
||||
else
|
||||
print_value_quoted(s);
|
||||
}
|
||||
shf_putc('\n', shl_stdout);
|
||||
if (vp->flag & ARRAY)
|
||||
break;
|
||||
} else {
|
||||
if (pflag)
|
||||
shprintf("typeset ");
|
||||
shf_puts(istset ?
|
||||
"typeset " :
|
||||
(flag & EXPORT) ?
|
||||
"export " :
|
||||
"readonly ",
|
||||
shl_stdout);
|
||||
if ((vp->flag&ARRAY) && any_set)
|
||||
shprintf("%s[%lu]",
|
||||
vp->name,
|
||||
|
Loading…
x
Reference in New Issue
Block a user