Changeset 1201 for trunk/src/kash/parser.c
- Timestamp:
- Oct 7, 2007, 1:57:35 AM (18 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/kash/parser.c
r1199 r1201 209 209 parseheredoc(); 210 210 else 211 pungetc( ); /* push back EOF on input */211 pungetc(psh); /* push back EOF on input */ 212 212 return n1; 213 213 default: … … 661 661 if (! noexpand(wordtext) || (i = strlen(wordtext)) == 0 || i > EOFMARKLEN) 662 662 synerror("Illegal eof marker for << redirection"); 663 rmescapes( wordtext);663 rmescapes(psh, wordtext); 664 664 here->eofmark = wordtext; 665 665 here->next = NULL; … … 695 695 needprompt = 0; 696 696 } 697 readtoken1(pgetc( ), here->here->type == NHERE? SQSYNTAX : DQSYNTAX,697 readtoken1(pgetc(psh), here->here->type == NHERE? SQSYNTAX : DQSYNTAX, 698 698 here->eofmark, here->striptabs); 699 699 n = (union node *)stalloc(psh, sizeof (struct narg)); … … 759 759 if(!noalias && 760 760 (ap = lookupalias(psh, wordtext, 1)) != NULL) { 761 pushstring( ap->val, strlen(ap->val), ap);761 pushstring(psh, ap->val, strlen(ap->val), ap); 762 762 checkkwd = savecheckkwd; 763 763 goto top; … … 812 812 startlinno = plinno; 813 813 for (;;) { /* until token or start of word found */ 814 c = pgetc_macro( );814 c = pgetc_macro(psh); 815 815 if (c == ' ' || c == '\t') 816 816 continue; /* quick check for white space first */ … … 819 819 continue; 820 820 case '#': 821 while ((c = pgetc( )) != '\n' && c != PEOF);822 pungetc( );821 while ((c = pgetc(psh)) != '\n' && c != PEOF); 822 pungetc(psh); 823 823 continue; 824 824 case '\\': 825 if (pgetc( ) == '\n') {825 if (pgetc(psh) == '\n') { 826 826 startlinno = ++plinno; 827 827 if (doprompt) … … 831 831 continue; 832 832 } 833 pungetc( );833 pungetc(psh); 834 834 goto breakloop; 835 835 case '\n': … … 840 840 RETURN(TEOF); 841 841 case '&': 842 if (pgetc( ) == '&')842 if (pgetc(psh) == '&') 843 843 RETURN(TAND); 844 pungetc( );844 pungetc(psh); 845 845 RETURN(TBACKGND); 846 846 case '|': 847 if (pgetc( ) == '|')847 if (pgetc(psh) == '|') 848 848 RETURN(TOR); 849 pungetc( );849 pungetc(psh); 850 850 RETURN(TPIPE); 851 851 case ';': 852 if (pgetc( ) == ';')852 if (pgetc(psh) == ';') 853 853 RETURN(TENDCASE); 854 pungetc( );854 pungetc(psh); 855 855 RETURN(TSEMI); 856 856 case '(': … … 961 961 if (syntax == BASESYNTAX) 962 962 return readtoken(); 963 c = pgetc( );963 c = pgetc(psh); 964 964 goto loop; 965 965 } … … 978 978 else 979 979 setprompt(0); 980 c = pgetc( );980 c = pgetc(psh); 981 981 goto loop; /* continue outer loop */ 982 982 case CWORD: … … 989 989 break; 990 990 case CBACK: /* backslash */ 991 c = pgetc( );991 c = pgetc(psh); 992 992 if (c == PEOF) { 993 993 USTPUTC(psh, '\\', out); 994 pungetc( );994 pungetc(psh); 995 995 break; 996 996 } … … 1093 1093 --parenlevel; 1094 1094 } else { 1095 if (pgetc( ) == ')') {1095 if (pgetc(psh) == ')') { 1096 1096 if (--arinest == 0) { 1097 1097 USTPUTC(psh, CTLENDARI, out); … … 1108 1108 * (don't 2nd guess - no error) 1109 1109 */ 1110 pungetc( );1110 pungetc(psh); 1111 1111 USTPUTC(psh, ')', out); 1112 1112 } … … 1123 1123 USTPUTC(psh, c, out); 1124 1124 } 1125 c = pgetc_macro( );1125 c = pgetc_macro(psh); 1126 1126 } 1127 1127 } … … 1147 1147 return lasttoken = TREDIR; 1148 1148 } else { 1149 pungetc( );1149 pungetc(psh); 1150 1150 } 1151 1151 } … … 1171 1171 if (striptabs) { 1172 1172 while (c == '\t') 1173 c = pgetc( );1173 c = pgetc(psh); 1174 1174 } 1175 1175 if (c == *eofmark) { 1176 if (pfgets( line, sizeof line) != NULL) {1176 if (pfgets(psh, line, sizeof line) != NULL) { 1177 1177 char *p, *q; 1178 1178 … … 1184 1184 needprompt = doprompt; 1185 1185 } else { 1186 pushstring( line, strlen(line), NULL);1186 pushstring(psh, line, strlen(line), NULL); 1187 1187 } 1188 1188 } … … 1206 1206 if (c == '>') { 1207 1207 np->nfile.fd = 1; 1208 c = pgetc( );1208 c = pgetc(psh); 1209 1209 if (c == '>') 1210 1210 np->type = NAPPEND; … … 1215 1215 else { 1216 1216 np->type = NTO; 1217 pungetc( );1217 pungetc(psh); 1218 1218 } 1219 1219 } else { /* c == '<' */ 1220 1220 np->nfile.fd = 0; 1221 switch (c = pgetc( )) {1221 switch (c = pgetc(psh)) { 1222 1222 case '<': 1223 1223 if (sizeof (struct nfile) != sizeof (struct nhere)) { … … 1228 1228 heredoc = (struct heredoc *)stalloc(psh, sizeof (struct heredoc)); 1229 1229 heredoc->here = np; 1230 if ((c = pgetc( )) == '-') {1230 if ((c = pgetc(psh)) == '-') { 1231 1231 heredoc->striptabs = 1; 1232 1232 } else { 1233 1233 heredoc->striptabs = 0; 1234 pungetc( );1234 pungetc(psh); 1235 1235 } 1236 1236 break; … … 1246 1246 default: 1247 1247 np->type = NFROM; 1248 pungetc( );1248 pungetc(psh); 1249 1249 break; 1250 1250 } … … 1269 1269 static const char types[] = "}-+?="; 1270 1270 1271 c = pgetc( );1271 c = pgetc(psh); 1272 1272 if (c != '(' && c != OPENBRACE && !is_name(c) && !is_special(c)) { 1273 1273 USTPUTC(psh, '$', out); 1274 pungetc( );1274 pungetc(psh); 1275 1275 } else if (c == '(') { /* $(command) or $((arith)) */ 1276 if (pgetc( ) == '(') {1276 if (pgetc(psh) == '(') { 1277 1277 PARSEARITH(); 1278 1278 } else { 1279 pungetc( );1279 pungetc(psh); 1280 1280 PARSEBACKQNEW(); 1281 1281 } … … 1286 1286 subtype = VSNORMAL; 1287 1287 if (c == OPENBRACE) { 1288 c = pgetc( );1288 c = pgetc(psh); 1289 1289 if (c == '#') { 1290 if ((c = pgetc( )) == CLOSEBRACE)1290 if ((c = pgetc(psh)) == CLOSEBRACE) 1291 1291 c = '#'; 1292 1292 else … … 1299 1299 do { 1300 1300 STPUTC(psh, c, out); 1301 c = pgetc( );1301 c = pgetc(psh); 1302 1302 } while (is_in_name(c)); 1303 1303 } else if (is_digit(c)) { 1304 1304 do { 1305 1305 USTPUTC(psh, c, out); 1306 c = pgetc( );1306 c = pgetc(psh); 1307 1307 } while (is_digit(c)); 1308 1308 } 1309 1309 else if (is_special(c)) { 1310 1310 USTPUTC(psh, c, out); 1311 c = pgetc( );1311 c = pgetc(psh); 1312 1312 } 1313 1313 else … … 1320 1320 case ':': 1321 1321 flags = VSNUL; 1322 c = pgetc( );1322 c = pgetc(psh); 1323 1323 /*FALLTHROUGH*/ 1324 1324 default: … … 1334 1334 subtype = c == '#' ? VSTRIMLEFT : 1335 1335 VSTRIMRIGHT; 1336 c = pgetc( );1336 c = pgetc(psh); 1337 1337 if (c == cc) 1338 1338 subtype++; 1339 1339 else 1340 pungetc( );1340 pungetc(psh); 1341 1341 break; 1342 1342 } 1343 1343 } 1344 1344 } else { 1345 pungetc( );1345 pungetc(psh); 1346 1346 } 1347 1347 if (ISDBLQUOTE() || arinest) … … 1415 1415 needprompt = 0; 1416 1416 } 1417 switch (pc = pgetc( )) {1417 switch (pc = pgetc(psh)) { 1418 1418 case '`': 1419 1419 goto done; 1420 1420 1421 1421 case '\\': 1422 if ((pc = pgetc( )) == '\n') {1422 if ((pc = pgetc(psh)) == '\n') { 1423 1423 plinno++; 1424 1424 if (doprompt) … … 1459 1459 if (psavelen > 0) { 1460 1460 pstr = grabstackstr(psh, pout); 1461 setinputstring(ps tr, 1);1461 setinputstring(psh, pstr, 1); 1462 1462 } 1463 1463 } … … 1489 1489 * tokens left from the backquote parsing 1490 1490 */ 1491 popfile( );1491 popfile(psh); 1492 1492 tokpushback = 0; 1493 1493 } … … 1629 1629 setprompt(int which) 1630 1630 { 1631 whichprompt = which;1631 psh->whichprompt = which; 1632 1632 1633 1633 #ifndef SMALL … … 1644 1644 getprompt(void *unused) 1645 1645 { 1646 switch ( whichprompt) {1646 switch (psh->whichprompt) { 1647 1647 case 0: 1648 1648 return "";
Note:
See TracChangeset
for help on using the changeset viewer.