On 28 July 2013 06:17, Roland Mainz <roland.ma...@nrubsig.org> wrote: > On Fri, Jul 12, 2013 at 4:42 AM, Wendy Lin <wendlin1...@gmail.com> wrote: >> On 12 July 2013 04:35, David Korn <d...@research.att.com> wrote: >>> cc: wendlin1...@gmail.com >>> Subject: Re: [ast-users] ksh -c 'namespace a.c.b { integer i=5 ; } ; ' => >>> a.c.b: is not an identifier? >>> -------- >>> >>>> How do I create a nested namespace? >>>> >>>> I tried this but it fails: >>>> ksh -c 'namespace a.c.b { integer i=5 ; } ; ' >>>> /home/wlin/bin/ksh: a.c.b: is not an identifier >>>> >>>> Wendy >>>> >>> >>> namespace a >>> { >>> namespace c >>> { >>> namespace b >>> { >>> integer i=5 >>> } >>> } >>> } >> >> I still get an error for this: >> ksh -c 'namespace a { namespace b { integer i=5 ; } ; } ; printf "%d\n" >> .a.b.i' >> /home/wlin/bin/ksh: printf: .a.b.i: no parent >> >> I don't think this is the right way (semantically) because you can't >> switch from namespace a.b.c to namespace b.g.y on the fly. > > The following test patch "fixes" the problem: > -- snip -- > diff -r -u original/src/cmd/ksh93/sh/xec.c > build_i386_64bit_debug/src/cmd/ksh93/sh/xec.c > --- src/cmd/ksh93/sh/xec.c 2013-07-25 02:37:26.000000000 +0200 > +++ src/cmd/ksh93/sh/xec.c 2013-07-28 05:36:31.827214685 +0200 > @@ -2710,8 +2710,10 @@ > Namval_t *oldnspace = shp->namespace; > int offset = stktell(stkp); > int > flag=NV_NOASSIGN|NV_NOARRAY|NV_VARNAME; > +#if 0 > if(cp) > > errormsg(SH_DICT,ERROR_exit(1),e_ident,fname); > +#endif > sfputc(stkp,'.'); > sfputr(stkp,fname,0); > np = > nv_open(stkptr(stkp,offset),shp->var_tree,flag); > -- snip -- > > If this gets applied then the following sample code finally works: > -- snip -- > # the next three lines are placeholders for the parent namespaces > namespace com { true ; } > namespace com.att { true ; } > namespace com.att.research { true ; } > > # test namespace for AT&T Research > namespace com.att.research.hello > { > function print_hello > { > print 'Hello World' > } > } > > # do somthing > .com.att.research.hello.print_hello > -- snip -- > > IMO this would finally a major step forward towards a common > function/type library where each party has it's own namespace which is > organised like DNA (see java why this is a good idea) > > * Notes: > - At some point namerefs to functions, e.g. typeset -f -n would be > usefull... e.g. nameref -f hello=.com.att.research.hello.print_hello # > would map the function .com.att.research.hello.print_hello to the > short name "hello" without requiring a wrapper function (saving > execution name) > > - Known bugs: > $ ksh -c 'namespace a { true ; } ; namespace a.sp1 { integer i=5 ; > function inc { let i++ ; } ; } ; print ${.a.sp1.i} ; .a.sp1.inc ; > print ${.a.sp1.i} ' # print $'5\n5' but should print $'5\n6' > > Comments/feedback/rants/etc. wecome...
I like it. It improves a lot over perl module madness. One rfe: mkdir has option -p to create missing parent dirs. Could you add namespace -p to add missing namespaces, i.e. create empty namespaces if they are not set yet? Aside from namespace -p the idea of adding namespaces like a DNS tree is GREAT!! Wendy _______________________________________________ ast-users mailing list ast-users@lists.research.att.com http://lists.research.att.com/mailman/listinfo/ast-users