cppfiles.c (stack_include_file): Check for stacked contexts here.
[gcc.git] / gcc / cpplex.c
1 /* CPP Library - lexical analysis.
2 Copyright (C) 2000 Free Software Foundation, Inc.
3 Contributed by Per Bothner, 1994-95.
4 Based on CCCP program by Paul Rubin, June 1986
5 Adapted to ANSI C, Richard Stallman, Jan 1987
6 Broken out to separate file, Zack Weinberg, Mar 2000
7 Single-pass line tokenization by Neil Booth, April 2000
8
9 This program is free software; you can redistribute it and/or modify it
10 under the terms of the GNU General Public License as published by the
11 Free Software Foundation; either version 2, or (at your option) any
12 later version.
13
14 This program is distributed in the hope that it will be useful,
15 but WITHOUT ANY WARRANTY; without even the implied warranty of
16 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17 GNU General Public License for more details.
18
19 You should have received a copy of the GNU General Public License
20 along with this program; if not, write to the Free Software
21 Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
22
23 /* This lexer works with a single pass of the file. Recently I
24 re-wrote it to minimize the places where we step backwards in the
25 input stream, to make future changes to support multi-byte
26 character sets fairly straight-forward.
27
28 There is now only one routine where we do step backwards:
29 skip_escaped_newlines. This routine could probably also be changed
30 so that it doesn't need to step back. One possibility is to use a
31 trick similar to that used in lex_period and lex_percent. Two
32 extra characters might be needed, but skip_escaped_newlines itself
33 would probably be the only place that needs to be aware of that,
34 and changes to the remaining routines would probably only be needed
35 if they process a backslash. */
36
37 #include "config.h"
38 #include "system.h"
39 #include "cpplib.h"
40 #include "cpphash.h"
41 #include "symcat.h"
42
43 /* Tokens with SPELL_STRING store their spelling in the token list,
44 and it's length in the token->val.name.len. */
45 enum spell_type
46 {
47 SPELL_OPERATOR = 0,
48 SPELL_CHAR,
49 SPELL_IDENT,
50 SPELL_STRING,
51 SPELL_NONE
52 };
53
54 struct token_spelling
55 {
56 enum spell_type category;
57 const unsigned char *name;
58 };
59
60 const unsigned char *digraph_spellings [] = {U"%:", U"%:%:", U"<:",
61 U":>", U"<%", U"%>"};
62
63 #define OP(e, s) { SPELL_OPERATOR, U s },
64 #define TK(e, s) { s, U STRINGX (e) },
65 const struct token_spelling token_spellings [N_TTYPES] = {TTYPE_TABLE };
66 #undef OP
67 #undef TK
68
69 #define TOKEN_SPELL(token) (token_spellings[(token)->type].category)
70 #define TOKEN_NAME(token) (token_spellings[(token)->type].name)
71
72 static cppchar_t handle_newline PARAMS ((cpp_buffer *, cppchar_t));
73 static cppchar_t skip_escaped_newlines PARAMS ((cpp_buffer *, cppchar_t));
74 static cppchar_t get_effective_char PARAMS ((cpp_buffer *));
75
76 static int skip_block_comment PARAMS ((cpp_reader *));
77 static int skip_line_comment PARAMS ((cpp_reader *));
78 static void adjust_column PARAMS ((cpp_reader *));
79 static void skip_whitespace PARAMS ((cpp_reader *, cppchar_t));
80 static cpp_hashnode *parse_identifier PARAMS ((cpp_reader *, cppchar_t));
81 static void parse_number PARAMS ((cpp_reader *, cpp_string *, cppchar_t, int));
82 static int unescaped_terminator_p PARAMS ((cpp_reader *, const U_CHAR *));
83 static void parse_string PARAMS ((cpp_reader *, cpp_token *, cppchar_t));
84 static void unterminated PARAMS ((cpp_reader *, int));
85 static int trigraph_ok PARAMS ((cpp_reader *, cppchar_t));
86 static void save_comment PARAMS ((cpp_reader *, cpp_token *, const U_CHAR *));
87 static void lex_percent PARAMS ((cpp_buffer *, cpp_token *));
88 static void lex_dot PARAMS ((cpp_reader *, cpp_token *));
89 static int name_p PARAMS ((cpp_reader *, const cpp_string *));
90
91 static cpp_chunk *new_chunk PARAMS ((unsigned int));
92 static int chunk_suitable PARAMS ((cpp_pool *, cpp_chunk *, unsigned int));
93
94 /* Utility routine:
95
96 Compares, the token TOKEN to the NUL-terminated string STRING.
97 TOKEN must be a CPP_NAME. Returns 1 for equal, 0 for unequal. */
98
99 int
100 cpp_ideq (token, string)
101 const cpp_token *token;
102 const char *string;
103 {
104 if (token->type != CPP_NAME)
105 return 0;
106
107 return !ustrcmp (token->val.node->name, (const U_CHAR *) string);
108 }
109
110 /* Call when meeting a newline. Returns the character after the newline
111 (or carriage-return newline combination), or EOF. */
112 static cppchar_t
113 handle_newline (buffer, newline_char)
114 cpp_buffer *buffer;
115 cppchar_t newline_char;
116 {
117 cppchar_t next = EOF;
118
119 buffer->col_adjust = 0;
120 buffer->lineno++;
121 buffer->line_base = buffer->cur;
122
123 /* Handle CR-LF and LF-CR combinations, get the next character. */
124 if (buffer->cur < buffer->rlimit)
125 {
126 next = *buffer->cur++;
127 if (next + newline_char == '\r' + '\n')
128 {
129 buffer->line_base = buffer->cur;
130 if (buffer->cur < buffer->rlimit)
131 next = *buffer->cur++;
132 else
133 next = EOF;
134 }
135 }
136
137 buffer->read_ahead = next;
138 return next;
139 }
140
141 /* Subroutine of skip_escaped_newlines; called when a trigraph is
142 encountered. It warns if necessary, and returns true if the
143 trigraph should be honoured. FROM_CHAR is the third character of a
144 trigraph, and presumed to be the previous character for position
145 reporting. */
146 static int
147 trigraph_ok (pfile, from_char)
148 cpp_reader *pfile;
149 cppchar_t from_char;
150 {
151 int accept = CPP_OPTION (pfile, trigraphs);
152
153 /* Don't warn about trigraphs in comments. */
154 if (CPP_OPTION (pfile, warn_trigraphs) && !pfile->state.lexing_comment)
155 {
156 cpp_buffer *buffer = pfile->buffer;
157 if (accept)
158 cpp_warning_with_line (pfile, buffer->lineno, CPP_BUF_COL (buffer) - 2,
159 "trigraph ??%c converted to %c",
160 (int) from_char,
161 (int) _cpp_trigraph_map[from_char]);
162 else
163 cpp_warning_with_line (pfile, buffer->lineno, CPP_BUF_COL (buffer) - 2,
164 "trigraph ??%c ignored", (int) from_char);
165 }
166
167 return accept;
168 }
169
170 /* Assumes local variables buffer and result. */
171 #define ACCEPT_CHAR(t) \
172 do { result->type = t; buffer->read_ahead = EOF; } while (0)
173
174 /* When we move to multibyte character sets, add to these something
175 that saves and restores the state of the multibyte conversion
176 library. This probably involves saving and restoring a "cookie".
177 In the case of glibc it is an 8-byte structure, so is not a high
178 overhead operation. In any case, it's out of the fast path. */
179 #define SAVE_STATE() do { saved_cur = buffer->cur; } while (0)
180 #define RESTORE_STATE() do { buffer->cur = saved_cur; } while (0)
181
182 /* Skips any escaped newlines introduced by NEXT, which is either a
183 '?' or a '\\'. Returns the next character, which will also have
184 been placed in buffer->read_ahead. This routine performs
185 preprocessing stages 1 and 2 of the ISO C standard. */
186 static cppchar_t
187 skip_escaped_newlines (buffer, next)
188 cpp_buffer *buffer;
189 cppchar_t next;
190 {
191 /* Only do this if we apply stages 1 and 2. */
192 if (!buffer->from_stage3)
193 {
194 cppchar_t next1;
195 const unsigned char *saved_cur;
196 int space;
197
198 do
199 {
200 if (buffer->cur == buffer->rlimit)
201 break;
202
203 SAVE_STATE ();
204 if (next == '?')
205 {
206 next1 = *buffer->cur++;
207 if (next1 != '?' || buffer->cur == buffer->rlimit)
208 {
209 RESTORE_STATE ();
210 break;
211 }
212
213 next1 = *buffer->cur++;
214 if (!_cpp_trigraph_map[next1]
215 || !trigraph_ok (buffer->pfile, next1))
216 {
217 RESTORE_STATE ();
218 break;
219 }
220
221 /* We have a full trigraph here. */
222 next = _cpp_trigraph_map[next1];
223 if (next != '\\' || buffer->cur == buffer->rlimit)
224 break;
225 SAVE_STATE ();
226 }
227
228 /* We have a backslash, and room for at least one more character. */
229 space = 0;
230 do
231 {
232 next1 = *buffer->cur++;
233 if (!is_nvspace (next1))
234 break;
235 space = 1;
236 }
237 while (buffer->cur < buffer->rlimit);
238
239 if (!is_vspace (next1))
240 {
241 RESTORE_STATE ();
242 break;
243 }
244
245 if (space)
246 cpp_warning (buffer->pfile,
247 "backslash and newline separated by space");
248
249 next = handle_newline (buffer, next1);
250 if (next == EOF)
251 cpp_pedwarn (buffer->pfile, "backslash-newline at end of file");
252 }
253 while (next == '\\' || next == '?');
254 }
255
256 buffer->read_ahead = next;
257 return next;
258 }
259
260 /* Obtain the next character, after trigraph conversion and skipping
261 an arbitrary string of escaped newlines. The common case of no
262 trigraphs or escaped newlines falls through quickly. */
263 static cppchar_t
264 get_effective_char (buffer)
265 cpp_buffer *buffer;
266 {
267 cppchar_t next = EOF;
268
269 if (buffer->cur < buffer->rlimit)
270 {
271 next = *buffer->cur++;
272
273 /* '?' can introduce trigraphs (and therefore backslash); '\\'
274 can introduce escaped newlines, which we want to skip, or
275 UCNs, which, depending upon lexer state, we will handle in
276 the future. */
277 if (next == '?' || next == '\\')
278 next = skip_escaped_newlines (buffer, next);
279 }
280
281 buffer->read_ahead = next;
282 return next;
283 }
284
285 /* Skip a C-style block comment. We find the end of the comment by
286 seeing if an asterisk is before every '/' we encounter. Returns
287 non-zero if comment terminated by EOF, zero otherwise. */
288 static int
289 skip_block_comment (pfile)
290 cpp_reader *pfile;
291 {
292 cpp_buffer *buffer = pfile->buffer;
293 cppchar_t c = EOF, prevc = EOF;
294
295 pfile->state.lexing_comment = 1;
296 while (buffer->cur != buffer->rlimit)
297 {
298 prevc = c, c = *buffer->cur++;
299
300 next_char:
301 /* FIXME: For speed, create a new character class of characters
302 of interest inside block comments. */
303 if (c == '?' || c == '\\')
304 c = skip_escaped_newlines (buffer, c);
305
306 /* People like decorating comments with '*', so check for '/'
307 instead for efficiency. */
308 if (c == '/')
309 {
310 if (prevc == '*')
311 break;
312
313 /* Warn about potential nested comments, but not if the '/'
314 comes immediately before the true comment delimeter.
315 Don't bother to get it right across escaped newlines. */
316 if (CPP_OPTION (pfile, warn_comments)
317 && buffer->cur != buffer->rlimit)
318 {
319 prevc = c, c = *buffer->cur++;
320 if (c == '*' && buffer->cur != buffer->rlimit)
321 {
322 prevc = c, c = *buffer->cur++;
323 if (c != '/')
324 cpp_warning_with_line (pfile, CPP_BUF_LINE (buffer),
325 CPP_BUF_COL (buffer),
326 "\"/*\" within comment");
327 }
328 goto next_char;
329 }
330 }
331 else if (is_vspace (c))
332 {
333 prevc = c, c = handle_newline (buffer, c);
334 goto next_char;
335 }
336 else if (c == '\t')
337 adjust_column (pfile);
338 }
339
340 pfile->state.lexing_comment = 0;
341 buffer->read_ahead = EOF;
342 return c != '/' || prevc != '*';
343 }
344
345 /* Skip a C++ line comment. Handles escaped newlines. Returns
346 non-zero if a multiline comment. The following new line, if any,
347 is left in buffer->read_ahead. */
348 static int
349 skip_line_comment (pfile)
350 cpp_reader *pfile;
351 {
352 cpp_buffer *buffer = pfile->buffer;
353 unsigned int orig_lineno = buffer->lineno;
354 cppchar_t c;
355
356 pfile->state.lexing_comment = 1;
357 do
358 {
359 c = EOF;
360 if (buffer->cur == buffer->rlimit)
361 break;
362
363 c = *buffer->cur++;
364 if (c == '?' || c == '\\')
365 c = skip_escaped_newlines (buffer, c);
366 }
367 while (!is_vspace (c));
368
369 pfile->state.lexing_comment = 0;
370 buffer->read_ahead = c; /* Leave any newline for caller. */
371 return orig_lineno != buffer->lineno;
372 }
373
374 /* pfile->buffer->cur is one beyond the \t character. Update
375 col_adjust so we track the column correctly. */
376 static void
377 adjust_column (pfile)
378 cpp_reader *pfile;
379 {
380 cpp_buffer *buffer = pfile->buffer;
381 unsigned int col = CPP_BUF_COL (buffer) - 1; /* Zero-based column. */
382
383 /* Round it up to multiple of the tabstop, but subtract 1 since the
384 tab itself occupies a character position. */
385 buffer->col_adjust += (CPP_OPTION (pfile, tabstop)
386 - col % CPP_OPTION (pfile, tabstop)) - 1;
387 }
388
389 /* Skips whitespace, saving the next non-whitespace character.
390 Adjusts pfile->col_adjust to account for tabs. Without this,
391 tokens might be assigned an incorrect column. */
392 static void
393 skip_whitespace (pfile, c)
394 cpp_reader *pfile;
395 cppchar_t c;
396 {
397 cpp_buffer *buffer = pfile->buffer;
398 unsigned int warned = 0;
399
400 do
401 {
402 /* Horizontal space always OK. */
403 if (c == ' ')
404 ;
405 else if (c == '\t')
406 adjust_column (pfile);
407 /* Just \f \v or \0 left. */
408 else if (c == '\0')
409 {
410 if (!warned)
411 {
412 cpp_warning (pfile, "null character(s) ignored");
413 warned = 1;
414 }
415 }
416 else if (pfile->state.in_directive && CPP_PEDANTIC (pfile))
417 cpp_pedwarn_with_line (pfile, CPP_BUF_LINE (buffer),
418 CPP_BUF_COL (buffer),
419 "%s in preprocessing directive",
420 c == '\f' ? "form feed" : "vertical tab");
421
422 c = EOF;
423 if (buffer->cur == buffer->rlimit)
424 break;
425 c = *buffer->cur++;
426 }
427 /* We only want non-vertical space, i.e. ' ' \t \f \v \0. */
428 while (is_nvspace (c));
429
430 /* Remember the next character. */
431 buffer->read_ahead = c;
432 }
433
434 /* See if the characters of a number token are valid in a name (no
435 '.', '+' or '-'). */
436 static int
437 name_p (pfile, string)
438 cpp_reader *pfile;
439 const cpp_string *string;
440 {
441 unsigned int i;
442
443 for (i = 0; i < string->len; i++)
444 if (!is_idchar (string->text[i]))
445 return 0;
446
447 return 1;
448 }
449
450 /* Parse an identifier, skipping embedded backslash-newlines.
451 Calculate the hash value of the token while parsing, for improved
452 performance. The hashing algorithm *must* match cpp_lookup(). */
453
454 static cpp_hashnode *
455 parse_identifier (pfile, c)
456 cpp_reader *pfile;
457 cppchar_t c;
458 {
459 cpp_hashnode *result;
460 cpp_buffer *buffer = pfile->buffer;
461 unsigned char *dest, *limit;
462 unsigned int r = 0, saw_dollar = 0;
463
464 dest = POOL_FRONT (&pfile->ident_pool);
465 limit = POOL_LIMIT (&pfile->ident_pool);
466
467 do
468 {
469 do
470 {
471 /* Need room for terminating null. */
472 if (dest + 1 >= limit)
473 limit = _cpp_next_chunk (&pfile->ident_pool, 0, &dest);
474
475 *dest++ = c;
476 r = HASHSTEP (r, c);
477
478 if (c == '$')
479 saw_dollar++;
480
481 c = EOF;
482 if (buffer->cur == buffer->rlimit)
483 break;
484
485 c = *buffer->cur++;
486 }
487 while (is_idchar (c));
488
489 /* Potential escaped newline? */
490 if (c != '?' && c != '\\')
491 break;
492 c = skip_escaped_newlines (buffer, c);
493 }
494 while (is_idchar (c));
495
496 /* Remember the next character. */
497 buffer->read_ahead = c;
498
499 /* $ is not a identifier character in the standard, but is commonly
500 accepted as an extension. Don't warn about it in skipped
501 conditional blocks. */
502 if (saw_dollar && CPP_PEDANTIC (pfile) && ! pfile->skipping)
503 cpp_pedwarn (pfile, "'$' character(s) in identifier");
504
505 /* Identifiers are null-terminated. */
506 *dest = '\0';
507
508 /* This routine commits the memory if necessary. */
509 result = _cpp_lookup_with_hash (pfile,
510 dest - POOL_FRONT (&pfile->ident_pool), r);
511
512 /* Some identifiers require diagnostics when lexed. */
513 if (result->flags & NODE_DIAGNOSTIC && !pfile->skipping)
514 {
515 /* It is allowed to poison the same identifier twice. */
516 if ((result->flags & NODE_POISONED) && !pfile->state.poisoned_ok)
517 cpp_error (pfile, "attempt to use poisoned \"%s\"", result->name);
518
519 /* Constraint 6.10.3.5: __VA_ARGS__ should only appear in the
520 replacement list of a variable-arguments macro. */
521 if (result == pfile->spec_nodes.n__VA_ARGS__
522 && !pfile->state.va_args_ok)
523 cpp_pedwarn (pfile, "__VA_ARGS__ can only appear in the expansion of a C99 variable-argument macro");
524 }
525
526 return result;
527 }
528
529 /* Parse a number, skipping embedded backslash-newlines. */
530 static void
531 parse_number (pfile, number, c, leading_period)
532 cpp_reader *pfile;
533 cpp_string *number;
534 cppchar_t c;
535 int leading_period;
536 {
537 cpp_buffer *buffer = pfile->buffer;
538 cpp_pool *pool = pfile->string_pool;
539 unsigned char *dest, *limit;
540
541 dest = POOL_FRONT (pool);
542 limit = POOL_LIMIT (pool);
543
544 /* Place a leading period. */
545 if (leading_period)
546 {
547 if (dest >= limit)
548 limit = _cpp_next_chunk (pool, 0, &dest);
549 *dest++ = '.';
550 }
551
552 do
553 {
554 do
555 {
556 /* Need room for terminating null. */
557 if (dest + 1 >= limit)
558 limit = _cpp_next_chunk (pool, 0, &dest);
559 *dest++ = c;
560
561 c = EOF;
562 if (buffer->cur == buffer->rlimit)
563 break;
564
565 c = *buffer->cur++;
566 }
567 while (is_numchar (c) || c == '.' || VALID_SIGN (c, dest[-1]));
568
569 /* Potential escaped newline? */
570 if (c != '?' && c != '\\')
571 break;
572 c = skip_escaped_newlines (buffer, c);
573 }
574 while (is_numchar (c) || c == '.' || VALID_SIGN (c, dest[-1]));
575
576 /* Remember the next character. */
577 buffer->read_ahead = c;
578
579 /* Null-terminate the number. */
580 *dest = '\0';
581
582 number->text = POOL_FRONT (pool);
583 number->len = dest - number->text;
584 POOL_COMMIT (pool, number->len + 1);
585 }
586
587 /* Subroutine of parse_string. Emits error for unterminated strings. */
588 static void
589 unterminated (pfile, term)
590 cpp_reader *pfile;
591 int term;
592 {
593 cpp_error (pfile, "missing terminating %c character", term);
594
595 if (term == '\"' && pfile->mlstring_pos.line
596 && pfile->mlstring_pos.line != pfile->lexer_pos.line)
597 {
598 cpp_error_with_line (pfile, pfile->mlstring_pos.line,
599 pfile->mlstring_pos.col,
600 "possible start of unterminated string literal");
601 pfile->mlstring_pos.line = 0;
602 }
603 }
604
605 /* Subroutine of parse_string. */
606 static int
607 unescaped_terminator_p (pfile, dest)
608 cpp_reader *pfile;
609 const unsigned char *dest;
610 {
611 const unsigned char *start, *temp;
612
613 /* In #include-style directives, terminators are not escapeable. */
614 if (pfile->state.angled_headers)
615 return 1;
616
617 start = POOL_FRONT (pfile->string_pool);
618
619 /* An odd number of consecutive backslashes represents an escaped
620 terminator. */
621 for (temp = dest; temp > start && temp[-1] == '\\'; temp--)
622 ;
623
624 return ((dest - temp) & 1) == 0;
625 }
626
627 /* Parses a string, character constant, or angle-bracketed header file
628 name. Handles embedded trigraphs and escaped newlines.
629
630 Multi-line strings are allowed, but they are deprecated within
631 directives. */
632 static void
633 parse_string (pfile, token, terminator)
634 cpp_reader *pfile;
635 cpp_token *token;
636 cppchar_t terminator;
637 {
638 cpp_buffer *buffer = pfile->buffer;
639 cpp_pool *pool = pfile->string_pool;
640 unsigned char *dest, *limit;
641 cppchar_t c;
642 unsigned int nulls = 0;
643
644 dest = POOL_FRONT (pool);
645 limit = POOL_LIMIT (pool);
646
647 for (;;)
648 {
649 if (buffer->cur == buffer->rlimit)
650 {
651 c = EOF;
652 unterminated (pfile, terminator);
653 break;
654 }
655 c = *buffer->cur++;
656
657 have_char:
658 /* Handle trigraphs, escaped newlines etc. */
659 if (c == '?' || c == '\\')
660 c = skip_escaped_newlines (buffer, c);
661
662 if (c == terminator && unescaped_terminator_p (pfile, dest))
663 {
664 c = EOF;
665 break;
666 }
667 else if (is_vspace (c))
668 {
669 /* In assembly language, silently terminate string and
670 character literals at end of line. This is a kludge
671 around not knowing where comments are. */
672 if (CPP_OPTION (pfile, lang_asm) && terminator != '>')
673 break;
674
675 /* Character constants and header names may not extend over
676 multiple lines. In Standard C, neither may strings.
677 Unfortunately, we accept multiline strings as an
678 extension. */
679 if (terminator != '"')
680 {
681 unterminated (pfile, terminator);
682 break;
683 }
684
685 if (pfile->mlstring_pos.line == 0)
686 {
687 pfile->mlstring_pos = pfile->lexer_pos;
688 if (CPP_PEDANTIC (pfile))
689 cpp_pedwarn (pfile, "multi-line string constant");
690 }
691
692 handle_newline (buffer, c); /* Stores to read_ahead. */
693 c = '\n';
694 }
695 else if (c == '\0')
696 {
697 if (nulls++ == 0)
698 cpp_warning (pfile, "null character(s) preserved in literal");
699 }
700
701 /* No terminating null for strings - they could contain nulls. */
702 if (dest >= limit)
703 limit = _cpp_next_chunk (pool, 0, &dest);
704 *dest++ = c;
705
706 /* If we had a new line, the next character is in read_ahead. */
707 if (c != '\n')
708 continue;
709 c = buffer->read_ahead;
710 if (c != EOF)
711 goto have_char;
712 }
713
714 /* Remember the next character. */
715 buffer->read_ahead = c;
716
717 token->val.str.text = POOL_FRONT (pool);
718 token->val.str.len = dest - token->val.str.text;
719 POOL_COMMIT (pool, token->val.str.len);
720 }
721
722 /* The stored comment includes the comment start and any terminator. */
723 static void
724 save_comment (pfile, token, from)
725 cpp_reader *pfile;
726 cpp_token *token;
727 const unsigned char *from;
728 {
729 unsigned char *buffer;
730 unsigned int len;
731
732 len = pfile->buffer->cur - from + 1; /* + 1 for the initial '/'. */
733 /* C++ comments probably (not definitely) have moved past a new
734 line, which we don't want to save in the comment. */
735 if (pfile->buffer->read_ahead != EOF)
736 len--;
737 buffer = _cpp_pool_alloc (pfile->string_pool, len);
738
739 token->type = CPP_COMMENT;
740 token->val.str.len = len;
741 token->val.str.text = buffer;
742
743 buffer[0] = '/';
744 memcpy (buffer + 1, from, len - 1);
745 }
746
747 /* Subroutine of lex_token to handle '%'. A little tricky, since we
748 want to avoid stepping back when lexing %:%X. */
749 static void
750 lex_percent (buffer, result)
751 cpp_buffer *buffer;
752 cpp_token *result;
753 {
754 cppchar_t c;
755
756 result->type = CPP_MOD;
757 /* Parsing %:%X could leave an extra character. */
758 if (buffer->extra_char == EOF)
759 c = get_effective_char (buffer);
760 else
761 {
762 c = buffer->read_ahead = buffer->extra_char;
763 buffer->extra_char = EOF;
764 }
765
766 if (c == '=')
767 ACCEPT_CHAR (CPP_MOD_EQ);
768 else if (CPP_OPTION (buffer->pfile, digraphs))
769 {
770 if (c == ':')
771 {
772 result->flags |= DIGRAPH;
773 ACCEPT_CHAR (CPP_HASH);
774 if (get_effective_char (buffer) == '%')
775 {
776 buffer->extra_char = get_effective_char (buffer);
777 if (buffer->extra_char == ':')
778 {
779 buffer->extra_char = EOF;
780 ACCEPT_CHAR (CPP_PASTE);
781 }
782 else
783 /* We'll catch the extra_char when we're called back. */
784 buffer->read_ahead = '%';
785 }
786 }
787 else if (c == '>')
788 {
789 result->flags |= DIGRAPH;
790 ACCEPT_CHAR (CPP_CLOSE_BRACE);
791 }
792 }
793 }
794
795 /* Subroutine of lex_token to handle '.'. This is tricky, since we
796 want to avoid stepping back when lexing '...' or '.123'. In the
797 latter case we should also set a flag for parse_number. */
798 static void
799 lex_dot (pfile, result)
800 cpp_reader *pfile;
801 cpp_token *result;
802 {
803 cpp_buffer *buffer = pfile->buffer;
804 cppchar_t c;
805
806 /* Parsing ..X could leave an extra character. */
807 if (buffer->extra_char == EOF)
808 c = get_effective_char (buffer);
809 else
810 {
811 c = buffer->read_ahead = buffer->extra_char;
812 buffer->extra_char = EOF;
813 }
814
815 /* All known character sets have 0...9 contiguous. */
816 if (c >= '0' && c <= '9')
817 {
818 result->type = CPP_NUMBER;
819 parse_number (pfile, &result->val.str, c, 1);
820 }
821 else
822 {
823 result->type = CPP_DOT;
824 if (c == '.')
825 {
826 buffer->extra_char = get_effective_char (buffer);
827 if (buffer->extra_char == '.')
828 {
829 buffer->extra_char = EOF;
830 ACCEPT_CHAR (CPP_ELLIPSIS);
831 }
832 else
833 /* We'll catch the extra_char when we're called back. */
834 buffer->read_ahead = '.';
835 }
836 else if (c == '*' && CPP_OPTION (pfile, cplusplus))
837 ACCEPT_CHAR (CPP_DOT_STAR);
838 }
839 }
840
841 void
842 _cpp_lex_token (pfile, result)
843 cpp_reader *pfile;
844 cpp_token *result;
845 {
846 cppchar_t c;
847 cpp_buffer *buffer = pfile->buffer;
848 const unsigned char *comment_start;
849 unsigned char was_skip_newlines = pfile->state.skip_newlines;
850 unsigned char newline_in_args = 0;
851
852 pfile->state.skip_newlines = 0;
853 result->flags = 0;
854 next_char:
855 pfile->lexer_pos.line = buffer->lineno;
856 next_char2:
857 pfile->lexer_pos.col = CPP_BUF_COLUMN (buffer, buffer->cur);
858
859 c = buffer->read_ahead;
860 if (c == EOF && buffer->cur < buffer->rlimit)
861 {
862 c = *buffer->cur++;
863 pfile->lexer_pos.col++;
864 }
865
866 do_switch:
867 buffer->read_ahead = EOF;
868 switch (c)
869 {
870 case EOF:
871 /* Non-empty files should end in a newline. Ignore for command
872 line and _Pragma buffers. */
873 if (pfile->lexer_pos.col != 0 && !buffer->from_stage3)
874 cpp_pedwarn (pfile, "no newline at end of file");
875 pfile->state.skip_newlines = 1;
876 result->type = CPP_EOF;
877 break;
878
879 case ' ': case '\t': case '\f': case '\v': case '\0':
880 skip_whitespace (pfile, c);
881 result->flags |= PREV_WHITE;
882 goto next_char2;
883
884 case '\n': case '\r':
885 /* Don't let directives spill over to the next line. */
886 if (pfile->state.in_directive)
887 buffer->read_ahead = c;
888 else
889 {
890 handle_newline (buffer, c);
891
892 pfile->lexer_pos.output_line = buffer->lineno;
893
894 /* Skip newlines in macro arguments (except in directives). */
895 if (pfile->state.parsing_args)
896 {
897 /* Set the whitespace flag. */
898 newline_in_args = 1;
899 result->flags |= PREV_WHITE;
900 goto next_char;
901 }
902
903 if (was_skip_newlines)
904 {
905 /* Clear any whitespace flag. */
906 result->flags &= ~PREV_WHITE;
907 goto next_char;
908 }
909 }
910
911 /* Next we're at BOL, so skip new lines. */
912 pfile->state.skip_newlines = 1;
913 result->type = CPP_EOF;
914 break;
915
916 case '?':
917 case '\\':
918 /* These could start an escaped newline, or '?' a trigraph. Let
919 skip_escaped_newlines do all the work. */
920 {
921 unsigned int lineno = buffer->lineno;
922
923 c = skip_escaped_newlines (buffer, c);
924 if (lineno != buffer->lineno)
925 /* We had at least one escaped newline of some sort, and the
926 next character is in buffer->read_ahead. Update the
927 token's line and column. */
928 goto next_char;
929
930 /* We are either the original '?' or '\\', or a trigraph. */
931 result->type = CPP_QUERY;
932 buffer->read_ahead = EOF;
933 if (c == '\\')
934 result->type = CPP_BACKSLASH;
935 else if (c != '?')
936 goto do_switch;
937 }
938 break;
939
940 case '0': case '1': case '2': case '3': case '4':
941 case '5': case '6': case '7': case '8': case '9':
942 result->type = CPP_NUMBER;
943 parse_number (pfile, &result->val.str, c, 0);
944 break;
945
946 case '$':
947 if (!CPP_OPTION (pfile, dollars_in_ident))
948 goto random_char;
949 /* Fall through... */
950
951 case '_':
952 case 'a': case 'b': case 'c': case 'd': case 'e': case 'f':
953 case 'g': case 'h': case 'i': case 'j': case 'k': case 'l':
954 case 'm': case 'n': case 'o': case 'p': case 'q': case 'r':
955 case 's': case 't': case 'u': case 'v': case 'w': case 'x':
956 case 'y': case 'z':
957 case 'A': case 'B': case 'C': case 'D': case 'E': case 'F':
958 case 'G': case 'H': case 'I': case 'J': case 'K': case 'L':
959 case 'M': case 'N': case 'O': case 'P': case 'Q': case 'R':
960 case 'S': case 'T': case 'U': case 'V': case 'W': case 'X':
961 case 'Y': case 'Z':
962 result->type = CPP_NAME;
963 result->val.node = parse_identifier (pfile, c);
964
965 /* 'L' may introduce wide characters or strings. */
966 if (result->val.node == pfile->spec_nodes.n_L)
967 {
968 c = buffer->read_ahead; /* For make_string. */
969 if (c == '\'' || c == '"')
970 {
971 ACCEPT_CHAR (c == '"' ? CPP_WSTRING: CPP_WCHAR);
972 goto make_string;
973 }
974 }
975 /* Convert named operators to their proper types. */
976 else if (result->val.node->flags & NODE_OPERATOR)
977 {
978 result->flags |= NAMED_OP;
979 result->type = result->val.node->value.operator;
980 }
981 break;
982
983 case '\'':
984 case '"':
985 result->type = c == '"' ? CPP_STRING: CPP_CHAR;
986 make_string:
987 parse_string (pfile, result, c);
988 break;
989
990 case '/':
991 /* A potential block or line comment. */
992 comment_start = buffer->cur;
993 result->type = CPP_DIV;
994 c = get_effective_char (buffer);
995 if (c == '=')
996 ACCEPT_CHAR (CPP_DIV_EQ);
997 if (c != '/' && c != '*')
998 break;
999
1000 if (c == '*')
1001 {
1002 if (skip_block_comment (pfile))
1003 cpp_error_with_line (pfile, pfile->lexer_pos.line,
1004 pfile->lexer_pos.col,
1005 "unterminated comment");
1006 }
1007 else
1008 {
1009 if (!CPP_OPTION (pfile, cplusplus_comments)
1010 && !CPP_IN_SYSTEM_HEADER (pfile))
1011 break;
1012
1013 /* We silently allow C++ comments in system headers,
1014 irrespective of conformance mode, because lots of
1015 broken systems do that and trying to clean it up in
1016 fixincludes is a nightmare. */
1017 if (CPP_OPTION (pfile, c89) && CPP_PEDANTIC (pfile)
1018 && ! buffer->warned_cplusplus_comments)
1019 {
1020 cpp_pedwarn (pfile,
1021 "C++ style comments are not allowed in ISO C89");
1022 cpp_pedwarn (pfile,
1023 "(this will be reported only once per input file)");
1024 buffer->warned_cplusplus_comments = 1;
1025 }
1026
1027 /* Skip_line_comment updates buffer->read_ahead. */
1028 if (skip_line_comment (pfile))
1029 cpp_warning_with_line (pfile, pfile->lexer_pos.line,
1030 pfile->lexer_pos.col,
1031 "multi-line comment");
1032 }
1033
1034 /* Skipping the comment has updated buffer->read_ahead. */
1035 if (!pfile->state.save_comments)
1036 {
1037 result->flags |= PREV_WHITE;
1038 goto next_char;
1039 }
1040
1041 /* Save the comment as a token in its own right. */
1042 save_comment (pfile, result, comment_start);
1043 break;
1044
1045 case '<':
1046 if (pfile->state.angled_headers)
1047 {
1048 result->type = CPP_HEADER_NAME;
1049 c = '>'; /* terminator. */
1050 goto make_string;
1051 }
1052
1053 result->type = CPP_LESS;
1054 c = get_effective_char (buffer);
1055 if (c == '=')
1056 ACCEPT_CHAR (CPP_LESS_EQ);
1057 else if (c == '<')
1058 {
1059 ACCEPT_CHAR (CPP_LSHIFT);
1060 if (get_effective_char (buffer) == '=')
1061 ACCEPT_CHAR (CPP_LSHIFT_EQ);
1062 }
1063 else if (c == '?' && CPP_OPTION (pfile, cplusplus))
1064 {
1065 ACCEPT_CHAR (CPP_MIN);
1066 if (get_effective_char (buffer) == '=')
1067 ACCEPT_CHAR (CPP_MIN_EQ);
1068 }
1069 else if (c == ':' && CPP_OPTION (pfile, digraphs))
1070 {
1071 ACCEPT_CHAR (CPP_OPEN_SQUARE);
1072 result->flags |= DIGRAPH;
1073 }
1074 else if (c == '%' && CPP_OPTION (pfile, digraphs))
1075 {
1076 ACCEPT_CHAR (CPP_OPEN_BRACE);
1077 result->flags |= DIGRAPH;
1078 }
1079 break;
1080
1081 case '>':
1082 result->type = CPP_GREATER;
1083 c = get_effective_char (buffer);
1084 if (c == '=')
1085 ACCEPT_CHAR (CPP_GREATER_EQ);
1086 else if (c == '>')
1087 {
1088 ACCEPT_CHAR (CPP_RSHIFT);
1089 if (get_effective_char (buffer) == '=')
1090 ACCEPT_CHAR (CPP_RSHIFT_EQ);
1091 }
1092 else if (c == '?' && CPP_OPTION (pfile, cplusplus))
1093 {
1094 ACCEPT_CHAR (CPP_MAX);
1095 if (get_effective_char (buffer) == '=')
1096 ACCEPT_CHAR (CPP_MAX_EQ);
1097 }
1098 break;
1099
1100 case '%':
1101 lex_percent (buffer, result);
1102 if (result->type == CPP_HASH)
1103 goto do_hash;
1104 break;
1105
1106 case '.':
1107 lex_dot (pfile, result);
1108 break;
1109
1110 case '+':
1111 result->type = CPP_PLUS;
1112 c = get_effective_char (buffer);
1113 if (c == '=')
1114 ACCEPT_CHAR (CPP_PLUS_EQ);
1115 else if (c == '+')
1116 ACCEPT_CHAR (CPP_PLUS_PLUS);
1117 break;
1118
1119 case '-':
1120 result->type = CPP_MINUS;
1121 c = get_effective_char (buffer);
1122 if (c == '>')
1123 {
1124 ACCEPT_CHAR (CPP_DEREF);
1125 if (CPP_OPTION (pfile, cplusplus)
1126 && get_effective_char (buffer) == '*')
1127 ACCEPT_CHAR (CPP_DEREF_STAR);
1128 }
1129 else if (c == '=')
1130 ACCEPT_CHAR (CPP_MINUS_EQ);
1131 else if (c == '-')
1132 ACCEPT_CHAR (CPP_MINUS_MINUS);
1133 break;
1134
1135 case '*':
1136 result->type = CPP_MULT;
1137 if (get_effective_char (buffer) == '=')
1138 ACCEPT_CHAR (CPP_MULT_EQ);
1139 break;
1140
1141 case '=':
1142 result->type = CPP_EQ;
1143 if (get_effective_char (buffer) == '=')
1144 ACCEPT_CHAR (CPP_EQ_EQ);
1145 break;
1146
1147 case '!':
1148 result->type = CPP_NOT;
1149 if (get_effective_char (buffer) == '=')
1150 ACCEPT_CHAR (CPP_NOT_EQ);
1151 break;
1152
1153 case '&':
1154 result->type = CPP_AND;
1155 c = get_effective_char (buffer);
1156 if (c == '=')
1157 ACCEPT_CHAR (CPP_AND_EQ);
1158 else if (c == '&')
1159 ACCEPT_CHAR (CPP_AND_AND);
1160 break;
1161
1162 case '#':
1163 if (get_effective_char (buffer) == '#')
1164 ACCEPT_CHAR (CPP_PASTE);
1165 else
1166 {
1167 result->type = CPP_HASH;
1168 do_hash:
1169 /* CPP_DHASH is the hash introducing a directive. */
1170 if (was_skip_newlines || newline_in_args)
1171 {
1172 result->type = CPP_DHASH;
1173 /* Get whitespace right - newline_in_args sets it. */
1174 if (pfile->lexer_pos.col == 1)
1175 result->flags &= ~PREV_WHITE;
1176 }
1177 }
1178 break;
1179
1180 case '|':
1181 result->type = CPP_OR;
1182 c = get_effective_char (buffer);
1183 if (c == '=')
1184 ACCEPT_CHAR (CPP_OR_EQ);
1185 else if (c == '|')
1186 ACCEPT_CHAR (CPP_OR_OR);
1187 break;
1188
1189 case '^':
1190 result->type = CPP_XOR;
1191 if (get_effective_char (buffer) == '=')
1192 ACCEPT_CHAR (CPP_XOR_EQ);
1193 break;
1194
1195 case ':':
1196 result->type = CPP_COLON;
1197 c = get_effective_char (buffer);
1198 if (c == ':' && CPP_OPTION (pfile, cplusplus))
1199 ACCEPT_CHAR (CPP_SCOPE);
1200 else if (c == '>' && CPP_OPTION (pfile, digraphs))
1201 {
1202 result->flags |= DIGRAPH;
1203 ACCEPT_CHAR (CPP_CLOSE_SQUARE);
1204 }
1205 break;
1206
1207 case '~': result->type = CPP_COMPL; break;
1208 case ',': result->type = CPP_COMMA; break;
1209 case '(': result->type = CPP_OPEN_PAREN; break;
1210 case ')': result->type = CPP_CLOSE_PAREN; break;
1211 case '[': result->type = CPP_OPEN_SQUARE; break;
1212 case ']': result->type = CPP_CLOSE_SQUARE; break;
1213 case '{': result->type = CPP_OPEN_BRACE; break;
1214 case '}': result->type = CPP_CLOSE_BRACE; break;
1215 case ';': result->type = CPP_SEMICOLON; break;
1216
1217 case '@':
1218 if (CPP_OPTION (pfile, objc))
1219 {
1220 /* In Objective C, '@' may begin keywords or strings, like
1221 @keyword or @"string". It would be nice to call
1222 get_effective_char here and test the result. However, we
1223 would then need to pass 2 characters to parse_identifier,
1224 making it ugly and slowing down its main loop. Instead,
1225 we assume we have an identifier, and recover if not. */
1226 result->type = CPP_NAME;
1227 result->val.node = parse_identifier (pfile, c);
1228 if (result->val.node->length != 1)
1229 break;
1230
1231 /* OK, so it wasn't an identifier. Maybe a string? */
1232 if (buffer->read_ahead == '"')
1233 {
1234 c = '"';
1235 ACCEPT_CHAR (CPP_OSTRING);
1236 goto make_string;
1237 }
1238 }
1239 goto random_char;
1240
1241 random_char:
1242 default:
1243 result->type = CPP_OTHER;
1244 result->val.aux = c;
1245 break;
1246 }
1247 }
1248
1249 /* An upper bound on the number of bytes needed to spell a token,
1250 including preceding whitespace. */
1251 unsigned int
1252 cpp_token_len (token)
1253 const cpp_token *token;
1254 {
1255 unsigned int len;
1256
1257 switch (TOKEN_SPELL (token))
1258 {
1259 default: len = 0; break;
1260 case SPELL_STRING: len = token->val.str.len; break;
1261 case SPELL_IDENT: len = token->val.node->length; break;
1262 }
1263 /* 1 for whitespace, 4 for comment delimeters. */
1264 return len + 5;
1265 }
1266
1267 /* Write the spelling of a token TOKEN to BUFFER. The buffer must
1268 already contain the enough space to hold the token's spelling.
1269 Returns a pointer to the character after the last character
1270 written. */
1271 unsigned char *
1272 cpp_spell_token (pfile, token, buffer)
1273 cpp_reader *pfile; /* Would be nice to be rid of this... */
1274 const cpp_token *token;
1275 unsigned char *buffer;
1276 {
1277 switch (TOKEN_SPELL (token))
1278 {
1279 case SPELL_OPERATOR:
1280 {
1281 const unsigned char *spelling;
1282 unsigned char c;
1283
1284 if (token->flags & DIGRAPH)
1285 spelling = digraph_spellings[token->type - CPP_FIRST_DIGRAPH];
1286 else if (token->flags & NAMED_OP)
1287 goto spell_ident;
1288 else
1289 spelling = TOKEN_NAME (token);
1290
1291 while ((c = *spelling++) != '\0')
1292 *buffer++ = c;
1293 }
1294 break;
1295
1296 case SPELL_IDENT:
1297 spell_ident:
1298 memcpy (buffer, token->val.node->name, token->val.node->length);
1299 buffer += token->val.node->length;
1300 break;
1301
1302 case SPELL_STRING:
1303 {
1304 int left, right, tag;
1305 switch (token->type)
1306 {
1307 case CPP_STRING: left = '"'; right = '"'; tag = '\0'; break;
1308 case CPP_WSTRING: left = '"'; right = '"'; tag = 'L'; break;
1309 case CPP_OSTRING: left = '"'; right = '"'; tag = '@'; break;
1310 case CPP_CHAR: left = '\''; right = '\''; tag = '\0'; break;
1311 case CPP_WCHAR: left = '\''; right = '\''; tag = 'L'; break;
1312 case CPP_HEADER_NAME: left = '<'; right = '>'; tag = '\0'; break;
1313 default: left = '\0'; right = '\0'; tag = '\0'; break;
1314 }
1315 if (tag) *buffer++ = tag;
1316 if (left) *buffer++ = left;
1317 memcpy (buffer, token->val.str.text, token->val.str.len);
1318 buffer += token->val.str.len;
1319 if (right) *buffer++ = right;
1320 }
1321 break;
1322
1323 case SPELL_CHAR:
1324 *buffer++ = token->val.aux;
1325 break;
1326
1327 case SPELL_NONE:
1328 cpp_ice (pfile, "Unspellable token %s", TOKEN_NAME (token));
1329 break;
1330 }
1331
1332 return buffer;
1333 }
1334
1335 /* Returns a token as a null-terminated string. The string is
1336 temporary, and automatically freed later. Useful for diagnostics. */
1337 unsigned char *
1338 cpp_token_as_text (pfile, token)
1339 cpp_reader *pfile;
1340 const cpp_token *token;
1341 {
1342 unsigned int len = cpp_token_len (token);
1343 unsigned char *start = _cpp_pool_alloc (&pfile->temp_string_pool, len), *end;
1344
1345 end = cpp_spell_token (pfile, token, start);
1346 end[0] = '\0';
1347
1348 return start;
1349 }
1350
1351 /* Used by C front ends. Should really move to using cpp_token_as_text. */
1352 const char *
1353 cpp_type2name (type)
1354 enum cpp_ttype type;
1355 {
1356 return (const char *) token_spellings[type].name;
1357 }
1358
1359 /* Writes the spelling of token to FP. Separate from cpp_spell_token
1360 for efficiency - to avoid double-buffering. Also, outputs a space
1361 if PREV_WHITE is flagged. */
1362 void
1363 cpp_output_token (token, fp)
1364 const cpp_token *token;
1365 FILE *fp;
1366 {
1367 if (token->flags & PREV_WHITE)
1368 putc (' ', fp);
1369
1370 switch (TOKEN_SPELL (token))
1371 {
1372 case SPELL_OPERATOR:
1373 {
1374 const unsigned char *spelling;
1375
1376 if (token->flags & DIGRAPH)
1377 spelling = digraph_spellings[token->type - CPP_FIRST_DIGRAPH];
1378 else if (token->flags & NAMED_OP)
1379 goto spell_ident;
1380 else
1381 spelling = TOKEN_NAME (token);
1382
1383 ufputs (spelling, fp);
1384 }
1385 break;
1386
1387 spell_ident:
1388 case SPELL_IDENT:
1389 ufputs (token->val.node->name, fp);
1390 break;
1391
1392 case SPELL_STRING:
1393 {
1394 int left, right, tag;
1395 switch (token->type)
1396 {
1397 case CPP_STRING: left = '"'; right = '"'; tag = '\0'; break;
1398 case CPP_WSTRING: left = '"'; right = '"'; tag = 'L'; break;
1399 case CPP_OSTRING: left = '"'; right = '"'; tag = '@'; break;
1400 case CPP_CHAR: left = '\''; right = '\''; tag = '\0'; break;
1401 case CPP_WCHAR: left = '\''; right = '\''; tag = 'L'; break;
1402 case CPP_HEADER_NAME: left = '<'; right = '>'; tag = '\0'; break;
1403 default: left = '\0'; right = '\0'; tag = '\0'; break;
1404 }
1405 if (tag) putc (tag, fp);
1406 if (left) putc (left, fp);
1407 fwrite (token->val.str.text, 1, token->val.str.len, fp);
1408 if (right) putc (right, fp);
1409 }
1410 break;
1411
1412 case SPELL_CHAR:
1413 putc (token->val.aux, fp);
1414 break;
1415
1416 case SPELL_NONE:
1417 /* An error, most probably. */
1418 break;
1419 }
1420 }
1421
1422 /* Compare two tokens. */
1423 int
1424 _cpp_equiv_tokens (a, b)
1425 const cpp_token *a, *b;
1426 {
1427 if (a->type == b->type && a->flags == b->flags)
1428 switch (TOKEN_SPELL (a))
1429 {
1430 default: /* Keep compiler happy. */
1431 case SPELL_OPERATOR:
1432 return 1;
1433 case SPELL_CHAR:
1434 return a->val.aux == b->val.aux; /* Character. */
1435 case SPELL_NONE:
1436 return (a->type != CPP_MACRO_ARG || a->val.aux == b->val.aux);
1437 case SPELL_IDENT:
1438 return a->val.node == b->val.node;
1439 case SPELL_STRING:
1440 return (a->val.str.len == b->val.str.len
1441 && !memcmp (a->val.str.text, b->val.str.text,
1442 a->val.str.len));
1443 }
1444
1445 return 0;
1446 }
1447
1448 #if 0
1449 /* Compare two token lists. */
1450 int
1451 _cpp_equiv_toklists (a, b)
1452 const struct toklist *a, *b;
1453 {
1454 unsigned int i, count;
1455
1456 count = a->limit - a->first;
1457 if (count != (b->limit - b->first))
1458 return 0;
1459
1460 for (i = 0; i < count; i++)
1461 if (! _cpp_equiv_tokens (&a->first[i], &b->first[i]))
1462 return 0;
1463
1464 return 1;
1465 }
1466 #endif
1467
1468 /* Determine whether two tokens can be pasted together, and if so,
1469 what the resulting token is. Returns CPP_EOF if the tokens cannot
1470 be pasted, or the appropriate type for the merged token if they
1471 can. */
1472 enum cpp_ttype
1473 cpp_can_paste (pfile, token1, token2, digraph)
1474 cpp_reader * pfile;
1475 const cpp_token *token1, *token2;
1476 int* digraph;
1477 {
1478 enum cpp_ttype a = token1->type, b = token2->type;
1479 int cxx = CPP_OPTION (pfile, cplusplus);
1480
1481 /* Treat named operators as if they were ordinary NAMEs. */
1482 if (token1->flags & NAMED_OP)
1483 a = CPP_NAME;
1484 if (token2->flags & NAMED_OP)
1485 b = CPP_NAME;
1486
1487 if (a <= CPP_LAST_EQ && b == CPP_EQ)
1488 return a + (CPP_EQ_EQ - CPP_EQ);
1489
1490 switch (a)
1491 {
1492 case CPP_GREATER:
1493 if (b == a) return CPP_RSHIFT;
1494 if (b == CPP_QUERY && cxx) return CPP_MAX;
1495 if (b == CPP_GREATER_EQ) return CPP_RSHIFT_EQ;
1496 break;
1497 case CPP_LESS:
1498 if (b == a) return CPP_LSHIFT;
1499 if (b == CPP_QUERY && cxx) return CPP_MIN;
1500 if (b == CPP_LESS_EQ) return CPP_LSHIFT_EQ;
1501 if (CPP_OPTION (pfile, digraphs))
1502 {
1503 if (b == CPP_COLON)
1504 {*digraph = 1; return CPP_OPEN_SQUARE;} /* <: digraph */
1505 if (b == CPP_MOD)
1506 {*digraph = 1; return CPP_OPEN_BRACE;} /* <% digraph */
1507 }
1508 break;
1509
1510 case CPP_PLUS: if (b == a) return CPP_PLUS_PLUS; break;
1511 case CPP_AND: if (b == a) return CPP_AND_AND; break;
1512 case CPP_OR: if (b == a) return CPP_OR_OR; break;
1513
1514 case CPP_MINUS:
1515 if (b == a) return CPP_MINUS_MINUS;
1516 if (b == CPP_GREATER) return CPP_DEREF;
1517 break;
1518 case CPP_COLON:
1519 if (b == a && cxx) return CPP_SCOPE;
1520 if (b == CPP_GREATER && CPP_OPTION (pfile, digraphs))
1521 {*digraph = 1; return CPP_CLOSE_SQUARE;} /* :> digraph */
1522 break;
1523
1524 case CPP_MOD:
1525 if (CPP_OPTION (pfile, digraphs))
1526 {
1527 if (b == CPP_GREATER)
1528 {*digraph = 1; return CPP_CLOSE_BRACE;} /* %> digraph */
1529 if (b == CPP_COLON)
1530 {*digraph = 1; return CPP_HASH;} /* %: digraph */
1531 }
1532 break;
1533 case CPP_DEREF:
1534 if (b == CPP_MULT && cxx) return CPP_DEREF_STAR;
1535 break;
1536 case CPP_DOT:
1537 if (b == CPP_MULT && cxx) return CPP_DOT_STAR;
1538 if (b == CPP_NUMBER) return CPP_NUMBER;
1539 break;
1540
1541 case CPP_HASH:
1542 if (b == a && (token1->flags & DIGRAPH) == (token2->flags & DIGRAPH))
1543 /* %:%: digraph */
1544 {*digraph = (token1->flags & DIGRAPH); return CPP_PASTE;}
1545 break;
1546
1547 case CPP_NAME:
1548 if (b == CPP_NAME) return CPP_NAME;
1549 if (b == CPP_NUMBER
1550 && name_p (pfile, &token2->val.str)) return CPP_NAME;
1551 if (b == CPP_CHAR
1552 && token1->val.node == pfile->spec_nodes.n_L) return CPP_WCHAR;
1553 if (b == CPP_STRING
1554 && token1->val.node == pfile->spec_nodes.n_L) return CPP_WSTRING;
1555 break;
1556
1557 case CPP_NUMBER:
1558 if (b == CPP_NUMBER) return CPP_NUMBER;
1559 if (b == CPP_NAME) return CPP_NUMBER;
1560 if (b == CPP_DOT) return CPP_NUMBER;
1561 /* Numbers cannot have length zero, so this is safe. */
1562 if ((b == CPP_PLUS || b == CPP_MINUS)
1563 && VALID_SIGN ('+', token1->val.str.text[token1->val.str.len - 1]))
1564 return CPP_NUMBER;
1565 break;
1566
1567 case CPP_OTHER:
1568 if (CPP_OPTION (pfile, objc) && token1->val.aux == '@')
1569 {
1570 if (b == CPP_NAME) return CPP_NAME;
1571 if (b == CPP_STRING) return CPP_OSTRING;
1572 }
1573
1574 default:
1575 break;
1576 }
1577
1578 return CPP_EOF;
1579 }
1580
1581 /* Returns nonzero if a space should be inserted to avoid an
1582 accidental token paste for output. For simplicity, it is
1583 conservative, and occasionally advises a space where one is not
1584 needed, e.g. "." and ".2". */
1585
1586 int
1587 cpp_avoid_paste (pfile, token1, token2)
1588 cpp_reader *pfile;
1589 const cpp_token *token1, *token2;
1590 {
1591 enum cpp_ttype a = token1->type, b = token2->type;
1592 cppchar_t c;
1593
1594 if (token1->flags & NAMED_OP)
1595 a = CPP_NAME;
1596 if (token2->flags & NAMED_OP)
1597 b = CPP_NAME;
1598
1599 c = EOF;
1600 if (token2->flags & DIGRAPH)
1601 c = digraph_spellings[b - CPP_FIRST_DIGRAPH][0];
1602 else if (token_spellings[b].category == SPELL_OPERATOR)
1603 c = token_spellings[b].name[0];
1604
1605 /* Quickly get everything that can paste with an '='. */
1606 if (a <= CPP_LAST_EQ && c == '=')
1607 return 1;
1608
1609 switch (a)
1610 {
1611 case CPP_GREATER: return c == '>' || c == '?';
1612 case CPP_LESS: return c == '<' || c == '?' || c == '%' || c == ':';
1613 case CPP_PLUS: return c == '+';
1614 case CPP_MINUS: return c == '-' || c == '>';
1615 case CPP_DIV: return c == '/' || c == '*'; /* Comments. */
1616 case CPP_MOD: return c == ':' || c == '>';
1617 case CPP_AND: return c == '&';
1618 case CPP_OR: return c == '|';
1619 case CPP_COLON: return c == ':' || c == '>';
1620 case CPP_DEREF: return c == '*';
1621 case CPP_DOT: return c == '.' || c == '%';
1622 case CPP_HASH: return c == '#' || c == '%'; /* Digraph form. */
1623 case CPP_NAME: return ((b == CPP_NUMBER
1624 && name_p (pfile, &token2->val.str))
1625 || b == CPP_NAME
1626 || b == CPP_CHAR || b == CPP_STRING); /* L */
1627 case CPP_NUMBER: return (b == CPP_NUMBER || b == CPP_NAME
1628 || c == '.' || c == '+' || c == '-');
1629 case CPP_OTHER: return (CPP_OPTION (pfile, objc)
1630 && token1->val.aux == '@'
1631 && (b == CPP_NAME || b == CPP_STRING));
1632 default: break;
1633 }
1634
1635 return 0;
1636 }
1637
1638 /* Output all the remaining tokens on the current line, and a newline
1639 character, to FP. Leading whitespace is removed. */
1640 void
1641 cpp_output_line (pfile, fp)
1642 cpp_reader *pfile;
1643 FILE *fp;
1644 {
1645 cpp_token token;
1646
1647 _cpp_get_token (pfile, &token);
1648 token.flags &= ~PREV_WHITE;
1649 while (token.type != CPP_EOF)
1650 {
1651 cpp_output_token (&token, fp);
1652 _cpp_get_token (pfile, &token);
1653 }
1654
1655 putc ('\n', fp);
1656 }
1657
1658 /* Memory pools. */
1659
1660 struct dummy
1661 {
1662 char c;
1663 union
1664 {
1665 double d;
1666 int *p;
1667 } u;
1668 };
1669
1670 #define DEFAULT_ALIGNMENT (offsetof (struct dummy, u))
1671
1672 static int
1673 chunk_suitable (pool, chunk, size)
1674 cpp_pool *pool;
1675 cpp_chunk *chunk;
1676 unsigned int size;
1677 {
1678 /* Being at least twice SIZE means we can use memcpy in
1679 _cpp_next_chunk rather than memmove. Besides, it's a good idea
1680 anyway. */
1681 return (chunk && pool->locked != chunk
1682 && (unsigned int) (chunk->limit - chunk->base) >= size * 2);
1683 }
1684
1685 /* Returns the end of the new pool. PTR points to a char in the old
1686 pool, and is updated to point to the same char in the new pool. */
1687 unsigned char *
1688 _cpp_next_chunk (pool, len, ptr)
1689 cpp_pool *pool;
1690 unsigned int len;
1691 unsigned char **ptr;
1692 {
1693 cpp_chunk *chunk = pool->cur->next;
1694
1695 /* LEN is the minimum size we want in the new pool. */
1696 len += POOL_ROOM (pool);
1697 if (! chunk_suitable (pool, chunk, len))
1698 {
1699 chunk = new_chunk (POOL_SIZE (pool) * 2 + len);
1700
1701 chunk->next = pool->cur->next;
1702 pool->cur->next = chunk;
1703 }
1704
1705 /* Update the pointer before changing chunk's front. */
1706 if (ptr)
1707 *ptr += chunk->base - POOL_FRONT (pool);
1708
1709 memcpy (chunk->base, POOL_FRONT (pool), POOL_ROOM (pool));
1710 chunk->front = chunk->base;
1711
1712 pool->cur = chunk;
1713 return POOL_LIMIT (pool);
1714 }
1715
1716 static cpp_chunk *
1717 new_chunk (size)
1718 unsigned int size;
1719 {
1720 unsigned char *base;
1721 cpp_chunk *result;
1722
1723 size = ALIGN (size, DEFAULT_ALIGNMENT);
1724 base = (unsigned char *) xmalloc (size + sizeof (cpp_chunk));
1725 /* Put the chunk descriptor at the end. Then chunk overruns will
1726 cause obvious chaos. */
1727 result = (cpp_chunk *) (base + size);
1728 result->base = base;
1729 result->front = base;
1730 result->limit = base + size;
1731 result->next = 0;
1732
1733 return result;
1734 }
1735
1736 void
1737 _cpp_init_pool (pool, size, align, temp)
1738 cpp_pool *pool;
1739 unsigned int size, align, temp;
1740 {
1741 if (align == 0)
1742 align = DEFAULT_ALIGNMENT;
1743 if (align & (align - 1))
1744 abort ();
1745 pool->align = align;
1746 pool->cur = new_chunk (size);
1747 pool->locked = 0;
1748 pool->locks = 0;
1749 if (temp)
1750 pool->cur->next = pool->cur;
1751 }
1752
1753 void
1754 _cpp_lock_pool (pool)
1755 cpp_pool *pool;
1756 {
1757 if (pool->locks++ == 0)
1758 pool->locked = pool->cur;
1759 }
1760
1761 void
1762 _cpp_unlock_pool (pool)
1763 cpp_pool *pool;
1764 {
1765 if (--pool->locks == 0)
1766 pool->locked = 0;
1767 }
1768
1769 void
1770 _cpp_free_pool (pool)
1771 cpp_pool *pool;
1772 {
1773 cpp_chunk *chunk = pool->cur, *next;
1774
1775 do
1776 {
1777 next = chunk->next;
1778 free (chunk->base);
1779 chunk = next;
1780 }
1781 while (chunk && chunk != pool->cur);
1782 }
1783
1784 /* Reserve LEN bytes from a memory pool. */
1785 unsigned char *
1786 _cpp_pool_reserve (pool, len)
1787 cpp_pool *pool;
1788 unsigned int len;
1789 {
1790 len = ALIGN (len, pool->align);
1791 if (len > (unsigned int) POOL_ROOM (pool))
1792 _cpp_next_chunk (pool, len, 0);
1793
1794 return POOL_FRONT (pool);
1795 }
1796
1797 /* Allocate LEN bytes from a memory pool. */
1798 unsigned char *
1799 _cpp_pool_alloc (pool, len)
1800 cpp_pool *pool;
1801 unsigned int len;
1802 {
1803 unsigned char *result = _cpp_pool_reserve (pool, len);
1804
1805 POOL_COMMIT (pool, len);
1806 return result;
1807 }