Lines Matching refs:pp
33 #define REFONE (pp.truncate?(Hash_table_t*)0:pp.symtab)
34 #define REFALL (pp.truncate?pp.dirtab:pp.symtab)
48 r = p == &pp.state ? &pp.ro_state : p == &pp.mode ? &pp.ro_mode : &pp.ro_option;
49 if (!(pp.mode & INIT) || !(pp.in->type == IN_FILE) || !(*r & op))
51 if (!pp.initialized && !(pp.mode & INIT))
58 debug((-7, "set(%s)=%s", p == &pp.state ? "state" : p == &pp.mode ? "mode" : "option", p == &pp.state ? ppstatestr(*p) : p == &pp.mode ? ppmodestr(*p) : ppoptionstr(*p)));
119 old_state = pp.state;
131 s = t = strcopy(pp.tmpbuf, error_info.file);
135 if (s <= pp.tmpbuf || *s == '/')
145 file = pp.tmpbuf;
154 pp.state |= (COMPILE|FILEPOP|HEADER|JOINING|STRIP|NOSPACE|PASSEOF);
156 pp.state |= (COMPILE|FILEPOP|HEADER|STRIP|NOSPACE|PASSEOF);
158 pp.level++;
171 for (dp = pp.firstdir->next; dp; dp = dp->next)
180 pathcanon(pp.token, 0);
181 fp = ppsetfile(pp.token);
203 if (streq(pp.token, "all"))
208 else if (streq(pp.token, "hosted"))
213 else if (streq(pp.token, "nohosted"))
220 error(3, "%s unexpected in %s map list", pptokstr(pp.token, 0), dirname(INCLUDE));
225 pp.level--;
227 pp.state = old_state;
244 * compare up to pp.truncate chars
252 return !strchr(b, ' ') && !strneq(b, "__STD", 5) ? strncmp(a, b, pp.truncate) : strcmp(a, b);
256 * hash up to pp.truncate chars
266 return memhash(a, (n = strlen(a)) > pp.truncate && !strchr(a, ' ') && !strneq(a, "__STD", 5) ? pp.truncate : n);
281 if (error_info.trace <= -10 && pp.state != state)
283 state = pp.state;
284 sfprintf(sp, " %s", ppstatestr(pp.state));
322 * pp operations
359 if (pp.initialized)
363 if (pp.lastop)
364 pp.lastop = (pp.lastop->next = newof(0, struct oplist, 1, 0));
366 pp.firstop = pp.lastop = newof(0, struct oplist, 1, 0);
367 pp.lastop->op = op;
368 pp.lastop->value = p;
372 pp.builtin = va_arg(ap, PPBUILTIN);
377 pp.cdir.path = 0;
379 pp.c = c;
382 pp.c = c;
383 for (dp = pp.firstdir; dp; dp = dp->next)
386 else if (!pp.c)
389 pp.c = c;
392 for (dp = pp.firstdir; dp; dp = dp->next)
394 if (!pp.c && (dp->c || dp->name && SAMEID(&dp->id, &st)))
395 pp.c = 1;
396 dp->c = pp.c == 1;
398 if (!pp.c)
400 pp.cdir.path = p;
401 SAVEID(&pp.cdir.id, &st);
426 xp->next = pp.chop;
427 pp.chop = xp;
431 if (pp.comment = va_arg(ap, PPCOMMENT))
432 pp.flags |= PP_comment;
434 pp.flags &= ~PP_comment;
437 set(&pp.state, COMPATIBILITY, va_arg(ap, int));
439 if (pp.initialized)
442 if (pp.state & COMPATIBILITY)
445 if (pp.state & COMPATIBILITY)
446 pp.flags |= PP_compatibility;
448 pp.flags &= ~PP_compatibility;
451 if (pp.initialized)
453 pp.state |= COMPILE;
454 if (!pp.symtab)
455 pp.symtab = hashalloc(NiL, HASH_name, "symbols", 0);
467 if (!(pp.option & PLUSPLUS))
474 if (key = ppkeyset(pp.symtab, s))
487 if (pp.ppdefault)
488 free(pp.ppdefault);
489 pp.ppdefault = p;
493 if (pp.mode & DUMP)
496 if (pp.mode & FILEDEPS)
498 sfputc(pp.filedeps.sp, '\n');
499 if (pp.filedeps.sp == sfstdout)
500 sfsync(pp.filedeps.sp);
502 sfclose(pp.filedeps.sp);
504 if (pp.state & STANDALONE)
506 if ((pp.state & (NOTEXT|HIDDEN)) == HIDDEN && pplastout() != '\n')
513 set(&pp.mode, DUMP, va_arg(ap, int));
515 if (pp.mode & DUMP)
521 pp.filedeps.flags |= n;
523 pp.filedeps.flags = 0;
529 if (!(pp.mode & INIT))
530 pp.ro_mode |= HOSTED;
531 else if (pp.ro_mode & HOSTED)
533 pp.ro_mode |= INIT;
536 pp.hostdir.path = 0;
538 pp.hosted = c;
541 if (pp.initialized)
542 set(&pp.mode, HOSTED, c);
545 pp.hosted = c ? 1 : 2;
546 for (dp = pp.firstdir; dp; dp = dp->next)
547 if (pp.hosted == 1)
553 else if (!pp.hosted)
556 pp.hosted = 1;
559 for (dp = pp.firstdir; dp; dp = dp->next)
561 if (!pp.hosted && ((dp->type & TYPE_HOSTED) || dp->name && SAMEID(&dp->id, &st)))
562 pp.hosted = 1;
563 if (pp.hosted == 1)
568 if (!pp.hosted)
570 pp.hostdir.path = p;
571 SAVEID(&pp.hostdir.id, &st);
591 if (pp.initialized)
593 pp.ignore = va_arg(ap, char*);
601 for (dp = pp.stddirs; dp = dp->next;)
604 if (pp.cdir.path && SAMEID(&pp.cdir.id, &st))
606 pp.cdir.path = 0;
607 pp.c = 1;
609 if (pp.hostdir.path && SAMEID(&pp.hostdir.id, &st))
611 pp.hostdir.path = 0;
612 pp.hosted = 1;
614 if ((pp.mode & INIT) && !(pp.ro_mode & INIT))
615 pp.hosted = 1;
616 c = dp && dp->c || pp.c == 1;
617 n = dp && (dp->type & TYPE_HOSTED) || pp.hosted == 1;
618 if (!dp || dp == pp.lastdir->next)
629 dp->index = INC_LOCAL + pp.ignoresrc != 0;
630 dp->next = pp.lastdir->next;
631 pp.lastdir = pp.lastdir->next = dp;
641 pp.incref = va_arg(ap, PPINCREF);
644 pp.reset.on = 1;
647 if (pp.initialized)
670 error_info.version = (char*)pp.version;
686 pp.macp = newof(0, struct ppmacstk, DEFMACSTACK, 0);
687 pp.macp->next = pp.macp + 1;
688 pp.maxmac = (char*)pp.macp + DEFMACSTACK;
695 pp.control = newof(0, long, pp.constack, 0);
696 pp.maxcon = pp.control + pp.constack - 1;
703 switch (pp.arg_mode)
739 if (!(pp.state & WARN) && !(pp.arg_style & STYLE_gnu))
741 if (pp.state & PASSTHROUGH)
743 if (pp.state & COMPILE)
745 pp.state &= ~PASSTHROUGH;
753 set(&pp.state, DISABLE, va_arg(ap, int));
761 if (!pp.symtab)
762 pp.symtab = hashalloc(NiL, HASH_name, "symbols", 0);
763 if (!pp.dirtab)
765 pp.dirtab = hashalloc(REFONE, HASH_name, "directives", 0);
766 inithash(pp.dirtab, directives);
768 if (!pp.filtab)
769 pp.filtab = hashalloc(REFALL, HASH_name, "files", 0);
770 if (!pp.prdtab)
771 pp.prdtab = hashalloc(REFALL, HASH_name, "predicates", 0);
772 if (!pp.strtab)
774 pp.strtab = hashalloc(REFALL, HASH_name, "strings", 0);
775 inithash(pp.strtab, options);
776 inithash(pp.strtab, predicates);
777 inithash(pp.strtab, variables);
779 pp.optflags[X_PROTOTYPED] = OPT_GLOBAL;
780 pp.optflags[X_SYSTEM_HEADER] = OPT_GLOBAL|OPT_PASS;
797 hashset(pp.dirtab, HASH_ALLOCATE);
798 hashset(pp.filtab, HASH_ALLOCATE);
799 hashset(pp.prdtab, HASH_ALLOCATE);
800 hashset(pp.strtab, HASH_ALLOCATE);
801 hashset(pp.symtab, HASH_ALLOCATE);
802 if (pp.test & TEST_nonoise)
808 if (!(pp.test & TEST_noinit))
824 pp.pass,
828 pp.pass,
831 if (pp.ppdefault && *pp.ppdefault)
833 if (pp.probe)
835 c = pp.lastdir->next->type;
836 pp.lastdir->next->type = 0;
838 if (ppsearch(pp.ppdefault, T_STRING, SEARCH_EXISTS) < 0)
840 free(pp.ppdefault);
841 if (!(pp.ppdefault = pathprobe(pp.path, NiL, "C", pp.pass, pp.probe ? pp.probe : PPPROBE, 0)))
842 error(1, "cannot determine default definitions for %s", pp.probe ? pp.probe : PPPROBE);
844 if (pp.probe)
845 pp.lastdir->next->type = c;
847 while (pp.firstop)
849 switch (pp.firstop->op)
852 sfprintf(sp, "#%s #%s\n", dirname(DEFINE), pp.firstop->value);
855 if (*pp.firstop->value == '#')
856 sfprintf(sp, "#%s %s\n", dirname(DEFINE), pp.firstop->value);
859 if (s = strchr(pp.firstop->value, '='))
860 sfprintf(sp, "#%s %-.*s %s\n", dirname(DEFINE), s - pp.firstop->value, pp.firstop->value, s + 1);
862 sfprintf(sp, "#%s %s 1\n", dirname(DEFINE), pp.firstop->value);
866 sfprintf(sp, "#%s\n", pp.firstop->value);
869 if (s = strchr(pp.firstop->value, '='))
870 sfprintf(sp, "#%s %s:%-.*s %s\n", dirname(PRAGMA), pp.pass, s - pp.firstop->value, pp.firstop->value, s + 1);
872 sfprintf(sp, "#%s %s:%s\n", dirname(PRAGMA), pp.pass, pp.firstop->value);
875 sfprintf(sp, "#%s \"%s\"\n", dirname(INCLUDE), pp.firstop->value);
878 sfprintf(sp, "#%s %s\n", dirname(UNDEF), pp.firstop->value);
881 pp.lastop = pp.firstop;
882 pp.firstop = pp.firstop->next;
883 free(pp.lastop);
893 , pp.pass
896 , pp.pass
920 , pp.pass
923 , pp.pass
944 , pp.pass
947 if (!pp.truncate)
967 , pp.pass
970 , pp.pass
973 if (pp.ppdefault && *pp.ppdefault)
974 sfprintf(sp, "#%s \"%s\"\n", dirname(INCLUDE), pp.ppdefault);
987 ppcomment = pp.comment;
988 pp.comment = 0;
989 pplinesync = pp.linesync;
990 pp.linesync = 0;
991 PUSH_INIT(pp.pass, t);
992 pp.mode |= INIT;
994 pp.mode &= ~INIT;
995 pp.comment = ppcomment;
996 pp.linesync = pplinesync;
997 pp.prefix = 0;
1000 for (dp = pp.firstdir; dp; dp = dp->next)
1004 if (pp.test & TEST_nonoise)
1016 if ((preroot = (struct pplist*)hashget(pp.prdtab, "preroot")))
1020 if (pp.ignoresrc)
1022 if (pp.ignoresrc > 1 && pp.stddirs != pp.firstdir)
1023 error(1, "directories up to and including %s are for \"...\" include files only", pp.stddirs->name);
1024 pp.lcldirs = pp.lcldirs->next;
1026 if (pp.ignore)
1028 if (*pp.ignore)
1029 ppmapinclude(pp.ignore, NiL);
1031 pp.ignore = 0;
1033 if (pp.standalone)
1034 pp.state |= STANDALONE;
1039 pp.initialized = 1;
1040 if (pp.reset.on)
1042 pp.reset.symtab = pp.symtab;
1043 pp.symtab = 0;
1044 pp.reset.ro_state = pp.ro_state;
1045 pp.reset.ro_mode = pp.ro_mode;
1046 pp.reset.ro_option = pp.ro_option;
1049 if (pp.reset.on)
1051 if (pp.symtab)
1053 hashwalk(pp.filtab, 0, unguard, NiL);
1054 hashfree(pp.symtab);
1056 pp.symtab = hashalloc(NiL, HASH_name, "symbols", HASH_free, undefine, HASH_set, HASH_ALLOCATE|HASH_BUCKET, 0);
1057 hashview(pp.symtab, pp.reset.symtab);
1058 pp.ro_state = pp.reset.ro_state;
1059 pp.ro_mode = pp.reset.ro_mode;
1060 pp.ro_option = pp.reset.ro_option;
1063 if (pp.mode & DUMP)
1065 if (!pp.pragma)
1067 (*pp.pragma)(dirname(PRAGMA), pp.pass, keyname(X_CHECKPOINT), pp.checkpoint, 1);
1070 if (n = pp.filedeps.flags)
1074 pp.state |= NOTEXT;
1075 pp.option |= KEEPNOTEXT;
1076 pp.linesync = 0;
1079 pp.mode |= GENDEPS;
1081 pp.mode &= ~HEADERDEPS;
1082 else if (!(pp.mode & FILEDEPS))
1083 pp.mode |= HEADERDEPS;
1084 pp.mode |= FILEDEPS;
1091 if (pp.firstdir->type & TYPE_HOSTED)
1092 pp.mode |= MARKHOSTED;
1094 pp.mode &= ~MARKHOSTED;
1096 if (!(pp.mode & DUMP))
1112 if (pp.mode & FILEDEPS)
1120 s = strcpy(pp.tmpbuf, s);
1136 if (pp.state & NOTEXT)
1137 pp.filedeps.sp = sfstdout;
1141 if (!(pp.filedeps.sp = sfopen(NiL, s, "w")))
1145 pp.column = sfprintf(pp.filedeps.sp, "%s :", s);
1147 pp.column += sfprintf(pp.filedeps.sp, " %s", error_info.file);
1149 if (xp = pp.firsttx)
1165 if (!(pp.mode & DUMP) || pp.pool.input)
1168 if (!(pp.mode & DUMP))
1171 if (pp.pool.input)
1184 set(&pp.mode, CATLITERAL, 0);
1191 if (pp.initialized)
1195 if (pp.lasttx)
1196 pp.lasttx = pp.lasttx->next = newof(0, struct oplist, 1, 0);
1198 pp.firsttx = pp.lasttx = newof(0, struct oplist, 1, 0);
1199 pp.lasttx->op = op;
1200 pp.lasttx->value = p;
1204 if (pp.initialized)
1206 set(&pp.option, KEYARGS, va_arg(ap, int));
1207 if (pp.option & KEYARGS)
1209 set(&pp.mode, CATLITERAL, 1);
1215 pp.linesync = va_arg(ap, PPLINESYNC);
1219 pp.flags |= PP_linebase;
1221 pp.flags &= ~PP_linebase;
1225 pp.flags |= PP_linefile;
1227 pp.flags &= ~PP_linefile;
1231 pp.lineid = "";
1233 pp.lineid = strdup(p);
1235 pp.option |= IGNORELINE;
1239 pp.flags |= PP_linetype;
1241 pp.flags &= ~PP_linetype;
1243 pp.flags |= PP_linehosted;
1245 pp.flags &= ~PP_linehosted;
1248 if (pp.initialized)
1250 pp.ignoresrc++;
1251 pp.stddirs = pp.lastdir;
1252 if (!(pp.ro_option & PREFIX))
1253 pp.option &= ~PREFIX;
1256 pp.macref = va_arg(ap, PPMACREF);
1259 set(&pp.mode, ALLMULTIPLE, va_arg(ap, int));
1262 set(&pp.option, NOHASH, va_arg(ap, int));
1266 set(&pp.option, NOISE, op);
1267 set(&pp.option, NOISEFILTER, op < 0);
1270 pp.optarg = va_arg(ap, PPOPTARG);
1273 pp.outfile = va_arg(ap, char*);
1274 if (identical(pp.outfile, 0))
1275 error(3, "%s: identical to input", pp.outfile);
1277 if (open(pp.outfile, O_WRONLY|O_CREAT|O_TRUNC, S_IRUSR|S_IWUSR|S_IRGRP|S_IWGRP|S_IROTH|S_IWOTH) != 1)
1278 error(ERROR_SYSTEM|3, "%s: cannot create", pp.outfile);
1281 if (!(pp.state & COMPILE))
1282 set(&pp.state, PASSTHROUGH, va_arg(ap, int));
1285 set(&pp.mode, PEDANTIC, va_arg(ap, int));
1288 set(&pp.option, PLUSCOMMENT, va_arg(ap, int));
1289 if (pp.initialized)
1293 set(&pp.option, PLUSPLUS, va_arg(ap, int));
1294 set(&pp.option, PLUSCOMMENT, va_arg(ap, int));
1295 if (pp.initialized)
1299 if (pp.initialized)
1304 pp.pool.input = dup(0);
1305 pp.pool.output = dup(1);
1319 pp.pragma = va_arg(ap, PPPRAGMA);
1329 if ((c = (int)hashref(pp.strtab, p)) > 0 && c <= X_last_option)
1330 pp.optflags[c] = n;
1334 pp.probe = va_arg(ap, char*);
1343 set(&pp.option, REGUARD, va_arg(ap, int));
1346 if ((pp.state & COMPILE) && (p = va_arg(ap, char*)))
1363 op = ((key = ppkeyref(pp.symtab, s)) && (key->sym.flags & SYM_LEX)) ? key->lex : T_NOISE;
1364 if (pp.test & 0x0400)
1368 if (!(key = ppkeyget(pp.symtab, p)))
1369 key = ppkeyset(pp.symtab, NiL);
1375 hashlook(pp.symtab, p, HASH_DELETE, NiL);
1376 key = ppkeyset(pp.symtab, NiL);
1386 if (pp.test & 0x0400)
1393 set(&pp.state, SPACEOUT, va_arg(ap, int));
1396 if (pp.initialized)
1398 pp.standalone = 1;
1401 if ((pp.lastdir->next->name = ((p = va_arg(ap, char*)) && *p) ? p : NiL) && !stat(p, &st))
1402 SAVEID(&pp.lastdir->next->id, &st);
1403 for (dp = pp.firstdir; dp; dp = dp->next)
1405 for (hp = pp.firstdir; hp != dp; hp = hp->next)
1416 set(&pp.state, TRANSITION, 0);
1417 pp.flags &= ~PP_transition;
1418 set(&pp.state, STRICT, va_arg(ap, int));
1419 if (pp.state & STRICT)
1420 pp.flags |= PP_strict;
1422 pp.flags &= ~PP_strict;
1472 pp.test |= n;
1474 pp.test &= ~n;
1476 debug((-4, "test = 0%o", pp.test));
1480 set(&pp.state, STRICT, 0);
1481 pp.flags &= ~PP_strict;
1482 set(&pp.state, TRANSITION, va_arg(ap, int));
1483 if (pp.state & TRANSITION)
1484 pp.flags |= PP_transition;
1486 pp.flags &= ~PP_transition;
1489 if (pp.initialized)
1493 set(&pp.option, TRUNCATE, op);
1494 if (pp.option & TRUNCATE)
1501 pp.truncate = op;
1502 tab = pp.symtab;
1503 pp.symtab = hashalloc(NiL, HASH_set, tab ? HASH_ALLOCATE : 0, HASH_compare, trunccomp, HASH_hash, trunchash, HASH_name, "truncate", 0);
1510 hashlook(pp.symtab, (char*)p, HASH_BUCKET|HASH_INSTALL, NiL);
1516 pp.truncate = 0;
1522 for (dp = pp.firstdir; dp; dp = dp->next)
1526 for (dp = pp.firstdir; dp; dp = dp->next)
1535 for (dp = pp.firstdir; dp; dp = dp->next)
1547 set(&pp.state, WARN, va_arg(ap, int));