On Wed, Jul 17, 2013 at 5:20 AM, Roland Mainz <[email protected]> wrote:
> On Mon, Jul 15, 2013 at 2:59 AM, David Korn <[email protected]> wrote:
>> cc: [email protected] [email protected]
>> Subject: Re: Re: [ast-users] ksh93 returns "()" for "${a[@]}" if I clear an
>> array with a=( )
>> --------
>>
>> Here is the patch:
>>
>> --- old/sh/name.c Mon Jun 24 15:37:10 2013
>> +++ new/sh/name.c Thu Jul 11 13:50:50 2013
>> @@ -455,7 +457,14 @@
>> if(tp->tre.tretyp==0 && !tp->com.comset &&
>> !tp->com.comarg)
>> {
>> if(!(arg->argflag&ARG_APPEND) &&
>> nv_isattr(np,NV_BINARY|NV_NOFREE|NV_RAW)!=(NV_BINARY|NV_NOFREE|NV_RAW))
>> + {
>> + array = nv_isarray(np);
>> _nv_unset(np,NV_EXPORT);
>> + if(ap && ap->fun)
>> +
>> nv_setarray(np,nv_associative);
>> + else if(ap || array)
>> +
>> nv_onattr(np,NV_ARRAY);
>> + }
>> goto skip;
>> }
>> if(tp->tre.tretyp==TLST || !tp->com.comset
>> || tp->com.comset->argval[0]!='[')
>
> Erm... the patch doesn't seem to work for arrays of user-defined types:
> -- snip --
> $ ksh -c 'typeset -T x_t=( integer i=1 ) ; compound c=( x_t -a ar=(
> (i=2) (i=3) ) ); c.ar=( ) ; print -v c'
> (
> x_t -a ar=(
> [0]=(
> typeset -l -i i=2
> )
> [1]=(
> typeset -l -i i=3
> )
> )
> )
> -- snip --
> ... AFAIK it should print:
> -- snip --
> (
> x_t -a ar
> )
> -- snip --
>
> Same applies to 4D indexed arrays of user-defined types...
Erm... even the plain compound array case doesn't work:
-- snip --
$ ksh -c 'compound c=( compound -A ar=( [0]=(i=2) [1]=(i=3) ) );
c.ar=( ) ; print -v c'
(
typeset -A ar
)
-- snip --
... it should print:
-- snip --
(
typeset -C -A ar
)
-- snip --
----
Bye,
Roland
--
__ . . __
(o.\ \/ /.o) [email protected]
\__\/\/__/ MPEG specialist, C&&JAVA&&Sun&&Unix programmer
/O /==\ O\ TEL +49 641 3992797
(;O/ \/ \O;)
_______________________________________________
ast-developers mailing list
[email protected]
http://lists.research.att.com/mailman/listinfo/ast-developers