1
0
Fork 0
mirror of git://git.code.sf.net/p/cdesktopenv/code synced 2025-02-15 04:32:24 +00:00

Fix disabling SHOPT_FIXEDARRAY (re: 2182ecfa)

It was easier than expected to fix this one. The many regression
test failures caused by disabling it were all due to one bug:
'typeset -p' output broke when building without this option.

src/cmd/ksh93/sh/nvtree.c: nv_attribute():
- In this function to print the attributes of a name-value pair,
  move four lines of code out of #if SHOPT_FIXEDARRAY...#endif that
  were inadvertently moved into the #if block in ksh93 2012-05-18.
  See the changes to nvtree.c in this multishell repo commit:
  https://github.com/multishell/ksh93/commit/aabab56a

src/cmd/ksh93/data/builtins.c:
- Update/rewrite 'typeset -a' documentation.
- Make it adapt to SHOPT_FIXEDARRAY.
- Fix a few typos.

src/cmd/ksh93/tests/arrays2.sh:
- Only one regression test needs a SHOPT_FIXEDARRAY check.

.github/workflows/ci.yml:
- Disable SHOPT_FIXEDARRAY when regression-testing without SHOPTs.
- Enable xtrace, add ':' commands for traced comments. This should
  make the CI runner output logs a little more readable.
This commit is contained in:
Martijn Dekker 2021-02-10 02:05:33 +00:00
parent 2182ecfa08
commit 76ea18dcbd
5 changed files with 29 additions and 11 deletions

View file

@ -14,13 +14,19 @@ jobs:
run: bin/package make run: bin/package make
- name: Regression tests - name: Regression tests
run: | run: |
PS4="$PS4 [ci.yml] "
set -o xtrace
export TZ=UTC export TZ=UTC
ulimit -n 1024 ulimit -n 1024
: default regression tests &&
script -q -e -c "bin/shtests" && script -q -e -c "bin/shtests" &&
: regression tests with OS-provided UTF-8 locales &&
LANG=nl_NL.UTF-8 script -q -e -c "bin/shtests --locale --nocompile" && LANG=nl_NL.UTF-8 script -q -e -c "bin/shtests --locale --nocompile" &&
LANG=ja_JP.UTF-8 script -q -e -c "bin/shtests --locale --nocompile" && LANG=ja_JP.UTF-8 script -q -e -c "bin/shtests --locale --nocompile" &&
: disable most SHOPTs, rebuild ksh &&
sed --regexp-extended --in-place=.orig \ sed --regexp-extended --in-place=.orig \
'/^SHOPT (2DMATCH|AUDIT|BGX|BRACEPAT|DYNAMIC|EDPREDICT|ESH|HISTEXPAND|MULTIBYTE|NAMESPACE|OPTIMIZE|SUID_EXEC|STATS|VSH)=/ s/=1/=0/' \ '/^SHOPT (2DMATCH|AUDIT|BGX|BRACEPAT|DYNAMIC|EDPREDICT|ESH|FIXEDARRAY|HISTEXPAND|MULTIBYTE|NAMESPACE|OPTIMIZE|SUID_EXEC|STATS|VSH)=/ s/=1/=0/' \
src/cmd/ksh93/SHOPT.sh && src/cmd/ksh93/SHOPT.sh &&
bin/package make && bin/package make &&
: default regression tests with SHOPTs disabled &&
script -q -e -c "bin/shtests" script -q -e -c "bin/shtests"

View file

