Lines Matching refs:str

30 static void addsemi ( STR *str );
31 static void emit_split ( STR *str, int level );
32 static void fixtab ( STR *str, int lvl );
34 static void tab ( STR *str, int lvl );
39 char *savestr(char *str);
53 register STR *str;
91 str = walk(0,level,ops[node+1].ival,&numarg,P_MIN);
97 str_cat(str,"$[ = 1;\t\t\t# set array base to 1\n");
106 str_cat(str,"$FS = '");
108 str_cat(str,"\\");
110 str_cat(str,tokenbuf);
111 str_cat(str,"';\t\t# field separator from -F switch\n");
114 str_cat(str,"$FS = ' ';\t\t# set field separator\n");
117 str_cat(str,"$, = ' ';\t\t# set output field separator\n");
120 str_cat(str,"$\\ = \"\\n\";\t\t# set output record separator\n");
123 str_cat(str,"$ARGV0 = $0;\t\t# remember what we ran as\n");
125 if (str->str_cur > 20)
126 str_cat(str,"\n");
128 str_scat(str,fstr=walk(0,level,ops[node+2].ival,&numarg,P_MIN));
130 str_cat(str,"\n\n");
135 str_cat(str,"line: ");
136 str_cat(str,"while (<>) {\n");
137 tab(str,++level);
141 str_cat(str,"chomp;\t# strip record separator\n");
142 tab(str,level);
145 emit_split(str,level);
146 str_scat(str,fstr);
148 fixtab(str,--level);
149 str_cat(str,"}\n");
151 str_cat(str,"continue {\n $FNRbase = $. if eof;\n}\n");
154 str_cat(str,"while (<>) { } # (no line actions)\n");
157 str_cat(str,"\n");
158 tab(str,level);
159 str_scat(str,fstr=walk(0,level,ops[node+4].ival,&numarg,P_MIN));
161 str_cat(str,"\n");
164 str_cat(str,"exit $ExitValue;\n");
166 str_cat(str,"\n");
167 str_scat(str,subs);
173 str_cat(str, tokenbuf);
176 str_cat(str," &Pick('',@_);\n");
178 str_cat(str," ($fh) = @_;\n");
182 str_cat(str," $FNRbase = $. if eof;\n");
185 str_cat(str," local($_);\n");
187 str_cat(str,
190 str_cat(str,
192 str_cat(str, " {\n");
194 tab(str,level);
198 str_cat(str,"chomp;\t# strip record separator\n");
199 tab(str,level);
203 emit_split(str,level);
206 str_cat(str,";\n");
207 fixtab(str,--level);
208 str_cat(str,"}\n $_;\n}\n");
214 str_cat(str,"\n\
224 str = walk(0,level,ops[node+1].ival,&numarg,P_MIN);
225 str_scat(str,fstr=walk(0,level,ops[node+2].ival,&numarg,P_MIN));
228 str_scat(str,fstr=walk(0,level,ops[node+3].ival,&numarg,P_MIN));
236 str = walk(1,level,ops[node+1].ival,&numarg,prec+1);
237 str_cat(str," .. ");
238 str_scat(str,fstr=walk(1,level,ops[node+2].ival,&numarg,prec+1));
244 str = str_new(0);
245 str_set(str,"/");
263 str_cat(str,tokenbuf);
265 str_cat(str,"/");
269 str = str_new(0);
270 str = walk(0,level,oper1(OPRINT,0),&numarg,P_MIN);
271 str_cat(str," if ");
272 str_scat(str,fstr=walk(0,level,ops[node+1].ival,&numarg,P_MIN));
274 str_cat(str,";");
279 str = str_new(0);
280 str_set(str,"if (");
281 str_scat(str,tmpstr);
282 str_cat(str,") {\n");
283 tab(str,++level);
284 str_scat(str,fstr=walk(0,level,ops[node+2].ival,&numarg,P_MIN));
286 fixtab(str,--level);
287 str_cat(str,"}\n");
288 tab(str,level);
291 str = walk(0,level,ops[node+2].ival,&numarg,P_MIN);
296 str = str_new(0);
297 str_set(str,"(");
298 str_scat(str,fstr=walk(useval != 0,level,ops[node+1].ival,&numarg,P_MIN));
300 str_cat(str,")");
304 str = walk(1,level,ops[node+1].ival,&numarg,prec);
305 str_cat(str," && ");
306 str_scat(str,fstr=walk(1,level,ops[node+2].ival,&numarg,prec+1));
308 str_scat(str,fstr=walk(1,level,ops[node+3].ival,&numarg,prec+1));
313 str = walk(1,level,ops[node+1].ival,&numarg,prec);
314 str_cat(str," || ");
315 str_scat(str,fstr=walk(1,level,ops[node+2].ival,&numarg,prec+1));
317 str_scat(str,fstr=walk(1,level,ops[node+3].ival,&numarg,prec+1));
322 str = str_new(0);
323 str_set(str,"!");
324 str_scat(str,fstr=walk(1,level,ops[node+1].ival,&numarg,prec));
329 str = walk(1,level,ops[node+1].ival,&numarg,prec);
330 str_cat(str," ? ");
331 str_scat(str,fstr=walk(1,level,ops[node+2].ival,&numarg,prec+1));
333 str_cat(str," : ");
334 str_scat(str,fstr=walk(1,level,ops[node+3].ival,&numarg,prec+1));
338 str = str_new(0);
339 str_set(str,"(");
340 str_scat(str,fstr=walk(useval != 0,level,ops[node+1].ival,&numarg,P_MIN));
343 str_cat(str,")");
347 str = walk(1,level,ops[node+1].ival,&numarg,prec);
349 str_cat(str," && ");
350 str_scat(str,fstr=walk(1,level,ops[node+2].ival,&numarg,prec+1));
352 str_scat(str,fstr=walk(1,level,ops[node+3].ival,&numarg,prec+1));
357 str = walk(1,level,ops[node+1].ival,&numarg,prec);
359 str_cat(str," || ");
360 str_scat(str,fstr=walk(1,level,ops[node+2].ival,&numarg,prec+1));
362 str_scat(str,fstr=walk(1,level,ops[node+3].ival,&numarg,prec+1));
367 str = str_new(0);
368 str_set(str,"!");
369 str_scat(str,fstr=walk(1,level,ops[node+1].ival,&numarg,prec));
375 str = walk(1,level,ops[node+2].ival,&numarg,prec+1);
401 str_cat(str," ");
403 str_cat(str,"\377");
407 str_cat(str," ");
408 str_scat(str,tmpstr);
410 str_cat(str," ");
411 str_scat(str,tmp2str);
416 str = str_new(0);
417 str_set(str,"(");
418 str_scat(str,fstr=walk(useval != 0,level,ops[node+1].ival,&numarg,P_MIN));
421 str_cat(str,")");
425 str = walk(1,level,ops[node+2].ival,&numarg,prec+1);
426 str_cat(str," ");
429 str_cat(str,"=~");
431 str_scat(str,tmpstr);
434 str_cat(str," ");
435 str_scat(str,fstr=walk(1,level,ops[node+3].ival,&numarg,prec+1));
440 str = str_new(0);
441 str_set(str,"(");
442 str_scat(str,
446 str_cat(str,")");
451 str = walk(1,level,ops[node+1].ival,&numarg,prec+(type != OCONCAT));
452 str_cat(str," . ");
454 str_scat(str,
460 str = walk(0,level,ops[node+2].ival,&numarg,prec+1);
461 str_cat(str," ");
463 str_scat(str,tmpstr);
467 str_cat(str," ");
468 str_scat(str,fstr=walk(1,level,ops[node+3].ival,&numarg,prec));
471 if (strEQ(str->str_ptr,"$/ = ''"))
472 str_set(str, "$/ = \"\\n\\n\"");
476 str = walk(1,level,ops[node+1].ival,&numarg,prec);
477 str_cat(str," + ");
478 str_scat(str,fstr=walk(1,level,ops[node+2].ival,&numarg,prec+1));
484 str = walk(1,level,ops[node+1].ival,&numarg,prec);
485 str_cat(str," - ");
486 str_scat(str,fstr=walk(1,level,ops[node+2].ival,&numarg,prec+1));
492 str = walk(1,level,ops[node+1].ival,&numarg,prec);
493 str_cat(str," * ");
494 str_scat(str,fstr=walk(1,level,ops[node+2].ival,&numarg,prec+1));
500 str = walk(1,level,ops[node+1].ival,&numarg,prec);
501 str_cat(str," / ");
502 str_scat(str,fstr=walk(1,level,ops[node+2].ival,&numarg,prec+1));
508 str = walk(1,level,ops[node+1].ival,&numarg,prec+1);
509 str_cat(str," ** ");
510 str_scat(str,fstr=walk(1,level,ops[node+2].ival,&numarg,prec));
516 str = walk(1,level,ops[node+1].ival,&numarg,prec);
517 str_cat(str," % ");
518 str_scat(str,fstr=walk(1,level,ops[node+2].ival,&numarg,prec+1));
524 str = walk(1,level,ops[node+1].ival,&numarg,prec+1);
525 str_cat(str,"++");
530 str = walk(1,level,ops[node+1].ival,&numarg,prec+1);
531 str_cat(str,"--");
536 str = str_new(0);
537 str_set(str,"++");
538 str_scat(str,fstr=walk(1,level,ops[node+1].ival,&numarg,prec+1));
544 str = str_new(0);
545 str_set(str,"--");
546 str_scat(str,fstr=walk(1,level,ops[node+1].ival,&numarg,prec+1));
552 str = str_new(0);
553 str_set(str,"-");
554 str_scat(str,fstr=walk(1,level,ops[node+1].ival,&numarg,prec));
562 str = str_new(0);
563 str_set(str,"(");
564 str_scat(str,
567 str_cat(str,")");
571 str = str_new(0);
573 str_cat(str,"(");
575 str_scat(str,fstr=walk(1,level,ops[node+1].ival,&numarg,P_MIN));
577 str_cat(str,"$_");
583 str_cat(str,"$_");
642 str_cat(str,tokenbuf);
645 str_cat(str,",$getline_ok)");
649 str = str_new(0);
650 str_set(str,"sprintf(");
651 str_scat(str,fstr=walk(1,level,ops[node+1].ival,&numarg,P_MIN));
653 str_cat(str,")");
656 str = str_new(0);
657 str_set(str,"substr(");
658 str_scat(str,fstr=walk(1,level,ops[node+1].ival,&numarg,P_COMMA+1));
660 str_cat(str,", ");
661 str_scat(str,fstr=walk(1,level,ops[node+2].ival,&numarg,P_COMMA+1));
663 str_cat(str,", ");
665 str_scat(str,fstr=walk(1,level,ops[node+3].ival,&numarg,P_COMMA+1));
669 str_cat(str,"999999");
670 str_cat(str,")");
673 str = str_new(0);
674 str_set(str,ops[node+1].cval);
677 str = str_new(0);
682 str_set(str,"(@");
684 str_set(str,"@");
685 str_scat(str,tmpstr);
686 str_cat(str," = split(");
697 str_cat(str,tokenbuf);
700 str_scat(str,fstr);
705 str_cat(str,tokenbuf);
708 str_cat(str,"$FS");
710 str_cat(str,"' '");
713 str_cat(str,", ");
714 str_scat(str,fstr=walk(1,level,ops[node+1].ival,&numarg,P_COMMA+1));
716 str_cat(str,limit);
718 str_cat(str,")");
723 str = str_new(0);
724 str_set(str,"index(");
725 str_scat(str,fstr=walk(1,level,ops[node+1].ival,&numarg,P_COMMA+1));
727 str_cat(str,", ");
728 str_scat(str,fstr=walk(1,level,ops[node+2].ival,&numarg,P_COMMA+1));
730 str_cat(str,")");
734 str = str_new(0);
736 str_scat(str,fstr=walk(1,level,ops[node+1].ival,&numarg,P_MATCH+1));
738 str_cat(str," =~ ");
739 str_scat(str,fstr=walk(1,level,ops[node+2].ival,&numarg,P_MATCH+1));
741 str_cat(str," && ($RLENGTH = length($&), $RSTART = length($`)+1)");
745 str = str_new(0);
771 str_set(str,"\n");
772 tab(str,level);
773 str_cat(str,"sub ");
774 str_scat(str,tmpstr=walk(1,level,ops[node+1].ival,&numarg,P_MIN));
775 str_cat(str," {\n");
776 tab(str,++level);
778 str_cat(str,"local(");
779 str_scat(str,fstr);
780 str_cat(str,") = @_;");
783 str_scat(str,fstr=walk(1,level,ops[node+3].ival,&numarg,P_MIN));
785 fixtab(str,level);
786 str_scat(str,fstr=walk(1,level,ops[node+4].ival,&numarg,P_MIN));
788 fixtab(str,level);
789 str_scat(str,tmp2str);
791 fixtab(str,--level);
792 str_cat(str,"}\n");
793 tab(str,level);
794 str_scat(subs,str);
795 str_set(str,"");
805 str = str_new(0);
807 str_cat(str,"return ");
808 str_scat(str,fstr=walk(1,level,ops[node+1].ival,&numarg,P_UNI+1));
814 str_cat(str,"return");
817 str = str_new(0);
818 str_set(str,"&");
819 str_scat(str,fstr=walk(1,level,ops[node+1].ival,&numarg,P_MIN));
821 str_cat(str,"(");
822 tmpstr = hfetch(symtab,str->str_ptr+3);
825 str_scat(str,fstr=walk(1,level,ops[node+2].ival,&numarg,P_MIN));
827 str_cat(str,")");
832 str = str_new(0);
879 str_cat(str,"(");
880 str_scat(str,tmp3str);
881 str_scat(str,tmpstr);
882 str_scat(str,fstr);
883 str_scat(str,tmp2str);
887 str_cat(str,"(");
888 str_scat(str,tmp3str);
889 str_scat(str,tmpstr);
890 str_cat(str,"/");
891 str_scat(str,fstr);
892 str_cat(str,"/");
893 str_scat(str,tmp2str);
898 str_cat(str,"(");
899 str_cat(str,"$s = ");
900 str_scat(str,fstr);
901 str_cat(str,", ");
902 str_scat(str,tmp3str);
903 str_scat(str,tmpstr);
904 str_cat(str,"/$s/");
905 str_scat(str,tmp2str);
908 str_cat(str,")");
916 str = walk(1,level,ops[node+1].ival,&numarg,P_MIN);
938 str = str_new(0);
939 str_set(str,s);
940 str_cat(str,tokenbuf);
942 str_cat(str,s);
946 str = str_new(0);
947 str_set(str,"defined $");
950 str = str_new(0);
951 str_set(str,"delete $");
954 str = str_new(0);
955 str_set(str,"*");
958 str = str_new(0);
959 str_set(str,"$");
961 str_scat(str,tmpstr=walk(1,level,ops[node+1].ival,&numarg,P_MIN));
966 if (strEQ(str->str_ptr,"$FNR")) {
969 str_set(str,"($.-$FNRbase)");
971 else if (strEQ(str->str_ptr,"$NR")) {
973 str_set(str,"$.");
975 else if (strEQ(str->str_ptr,"$NF")) {
977 str_set(str,"$#Fld");
979 else if (strEQ(str->str_ptr,"$0"))
980 str_set(str,"$_");
981 else if (strEQ(str->str_ptr,"$ARGC"))
982 str_set(str,"($#ARGV+1)");
989 str_cat(str,"\377"); /* can't translate yet */
995 str_cat(str,"[");
997 str_cat(str,"{");
998 str_scat(str,fstr=walk(1,level,ops[node+2].ival,&numarg,P_MIN));
1000 if (strEQ(str->str_ptr,"$ARGV[0")) {
1001 str_set(str,"$ARGV0");
1010 str_cat(str,tokenbuf);
1016 str = str_new(0);
1018 str_set(str,"$Fld");
1019 str_cat(str,"[");
1020 str_scat(str,fstr=walk(1,level,ops[node+1].ival,&numarg,P_MIN));
1022 str_cat(str,"]");
1030 str_set(str,tokenbuf);
1034 str = str_new(0);
1035 str_set(str,"$Fld[");
1040 str_scat(str,tmpstr);
1042 str_cat(str,"]");
1047 str = str_new(2);
1048 str_set(str,";\n");
1049 tab(str,level);
1052 str = str_new(1);
1053 str_set(str,"\n");
1054 tab(str,level);
1057 str = str_new(0);
1058 str_set(str,";");
1062 str_scat(str,tmpstr);
1064 tab(str,level);
1067 str = str_new(0);
1071 str_scat(str,tmpstr);
1073 tab(str,level);
1077 str = walk(1,level,ops[node+1].ival,&numarg,prec);
1078 str_cat(str,", ");
1079 str_scat(str,fstr=walk(1,level,ops[node+2].ival,&numarg,P_MIN));
1081 str_scat(str,fstr=walk(1,level,ops[node+3].ival,&numarg,prec+1));
1085 str = str_new(1);
1086 str_set(str,";\n");
1087 tab(str,level);
1090 str = walk(0,level,ops[node+1].ival,&numarg,P_MIN);
1091 str_scat(str,fstr=walk(0,level,ops[node+2].ival,&numarg,P_MIN));
1095 str = str_new(0);
1097 str_scat(str,fstr=walk(0,level,ops[node+1].ival,&numarg,P_MIN));
1102 addsemi(str);
1103 str_cat(str,tmpstr->str_ptr+1);
1110 str = str_make("close(");
1130 str_set(str,"close ");
1131 str_cat(str,tokenbuf);
1137 str_set(str,tokenbuf);
1144 str = str_new(0);
1194 str_cat(str,tokenbuf);
1195 tab(str,level+1);
1205 str_cat(str,lparen); /* may be null */
1207 str_cat(str,"printf");
1209 str_cat(str,"print");
1213 str_cat(str," ");
1216 str_cat(str,tokenbuf);
1241 str_cat(str," ");
1243 str_cat(str,"(");
1244 str_scat(str,tmpstr);
1245 str_cat(str,")");
1248 str_scat(str,tmpstr);
1251 str_cat(str," $_");
1253 str_cat(str,rparen); /* may be null */
1257 str = str_make("rand(1)");
1260 str = str_make("srand(");
1263 str = str_make("atan2(");
1266 str = str_make("sin(");
1269 str = str_make("cos(");
1272 str = str_make("system(");
1275 str = str_make("length(");
1278 str = str_make("log(");
1281 str = str_make("exp(");
1284 str = str_make("sqrt(");
1287 str = str_make("int(");
1323 str = str_make("(length(");
1327 str_scat(str,tmpstr);
1329 str_cat(str,")");
1332 str = str_new(0);
1333 str_set(str,"last");
1336 str = str_new(0);
1337 str_set(str,"next line");
1340 str = str_new(0);
1343 str_set(str,"exit");
1345 str_cat(str," ");
1347 str_scat(str,
1354 str_set(str,"$ExitValue = ");
1356 str_scat(str,
1359 str_cat(str,"; ");
1361 str_cat(str,"last line");
1365 str = str_new(0);
1366 str_set(str,"next");
1371 str = str_new(0);
1372 str_set(str,"if (");
1373 str_scat(str,fstr=walk(1,level,ops[node+1].ival,&numarg,P_MIN));
1375 str_cat(str,") ");
1376 str_scat(str,fstr=walk(0,level,ops[node+2].ival,&numarg,P_MIN));
1392 str_cat(str,"els");
1393 str_scat(str,fstr=walk(0,level,i,&numarg,P_MIN));
1397 str_cat(str,"else ");
1398 str_scat(str,fstr=walk(0,level,ops[node+3].ival,&numarg,P_MIN));
1404 str = str_new(0);
1405 str_set(str,"while (");
1406 str_scat(str,fstr=walk(1,level,ops[node+1].ival,&numarg,P_MIN));
1408 str_cat(str,") ");
1409 str_scat(str,fstr=walk(0,level,ops[node+2].ival,&numarg,P_MIN));
1413 str = str_new(0);
1414 str_set(str,"do ");
1415 str_scat(str,fstr=walk(1,level,ops[node+1].ival,&numarg,P_MIN));
1417 if (str->str_ptr[str->str_cur - 1] == '\n')
1418 --str->str_cur;
1419 str_cat(str," while (");
1420 str_scat(str,fstr=walk(0,level,ops[node+2].ival,&numarg,P_MIN));
1422 str_cat(str,");");
1425 str = str_new(0);
1426 str_set(str,"for (");
1427 str_scat(str,tmpstr=walk(1,level,ops[node+1].ival,&numarg,P_MIN));
1437 str_cat(str,"; ");
1443 str_scat(str,fstr);
1446 str_cat(str,"; ");
1447 str_scat(str,fstr=walk(1,level,ops[node+3].ival,&numarg,P_MIN));
1449 str_cat(str,") ");
1450 str_scat(str,fstr=walk(0,level,ops[node+4].ival,&numarg,P_MIN));
1471 str = str_new(0);
1472 str_set(str,d+1);
1473 str_cat(str,"[]");
1474 tmp2str = hfetch(symtab,str->str_ptr);
1487 str_set(str,tokenbuf);
1488 str_scat(str,fstr=walk(0,level,ops[node+2].ival,&numarg,P_MIN));
1493 str = str_new(0);
1494 str_set(str,"{");
1496 str_scat(str,fstr=walk(0,level,ops[node+2].ival,&numarg,P_MIN));
1499 fixtab(str,++level);
1500 str_scat(str,fstr=walk(0,level,ops[node+1].ival,&numarg,P_MIN));
1502 addsemi(str);
1503 fixtab(str,--level);
1504 str_cat(str,"}\n");
1505 tab(str,level);
1507 str_scat(str,fstr=walk(0,level,ops[node+3].ival,&numarg,P_MIN));
1516 str = walk(0,level,ops[node+1].ival,&numarg,P_MIN);
1518 str_scat(str,fstr=walk(0,level,ops[node+i].ival,&numarg,P_MIN));
1523 str = Nullstr;
1527 if (!str)
1528 str = str_new(0);
1531 fstr = str_new(str->str_cur+2);
1533 str_scat(fstr,str);
1535 str_free(str);
1536 str = fstr;
1542 printf("%3d %5d %15s %d %4d ",level,node,opname[type],len,str->str_cur);
1543 for (t = str->str_ptr; *t && t - str->str_ptr < 40; t++)
1553 return str;
1557 tab(register STR *str, register int lvl)
1560 str_cat(str,"\t");
1564 str_cat(str," ");
1568 fixtab(register STR *str, register int lvl)
1574 s = str->str_ptr+str->str_cur - 1;
1575 while (s >= str->str_ptr && (*s == ' ' || *s == '\t' || *s == '\n'))
1578 str->str_cur = s + 1 - str->str_ptr;
1579 if (s >= str->str_ptr && *s != '\n')
1580 str_cat(str,"\n");
1582 tab(str,lvl);
1586 addsemi(register STR *str)
1590 s = str->str_ptr+str->str_cur - 1;
1591 while (s >= str->str_ptr && (*s == ' ' || *s == '\t' || *s == '\n'))
1593 if (s >= str->str_ptr && *s != ';' && *s != '}')
1594 str_cat(str,";");
1598 emit_split(register STR *str, int level)
1603 str_cat(str,"@Fld");
1605 str_cat(str,"(");
1611 str_cat(str,tokenbuf);
1617 str_cat(str,tokenbuf);
1621 str_cat(str,tokenbuf);
1624 str_cat(str," = split($FS, $_, 9999);\n");
1626 str_cat(str," = split(' ', $_, 9999);\n");
1627 tab(str,level);