1 /* Part of CPP library. (Macro handling.)
2 Copyright (C) 1986, 87, 89, 92-95, 1996, 1998 Free Software Foundation, Inc.
3 Written by Per Bothner, 1994.
4 Based on CCCP program by Paul Rubin, June 1986
5 Adapted to ANSI C, Richard Stallman, Jan 1987
7 This program is free software; you can redistribute it and/or modify it
8 under the terms of the GNU General Public License as published by the
9 Free Software Foundation; either version 2, or (at your option) any
12 This program is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 GNU General Public License for more details.
17 You should have received a copy of the GNU General Public License
18 along with this program; if not, write to the Free Software
19 Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
21 In other words, you are welcome to use, share and improve this program.
22 You are forbidden to forbid anyone else to use, share and improve
23 what you give them. Help stamp out software-hoarding! */
30 static int comp_def_part PARAMS ((int, U_CHAR *, int, U_CHAR *,
32 static int change_newlines PARAMS ((U_CHAR *, int));
33 static void push_macro_expansion PARAMS ((cpp_reader *,
34 U_CHAR *, int, HASHNODE *));
35 static int unsafe_chars PARAMS ((int, int));
37 #define SKIP_WHITE_SPACE(p) do { while (is_hor_space[*p]) p++; } while (0)
38 #define CPP_IS_MACRO_BUFFER(PBUF) ((PBUF)->data != NULL)
39 #define FORWARD(N) CPP_FORWARD (CPP_BUFFER (pfile), (N))
41 extern char *version_string;
43 /* The arglist structure is built by create_definition to tell
44 collect_expansion where the argument names begin. That
45 is, for a define like "#define f(x,y,z) foo+x-bar*y", the arglist
46 would contain pointers to the strings x, y, and z.
47 collect_expansion would then build a DEFINITION node,
48 with reflist nodes pointing to the places x, y, and z had
49 appeared. So the arglist is just convenience data passed
50 between these two routines. It is not kept around after
51 the current #define has been processed and entered into the
63 /* This structure represents one parsed argument in a macro call.
64 `raw' points to the argument text as written (`raw_length' is its length).
65 `expanded' points to the argument's macro-expansion
66 (its length is `expand_length').
67 `stringified_length' is the length the argument would have
69 `use_count' is the number of times this macro arg is substituted
70 into the macro. If the actual use count exceeds 10,
71 the value stored is 10. */
73 /* raw and expanded are relative to ARG_BASE */
74 #define ARG_BASE ((pfile)->token_buffer)
78 /* Strings relative to pfile->token_buffer */
79 long raw, expanded, stringified;
80 int raw_length, expand_length;
81 int stringified_length;
87 /* Return hash function on name. must be compatible with the one
88 computed a step at a time, elsewhere */
91 hashf (name, len, hashsize)
92 register const U_CHAR *name;
99 r = HASHSTEP (r, *name++);
101 return MAKE_POS (r) % hashsize;
104 /* Find the most recent hash node for name "name" (ending with first
105 non-identifier char) installed by cpp_install
107 If LEN is >= 0, it is the length of the name.
108 Otherwise, compute the length by scanning the entire name.
110 If HASH is >= 0, it is the precomputed hash code.
111 Otherwise, compute the hash code. */
114 cpp_lookup (pfile, name, len, hash)
115 cpp_reader *pfile ATTRIBUTE_UNUSED;
120 register const U_CHAR *bp;
121 register HASHNODE *bucket;
125 for (bp = name; is_idchar[*bp]; bp++);
130 hash = hashf (name, len, HASHSIZE);
132 bucket = pfile->hashtab[hash];
135 if (bucket->length == len && strncmp (bucket->name, name, len) == 0)
137 bucket = bucket->next;
139 return (HASHNODE *) 0;
143 * Delete a hash node. Some weirdness to free junk from macros.
144 * More such weirdness will have to be added if you define more hash
145 * types that need it.
148 /* Note that the DEFINITION of a macro is removed from the hash table
149 but its storage is not freed. This would be a storage leak
150 except that it is not reasonable to keep undefining and redefining
151 large numbers of macros many times.
152 In any case, this is necessary, because a macro can be #undef'd
153 in the middle of reading the arguments to a call to it.
154 If #undef freed the DEFINITION, that would crash. */
161 if (hp->prev != NULL)
162 hp->prev->next = hp->next;
163 if (hp->next != NULL)
164 hp->next->prev = hp->prev;
166 /* make sure that the bucket chain header that
167 the deleted guy was on points to the right thing afterwards. */
168 if (hp == *hp->bucket_hdr)
169 *hp->bucket_hdr = hp->next;
171 if (hp->type == T_MACRO)
173 DEFINITION *d = hp->value.defn;
174 struct reflist *ap, *nextap;
176 for (ap = d->pattern; ap != NULL; ap = nextap)
182 free (d->args.argnames);
189 /* Install a name in the main hash table, even if it is already there.
190 Name stops with first non alphanumeric, except leading '#'.
191 Caller must check against redefinition if that is desired.
192 delete_macro () removes things installed by cpp_install () in fifo order.
193 this is important because of the `defined' special symbol used
194 in #if, and also if pushdef/popdef directives are ever implemented.
196 If LEN is >= 0, it is the length of the name.
197 Otherwise, compute the length by scanning the entire name.
199 If HASH is >= 0, it is the precomputed hash code.
200 Otherwise, compute the hash code. */
203 cpp_install (pfile, name, len, type, value, hash)
211 register HASHNODE *hp;
212 register int i, bucket;
218 while (is_idchar[*p])
224 hash = hashf (name, len, HASHSIZE);
226 i = sizeof (HASHNODE) + len + 1;
227 hp = (HASHNODE *) xmalloc (i);
229 hp->bucket_hdr = &pfile->hashtab[bucket];
230 hp->next = pfile->hashtab[bucket];
231 pfile->hashtab[bucket] = hp;
233 if (hp->next != NULL)
237 hp->value.cpval = value;
238 hp->name = ((U_CHAR *) hp) + sizeof (HASHNODE);
239 bcopy (name, hp->name, len);
245 macro_cleanup (pbuf, pfile)
247 cpp_reader *pfile ATTRIBUTE_UNUSED;
249 HASHNODE *macro = (HASHNODE *) pbuf->data;
250 if (macro->type == T_DISABLED)
251 macro->type = T_MACRO;
252 if (macro->type != T_MACRO || pbuf->buf != macro->value.defn->expansion)
258 /* Read a replacement list for a macro with parameters.
259 Build the DEFINITION structure.
260 Reads characters of text starting at BUF until END.
261 ARGLIST specifies the formal parameters to look for
262 in the text of the definition; NARGS is the number of args
263 in that list, or -1 for a macro name that wants no argument list.
264 MACRONAME is the macro name itself (so we can avoid recursive expansion)
265 and NAMELEN is its length in characters.
267 Note that comments, backslash-newlines, and leading white space
268 have already been deleted from the argument. */
271 collect_expansion (pfile, buf, limit, nargs, arglist)
275 struct arglist *arglist;
278 register U_CHAR *p, *lastp, *exp_p;
279 struct reflist *endpat = NULL;
280 /* Pointer to first nonspace after last ## seen. */
282 /* Pointer to first nonspace after last single-# seen. */
283 U_CHAR *stringify = 0;
285 int expected_delimiter = '\0';
287 /* Scan thru the replacement list, ignoring comments and quoted
288 strings, picking up on the macro calls. It does a linear search
289 thru the arg list on every potential symbol. Profiling might say
290 that something smarter should happen. */
295 /* Find the beginning of the trailing whitespace. */
297 while (p < limit && is_space[limit[-1]])
300 /* Allocate space for the text in the macro definition.
301 Leading and trailing whitespace chars need 2 bytes each.
302 Each other input char may or may not need 1 byte,
303 so this is an upper bound. The extra 5 are for invented
304 leading and trailing newline-marker and final null. */
305 maxsize = (sizeof (DEFINITION)
307 defn = (DEFINITION *) xcalloc (1, maxsize);
310 exp_p = defn->expansion = (U_CHAR *) defn + sizeof (DEFINITION);
315 /* Add one initial space escape-marker to prevent accidental
316 token-pasting (often removed by macroexpand). */
320 if (limit - p >= 2 && p[0] == '#' && p[1] == '#')
322 cpp_error (pfile, "`##' at start of macro definition");
326 /* Process the main body of the definition. */
330 register U_CHAR c = *p++;
334 if (!CPP_TRADITIONAL (pfile))
340 if (expected_delimiter != '\0')
342 if (c == expected_delimiter)
343 expected_delimiter = '\0';
346 expected_delimiter = c;
350 if (p < limit && expected_delimiter)
352 /* In a string, backslash goes through
353 and makes next char ordinary. */
359 /* # is ordinary inside a string. */
360 if (expected_delimiter)
362 if (p < limit && *p == '#')
364 /* ##: concatenate preceding and following tokens. */
365 /* Take out the first #, discard preceding whitespace. */
367 while (exp_p > lastp && is_hor_space[exp_p[-1]])
369 /* Skip the second #. */
371 /* Discard following whitespace. */
372 SKIP_WHITE_SPACE (p);
375 cpp_error (pfile, "`##' at end of macro definition");
379 /* Single #: stringify following argument ref.
380 Don't leave the # in the expansion. */
382 SKIP_WHITE_SPACE (p);
383 if (p == limit || !is_idstart[*p]
384 || (*p == 'L' && p + 1 < limit && (p[1] == '\'' ||
387 "`#' operator is not followed by a macro argument name");
396 /* In -traditional mode, recognize arguments inside strings and
397 character constants, and ignore special properties of #.
398 Arguments inside strings are considered "stringified", but no
399 extra quote marks are supplied. */
404 if (expected_delimiter != '\0')
406 if (c == expected_delimiter)
407 expected_delimiter = '\0';
410 expected_delimiter = c;
414 /* Backslash quotes delimiters and itself,
415 but not macro args. */
416 if (expected_delimiter != 0 && p < limit
417 && (*p == expected_delimiter || *p == '\\'))
425 if (expected_delimiter != '\0')
426 /* No comments inside strings. */
430 /* If we find a comment that wasn't removed by
431 handle_directive, this must be -traditional.
432 So replace the comment with nothing at all. */
435 while (p < limit && !(p[-2] == '*' && p[-1] == '/'))
438 /* Mark this as a concatenation-point,
439 as if it had been ##. */
447 /* Handle the start of a symbol. */
448 if (is_idchar[c] && nargs > 0)
450 U_CHAR *id_beg = p - 1;
454 while (p != limit && is_idchar[*p])
459 && !(id_len == 1 && c == 'L' && (*p == '\'' || *p == '"')))
461 register struct arglist *arg;
463 for (arg = arglist; arg != NULL; arg = arg->next)
465 struct reflist *tpat;
467 if (arg->name[0] == c
468 && arg->length == id_len
469 && strncmp (arg->name, id_beg, id_len) == 0)
471 if (expected_delimiter && CPP_OPTIONS
472 (pfile)->warn_stringify)
474 if (CPP_TRADITIONAL (pfile))
477 "macro argument `%.*s' is stringified.",
483 "macro arg `%.*s' would be stringified with -traditional.",
487 /* If ANSI, don't actually substitute
489 if (!CPP_TRADITIONAL (pfile) && expected_delimiter)
491 /* make a pat node for this arg and append it
492 to the end of the pat list */
493 tpat = (struct reflist *)
494 xmalloc (sizeof (struct reflist));
496 tpat->raw_before = concat == id_beg;
498 tpat->rest_args = arg->rest_args;
499 tpat->stringify = (CPP_TRADITIONAL (pfile)
500 ? expected_delimiter != '\0'
501 : stringify == id_beg);
504 defn->pattern = tpat;
509 tpat->argno = arg->argno;
510 tpat->nchars = exp_p - lastp;
512 register U_CHAR *p1 = p;
513 SKIP_WHITE_SPACE (p1);
514 if (p1 + 2 <= limit && p1[0] == '#' && p1[1] == '#')
524 /* If this was not a macro arg, copy it into the expansion. */
527 register U_CHAR *lim1 = p;
531 if (stringify == id_beg)
533 "`#' operator should be followed by a macro argument name");
538 if (!CPP_TRADITIONAL (pfile) && expected_delimiter == 0)
540 /* If ANSI, put in a "\r " marker to prevent token pasting.
541 But not if "inside a string" (which in ANSI mode
542 happens only for -D option). */
549 defn->length = exp_p - defn->expansion;
551 /* Crash now if we overrun the allocated size. */
552 if (defn->length + 1 > maxsize)
556 /* This isn't worth the time it takes. */
557 /* give back excess storage */
558 defn->expansion = (U_CHAR *) xrealloc (defn->expansion, defn->length + 1);
565 * special extension string that can be added to the last macro argument to
566 * allow it to absorb the "rest" of the arguments when expanded. Ex:
567 * #define wow(a, b...) process (b, a, b)
568 * { wow (1, 2, 3); } -> { process (2, 3, 1, 2, 3); }
569 * { wow (one, two); } -> { process (two, one, two); }
570 * if this "rest_arg" is used with the concat token '##' and if it is not
571 * supplied then the token attached to with ## will not be outputted. Ex:
572 * #define wow (a, b...) process (b ## , a, ## b)
573 * { wow (1, 2); } -> { process (2, 1, 2); }
574 * { wow (one); } -> { process (one); {
576 static char rest_extension[] = "...";
577 #define REST_EXTENSION_LENGTH (sizeof (rest_extension) - 1)
579 /* Create a DEFINITION node from a #define directive. Arguments are
583 create_definition (buf, limit, pfile, predefinition)
588 U_CHAR *bp; /* temp ptr into input buffer */
589 U_CHAR *symname; /* remember where symbol name starts */
590 int sym_length; /* and how long it is */
593 char *file = CPP_BUFFER (pfile) ? CPP_BUFFER (pfile)->nominal_fname : "";
595 int arglengths = 0; /* Accumulate lengths of arg names
596 plus number of args. */
598 cpp_buf_line_and_col (CPP_BUFFER (pfile), &line, &col);
602 while (is_hor_space[*bp])
605 symname = bp; /* remember where it starts */
607 sym_length = check_macro_name (pfile, bp, 0);
610 /* Lossage will occur if identifiers or control keywords are broken
611 across lines using backslash. This is not the right place to take
616 struct arglist *arg_ptrs = NULL;
620 SKIP_WHITE_SPACE (bp);
622 /* Loop over macro argument names. */
625 struct arglist *temp;
627 temp = (struct arglist *) alloca (sizeof (struct arglist));
629 temp->next = arg_ptrs;
630 temp->argno = argno++;
635 cpp_pedwarn (pfile, "another parameter follows `%s'",
638 if (!is_idstart[*bp])
639 cpp_pedwarn (pfile, "invalid character in macro parameter name");
641 /* Find the end of the arg name. */
642 while (is_idchar[*bp])
645 /* do we have a "special" rest-args extension here? */
646 if ((size_t) (limit - bp) > REST_EXTENSION_LENGTH
647 && !strncmp (rest_extension, bp, REST_EXTENSION_LENGTH))
654 temp->length = bp - temp->name;
656 bp += REST_EXTENSION_LENGTH;
657 arglengths += temp->length + 2;
658 SKIP_WHITE_SPACE (bp);
659 if (temp->length == 0 || (*bp != ',' && *bp != ')'))
662 "badly punctuated parameter list in `#define'");
668 SKIP_WHITE_SPACE (bp);
672 cpp_error (pfile, "unterminated parameter list in `#define'");
676 struct arglist *otemp;
678 for (otemp = temp->next; otemp != NULL; otemp = otemp->next)
679 if (temp->length == otemp->length
680 && strncmp (temp->name, otemp->name, temp->length) == 0)
684 name = (U_CHAR *) alloca (temp->length + 1);
685 (void) strncpy (name, temp->name, temp->length);
686 name[temp->length] = '\0';
688 "duplicate argument name `%s' in `#define'",
695 ++bp; /* skip paren */
696 SKIP_WHITE_SPACE (bp);
697 /* now everything from bp before limit is the definition. */
698 defn = collect_expansion (pfile, bp, limit, argno, arg_ptrs);
699 defn->rest_args = rest_args;
701 /* Now set defn->args.argnames to the result of concatenating
702 the argument names in reverse order
703 with comma-space between them. */
704 defn->args.argnames = (U_CHAR *) xmalloc (arglengths + 1);
706 struct arglist *temp;
708 for (temp = arg_ptrs; temp; temp = temp->next)
710 bcopy (temp->name, &defn->args.argnames[i], temp->length);
714 defn->args.argnames[i++] = ',';
715 defn->args.argnames[i++] = ' ';
718 defn->args.argnames[i] = 0;
723 /* Simple expansion or empty definition. */
727 if (is_hor_space[*bp])
730 SKIP_WHITE_SPACE (bp);
733 /* Per C9x, missing white space after the name in a #define
734 of an object-like macro is always a constraint violation. */
736 "missing white space after `#define %.*s'",
737 sym_length, symname);
739 /* now everything from bp before limit is the definition. */
740 defn = collect_expansion (pfile, bp, limit, -1, NULL_PTR);
741 defn->args.argnames = (U_CHAR *) "";
747 /* OP is null if this is a predefinition */
748 defn->predefined = predefinition;
750 mdef.symnam = symname;
751 mdef.symlen = sym_length;
761 * Parse a macro argument and append the info on PFILE's token_buffer.
762 * REST_ARGS means to absorb the rest of the args.
763 * Return nonzero to indicate a syntax error.
766 static enum cpp_token
767 macarg (pfile, rest_args)
772 enum cpp_token token;
773 char save_put_out_comments = CPP_OPTIONS (pfile)->put_out_comments;
774 CPP_OPTIONS (pfile)->put_out_comments = 0;
776 /* Try to parse as much of the argument as exists at this
777 input stack level. */
778 pfile->no_macro_expand++;
779 CPP_OPTIONS (pfile)->no_line_commands++;
782 token = cpp_get_token (pfile);
788 /* If we've hit end of file, it's an error (reported by caller).
789 Ditto if it's the end of cpp_expand_to_buffer text.
790 If we've hit end of macro, just continue. */
791 if (!CPP_IS_MACRO_BUFFER (CPP_BUFFER (pfile)))
802 /* if we've returned to lowest level and
803 we aren't absorbing all args */
804 if (paren == 0 && rest_args == 0)
808 /* Remove ',' or ')' from argument buffer. */
809 CPP_ADJUST_WRITTEN (pfile, -1);
816 CPP_OPTIONS (pfile)->put_out_comments = save_put_out_comments;
817 CPP_OPTIONS (pfile)->no_line_commands--;
818 pfile->no_macro_expand--;
823 /* Turn newlines to spaces in the string of length LENGTH at START,
824 except inside of string constants.
825 The string is copied into itself with its beginning staying fixed. */
828 change_newlines (start, length)
832 register U_CHAR *ibp;
833 register U_CHAR *obp;
834 register U_CHAR *limit;
838 limit = start + length;
849 /* Notice and skip strings, so that we don't
850 delete newlines in them. */
858 if (c == '\n' && quotec == '\'')
876 time_t t = time ((time_t *) 0);
877 pfile->timebuf = localtime (&t);
879 return pfile->timebuf;
882 static char *monthnames[] =
884 "Jan", "Feb", "Mar", "Apr", "May", "Jun",
885 "Jul", "Aug", "Sep", "Oct", "Nov", "Dec",
889 * expand things like __FILE__. Place the expansion into the output
890 * buffer *without* rescanning.
894 special_symbol (hp, pfile)
907 ip = CPP_BUFFER (pfile);
908 if (hp->type == T_BASE_FILE)
910 while (CPP_PREV_BUFFER (ip) != CPP_NULL_BUFFER (pfile))
911 ip = CPP_PREV_BUFFER (ip);
915 ip = CPP_BUFFER (pfile);
916 while (!ip->nominal_fname && ip != CPP_NULL_BUFFER (pfile))
917 ip = CPP_PREV_BUFFER (ip);
920 buf = ip->nominal_fname;
924 CPP_RESERVE (pfile, 3 + 4 * strlen (buf));
925 quote_string (pfile, buf);
929 case T_INCLUDE_LEVEL:
931 int true_indepth = 0;
932 ip = CPP_BUFFER (pfile);
933 for (; ip != CPP_NULL_BUFFER (pfile); ip = CPP_PREV_BUFFER (ip))
934 if (ip->fname != NULL)
937 CPP_RESERVE (pfile, 10);
938 sprintf (CPP_PWRITTEN (pfile), "%d", true_indepth);
939 CPP_ADJUST_WRITTEN (pfile, strlen (CPP_PWRITTEN (pfile)));
944 len = strlen (version_string);
945 CPP_RESERVE (pfile, 3 + len);
946 CPP_PUTC_Q (pfile, '"');
947 CPP_PUTS_Q (pfile, version_string, len);
948 CPP_PUTC_Q (pfile, '"');
949 CPP_NUL_TERMINATE_Q (pfile);
953 buf = hp->value.cpval;
960 CPP_RESERVE (pfile, len + 1);
961 CPP_PUTS_Q (pfile, buf, len);
962 CPP_NUL_TERMINATE_Q (pfile);
966 CPP_RESERVE (pfile, 2);
967 #ifdef STDC_0_IN_SYSTEM_HEADERS
968 ip = CPP_BUFFER (pfile);
969 while (!ip->nominal_fname && ip != CPP_NULL_BUFFER (pfile))
970 ip = CPP_PREV_BUFFER (ip);
971 if (ip->system_header_p
972 && !cpp_lookup (pfile, (U_CHAR *) "__STRICT_ANSI__", 15, -1))
973 CPP_PUTC_Q (pfile, '0');
976 CPP_PUTC_Q (pfile, '1');
977 CPP_NUL_TERMINATE_Q (pfile);
983 cpp_buf_line_and_col (cpp_file_buffer (pfile), &line, NULL);
985 CPP_RESERVE (pfile, 10);
986 sprintf (CPP_PWRITTEN (pfile), "%ld", line);
987 CPP_ADJUST_WRITTEN (pfile, strlen (CPP_PWRITTEN (pfile)));
996 CPP_RESERVE (pfile, 20);
997 timebuf = timestamp (pfile);
998 if (hp->type == T_DATE)
999 sprintf (CPP_PWRITTEN (pfile), "\"%s %2d %4d\"",
1000 monthnames[timebuf->tm_mon],
1001 timebuf->tm_mday, timebuf->tm_year + 1900);
1003 sprintf (CPP_PWRITTEN (pfile), "\"%02d:%02d:%02d\"",
1004 timebuf->tm_hour, timebuf->tm_min, timebuf->tm_sec);
1006 CPP_ADJUST_WRITTEN (pfile, strlen (CPP_PWRITTEN (pfile)));
1011 cpp_fatal (pfile, "cpplib internal error: invalid special hash type");
1015 /* This point should be unreachable. */
1019 /* Expand a macro call.
1020 HP points to the symbol that is the macro being called.
1021 Put the result of expansion onto the input stack
1022 so that subsequent input by our caller will use it.
1024 If macro wants arguments, caller has already verified that
1025 an argument list follows; arguments come from the input stack. */
1028 macroexpand (pfile, hp)
1034 register U_CHAR *xbuf;
1035 long start_line, start_column;
1037 struct argdata *args;
1038 long old_written = CPP_WRITTEN (pfile);
1040 int start_line = instack[indepth].lineno;
1042 int rest_args, rest_zero;
1046 /* This macro is being used inside a #if, which means it must be */
1047 /* recorded as a precondition. */
1048 if (pcp_inside_if && pcp_outfile && defn->predefined)
1049 dump_single_macro (hp, pcp_outfile);
1052 cpp_buf_line_and_col (cpp_file_buffer (pfile), &start_line, &start_column);
1054 /* Check for and handle special symbols. */
1055 if (hp->type != T_MACRO)
1057 special_symbol (hp, pfile);
1058 xbuf_len = CPP_WRITTEN (pfile) - old_written;
1059 xbuf = (U_CHAR *) xmalloc (xbuf_len + 1);
1060 CPP_SET_WRITTEN (pfile, old_written);
1061 bcopy (CPP_PWRITTEN (pfile), xbuf, xbuf_len + 1);
1062 push_macro_expansion (pfile, xbuf, xbuf_len, hp);
1063 CPP_BUFFER (pfile)->has_escapes = 1;
1067 defn = hp->value.defn;
1068 nargs = defn->nargs;
1069 pfile->output_escapes++;
1073 enum cpp_token token = CPP_EOF;
1075 args = (struct argdata *) alloca ((nargs + 1) * sizeof (struct argdata));
1077 for (i = 0; i < nargs; i++)
1079 args[i].raw = args[i].expanded = 0;
1080 args[i].raw_length = 0;
1081 args[i].expand_length = args[i].stringified_length = -1;
1082 args[i].use_count = 0;
1085 /* Parse all the macro args that are supplied. I counts them.
1086 The first NARGS args are stored in ARGS.
1087 The rest are discarded. If rest_args is set then we assume
1088 macarg absorbed the rest of the args. */
1092 FORWARD (1); /* Discard open-parenthesis before first arg. */
1097 if (i < nargs || (nargs == 0 && i == 0))
1099 /* if we are working on last arg which absorbs rest of args... */
1100 if (i == nargs - 1 && defn->rest_args)
1102 args[i].raw = CPP_WRITTEN (pfile);
1103 token = macarg (pfile, rest_args);
1104 args[i].raw_length = CPP_WRITTEN (pfile) - args[i].raw;
1105 args[i].newlines = 0; /* FIXME */
1108 token = macarg (pfile, 0);
1109 if (token == CPP_EOF || token == CPP_POP)
1111 cpp_error_with_line (pfile, start_line, start_column,
1112 "unterminated macro call");
1117 while (token == CPP_COMMA);
1119 /* If we got one arg but it was just whitespace, call that 0 args. */
1122 register U_CHAR *bp = ARG_BASE + args[0].raw;
1123 register U_CHAR *lim = bp + args[0].raw_length;
1124 /* cpp.texi says for foo ( ) we provide one argument.
1125 However, if foo wants just 0 arguments, treat this as 0. */
1127 while (bp != lim && is_space[*bp])
1133 /* Don't output an error message if we have already output one for
1134 a parse error above. */
1136 if (nargs == 0 && i > 0)
1138 cpp_error (pfile, "arguments given to macro `%s'", hp->name);
1142 /* traditional C allows foo() if foo wants one argument. */
1143 if (nargs == 1 && i == 0 && CPP_TRADITIONAL (pfile))
1145 /* the rest args token is allowed to absorb 0 tokens */
1146 else if (i == nargs - 1 && defn->rest_args)
1149 cpp_error (pfile, "macro `%s' used without args", hp->name);
1151 cpp_error (pfile, "macro `%s' used with just one arg", hp->name);
1153 cpp_error (pfile, "macro `%s' used with only %d args",
1159 "macro `%s' used with too many (%d) args", hp->name, i);
1163 /* If macro wants zero args, we parsed the arglist for checking only.
1164 Read directly from the macro definition. */
1167 xbuf = defn->expansion;
1168 xbuf_len = defn->length;
1172 register U_CHAR *exp = defn->expansion;
1173 register int offset; /* offset in expansion,
1174 copied a piece at a time */
1175 register int totlen; /* total amount of exp buffer filled so far */
1177 register struct reflist *ap, *last_ap;
1179 /* Macro really takes args. Compute the expansion of this call. */
1181 /* Compute length in characters of the macro's expansion.
1182 Also count number of times each arg is used. */
1183 xbuf_len = defn->length;
1184 for (ap = defn->pattern; ap != NULL; ap = ap->next)
1188 register struct argdata *arg = &args[ap->argno];
1189 /* Stringify if it hasn't already been */
1190 if (arg->stringified_length < 0)
1192 int arglen = arg->raw_length;
1196 /* Initially need_space is -1. Otherwise, 1 means the
1197 previous character was a space, but we suppressed it;
1198 0 means the previous character was a non-space. */
1199 int need_space = -1;
1201 arg->stringified = CPP_WRITTEN (pfile);
1202 if (!CPP_TRADITIONAL (pfile))
1203 CPP_PUTC (pfile, '\"'); /* insert beginning quote */
1204 for (; i < arglen; i++)
1206 c = (ARG_BASE + arg->raw)[i];
1210 /* Internal sequences of whitespace are
1211 replaced by one space except within
1212 a string or char token. */
1215 if (CPP_WRITTEN (pfile) > (unsigned) arg->stringified
1216 && (CPP_PWRITTEN (pfile))[-1] == '\r')
1218 /* "\r " escape markers are removed */
1219 CPP_ADJUST_WRITTEN (pfile, -1);
1222 if (need_space == 0)
1226 else if (need_space > 0)
1227 CPP_PUTC (pfile, ' ');
1242 else if (c == '\"' || c == '\'')
1246 /* Escape these chars */
1247 if (c == '\"' || (in_string && c == '\\'))
1248 CPP_PUTC (pfile, '\\');
1250 CPP_PUTC (pfile, c);
1253 CPP_RESERVE (pfile, 4);
1254 sprintf ((char *) CPP_PWRITTEN (pfile), "\\%03o",
1256 CPP_ADJUST_WRITTEN (pfile, 4);
1259 if (!CPP_TRADITIONAL (pfile))
1260 CPP_PUTC (pfile, '\"'); /* insert ending quote */
1261 arg->stringified_length
1262 = CPP_WRITTEN (pfile) - arg->stringified;
1264 xbuf_len += args[ap->argno].stringified_length;
1266 else if (ap->raw_before || ap->raw_after || CPP_TRADITIONAL (pfile))
1267 /* Add 4 for two newline-space markers to prevent
1268 token concatenation. */
1269 xbuf_len += args[ap->argno].raw_length + 4;
1272 /* We have an ordinary (expanded) occurrence of the arg.
1273 So compute its expansion, if we have not already. */
1274 if (args[ap->argno].expand_length < 0)
1276 args[ap->argno].expanded = CPP_WRITTEN (pfile);
1277 cpp_expand_to_buffer (pfile,
1278 ARG_BASE + args[ap->argno].raw,
1279 args[ap->argno].raw_length);
1281 args[ap->argno].expand_length
1282 = CPP_WRITTEN (pfile) - args[ap->argno].expanded;
1285 /* Add 4 for two newline-space markers to prevent
1286 token concatenation. */
1287 xbuf_len += args[ap->argno].expand_length + 4;
1289 if (args[ap->argno].use_count < 10)
1290 args[ap->argno].use_count++;
1293 xbuf = (U_CHAR *) xmalloc (xbuf_len + 1);
1295 /* Generate in XBUF the complete expansion
1296 with arguments substituted in.
1297 TOTLEN is the total size generated so far.
1298 OFFSET is the index in the definition
1299 of where we are copying from. */
1300 offset = totlen = 0;
1301 for (last_ap = NULL, ap = defn->pattern; ap != NULL;
1302 last_ap = ap, ap = ap->next)
1304 register struct argdata *arg = &args[ap->argno];
1305 int count_before = totlen;
1307 /* Add chars to XBUF. */
1308 for (i = 0; i < ap->nchars; i++, offset++)
1309 xbuf[totlen++] = exp[offset];
1311 /* If followed by an empty rest arg with concatenation,
1312 delete the last run of nonwhite chars. */
1313 if (rest_zero && totlen > count_before
1314 && ((ap->rest_args && ap->raw_before)
1315 || (last_ap != NULL && last_ap->rest_args
1316 && last_ap->raw_after)))
1318 /* Delete final whitespace. */
1319 while (totlen > count_before && is_space[xbuf[totlen - 1]])
1322 /* Delete the nonwhites before them. */
1323 while (totlen > count_before && !is_space[xbuf[totlen - 1]])
1327 if (ap->stringify != 0)
1329 bcopy (ARG_BASE + arg->stringified,
1330 xbuf + totlen, arg->stringified_length);
1331 totlen += arg->stringified_length;
1333 else if (ap->raw_before || ap->raw_after || CPP_TRADITIONAL (pfile))
1335 U_CHAR *p1 = ARG_BASE + arg->raw;
1336 U_CHAR *l1 = p1 + arg->raw_length;
1339 while (p1 != l1 && is_space[*p1])
1341 while (p1 != l1 && is_idchar[*p1])
1342 xbuf[totlen++] = *p1++;
1346 /* Arg is concatenated after: delete trailing whitespace,
1347 whitespace markers, and no-reexpansion markers. */
1350 if (is_space[l1[-1]])
1352 else if (l1[-1] == '\r')
1354 else if (l1[-1] == '-')
1356 if (l1 != p1 + 1 && l1[-2] == '\r')
1366 /* Delete any no-reexpansion marker that precedes
1367 an identifier at the beginning of the argument. */
1368 if (p1[0] == '\r' && p1[1] == '-')
1371 bcopy (p1, xbuf + totlen, l1 - p1);
1376 U_CHAR *expanded = ARG_BASE + arg->expanded;
1377 if (!ap->raw_before && totlen > 0 && arg->expand_length
1378 && !CPP_TRADITIONAL (pfile)
1379 && unsafe_chars (xbuf[totlen - 1], expanded[0]))
1381 xbuf[totlen++] = '\r';
1382 xbuf[totlen++] = ' ';
1385 bcopy (expanded, xbuf + totlen, arg->expand_length);
1386 totlen += arg->expand_length;
1388 if (!ap->raw_after && totlen > 0 && offset < defn->length
1389 && !CPP_TRADITIONAL (pfile)
1390 && unsafe_chars (xbuf[totlen - 1], exp[offset]))
1392 xbuf[totlen++] = '\r';
1393 xbuf[totlen++] = ' ';
1396 /* If a macro argument with newlines is used multiple times,
1397 then only expand the newlines once. This avoids creating
1398 output lines which don't correspond to any input line,
1399 which confuses gdb and gcov. */
1400 if (arg->use_count > 1 && arg->newlines > 0)
1402 /* Don't bother doing change_newlines for subsequent
1406 = change_newlines (expanded, arg->expand_length);
1410 if (totlen > xbuf_len)
1414 /* if there is anything left of the definition
1415 after handling the arg list, copy that in too. */
1417 for (i = offset; i < defn->length; i++)
1419 /* if we've reached the end of the macro */
1422 if (!(rest_zero && last_ap != NULL && last_ap->rest_args
1423 && last_ap->raw_after))
1424 xbuf[totlen++] = exp[i];
1432 pfile->output_escapes--;
1434 /* Now put the expansion on the input stack
1435 so our caller will commence reading from it. */
1436 push_macro_expansion (pfile, xbuf, xbuf_len, hp);
1437 CPP_BUFFER (pfile)->has_escapes = 1;
1439 /* Pop the space we've used in the token_buffer for argument expansion. */
1440 CPP_SET_WRITTEN (pfile, old_written);
1442 /* Recursive macro use sometimes works traditionally.
1443 #define foo(x,y) bar (x (y,0), y)
1446 if (!CPP_TRADITIONAL (pfile))
1447 hp->type = T_DISABLED;
1450 /* Return 1 iff a token ending in C1 followed directly by a token C2
1451 could cause mis-tokenization. */
1454 unsafe_chars (c1, c2)
1461 if (c2 == c1 || c2 == '=')
1465 case '.': case '0': case '1': case '2': case '3':
1466 case '4': case '5': case '6': case '7': case '8':
1467 case '9': case 'e': case 'E': case 'p': case 'P':
1468 if (c2 == '-' || c2 == '+')
1469 return 1; /* could extend a pre-processing number */
1473 if (c2 == '\'' || c2 == '\"')
1474 return 1; /* Could turn into L"xxx" or L'xxx'. */
1477 case '_': case 'a': case 'b': case 'c': case 'd': case 'f':
1478 case 'g': case 'h': case 'i': case 'j': case 'k': case 'l':
1479 case 'm': case 'n': case 'o': case 'q': case 'r': case 's':
1480 case 't': case 'u': case 'v': case 'w': case 'x': case 'y':
1481 case 'z': case 'A': case 'B': case 'C': case 'D': case 'F':
1482 case 'G': case 'H': case 'I': case 'J': case 'K': case 'M':
1483 case 'N': case 'O': case 'Q': case 'R': case 'S': case 'T':
1484 case 'U': case 'V': case 'W': case 'X': case 'Y': case 'Z':
1486 /* We're in the middle of either a name or a pre-processing number. */
1487 return (is_idchar[c2] || c2 == '.');
1489 case '<': case '>': case '!': case '%': case '#': case ':':
1490 case '^': case '&': case '|': case '*': case '/': case '=':
1491 return (c2 == c1 || c2 == '=');
1497 push_macro_expansion (pfile, xbuf, xbuf_len, hp)
1499 register U_CHAR *xbuf;
1503 register cpp_buffer *mbuf = cpp_push_buffer (pfile, xbuf, xbuf_len);
1506 mbuf->cleanup = macro_cleanup;
1509 /* The first chars of the expansion should be a "\r " added by
1510 collect_expansion. This is to prevent accidental token-pasting
1511 between the text preceding the macro invocation, and the macro
1514 We would like to avoid adding unneeded spaces (for the sake of
1515 tools that use cpp, such as imake). In some common cases we can
1516 tell that it is safe to omit the space.
1518 The character before the macro invocation cannot have been an
1519 idchar (or else it would have been pasted with the idchars of
1520 the macro name). Therefore, if the first non-space character
1521 of the expansion is an idchar, we do not need the extra space
1522 to prevent token pasting.
1524 Also, we don't need the extra space if the first char is '(',
1525 or some other (less common) characters. */
1527 if (xbuf[0] == '\r' && xbuf[1] == ' '
1528 && (is_idchar[xbuf[2]] || xbuf[2] == '(' || xbuf[2] == '\''
1529 || xbuf[2] == '\"'))
1532 /* Likewise, avoid the extra space at the end of the macro expansion
1533 if this is safe. We can do a better job here since we can know
1534 what the next char will be. */
1536 && mbuf->rlimit[-2] == '\r'
1537 && mbuf->rlimit[-1] == ' ')
1539 int c1 = mbuf->rlimit[-3];
1540 int c2 = CPP_BUF_PEEK (CPP_PREV_BUFFER (CPP_BUFFER (pfile)));
1541 if (c2 == EOF || !unsafe_chars (c1, c2))
1546 /* Return zero if two DEFINITIONs are isomorphic. */
1549 compare_defs (pfile, d1, d2)
1551 DEFINITION *d1, *d2;
1553 register struct reflist *a1, *a2;
1554 register U_CHAR *p1 = d1->expansion;
1555 register U_CHAR *p2 = d2->expansion;
1558 if (d1->nargs != d2->nargs)
1560 if (CPP_PEDANTIC (pfile)
1561 && strcmp ((char *) d1->args.argnames, (char *) d2->args.argnames))
1563 for (a1 = d1->pattern, a2 = d2->pattern; a1 && a2;
1564 a1 = a1->next, a2 = a2->next)
1566 if (!((a1->nchars == a2->nchars && !strncmp (p1, p2, a1->nchars))
1567 || !comp_def_part (first, p1, a1->nchars, p2, a2->nchars, 0))
1568 || a1->argno != a2->argno
1569 || a1->stringify != a2->stringify
1570 || a1->raw_before != a2->raw_before
1571 || a1->raw_after != a2->raw_after)
1580 return comp_def_part (first, p1, d1->length - (p1 - d1->expansion),
1581 p2, d2->length - (p2 - d2->expansion), 1);
1584 /* Return 1 if two parts of two macro definitions are effectively different.
1585 One of the parts starts at BEG1 and has LEN1 chars;
1586 the other has LEN2 chars at BEG2.
1587 Any sequence of whitespace matches any other sequence of whitespace.
1588 FIRST means these parts are the first of a macro definition;
1589 so ignore leading whitespace entirely.
1590 LAST means these parts are the last of a macro definition;
1591 so ignore trailing whitespace entirely. */
1594 comp_def_part (first, beg1, len1, beg2, len2, last)
1596 U_CHAR *beg1, *beg2;
1600 register U_CHAR *end1 = beg1 + len1;
1601 register U_CHAR *end2 = beg2 + len2;
1604 while (beg1 != end1 && is_space[*beg1])
1606 while (beg2 != end2 && is_space[*beg2])
1611 while (beg1 != end1 && is_space[end1[-1]])
1613 while (beg2 != end2 && is_space[end2[-1]])
1616 while (beg1 != end1 && beg2 != end2)
1618 if (is_space[*beg1] && is_space[*beg2])
1620 while (beg1 != end1 && is_space[*beg1])
1622 while (beg2 != end2 && is_space[*beg2])
1625 else if (*beg1 == *beg2)
1633 return (beg1 != end1) || (beg2 != end2);