@ -1743,7 +1743,7 @@ const char sh_opttrap[] =
; ;
const char sh_opttypeset[] = const char sh_opttypeset[] =
"+[-1c?\n@(#)$Id: typeset (ksh 93u+m) 2021-01-20 $\n]" "+[-1c?\n@(#)$Id: typeset (ksh 93u+m) 2021-02-10 $\n]"
"[--catalog?" SH_DICT "]" "[--catalog?" SH_DICT "]"
"[+NAME?typeset - declare or display variables with attributes]" "[+NAME?typeset - declare or display variables with attributes]"
"[+DESCRIPTION?Without the \b-f\b option, \btypeset\b sets, unsets, " "[+DESCRIPTION?Without the \b-f\b option, \btypeset\b sets, unsets, "
@ -1782,11 +1782,23 @@ const char sh_opttypeset[] =
"[+?\btypeset\b is built in to the shell as a declaration command so that " "[+?\btypeset\b is built in to the shell as a declaration command so that "
"field splitting and pathname expansion are not performed on " "field splitting and pathname expansion are not performed on "
"the arguments. Tilde expansion occurs on \avalue\a.]" "the arguments. Tilde expansion occurs on \avalue\a.]"
"[a]:?[type?Indexed array. This is the default. If \b[\b\atype\a\b]]\b is " "[a]:?[[type]]?Indexed array. This is the default. Subscripts start at 0. "
"specified, each subscript is interpreted as a value of type \atype\a.]" #if SHOPT_FIXEDARRAY
"[b?Each \aname\a may contain binary data. Its value is the mime " "Each simple \aname\a creates a dynamic-size array with arbitrary "
"base64 encoding of the data. It can be used with \b-Z\b, " "dimensions. A \aname\a in the format \aname\a\b[\b\an\a\b]]\b creates "
"to specify fixed sized fields.]" "a fixed-size array and any attempt to access a subscript \an\a or "
"higher is an error. Multidimensional fixed-size arrays "
"\aname\a\b[\b\an1\a\b]][\b\an2\a\b]]\b... are also supported. "
#else
"Each \aname\a creates a dynamic-size array with arbitrary dimensions. "
#endif
"An option value in the format \b[\b\atype\a\b]]\b (including the "
"square brackets), where \atype\a must be the name of an enumeration "
"type created with \benum\b(1), allows enumeration constants to be "
"used as subscripts.]"
"[b?Each \aname\a may contain binary data. Its value is the MIME base64 "
"encoding of the data. This option can be used with \b-Z\b to "
"specify fixed-size fields.]"
"[f?Each of the options and \aname\as refers to a function.]" "[f?Each of the options and \aname\as refers to a function.]"
"[i]#?[base:=10?An integer. \abase\a represents the arithmetic base " "[i]#?[base:=10?An integer. \abase\a represents the arithmetic base "
"from 2 to 64.]" "from 2 to 64.]"
@ -1810,7 +1822,7 @@ const char sh_opttypeset[] =
"value will be displayed as an unsigned integer.]" "value will be displayed as an unsigned integer.]"
"[x?Puts each \aname\a on the export list. See \bexport\b(1). \aname\a " "[x?Puts each \aname\a on the export list. See \bexport\b(1). \aname\a "
"cannot contain a \b.\b.]" "cannot contain a \b.\b.]"
"[A?Associative array. Each \aname\a will converted to an associate " "[A?Associative array. Each \aname\a will converted to an associative "
"array. If a variable already exists, the current value will " "array. If a variable already exists, the current value will "
"become index \b0\b.]" "become index \b0\b.]"
"[C?Compound variable. Each \aname\a will be a compound variable. If " "[C?Compound variable. Each \aname\a will be a compound variable. If "

View file

@ -1460,7 +1460,7 @@ an associative array with the given arguments as subscripts.
For example, For example,
.ce .ce
\f5bar=( [color]=red [shape]=box )\fP \f5bar=( [color]=red [shape]=box )\fP
creates an associate array named \f5bar\fP whose creates an associative array named \f5bar\fP whose
subscripts are \f5color\fP and \f5shape\fP. subscripts are \f5color\fP and \f5shape\fP.
.P .P
The third form for \fIassignment-list\fP is a list of The third form for \fIassignment-list\fP is a list of

View file

@ -524,11 +524,11 @@ void nv_attribute(register Namval_t *np,Sfio_t *out,char *prefix,int noname)
break; break;
} }
} }
#if SHOPT_FIXEDARRAY
if(fp) if(fp)
outtype(np,fp,out,prefix); outtype(np,fp,out,prefix);
if(noname) if(noname)
return; return;
#if SHOPT_FIXEDARRAY
if(fixed) if(fixed)
{ {
sfprintf(out,"%s",nv_name(np)); sfprintf(out,"%s",nv_name(np));

View file

@ -222,7 +222,7 @@ compound cx
typeset -a cx.ar[4][4] typeset -a cx.ar[4][4]
print -v cx > /dev/null print -v cx > /dev/null
print -v cx | read -C l 2> /dev/null || err_exit 'read -C fails from output of print -v' print -v cx | read -C l 2> /dev/null || err_exit 'read -C fails from output of print -v'
[[ ${cx%cx=} == "${l%l=}" ]] || err_exit 'print -v for compound variable with fixed 2d array not working' ((SHOPT_FIXEDARRAY)) && [[ ${cx%cx=} != "${l%l=}" ]] && err_exit 'print -v for compound variable with fixed 2d array not working'
# ====== # ======
# Multidimensional arrays with an unset method shouldn't cause a crash. # Multidimensional arrays with an unset method shouldn't cause a crash.