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: 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: 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 $
|
# $OpenBSD: read.t,v 1.3 2003/03/10 03:48:16 david Exp $
|
||||||
@ -3741,10 +3741,10 @@ stdin:
|
|||||||
FNORD_B=2
|
FNORD_B=2
|
||||||
FNORD_C=3
|
FNORD_C=3
|
||||||
FNORD_D=4
|
FNORD_D=4
|
||||||
FNORD_E=1
|
FNORD_E=5
|
||||||
FNORD_F=2
|
FNORD_F=6
|
||||||
FNORD_G=3
|
FNORD_G=7
|
||||||
FNORD_H=4
|
FNORD_H=8
|
||||||
integer FNORD_E FNORD_F FNORD_G FNORD_H
|
integer FNORD_E FNORD_F FNORD_G FNORD_H
|
||||||
export FNORD_C FNORD_D FNORD_G FNORD_H
|
export FNORD_C FNORD_D FNORD_G FNORD_H
|
||||||
readonly FNORD_B FNORD_D FNORD_F FNORD_H
|
readonly FNORD_B FNORD_D FNORD_F FNORD_H
|
||||||
@ -3761,6 +3761,8 @@ stdin:
|
|||||||
print FNORD-6
|
print FNORD-6
|
||||||
typeset -p
|
typeset -p
|
||||||
print FNORD-7
|
print FNORD-7
|
||||||
|
typeset -
|
||||||
|
print FNORD-8
|
||||||
} | fgrep FNORD
|
} | fgrep FNORD
|
||||||
expected-stdout:
|
expected-stdout:
|
||||||
FNORD-0
|
FNORD-0
|
||||||
@ -3772,8 +3774,8 @@ expected-stdout:
|
|||||||
FNORD-2
|
FNORD-2
|
||||||
export FNORD_C=3
|
export FNORD_C=3
|
||||||
export FNORD_D=4
|
export FNORD_D=4
|
||||||
export FNORD_G=3
|
export FNORD_G=7
|
||||||
export FNORD_H=4
|
export FNORD_H=8
|
||||||
FNORD-3
|
FNORD-3
|
||||||
FNORD_B
|
FNORD_B
|
||||||
FNORD_D
|
FNORD_D
|
||||||
@ -3782,8 +3784,8 @@ expected-stdout:
|
|||||||
FNORD-4
|
FNORD-4
|
||||||
readonly FNORD_B=2
|
readonly FNORD_B=2
|
||||||
readonly FNORD_D=4
|
readonly FNORD_D=4
|
||||||
readonly FNORD_F=2
|
readonly FNORD_F=6
|
||||||
readonly FNORD_H=4
|
readonly FNORD_H=8
|
||||||
FNORD-5
|
FNORD-5
|
||||||
typeset FNORD_A
|
typeset FNORD_A
|
||||||
typeset -r FNORD_B
|
typeset -r FNORD_B
|
||||||
@ -3807,10 +3809,10 @@ expected-stdout:
|
|||||||
FNORD_B=2
|
FNORD_B=2
|
||||||
FNORD_C=3
|
FNORD_C=3
|
||||||
FNORD_D=4
|
FNORD_D=4
|
||||||
FNORD_E=1
|
FNORD_E=5
|
||||||
FNORD_F=2
|
FNORD_F=6
|
||||||
FNORD_G=3
|
FNORD_G=7
|
||||||
FNORD_H=4
|
FNORD_H=8
|
||||||
FNORD-8
|
FNORD-8
|
||||||
---
|
---
|
||||||
name: syntax-1
|
name: syntax-1
|
||||||
|
65
funcs.c
65
funcs.c
@ -5,7 +5,7 @@
|
|||||||
|
|
||||||
#include "sh.h"
|
#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 assignments before command are kept;
|
||||||
* a leading * means a POSIX special builtin;
|
* a leading * means a POSIX special builtin;
|
||||||
@ -686,32 +686,32 @@ c_typeset(const char **wp)
|
|||||||
{
|
{
|
||||||
struct block *l;
|
struct block *l;
|
||||||
struct tbl *vp, **p;
|
struct tbl *vp, **p;
|
||||||
Tflag fset = 0, fclr = 0;
|
Tflag fset = 0, fclr = 0, flag;
|
||||||
int thing = 0, func = 0, localv = 0;
|
int thing = 0, field, base, optc;
|
||||||
const char *opts = "L#R#UZ#fi#lprtux"; /* see comment below */
|
const char *opts;
|
||||||
const char *fieldstr, *basestr;
|
const char *fieldstr, *basestr;
|
||||||
int field, base;
|
bool localv = false, func = false, pflag = false, istset = true;
|
||||||
int optc;
|
|
||||||
Tflag flag;
|
|
||||||
int pflag = 0;
|
|
||||||
|
|
||||||
switch (**wp) {
|
switch (**wp) {
|
||||||
case 'e': /* export */
|
case 'e': /* export */
|
||||||
fset |= EXPORT;
|
fset |= EXPORT;
|
||||||
opts = "p";
|
istset = false;
|
||||||
break;
|
break;
|
||||||
case 'r': /* readonly */
|
case 'r': /* readonly */
|
||||||
fset |= RDONLY;
|
fset |= RDONLY;
|
||||||
opts = "p";
|
istset = false;
|
||||||
break;
|
break;
|
||||||
case 's': /* set */
|
case 's': /* set */
|
||||||
/* called with 'typeset -' */
|
/* called with 'typeset -' */
|
||||||
break;
|
break;
|
||||||
case 't': /* typeset */
|
case 't': /* typeset */
|
||||||
localv = 1;
|
localv = true;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* see comment below regarding possible opions */
|
||||||
|
opts = istset ? "L#R#UZ#fi#lprtux" : "p";
|
||||||
|
|
||||||
fieldstr = basestr = NULL;
|
fieldstr = basestr = NULL;
|
||||||
builtin_opt.flags |= GF_PLUSOPT;
|
builtin_opt.flags |= GF_PLUSOPT;
|
||||||
/* at&t ksh seems to have 0-9 as options which are multiplied
|
/* 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;
|
fieldstr = builtin_opt.optarg;
|
||||||
break;
|
break;
|
||||||
case 'f':
|
case 'f':
|
||||||
func = 1;
|
func = true;
|
||||||
break;
|
break;
|
||||||
case 'i':
|
case 'i':
|
||||||
flag = INTEGER;
|
flag = INTEGER;
|
||||||
@ -755,12 +755,12 @@ c_typeset(const char **wp)
|
|||||||
flag = LCASEV;
|
flag = LCASEV;
|
||||||
break;
|
break;
|
||||||
case 'p':
|
case 'p':
|
||||||
/* posix export/readonly -p flag.
|
/* export, readonly: POSIX -p flag */
|
||||||
* typeset -p is the same as typeset (in pdksh);
|
/* typeset: show values as well */
|
||||||
* here for compatibility with ksh93.
|
pflag = true;
|
||||||
*/
|
if (istset)
|
||||||
pflag = 1;
|
continue;
|
||||||
continue;
|
break;
|
||||||
case 'r':
|
case 'r':
|
||||||
flag = RDONLY;
|
flag = RDONLY;
|
||||||
break;
|
break;
|
||||||
@ -939,13 +939,32 @@ c_typeset(const char **wp)
|
|||||||
if ((vp->flag&UCASEV_AL))
|
if ((vp->flag&UCASEV_AL))
|
||||||
shprintf("-u ");
|
shprintf("-u ");
|
||||||
if ((vp->flag&INT_U))
|
if ((vp->flag&INT_U))
|
||||||
shprintf("-U ");
|
shf_puts("-U ", shl_stdout);
|
||||||
shprintf("%s\n", vp->name);
|
shf_puts(vp->name, shl_stdout);
|
||||||
if (vp->flag&ARRAY)
|
if (pflag) {
|
||||||
break;
|
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 {
|
} else {
|
||||||
if (pflag)
|
if (pflag)
|
||||||
shprintf("typeset ");
|
shf_puts(istset ?
|
||||||
|
"typeset " :
|
||||||
|
(flag & EXPORT) ?
|
||||||
|
"export " :
|
||||||
|
"readonly ",
|
||||||
|
shl_stdout);
|
||||||
if ((vp->flag&ARRAY) && any_set)
|
if ((vp->flag&ARRAY) && any_set)
|
||||||
shprintf("%s[%lu]",
|
shprintf("%s[%lu]",
|
||||||
vp->name,
|
vp->name,
|
||||||
|
Loading…
x
Reference in New Issue
Block a user