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;)

Attachment: 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

Reply via email to