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
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
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.
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.
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! */
33 static unsigned int hash_HASHNODE PARAMS ((const void *));
34 static int eq_HASHNODE PARAMS ((const void *, const void *));
35 static void del_HASHNODE PARAMS ((void *));
36 static int dump_hash_helper PARAMS ((void **, void *));
38 static int comp_def_part PARAMS ((int, U_CHAR *, int, U_CHAR *,
40 static void push_macro_expansion PARAMS ((cpp_reader *,
41 U_CHAR *, int, HASHNODE *));
42 static int unsafe_chars PARAMS ((cpp_reader *, int, int));
43 static int macro_cleanup PARAMS ((cpp_buffer *, cpp_reader *));
44 static enum cpp_token macarg PARAMS ((cpp_reader *, int));
45 static struct tm *timestamp PARAMS ((cpp_reader *));
46 static void special_symbol PARAMS ((HASHNODE *, cpp_reader *));
48 #define CPP_IS_MACRO_BUFFER(PBUF) ((PBUF)->data != NULL)
49 #define FORWARD(N) CPP_FORWARD (CPP_BUFFER (pfile), (N))
50 #define PEEKC() CPP_BUF_PEEK (CPP_BUFFER (pfile))
52 /* Initial hash table size. (It can grow if necessary - see hashtab.c.) */
55 /* The arglist structure is built by create_definition to tell
56 collect_expansion where the argument names begin. That
57 is, for a define like "#define f(x,y,z) foo+x-bar*y", the arglist
58 would contain pointers to the strings x, y, and z.
59 collect_expansion would then build a DEFINITION node,
60 with reflist nodes pointing to the places x, y, and z had
61 appeared. So the arglist is just convenience data passed
62 between these two routines. It is not kept around after
63 the current #define has been processed and entered into the
81 static DEFINITION *collect_expansion PARAMS ((cpp_reader *, struct arglist *));
82 static struct arglist *collect_formal_parameters PARAMS ((cpp_reader *));
84 /* This structure represents one parsed argument in a macro call.
85 `raw' points to the argument text as written (`raw_length' is its length).
86 `expanded' points to the argument's macro-expansion
87 (its length is `expand_length').
88 `stringified_length' is the length the argument would have
91 /* raw and expanded are relative to ARG_BASE */
92 #define ARG_BASE ((pfile)->token_buffer)
96 /* Strings relative to pfile->token_buffer */
97 long raw, expanded, stringified;
98 int raw_length, expand_length;
99 int stringified_length;
102 /* Calculate hash of a string of length LEN. */
104 _cpp_calc_hash (str, len)
112 r = r * 67 + (*str++ - 113);
117 /* Calculate hash of a HASHNODE structure. */
122 const HASHNODE *h = (const HASHNODE *)x;
126 /* Compare two HASHNODE structures. */
132 const HASHNODE *a = (const HASHNODE *)x;
133 const HASHNODE *b = (const HASHNODE *)y;
135 return (a->length == b->length
136 && !strncmp (a->name, b->name, a->length));
139 /* Destroy a HASHNODE. */
144 HASHNODE *h = (HASHNODE *)x;
146 if (h->type == T_MACRO)
147 _cpp_free_definition (h->value.defn);
148 free ((void *) h->name);
152 /* Allocate and initialize a HASHNODE structure.
153 Caller must fill in the value field. */
156 _cpp_make_hashnode (name, len, type, hash)
162 HASHNODE *hp = (HASHNODE *) xmalloc (sizeof (HASHNODE));
163 U_CHAR *p = xmalloc (len + 1);
170 memcpy (p, name, len);
176 /* Find the hash node for name "name", which ends at the first
179 If LEN is >= 0, it is the length of the name.
180 Otherwise, compute the length now. */
183 _cpp_lookup (pfile, name, len)
193 for (bp = name; is_idchar (*bp); bp++);
199 dummy.hash = _cpp_calc_hash (name, len);
201 return (HASHNODE *) htab_find_with_hash (pfile->hashtab,
202 (void *)&dummy, dummy.hash);
205 /* Find the hashtable slot for name "name". Used to insert or delete. */
207 _cpp_lookup_slot (pfile, name, len, insert, hash)
220 for (bp = name; is_idchar (*bp); bp++);
226 dummy.hash = _cpp_calc_hash (name, len);
228 slot = (HASHNODE **) htab_find_slot_with_hash (pfile->hashtab,
236 /* Init the hash table. In here so it can see the hash and eq functions. */
238 _cpp_init_macro_hash (pfile)
241 pfile->hashtab = htab_create (HASHSIZE, hash_HASHNODE,
242 eq_HASHNODE, del_HASHNODE);
245 /* Free a DEFINITION structure. Used by delete_macro, and by
246 do_define when redefining macros. */
249 _cpp_free_definition (d)
252 struct reflist *ap, *nextap;
254 for (ap = d->pattern; ap != NULL; ap = nextap)
265 macro_cleanup (pbuf, pfile)
267 cpp_reader *pfile ATTRIBUTE_UNUSED;
269 HASHNODE *macro = (HASHNODE *) pbuf->data;
270 if (macro->type == T_DISABLED)
271 macro->type = T_MACRO;
272 if (macro->type != T_MACRO || pbuf->buf != macro->value.defn->expansion)
273 free ((PTR) pbuf->buf);
277 /* Read a replacement list for a macro, and build the DEFINITION
278 structure. ARGLIST specifies the formal parameters to look for in
279 the text of the definition. If ARGLIST is null, this is an
280 object-like macro; if it points to an empty arglist, this is a
281 function-like macro with no arguments.
283 A good half of this is devoted to supporting -traditional.
287 collect_expansion (pfile, arglist)
289 struct arglist *arglist;
292 struct reflist *pat = 0, *endpat = 0;
293 enum cpp_token token;
294 long start, here, last;
300 enum { START = 0, NORM, ARG, STRIZE, PASTE } last_token = START;
304 argv = arglist->argv;
305 argc = arglist->argc;
313 last = start = CPP_WRITTEN (pfile);
314 last -= 2; /* two extra chars for the leading escape */
317 /* We use cpp_get_token because _cpp_get_directive_token would
318 discard whitespace and we can't cope with that yet. Macro
319 expansion is off, so we are guaranteed not to see POP or EOF. */
321 while (PEEKC () == '\r')
324 CPP_BUMP_LINE (pfile);
326 if (PEEKC () == '\n')
328 here = CPP_WRITTEN (pfile);
329 token = cpp_get_token (pfile);
330 tok = pfile->token_buffer + here;
336 cpp_ice (pfile, "EOF or VSPACE in collect_expansion");
340 if (last_token == STRIZE || last_token == PASTE
341 || last_token == START)
342 CPP_SET_WRITTEN (pfile, here);
346 /* # is not special in object-like macros. It is special in
347 function-like macros with no args. (6.10.3.2 para 1.) */
350 /* # is not special immediately after PASTE.
351 (Implied by 6.10.3.3 para 4.) */
352 if (last_token == PASTE)
355 CPP_SET_WRITTEN (pfile, here); /* delete from replacement text */
359 /* If the last token was an argument, discard this token and
360 any hspace between it and the argument's position. Then
361 mark the arg raw_after. */
362 if (last_token == ARG)
364 endpat->raw_after = 1;
366 CPP_SET_WRITTEN (pfile, last);
369 else if (last_token == PASTE)
370 /* ## ## - the second ## is ordinary. */
372 else if (last_token == START)
373 cpp_error (pfile, "`##' at start of macro definition");
375 /* Discard the token and any hspace before it. */
376 while (is_hspace (pfile->token_buffer[here-1]))
378 CPP_SET_WRITTEN (pfile, here);
380 if (last_token == STRIZE)
381 /* Oops - that wasn't a stringify operator. */
382 CPP_PUTC (pfile, '#');
387 /* We must be in -traditional mode. Pretend this was a
388 token paste, but only if there was no leading or
389 trailing space and it's in the middle of the line. */
390 CPP_SET_WRITTEN (pfile, here);
391 if (last_token == START)
393 if (is_hspace (pfile->token_buffer[here-1]))
395 if (is_hspace (PEEKC ()))
397 if (PEEKC () == '\n')
399 if (last_token == ARG)
400 endpat->raw_after = 1;
406 if (last_token == STRIZE)
407 cpp_error (pfile, "`#' is not followed by a macro argument name");
409 if (CPP_TRADITIONAL (pfile) || CPP_OPTION (pfile, warn_stringify))
410 goto maybe_trad_stringify;
415 for (i = 0; i < argc; i++)
416 if (!strncmp (tok, argv[i].name, argv[i].len)
417 && ! is_idchar (tok[argv[i].len]))
423 if (last_token == STRIZE)
424 cpp_error (pfile, "`#' is not followed by a macro argument name");
432 struct reflist *tpat;
434 /* Make a pat node for this arg and add it to the pat list */
435 tpat = (struct reflist *) xmalloc (sizeof (struct reflist));
437 tpat->raw_before = (last_token == PASTE);
439 tpat->stringify = (last_token == STRIZE);
440 tpat->rest_args = argv[i].rest_arg;
442 tpat->nchars = here - last;
451 CPP_SET_WRITTEN (pfile, here); /* discard arg name */
455 maybe_trad_stringify:
458 U_CHAR *base, *p, *limit;
459 struct reflist *tpat;
461 base = p = pfile->token_buffer + here;
462 limit = CPP_PWRITTEN (pfile);
468 for (i = 0; i < argc; i++)
469 if (!strncmp (tok, argv[i].name, argv[i].len)
470 && ! is_idchar (tok[argv[i].len]))
475 if (!CPP_TRADITIONAL (pfile))
477 /* Must have got here because of -Wtraditional. */
479 "macro argument `%.*s' would be stringified with -traditional",
480 (int) argv[i].len, argv[i].name);
483 if (CPP_OPTION (pfile, warn_stringify))
484 cpp_warning (pfile, "macro argument `%.*s' is stringified",
485 (int) argv[i].len, argv[i].name);
487 /* Remove the argument from the string. */
488 memmove (p, p + argv[i].len, limit - (p + argv[i].len));
489 limit -= argv[i].len;
491 /* Make a pat node for this arg and add it to the pat list */
492 tpat = (struct reflist *) xmalloc (sizeof (struct reflist));
495 /* Don't attempt to paste this with anything. */
496 tpat->raw_before = 0;
499 tpat->rest_args = argv[i].rest_arg;
501 tpat->nchars = (p - base) + here - last;
508 last = (p - base) + here;
510 CPP_ADJUST_WRITTEN (pfile, CPP_PWRITTEN (pfile) - limit);
515 if (last_token == STRIZE)
516 cpp_error (pfile, "`#' is not followed by a macro argument name");
517 else if (last_token == PASTE)
518 cpp_error (pfile, "`##' at end of macro definition");
520 if (last_token == START)
522 /* Empty macro definition. */
523 exp = (U_CHAR *) xstrdup ("\r \r ");
528 /* Trim trailing white space from definition. */
529 here = CPP_WRITTEN (pfile);
530 while (here > last && is_hspace (pfile->token_buffer [here-1]))
532 CPP_SET_WRITTEN (pfile, here);
533 CPP_NUL_TERMINATE (pfile);
534 len = CPP_WRITTEN (pfile) - start + 1;
535 /* space for no-concat markers at either end */
536 exp = (U_CHAR *) xmalloc (len + 4);
542 memcpy (&exp[2], pfile->token_buffer + start, len - 1);
545 CPP_SET_WRITTEN (pfile, start);
547 defn = (DEFINITION *) xmalloc (sizeof (DEFINITION));
548 defn->length = len + 3;
549 defn->expansion = exp;
555 defn->argnames = arglist->namebuf;
558 defn->rest_args = argv[argc - 1].rest_arg;
572 static struct arglist *
573 collect_formal_parameters (pfile)
576 struct arglist *result = 0;
577 struct arg *argv = 0;
578 U_CHAR *namebuf = (U_CHAR *) xstrdup ("");
585 enum cpp_token token;
588 old_written = CPP_WRITTEN (pfile);
589 token = _cpp_get_directive_token (pfile);
590 if (token != CPP_LPAREN)
592 cpp_ice (pfile, "first token = %d not %d in collect_formal_parameters",
597 argv = (struct arg *) xmalloc (sizeof (struct arg));
599 argv[argc].rest_arg = 0;
602 CPP_SET_WRITTEN (pfile, old_written);
603 token = _cpp_get_directive_token (pfile);
607 tok = pfile->token_buffer + old_written;
608 len = CPP_PWRITTEN (pfile) - tok;
610 && (name = (U_CHAR *) strstr (namebuf, tok))
612 && (name == namebuf || name[-1] == ','))
614 cpp_error (pfile, "duplicate macro argument name `%s'", tok);
617 if (CPP_PEDANTIC (pfile) && CPP_OPTION (pfile, c99)
618 && len == sizeof "__VA_ARGS__" - 1
619 && !strncmp (tok, "__VA_ARGS__", len))
621 "C99 does not permit use of `__VA_ARGS__' as a macro argument name");
622 namebuf = (U_CHAR *) xrealloc (namebuf, argslen + len + 1);
623 name = &namebuf[argslen - 1];
626 memcpy (name, tok, len);
629 argv[argc].len = len;
630 argv[argc].rest_arg = 0;
635 argv = (struct arg *) xrealloc (argv, (argc + 1)*sizeof(struct arg));
646 cpp_error (pfile, "missing right paren in macro argument list");
650 cpp_error (pfile, "syntax error in #define");
656 /* There are two possible styles for a vararg macro:
657 the C99 way: #define foo(a, ...) a, __VA_ARGS__
658 the gnu way: #define foo(a, b...) a, b
659 The C99 way can be considered a special case of the gnu way.
660 There are also some constraints to worry about, but we'll handle
662 if (argv[argc].len == 0)
664 if (CPP_PEDANTIC (pfile) && ! CPP_OPTION (pfile, c99))
665 cpp_pedwarn (pfile, "C89 does not permit varargs macros");
667 len = sizeof "__VA_ARGS__" - 1;
668 namebuf = (U_CHAR *) xrealloc (namebuf, argslen + len + 1);
669 name = &namebuf[argslen - 1];
671 memcpy (name, "__VA_ARGS__", len);
672 argv[argc].len = len;
675 if (CPP_PEDANTIC (pfile))
676 cpp_pedwarn (pfile, "ISO C does not permit named varargs macros");
678 argv[argc].rest_arg = 1;
680 token = _cpp_get_directive_token (pfile);
681 if (token != CPP_RPAREN)
683 cpp_error (pfile, "another parameter follows `...'");
688 /* Go through argv and fix up the pointers. */
690 for (i = 0; i <= argc; i++)
692 argv[i].name = namebuf + len;
693 len += argv[i].len + 1;
694 namebuf[len - 1] = '\0';
697 CPP_SET_WRITTEN (pfile, old_written);
699 result = (struct arglist *) xmalloc (sizeof (struct arglist));
700 if (namebuf[0] != '\0')
702 result->namebuf = namebuf;
703 result->argc = argc + 1;
724 /* Create a DEFINITION node for a macro. The reader's point is just
725 after the macro name. If FUNLIKE is true, this is a function-like
729 _cpp_create_definition (pfile, funlike)
733 struct arglist *args = 0;
738 cpp_buf_line_and_col (CPP_BUFFER (pfile), &line, &col);
739 file = CPP_BUFFER (pfile)->nominal_fname;
741 pfile->no_macro_expand++;
742 pfile->parsing_define_directive++;
743 CPP_OPTION (pfile, discard_comments)++;
744 CPP_OPTION (pfile, no_line_commands)++;
748 args = collect_formal_parameters (pfile);
753 defn = collect_expansion (pfile, args);
761 pfile->no_macro_expand--;
762 pfile->parsing_define_directive--;
763 CPP_OPTION (pfile, discard_comments)--;
764 CPP_OPTION (pfile, no_line_commands)--;
768 pfile->no_macro_expand--;
769 pfile->parsing_define_directive--;
770 CPP_OPTION (pfile, discard_comments)--;
771 CPP_OPTION (pfile, no_line_commands)--;
776 * Parse a macro argument and append the info on PFILE's token_buffer.
777 * REST_ARGS means to absorb the rest of the args.
778 * Return nonzero to indicate a syntax error.
781 static enum cpp_token
782 macarg (pfile, rest_args)
787 enum cpp_token token;
789 /* Try to parse as much of the argument as exists at this
790 input stack level. */
793 token = cpp_get_token (pfile);
799 /* If we've hit end of file, it's an error (reported by caller).
800 Ditto if it's the end of cpp_expand_to_buffer text.
801 If we've hit end of macro, just continue. */
802 if (!CPP_IS_MACRO_BUFFER (CPP_BUFFER (pfile)))
813 /* if we've returned to lowest level and
814 we aren't absorbing all args */
815 if (paren == 0 && rest_args == 0)
819 /* Remove ',' or ')' from argument buffer. */
820 CPP_ADJUST_WRITTEN (pfile, -1);
834 time_t t = time ((time_t *) 0);
835 pfile->timebuf = localtime (&t);
837 return pfile->timebuf;
840 static const char * const monthnames[] =
842 "Jan", "Feb", "Mar", "Apr", "May", "Jun",
843 "Jul", "Aug", "Sep", "Oct", "Nov", "Dec",
846 /* Place into PFILE a quoted string representing the string SRC.
847 Caller must reserve enough space in pfile->token_buffer. */
850 _cpp_quote_string (pfile, src)
856 CPP_PUTC_Q (pfile, '\"');
858 switch ((c = *src++))
862 CPP_PUTC_Q (pfile, c);
865 sprintf ((char *)CPP_PWRITTEN (pfile), "\\%03o", c);
866 CPP_ADJUST_WRITTEN (pfile, 4);
872 CPP_PUTC_Q (pfile, '\\');
873 CPP_PUTC_Q (pfile, c);
877 CPP_PUTC_Q (pfile, '\"');
878 CPP_NUL_TERMINATE_Q (pfile);
884 * expand things like __FILE__. Place the expansion into the output
885 * buffer *without* rescanning.
889 special_symbol (hp, pfile)
902 ip = cpp_file_buffer (pfile);
903 if (hp->type == T_BASE_FILE)
905 while (CPP_PREV_BUFFER (ip) != NULL)
906 ip = CPP_PREV_BUFFER (ip);
909 buf = ip->nominal_fname;
913 CPP_RESERVE (pfile, 3 + 4 * strlen (buf));
914 _cpp_quote_string (pfile, buf);
918 case T_INCLUDE_LEVEL:
920 int true_indepth = 1;
921 ip = cpp_file_buffer (pfile);
922 while ((ip = CPP_PREV_BUFFER (ip)) != NULL)
925 CPP_RESERVE (pfile, 10);
926 sprintf (CPP_PWRITTEN (pfile), "%d", true_indepth);
927 CPP_ADJUST_WRITTEN (pfile, strlen (CPP_PWRITTEN (pfile)));
932 len = strlen (hp->value.cpval);
933 CPP_RESERVE (pfile, 3 + len);
934 CPP_PUTC_Q (pfile, '"');
935 CPP_PUTS_Q (pfile, hp->value.cpval, len);
936 CPP_PUTC_Q (pfile, '"');
937 CPP_NUL_TERMINATE_Q (pfile);
941 buf = hp->value.cpval;
948 CPP_RESERVE (pfile, len + 1);
949 CPP_PUTS_Q (pfile, buf, len);
950 CPP_NUL_TERMINATE_Q (pfile);
954 CPP_RESERVE (pfile, 2);
955 #ifdef STDC_0_IN_SYSTEM_HEADERS
956 ip = cpp_file_buffer (pfile);
957 if (ip->system_header_p
958 && !cpp_defined (pfile, (const U_CHAR *) "__STRICT_ANSI__", 15))
959 CPP_PUTC_Q (pfile, '0');
962 CPP_PUTC_Q (pfile, '1');
963 CPP_NUL_TERMINATE_Q (pfile);
969 cpp_buf_line_and_col (cpp_file_buffer (pfile), &line, NULL);
971 CPP_RESERVE (pfile, 10);
972 sprintf (CPP_PWRITTEN (pfile), "%ld", line);
973 CPP_ADJUST_WRITTEN (pfile, strlen (CPP_PWRITTEN (pfile)));
982 CPP_RESERVE (pfile, 20);
983 timebuf = timestamp (pfile);
984 if (hp->type == T_DATE)
985 sprintf (CPP_PWRITTEN (pfile), "\"%s %2d %4d\"",
986 monthnames[timebuf->tm_mon],
987 timebuf->tm_mday, timebuf->tm_year + 1900);
989 sprintf (CPP_PWRITTEN (pfile), "\"%02d:%02d:%02d\"",
990 timebuf->tm_hour, timebuf->tm_min, timebuf->tm_sec);
992 CPP_ADJUST_WRITTEN (pfile, strlen (CPP_PWRITTEN (pfile)));
997 cpp_error (pfile, "attempt to use poisoned `%s'.", hp->name);
998 CPP_RESERVE (pfile, 1);
999 CPP_PUTC_Q (pfile, '0');
1000 CPP_NUL_TERMINATE_Q (pfile);
1004 cpp_ice (pfile, "invalid special hash type");
1009 /* Expand a macro call.
1010 HP points to the symbol that is the macro being called.
1011 Put the result of expansion onto the input stack
1012 so that subsequent input by our caller will use it.
1014 If macro wants arguments, caller has already verified that
1015 an argument list follows; arguments come from the input stack. */
1018 _cpp_macroexpand (pfile, hp)
1024 register U_CHAR *xbuf;
1025 long start_line, start_column;
1027 struct argdata *args = 0;
1028 long old_written = CPP_WRITTEN (pfile);
1029 int rest_args, rest_zero = 0;
1032 cpp_buf_line_and_col (cpp_file_buffer (pfile), &start_line, &start_column);
1034 /* Check for and handle special symbols. */
1035 if (hp->type != T_MACRO)
1037 special_symbol (hp, pfile);
1038 xbuf_len = CPP_WRITTEN (pfile) - old_written;
1039 xbuf = (U_CHAR *) xmalloc (xbuf_len + 1);
1040 CPP_SET_WRITTEN (pfile, old_written);
1041 memcpy (xbuf, CPP_PWRITTEN (pfile), xbuf_len + 1);
1042 push_macro_expansion (pfile, xbuf, xbuf_len, hp);
1043 CPP_BUFFER (pfile)->has_escapes = 1;
1047 defn = hp->value.defn;
1048 nargs = defn->nargs;
1049 pfile->output_escapes++;
1053 enum cpp_token token;
1055 args = (struct argdata *) alloca ((nargs + 1) * sizeof (struct argdata));
1057 for (i = 0; i < nargs; i++)
1059 args[i].raw = args[i].expanded = 0;
1060 args[i].raw_length = 0;
1061 args[i].expand_length = args[i].stringified_length = -1;
1064 /* Parse all the macro args that are supplied. I counts them.
1065 The first NARGS args are stored in ARGS.
1066 The rest are discarded. If rest_args is set then we assume
1067 macarg absorbed the rest of the args. */
1071 /* Skip over the opening parenthesis. */
1072 CPP_OPTION (pfile, discard_comments)++;
1073 CPP_OPTION (pfile, no_line_commands)++;
1074 pfile->no_macro_expand++;
1075 pfile->no_directives++;
1077 token = cpp_get_non_space_token (pfile);
1078 if (token != CPP_LPAREN)
1079 cpp_ice (pfile, "macroexpand: unexpected token %d (wanted LPAREN)",
1081 CPP_ADJUST_WRITTEN (pfile, -1);
1088 if (i < nargs || (nargs == 0 && i == 0))
1090 /* if we are working on last arg which absorbs rest of args... */
1091 if (i == nargs - 1 && defn->rest_args)
1093 args[i].raw = CPP_WRITTEN (pfile);
1094 token = macarg (pfile, rest_args);
1095 args[i].raw_length = CPP_WRITTEN (pfile) - args[i].raw;
1098 token = macarg (pfile, 0);
1099 if (token == CPP_EOF || token == CPP_POP)
1100 cpp_error_with_line (pfile, start_line, start_column,
1101 "unterminated macro call");
1104 while (token == CPP_COMMA);
1105 CPP_OPTION (pfile, discard_comments)--;
1106 CPP_OPTION (pfile, no_line_commands)--;
1107 pfile->no_macro_expand--;
1108 pfile->no_directives--;
1109 if (token != CPP_RPAREN)
1112 /* If we got one arg but it was just whitespace, call that 0 args. */
1115 register U_CHAR *bp = ARG_BASE + args[0].raw;
1116 register U_CHAR *lim = bp + args[0].raw_length;
1117 /* cpp.texi says for foo ( ) we provide one argument.
1118 However, if foo wants just 0 arguments, treat this as 0. */
1120 while (bp != lim && is_space(*bp))
1126 /* Don't output an error message if we have already output one for
1127 a parse error above. */
1129 if (nargs == 0 && i > 0)
1131 cpp_error (pfile, "arguments given to macro `%s'", hp->name);
1135 /* traditional C allows foo() if foo wants one argument. */
1136 if (nargs == 1 && i == 0 && CPP_TRADITIONAL (pfile))
1138 /* the rest args token is allowed to absorb 0 tokens */
1139 else if (i == nargs - 1 && defn->rest_args)
1142 cpp_error (pfile, "macro `%s' used without args", hp->name);
1144 cpp_error (pfile, "macro `%s' used with just one arg", hp->name);
1146 cpp_error (pfile, "macro `%s' used with only %d args",
1152 "macro `%s' used with too many (%d) args", hp->name, i);
1156 /* If macro wants zero args, we parsed the arglist for checking only.
1157 Read directly from the macro definition. */
1160 xbuf = defn->expansion;
1161 xbuf_len = defn->length;
1165 register U_CHAR *exp = defn->expansion;
1166 register int offset; /* offset in expansion,
1167 copied a piece at a time */
1168 register int totlen; /* total amount of exp buffer filled so far */
1170 register struct reflist *ap, *last_ap;
1172 /* Macro really takes args. Compute the expansion of this call. */
1174 /* Compute length in characters of the macro's expansion.
1175 Also count number of times each arg is used. */
1176 xbuf_len = defn->length;
1177 for (ap = defn->pattern; ap != NULL; ap = ap->next)
1181 register struct argdata *arg = &args[ap->argno];
1182 /* Stringify if it hasn't already been */
1183 if (arg->stringified_length < 0)
1185 int arglen = arg->raw_length;
1189 /* Initially need_space is -1. Otherwise, 1 means the
1190 previous character was a space, but we suppressed it;
1191 0 means the previous character was a non-space. */
1192 int need_space = -1;
1194 arg->stringified = CPP_WRITTEN (pfile);
1195 if (!CPP_TRADITIONAL (pfile))
1196 CPP_PUTC (pfile, '\"'); /* insert beginning quote */
1197 for (; i < arglen; i++)
1199 c = (ARG_BASE + arg->raw)[i];
1203 /* Delete "\r " and "\r-" escapes. */
1209 /* Internal sequences of whitespace are
1210 replaced by one space except within
1211 a string or char token. */
1212 else if (is_space(c))
1214 if (need_space == 0)
1218 else if (need_space > 0)
1219 CPP_PUTC (pfile, ' ');
1234 else if (c == '\"' || c == '\'')
1238 /* Escape these chars */
1239 if (c == '\"' || (in_string && c == '\\'))
1240 CPP_PUTC (pfile, '\\');
1242 CPP_PUTC (pfile, c);
1245 CPP_RESERVE (pfile, 4);
1246 sprintf ((char *) CPP_PWRITTEN (pfile), "\\%03o",
1248 CPP_ADJUST_WRITTEN (pfile, 4);
1251 if (!CPP_TRADITIONAL (pfile))
1252 CPP_PUTC (pfile, '\"'); /* insert ending quote */
1253 arg->stringified_length
1254 = CPP_WRITTEN (pfile) - arg->stringified;
1256 xbuf_len += args[ap->argno].stringified_length;
1258 else if (ap->raw_before || ap->raw_after || CPP_TRADITIONAL (pfile))
1259 /* Add 4 for two \r-space markers to prevent
1260 token concatenation. */
1261 xbuf_len += args[ap->argno].raw_length + 4;
1264 /* We have an ordinary (expanded) occurrence of the arg.
1265 So compute its expansion, if we have not already. */
1266 if (args[ap->argno].expand_length < 0)
1268 args[ap->argno].expanded = CPP_WRITTEN (pfile);
1269 cpp_expand_to_buffer (pfile,
1270 ARG_BASE + args[ap->argno].raw,
1271 args[ap->argno].raw_length);
1273 args[ap->argno].expand_length
1274 = CPP_WRITTEN (pfile) - args[ap->argno].expanded;
1277 /* Add 4 for two \r-space markers to prevent
1278 token concatenation. */
1279 xbuf_len += args[ap->argno].expand_length + 4;
1283 xbuf = (U_CHAR *) xmalloc (xbuf_len + 1);
1285 /* Generate in XBUF the complete expansion
1286 with arguments substituted in.
1287 TOTLEN is the total size generated so far.
1288 OFFSET is the index in the definition
1289 of where we are copying from. */
1290 offset = totlen = 0;
1291 for (last_ap = NULL, ap = defn->pattern; ap != NULL;
1292 last_ap = ap, ap = ap->next)
1294 register struct argdata *arg = &args[ap->argno];
1295 int count_before = totlen;
1297 /* Add chars to XBUF. */
1299 memcpy (&xbuf[totlen], &exp[offset], i);
1303 /* If followed by an empty rest arg with concatenation,
1304 delete the last run of nonwhite chars. */
1305 if (rest_zero && totlen > count_before
1306 && ((ap->rest_args && ap->raw_before)
1307 || (last_ap != NULL && last_ap->rest_args
1308 && last_ap->raw_after)))
1310 /* Delete final whitespace. */
1311 while (totlen > count_before && is_space(xbuf[totlen - 1]))
1314 /* Delete the nonwhites before them. */
1315 while (totlen > count_before && !is_space(xbuf[totlen - 1]))
1319 if (ap->stringify != 0)
1321 memcpy (xbuf + totlen, ARG_BASE + arg->stringified,
1322 arg->stringified_length);
1323 totlen += arg->stringified_length;
1325 else if (ap->raw_before || ap->raw_after || CPP_TRADITIONAL (pfile))
1327 U_CHAR *p1 = ARG_BASE + arg->raw;
1328 U_CHAR *l1 = p1 + arg->raw_length;
1331 /* Arg is concatenated before: delete leading whitespace,
1332 whitespace markers, and no-reexpansion markers. */
1335 if (is_space(p1[0]))
1337 else if (p1[0] == '\r')
1345 /* Arg is concatenated after: delete trailing whitespace,
1346 whitespace markers, and no-reexpansion markers. */
1349 if (is_space(l1[-1]))
1351 else if (l1[-1] == '\r')
1353 else if (l1[-1] == '-')
1355 if (l1 != p1 + 1 && l1[-2] == '\r')
1365 /* Delete any no-reexpansion marker that precedes
1366 an identifier at the beginning of the argument. */
1367 if (p1[0] == '\r' && p1[1] == '-')
1370 memcpy (xbuf + totlen, p1, l1 - p1);
1375 U_CHAR *expanded = ARG_BASE + arg->expanded;
1376 if (!ap->raw_before && totlen > 0 && arg->expand_length
1377 && !CPP_TRADITIONAL (pfile)
1378 && unsafe_chars (pfile, xbuf[totlen - 1], expanded[0]))
1380 xbuf[totlen++] = '\r';
1381 xbuf[totlen++] = ' ';
1384 memcpy (xbuf + totlen, expanded, arg->expand_length);
1385 totlen += arg->expand_length;
1387 if (!ap->raw_after && totlen > 0 && offset < defn->length
1388 && !CPP_TRADITIONAL (pfile)
1389 && unsafe_chars (pfile, xbuf[totlen - 1], exp[offset]))
1391 xbuf[totlen++] = '\r';
1392 xbuf[totlen++] = ' ';
1396 if (totlen > xbuf_len)
1398 cpp_ice (pfile, "buffer overrun in macroexpand");
1403 /* if there is anything left of the definition
1404 after handling the arg list, copy that in too. */
1406 for (i = offset; i < defn->length; i++)
1408 /* if we've reached the end of the macro */
1411 if (!(rest_zero && last_ap != NULL && last_ap->rest_args
1412 && last_ap->raw_after))
1413 xbuf[totlen++] = exp[i];
1421 pfile->output_escapes--;
1423 /* Now put the expansion on the input stack
1424 so our caller will commence reading from it. */
1425 push_macro_expansion (pfile, xbuf, xbuf_len, hp);
1426 CPP_BUFFER (pfile)->has_escapes = 1;
1428 /* Pop the space we've used in the token_buffer for argument expansion. */
1429 CPP_SET_WRITTEN (pfile, old_written);
1431 /* Recursive macro use sometimes works traditionally.
1432 #define foo(x,y) bar (x (y,0), y)
1435 if (!CPP_TRADITIONAL (pfile))
1436 hp->type = T_DISABLED;
1439 /* Return 1 iff a token ending in C1 followed directly by a token C2
1440 could cause mis-tokenization. */
1443 unsafe_chars (pfile, c1, c2)
1450 if (c2 == c1 || c2 == '=')
1454 case 'e': case 'E': case 'p': case 'P':
1455 if (c2 == '-' || c2 == '+')
1456 return 1; /* could extend a pre-processing number */
1460 if (CPP_OPTION (pfile, dollars_in_ident))
1465 if (c2 == '\'' || c2 == '\"')
1466 return 1; /* Could turn into L"xxx" or L'xxx'. */
1469 case '.': case '0': case '1': case '2': case '3':
1470 case '4': case '5': case '6': case '7': case '8': case '9':
1471 case '_': case 'a': case 'b': case 'c': case 'd': case 'f':
1472 case 'g': case 'h': case 'i': case 'j': case 'k': case 'l':
1473 case 'm': case 'n': case 'o': case 'q': case 'r': case 's':
1474 case 't': case 'u': case 'v': case 'w': case 'x': case 'y':
1475 case 'z': case 'A': case 'B': case 'C': case 'D': case 'F':
1476 case 'G': case 'H': case 'I': case 'J': case 'K': case 'M':
1477 case 'N': case 'O': case 'Q': case 'R': case 'S': case 'T':
1478 case 'U': case 'V': case 'W': case 'X': case 'Y': case 'Z':
1480 /* We're in the middle of either a name or a pre-processing number. */
1481 return (is_idchar(c2) || c2 == '.');
1483 case '<': case '>': case '!': case '%': case '#': case ':':
1484 case '^': case '&': case '|': case '*': case '/': case '=':
1485 return (c2 == c1 || c2 == '=');
1491 push_macro_expansion (pfile, xbuf, xbuf_len, hp)
1493 register U_CHAR *xbuf;
1497 register cpp_buffer *mbuf = cpp_push_buffer (pfile, xbuf, xbuf_len);
1500 mbuf->cleanup = macro_cleanup;
1503 /* The first chars of the expansion should be a "\r " added by
1504 collect_expansion. This is to prevent accidental token-pasting
1505 between the text preceding the macro invocation, and the macro
1508 We would like to avoid adding unneeded spaces (for the sake of
1509 tools that use cpp, such as imake). In some common cases we can
1510 tell that it is safe to omit the space.
1512 The character before the macro invocation cannot have been an
1513 idchar (or else it would have been pasted with the idchars of
1514 the macro name). Therefore, if the first non-space character
1515 of the expansion is an idchar, we do not need the extra space
1516 to prevent token pasting.
1518 Also, we don't need the extra space if the first char is '(',
1519 or some other (less common) characters. */
1521 if (xbuf[0] == '\r' && xbuf[1] == ' '
1522 && (is_idchar(xbuf[2]) || xbuf[2] == '(' || xbuf[2] == '\''
1523 || xbuf[2] == '\"'))
1526 /* Likewise, avoid the extra space at the end of the macro expansion
1527 if this is safe. We can do a better job here since we can know
1528 what the next char will be. */
1530 && mbuf->rlimit[-2] == '\r'
1531 && mbuf->rlimit[-1] == ' ')
1533 int c1 = mbuf->rlimit[-3];
1534 int c2 = CPP_BUF_PEEK (CPP_PREV_BUFFER (CPP_BUFFER (pfile)));
1535 if (c2 == EOF || !unsafe_chars (pfile, c1, c2))
1540 /* Return zero if two DEFINITIONs are isomorphic. */
1543 _cpp_compare_defs (pfile, d1, d2)
1545 DEFINITION *d1, *d2;
1547 struct reflist *a1, *a2;
1548 U_CHAR *p1 = d1->expansion;
1549 U_CHAR *p2 = d2->expansion;
1552 if (d1->nargs != d2->nargs)
1554 if (CPP_PEDANTIC (pfile)
1555 && d1->argnames && d2->argnames)
1557 U_CHAR *arg1 = d1->argnames;
1558 U_CHAR *arg2 = d2->argnames;
1563 len = strlen (arg1) + 1;
1564 if (strcmp (arg1, arg2))
1570 for (a1 = d1->pattern, a2 = d2->pattern; a1 && a2;
1571 a1 = a1->next, a2 = a2->next)
1573 if (!((a1->nchars == a2->nchars && !strncmp (p1, p2, a1->nchars))
1574 || !comp_def_part (first, p1, a1->nchars, p2, a2->nchars, 0))
1575 || a1->argno != a2->argno
1576 || a1->stringify != a2->stringify
1577 || a1->raw_before != a2->raw_before
1578 || a1->raw_after != a2->raw_after)
1587 return comp_def_part (first, p1, d1->length - (p1 - d1->expansion),
1588 p2, d2->length - (p2 - d2->expansion), 1);
1591 /* Return 1 if two parts of two macro definitions are effectively different.
1592 One of the parts starts at BEG1 and has LEN1 chars;
1593 the other has LEN2 chars at BEG2.
1594 Any sequence of whitespace matches any other sequence of whitespace.
1595 FIRST means these parts are the first of a macro definition;
1596 so ignore leading whitespace entirely.
1597 LAST means these parts are the last of a macro definition;
1598 so ignore trailing whitespace entirely. */
1601 comp_def_part (first, beg1, len1, beg2, len2, last)
1603 U_CHAR *beg1, *beg2;
1607 register U_CHAR *end1 = beg1 + len1;
1608 register U_CHAR *end2 = beg2 + len2;
1611 while (beg1 != end1 && is_space(*beg1))
1613 while (beg2 != end2 && is_space(*beg2))
1618 while (beg1 != end1 && is_space(end1[-1]))
1620 while (beg2 != end2 && is_space(end2[-1]))
1623 while (beg1 != end1 && beg2 != end2)
1625 if (is_space(*beg1) && is_space(*beg2))
1627 while (beg1 != end1 && is_space(*beg1))
1629 while (beg2 != end2 && is_space(*beg2))
1632 else if (*beg1 == *beg2)
1640 return (beg1 != end1) || (beg2 != end2);
1643 /* Dump the definition of macro MACRO on stdout. The format is suitable
1644 to be read back in again. */
1647 _cpp_dump_definition (pfile, sym, len, defn)
1653 if (pfile->lineno == 0)
1654 _cpp_output_line_command (pfile, same_file);
1656 CPP_RESERVE (pfile, len + sizeof "#define ");
1657 CPP_PUTS_Q (pfile, "#define ", sizeof "#define " -1);
1658 CPP_PUTS_Q (pfile, sym, len);
1660 if (defn->nargs == -1)
1662 CPP_PUTC_Q (pfile, ' ');
1664 /* The first and last two characters of a macro expansion are
1665 always "\r "; this needs to be trimmed out.
1666 So we need length-4 chars of space, plus one for the NUL. */
1667 CPP_RESERVE (pfile, defn->length - 4 + 1);
1668 CPP_PUTS_Q (pfile, defn->expansion + 2, defn->length - 4);
1673 unsigned char **argv = (unsigned char **) alloca (defn->nargs *
1675 int *argl = (int *) alloca (defn->nargs * sizeof(int));
1679 /* First extract the argument list. */
1681 for (i = 0; i < defn->nargs; i++)
1684 argl[i] = strlen (x);
1688 /* Now print out the argument list. */
1689 CPP_PUTC_Q (pfile, '(');
1690 for (i = 0; i < defn->nargs; i++)
1692 CPP_RESERVE (pfile, argl[i] + 2);
1693 if (!(i == defn->nargs-1 && defn->rest_args
1694 && !strcmp (argv[i], "__VA_ARGS__")))
1695 CPP_PUTS_Q (pfile, argv[i], argl[i]);
1696 if (i < defn->nargs-1)
1697 CPP_PUTS_Q (pfile, ", ", 2);
1699 if (defn->rest_args)
1700 CPP_PUTS (pfile, "...", 3);
1701 CPP_PUTS (pfile, ") ", 2);
1703 /* Now the definition. */
1704 x = defn->expansion;
1705 for (r = defn->pattern; r; r = r->next)
1708 if (*x == '\r') x += 2, i -= 2;
1709 /* i chars for macro text, plus the length of the macro
1710 argument name, plus one for a stringify marker, plus two for
1711 each concatenation marker. */
1713 i + argl[r->argno] + r->stringify
1714 + (r->raw_before + r->raw_after) * 2);
1716 if (i > 0) CPP_PUTS_Q (pfile, x, i);
1718 CPP_PUTS_Q (pfile, "##", 2);
1720 CPP_PUTC_Q (pfile, '#');
1721 CPP_PUTS_Q (pfile, argv[r->argno], argl[r->argno]);
1722 if (r->raw_after && !(r->next && r->next->nchars == 0
1723 && r->next->raw_before))
1724 CPP_PUTS_Q (pfile, "##", 2);
1729 i = defn->length - (x - defn->expansion) - 2;
1730 if (*x == '\r') x += 2, i -= 2;
1731 if (i > 0) CPP_PUTS (pfile, x, i);
1733 if (pfile->lineno == 0)
1734 CPP_PUTC (pfile, '\n');
1735 CPP_NUL_TERMINATE (pfile);
1738 /* Dump out the hash table. */
1740 dump_hash_helper (h, p)
1744 HASHNODE *hp = (HASHNODE *)*h;
1745 cpp_reader *pfile = (cpp_reader *)p;
1747 if (hp->type == T_MACRO)
1749 _cpp_dump_definition (pfile, hp->name, hp->length, hp->value.defn);
1750 CPP_PUTC (pfile, '\n');
1756 _cpp_dump_macro_hash (pfile)
1759 htab_traverse (pfile->hashtab, dump_hash_helper, pfile);