Lines Matching refs:mp

125 	Mac_t *mp = (Mac_t*)addr;
126 mp->shp = shp;
160 register Mac_t *mp = (Mac_t*)shp->mac_context;
163 savemac = *mp;
165 mp->arith = (mode==3);
166 mp->let = 0;
168 mp->pattern = (mode==1||mode==2);
169 mp->patfound = 0;
170 mp->assign = 0;
172 mp->assign = -mode;
173 mp->quoted = mp->lit = mp->split = mp->quote = 0;
174 mp->sp = 0;
175 if(mp->ifsp=nv_getval(sh_scoped(shp,IFSNOD)))
176 mp->ifs = *mp->ifsp;
178 mp->ifs = ' ';
181 copyto(mp,0,mp->arith);
193 *mp = savemac;
204 register Mac_t *mp = (Mac_t*)shp->mac_context;
208 savemac = *mp;
209 mp->sp = 0;
210 if(mp->ifsp=nv_getval(sh_scoped(shp,IFSNOD)))
211 mp->ifs = *mp->ifsp;
213 mp->ifs = ' ';
218 mp->arghead = arghead;
219 mp->quoted = mp->lit = mp->quote = 0;
220 mp->arith = ((flag&ARG_ARITH)!=0);
221 mp->let = ((flag&ARG_LET)!=0);
222 mp->split = !(flag&ARG_ASSIGN);
223 mp->assign = !mp->split;
224 mp->pattern = mp->split && !(flag&ARG_NOGLOB) && !sh_isoption(SH_NOGLOB);
225 mp->arrayok = mp->arith || (flag&ARG_ARRAYOK);
228 mp->fields = 0;
229 mp->atmode = 0;
232 mp->split = 0;
233 mp->pattern = ((flag&ARG_EXP)!=0);
241 mp->patfound = 0;
242 if(mp->pattern)
243 mp->arrayok = 0;
244 copyto(mp,0,mp->arith);
253 endfield(mp,mp->quoted|mp->atmode);
254 flags = mp->fields;
259 *mp = savemac;
272 register Mac_t *mp = (Mac_t*)shp->mac_context;
273 Lex_t *lp = (Lex_t*)mp->shp->lex_context;
277 savemac = *mp;
280 mp->sp = outfile;
281 mp->split = mp->assign = mp->pattern = mp->patfound = mp->lit = mp->arith = mp->let = 0;
282 mp->quote = 1;
283 mp->ifsp = nv_getval(sh_scoped(shp,IFSNOD));
284 mp->ifs = ' ';
332 *mp = savemac;
346 comsubst(mp,(Shnode_t*)0,0);
368 comsubst(mp,(Shnode_t*)0,2);
383 varsub(mp);
391 comsubst(mp,(Shnode_t*)0,1);
435 static void copyto(register Mac_t *mp,int endch, int newquote)
440 Lex_t *lp = (Lex_t*)mp->shp->lex_context;
442 int oldquote = mp->quote;
447 Sfio_t *sp = mp->sp;
448 Stk_t *stkp = mp->shp->stk;
450 mp->sp = NIL(Sfio_t*);
451 mp->quote = newquote;
453 if(!mp->quote && *cp=='~' && cp[1]!=LPAREN)
456 if(mp->pattern==2 && *cp=='/')
514 if(c==ESCAPE && mp->pattern)
518 else if(sh_isoption(SH_BRACEEXPAND) && mp->pattern==4 && (*cp==',' || *cp==LBRACE || *cp==RBRACE || *cp=='.'))
520 else if(mp->split && endch && !mp->quote && !mp->lit)
523 mac_copy(mp,first,c);
539 if(mp->pattern)
543 if(!mp->lit && !mp->quote)
548 if(ere && mp->pattern==1 && strchr(".[()*+?{|^$&!",*cp))
552 if(!mp->lit && (n==S_ESC || (!mp->quote &&
564 if(!(ere && *cp=='$') && (mp->lit || (mp->quote && !isqescchar(n) && n!=S_ENDCH)))
572 if(mp->lit)
574 if(!mp->quote || isqescchar(n) || n==S_ENDCH)
585 if(mp->lit)
589 if(mp->split && !mp->quote && endch)
590 mac_copy(mp,first,c);
595 c = mp->pattern;
597 comsubst(mp,(Shnode_t*)0,0);
598 else if((n= *cp) == '"' && !mp->quote)
603 mp->quote = 1;
630 else if(n==0 || !varsub(mp))
632 if(n=='\'' && !mp->quote)
634 else if(mp->quote || n!='"')
638 if(mp->quote && cp)
639 mp->pattern = c;
642 if((mp->lit || cp[-1]!=endch || mp->quote!=newquote))
644 if(endch==RBRACE && *cp==LPAREN && mp->pattern && brace)
649 if(mp->split && !mp->quote && !mp->lit && endch)
650 mac_copy(mp,first,c);
665 tilde_expand2(mp->shp,tilde);
668 if(mp->lit || mp->arith)
671 if(mp->arith)
677 if(n==S_LIT && mp->quote)
681 if(mp->split && endch && !mp->quote && !mp->lit)
682 mac_copy(mp,first,c);
689 if(mp->quote)
691 if(mp->lit)
692 mp->lit = ansi_c = 0;
694 mp->lit = 1;
697 mp->quote = !mp->quote;
698 mp->quoted++;
701 if(mp->arith || (((mp->assign&1) || endch==RBRACT) &&
702 !(mp->quote || mp->lit)))
704 int offset=0,oldpat = mp->pattern;
705 int oldarith = mp->arith, oldsub=mp->subcopy;
707 if(mp->assign&1)
716 mp->pattern = 4;
717 mp->arith = 0;
718 mp->subcopy = 0;
719 copyto(mp,RBRACT,0);
720 mp->subcopy = oldsub;
721 mp->arith = oldarith;
722 mp->pattern = oldpat;
734 if(mp->pattern && !(mp->quote || mp->lit))
736 mp->patfound = mp->pattern;
756 if(mp->pattern==4 && (mp->quote || mp->lit))
767 if(!(mp->quote || mp->lit))
769 mp->patfound = mp->split && sh_isoption(SH_BRACEEXPAND);
773 if(!mp->pattern || !(mp->quote || mp->lit))
776 if(n==S_BRACE && endch==0 && mp->pattern)
777 mp->pattern=4;
778 if(n==S_SLASH && mp->pattern==2)
779 mp->pattern=3;
782 if(mp->pattern==3)
790 if(mp->assign==1)
792 if(*cp=='~' && !endch && !mp->quote && !mp->lit)
794 mp->assign = 2;
804 tilde_expand2(mp->shp,tilde);
808 if(n==S_COLON && mp->assign==2 && *cp=='~' && endch==0 && !mp->quote &&!mp->lit)
810 else if(n==S_SLASH && mp->pattern==2)
815 if(mp->quote || mp->lit)
829 if(*cp=='.' && mp->subcopy==1)
833 mp->dotdot = stktell(stkp);
840 mp->sp = sp;
841 mp->quote = oldquote;
847 static void mac_substitute(Mac_t *mp, register char *cp,char *str,register int subexp[],int subsize)
853 Stk_t *stkp = mp->shp->stk;
855 savemac = *mp;
856 mp->pattern = 3;
857 mp->split = 0;
859 copyto(mp,0,0);
863 *mp = savemac;
875 mac_copy(mp,first,c);
885 mac_copy(mp,str+c,n);
892 mac_copy(mp,first,n);
1001 static int subcopy(Mac_t *mp, int flag)
1003 int split = mp->split;
1004 int xpattern = mp->pattern;
1005 int loc = stktell(mp->shp->stk);
1006 int xarith = mp->arith;
1007 int arrayok = mp->arrayok;
1008 mp->split = 0;
1009 mp->arith = 0;
1010 mp->pattern = flag?4:0;
1011 mp->arrayok=1;
1012 mp->subcopy++;
1013 mp->dotdot = 0;
1014 copyto(mp,RBRACT,0);
1015 mp->subcopy = 0;
1016 mp->pattern = xpattern;
1017 mp->split = split;
1018 mp->arith = xarith;
1019 mp->arrayok = arrayok;
1059 static int namecount(Mac_t *mp,const char *prefix)
1062 mp->nvwalk = nv_diropen((Namval_t*)0,prefix);
1063 while(nv_dirnext(mp->nvwalk))
1065 nv_dirclose(mp->nvwalk);
1069 static char *nextname(Mac_t *mp,const char *prefix, int len)
1074 mp->nvwalk = nv_diropen((Namval_t*)0,prefix);
1075 return((char*)mp->nvwalk);
1077 if(!(cp=nv_dirnext(mp->nvwalk)))
1078 nv_dirclose(mp->nvwalk);
1086 static int varsub(Mac_t *mp)
1093 Lex_t *lp = (Lex_t*)mp->shp->lex_context;
1097 int var=1,addsub=0,oldpat=mp->pattern,idnum=0,flag=0,d;
1098 Stk_t *stkp = mp->shp->stk;
1100 mp->zeros = 0;
1143 v = special(mp->shp,c);
1148 if(mp->shp->cur_line)
1150 v = getdolarg(mp->shp,1,(int*)0);
1155 dolmax = mp->shp->st.dolc+1;
1156 mp->atmode = (v && mp->quoted && c=='@');
1168 comsubst(mp,(Shnode_t*)0,1);
1173 mp->shp->argaddr = 0;
1183 v = special(mp->shp,c);
1185 else if(mp->shp->cur_line)
1187 mp->shp->used_pos = 1;
1188 v = getdolarg(mp->shp,c,&vsize);
1191 else if(c <= mp->shp->st.dolc)
1193 mp->shp->used_pos = 1;
1194 v = mp->shp->st.dolv[c];
1215 while(c==LBRACT && (type||mp->arrayok))
1217 mp->shp->argaddr=0;
1241 v = stkptr(stkp,subcopy(mp,1));
1242 if(type && mp->dotdot)
1299 if(mp->shp->cur_line && *id=='R' && strcmp(id,"REPLY")==0)
1301 mp->shp->argaddr=0;
1307 if(mp->shp->argaddr)
1309 np = nv_open(id,mp->shp->var_tree,flag|NV_NOFAIL);
1312 sfprintf(mp->shp->strbuf,"%s%c",id,0);
1313 id = sfstruse(mp->shp->strbuf);
1320 if(sh_macfun(mp->shp,id,offset))
1331 else if(np!=REPLYNOD || !mp->shp->cur_line)
1340 if(mp->dotdot)
1352 v = stkptr(stkp,mp->dotdot);
1356 else if((dolmax = (int)sh_arith(mp->shp,v))<0)
1363 if((int)sh_arith(mp->shp,v))
1376 if(type<=1 && np && nv_isvtree(np) && mp->pattern==1 && !mp->split)
1384 if(mp->quote && cc=='"')
1391 mp->assign = 1;
1393 if((type==M_VNAME||type==M_SUBNAME) && mp->shp->argaddr && strcmp(nv_name(np),id))
1394 mp->shp->argaddr = 0;
1405 if(ap && !mp->dotdot && !(ap->nelem&ARRAY_UNDEF))
1414 nv_typename(nq,mp->shp->strbuf);
1416 nv_attribute(np,mp->shp->strbuf,"typeset",1);
1417 v = sfstruse(mp->shp->strbuf);
1421 else if(mp->shp->cur_line && np==REPLYNOD)
1422 v = mp->shp->cur_line;
1437 mp->atmode = (v && mp->quoted && mode=='@');
1439 if( (mp->arith||mp->let) && (np->nvfun || nv_isattr(np,(NV_LJUST|NV_RJUST|NV_ZFILL))) && !nv_isattr(np,NV_INTEGER) && (offset==0 || !isalnum(c)))
1440 mp->zeros = 1;
1465 if(mp->shp->argaddr)
1486 mp->shp->last_root = mp->shp->var_tree;
1487 id = prefix(mp->shp,id);
1491 c = namecount(mp,id);
1498 nextname(mp,id,0);
1499 v = nextname(mp,id,dolmax);
1524 if(mp->shp->cur_line)
1526 getdolarg(mp->shp,MAX_ARGN,(int*)0);
1527 c = mp->shp->offsets[0];
1531 c = mp->shp->st.dolc;
1571 int newquote = mp->quote;
1572 int split = mp->split;
1573 int quoted = mp->quoted;
1574 int arith = mp->arith;
1575 int zeros = mp->zeros;
1576 int assign = mp->assign;
1588 mp->pattern = 1+(c=='/');
1589 mp->split = 0;
1590 mp->quoted = 0;
1591 mp->assign &= ~1;
1592 mp->arith = mp->zeros = 0;
1596 mp->split = mp->pattern = 0;
1597 copyto(mp,RBRACE,newquote);
1599 mp->patfound = 0;
1600 mp->pattern = oldpat;
1601 mp->split = split;
1602 mp->quoted = quoted;
1603 mp->arith = arith;
1604 mp->zeros = zeros;
1605 mp->assign = assign;
1612 sh_lexskip(lp,RBRACE,0,(!newops&&mp->quote)?ST_QUOTE:ST_NESTED);
1634 v = special(mp->shp,dolg=0);
1636 else if(mp->shp->cur_line)
1638 v = getdolarg(mp->shp,dolg=type,&vsize);
1644 v = mp->shp->st.dolv[dolg=type];
1673 mp->atmode = 0;
1764 if(mode=='@' && mp->quote && !v && c!='-')
1765 mp->quoted-=2;
1769 register int d = (mode=='@'?' ':mp->ifs);
1801 mac_copy(mp,v,vsize);
1803 mac_substitute(mp,repstr,v,match,nmatch);
1814 mac_copy(mp,v,1);
1826 mac_copy(mp,v,vsize>0?vsize:strlen(v));
1829 mp->shp->instance++;
1830 sfprintf(mp->shp->strbuf,"[%s]",nv_getsub(np));
1831 mp->shp->instance--;
1832 v = sfstruse(mp->shp->strbuf);
1833 mac_copy(mp, v, strlen(v));
1837 if(mp->dotdot)
1861 if(mp->shp->cur_line)
1865 if(!(v=getdolarg(mp->shp,dolg,&vsize)))
1873 v = mp->shp->st.dolv[dolg];
1877 if(!(v = nextname(mp,id,dolmax)))
1896 if(mp->split && (!mp->quote || mode=='@'))
1899 mp->pattern = 0;
1900 endfield(mp,mp->quoted);
1901 mp->atmode = mode=='@';
1902 mp->pattern = oldpat;
1906 if(mp->sp)
1907 sfputc(mp->sp,d);
1920 mac_substitute(mp,repstr,v,0,0);
1941 if(mp->shp->subshell)
1959 sfprintf(mp->shp->strbuf,"%s[%s]\0",nv_name(np),nv_getsub(np));
1960 id = sfstruse(mp->shp->strbuf);
1979 comsubst(mp,(Shnode_t*)0,2);
1993 static void comsubst(Mac_t *mp,register Shnode_t* t, int type)
1999 Stk_t *stkp = mp->shp->stk;
2001 struct slnod *saveslp = mp->shp->st.staklist;
2010 mp->shp->argaddr = 0;
2011 savemac = *mp;
2012 mp->shp->st.staklist=0;
2014 if(mp->shp->inpool)
2022 t = sh_dolparen((Lex_t*)mp->shp->lex_context);
2029 num = sh_arith(mp->shp,t->ar.arexpr->argval);
2031 num = sh_arith(mp->shp,sh_mactrim(mp->shp,t->ar.arexpr->argval,3));
2034 *mp = savemac;
2036 sfprintf(mp->shp->strbuf,"%.*Lg",LDBL_DIG,num);
2038 sfprintf(mp->shp->strbuf,"%lld",(Sflong_t)num);
2040 sfprintf(mp->shp->strbuf,"%Lg",num);
2041 str = sfstruse(mp->shp->strbuf);
2042 mac_copy(mp,str,strlen(str));
2043 mp->shp->st.staklist = saveslp;
2056 (c=='"' && mp->quote)))
2066 if(mp->sp)
2067 sfsync(mp->sp); /* flush before executing command */
2069 c = mp->shp->inlineno;
2070 mp->shp->inlineno = error_info.line+mp->shp->st.firstline;
2071 t = (Shnode_t*)sh_parse(mp->shp, sp,SH_EOF|SH_NL);
2072 mp->shp->inlineno = c;
2087 sh_pushcontext(mp->shp,&buff,SH_JMPIO);
2091 fd = sh_redirect(mp->shp,ip,3);
2094 sh_popcontext(mp->shp,&buff);
2097 VALIDATE_FD(mp->shp, fd);
2098 if(sp=mp->shp->sftable[fd])
2108 sp = sh_subshell(mp->shp,t,sh_isstate(SH_ERREXIT),type);
2113 sh_freeup(mp->shp);
2114 mp->shp->st.staklist = saveslp;
2122 *mp = savemac;
2123 np = sh_scoped(mp->shp,IFSNOD);
2124 nv_putval(np,mp->ifsp,NV_RDONLY);
2125 mp->ifsp = nv_getval(np);
2170 if(mp->sp)
2171 sfnputc(mp->sp,'\n',newlines);
2172 else if(!mp->quote && mp->split && mp->shp->ifstable['\n'])
2173 endfield(mp,0);
2179 mac_copy(mp,&lastc,1);
2191 mac_copy(mp,str,c);
2195 if(--newlines>0 && mp->shp->ifstable['\n']==S_DELIM)
2197 if(mp->sp)
2198 sfnputc(mp->sp,'\n',newlines);
2199 else if(!mp->quote && mp->split)
2201 endfield(mp,1);
2206 mac_copy(mp,&lastc,1);
2214 static void mac_copy(register Mac_t *mp,register const char *str, register int size)
2219 Stk_t *stkp=mp->shp->stk;
2220 int oldpat = mp->pattern;
2221 nopat = (mp->quote||(mp->assign==1)||mp->arith);
2222 if(mp->zeros)
2227 mp->zeros = 0;
2230 if(mp->sp)
2231 sfwrite(mp->sp,str,size);
2232 else if(mp->pattern>=2 || (mp->pattern && nopat) || mp->assign==3)
2247 if(mp->assign==3 && mp->pattern!=4)
2252 mp->pattern = 4;
2256 if(nopat&&(c==S_PAT||c==S_ESC||c==S_BRACT||c==S_ENDCH) && mp->pattern!=3)
2258 else if(mp->pattern==4 && (c==S_ESC||c==S_BRACT||c==S_ENDCH || isastchar(n)))
2264 mp->pattern = oldpat;
2273 else if(mp->pattern==2 && c==S_SLASH)
2275 else if(mp->pattern==3 && c==S_ESC && (state[*(unsigned char*)cp]==S_DIG||(*cp==ESCAPE)))
2277 if(!(c=mp->quote))
2293 else if(!mp->quote && mp->split && (mp->ifs||mp->pattern))
2296 state = mp->shp->ifstable;
2297 if(mp->pattern)
2329 mp->patfound = mp->pattern;
2333 mp->patfound = mp->pattern;
2334 else if(n && mp->ifs)
2339 if(sh_strchr(mp->ifsp,cp-1)<0)
2354 if(n==S_MBYTE && sh_strchr(mp->ifsp,cp-1)>=0)
2368 endfield(mp,n==S_DELIM||mp->quoted);
2369 mp->patfound = 0;
2381 if(mp->pattern)
2395 if(mp->shp->ifstable[ESCAPE]==S_ESC)
2396 mp->shp->ifstable[ESCAPE] = 0;
2408 static void endfield(register Mac_t *mp,int split)
2412 Stk_t *stkp = mp->shp->stk;
2418 mp->atmode = 0;
2419 if(mp->patfound)
2421 mp->shp->argaddr = 0;
2423 count = path_generate(mp->shp,argp,mp->arghead);
2425 count = path_expand(mp->shp,argp->argval,mp->arghead);
2428 mp->fields += count;
2436 argp->argchn.ap = *mp->arghead;
2437 *mp->arghead = argp;
2438 mp->fields++;
2442 (*mp->arghead)->argflag |= ARG_MAKE;
2443 if(mp->assign || sh_isoption(SH_NOGLOB))
2448 mp->quoted = mp->quote;