OSDN Git Service

* cpphash.h (struct hashnode): Use struct hack for name
[pf3gnuchains/gcc-fork.git] / gcc / cpphash.c
1 /* Part of CPP library.  (Macro handling.)
2    Copyright (C) 1986, 1987, 1989, 1992, 1993, 1994, 1995, 1996, 1998,
3    1999, 2000 Free Software Foundation, Inc.
4    Written by Per Bothner, 1994.
5    Based on CCCP program by Paul Rubin, June 1986
6    Adapted to ANSI C, Richard Stallman, Jan 1987
7
8 This program is free software; you can redistribute it and/or modify it
9 under the terms of the GNU General Public License as published by the
10 Free Software Foundation; either version 2, or (at your option) any
11 later version.
12
13 This program is distributed in the hope that it will be useful,
14 but WITHOUT ANY WARRANTY; without even the implied warranty of
15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16 GNU General Public License for more details.
17
18 You should have received a copy of the GNU General Public License
19 along with this program; if not, write to the Free Software
20 Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
21
22  In other words, you are welcome to use, share and improve this program.
23  You are forbidden to forbid anyone else to use, share and improve
24  what you give them.   Help stamp out software-hoarding!  */
25
26 #include "config.h"
27 #include "system.h"
28 #include "cpplib.h"
29 #include "hashtab.h"
30 #include "cpphash.h"
31
32 #undef abort
33
34 /* Structure allocated for every #define.  For a simple replacement
35    such as
36         #define foo bar
37
38    we allocate an object_defn structure; the expansion field points
39    to the replacement text.  For a function-like macro we allocate a
40    funct_defn structure; nargs is the number of arguments - it can be zero,
41    e.g.
42        #define getchar() getc (stdin)
43
44    When there are args, the expansion is the replacement text with the
45    args squashed out, and the reflist is a list describing how to
46    build the output from the input: e.g., "3 chars, then the 1st arg,
47    then 9 chars, then the 3rd arg, then 0 chars, then the 2nd arg".
48    The chars here come from the expansion.  Whatever is left of the
49    expansion after the last arg-occurrence is copied after that arg.
50    Note that the reflist can be arbitrarily long---
51    its length depends on the number of times the arguments appear in
52    the replacement text, not how many args there are.  Example:
53    #define f(x) x+x+x+x+x+x+x would have replacement text "++++++" and
54    pattern list
55      { (0, 1), (1, 1), (1, 1), ..., (1, 1), NULL }
56    where (x, y) means (nchars, argno).
57
58    Note that EMPTY and IDENTITY macros have object_defn structures too,
59    but they're just used to hold the file, line, and column.  The
60    expansion field will be NULL.  */
61
62 struct object_defn
63 {
64   const U_CHAR *expansion;
65   unsigned int length;
66
67   const char *file;             /* File, line, column of definition */
68   int line;
69   int col;
70 };  
71
72 struct reflist
73 {
74   const struct reflist *next;
75   char stringify;               /* nonzero if this arg was preceded by a
76                                    # operator. */
77   char raw_before;              /* Nonzero if a ## operator before arg. */
78   char raw_after;               /* Nonzero if a ## operator after arg. */
79   char rest_args;               /* Nonzero if this arg. absorbs the rest */
80   int nchars;                   /* Number of literal chars to copy before
81                                    this arg occurrence.  */
82   int argno;                    /* Number of arg to substitute (origin-0) */
83 };
84
85 struct funct_defn
86 {
87   int nargs;
88   int length;                   /* length of expansion string */
89   const U_CHAR *expansion;
90   char rest_args;               /* Nonzero if last arg. absorbs the rest */
91   const struct reflist *pattern;
92
93   /* Names of macro args, concatenated in order with \0 between
94      them.  The only use of this is that we warn on redefinition if
95      this differs between the old and new definitions.  */
96   U_CHAR *argnames;
97
98   const char *file;             /* File, line, column of definition */
99   int line;
100   int col;
101 };
102
103 /* This is the second argument to eq_HASHNODE.  */
104 struct hashdummy
105 {
106   const U_CHAR *name;
107   unsigned short length;
108 };
109
110 static unsigned int hash_HASHNODE PARAMS ((const void *));
111 static int eq_HASHNODE            PARAMS ((const void *, const void *));
112 static void del_HASHNODE          PARAMS ((void *));
113 static HASHNODE *make_HASHNODE    PARAMS ((const U_CHAR *, size_t,
114                                            enum node_type, unsigned int));
115
116 static void dump_funlike_macro    PARAMS ((cpp_reader *,
117                                            const struct funct_defn *));
118 static int dump_hash_helper       PARAMS ((void **, void *));
119
120 static void push_macro_expansion PARAMS ((cpp_reader *, const U_CHAR *,
121                                           int, HASHNODE *));
122 static int unsafe_chars          PARAMS ((cpp_reader *, int, int));
123 static enum cpp_ttype macarg     PARAMS ((cpp_reader *, int));
124 static void special_symbol       PARAMS ((cpp_reader *, HASHNODE *));
125 static int compare_defs          PARAMS ((cpp_reader *,
126                                           const struct funct_defn *,
127                                           const struct funct_defn *));
128
129 /* Initial hash table size.  (It can grow if necessary - see hashtab.c.)  */
130 #define HASHSIZE 500
131
132 /* The arglist structure is built by collect_params to tell
133    collect_funlike_expansion where the argument names begin.  That is,
134    for a define like "#define f(x,y,z) foo+x-bar*y", the arglist would
135    contain pointers to the strings x, y, and z.
136    collect_funlike_expansion would then build a funct_defn node, with
137    reflist nodes pointing to the places x, y, and z had appeared.
138
139    The arglist is just convenience data passed between these two
140    routines.  It is not kept around after the current #define has been
141    processed and entered into the hash table.  */
142
143 struct arg
144 {
145   const U_CHAR *name;
146   unsigned int len;
147   char rest_arg;
148 };
149
150 struct arglist
151 {
152   U_CHAR *namebuf;
153   const struct arg *argv;
154   int argc;
155 };
156
157 static struct object_defn *
158 collect_objlike_expansion PARAMS ((cpp_reader *, cpp_toklist *));
159 static struct funct_defn *
160 collect_funlike_expansion PARAMS ((cpp_reader *, cpp_toklist *,
161                                    struct arglist *, unsigned int));
162 static unsigned int collect_params PARAMS ((cpp_reader *, cpp_toklist *,
163                                             struct arglist *));
164
165 static void warn_trad_stringify PARAMS ((cpp_reader *, U_CHAR *, size_t,
166                                          unsigned int, const struct arg *));
167 static unsigned int trad_stringify PARAMS ((cpp_reader *, U_CHAR *, size_t,
168                                             unsigned int, const struct arg *,
169                                             struct reflist **,
170                                             struct reflist **, unsigned int));
171 static int duplicate_arg_p PARAMS ((U_CHAR *, U_CHAR *));
172 static void add_pat PARAMS ((struct reflist **, struct reflist **,
173                              unsigned int, unsigned int, int, int, int, int));
174
175 /* This structure represents one parsed argument in a macro call.
176    `raw' points to the argument text as written (`raw_length' is its length).
177    `expanded' points to the argument's macro-expansion
178    (its length is `expand_length').
179    `stringified_length' is the length the argument would have
180    if stringified.  */
181
182 /* raw and expanded are relative to ARG_BASE */
183 #define ARG_BASE ((pfile)->token_buffer)
184
185 struct argdata
186 {
187   /* Strings relative to pfile->token_buffer */
188   long raw, expanded, stringified;
189   int raw_length, expand_length;
190   int stringified_length;
191 };
192
193 static void scan_arguments      PARAMS ((cpp_reader *,
194                                          const struct funct_defn *,
195                                          struct argdata *, const U_CHAR *));
196 static void stringify           PARAMS ((cpp_reader *, struct argdata *));
197 static void funlike_macroexpand PARAMS ((cpp_reader *, HASHNODE *,
198                                          struct argdata *));
199
200 /* Calculate hash of a string of length LEN.  */
201 unsigned int
202 _cpp_calc_hash (str, len)
203      const U_CHAR *str;
204      size_t len;
205 {
206   size_t n = len;
207   unsigned int r = 0;
208
209   do
210     r = r * 67 + (*str++ - 113);
211   while (--n);
212   return r + len;
213 }
214
215 /* Calculate hash of a HASHNODE structure.  */
216 static unsigned int
217 hash_HASHNODE (x)
218      const void *x;
219 {
220   const HASHNODE *h = (const HASHNODE *)x;
221   return h->hash;
222 }
223
224 /* Compare a HASHNODE structure (already in the table) with a
225    hashdummy structure (not yet in the table).  This relies on the
226    rule that the existing entry is the first argument, the potential
227    entry the second.  It also relies on the comparison function never
228    being called except as a direct consequence of a call to
229    htab_find(_slot)_with_hash.  */
230 static int
231 eq_HASHNODE (x, y)
232      const void *x;
233      const void *y;
234 {
235   const HASHNODE *a = (const HASHNODE *)x;
236   const struct hashdummy *b = (const struct hashdummy *)y;
237
238   return (a->length == b->length
239           && !ustrncmp (a->name, b->name, a->length));
240 }
241
242 /* Destroy a HASHNODE.  */
243 static void
244 del_HASHNODE (x)
245      void *x;
246 {
247   HASHNODE *h = (HASHNODE *)x;
248
249   _cpp_free_definition (h);
250   free (h);
251 }
252
253 /* Allocate and initialize a HASHNODE structure.
254    Caller must fill in the value field.  */
255
256 static HASHNODE *
257 make_HASHNODE (name, len, type, hash)
258      const U_CHAR *name;
259      size_t len;
260      enum node_type type;
261      unsigned int hash;
262 {
263   HASHNODE *hp = (HASHNODE *) xmalloc (sizeof (HASHNODE) + len);
264   U_CHAR *p = (U_CHAR *)hp + offsetof (HASHNODE, name);
265
266   hp->type = type;
267   hp->length = len;
268   hp->hash = hash;
269   hp->disabled = 0;
270
271   memcpy (p, name, len);
272   p[len] = 0;
273
274   return hp;
275 }
276
277 /* Find the hash node for name "name", of length LEN.  */
278
279 HASHNODE *
280 _cpp_lookup (pfile, name, len)
281      cpp_reader *pfile;
282      const U_CHAR *name;
283      int len;
284 {
285   struct hashdummy dummy;
286   HASHNODE *new, **slot;
287   unsigned int hash;
288
289   dummy.name = name;
290   dummy.length = len;
291   hash = _cpp_calc_hash (name, len);
292
293   slot = (HASHNODE **)
294     htab_find_slot_with_hash (pfile->hashtab, (void *)&dummy, hash, INSERT);
295   if (*slot)
296     return *slot;
297
298   new = make_HASHNODE (name, len, T_VOID, hash);
299   new->value.cpval = NULL;
300   *slot = new;
301   return new;
302 }
303
304 /* Init the hash table.  In here so it can see the hash and eq functions.  */
305 void
306 _cpp_init_macro_hash (pfile)
307      cpp_reader *pfile;
308 {
309   pfile->hashtab = htab_create (HASHSIZE, hash_HASHNODE,
310                                 eq_HASHNODE, del_HASHNODE);
311 }
312
313 /* Free the definition of macro H.  */
314
315 void
316 _cpp_free_definition (h)
317      HASHNODE *h;
318 {
319   if (h->type == T_XCONST)
320     free ((PTR) h->value.cpval);
321   else if (h->type == T_MACRO)
322     {
323       if (h->value.odefn->expansion)
324         free ((PTR) h->value.odefn->expansion);
325       free ((PTR) h->value.odefn);
326     }
327   else if (h->type == T_FMACRO)
328     {
329       const struct funct_defn *d = h->value.fdefn;
330       const struct reflist *ap, *nextap;
331     
332       for (ap = d->pattern; ap != NULL; ap = nextap)
333         {
334           nextap = ap->next;
335           free ((PTR) ap);
336         }
337       if (d->argnames)
338         free ((PTR) d->argnames);
339       free ((PTR) d);
340     }
341   h->value.cpval = NULL;
342 }
343
344 /* Create pat nodes.  */
345
346 static void
347 add_pat (pat, endpat, nchars, argno, raw_before, raw_after, strize, rest)
348      struct reflist **pat, **endpat;
349      unsigned int nchars;
350      unsigned int argno;
351      int raw_before, raw_after, strize, rest;
352 {
353   struct reflist *tpat;
354   tpat = (struct reflist *) xmalloc (sizeof (struct reflist));
355   tpat->next = NULL;
356   tpat->raw_before = raw_before;
357   tpat->raw_after = raw_after;
358   tpat->stringify = strize;
359   tpat->rest_args = rest;
360   tpat->argno = argno;
361   tpat->nchars = nchars;
362
363   if (*endpat == NULL)
364     *pat = tpat;
365   else
366     (*endpat)->next = tpat;
367   *endpat = tpat;
368 }  
369
370 /* Issue warnings for macro argument names seen inside strings.  */
371 static void
372 warn_trad_stringify (pfile, p, len, argc, argv)
373      cpp_reader *pfile;
374      U_CHAR *p;
375      size_t len;
376      unsigned int argc;
377      const struct arg *argv;
378 {
379   U_CHAR *limit;
380   unsigned int i;
381
382   limit = p + len;
383   for (;;)
384     {
385       while (p < limit && !is_idstart (*p)) p++;
386       if (p >= limit)
387         break;
388
389       for (i = 0; i < argc; i++)
390         if (!ustrncmp (p, argv[i].name, argv[i].len)
391             && ! is_idchar (p[argv[i].len]))
392           {
393             cpp_warning (pfile,
394                 "macro argument \"%s\" would be stringified in traditional C",
395                          argv[i].name);
396             break;
397           }
398       p++;
399       while (p < limit && is_idchar (*p)) p++;
400       if (p >= limit)
401         break;
402     }
403 }
404
405 /* Generate pat nodes for macro arguments seen inside strings.  */
406 static unsigned int
407 trad_stringify (pfile, base, len, argc, argv, pat, endpat, last)
408      cpp_reader *pfile;
409      U_CHAR *base;
410      size_t len;
411      unsigned int argc;
412      const struct arg *argv;
413      struct reflist **pat, **endpat;
414      unsigned int last;
415 {
416   U_CHAR *p, *limit;
417   unsigned int i;
418
419   p = base;
420   limit = base + len;
421   for (;;)
422     {
423     proceed:
424       while (p < limit && !is_idstart (*p)) p++;
425       if (p >= limit)
426         break;
427
428       for (i = 0; i < argc; i++)
429         if (!ustrncmp (p, argv[i].name, argv[i].len)
430             && ! is_idchar (p[argv[i].len]))
431           {
432             if (CPP_WTRADITIONAL (pfile))
433               cpp_warning (pfile, "macro argument \"%s\" is stringified",
434                            argv[i].name);
435             /* Write out the string up to this point, and add a pat
436                node for the argument.  Note that the argument is NOT
437                stringified.  */
438             CPP_PUTS (pfile, base, p - base);
439             add_pat (pat, endpat, CPP_WRITTEN (pfile) - last, i /* argno */,
440                      !is_hspace (p[-1]) /* raw_before */,
441                      !is_hspace (p[argv[i].len]) /* raw_after */,
442                      0 /* strize */,
443                      argv[i].rest_arg);
444             last = CPP_WRITTEN (pfile);
445             base = p + argv[i].len;
446             p = base;
447             goto proceed;
448           }
449       p++;
450       while (p < limit && is_idchar (*p)) p++;
451       if (p >= limit)
452         break;
453     }
454   CPP_PUTS (pfile, base, p - base);
455   return last;
456 }
457
458 /* Read a replacement list for an object-like macro, and build the
459    object_defn structure.  LIST contains the replacement list,
460    beginning at 1.  */
461 static struct object_defn *
462 collect_objlike_expansion (pfile, list)
463      cpp_reader *pfile;
464      cpp_toklist *list;
465 {
466   struct object_defn *defn;
467   unsigned int i;
468   unsigned int start;
469   int last_was_paste = 0;
470   U_CHAR *exp;
471   size_t len;
472
473   /* We copy the expansion text into the token_buffer, then out to
474      its proper home.  */
475   start = CPP_WRITTEN (pfile);
476   CPP_PUTS (pfile, "\r ", 2);
477
478   for (i = 1; i < list->tokens_used; i++)
479     {
480       switch (TOK_TYPE (list, i))
481         {
482         case CPP_EOF:
483           cpp_ice (pfile, "EOF in collect_expansion");
484           /* fall through */
485         case CPP_VSPACE:
486           goto done;
487
488         case CPP_PASTE:
489           /* ## is not special if it appears right after another ##;
490              nor is it special if -traditional.  */
491           if (last_was_paste || CPP_TRADITIONAL (pfile))
492             break;
493           if (i == 1)
494             cpp_error (pfile, "`##' at start of macro definition");
495
496           last_was_paste = 1;
497           continue;
498
499         default:;
500         }
501
502       if (i > 1 && !last_was_paste && TOK_PREV_WHITE (list, i))
503         CPP_PUTC (pfile, ' ');
504
505       CPP_PUTS (pfile, TOK_NAME (list, i), TOK_LEN (list, i));
506       last_was_paste = 0;
507     }
508  done:
509
510   if (last_was_paste)
511     cpp_error (pfile, "`##' at end of macro definition");
512
513   CPP_PUTS (pfile, "\r ", 2);
514   len = CPP_WRITTEN (pfile) - start;
515   CPP_SET_WRITTEN (pfile, start);
516
517   if (len <= 4)
518     cpp_ice (pfile, "empty object-like macro went through full #define");
519
520   exp = (U_CHAR *) xmalloc (len + 1);
521   memcpy (exp, pfile->token_buffer + start, len);
522   exp[len] = '\0';
523
524   defn = (struct object_defn *) xmalloc (sizeof (struct object_defn));
525   defn->length = len;
526   defn->expansion = exp;
527
528   return defn;
529 }
530
531 /* Read a replacement list for a function-like macro, and build the
532    funct_defn structure.  LIST contains the replacement list,
533    beginning at REPLACEMENT.  ARGLIST specifies the formal parameters
534    to look for in the text of the definition.  */
535
536 static struct funct_defn *
537 collect_funlike_expansion (pfile, list, arglist, replacement)
538      cpp_reader *pfile;
539      cpp_toklist *list;
540      struct arglist *arglist;
541      unsigned int replacement;
542 {
543   struct funct_defn *defn;
544   struct reflist *pat = 0, *endpat = 0;
545   enum cpp_ttype token;
546   unsigned int start, last;
547   unsigned int i;
548   int j, argc;
549   size_t len;
550   const struct arg *argv;
551   U_CHAR *tok, *exp;
552   enum { START = 0, NORM, ARG, STRIZE, PASTE } last_token = START;
553
554   argv = arglist->argv;
555   argc = arglist->argc;
556
557   /* We copy the expansion text into the token_buffer, then out to
558      its proper home.  */
559   last = start = CPP_WRITTEN (pfile);
560   CPP_PUTS (pfile, "\r ", 2);
561
562   for (i = replacement; i < list->tokens_used; i++)
563     {
564       token = TOK_TYPE (list, i);
565       tok = TOK_NAME (list, i);
566       len = TOK_LEN (list, i);
567       switch (token)
568         {
569         case CPP_EOF:
570           cpp_ice (pfile, "EOF in collect_expansion");
571           /* fall through */
572         case CPP_VSPACE:
573           goto done;
574
575         case CPP_HASH:
576           /* # is special in function-like macros with no args.
577              (6.10.3.2 para 1.)  However, it is not special after
578              PASTE. (Implied by 6.10.3.3 para 4.)  Nor is it special
579              if -traditional.  */
580           if (last_token == PASTE || CPP_TRADITIONAL (pfile))
581             break;
582           last_token = STRIZE;
583           continue;
584
585         case CPP_PASTE:
586           /* ## is not special if it appears right after another ##;
587              nor is it special if -traditional.  */
588           if (last_token == PASTE || CPP_TRADITIONAL (pfile))
589             break;
590
591           if (last_token == START)
592             cpp_error (pfile, "`##' at start of macro definition");
593           else if (last_token == ARG)
594             /* If the last token was an argument, mark it raw_after.  */
595             endpat->raw_after = 1;
596           else if (last_token == STRIZE)
597             /* Oops - that wasn't a stringify operator.  */
598             CPP_PUTC (pfile, '#');
599
600           last_token = PASTE;
601           continue;
602
603         default:;
604         }
605
606       if (last_token != PASTE && last_token != START
607           && TOK_PREV_WHITE (list, i))
608         CPP_PUTC (pfile, ' ');
609       if (last_token == ARG && CPP_TRADITIONAL (pfile)
610           && !TOK_PREV_WHITE (list, i))
611         endpat->raw_after = 1;
612
613       switch (token)
614         {
615         case CPP_STRING:
616         case CPP_CHAR:
617           if (argc == 0)
618             goto norm;
619           if (CPP_TRADITIONAL (pfile))
620             {
621               last = trad_stringify (pfile, tok, len, argc, argv,
622                                      &pat, &endpat, last);
623               break;
624             }
625           else
626             {
627               if (CPP_WTRADITIONAL (pfile))
628                 warn_trad_stringify (pfile, tok, len, argc, argv);
629               goto norm;
630             }
631
632         case CPP_NAME:
633           for (j = 0; j < argc; j++)
634             if (argv[j].len == len
635                 && !ustrncmp (tok, argv[j].name, argv[j].len))
636               goto addref;
637
638           /* fall through */
639         default:
640         norm:
641           if (last_token == STRIZE)
642             cpp_error (pfile, "# is not followed by a macro argument name");
643           CPP_PUTS (pfile, tok, len);
644           last_token = NORM;
645         }
646       continue;
647
648     addref:
649       {
650         int raw_before = (last_token == PASTE
651                           || (CPP_TRADITIONAL (pfile)
652                               && ! TOK_PREV_WHITE (list, j)));
653       
654         add_pat (&pat, &endpat,
655                  CPP_WRITTEN (pfile) - last /* nchars */, j /* argno */,
656                  raw_before, 0 /* raw_after */,
657                  (last_token == STRIZE), argv[j].rest_arg);
658       
659         last = CPP_WRITTEN (pfile);
660       }
661       last_token = ARG;
662     }
663  done:
664
665   if (last_token == STRIZE)
666     cpp_error (pfile, "`#' is not followed by a macro argument name");
667   else if (last_token == PASTE)
668     cpp_error (pfile, "`##' at end of macro definition");
669
670     CPP_PUTS (pfile, "\r ", 2);
671   len = CPP_WRITTEN (pfile) - start;
672   CPP_SET_WRITTEN (pfile, start);
673
674   exp = (U_CHAR *) xmalloc (len + 1);
675   memcpy (exp, pfile->token_buffer + start, len);
676   exp[len] = '\0';
677
678   defn = (struct funct_defn *) xmalloc (sizeof (struct funct_defn));
679   defn->length = len;
680   defn->expansion = exp;
681   defn->pattern = pat;
682   defn->rest_args = argc && argv[argc - 1].rest_arg;
683   defn->nargs = argc;
684   defn->argnames = arglist->namebuf;
685   if (argv)
686     free ((PTR) argv);
687   return defn;
688 }
689
690 /* Is argument NEW, which has just been added to the argument list,
691    a duplicate of a previous argument name?  */
692 static int
693 duplicate_arg_p (args, new)
694      U_CHAR *args, *new;
695 {
696   size_t newlen = ustrlen (new) + 1;
697   size_t oldlen;
698
699   while (args < new)
700     {
701       oldlen = ustrlen (args) + 1;
702       if (!memcmp (args, new, MIN (oldlen, newlen)))
703         return 1;
704       args += oldlen;
705     }
706   return 0;
707 }
708
709 static unsigned int
710 collect_params (pfile, list, arglist)
711      cpp_reader *pfile;
712      cpp_toklist *list;
713      struct arglist *arglist;
714 {
715   struct arg *argv = 0;
716   U_CHAR *namebuf, *p, *tok;
717   unsigned int len, argslen;
718   unsigned int argc, a, i, j;
719
720   /* The formal parameters list starts at token 1.  */
721   if (TOK_TYPE (list, 1) != CPP_OPEN_PAREN)
722     {
723       cpp_ice (pfile, "first token = %d not %d in collect_formal_parameters",
724                TOK_TYPE (list, 1), CPP_OPEN_PAREN);
725       return 0;
726     }
727
728   /* Scan once and count the number of parameters; also check for
729      syntax errors here.  */
730   argc = 0;
731   argslen = 0;
732   for (i = 2; i < list->tokens_used; i++)
733     switch (TOK_TYPE (list, i))
734       {
735       case CPP_NAME:
736         argslen += TOK_LEN (list, i) + 1;
737         argc++;
738         break;
739       case CPP_COMMA:
740         break;
741       case CPP_CLOSE_PAREN:
742         goto scanned;
743       case CPP_VSPACE:
744         cpp_error_with_line (pfile, list->line, TOK_COL (list, i),
745                              "missing right paren in macro argument list");
746         return 0;
747
748       default:
749         cpp_error_with_line (pfile, list->line, TOK_COL (list, i),
750                              "illegal token in macro argument list");
751         return 0;
752
753       case CPP_ELLIPSIS:
754         if (TOK_TYPE (list, i-1) != CPP_NAME)
755           {
756             argslen += sizeof "__VA_ARGS__";
757             argc++;
758           }
759         i++;
760         if (TOK_TYPE (list, i) != CPP_CLOSE_PAREN)
761           {
762             cpp_error_with_line (pfile, list->line, TOK_COL (list, i),
763                                  "another parameter follows \"...\"");
764             return 0;
765           }
766         goto scanned;
767       }
768
769   cpp_ice (pfile, "collect_params: unreachable - i=%d, ntokens=%d, type=%d",
770            i, list->tokens_used, TOK_TYPE (list, i-1));
771   return 0;
772
773  scanned:
774   if (argc == 0)        /* function-like macro, no arguments */
775     {
776       arglist->argc = 0;
777       arglist->argv = 0;
778       arglist->namebuf = 0;
779       return i + 1;
780     }
781   if (argslen == 0)
782     {
783       cpp_ice (pfile, "collect_params: argc=%d argslen=0", argc);
784       return 0;
785     }
786
787   /* Now allocate space and copy the suckers.  */
788   argv = (struct arg *) xmalloc (argc * sizeof (struct arg));
789   namebuf = (U_CHAR *) xmalloc (argslen);
790   p = namebuf;
791   a = 0;
792   for (j = 2; j < i; j++)
793     switch (TOK_TYPE (list, j))
794       {
795       case CPP_NAME:
796         tok = TOK_NAME (list, j);
797         len = TOK_LEN (list, j);
798         memcpy (p, tok, len);
799         p[len] = '\0';
800         if (duplicate_arg_p (namebuf, p))
801           {
802             cpp_error (pfile, "duplicate macro argument name \"%s\"", tok);
803             a++;
804             break;
805           }
806         if (CPP_PEDANTIC (pfile) && CPP_OPTION (pfile, c99)
807             && len == sizeof "__VA_ARGS__" - 1
808             && !ustrcmp (p, U"__VA_ARGS__"))
809           cpp_pedwarn (pfile,
810         "C99 does not permit use of __VA_ARGS__ as a macro argument name");
811         argv[a].len = len;
812         argv[a].name = p;
813         argv[a].rest_arg = 0;
814         p += len + 1;
815         a++;
816         break;
817
818       case CPP_COMMA:
819         break;
820
821       case CPP_ELLIPSIS:
822         if (TOK_TYPE (list, j-1) != CPP_NAME)
823           {
824             if (CPP_PEDANTIC (pfile) && ! CPP_OPTION (pfile, c99))
825               cpp_pedwarn (pfile, "C89 does not permit varargs macros");
826
827             argv[a].len = sizeof "__VA_ARGS__" - 1;
828             argv[a].name = p;
829             argv[a].rest_arg = 1;
830             strcpy ((char *)p, "__VA_ARGS__");
831           }
832         else
833           {
834             if (CPP_PEDANTIC (pfile))
835               cpp_pedwarn (pfile,
836                            "ISO C does not permit named varargs macros");
837             argv[a-1].rest_arg = 1;
838           }
839         break;
840
841       default:
842         cpp_ice (pfile, "collect_params: impossible token type %d",
843                  TOK_TYPE (list, j));
844       }
845
846   arglist->argc = argc;
847   arglist->argv = argv;
848   arglist->namebuf = namebuf;
849   return i + 1;
850 }
851
852 /* Create a definition for a macro.  The replacement text (including
853    formal parameters if present) is in LIST.  If FUNLIKE is true, this
854    is a function-like macro.  */
855
856 int
857 _cpp_create_definition (pfile, list, hp)
858      cpp_reader *pfile;
859      cpp_toklist *list;
860      HASHNODE *hp;
861 {
862   struct funct_defn *fdefn = 0;
863   struct object_defn *odefn = 0;
864   enum node_type ntype;
865   int ok;
866
867   /* Special-case a few simple and common idioms:
868      #define TOKEN   // nothing
869      #define TOKEN TOKEN
870
871      Might also be good to special-case these:
872
873      #define FUNC()  // nothing
874      #define FUNC(a, b, ...) // nothing
875      #define FUNC(a, b, c) FUNC(a, b, c)  */
876
877   if (list->tokens_used == 2)
878     ntype = T_EMPTY;    /* Empty definition of object-like macro.  */
879   else if (list->tokens_used == 3 && TOK_TYPE (list, 1) == CPP_NAME
880            && TOK_LEN (list, 0) == TOK_LEN (list, 1)
881            && !ustrncmp (TOK_NAME (list, 0), TOK_NAME (list, 1),
882                          TOK_LEN (list, 0)))
883     ntype = T_IDENTITY;  /* Object like macro defined to itself.  */
884
885   /* The macro is function-like only if the next character,
886      with no intervening whitespace, is '('.  */
887   else if (TOK_TYPE (list, 1) == CPP_OPEN_PAREN
888            && ! TOK_PREV_WHITE (list, 1))
889     {
890       struct arglist args;
891       int replacement;
892
893       replacement = collect_params (pfile, list, &args);
894       if (replacement == 0)
895         return 0;
896       fdefn = collect_funlike_expansion (pfile, list, &args, replacement);
897       if (fdefn == 0)
898         return 0;
899
900       ntype = T_FMACRO;
901     }
902
903   /* Otherwise it is an object-like macro, and C99 requires
904      whitespace after the name (6.10.3 para 3).  */
905   else
906     {
907       if (! TOK_PREV_WHITE (list, 1))
908         cpp_pedwarn (pfile,
909                      "The C standard requires whitespace after #define %s",
910                      hp->name);
911
912       odefn = collect_objlike_expansion (pfile, list);
913       if (odefn == 0)
914         return 0;
915
916       ntype = T_MACRO;
917     }
918
919   if (ntype == T_EMPTY || ntype == T_IDENTITY)
920     {
921       odefn = xmalloc (sizeof (struct object_defn));
922       odefn->length = 0;
923       odefn->expansion = 0;
924     }
925
926   /* Check for a redefinition, and its legality.  Redefining a macro
927      of whatever stripe is ok if the definitions are the same.
928      Redefining a built-in _constant_ (T_CONST or T_XCONST) is ok only
929      with -D.  Otherwise a redefinition is not ok.  */
930
931   switch (hp->type)
932     {
933     case T_VOID:  ok = 1; break;
934     default:      ok = 0; break;
935
936     case T_MACRO:
937       ok = (ntype == hp->type
938             && odefn->length == hp->value.odefn->length
939             && !ustrncmp (odefn->expansion, hp->value.odefn->expansion,
940                           odefn->length));
941       break;
942     case T_FMACRO:
943       ok = (ntype == hp->type
944             && !compare_defs (pfile, fdefn, hp->value.fdefn));
945       break;
946     case T_IDENTITY:
947     case T_EMPTY:
948       ok = (ntype == hp->type);
949       break;
950     case T_CONST:
951     case T_XCONST:
952       ok = ! pfile->done_initializing;
953       break;
954     }
955
956   /* Print the warning or error if it's not ok.  */
957   if (! ok)
958     {
959       cpp_pedwarn (pfile, "\"%s\" redefined", hp->name);
960       if (pfile->done_initializing)
961         {
962           const char *file;
963           unsigned int line, col;
964           if (hp->type == T_FMACRO)
965             {
966               file = hp->value.fdefn->file;
967               line = hp->value.fdefn->line;
968               col  = hp->value.fdefn->col;
969             }
970           else
971             {
972               file = hp->value.odefn->file;
973               line = hp->value.odefn->line;
974               col  = hp->value.odefn->col;
975             }
976         cpp_pedwarn_with_file_and_line (pfile, file, line, col,
977                         "this is the location of the previous definition");
978         }
979     }
980
981   /* And replace the old definition (if any).  */
982
983   _cpp_free_definition (hp);
984
985   hp->type = ntype;
986   if (ntype == T_FMACRO)
987     {
988       fdefn->file = CPP_BUFFER (pfile)->nominal_fname;
989       fdefn->line = list->line;
990       fdefn->col  = TOK_COL (list, 0);
991       hp->value.fdefn = fdefn;
992     }
993   else
994     {
995       odefn->file = CPP_BUFFER (pfile)->nominal_fname;
996       odefn->line = list->line;
997       odefn->col  = TOK_COL (list, 0);
998       hp->value.odefn = odefn;
999     }
1000   return 1;
1001 }
1002
1003 /*
1004  * Parse a macro argument and append the info on PFILE's token_buffer.
1005  * REST_ARGS means to absorb the rest of the args.
1006  * Return nonzero to indicate a syntax error.
1007  */
1008
1009 static enum cpp_ttype
1010 macarg (pfile, rest_args)
1011      cpp_reader *pfile;
1012      int rest_args;
1013 {
1014   int paren = 0;
1015   enum cpp_ttype token;
1016
1017   /* Try to parse as much of the argument as exists at this
1018      input stack level.  */
1019   for (;;)
1020     {
1021       token = cpp_get_token (pfile);
1022       switch (token)
1023         {
1024         case CPP_EOF:
1025           /* We've hit end of file; this is an error.
1026              Caller will report it.  */
1027           return token;
1028         case CPP_OPEN_PAREN:
1029           paren++;
1030           break;
1031         case CPP_CLOSE_PAREN:
1032           if (--paren < 0)
1033             goto found;
1034           break;
1035         case CPP_COMMA:
1036           /* if we've returned to lowest level and
1037              we aren't absorbing all args */
1038           if (paren == 0 && rest_args == 0)
1039             goto found;
1040           break;
1041         found:
1042           /* Remove ',' or ')' from argument buffer.  */
1043           CPP_ADJUST_WRITTEN (pfile, -1);
1044           return token;
1045         default:;
1046         }
1047     }
1048 }
1049 \f
1050
1051 static const char * const monthnames[] =
1052 {
1053   "Jan", "Feb", "Mar", "Apr", "May", "Jun",
1054   "Jul", "Aug", "Sep", "Oct", "Nov", "Dec",
1055 };
1056
1057 /* Place into PFILE a quoted string representing the string SRC.
1058    Caller must reserve enough space in pfile->token_buffer.  */
1059
1060 void
1061 _cpp_quote_string (pfile, src)
1062      cpp_reader *pfile;
1063      const U_CHAR *src;
1064 {
1065   U_CHAR c;
1066
1067   CPP_PUTC_Q (pfile, '\"');
1068   for (;;)
1069     switch ((c = *src++))
1070       {
1071       default:
1072         if (ISPRINT (c))
1073           CPP_PUTC_Q (pfile, c);
1074         else
1075           {
1076             sprintf ((char *)CPP_PWRITTEN (pfile), "\\%03o", c);
1077             CPP_ADJUST_WRITTEN (pfile, 4);
1078           }
1079         break;
1080
1081       case '\"':
1082       case '\\':
1083         CPP_PUTC_Q (pfile, '\\');
1084         CPP_PUTC_Q (pfile, c);
1085         break;
1086       
1087       case '\0':
1088         CPP_PUTC_Q (pfile, '\"');
1089         return;
1090       }
1091 }
1092
1093 /*
1094  * expand things like __FILE__.  Place the expansion into the output
1095  * buffer *without* rescanning.
1096  */
1097
1098 #define DSC(str) (const U_CHAR *)str, sizeof str - 1
1099 static void
1100 special_symbol (pfile, hp)
1101      cpp_reader *pfile;
1102      HASHNODE *hp;
1103 {
1104   const U_CHAR *buf;
1105   cpp_buffer *ip;
1106   size_t len;
1107
1108   switch (hp->type)
1109     {
1110     case T_FILE:
1111     case T_BASE_FILE:
1112       ip = cpp_file_buffer (pfile);
1113       if (ip == NULL)
1114         {
1115           CPP_PUTS (pfile, "\"\"", 2);
1116           return;
1117         }
1118       if (hp->type == T_BASE_FILE)
1119         while (CPP_PREV_BUFFER (ip) != NULL)
1120           ip = CPP_PREV_BUFFER (ip);
1121
1122       buf = (const U_CHAR *) ip->nominal_fname;
1123       len = ustrlen (buf);
1124       CPP_RESERVE (pfile, 3 + 4 * len);
1125       _cpp_quote_string (pfile, buf);
1126       return;
1127
1128     case T_INCLUDE_LEVEL:
1129       {
1130         int true_indepth = 0;
1131         ip = cpp_file_buffer (pfile);
1132         while (ip)
1133           {
1134             true_indepth++;
1135             ip = CPP_PREV_BUFFER (ip);
1136           }
1137
1138         CPP_RESERVE (pfile, 10);
1139         sprintf ((char *)CPP_PWRITTEN (pfile), "%d", true_indepth);
1140         len = ustrlen (CPP_PWRITTEN (pfile));
1141         CPP_ADJUST_WRITTEN (pfile, len);
1142         return;
1143       }
1144
1145     case T_STDC:
1146 #ifdef STDC_0_IN_SYSTEM_HEADERS
1147       ip = cpp_file_buffer (pfile);
1148       if (ip && ip->system_header_p
1149           && !cpp_defined (pfile, DSC("__STRICT_ANSI__")))
1150         {
1151           CPP_PUTC (pfile, '0');
1152           return;
1153         }
1154 #endif
1155     constant:
1156       buf = hp->value.cpval;
1157       if (!buf || *buf == '\0')
1158         return;
1159
1160       len = ustrlen (buf);
1161       CPP_PUTS (pfile, buf, len);
1162       return;
1163
1164     case T_SPECLINE:
1165       ip = cpp_file_buffer (pfile);
1166       if (ip == NULL)
1167         {
1168           CPP_PUTC (pfile, '0');
1169           return;
1170         }
1171       CPP_RESERVE (pfile, 10);
1172       sprintf ((char *)CPP_PWRITTEN (pfile), "%u", CPP_BUF_LINE (ip));
1173       len = ustrlen (CPP_PWRITTEN (pfile));
1174       CPP_ADJUST_WRITTEN (pfile, len);
1175       return;
1176
1177     case T_DATE:
1178     case T_TIME:
1179       /* Generate both __DATE__ and __TIME__, stuff them into their
1180          respective hash nodes, and mark the nodes T_XCONST so we
1181          don't have to do this again.  We don't generate these strings
1182          at init time because time() and localtime() are very slow on
1183          some systems.  */
1184       {
1185         time_t tt = time (NULL);
1186         struct tm *tb = localtime (&tt);
1187         HASHNODE *d, *t;
1188
1189         if (hp->type == T_DATE)
1190           d = hp, t = _cpp_lookup (pfile, DSC("__TIME__"));
1191         else
1192           t = hp, d = _cpp_lookup (pfile, DSC("__DATE__"));
1193
1194         d->value.cpval = xmalloc (sizeof "'Oct 11 1347'");
1195         sprintf ((char *)d->value.cpval, "\"%s %2d %4d\"",
1196                  monthnames[tb->tm_mon], tb->tm_mday, tb->tm_year + 1900);
1197         d->type = T_XCONST;
1198
1199         t->value.cpval = xmalloc (sizeof "'12:34:56'");
1200         sprintf ((char *)t->value.cpval, "\"%02d:%02d:%02d\"",
1201                  tb->tm_hour, tb->tm_min, tb->tm_sec);
1202         t->type = T_XCONST;
1203         goto constant;
1204       }
1205
1206     case T_POISON:
1207       cpp_error (pfile, "attempt to use poisoned `%s'.", hp->name);
1208       CPP_PUTC (pfile, '0');
1209       break;
1210
1211     default:
1212       cpp_ice (pfile, "invalid special hash type");
1213       return;
1214     }
1215 }
1216 #undef DSC
1217
1218 /* Expand a macro call.
1219    HP points to the symbol that is the macro being called.
1220    Put the result of expansion onto the input stack
1221    so that subsequent input by our caller will use it.
1222
1223    If macro wants arguments, caller has already verified that
1224    an argument list follows; arguments come from the input stack.  */
1225
1226 void
1227 _cpp_macroexpand (pfile, hp)
1228      cpp_reader *pfile;
1229      HASHNODE *hp;
1230 {
1231   const struct funct_defn *defn;
1232   struct argdata *args;
1233   unsigned int old_written;
1234   int i;
1235
1236   /* Object like macro - most common case.  */
1237   if (hp->type == T_MACRO)
1238     {
1239       push_macro_expansion (pfile, hp->value.odefn->expansion,
1240                             hp->value.odefn->length, hp);
1241       return;
1242     }
1243
1244   /* Or might it be a constant string?  */
1245   if (hp->type == T_CONST || hp->type == T_XCONST)
1246     {
1247       const U_CHAR *cpval = hp->value.cpval;
1248       if (cpval && *cpval != '\0')
1249         push_macro_expansion (pfile, cpval, ustrlen (cpval), hp);
1250       return;
1251     }
1252
1253   /* Or a special symbol?  */
1254   if (hp->type != T_FMACRO)
1255     {
1256       U_CHAR *xbuf;
1257       unsigned int len;
1258
1259       old_written = CPP_WRITTEN (pfile);
1260       special_symbol (pfile, hp);
1261       len = CPP_WRITTEN (pfile) - old_written;
1262       CPP_SET_WRITTEN (pfile, old_written);
1263       if (len == 0)
1264         return;
1265
1266       xbuf = (U_CHAR *) xmalloc (len + 1);
1267       memcpy (xbuf, CPP_PWRITTEN (pfile), len);
1268       xbuf[len] = '\0';
1269       push_macro_expansion (pfile, xbuf, len, hp);
1270       return;
1271     }
1272
1273   /* Okay, it's a full-on function-like macro...  */
1274   old_written = CPP_WRITTEN (pfile);
1275   defn = hp->value.fdefn;
1276
1277   args = alloca (MAX (defn->nargs, 1) * sizeof (struct argdata));
1278   for (i = 0; i < MAX (defn->nargs, 1); i++)
1279     {
1280       args[i].raw = args[i].expanded = 0;
1281       args[i].raw_length = 0;
1282       args[i].expand_length = args[i].stringified_length = -1;
1283     }
1284
1285   pfile->output_escapes++;
1286   scan_arguments (pfile, defn, args, hp->name);
1287
1288   /* If macro wants zero args, we parsed the arglist for checking only.
1289      Read directly from the macro definition.  */
1290   if (defn->nargs == 0 || defn->pattern == 0)
1291     {
1292       /* If the defn is the empty string, don't bother pushing it.  */
1293       if (defn->length > 4)
1294         push_macro_expansion (pfile, defn->expansion, defn->length, hp);
1295     }
1296   else
1297     funlike_macroexpand (pfile, hp, args);
1298
1299   CPP_SET_WRITTEN (pfile, old_written);
1300   pfile->output_escapes--;
1301 }
1302
1303 static void
1304 scan_arguments (pfile, defn, args, name)
1305      cpp_reader *pfile;
1306      const struct funct_defn *defn;
1307      struct argdata *args;
1308      const U_CHAR *name;
1309 {
1310   enum cpp_ttype token;
1311   unsigned int start_line, start_column;
1312   unsigned int nargs = defn->nargs;
1313   unsigned int i;
1314   
1315   cpp_buffer *ip = cpp_file_buffer (pfile);
1316   if (ip)
1317     {
1318       start_line = CPP_BUF_LINE (ip);
1319       start_column = CPP_BUF_COL (ip);
1320     }
1321   else
1322     start_line = start_column = 0;
1323
1324   /* Parse all the macro args that are supplied.  I counts them.  The
1325      first NARGS args are stored in ARGS.  The rest are discarded.  If
1326      rest_args is set then we assume macarg absorbed the rest of the
1327      args.  */
1328   i = 0;
1329
1330   /* Skip over the opening parenthesis.  */
1331   CPP_OPTION (pfile, discard_comments)++;
1332   pfile->no_macro_expand++;
1333   pfile->no_directives++;
1334
1335   token = cpp_get_non_space_token (pfile);
1336   if (token != CPP_OPEN_PAREN)
1337     cpp_ice (pfile, "macroexpand: unexpected token %d (wanted LPAREN)",
1338              token);
1339   CPP_ADJUST_WRITTEN (pfile, -1);
1340
1341   token = CPP_EOF;
1342   do
1343     {
1344       if (i < MAX (nargs, 1))
1345         {
1346           args[i].raw = CPP_WRITTEN (pfile);
1347           token = macarg (pfile, (i == nargs - 1 && defn->rest_args));
1348           args[i].raw_length = CPP_WRITTEN (pfile) - args[i].raw;
1349         }
1350       else
1351         token = macarg (pfile, 0);
1352       if (token == CPP_EOF)
1353         cpp_error_with_line (pfile, start_line, start_column,
1354                              "unterminated macro call");
1355       i++;
1356     }
1357   while (token == CPP_COMMA);
1358   CPP_OPTION (pfile, discard_comments)--;
1359   pfile->no_macro_expand--;
1360   pfile->no_directives--;
1361   if (token != CPP_CLOSE_PAREN)
1362     return;
1363
1364   /* foo ( ) is equivalent to foo () unless foo takes exactly one
1365      argument, in which case the former is allowed and the latter
1366      is not.  XXX C99 is silent on this rule, but it seems
1367      inconsistent to me.  */
1368   if (i == 1 && nargs == 0)
1369     {
1370       register U_CHAR *bp = ARG_BASE + args[0].raw;
1371       register U_CHAR *lim = bp + args[0].raw_length;
1372       while (bp != lim && is_space(*bp))
1373         bp++;
1374       if (bp == lim)
1375         i = 0;
1376     }
1377
1378   /* Don't output an error message if we have already output one for
1379      a parse error above.  */
1380   if (nargs == 0 && i > 0)
1381     {
1382       cpp_error (pfile, "arguments given to macro `%s'", name);
1383     }
1384   else if (i < nargs)
1385     {
1386       /* traditional C allows foo() if foo wants one argument.  */
1387       if (nargs == 1 && i == 0 && CPP_TRADITIONAL (pfile))
1388         ;
1389       /* the rest args token is allowed to absorb 0 tokens */
1390       else if (i == nargs - 1 && defn->rest_args)
1391         ;
1392       else if (i == 0)
1393         cpp_error (pfile, "macro `%s' used without args", name);
1394       else if (i == 1)
1395         cpp_error (pfile, "macro `%s' used with just one arg", name);
1396       else
1397         cpp_error (pfile, "macro `%s' used with only %d args", name, i);
1398     }
1399   else if (i > nargs)
1400     {
1401       cpp_error (pfile, "macro `%s' used with too many (%d) args", name, i);
1402     }
1403 }
1404
1405 static void
1406 stringify (pfile, arg)
1407      cpp_reader *pfile;
1408      struct argdata *arg;
1409 {
1410   int arglen = arg->raw_length;
1411   int escaped = 0;
1412   int in_string = 0;
1413   int c;
1414   int i;
1415   /* Initially need_space is -1.  Otherwise, 1 means the previous
1416      character was a space, but we suppressed it; 0 means the previous
1417      character was a non-space.  */
1418   int need_space = -1;
1419   i = 0;
1420   arg->stringified = CPP_WRITTEN (pfile);
1421   CPP_PUTC (pfile, '\"');       /* insert beginning quote */
1422   for (; i < arglen; i++)
1423     {
1424       c = (ARG_BASE + arg->raw)[i];
1425
1426       if (!in_string)
1427         {
1428           /* Delete "\r " and "\r-" escapes.  */
1429           if (c == '\r')
1430             {
1431               i++;
1432               continue;
1433             }
1434           /* Internal sequences of whitespace are replaced by one
1435              space except within a string or char token. */
1436           else if (is_space(c))
1437             {
1438               if (need_space == 0)
1439                 need_space = 1;
1440               continue;
1441             }
1442           else if (need_space > 0)
1443             CPP_PUTC (pfile, ' ');
1444           need_space = 0;
1445         }
1446
1447       if (escaped)
1448         escaped = 0;
1449       else
1450         {
1451           if (c == '\\')
1452             escaped = 1;
1453           if (in_string)
1454             {
1455               if (c == in_string)
1456                 in_string = 0;
1457             }
1458           else if (c == '\"' || c == '\'')
1459             in_string = c;
1460         }
1461
1462       /* Escape these chars */
1463       if (c == '\"' || (in_string && c == '\\'))
1464         CPP_PUTC (pfile, '\\');
1465       if (ISPRINT (c))
1466         CPP_PUTC (pfile, c);
1467       else
1468         {
1469           CPP_RESERVE (pfile, 4);
1470           sprintf ((char *) CPP_PWRITTEN (pfile), "\\%03o", (unsigned int) c);
1471           CPP_ADJUST_WRITTEN (pfile, 4);
1472         }
1473     }
1474   CPP_PUTC (pfile, '\"');       /* insert ending quote */
1475   arg->stringified_length  = CPP_WRITTEN (pfile) - arg->stringified;
1476 }
1477
1478 static void
1479 funlike_macroexpand (pfile, hp, args)
1480      cpp_reader *pfile;
1481      HASHNODE *hp;
1482      struct argdata *args;
1483 {
1484   const struct funct_defn *defn = hp->value.fdefn;
1485   register U_CHAR *xbuf;
1486   int xbuf_len;
1487   const U_CHAR *exp = defn->expansion;
1488   int offset;   /* offset in expansion, copied a piece at a time */
1489   int totlen;   /* total amount of exp buffer filled so far */
1490   const struct reflist *ap, *last_ap;
1491   int i;
1492
1493   /* Compute length in characters of the macro's expansion.
1494      Also count number of times each arg is used.  */
1495   xbuf_len = defn->length;
1496   for (ap = defn->pattern; ap != NULL; ap = ap->next)
1497     {
1498       if (ap->stringify)
1499         {
1500           /* Stringify if it hasn't already been */
1501           if (args[ap->argno].stringified_length < 0)
1502             stringify (pfile, &args[ap->argno]);
1503           xbuf_len += args[ap->argno].stringified_length;
1504         }
1505       else if (ap->raw_before || ap->raw_after)
1506         /* Add 4 for two \r-space markers to prevent
1507            token concatenation.  */
1508         xbuf_len += args[ap->argno].raw_length + 4;
1509       else
1510         {
1511           /* We have an ordinary (expanded) occurrence of the arg.
1512              So compute its expansion, if we have not already.  */
1513           if (args[ap->argno].expand_length < 0)
1514             {
1515               args[ap->argno].expanded = CPP_WRITTEN (pfile);
1516               _cpp_expand_to_buffer (pfile, ARG_BASE + args[ap->argno].raw,
1517                                      args[ap->argno].raw_length);
1518
1519               args[ap->argno].expand_length
1520                 = CPP_WRITTEN (pfile) - args[ap->argno].expanded;
1521             }
1522
1523           /* Add 4 for two \r-space markers to prevent
1524              token concatenation.  */
1525           xbuf_len += args[ap->argno].expand_length + 4;
1526         }
1527     }
1528
1529   xbuf = (U_CHAR *) xmalloc (xbuf_len + 1);
1530
1531   /* Generate in XBUF the complete expansion with arguments
1532      substituted in.  TOTLEN is the total size generated so far.
1533      OFFSET is the index in the definition of where we are copying
1534      from.  */
1535   offset = totlen = 0;
1536   for (last_ap = NULL, ap = defn->pattern; ap != NULL;
1537        last_ap = ap, ap = ap->next)
1538     {
1539       register struct argdata *arg = &args[ap->argno];
1540       int count_before = totlen;
1541
1542       /* Add chars to XBUF.  */
1543       i = ap->nchars;
1544       memcpy (&xbuf[totlen], &exp[offset], i);
1545       totlen += i;
1546       offset += i;
1547
1548       /* If followed by an empty rest arg with concatenation,
1549          delete the last run of nonwhite chars.  */
1550       if (arg->raw_length == 0 && totlen > count_before
1551           && ((ap->rest_args && ap->raw_before)
1552               || (last_ap != NULL && last_ap->rest_args
1553                   && last_ap->raw_after)))
1554         {
1555           /* Delete final whitespace.  */
1556           while (totlen > count_before && is_space(xbuf[totlen - 1]))
1557             totlen--;
1558
1559           /* Delete the nonwhites before them.  */
1560           while (totlen > count_before && !is_space(xbuf[totlen - 1]))
1561             totlen--;
1562         }
1563
1564       if (ap->stringify != 0)
1565         {
1566           memcpy (xbuf + totlen, ARG_BASE + arg->stringified,
1567                   arg->stringified_length);
1568           totlen += arg->stringified_length;
1569         }
1570       else if (ap->raw_before || ap->raw_after)
1571         {
1572           U_CHAR *p1 = ARG_BASE + arg->raw;
1573           U_CHAR *l1 = p1 + arg->raw_length;
1574           if (ap->raw_before)
1575             {
1576               /* Arg is concatenated before: delete leading whitespace,
1577                  whitespace markers, and no-reexpansion markers.  */
1578               while (p1 != l1)
1579                 {
1580                   if (is_space(p1[0]))
1581                     p1++;
1582                   else if (p1[0] == '\r')
1583                     p1 += 2;
1584                   else
1585                     break;
1586                 }
1587             }
1588           if (ap->raw_after)
1589             {
1590               /* Arg is concatenated after: delete trailing whitespace,
1591                  whitespace markers, and no-reexpansion markers.  */
1592               while (p1 != l1)
1593                 {
1594                   if (is_space(l1[-1]))
1595                     l1--;
1596                   else if (l1[-1] == '\r')
1597                     l1--;
1598                   else if (l1[-1] == '-')
1599                     {
1600                       if (l1 != p1 + 1 && l1[-2] == '\r')
1601                         l1 -= 2;
1602                       else
1603                         break;
1604                     }
1605                   else
1606                     break;
1607                 }
1608             }
1609
1610           /* Delete any no-reexpansion marker that precedes
1611              an identifier at the beginning of the argument. */
1612           if (p1[0] == '\r' && p1[1] == '-')
1613             p1 += 2;
1614
1615           memcpy (xbuf + totlen, p1, l1 - p1);
1616           totlen += l1 - p1;
1617         }
1618       else
1619         {
1620           U_CHAR *expanded = ARG_BASE + arg->expanded;
1621           if (!ap->raw_before && totlen > 0 && arg->expand_length
1622               && unsafe_chars (pfile, xbuf[totlen - 1], expanded[0]))
1623             {
1624               xbuf[totlen++] = '\r';
1625               xbuf[totlen++] = ' ';
1626             }
1627
1628           memcpy (xbuf + totlen, expanded, arg->expand_length);
1629           totlen += arg->expand_length;
1630
1631           if (!ap->raw_after && totlen > 0 && offset < defn->length
1632               && unsafe_chars (pfile, xbuf[totlen - 1], exp[offset]))
1633             {
1634               xbuf[totlen++] = '\r';
1635               xbuf[totlen++] = ' ';
1636             }
1637         }
1638     }
1639
1640   /* if there is anything left of the definition
1641      after handling the arg list, copy that in too.  */
1642
1643   for (i = offset; i < defn->length; i++)
1644     xbuf[totlen++] = exp[i];
1645   xbuf[totlen] = 0;
1646
1647   if (totlen > xbuf_len)
1648     /* Just die - we've trashed the heap at this point.  */
1649     abort ();
1650   
1651   /* Now put the expansion on the input stack
1652      so our caller will commence reading from it.  */
1653   push_macro_expansion (pfile, xbuf, totlen, hp);
1654
1655   /* Overload buffer->mapped to indicate that xbuf needs to be freed.  */
1656   CPP_BUFFER (pfile)->mapped = 1;
1657 }
1658
1659 /* Return 1 iff a token ending in C1 followed directly by a token C2
1660    could cause mis-tokenization.  */
1661
1662 static int
1663 unsafe_chars (pfile, c1, c2)
1664      cpp_reader *pfile;
1665      int c1, c2;
1666 {
1667   /* If c2 is EOF, that's always safe.  */
1668   if (c2 == EOF)
1669     return 0;
1670
1671   switch (c1)
1672     {
1673     case EOF:
1674       /* We don't know what the previous character was.  We do know
1675          that it can't have been an idchar (or else it would have been
1676          pasted with the idchars of the macro name), and there are a
1677          number of second characters for which it doesn't matter what
1678          the first was.  */
1679       if (is_idchar (c2) || c2 == '\'' || c2 == '\"'
1680           || c2 == '(' || c2 == '[' || c2 == '{'
1681           || c2 == ')' || c2 == ']' || c2 == '}')
1682         return 0;
1683       return 1;
1684
1685     case '+':  case '-':
1686       if (c2 == c1 || c2 == '=')
1687         return 1;
1688       goto letter;
1689
1690     case 'e':  case 'E':  case 'p':  case 'P':
1691       if (c2 == '-' || c2 == '+')
1692         return 1;               /* could extend a pre-processing number */
1693       goto letter;
1694
1695     case '$':
1696       if (CPP_OPTION (pfile, dollars_in_ident))
1697         goto letter;
1698       return 0;
1699
1700     case 'L':
1701       if (c2 == '\'' || c2 == '\"')
1702         return 1;               /* Could turn into L"xxx" or L'xxx'.  */
1703       goto letter;
1704
1705     case '.':  case '0':  case '1':  case '2':  case '3':
1706     case '4':  case '5':  case '6':  case '7':  case '8':  case '9':
1707     case '_':  case 'a':  case 'b':  case 'c':  case 'd':  case 'f':
1708     case 'g':  case 'h':  case 'i':  case 'j':  case 'k':  case 'l':
1709     case 'm':  case 'n':  case 'o':  case 'q':  case 'r':  case 's':
1710     case 't':  case 'u':  case 'v':  case 'w':  case 'x':  case 'y':
1711     case 'z':  case 'A':  case 'B':  case 'C':  case 'D':  case 'F':
1712     case 'G':  case 'H':  case 'I':  case 'J':  case 'K':  case 'M':
1713     case 'N':  case 'O':  case 'Q':  case 'R':  case 'S':  case 'T':
1714     case 'U':  case 'V':  case 'W':  case 'X':  case 'Y':  case 'Z':
1715     letter:
1716     /* We're in the middle of either a name or a pre-processing number.  */
1717       return (is_idchar(c2) || c2 == '.');
1718
1719     case '<':  case '>':  case '!':  case '%':  case '#':  case ':':
1720     case '^':  case '&':  case '|':  case '*':  case '/':  case '=':
1721       return (c2 == c1 || c2 == '=');
1722     }
1723   return 0;
1724 }
1725
1726 static void
1727 push_macro_expansion (pfile, xbuf, len, hp)
1728      cpp_reader *pfile;
1729      const U_CHAR *xbuf;
1730      int len;
1731      HASHNODE *hp;
1732 {
1733   cpp_buffer *mbuf;
1734   int advance_cur = 0;
1735
1736   /* The first chars of the expansion should be a "\r " added by
1737      collect_expansion.  This is to prevent accidental token-pasting
1738      between the text preceding the macro invocation, and the macro
1739      expansion text.
1740
1741      We would like to avoid adding unneeded spaces (for the sake of
1742      tools that use cpp, such as imake).  In some common cases we can
1743      tell that it is safe to omit the space.  */
1744
1745   if (xbuf[0] == '\r' && xbuf[1] == ' '
1746       && !unsafe_chars (pfile, EOF, xbuf[2]))
1747     advance_cur = 1;
1748
1749   /* Likewise, avoid the extra space at the end of the macro expansion
1750      if this is safe.  We can do a better job here since we can know
1751      what the next char will be.  */
1752   if (len >= 3 && xbuf[len-2] == '\r' && xbuf[len-1] == ' '
1753       && !unsafe_chars (pfile, xbuf[len-3], CPP_BUF_PEEK (CPP_BUFFER (pfile))))
1754     len -= 2;
1755
1756   /* If the total expansion is "\r \r ", we must not trim both escapes.  */
1757   if (len == 2 && advance_cur)
1758     advance_cur = 0;
1759
1760   mbuf = cpp_push_buffer (pfile, xbuf, len);
1761   if (mbuf == NULL)
1762     return;
1763   if (advance_cur)
1764     mbuf->cur += 2;
1765   mbuf->macro = hp;
1766   mbuf->has_escapes = 1;
1767
1768   /* In C89, a macro cannot be expanded recursively.  Traditional C
1769      permits it, but any use in an object-like macro must lead to
1770      infinite recursion, so always follow C89 in object-like macros.
1771      Likewise, in a function-like macro it must cause infinite
1772      recursion unless we are actually doing something with the
1773      arguments.
1774
1775      Even that criterion is too weak.  The only example known where
1776      macro recursion isn't infinite is:
1777         #define bar(x,y) foo(x(y, 0))
1778         bar(bar, baz)
1779      which expands to foo(bar(baz, 0)) in C89 and
1780      foo(foo(baz(0, 0)) in K+R.  This looks pathological to me.
1781      If someone has a real-world example I would love to see it.  */
1782   if (hp->type != T_FMACRO
1783       || hp->value.fdefn->nargs == 0
1784       || hp->value.fdefn->pattern == 0
1785       || !CPP_TRADITIONAL (pfile))
1786     hp->disabled = 1;
1787 }
1788
1789 /* Return zero if two funct_defns are isomorphic.  */
1790
1791 static int
1792 compare_defs (pfile, d1, d2)
1793      cpp_reader *pfile;
1794      const struct funct_defn *d1, *d2;
1795 {
1796   const struct reflist *a1, *a2;
1797
1798   if (d1->nargs != d2->nargs)
1799     return 1;
1800   if (ustrcmp (d1->expansion, d2->expansion))
1801     return 1;
1802   if (CPP_PEDANTIC (pfile)
1803       && d1->argnames && d2->argnames)
1804     {
1805       U_CHAR *arg1 = d1->argnames;
1806       U_CHAR *arg2 = d2->argnames;
1807       size_t len;
1808       int i = d1->nargs;
1809       while (i--)
1810         {
1811           len = ustrlen (arg1) + 1;
1812           if (ustrcmp (arg1, arg2))
1813             return 1;
1814           arg1 += len;
1815           arg2 += len;
1816         }
1817     }
1818   for (a1 = d1->pattern, a2 = d2->pattern; a1 && a2;
1819        a1 = a1->next, a2 = a2->next)
1820     {
1821       if (a1->nchars != a2->nchars
1822           || a1->argno != a2->argno
1823           || a1->stringify != a2->stringify
1824           || a1->raw_before != a2->raw_before
1825           || a1->raw_after != a2->raw_after)
1826         return 1;
1827     }
1828   if (a1 != a2)
1829     return 1;
1830
1831   return 0;
1832 }
1833
1834 /* Dump the definition of macro MACRO on stdout.  The format is suitable
1835    to be read back in again. */
1836
1837 void
1838 _cpp_dump_definition (pfile, hp)
1839      cpp_reader *pfile;
1840      HASHNODE *hp;
1841 {
1842   CPP_RESERVE (pfile, hp->length + sizeof "#define ");
1843   CPP_PUTS_Q (pfile, "#define ", sizeof "#define " - 1);
1844   CPP_PUTS_Q (pfile, hp->name, hp->length);
1845
1846   if (hp->type == T_EMPTY)
1847     /* do nothing */;
1848   else if (hp->type == T_FMACRO)
1849     dump_funlike_macro (pfile, hp->value.fdefn);
1850   else
1851     {
1852       CPP_PUTC_Q (pfile, ' ');
1853
1854       if (hp->type == T_IDENTITY)
1855         CPP_PUTS (pfile, hp->name, hp->length);
1856       else if (hp->type == T_MACRO)
1857         {
1858           /* The first and last two characters of a macro expansion are
1859              always "\r "; this needs to be trimmed out.
1860              So we need length-4 chars of space, plus one for the NUL.  */
1861           CPP_RESERVE (pfile, hp->value.odefn->length - 4 + 1);
1862           CPP_PUTS_Q (pfile, hp->value.odefn->expansion + 2,
1863                       hp->value.odefn->length - 4);
1864         }
1865       else
1866         cpp_ice (pfile, "invalid hash type %d in dump_definition", hp->type);
1867     }
1868   if (CPP_BUFFER (pfile) == 0 || ! pfile->done_initializing)
1869     CPP_PUTC (pfile, '\n');
1870 }
1871
1872 static void
1873 dump_funlike_macro (pfile, defn)
1874      cpp_reader *pfile;
1875      const struct funct_defn *defn;
1876 {
1877   const struct reflist *r;
1878   const U_CHAR **argv = (const U_CHAR **) alloca (defn->nargs *
1879                                                   sizeof(const U_CHAR *));
1880   int *argl = (int *) alloca (defn->nargs * sizeof(int));
1881   const U_CHAR *x;
1882   int i;
1883
1884   /* First extract the argument list. */
1885   x = defn->argnames;
1886   for (i = 0; i < defn->nargs; i++)
1887     {
1888       argv[i] = x;
1889       argl[i] = ustrlen (x);
1890       x += argl[i] + 1;
1891     }
1892       
1893   /* Now print out the argument list. */
1894   CPP_PUTC_Q (pfile, '(');
1895   for (i = 0; i < defn->nargs; i++)
1896     {
1897       CPP_RESERVE (pfile, argl[i] + 2);
1898       if (!(i == defn->nargs-1 && defn->rest_args
1899             && !ustrcmp (argv[i], U"__VA_ARGS__")))
1900         CPP_PUTS_Q (pfile, argv[i], argl[i]);
1901       if (i < defn->nargs-1)
1902         CPP_PUTS_Q (pfile, ", ", 2);
1903     }
1904   if (defn->rest_args)
1905     CPP_PUTS (pfile, "...", 3);
1906   CPP_PUTS (pfile, ") ", 2);
1907
1908   /* Now the definition. */
1909   x = defn->expansion;
1910   for (r = defn->pattern; r; r = r->next)
1911     {
1912       i = r->nchars;
1913       if (*x == '\r') x += 2, i -= 2;
1914       /* i chars for macro text, plus the length of the macro
1915          argument name, plus one for a stringify marker, plus two for
1916          each concatenation marker. */
1917       CPP_RESERVE (pfile,
1918                    i + argl[r->argno] + r->stringify
1919                    + (r->raw_before + r->raw_after) * 2);
1920
1921       if (i > 0) CPP_PUTS_Q (pfile, x, i);
1922       if (r->raw_before)
1923         CPP_PUTS_Q (pfile, "##", 2);
1924       if (r->stringify)
1925         CPP_PUTC_Q (pfile, '#');
1926       CPP_PUTS_Q (pfile, argv[r->argno], argl[r->argno]);
1927       if (r->raw_after && !(r->next && r->next->nchars == 0
1928                             && r->next->raw_before))
1929         CPP_PUTS_Q (pfile, "##", 2);
1930
1931       x += i;
1932     }
1933
1934   i = defn->length - (x - defn->expansion) - 2;
1935   if (*x == '\r') x += 2, i -= 2;
1936   if (i > 0) CPP_PUTS (pfile, x, i);
1937 }
1938
1939 /* Dump out the hash table.  */
1940 static int
1941 dump_hash_helper (h, p)
1942      void **h;
1943      void *p;
1944 {
1945   HASHNODE *hp = (HASHNODE *)*h;
1946   cpp_reader *pfile = (cpp_reader *)p;
1947
1948   if (hp->type == T_MACRO || hp->type == T_FMACRO
1949       || hp->type == T_IDENTITY || hp->type == T_EMPTY)
1950     _cpp_dump_definition (pfile, hp);
1951   return 1;
1952 }
1953
1954 void
1955 _cpp_dump_macro_hash (pfile)
1956      cpp_reader *pfile;
1957 {
1958   htab_traverse (pfile->hashtab, dump_hash_helper, pfile);
1959 }