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 hashf PARAMS ((const U_CHAR *, int));
34 static int comp_def_part PARAMS ((int, U_CHAR *, int, U_CHAR *,
36 static void push_macro_expansion PARAMS ((cpp_reader *,
37 U_CHAR *, int, HASHNODE *));
38 static int unsafe_chars PARAMS ((int, int));
39 static int macro_cleanup PARAMS ((cpp_buffer *, cpp_reader *));
40 static enum cpp_token macarg PARAMS ((cpp_reader *, int));
41 static struct tm *timestamp PARAMS ((cpp_reader *));
42 static void special_symbol PARAMS ((HASHNODE *, cpp_reader *));
44 #define CPP_IS_MACRO_BUFFER(PBUF) ((PBUF)->data != NULL)
45 #define FORWARD(N) CPP_FORWARD (CPP_BUFFER (pfile), (N))
46 #define PEEKC() CPP_BUF_PEEK (CPP_BUFFER (pfile))
48 /* The arglist structure is built by create_definition to tell
49 collect_expansion where the argument names begin. That
50 is, for a define like "#define f(x,y,z) foo+x-bar*y", the arglist
51 would contain pointers to the strings x, y, and z.
52 collect_expansion would then build a DEFINITION node,
53 with reflist nodes pointing to the places x, y, and z had
54 appeared. So the arglist is just convenience data passed
55 between these two routines. It is not kept around after
56 the current #define has been processed and entered into the
74 static DEFINITION *collect_expansion PARAMS ((cpp_reader *, struct arglist *));
75 static struct arglist *collect_formal_parameters PARAMS ((cpp_reader *));
77 /* This structure represents one parsed argument in a macro call.
78 `raw' points to the argument text as written (`raw_length' is its length).
79 `expanded' points to the argument's macro-expansion
80 (its length is `expand_length').
81 `stringified_length' is the length the argument would have
84 /* raw and expanded are relative to ARG_BASE */
85 #define ARG_BASE ((pfile)->token_buffer)
89 /* Strings relative to pfile->token_buffer */
90 long raw, expanded, stringified;
91 int raw_length, expand_length;
92 int stringified_length;
96 /* Calculate hash function on a string. */
100 register const U_CHAR *s;
103 unsigned int n = len;
107 r = r * 67 + (*s++ - 113);
112 /* Find the most recent hash node for name "name" (ending with first
113 non-identifier char) installed by cpp_install
115 If LEN is >= 0, it is the length of the name.
116 Otherwise, compute the length by scanning the entire name. */
119 cpp_lookup (pfile, name, len)
124 register const U_CHAR *bp;
125 register HASHNODE *bucket;
126 register unsigned int hash;
130 for (bp = name; is_idchar (*bp); bp++);
134 hash = hashf (name, len) % HASHSIZE;
136 bucket = pfile->hashtab[hash];
139 if (bucket->length == len && strncmp (bucket->name, name, len) == 0)
141 bucket = bucket->next;
143 return (HASHNODE *) 0;
146 /* Free a DEFINITION structure. Used by delete_macro, and by
147 do_define when redefining macros. */
153 struct reflist *ap, *nextap;
155 for (ap = d->pattern; ap != NULL; ap = nextap)
166 * Delete a hash node. Some weirdness to free junk from macros.
167 * More such weirdness will have to be added if you define more hash
168 * types that need it.
175 if (hp->prev != NULL)
176 hp->prev->next = hp->next;
177 if (hp->next != NULL)
178 hp->next->prev = hp->prev;
180 /* make sure that the bucket chain header that
181 the deleted guy was on points to the right thing afterwards. */
182 if (hp == *hp->bucket_hdr)
183 *hp->bucket_hdr = hp->next;
185 if (hp->type == T_MACRO)
186 free_definition (hp->value.defn);
191 /* Install a name in the main hash table, even if it is already there.
192 Name stops with first non alphanumeric, except leading '#'.
193 Caller must check against redefinition if that is desired.
194 delete_macro () removes things installed by cpp_install () in fifo order.
195 this is important because of the `defined' special symbol used
196 in #if, and also if pushdef/popdef directives are ever implemented.
198 If LEN is >= 0, it is the length of the name.
199 Otherwise, compute the length by scanning the entire name.
201 If HASH is >= 0, it is the precomputed hash code.
202 Otherwise, compute the hash code. */
205 cpp_install (pfile, name, len, type, value)
212 register HASHNODE *hp;
213 register int i, bucket;
214 register const U_CHAR *p;
220 while (is_idchar(*p))
225 hash = hashf (name, len) % HASHSIZE;
227 i = sizeof (HASHNODE) + len + 1;
228 hp = (HASHNODE *) xmalloc (i);
230 hp->bucket_hdr = &pfile->hashtab[bucket];
231 hp->next = pfile->hashtab[bucket];
232 pfile->hashtab[bucket] = hp;
234 if (hp->next != NULL)
238 hp->value.cpval = value;
239 hp->name = ((U_CHAR *) hp) + sizeof (HASHNODE);
240 bcopy (name, hp->name, len);
246 macro_cleanup (pbuf, pfile)
248 cpp_reader *pfile ATTRIBUTE_UNUSED;
250 HASHNODE *macro = (HASHNODE *) pbuf->data;
251 if (macro->type == T_DISABLED)
252 macro->type = T_MACRO;
253 if (macro->type != T_MACRO || pbuf->buf != macro->value.defn->expansion)
259 /* Read a replacement list for a macro, and build the DEFINITION
260 structure. ARGLIST specifies the formal parameters to look for in
261 the text of the definition. If ARGLIST is null, this is an
262 object-like macro; if it points to an empty arglist, this is a
263 function-like macro with no arguments.
265 A good half of this is devoted to supporting -traditional.
269 collect_expansion (pfile, arglist)
271 struct arglist *arglist;
274 struct reflist *pat = 0, *endpat = 0;
275 enum cpp_token token;
276 long start, here, last;
282 enum { START = 0, NORM, ARG, STRIZE, PASTE } last_token = START;
286 argv = arglist->argv;
287 argc = arglist->argc;
295 last = start = CPP_WRITTEN (pfile);
296 last -= 2; /* two extra chars for the leading escape */
299 /* We use cpp_get_token because get_directive_token would
300 discard whitespace and we can't cope with that yet. Macro
301 expansion is off, so we are guaranteed not to see POP or EOF. */
303 while (PEEKC () == '\r')
306 CPP_BUMP_LINE (pfile);
308 if (PEEKC () == '\n')
310 here = CPP_WRITTEN (pfile);
311 token = cpp_get_token (pfile);
312 tok = pfile->token_buffer + here;
318 cpp_ice (pfile, "EOF or VSPACE in collect_expansion");
322 if (last_token == STRIZE || last_token == PASTE
323 || last_token == START)
324 CPP_SET_WRITTEN (pfile, here);
328 if (last_token == PASTE)
329 /* Not really a stringifier. */
332 CPP_SET_WRITTEN (pfile, here); /* delete from replacement text */
336 /* If the last token was an argument, discard this token and
337 any hspace between it and the argument's position. Then
338 mark the arg raw_after. */
339 if (last_token == ARG)
341 endpat->raw_after = 1;
343 CPP_SET_WRITTEN (pfile, last);
346 else if (last_token == PASTE)
347 /* ## ## - the second ## is ordinary. */
350 /* Discard the token and any hspace before it. */
351 while (is_hspace (pfile->token_buffer[here-1]))
353 CPP_SET_WRITTEN (pfile, here);
355 if (last_token == STRIZE)
356 /* Oops - that wasn't a stringify operator. */
357 CPP_PUTC (pfile, '#');
362 /* We must be in -traditional mode. Pretend this was a
363 token paste, but only if there was no leading or
365 CPP_SET_WRITTEN (pfile, here);
366 if (is_hspace (pfile->token_buffer[here-1]))
368 if (is_hspace (PEEKC ()))
370 if (last_token == ARG)
371 endpat->raw_after = 1;
377 if (last_token == STRIZE)
378 cpp_error (pfile, "`#' is not followed by a macro argument name");
380 if (CPP_TRADITIONAL (pfile) || CPP_OPTIONS (pfile)->warn_stringify)
381 goto maybe_trad_stringify;
386 for (i = 0; i < argc; i++)
387 if (!strncmp (tok, argv[i].name, argv[i].len)
388 && ! is_idchar (tok[argv[i].len]))
394 if (last_token == STRIZE)
395 cpp_error (pfile, "`#' is not followed by a macro argument name");
403 struct reflist *tpat;
405 /* Make a pat node for this arg and add it to the pat list */
406 tpat = (struct reflist *) xmalloc (sizeof (struct reflist));
408 tpat->raw_before = (last_token == PASTE);
410 tpat->stringify = (last_token == STRIZE);
411 tpat->rest_args = argv[i].rest_arg;
413 tpat->nchars = here - last;
422 CPP_SET_WRITTEN (pfile, here); /* discard arg name */
426 maybe_trad_stringify:
428 U_CHAR *base, *p, *limit;
429 struct reflist *tpat;
431 base = p = pfile->token_buffer + here;
432 limit = CPP_PWRITTEN (pfile);
438 for (i = 0; i < argc; i++)
439 if (!strncmp (tok, argv[i].name, argv[i].len)
440 && ! is_idchar (tok[argv[i].len]))
445 if (!CPP_TRADITIONAL (pfile))
447 /* Must have got here because of -Wtraditional. */
449 "macro argument `%.*s' would be stringified with -traditional",
450 (int) argv[i].len, argv[i].name);
453 if (CPP_OPTIONS (pfile)->warn_stringify)
454 cpp_warning (pfile, "macro argument `%.*s' is stringified",
455 (int) argv[i].len, argv[i].name);
457 /* Remove the argument from the string. */
458 memmove (p, p + argv[i].len, limit - (p + argv[i].len));
459 limit -= argv[i].len;
461 /* Make a pat node for this arg and add it to the pat list */
462 tpat = (struct reflist *) xmalloc (sizeof (struct reflist));
465 /* Don't attempt to paste this with anything. */
466 tpat->raw_before = 0;
469 tpat->rest_args = argv[i].rest_arg;
471 tpat->nchars = (p - base) + here - last;
478 last = (p - base) + here;
480 CPP_ADJUST_WRITTEN (pfile, CPP_PWRITTEN (pfile) - limit);
485 if (last_token == STRIZE)
486 cpp_error (pfile, "`#' is not followed by a macro argument name");
487 else if (last_token == PASTE)
488 cpp_error (pfile, "`##' at end of macro definition");
490 CPP_NUL_TERMINATE (pfile);
491 len = CPP_WRITTEN (pfile) - start + 1;
492 exp = xmalloc (len + 4); /* space for no-concat markers at either end */
498 memcpy (&exp[2], pfile->token_buffer + start, len - 1);
499 CPP_SET_WRITTEN (pfile, start);
501 defn = (DEFINITION *) xmalloc (sizeof (DEFINITION));
502 defn->length = len + 3;
503 defn->expansion = exp;
509 defn->argnames = arglist->namebuf;
512 defn->rest_args = argv[argc - 1].rest_arg;
526 static struct arglist *
527 collect_formal_parameters (pfile)
530 struct arglist *result = 0;
531 struct arg *argv = 0;
532 U_CHAR *namebuf = xstrdup ("");
539 enum cpp_token token;
542 old_written = CPP_WRITTEN (pfile);
543 token = get_directive_token (pfile);
544 if (token != CPP_LPAREN)
546 cpp_ice (pfile, "first token = %d not %d in collect_formal_parameters",
551 argv = (struct arg *) xmalloc (sizeof (struct arg));
553 argv[argc].rest_arg = 0;
556 CPP_SET_WRITTEN (pfile, old_written);
557 token = get_directive_token (pfile);
561 tok = pfile->token_buffer + old_written;
562 len = CPP_PWRITTEN (pfile) - tok;
564 && (name = strstr (namebuf, tok))
566 && (name == namebuf || name[-1] == ','))
568 cpp_error (pfile, "duplicate macro argument name `%s'", tok);
571 namebuf = xrealloc (namebuf, argslen + len + 1);
572 name = &namebuf[argslen - 1];
575 memcpy (name, tok, len);
578 argv[argc].len = len;
579 argv[argc].rest_arg = 0;
584 argv = xrealloc (argv, (argc + 1)*sizeof(struct arg));
595 cpp_error (pfile, "missing right paren in macro argument list");
599 cpp_error (pfile, "syntax error in #define");
605 /* There are two possible styles for a vararg macro:
606 the C99 way: #define foo(a, ...) a, __VA_ARGS__
607 the gnu way: #define foo(a, b...) a, b
608 The C99 way can be considered a special case of the gnu way.
609 There are also some constraints to worry about, but we'll handle
611 if (argv[argc].len == 0)
613 if (CPP_PEDANTIC (pfile) && ! CPP_OPTIONS (pfile)->c99)
614 cpp_pedwarn (pfile, "C89 does not permit varargs macros");
616 len = sizeof "__VA_ARGS__" - 1;
617 namebuf = xrealloc (namebuf, argslen + len + 1);
618 name = &namebuf[argslen - 1];
620 memcpy (name, "__VA_ARGS__", len);
623 argv[argc].len = len;
626 if (CPP_PEDANTIC (pfile))
627 cpp_pedwarn (pfile, "ISO C does not permit named varargs macros");
629 argv[argc].rest_arg = 1;
630 namebuf = xrealloc (namebuf, argslen + 3);
631 memcpy (&namebuf[argslen - 1], "...", 4);
634 token = get_directive_token (pfile);
635 if (token != CPP_RPAREN)
637 cpp_error (pfile, "another parameter follows `...'");
642 /* Go through argv and fix up the pointers. */
644 for (i = 0; i <= argc; i++)
646 argv[i].name = namebuf + len;
647 len += argv[i].len + 1;
650 CPP_SET_WRITTEN (pfile, old_written);
652 result = (struct arglist *) xmalloc (sizeof (struct arglist));
653 if (namebuf[0] != '\0')
655 result->namebuf = namebuf;
656 result->argc = argc + 1;
677 /* Create a DEFINITION node for a macro. The reader's point is just
678 after the macro name. If FUNLIKE is true, this is a function-like
682 create_definition (pfile, funlike)
686 struct arglist *args = 0;
691 cpp_buf_line_and_col (CPP_BUFFER (pfile), &line, &col);
692 file = CPP_BUFFER (pfile)->nominal_fname;
694 pfile->no_macro_expand++;
695 pfile->parsing_define_directive++;
696 CPP_OPTIONS (pfile)->discard_comments++;
700 args = collect_formal_parameters (pfile);
705 defn = collect_expansion (pfile, args);
713 pfile->no_macro_expand--;
714 pfile->parsing_define_directive--;
715 CPP_OPTIONS (pfile)->discard_comments--;
719 pfile->no_macro_expand--;
720 pfile->parsing_define_directive--;
721 CPP_OPTIONS (pfile)->discard_comments--;
726 * Parse a macro argument and append the info on PFILE's token_buffer.
727 * REST_ARGS means to absorb the rest of the args.
728 * Return nonzero to indicate a syntax error.
731 static enum cpp_token
732 macarg (pfile, rest_args)
737 enum cpp_token token;
739 /* Try to parse as much of the argument as exists at this
740 input stack level. */
743 token = cpp_get_token (pfile);
749 /* If we've hit end of file, it's an error (reported by caller).
750 Ditto if it's the end of cpp_expand_to_buffer text.
751 If we've hit end of macro, just continue. */
752 if (!CPP_IS_MACRO_BUFFER (CPP_BUFFER (pfile)))
763 /* if we've returned to lowest level and
764 we aren't absorbing all args */
765 if (paren == 0 && rest_args == 0)
769 /* Remove ',' or ')' from argument buffer. */
770 CPP_ADJUST_WRITTEN (pfile, -1);
784 time_t t = time ((time_t *) 0);
785 pfile->timebuf = localtime (&t);
787 return pfile->timebuf;
790 static const char * const monthnames[] =
792 "Jan", "Feb", "Mar", "Apr", "May", "Jun",
793 "Jul", "Aug", "Sep", "Oct", "Nov", "Dec",
797 * expand things like __FILE__. Place the expansion into the output
798 * buffer *without* rescanning.
802 special_symbol (hp, pfile)
815 ip = CPP_BUFFER (pfile);
816 if (hp->type == T_BASE_FILE)
818 while (CPP_PREV_BUFFER (ip) != CPP_NULL_BUFFER (pfile))
819 ip = CPP_PREV_BUFFER (ip);
823 ip = CPP_BUFFER (pfile);
824 while (!ip->nominal_fname && ip != CPP_NULL_BUFFER (pfile))
825 ip = CPP_PREV_BUFFER (ip);
828 buf = ip->nominal_fname;
832 CPP_RESERVE (pfile, 3 + 4 * strlen (buf));
833 quote_string (pfile, buf);
837 case T_INCLUDE_LEVEL:
839 int true_indepth = 0;
840 ip = CPP_BUFFER (pfile);
841 for (; ip != CPP_NULL_BUFFER (pfile); ip = CPP_PREV_BUFFER (ip))
842 if (ip->fname != NULL)
845 CPP_RESERVE (pfile, 10);
846 sprintf (CPP_PWRITTEN (pfile), "%d", true_indepth);
847 CPP_ADJUST_WRITTEN (pfile, strlen (CPP_PWRITTEN (pfile)));
852 len = strlen (version_string);
853 CPP_RESERVE (pfile, 3 + len);
854 CPP_PUTC_Q (pfile, '"');
855 CPP_PUTS_Q (pfile, version_string, len);
856 CPP_PUTC_Q (pfile, '"');
857 CPP_NUL_TERMINATE_Q (pfile);
861 buf = hp->value.cpval;
868 CPP_RESERVE (pfile, len + 1);
869 CPP_PUTS_Q (pfile, buf, len);
870 CPP_NUL_TERMINATE_Q (pfile);
874 CPP_RESERVE (pfile, 2);
875 #ifdef STDC_0_IN_SYSTEM_HEADERS
876 ip = CPP_BUFFER (pfile);
877 while (!ip->nominal_fname && ip != CPP_NULL_BUFFER (pfile))
878 ip = CPP_PREV_BUFFER (ip);
879 if (ip->system_header_p
880 && !cpp_lookup (pfile, (U_CHAR *) "__STRICT_ANSI__", 15))
881 CPP_PUTC_Q (pfile, '0');
884 CPP_PUTC_Q (pfile, '1');
885 CPP_NUL_TERMINATE_Q (pfile);
891 cpp_buf_line_and_col (cpp_file_buffer (pfile), &line, NULL);
893 CPP_RESERVE (pfile, 10);
894 sprintf (CPP_PWRITTEN (pfile), "%ld", line);
895 CPP_ADJUST_WRITTEN (pfile, strlen (CPP_PWRITTEN (pfile)));
904 CPP_RESERVE (pfile, 20);
905 timebuf = timestamp (pfile);
906 if (hp->type == T_DATE)
907 sprintf (CPP_PWRITTEN (pfile), "\"%s %2d %4d\"",
908 monthnames[timebuf->tm_mon],
909 timebuf->tm_mday, timebuf->tm_year + 1900);
911 sprintf (CPP_PWRITTEN (pfile), "\"%02d:%02d:%02d\"",
912 timebuf->tm_hour, timebuf->tm_min, timebuf->tm_sec);
914 CPP_ADJUST_WRITTEN (pfile, strlen (CPP_PWRITTEN (pfile)));
919 cpp_error (pfile, "attempt to use poisoned `%s'.", hp->name);
920 CPP_RESERVE (pfile, 1);
921 CPP_PUTC_Q (pfile, '0');
922 CPP_NUL_TERMINATE_Q (pfile);
926 cpp_ice (pfile, "invalid special hash type");
931 /* Expand a macro call.
932 HP points to the symbol that is the macro being called.
933 Put the result of expansion onto the input stack
934 so that subsequent input by our caller will use it.
936 If macro wants arguments, caller has already verified that
937 an argument list follows; arguments come from the input stack. */
940 macroexpand (pfile, hp)
946 register U_CHAR *xbuf;
947 long start_line, start_column;
949 struct argdata *args = 0;
950 long old_written = CPP_WRITTEN (pfile);
951 int rest_args, rest_zero = 0;
954 cpp_buf_line_and_col (cpp_file_buffer (pfile), &start_line, &start_column);
956 /* Check for and handle special symbols. */
957 if (hp->type != T_MACRO)
959 special_symbol (hp, pfile);
960 xbuf_len = CPP_WRITTEN (pfile) - old_written;
961 xbuf = (U_CHAR *) xmalloc (xbuf_len + 1);
962 CPP_SET_WRITTEN (pfile, old_written);
963 memcpy (xbuf, CPP_PWRITTEN (pfile), xbuf_len + 1);
964 push_macro_expansion (pfile, xbuf, xbuf_len, hp);
965 CPP_BUFFER (pfile)->has_escapes = 1;
969 defn = hp->value.defn;
971 pfile->output_escapes++;
975 enum cpp_token token;
977 args = (struct argdata *) alloca ((nargs + 1) * sizeof (struct argdata));
979 for (i = 0; i < nargs; i++)
981 args[i].raw = args[i].expanded = 0;
982 args[i].raw_length = 0;
983 args[i].expand_length = args[i].stringified_length = -1;
986 /* Parse all the macro args that are supplied. I counts them.
987 The first NARGS args are stored in ARGS.
988 The rest are discarded. If rest_args is set then we assume
989 macarg absorbed the rest of the args. */
993 /* Skip over the opening parenthesis. */
994 CPP_OPTIONS (pfile)->discard_comments++;
995 CPP_OPTIONS (pfile)->no_line_commands++;
996 pfile->no_macro_expand++;
997 pfile->no_directives++;
999 token = cpp_get_non_space_token (pfile);
1000 if (token != CPP_LPAREN)
1001 cpp_ice (pfile, "macroexpand: unexpected token %d (wanted LPAREN)",
1003 CPP_ADJUST_WRITTEN (pfile, -1);
1010 if (i < nargs || (nargs == 0 && i == 0))
1012 /* if we are working on last arg which absorbs rest of args... */
1013 if (i == nargs - 1 && defn->rest_args)
1015 args[i].raw = CPP_WRITTEN (pfile);
1016 token = macarg (pfile, rest_args);
1017 args[i].raw_length = CPP_WRITTEN (pfile) - args[i].raw;
1020 token = macarg (pfile, 0);
1021 if (token == CPP_EOF || token == CPP_POP)
1022 cpp_error_with_line (pfile, start_line, start_column,
1023 "unterminated macro call");
1026 while (token == CPP_COMMA);
1027 CPP_OPTIONS (pfile)->discard_comments--;
1028 CPP_OPTIONS (pfile)->no_line_commands--;
1029 pfile->no_macro_expand--;
1030 pfile->no_directives--;
1031 if (token != CPP_RPAREN)
1034 /* If we got one arg but it was just whitespace, call that 0 args. */
1037 register U_CHAR *bp = ARG_BASE + args[0].raw;
1038 register U_CHAR *lim = bp + args[0].raw_length;
1039 /* cpp.texi says for foo ( ) we provide one argument.
1040 However, if foo wants just 0 arguments, treat this as 0. */
1042 while (bp != lim && is_space(*bp))
1048 /* Don't output an error message if we have already output one for
1049 a parse error above. */
1051 if (nargs == 0 && i > 0)
1053 cpp_error (pfile, "arguments given to macro `%s'", hp->name);
1057 /* traditional C allows foo() if foo wants one argument. */
1058 if (nargs == 1 && i == 0 && CPP_TRADITIONAL (pfile))
1060 /* the rest args token is allowed to absorb 0 tokens */
1061 else if (i == nargs - 1 && defn->rest_args)
1064 cpp_error (pfile, "macro `%s' used without args", hp->name);
1066 cpp_error (pfile, "macro `%s' used with just one arg", hp->name);
1068 cpp_error (pfile, "macro `%s' used with only %d args",
1074 "macro `%s' used with too many (%d) args", hp->name, i);
1078 /* If macro wants zero args, we parsed the arglist for checking only.
1079 Read directly from the macro definition. */
1082 xbuf = defn->expansion;
1083 xbuf_len = defn->length;
1087 register U_CHAR *exp = defn->expansion;
1088 register int offset; /* offset in expansion,
1089 copied a piece at a time */
1090 register int totlen; /* total amount of exp buffer filled so far */
1092 register struct reflist *ap, *last_ap;
1094 /* Macro really takes args. Compute the expansion of this call. */
1096 /* Compute length in characters of the macro's expansion.
1097 Also count number of times each arg is used. */
1098 xbuf_len = defn->length;
1099 for (ap = defn->pattern; ap != NULL; ap = ap->next)
1103 register struct argdata *arg = &args[ap->argno];
1104 /* Stringify if it hasn't already been */
1105 if (arg->stringified_length < 0)
1107 int arglen = arg->raw_length;
1111 /* Initially need_space is -1. Otherwise, 1 means the
1112 previous character was a space, but we suppressed it;
1113 0 means the previous character was a non-space. */
1114 int need_space = -1;
1116 arg->stringified = CPP_WRITTEN (pfile);
1117 if (!CPP_TRADITIONAL (pfile))
1118 CPP_PUTC (pfile, '\"'); /* insert beginning quote */
1119 for (; i < arglen; i++)
1121 c = (ARG_BASE + arg->raw)[i];
1125 /* Delete "\r " and "\r-" escapes. */
1131 /* Internal sequences of whitespace are
1132 replaced by one space except within
1133 a string or char token. */
1134 else if (is_space(c))
1136 if (need_space == 0)
1140 else if (need_space > 0)
1141 CPP_PUTC (pfile, ' ');
1156 else if (c == '\"' || c == '\'')
1160 /* Escape these chars */
1161 if (c == '\"' || (in_string && c == '\\'))
1162 CPP_PUTC (pfile, '\\');
1164 CPP_PUTC (pfile, c);
1167 CPP_RESERVE (pfile, 4);
1168 sprintf ((char *) CPP_PWRITTEN (pfile), "\\%03o",
1170 CPP_ADJUST_WRITTEN (pfile, 4);
1173 if (!CPP_TRADITIONAL (pfile))
1174 CPP_PUTC (pfile, '\"'); /* insert ending quote */
1175 arg->stringified_length
1176 = CPP_WRITTEN (pfile) - arg->stringified;
1178 xbuf_len += args[ap->argno].stringified_length;
1180 else if (ap->raw_before || ap->raw_after || CPP_TRADITIONAL (pfile))
1181 /* Add 4 for two \r-space markers to prevent
1182 token concatenation. */
1183 xbuf_len += args[ap->argno].raw_length + 4;
1186 /* We have an ordinary (expanded) occurrence of the arg.
1187 So compute its expansion, if we have not already. */
1188 if (args[ap->argno].expand_length < 0)
1190 args[ap->argno].expanded = CPP_WRITTEN (pfile);
1191 cpp_expand_to_buffer (pfile,
1192 ARG_BASE + args[ap->argno].raw,
1193 args[ap->argno].raw_length);
1195 args[ap->argno].expand_length
1196 = CPP_WRITTEN (pfile) - args[ap->argno].expanded;
1199 /* Add 4 for two \r-space markers to prevent
1200 token concatenation. */
1201 xbuf_len += args[ap->argno].expand_length + 4;
1205 xbuf = (U_CHAR *) xmalloc (xbuf_len + 1);
1207 /* Generate in XBUF the complete expansion
1208 with arguments substituted in.
1209 TOTLEN is the total size generated so far.
1210 OFFSET is the index in the definition
1211 of where we are copying from. */
1212 offset = totlen = 0;
1213 for (last_ap = NULL, ap = defn->pattern; ap != NULL;
1214 last_ap = ap, ap = ap->next)
1216 register struct argdata *arg = &args[ap->argno];
1217 int count_before = totlen;
1219 /* Add chars to XBUF. */
1221 memcpy (&xbuf[totlen], &exp[offset], i);
1225 /* If followed by an empty rest arg with concatenation,
1226 delete the last run of nonwhite chars. */
1227 if (rest_zero && totlen > count_before
1228 && ((ap->rest_args && ap->raw_before)
1229 || (last_ap != NULL && last_ap->rest_args
1230 && last_ap->raw_after)))
1232 /* Delete final whitespace. */
1233 while (totlen > count_before && is_space(xbuf[totlen - 1]))
1236 /* Delete the nonwhites before them. */
1237 while (totlen > count_before && !is_space(xbuf[totlen - 1]))
1241 if (ap->stringify != 0)
1243 memcpy (xbuf + totlen, ARG_BASE + arg->stringified,
1244 arg->stringified_length);
1245 totlen += arg->stringified_length;
1247 else if (ap->raw_before || ap->raw_after || CPP_TRADITIONAL (pfile))
1249 U_CHAR *p1 = ARG_BASE + arg->raw;
1250 U_CHAR *l1 = p1 + arg->raw_length;
1253 /* Arg is concatenated before: delete leading whitespace,
1254 whitespace markers, and no-reexpansion markers. */
1257 if (is_space(p1[0]))
1259 else if (p1[0] == '\r')
1267 /* Arg is concatenated after: delete trailing whitespace,
1268 whitespace markers, and no-reexpansion markers. */
1271 if (is_space(l1[-1]))
1273 else if (l1[-1] == '\r')
1275 else if (l1[-1] == '-')
1277 if (l1 != p1 + 1 && l1[-2] == '\r')
1287 /* Delete any no-reexpansion marker that precedes
1288 an identifier at the beginning of the argument. */
1289 if (p1[0] == '\r' && p1[1] == '-')
1292 memcpy (xbuf + totlen, p1, l1 - p1);
1297 U_CHAR *expanded = ARG_BASE + arg->expanded;
1298 if (!ap->raw_before && totlen > 0 && arg->expand_length
1299 && !CPP_TRADITIONAL (pfile)
1300 && unsafe_chars (xbuf[totlen - 1], expanded[0]))
1302 xbuf[totlen++] = '\r';
1303 xbuf[totlen++] = ' ';
1306 memcpy (xbuf + totlen, expanded, arg->expand_length);
1307 totlen += arg->expand_length;
1309 if (!ap->raw_after && totlen > 0 && offset < defn->length
1310 && !CPP_TRADITIONAL (pfile)
1311 && unsafe_chars (xbuf[totlen - 1], exp[offset]))
1313 xbuf[totlen++] = '\r';
1314 xbuf[totlen++] = ' ';
1318 if (totlen > xbuf_len)
1320 cpp_ice (pfile, "buffer overrun in macroexpand");
1325 /* if there is anything left of the definition
1326 after handling the arg list, copy that in too. */
1328 for (i = offset; i < defn->length; i++)
1330 /* if we've reached the end of the macro */
1333 if (!(rest_zero && last_ap != NULL && last_ap->rest_args
1334 && last_ap->raw_after))
1335 xbuf[totlen++] = exp[i];
1343 pfile->output_escapes--;
1345 /* Now put the expansion on the input stack
1346 so our caller will commence reading from it. */
1347 push_macro_expansion (pfile, xbuf, xbuf_len, hp);
1348 CPP_BUFFER (pfile)->has_escapes = 1;
1350 /* Pop the space we've used in the token_buffer for argument expansion. */
1351 CPP_SET_WRITTEN (pfile, old_written);
1353 /* Recursive macro use sometimes works traditionally.
1354 #define foo(x,y) bar (x (y,0), y)
1357 if (!CPP_TRADITIONAL (pfile))
1358 hp->type = T_DISABLED;
1361 /* Return 1 iff a token ending in C1 followed directly by a token C2
1362 could cause mis-tokenization. */
1365 unsafe_chars (c1, c2)
1371 if (c2 == c1 || c2 == '=')
1375 case 'e': case 'E': case 'p': case 'P':
1376 if (c2 == '-' || c2 == '+')
1377 return 1; /* could extend a pre-processing number */
1381 if (c2 == '\'' || c2 == '\"')
1382 return 1; /* Could turn into L"xxx" or L'xxx'. */
1385 case '.': case '0': case '1': case '2': case '3':
1386 case '4': case '5': case '6': case '7': case '8': case '9':
1387 case '_': case 'a': case 'b': case 'c': case 'd': case 'f':
1388 case 'g': case 'h': case 'i': case 'j': case 'k': case 'l':
1389 case 'm': case 'n': case 'o': case 'q': case 'r': case 's':
1390 case 't': case 'u': case 'v': case 'w': case 'x': case 'y':
1391 case 'z': case 'A': case 'B': case 'C': case 'D': case 'F':
1392 case 'G': case 'H': case 'I': case 'J': case 'K': case 'M':
1393 case 'N': case 'O': case 'Q': case 'R': case 'S': case 'T':
1394 case 'U': case 'V': case 'W': case 'X': case 'Y': case 'Z':
1396 /* We're in the middle of either a name or a pre-processing number. */
1397 return (is_idchar(c2) || c2 == '.');
1399 case '<': case '>': case '!': case '%': case '#': case ':':
1400 case '^': case '&': case '|': case '*': case '/': case '=':
1401 return (c2 == c1 || c2 == '=');
1407 push_macro_expansion (pfile, xbuf, xbuf_len, hp)
1409 register U_CHAR *xbuf;
1413 register cpp_buffer *mbuf = cpp_push_buffer (pfile, xbuf, xbuf_len);
1416 mbuf->cleanup = macro_cleanup;
1419 /* The first chars of the expansion should be a "\r " added by
1420 collect_expansion. This is to prevent accidental token-pasting
1421 between the text preceding the macro invocation, and the macro
1424 We would like to avoid adding unneeded spaces (for the sake of
1425 tools that use cpp, such as imake). In some common cases we can
1426 tell that it is safe to omit the space.
1428 The character before the macro invocation cannot have been an
1429 idchar (or else it would have been pasted with the idchars of
1430 the macro name). Therefore, if the first non-space character
1431 of the expansion is an idchar, we do not need the extra space
1432 to prevent token pasting.
1434 Also, we don't need the extra space if the first char is '(',
1435 or some other (less common) characters. */
1437 if (xbuf[0] == '\r' && xbuf[1] == ' '
1438 && (is_idchar(xbuf[2]) || xbuf[2] == '(' || xbuf[2] == '\''
1439 || xbuf[2] == '\"'))
1442 /* Likewise, avoid the extra space at the end of the macro expansion
1443 if this is safe. We can do a better job here since we can know
1444 what the next char will be. */
1446 && mbuf->rlimit[-2] == '\r'
1447 && mbuf->rlimit[-1] == ' ')
1449 int c1 = mbuf->rlimit[-3];
1450 int c2 = CPP_BUF_PEEK (CPP_PREV_BUFFER (CPP_BUFFER (pfile)));
1451 if (c2 == EOF || !unsafe_chars (c1, c2))
1456 /* Return zero if two DEFINITIONs are isomorphic. */
1459 compare_defs (pfile, d1, d2)
1461 DEFINITION *d1, *d2;
1463 register struct reflist *a1, *a2;
1464 register U_CHAR *p1 = d1->expansion;
1465 register U_CHAR *p2 = d2->expansion;
1468 if (d1->nargs != d2->nargs)
1470 if (CPP_PEDANTIC (pfile)
1471 && d1->argnames && d2->argnames
1472 && strcmp ((char *) d1->argnames, (char *) d2->argnames))
1474 for (a1 = d1->pattern, a2 = d2->pattern; a1 && a2;
1475 a1 = a1->next, a2 = a2->next)
1477 if (!((a1->nchars == a2->nchars && !strncmp (p1, p2, a1->nchars))
1478 || !comp_def_part (first, p1, a1->nchars, p2, a2->nchars, 0))
1479 || a1->argno != a2->argno
1480 || a1->stringify != a2->stringify
1481 || a1->raw_before != a2->raw_before
1482 || a1->raw_after != a2->raw_after)
1491 return comp_def_part (first, p1, d1->length - (p1 - d1->expansion),
1492 p2, d2->length - (p2 - d2->expansion), 1);
1495 /* Return 1 if two parts of two macro definitions are effectively different.
1496 One of the parts starts at BEG1 and has LEN1 chars;
1497 the other has LEN2 chars at BEG2.
1498 Any sequence of whitespace matches any other sequence of whitespace.
1499 FIRST means these parts are the first of a macro definition;
1500 so ignore leading whitespace entirely.
1501 LAST means these parts are the last of a macro definition;
1502 so ignore trailing whitespace entirely. */
1505 comp_def_part (first, beg1, len1, beg2, len2, last)
1507 U_CHAR *beg1, *beg2;
1511 register U_CHAR *end1 = beg1 + len1;
1512 register U_CHAR *end2 = beg2 + len2;
1515 while (beg1 != end1 && is_space(*beg1))
1517 while (beg2 != end2 && is_space(*beg2))
1522 while (beg1 != end1 && is_space(end1[-1]))
1524 while (beg2 != end2 && is_space(end2[-1]))
1527 while (beg1 != end1 && beg2 != end2)
1529 if (is_space(*beg1) && is_space(*beg2))
1531 while (beg1 != end1 && is_space(*beg1))
1533 while (beg2 != end2 && is_space(*beg2))
1536 else if (*beg1 == *beg2)
1544 return (beg1 != end1) || (beg2 != end2);
1547 /* Dump the definition of macro MACRO on stdout. The format is suitable
1548 to be read back in again. */
1551 dump_definition (pfile, sym, len, defn)
1557 CPP_RESERVE (pfile, len + sizeof "#define ");
1558 CPP_PUTS_Q (pfile, "#define ", sizeof "#define " -1);
1559 CPP_PUTS_Q (pfile, sym, len);
1561 if (defn->nargs == -1)
1563 CPP_PUTC_Q (pfile, ' ');
1565 /* The first and last two characters of a macro expansion are
1566 always "\r "; this needs to be trimmed out.
1567 So we need length-4 chars of space, plus one for the NUL. */
1568 CPP_RESERVE (pfile, defn->length - 4 + 1);
1569 CPP_PUTS_Q (pfile, defn->expansion + 2, defn->length - 4);
1570 CPP_NUL_TERMINATE_Q (pfile);
1575 unsigned char *argnames = (unsigned char *) xstrdup (defn->argnames);
1576 unsigned char **argv = (unsigned char **) alloca (defn->nargs *
1578 int *argl = (int *) alloca (defn->nargs * sizeof(int));
1582 /* First extract the argument list. */
1588 while (*x != ',' && *x != '\0') x++;
1589 argl[i] = x - argv[i];
1593 x += 2; /* skip the space after the comma */
1597 /* Now print out the argument list. */
1598 CPP_PUTC_Q (pfile, '(');
1599 for (i = 0; i < defn->nargs; i++)
1601 CPP_RESERVE (pfile, argl[i] + 2);
1602 CPP_PUTS_Q (pfile, argv[i], argl[i]);
1603 if (i < defn->nargs-1)
1604 CPP_PUTS_Q (pfile, ", ", 2);
1607 if (defn->rest_args)
1608 CPP_PUTS (pfile, "...) ", 5);
1610 CPP_PUTS (pfile, ") ", 2);
1612 /* Now the definition. */
1613 x = defn->expansion;
1614 for (r = defn->pattern; r; r = r->next)
1617 if (*x == '\r') x += 2, i -= 2;
1618 /* i chars for macro text, plus the length of the macro
1619 argument name, plus one for a stringify marker, plus two for
1620 each concatenation marker. */
1622 i + argl[r->argno] + r->stringify
1623 + (r->raw_before + r->raw_after) * 2);
1625 if (i > 0) CPP_PUTS_Q (pfile, x, i);
1627 CPP_PUTS_Q (pfile, "##", 2);
1629 CPP_PUTC_Q (pfile, '#');
1630 CPP_PUTS_Q (pfile, argv[r->argno], argl[r->argno]);
1631 if (r->raw_after && !(r->next && r->next->nchars == 0
1632 && r->next->raw_before))
1633 CPP_PUTS_Q (pfile, "##", 2);
1638 i = defn->length - (x - defn->expansion) - 2;
1639 if (*x == '\r') x += 2, i -= 2;
1640 if (i > 0) CPP_PUTS (pfile, x, i);
1641 CPP_NUL_TERMINATE (pfile);