Lines Matching refs:mp

117 	Mac_t *mp = (Mac_t*)addr;  in sh_macopen()  local
118 mp->shp = shp; in sh_macopen()
152 register Mac_t *mp = (Mac_t*)shp->mac_context; in sh_mactrim() local
155 savemac = *mp; in sh_mactrim()
157 mp->arith = (mode==3); in sh_mactrim()
158 mp->let = 0; in sh_mactrim()
160 mp->pattern = (mode==1||mode==2); in sh_mactrim()
161 mp->patfound = 0; in sh_mactrim()
162 mp->assign = 0; in sh_mactrim()
164 mp->assign = -mode; in sh_mactrim()
165 mp->quoted = mp->lit = mp->split = mp->quote = 0; in sh_mactrim()
166 mp->sp = 0; in sh_mactrim()
167 if(mp->ifsp=nv_getval(sh_scoped(shp,IFSNOD))) in sh_mactrim()
168 mp->ifs = *mp->ifsp; in sh_mactrim()
170 mp->ifs = ' '; in sh_mactrim()
173 copyto(mp,0,mp->arith); in sh_mactrim()
185 *mp = savemac; in sh_mactrim()
196 register Mac_t *mp = (Mac_t*)shp->mac_context; in sh_macexpand() local
200 savemac = *mp; in sh_macexpand()
201 mp->sp = 0; in sh_macexpand()
202 if(mp->ifsp=nv_getval(sh_scoped(shp,IFSNOD))) in sh_macexpand()
203 mp->ifs = *mp->ifsp; in sh_macexpand()
205 mp->ifs = ' '; in sh_macexpand()
210 mp->arghead = arghead; in sh_macexpand()
211 mp->quoted = mp->lit = mp->quote = 0; in sh_macexpand()
212 mp->arith = ((flag&ARG_ARITH)!=0); in sh_macexpand()
213 mp->let = ((flag&ARG_LET)!=0); in sh_macexpand()
214 mp->split = !(flag&ARG_ASSIGN); in sh_macexpand()
215 mp->assign = !mp->split; in sh_macexpand()
216 mp->pattern = mp->split && !(flag&ARG_NOGLOB) && !sh_isoption(SH_NOGLOB); in sh_macexpand()
217 mp->arrayok = mp->arith || (flag&ARG_ARRAYOK); in sh_macexpand()
220 mp->fields = 0; in sh_macexpand()
223 mp->split = 0; in sh_macexpand()
224 mp->pattern = ((flag&ARG_EXP)!=0); in sh_macexpand()
232 mp->patfound = 0; in sh_macexpand()
233 if(mp->pattern) in sh_macexpand()
234 mp->arrayok = 0; in sh_macexpand()
235 copyto(mp,0,mp->arith); in sh_macexpand()
244 endfield(mp,mp->quoted); in sh_macexpand()
245 flags = mp->fields; in sh_macexpand()
250 *mp = savemac; in sh_macexpand()
263 register Mac_t *mp = (Mac_t*)shp->mac_context; in sh_machere() local
264 Lex_t *lp = (Lex_t*)mp->shp->lex_context; in sh_machere()
268 savemac = *mp; in sh_machere()
271 mp->sp = outfile; in sh_machere()
272 mp->split = mp->assign = mp->pattern = mp->patfound = mp->lit = mp->arith = mp->let = 0; in sh_machere()
273 mp->quote = 1; in sh_machere()
274 mp->ifsp = nv_getval(sh_scoped(shp,IFSNOD)); in sh_machere()
275 mp->ifs = ' '; in sh_machere()
323 *mp = savemac; in sh_machere()
337 comsubst(mp,(Shnode_t*)0,0); in sh_machere()
359 comsubst(mp,(Shnode_t*)0,2); in sh_machere()
374 varsub(mp); in sh_machere()
382 comsubst(mp,(Shnode_t*)0,1); in sh_machere()
426 static void copyto(register Mac_t *mp,int endch, int newquote) in copyto() argument
431 Lex_t *lp = (Lex_t*)mp->shp->lex_context; in copyto()
433 int oldquote = mp->quote; in copyto()
438 Sfio_t *sp = mp->sp; in copyto()
439 Stk_t *stkp = mp->shp->stk; in copyto()
440 mp->sp = NIL(Sfio_t*); in copyto()
441 mp->quote = newquote; in copyto()
443 if(!mp->quote && *cp=='~' && cp[1]!=LPAREN) in copyto()
446 if(mp->pattern==2 && *cp=='/') in copyto()
504 if(c==ESCAPE && mp->pattern) in copyto()
508 …else if(sh_isoption(SH_BRACEEXPAND) && mp->pattern==4 && (*cp==',' || *cp==LBRACE || *cp==RBRACE |… in copyto()
510 else if(mp->split && endch && !mp->quote && !mp->lit) in copyto()
513 mac_copy(mp,first,c); in copyto()
529 if(mp->pattern) in copyto()
533 if(!mp->lit && !mp->quote) in copyto()
537 if(ere && mp->pattern==1 && strchr(".[()*+?{|^$&!",*cp)) in copyto()
541 if(!mp->lit && (n==S_ESC || (!mp->quote && in copyto()
553 if(!(ere && *cp=='$') && (mp->lit || (mp->quote && !isqescchar(n) && n!=S_ENDCH))) in copyto()
561 if(mp->lit) in copyto()
563 if(!mp->quote || isqescchar(n) || n==S_ENDCH) in copyto()
574 if(mp->lit) in copyto()
578 if(mp->split && !mp->quote && endch) in copyto()
579 mac_copy(mp,first,c); in copyto()
584 c = mp->pattern; in copyto()
586 comsubst(mp,(Shnode_t*)0,0); in copyto()
587 else if((n= *cp)==0 || !varsub(mp)) in copyto()
589 if(n=='\'' && !mp->quote) in copyto()
591 else if(mp->quote || n!='"') in copyto()
596 mp->pattern = c; in copyto()
599 if((mp->lit || cp[-1]!=endch || mp->quote!=newquote)) in copyto()
601 if(endch==RBRACE && *cp==LPAREN && mp->pattern && brace) in copyto()
606 if(mp->split && !mp->quote && !mp->lit && endch) in copyto()
607 mac_copy(mp,first,c); in copyto()
614 tilde_expand2(mp->shp,tilde); in copyto()
617 if(mp->lit || mp->arith) in copyto()
620 if(mp->arith) in copyto()
626 if(n==S_LIT && mp->quote) in copyto()
630 if(mp->split && endch && !mp->quote && !mp->lit) in copyto()
631 mac_copy(mp,first,c); in copyto()
638 if(mp->quote) in copyto()
640 if(mp->lit) in copyto()
641 mp->lit = ansi_c = 0; in copyto()
643 mp->lit = 1; in copyto()
646 mp->quote = !mp->quote; in copyto()
647 mp->quoted++; in copyto()
650 if(mp->arith || (((mp->assign&1) || endch==RBRACT) && in copyto()
651 !(mp->quote || mp->lit))) in copyto()
653 int offset=0,oldpat = mp->pattern; in copyto()
654 int oldarith = mp->arith, oldsub=mp->subcopy; in copyto()
656 if(mp->assign&1) in copyto()
665 mp->pattern = 4; in copyto()
666 mp->arith = 0; in copyto()
667 mp->subcopy = 0; in copyto()
668 copyto(mp,RBRACT,0); in copyto()
669 mp->subcopy = oldsub; in copyto()
670 mp->arith = oldarith; in copyto()
671 mp->pattern = oldpat; in copyto()
683 if(mp->pattern && !(mp->quote || mp->lit)) in copyto()
685 mp->patfound = mp->pattern; in copyto()
701 if(mp->pattern==4 && (mp->quote || mp->lit)) in copyto()
712 if(!(mp->quote || mp->lit)) in copyto()
714 mp->patfound = mp->split && sh_isoption(SH_BRACEEXPAND); in copyto()
718 if(!mp->pattern || !(mp->quote || mp->lit)) in copyto()
721 if(n==S_BRACE && endch==0 && mp->pattern) in copyto()
722 mp->pattern=4; in copyto()
723 if(n==S_SLASH && mp->pattern==2) in copyto()
724 mp->pattern=3; in copyto()
727 if(mp->pattern==3) in copyto()
735 if(mp->assign==1) in copyto()
737 if(*cp=='~' && !endch && !mp->quote && !mp->lit) in copyto()
739 mp->assign = 2; in copyto()
749 tilde_expand2(mp->shp,tilde); in copyto()
753 if(n==S_COLON && mp->assign==2 && *cp=='~' && endch==0 && !mp->quote &&!mp->lit) in copyto()
755 else if(n==S_SLASH && mp->pattern==2) in copyto()
760 if(mp->quote || mp->lit) in copyto()
774 if(*cp=='.' && mp->subcopy==1) in copyto()
778 mp->dotdot = stktell(stkp); in copyto()
785 mp->sp = sp; in copyto()
786 mp->quote = oldquote; in copyto()
792 static void mac_substitute(Mac_t *mp, register char *cp,char *str,register int subexp[],int subsize) in mac_substitute() argument
798 Stk_t *stkp = mp->shp->stk; in mac_substitute()
800 savemac = *mp; in mac_substitute()
801 mp->pattern = 3; in mac_substitute()
802 mp->split = 0; in mac_substitute()
804 copyto(mp,0,0); in mac_substitute()
808 *mp = savemac; in mac_substitute()
820 mac_copy(mp,first,c); in mac_substitute()
830 mac_copy(mp,str+c,n); in mac_substitute()
837 mac_copy(mp,first,n); in mac_substitute()
946 static int subcopy(Mac_t *mp, int flag) in subcopy() argument
948 int split = mp->split; in subcopy()
949 int xpattern = mp->pattern; in subcopy()
950 int loc = stktell(mp->shp->stk); in subcopy()
951 int xarith = mp->arith; in subcopy()
952 int arrayok = mp->arrayok; in subcopy()
953 mp->split = 0; in subcopy()
954 mp->arith = 0; in subcopy()
955 mp->pattern = flag?4:0; in subcopy()
956 mp->arrayok=1; in subcopy()
957 mp->subcopy++; in subcopy()
958 mp->dotdot = 0; in subcopy()
959 copyto(mp,RBRACT,0); in subcopy()
960 mp->subcopy = 0; in subcopy()
961 mp->pattern = xpattern; in subcopy()
962 mp->split = split; in subcopy()
963 mp->arith = xarith; in subcopy()
964 mp->arrayok = arrayok; in subcopy()
998 static int namecount(Mac_t *mp,const char *prefix) in namecount() argument
1001 mp->nvwalk = nv_diropen((Namval_t*)0,prefix); in namecount()
1002 while(nv_dirnext(mp->nvwalk)) in namecount()
1004 nv_dirclose(mp->nvwalk); in namecount()
1008 static char *nextname(Mac_t *mp,const char *prefix, int len) in nextname() argument
1013 mp->nvwalk = nv_diropen((Namval_t*)0,prefix); in nextname()
1014 return((char*)mp->nvwalk); in nextname()
1016 if(!(cp=nv_dirnext(mp->nvwalk))) in nextname()
1017 nv_dirclose(mp->nvwalk); in nextname()
1025 static int varsub(Mac_t *mp) in varsub() argument
1032 Lex_t *lp = (Lex_t*)mp->shp->lex_context; in varsub()
1036 int var=1,addsub=0,oldpat=mp->pattern,idnum=0,flag=0,d; in varsub()
1037 Stk_t *stkp = mp->shp->stk; in varsub()
1039 mp->zeros = 0; in varsub()
1082 v = special(mp->shp,c); in varsub()
1087 if(mp->shp->cur_line) in varsub()
1094 dolmax = mp->shp->st.dolc+1; in varsub()
1106 comsubst(mp,(Shnode_t*)0,1); in varsub()
1111 mp->shp->argaddr = 0; in varsub()
1121 v = special(mp->shp,c); in varsub()
1123 else if(mp->shp->cur_line) in varsub()
1125 mp->shp->used_pos = 1; in varsub()
1129 else if(c <= mp->shp->st.dolc) in varsub()
1131 mp->shp->used_pos = 1; in varsub()
1132 v = mp->shp->st.dolv[c]; in varsub()
1147 while(c==LBRACT && (type||mp->arrayok)) in varsub()
1149 mp->shp->argaddr=0; in varsub()
1172 v = stkptr(stkp,subcopy(mp,1)); in varsub()
1173 if(type && mp->dotdot) in varsub()
1226 if(mp->shp->cur_line && *id=='R' && strcmp(id,"REPLY")==0) in varsub()
1228 mp->shp->argaddr=0; in varsub()
1234 if(mp->shp->argaddr) in varsub()
1236 np = nv_open(id,mp->shp->var_tree,flag|NV_NOFAIL); in varsub()
1242 if(sh_macfun(mp->shp,id,offset)) in varsub()
1258 if(mp->dotdot) in varsub()
1263 v = stkptr(stkp,mp->dotdot); in varsub()
1287 if(type<=1 && np && nv_isvtree(np) && mp->pattern==1 && !mp->split) in varsub()
1295 if(mp->quote && cc=='"') in varsub()
1302 mp->assign = 1; in varsub()
1304 if((type==M_VNAME||type==M_SUBNAME) && mp->shp->argaddr && strcmp(nv_name(np),id)) in varsub()
1305 mp->shp->argaddr = 0; in varsub()
1316 if(ap && !mp->dotdot && !(ap->nelem&ARRAY_UNDEF)) in varsub()
1325 nv_typename(nq,mp->shp->strbuf); in varsub()
1327 nv_attribute(np,mp->shp->strbuf,"typeset",1); in varsub()
1328 v = sfstruse(mp->shp->strbuf); in varsub()
1332 else if(mp->shp->cur_line && np==REPLYNOD) in varsub()
1333 v = mp->shp->cur_line; in varsub()
1349 …if( (mp->arith||mp->let) && (np->nvfun || nv_isattr(np,(NV_LJUST|NV_RJUST|NV_ZFILL))) && (offset==… in varsub()
1350 mp->zeros = 1; in varsub()
1372 if(mp->shp->argaddr) in varsub()
1393 mp->shp->last_root = mp->shp->var_tree; in varsub()
1394 id = prefix(mp->shp,id); in varsub()
1398 c = namecount(mp,id); in varsub()
1405 nextname(mp,id,0); in varsub()
1406 v = nextname(mp,id,dolmax); in varsub()
1431 if(mp->shp->cur_line) in varsub()
1434 c = mp->shp->offsets[0]; in varsub()
1438 c = mp->shp->st.dolc; in varsub()
1476 int newquote = mp->quote; in varsub()
1477 int split = mp->split; in varsub()
1478 int quoted = mp->quoted; in varsub()
1479 int arith = mp->arith; in varsub()
1480 int zeros = mp->zeros; in varsub()
1481 int assign = mp->assign; in varsub()
1493 mp->pattern = 1+(c=='/'); in varsub()
1494 mp->split = 0; in varsub()
1495 mp->quoted = 0; in varsub()
1496 mp->assign &= ~1; in varsub()
1497 mp->arith = mp->zeros = 0; in varsub()
1501 mp->split = mp->pattern = 0; in varsub()
1502 copyto(mp,RBRACE,newquote); in varsub()
1504 mp->patfound = 0; in varsub()
1505 mp->pattern = oldpat; in varsub()
1506 mp->split = split; in varsub()
1507 mp->quoted = quoted; in varsub()
1508 mp->arith = arith; in varsub()
1509 mp->zeros = zeros; in varsub()
1510 mp->assign = assign; in varsub()
1517 sh_lexskip(lp,RBRACE,0,(!newops&&mp->quote)?ST_QUOTE:ST_NESTED); in varsub()
1539 v = special(mp->shp,dolg=0); in varsub()
1541 else if(mp->shp->cur_line) in varsub()
1549 v = mp->shp->st.dolv[dolg=type]; in varsub()
1669 if(mode=='@' && mp->quote && !v && c!='-') in varsub()
1670 mp->quoted-=2; in varsub()
1674 register int d = (mode=='@'?' ':mp->ifs); in varsub()
1706 mac_copy(mp,v,vsize); in varsub()
1708 mac_substitute(mp,repstr,v,match,nmatch); in varsub()
1719 mac_copy(mp,v,1); in varsub()
1731 mac_copy(mp,v,vsize>0?vsize:strlen(v)); in varsub()
1734 sfprintf(mp->shp->strbuf,"[%s]",nv_getsub(np)); in varsub()
1735 v = sfstruse(mp->shp->strbuf); in varsub()
1736 mac_copy(mp, v, strlen(v)); in varsub()
1740 if(mp->dotdot) in varsub()
1764 if(mp->shp->cur_line) in varsub()
1776 v = mp->shp->st.dolv[dolg]; in varsub()
1780 if(!(v = nextname(mp,id,dolmax))) in varsub()
1799 if(mp->split && (!mp->quote || mode=='@')) in varsub()
1802 mp->pattern = 0; in varsub()
1803 endfield(mp,mp->quoted); in varsub()
1804 mp->pattern = oldpat; in varsub()
1808 if(mp->sp) in varsub()
1809 sfputc(mp->sp,d); in varsub()
1822 mac_substitute(mp,repstr,v,0,0); in varsub()
1843 if(mp->shp->subshell) in varsub()
1861 sfprintf(mp->shp->strbuf,"%s[%s]\0",nv_name(np),nv_getsub(np)); in varsub()
1862 id = sfstruse(mp->shp->strbuf); in varsub()
1877 comsubst(mp,(Shnode_t*)0,2); in varsub()
1891 static void comsubst(Mac_t *mp,register Shnode_t* t, int type) in comsubst() argument
1897 Stk_t *stkp = mp->shp->stk; in comsubst()
1899 struct slnod *saveslp = mp->shp->st.staklist; in comsubst()
1908 mp->shp->argaddr = 0; in comsubst()
1909 savemac = *mp; in comsubst()
1910 mp->shp->st.staklist=0; in comsubst()
1916 t = sh_dolparen((Lex_t*)mp->shp->lex_context); in comsubst()
1923 num = sh_arith(sh_mactrim(mp->shp,t->ar.arexpr->argval,3)); in comsubst()
1926 *mp = savemac; in comsubst()
1928 sfprintf(mp->shp->strbuf,"%.*Lg",LDBL_DIG,num); in comsubst()
1930 sfprintf(mp->shp->strbuf,"%lld",(Sflong_t)num); in comsubst()
1932 sfprintf(mp->shp->strbuf,"%Lg",num); in comsubst()
1933 str = sfstruse(mp->shp->strbuf); in comsubst()
1934 mac_copy(mp,str,strlen(str)); in comsubst()
1935 mp->shp->st.staklist = saveslp; in comsubst()
1948 (c=='"' && mp->quote))) in comsubst()
1958 if(mp->sp) in comsubst()
1959 sfsync(mp->sp); /* flush before executing command */ in comsubst()
1961 c = mp->shp->inlineno; in comsubst()
1962 mp->shp->inlineno = error_info.line+mp->shp->st.firstline; in comsubst()
1963 t = (Shnode_t*)sh_parse(mp->shp, sp,SH_EOF|SH_NL); in comsubst()
1964 mp->shp->inlineno = c; in comsubst()
1983 fd = sh_redirect(mp->shp,ip,3); in comsubst()
1989 if(sp=mp->shp->sftable[fd]) in comsubst()
2004 sh_freeup(mp->shp); in comsubst()
2005 mp->shp->st.staklist = saveslp; in comsubst()
2013 *mp = savemac; in comsubst()
2014 np = sh_scoped(mp->shp,IFSNOD); in comsubst()
2015 nv_putval(np,mp->ifsp,NV_RDONLY); in comsubst()
2016 mp->ifsp = nv_getval(np); in comsubst()
2061 if(mp->sp) in comsubst()
2062 sfnputc(mp->sp,'\n',newlines); in comsubst()
2063 else if(!mp->quote && mp->split && mp->shp->ifstable['\n']) in comsubst()
2064 endfield(mp,0); in comsubst()
2070 mac_copy(mp,&lastc,1); in comsubst()
2082 mac_copy(mp,str,c); in comsubst()
2086 if(mp->shp->spid) in comsubst()
2087 job_wait(mp->shp->spid); in comsubst()
2088 if(--newlines>0 && mp->shp->ifstable['\n']==S_DELIM) in comsubst()
2090 if(mp->sp) in comsubst()
2091 sfnputc(mp->sp,'\n',newlines); in comsubst()
2092 else if(!mp->quote && mp->split) in comsubst()
2094 endfield(mp,1); in comsubst()
2099 mac_copy(mp,&lastc,1); in comsubst()
2107 static void mac_copy(register Mac_t *mp,register const char *str, register int size) in mac_copy() argument
2112 Stk_t *stkp=mp->shp->stk; in mac_copy()
2113 nopat = (mp->quote||mp->assign==1||mp->arith); in mac_copy()
2114 if(mp->zeros) in mac_copy()
2119 mp->zeros = 0; in mac_copy()
2122 if(mp->sp) in mac_copy()
2123 sfwrite(mp->sp,str,size); in mac_copy()
2124 else if(mp->pattern>=2 || (mp->pattern && nopat)) in mac_copy()
2139 if(nopat&&(c==S_PAT||c==S_ESC||c==S_BRACT||c==S_ENDCH) && mp->pattern!=3) in mac_copy()
2141 else if(mp->pattern==4 && (c==S_ESC||c==S_BRACT||c==S_ENDCH || isastchar(n))) in mac_copy()
2143 else if(mp->pattern==2 && c==S_SLASH) in mac_copy()
2145 else if(mp->pattern==3 && c==S_ESC && (state[*(unsigned char*)cp]==S_DIG||(*cp==ESCAPE))) in mac_copy()
2147 if(!(c=mp->quote)) in mac_copy()
2163 else if(!mp->quote && mp->split && (mp->ifs||mp->pattern)) in mac_copy()
2166 state = mp->shp->ifstable; in mac_copy()
2167 if(mp->pattern) in mac_copy()
2199 mp->patfound = mp->pattern; in mac_copy()
2203 mp->patfound = mp->pattern; in mac_copy()
2204 else if(n && mp->ifs) in mac_copy()
2209 if(sh_strchr(mp->ifsp,cp-1)<0) in mac_copy()
2224 if(n==S_MBYTE && sh_strchr(mp->ifsp,cp-1)>=0) in mac_copy()
2238 endfield(mp,n==S_DELIM||mp->quoted); in mac_copy()
2239 mp->patfound = 0; in mac_copy()
2251 if(mp->pattern) in mac_copy()
2265 if(mp->shp->ifstable[ESCAPE]==S_ESC) in mac_copy()
2266 mp->shp->ifstable[ESCAPE] = 0; in mac_copy()
2278 static void endfield(register Mac_t *mp,int split) in endfield() argument
2282 Stk_t *stkp = mp->shp->stk; in endfield()
2288 if(mp->patfound) in endfield()
2290 mp->shp->argaddr = 0; in endfield()
2292 count = path_generate(argp,mp->arghead); in endfield()
2294 count = path_expand(argp->argval,mp->arghead); in endfield()
2297 mp->fields += count; in endfield()
2305 argp->argchn.ap = *mp->arghead; in endfield()
2306 *mp->arghead = argp; in endfield()
2307 mp->fields++; in endfield()
2311 (*mp->arghead)->argflag |= ARG_MAKE; in endfield()
2312 if(mp->assign || sh_isoption(SH_NOGLOB)) in endfield()
2317 mp->quoted = mp->quote; in endfield()