On Mon, Aug 27, 2012 at 6:28 AM, Roland Mainz <roland.ma...@nrubsig.org> wrote: > On Tue, Aug 14, 2012 at 2:16 AM, Roland Mainz <roland.ma...@nrubsig.org> > wrote: >> On Tue, Aug 7, 2012 at 11:54 PM, David Korn <d...@research.att.com> wrote: >>> cc: g...@research.att.com >>> Subject: Re: >>> =?UTF-8?Q?More_=22fun=22=28=3D=E2=98=A0=29_with_types_and_=28nested=29_namerefs_po?= >>> =?UTF-8?Q?inting_to_type_members?= >>> -------- >>> >>>> namespace xmlfragmentparser >>>> { >>>> typeset -T parser_t=( >>>> ... >>> >>> I found and fixed two bugs. However, with set -o nounset, I get >>> >>> bug[58]: xd.build_context: line 35: .sh.match[2][j]: parameter not set >>> >>> and I do not get the full output. >>> >>> However, if I remove this line, then I get the full output. >>> It appears to be that .sh.match[2][j] is unset. >>> Can you check this and if I am wrong, send me a case that just >>> has the pattern match. >> >> Most of the issues are gone in ksh93v-... >> ... but a slight modification causes it to fail again... ;-( >> >> Example (I've attached it as "ksh93v_typeset_T_nameref_fails001.sh.gz", too): >> -- snip -- >> namespace xmlfragmentparser >> { >> typeset -T parser_t=( >> typeset -a data # "raw" data from .sh.match >> compound -a context # parsed tag data >> >> function build_context >> { >> typeset dummy >> typeset attrdata # data after "<tag" ... >> >> integer i >> for (( i=0 ; i < ${#_.data[@]} ; i++ )) ; do >> nameref currc=_.context[i] # current context >> >> dummy="${_.data[i]/~(El)<([:_[:alnum:]-]+)(.*)>/X}" >> currc.tagname="${.sh.match[1]}" >> attrdata="${.sh.match[2]}" >> >> if [[ "${attrdata}" != ~(Elr)[[:space:]]* ]] ; then >> dummy="${attrdata//~(Ex-p)(?: >> [[:space:]]+ >> ( # four different >> types of name=value syntax >> >> (?:([:_[:alnum:]-]+)=([^\"\'[:space:]]+?))| #x='foo=bar huz=123' >> >> (?:([:_[:alnum:]-]+)=\"([^\"]*?)\")| #x='foo="ba=r o" >> huz=123' >> >> (?:([:_[:alnum:]-]+)=\'([^\']*?)\')| #x="foox huz=123" >> >> (?:([:_[:alnum:]-]+)) #x="foox huz=123" >> ) >> )/D}" >> >> integer j k >> compound -a currc.attrs >> for (( j=0 ; j < ${#.sh.match[0][@]} ; j++ >> )) ; do >> if [[ -v .sh.match[2][j] && -v >> .sh.match[3][j] ]] ; then >> currc.attrs+=( >> name="${.sh.match[2][j]}" value="${.sh.match[3][j]}" ) >> fi ; if [[ -v .sh.match[4][j] && -v >> .sh.match[5][j] ]] ; then >> currc.attrs+=( >> name="${.sh.match[4][j]}" value="${.sh.match[5][j]}" ) >> fi ; if [[ -v .sh.match[6][j] && -v >> .sh.match[7][j] ]] ; then >> currc.attrs+=( >> name="${.sh.match[6][j]}" value="${.sh.match[7][j]}" ) >> fi >> done >> #print -u2 -v currc.attrs >> #print -u2 -v .sh.match >> fi >> done >> return 0 >> } >> ) >> } >> >> function main >> { >> .xmlfragmentparser.parser_t xd # xml document >> xd.data=( "<foo x='1' y='2' />" "<bar a='1' b='2' />" ) >> xd.build_context >> >> print "$xd" >> >> return 0 >> } >> >> # main >> set -o nounset >> main >> >> #EOF. >> -- snip -- >> ... should AFAIK print something like this: >> -- snip -- >> ( >> typeset -a data=( >> $'<foo x=\'1\' y=\'2\' />' >> $'<bar a=\'1\' b=\'2\' />' >> ) >> typeset -a context=( >> [0]=( >> typeset -a attrs=( >> [0]=( >> name=x >> value=1 >> ) >> [1]=( >> name=y >> value=2 >> ) >> ) >> tagname=foo >> ) >> [1]=( >> typeset -a attrs=( >> [0]=( >> name=a >> value=1 >> ) >> [1]=( >> name=b >> value=2 >> ) >> ) >> tagname=bar >> ) >> ) >> ) >> -- snip -- >> ... but ast-ksh.2012-08-13 (ksh93v- alpha) just prints garbage: >> -- snip -- >> ( >> typeset -a data=( >> $'<foo x=\'1\' y=\'2\' />' >> $'<bar a=\'1\' b=\'2\' />' >> ) >> ( >> ) >> -- snip -- >> (note the unbalanced ')'+'(' ... ;-( ). >> >> AFAIK the offending line is the "nameref currc=_.context[i]" ... > > Erm... this issue is still not fixed in ast-ksh.2012-08-24 ...
The output on stdout from ast-ksh.2012-09-11 looks correct... ... but on stderr I still see this message: -- snip -- ksh93v_typeset_T_nameref_fails001.sh: line 64: xd: is not an element of xd -- snip -- ---- Bye, Roland -- __ . . __ (o.\ \/ /.o) roland.ma...@nrubsig.org \__\/\/__/ MPEG specialist, C&&JAVA&&Sun&&Unix programmer /O /==\ O\ TEL +49 641 3992797 (;O/ \/ \O;)
ksh93v_typeset_T_nameref_fails001.sh.gz
Description: GNU Zip compressed data
_______________________________________________ ast-developers mailing list ast-developers@research.att.com https://mailman.research.att.com/mailman/listinfo/ast-developers