re PR c++/49092 (ice in tree_add_const_value_attribute)
[platform/upstream/gcc.git] / libcpp / lex.c
1 /* CPP Library - lexical analysis.
2    Copyright (C) 2000, 2001, 2002, 2003, 2004, 2005, 2007, 2008, 2009, 2010
3    Free Software Foundation, Inc.
4    Contributed by Per Bothner, 1994-95.
5    Based on CCCP program by Paul Rubin, June 1986
6    Adapted to ANSI C, Richard Stallman, Jan 1987
7    Broken out to separate file, Zack Weinberg, Mar 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 3, 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; see the file COPYING3.  If not see
21 <http://www.gnu.org/licenses/>.  */
22
23 #include "config.h"
24 #include "system.h"
25 #include "cpplib.h"
26 #include "internal.h"
27
28 enum spell_type
29 {
30   SPELL_OPERATOR = 0,
31   SPELL_IDENT,
32   SPELL_LITERAL,
33   SPELL_NONE
34 };
35
36 struct token_spelling
37 {
38   enum spell_type category;
39   const unsigned char *name;
40 };
41
42 static const unsigned char *const digraph_spellings[] =
43 { UC"%:", UC"%:%:", UC"<:", UC":>", UC"<%", UC"%>" };
44
45 #define OP(e, s) { SPELL_OPERATOR, UC s  },
46 #define TK(e, s) { SPELL_ ## s,    UC #e },
47 static const struct token_spelling token_spellings[N_TTYPES] = { TTYPE_TABLE };
48 #undef OP
49 #undef TK
50
51 #define TOKEN_SPELL(token) (token_spellings[(token)->type].category)
52 #define TOKEN_NAME(token) (token_spellings[(token)->type].name)
53
54 static void add_line_note (cpp_buffer *, const uchar *, unsigned int);
55 static int skip_line_comment (cpp_reader *);
56 static void skip_whitespace (cpp_reader *, cppchar_t);
57 static void lex_string (cpp_reader *, cpp_token *, const uchar *);
58 static void save_comment (cpp_reader *, cpp_token *, const uchar *, cppchar_t);
59 static void store_comment (cpp_reader *, cpp_token *);
60 static void create_literal (cpp_reader *, cpp_token *, const uchar *,
61                             unsigned int, enum cpp_ttype);
62 static bool warn_in_comment (cpp_reader *, _cpp_line_note *);
63 static int name_p (cpp_reader *, const cpp_string *);
64 static tokenrun *next_tokenrun (tokenrun *);
65
66 static _cpp_buff *new_buff (size_t);
67
68
69 /* Utility routine:
70
71    Compares, the token TOKEN to the NUL-terminated string STRING.
72    TOKEN must be a CPP_NAME.  Returns 1 for equal, 0 for unequal.  */
73 int
74 cpp_ideq (const cpp_token *token, const char *string)
75 {
76   if (token->type != CPP_NAME)
77     return 0;
78
79   return !ustrcmp (NODE_NAME (token->val.node.node), (const uchar *) string);
80 }
81
82 /* Record a note TYPE at byte POS into the current cleaned logical
83    line.  */
84 static void
85 add_line_note (cpp_buffer *buffer, const uchar *pos, unsigned int type)
86 {
87   if (buffer->notes_used == buffer->notes_cap)
88     {
89       buffer->notes_cap = buffer->notes_cap * 2 + 200;
90       buffer->notes = XRESIZEVEC (_cpp_line_note, buffer->notes,
91                                   buffer->notes_cap);
92     }
93
94   buffer->notes[buffer->notes_used].pos = pos;
95   buffer->notes[buffer->notes_used].type = type;
96   buffer->notes_used++;
97 }
98
99 \f
100 /* Fast path to find line special characters using optimized character
101    scanning algorithms.  Anything complicated falls back to the slow
102    path below.  Since this loop is very hot it's worth doing these kinds
103    of optimizations.
104
105    One of the paths through the ifdefs should provide 
106
107      const uchar *search_line_fast (const uchar *s, const uchar *end);
108
109    Between S and END, search for \n, \r, \\, ?.  Return a pointer to
110    the found character.
111
112    Note that the last character of the buffer is *always* a newline,
113    as forced by _cpp_convert_input.  This fact can be used to avoid
114    explicitly looking for the end of the buffer.  */
115
116 /* Configure gives us an ifdef test.  */
117 #ifndef WORDS_BIGENDIAN
118 #define WORDS_BIGENDIAN 0
119 #endif
120
121 /* We'd like the largest integer that fits into a register.  There's nothing
122    in <stdint.h> that gives us that.  For most hosts this is unsigned long,
123    but MS decided on an LLP64 model.  Thankfully when building with GCC we
124    can get the "real" word size.  */
125 #ifdef __GNUC__
126 typedef unsigned int word_type __attribute__((__mode__(__word__)));
127 #else
128 typedef unsigned long word_type;
129 #endif
130
131 /* The code below is only expecting sizes 4 or 8.
132    Die at compile-time if this expectation is violated.  */
133 typedef char check_word_type_size
134   [(sizeof(word_type) == 8 || sizeof(word_type) == 4) * 2 - 1];
135
136 /* Return X with the first N bytes forced to values that won't match one
137    of the interesting characters.  Note that NUL is not interesting.  */
138
139 static inline word_type
140 acc_char_mask_misalign (word_type val, unsigned int n)
141 {
142   word_type mask = -1;
143   if (WORDS_BIGENDIAN)
144     mask >>= n * 8;
145   else
146     mask <<= n * 8;
147   return val & mask;
148 }
149
150 /* Return X replicated to all byte positions within WORD_TYPE.  */
151
152 static inline word_type
153 acc_char_replicate (uchar x)
154 {
155   word_type ret;
156
157   ret = (x << 24) | (x << 16) | (x << 8) | x;
158   if (sizeof(word_type) == 8)
159     ret = (ret << 16 << 16) | ret;
160   return ret;
161 }
162
163 /* Return non-zero if some byte of VAL is (probably) C.  */
164
165 static inline word_type
166 acc_char_cmp (word_type val, word_type c)
167 {
168 #if defined(__GNUC__) && defined(__alpha__)
169   /* We can get exact results using a compare-bytes instruction.  
170      Get (val == c) via (0 >= (val ^ c)).  */
171   return __builtin_alpha_cmpbge (0, val ^ c);
172 #else
173   word_type magic = 0x7efefefeU;
174   if (sizeof(word_type) == 8)
175     magic = (magic << 16 << 16) | 0xfefefefeU;
176   magic |= 1;
177
178   val ^= c;
179   return ((val + magic) ^ ~val) & ~magic;
180 #endif
181 }
182
183 /* Given the result of acc_char_cmp is non-zero, return the index of
184    the found character.  If this was a false positive, return -1.  */
185
186 static inline int
187 acc_char_index (word_type cmp ATTRIBUTE_UNUSED,
188                 word_type val ATTRIBUTE_UNUSED)
189 {
190 #if defined(__GNUC__) && defined(__alpha__) && !WORDS_BIGENDIAN
191   /* The cmpbge instruction sets *bits* of the result corresponding to
192      matches in the bytes with no false positives.  */
193   return __builtin_ctzl (cmp);
194 #else
195   unsigned int i;
196
197   /* ??? It would be nice to force unrolling here,
198      and have all of these constants folded.  */
199   for (i = 0; i < sizeof(word_type); ++i)
200     {
201       uchar c;
202       if (WORDS_BIGENDIAN)
203         c = (val >> (sizeof(word_type) - i - 1) * 8) & 0xff;
204       else
205         c = (val >> i * 8) & 0xff;
206
207       if (c == '\n' || c == '\r' || c == '\\' || c == '?')
208         return i;
209     }
210
211   return -1;
212 #endif
213 }
214
215 /* A version of the fast scanner using bit fiddling techniques.
216  
217    For 32-bit words, one would normally perform 16 comparisons and
218    16 branches.  With this algorithm one performs 24 arithmetic
219    operations and one branch.  Whether this is faster with a 32-bit
220    word size is going to be somewhat system dependent.
221
222    For 64-bit words, we eliminate twice the number of comparisons
223    and branches without increasing the number of arithmetic operations.
224    It's almost certainly going to be a win with 64-bit word size.  */
225
226 static const uchar * search_line_acc_char (const uchar *, const uchar *)
227   ATTRIBUTE_UNUSED;
228
229 static const uchar *
230 search_line_acc_char (const uchar *s, const uchar *end ATTRIBUTE_UNUSED)
231 {
232   const word_type repl_nl = acc_char_replicate ('\n');
233   const word_type repl_cr = acc_char_replicate ('\r');
234   const word_type repl_bs = acc_char_replicate ('\\');
235   const word_type repl_qm = acc_char_replicate ('?');
236
237   unsigned int misalign;
238   const word_type *p;
239   word_type val, t;
240   
241   /* Align the buffer.  Mask out any bytes from before the beginning.  */
242   p = (word_type *)((uintptr_t)s & -sizeof(word_type));
243   val = *p;
244   misalign = (uintptr_t)s & (sizeof(word_type) - 1);
245   if (misalign)
246     val = acc_char_mask_misalign (val, misalign);
247
248   /* Main loop.  */
249   while (1)
250     {
251       t  = acc_char_cmp (val, repl_nl);
252       t |= acc_char_cmp (val, repl_cr);
253       t |= acc_char_cmp (val, repl_bs);
254       t |= acc_char_cmp (val, repl_qm);
255
256       if (__builtin_expect (t != 0, 0))
257         {
258           int i = acc_char_index (t, val);
259           if (i >= 0)
260             return (const uchar *)p + i;
261         }
262
263       val = *++p;
264     }
265 }
266
267 /* Disable on Solaris 2/x86 until the following problems can be properly
268    autoconfed:
269
270    The Solaris 8 assembler cannot assemble SSE2/SSE4.2 insns.
271    The Solaris 9 assembler cannot assemble SSE4.2 insns.
272    Before Solaris 9 Update 6, SSE insns cannot be executed.
273    The Solaris 10+ assembler tags objects with the instruction set
274    extensions used, so SSE4.2 executables cannot run on machines that
275    don't support that extension.  */
276
277 #if (GCC_VERSION >= 4005) && (defined(__i386__) || defined(__x86_64__)) && !(defined(__sun__) && defined(__svr4__))
278
279 /* Replicated character data to be shared between implementations.
280    Recall that outside of a context with vector support we can't
281    define compatible vector types, therefore these are all defined
282    in terms of raw characters.  */
283 static const char repl_chars[4][16] __attribute__((aligned(16))) = {
284   { '\n', '\n', '\n', '\n', '\n', '\n', '\n', '\n',
285     '\n', '\n', '\n', '\n', '\n', '\n', '\n', '\n' },
286   { '\r', '\r', '\r', '\r', '\r', '\r', '\r', '\r',
287     '\r', '\r', '\r', '\r', '\r', '\r', '\r', '\r' },
288   { '\\', '\\', '\\', '\\', '\\', '\\', '\\', '\\',
289     '\\', '\\', '\\', '\\', '\\', '\\', '\\', '\\' },
290   { '?', '?', '?', '?', '?', '?', '?', '?',
291     '?', '?', '?', '?', '?', '?', '?', '?' },
292 };
293
294 /* A version of the fast scanner using MMX vectorized byte compare insns.
295
296    This uses the PMOVMSKB instruction which was introduced with "MMX2",
297    which was packaged into SSE1; it is also present in the AMD 3dNOW-A
298    extension.  Mark the function as using "sse" so that we emit a real
299    "emms" instruction, rather than the 3dNOW "femms" instruction.  */
300
301 static const uchar *
302 #ifndef __SSE__
303 __attribute__((__target__("sse")))
304 #endif
305 search_line_mmx (const uchar *s, const uchar *end ATTRIBUTE_UNUSED)
306 {
307   typedef char v8qi __attribute__ ((__vector_size__ (8)));
308   typedef int __m64 __attribute__ ((__vector_size__ (8), __may_alias__));
309
310   const v8qi repl_nl = *(const v8qi *)repl_chars[0];
311   const v8qi repl_cr = *(const v8qi *)repl_chars[1];
312   const v8qi repl_bs = *(const v8qi *)repl_chars[2];
313   const v8qi repl_qm = *(const v8qi *)repl_chars[3];
314
315   unsigned int misalign, found, mask;
316   const v8qi *p;
317   v8qi data, t, c;
318
319   /* Align the source pointer.  While MMX doesn't generate unaligned data
320      faults, this allows us to safely scan to the end of the buffer without
321      reading beyond the end of the last page.  */
322   misalign = (uintptr_t)s & 7;
323   p = (const v8qi *)((uintptr_t)s & -8);
324   data = *p;
325
326   /* Create a mask for the bytes that are valid within the first
327      16-byte block.  The Idea here is that the AND with the mask
328      within the loop is "free", since we need some AND or TEST
329      insn in order to set the flags for the branch anyway.  */
330   mask = -1u << misalign;
331
332   /* Main loop processing 8 bytes at a time.  */
333   goto start;
334   do
335     {
336       data = *++p;
337       mask = -1;
338
339     start:
340       t = __builtin_ia32_pcmpeqb(data, repl_nl);
341       c = __builtin_ia32_pcmpeqb(data, repl_cr);
342       t = (v8qi) __builtin_ia32_por ((__m64)t, (__m64)c);
343       c = __builtin_ia32_pcmpeqb(data, repl_bs);
344       t = (v8qi) __builtin_ia32_por ((__m64)t, (__m64)c);
345       c = __builtin_ia32_pcmpeqb(data, repl_qm);
346       t = (v8qi) __builtin_ia32_por ((__m64)t, (__m64)c);
347       found = __builtin_ia32_pmovmskb (t);
348       found &= mask;
349     }
350   while (!found);
351
352   __builtin_ia32_emms ();
353
354   /* FOUND contains 1 in bits for which we matched a relevant
355      character.  Conversion to the byte index is trivial.  */
356   found = __builtin_ctz(found);
357   return (const uchar *)p + found;
358 }
359
360 /* A version of the fast scanner using SSE2 vectorized byte compare insns.  */
361
362 static const uchar *
363 #ifndef __SSE2__
364 __attribute__((__target__("sse2")))
365 #endif
366 search_line_sse2 (const uchar *s, const uchar *end ATTRIBUTE_UNUSED)
367 {
368   typedef char v16qi __attribute__ ((__vector_size__ (16)));
369
370   const v16qi repl_nl = *(const v16qi *)repl_chars[0];
371   const v16qi repl_cr = *(const v16qi *)repl_chars[1];
372   const v16qi repl_bs = *(const v16qi *)repl_chars[2];
373   const v16qi repl_qm = *(const v16qi *)repl_chars[3];
374
375   unsigned int misalign, found, mask;
376   const v16qi *p;
377   v16qi data, t;
378
379   /* Align the source pointer.  */
380   misalign = (uintptr_t)s & 15;
381   p = (const v16qi *)((uintptr_t)s & -16);
382   data = *p;
383
384   /* Create a mask for the bytes that are valid within the first
385      16-byte block.  The Idea here is that the AND with the mask
386      within the loop is "free", since we need some AND or TEST
387      insn in order to set the flags for the branch anyway.  */
388   mask = -1u << misalign;
389
390   /* Main loop processing 16 bytes at a time.  */
391   goto start;
392   do
393     {
394       data = *++p;
395       mask = -1;
396
397     start:
398       t  = __builtin_ia32_pcmpeqb128(data, repl_nl);
399       t |= __builtin_ia32_pcmpeqb128(data, repl_cr);
400       t |= __builtin_ia32_pcmpeqb128(data, repl_bs);
401       t |= __builtin_ia32_pcmpeqb128(data, repl_qm);
402       found = __builtin_ia32_pmovmskb128 (t);
403       found &= mask;
404     }
405   while (!found);
406
407   /* FOUND contains 1 in bits for which we matched a relevant
408      character.  Conversion to the byte index is trivial.  */
409   found = __builtin_ctz(found);
410   return (const uchar *)p + found;
411 }
412
413 #ifdef HAVE_SSE4
414 /* A version of the fast scanner using SSE 4.2 vectorized string insns.  */
415
416 static const uchar *
417 #ifndef __SSE4_2__
418 __attribute__((__target__("sse4.2")))
419 #endif
420 search_line_sse42 (const uchar *s, const uchar *end)
421 {
422   typedef char v16qi __attribute__ ((__vector_size__ (16)));
423   static const v16qi search = { '\n', '\r', '?', '\\' };
424
425   uintptr_t si = (uintptr_t)s;
426   uintptr_t index;
427
428   /* Check for unaligned input.  */
429   if (si & 15)
430     {
431       if (__builtin_expect (end - s < 16, 0)
432           && __builtin_expect ((si & 0xfff) > 0xff0, 0))
433         {
434           /* There are less than 16 bytes left in the buffer, and less
435              than 16 bytes left on the page.  Reading 16 bytes at this
436              point might generate a spurious page fault.  Defer to the
437              SSE2 implementation, which already handles alignment.  */
438           return search_line_sse2 (s, end);
439         }
440
441       /* ??? The builtin doesn't understand that the PCMPESTRI read from
442          memory need not be aligned.  */
443       __asm ("%vpcmpestri $0, (%1), %2"
444              : "=c"(index) : "r"(s), "x"(search), "a"(4), "d"(16));
445       if (__builtin_expect (index < 16, 0))
446         goto found;
447
448       /* Advance the pointer to an aligned address.  We will re-scan a
449          few bytes, but we no longer need care for reading past the
450          end of a page, since we're guaranteed a match.  */
451       s = (const uchar *)((si + 16) & -16);
452     }
453
454   /* Main loop, processing 16 bytes at a time.  By doing the whole loop
455      in inline assembly, we can make proper use of the flags set.  */
456   __asm (      "sub $16, %1\n"
457         "       .balign 16\n"
458         "0:     add $16, %1\n"
459         "       %vpcmpestri $0, (%1), %2\n"
460         "       jnc 0b"
461         : "=&c"(index), "+r"(s)
462         : "x"(search), "a"(4), "d"(16));
463
464  found:
465   return s + index;
466 }
467
468 #else
469 /* Work around out-dated assemblers without sse4 support.  */
470 #define search_line_sse42 search_line_sse2
471 #endif
472
473 /* Check the CPU capabilities.  */
474
475 #include "../gcc/config/i386/cpuid.h"
476
477 typedef const uchar * (*search_line_fast_type) (const uchar *, const uchar *);
478 static search_line_fast_type search_line_fast;
479
480 static void __attribute__((constructor))
481 init_vectorized_lexer (void)
482 {
483   unsigned dummy, ecx = 0, edx = 0;
484   search_line_fast_type impl = search_line_acc_char;
485   int minimum = 0;
486
487 #if defined(__SSE4_2__)
488   minimum = 3;
489 #elif defined(__SSE2__)
490   minimum = 2;
491 #elif defined(__SSE__) || defined(__3dNOW_A__)
492   minimum = 1;
493 #endif
494
495   if (minimum == 3)
496     impl = search_line_sse42;
497   else if (__get_cpuid (1, &dummy, &dummy, &ecx, &edx) || minimum == 2)
498     {
499       if (minimum == 3 || (ecx & bit_SSE4_2))
500         impl = search_line_sse42;
501       else if (minimum == 2 || (edx & bit_SSE2))
502         impl = search_line_sse2;
503       else if (minimum == 1 || (edx & bit_SSE))
504         impl = search_line_mmx;
505     }
506   else if (__get_cpuid (0x80000001, &dummy, &dummy, &dummy, &edx))
507     {
508       if (minimum == 1 || edx & bit_3DNOWP)
509         impl = search_line_mmx;
510     }
511
512   search_line_fast = impl;
513 }
514
515 #elif (GCC_VERSION >= 4005) && defined(__ALTIVEC__)
516
517 /* A vection of the fast scanner using AltiVec vectorized byte compares.  */
518 /* ??? Unfortunately, attribute(target("altivec")) is not yet supported,
519    so we can't compile this function without -maltivec on the command line
520    (or implied by some other switch).  */
521
522 static const uchar *
523 search_line_fast (const uchar *s, const uchar *end ATTRIBUTE_UNUSED)
524 {
525   typedef __attribute__((altivec(vector))) unsigned char vc;
526
527   const vc repl_nl = {
528     '\n', '\n', '\n', '\n', '\n', '\n', '\n', '\n', 
529     '\n', '\n', '\n', '\n', '\n', '\n', '\n', '\n'
530   };
531   const vc repl_cr = {
532     '\r', '\r', '\r', '\r', '\r', '\r', '\r', '\r', 
533     '\r', '\r', '\r', '\r', '\r', '\r', '\r', '\r'
534   };
535   const vc repl_bs = {
536     '\\', '\\', '\\', '\\', '\\', '\\', '\\', '\\', 
537     '\\', '\\', '\\', '\\', '\\', '\\', '\\', '\\'
538   };
539   const vc repl_qm = {
540     '?', '?', '?', '?', '?', '?', '?', '?', 
541     '?', '?', '?', '?', '?', '?', '?', '?', 
542   };
543   const vc ones = {
544     -1, -1, -1, -1, -1, -1, -1, -1,
545     -1, -1, -1, -1, -1, -1, -1, -1,
546   };
547   const vc zero = { 0 };
548
549   vc data, mask, t;
550
551   /* Altivec loads automatically mask addresses with -16.  This lets us
552      issue the first load as early as possible.  */
553   data = __builtin_vec_ld(0, (const vc *)s);
554
555   /* Discard bytes before the beginning of the buffer.  Do this by
556      beginning with all ones and shifting in zeros according to the
557      mis-alignment.  The LVSR instruction pulls the exact shift we
558      want from the address.  */
559   mask = __builtin_vec_lvsr(0, s);
560   mask = __builtin_vec_perm(zero, ones, mask);
561   data &= mask;
562
563   /* While altivec loads mask addresses, we still need to align S so
564      that the offset we compute at the end is correct.  */
565   s = (const uchar *)((uintptr_t)s & -16);
566
567   /* Main loop processing 16 bytes at a time.  */
568   goto start;
569   do
570     {
571       vc m_nl, m_cr, m_bs, m_qm;
572
573       s += 16;
574       data = __builtin_vec_ld(0, (const vc *)s);
575
576     start:
577       m_nl = (vc) __builtin_vec_cmpeq(data, repl_nl);
578       m_cr = (vc) __builtin_vec_cmpeq(data, repl_cr);
579       m_bs = (vc) __builtin_vec_cmpeq(data, repl_bs);
580       m_qm = (vc) __builtin_vec_cmpeq(data, repl_qm);
581       t = (m_nl | m_cr) | (m_bs | m_qm);
582
583       /* T now contains 0xff in bytes for which we matched one of the relevant
584          characters.  We want to exit the loop if any byte in T is non-zero.
585          Below is the expansion of vec_any_ne(t, zero).  */
586     }
587   while (!__builtin_vec_vcmpeq_p(/*__CR6_LT_REV*/3, t, zero));
588
589   {
590 #define N  (sizeof(vc) / sizeof(long))
591
592     typedef char check_count[(N == 2 || N == 4) * 2 - 1];
593     union {
594       vc v;
595       unsigned long l[N];
596     } u;
597     unsigned long l, i = 0;
598
599     u.v = t;
600
601     /* Find the first word of T that is non-zero.  */
602     switch (N)
603       {
604       case 4:
605         l = u.l[i++];
606         if (l != 0)
607           break;
608         s += sizeof(unsigned long);
609         l = u.l[i++];
610         if (l != 0)
611           break;
612         s += sizeof(unsigned long);
613       case 2:
614         l = u.l[i++];
615         if (l != 0)
616           break;
617         s += sizeof(unsigned long);
618         l = u.l[i];
619       }
620
621     /* L now contains 0xff in bytes for which we matched one of the
622        relevant characters.  We can find the byte index by finding
623        its bit index and dividing by 8.  */
624     l = __builtin_clzl(l) >> 3;
625     return s + l;
626
627 #undef N
628   }
629 }
630
631 #else
632
633 /* We only have one accellerated alternative.  Use a direct call so that
634    we encourage inlining.  */
635
636 #define search_line_fast  search_line_acc_char
637
638 #endif
639
640 /* Returns with a logical line that contains no escaped newlines or
641    trigraphs.  This is a time-critical inner loop.  */
642 void
643 _cpp_clean_line (cpp_reader *pfile)
644 {
645   cpp_buffer *buffer;
646   const uchar *s;
647   uchar c, *d, *p;
648
649   buffer = pfile->buffer;
650   buffer->cur_note = buffer->notes_used = 0;
651   buffer->cur = buffer->line_base = buffer->next_line;
652   buffer->need_line = false;
653   s = buffer->next_line;
654
655   if (!buffer->from_stage3)
656     {
657       const uchar *pbackslash = NULL;
658
659       /* Fast path.  This is the common case of an un-escaped line with
660          no trigraphs.  The primary win here is by not writing any
661          data back to memory until we have to.  */
662       while (1)
663         {
664           /* Perform an optimized search for \n, \r, \\, ?.  */
665           s = search_line_fast (s, buffer->rlimit);
666
667           c = *s;
668           if (c == '\\')
669             {
670               /* Record the location of the backslash and continue.  */
671               pbackslash = s++;
672             }
673           else if (__builtin_expect (c == '?', 0))
674             {
675               if (__builtin_expect (s[1] == '?', false)
676                    && _cpp_trigraph_map[s[2]])
677                 {
678                   /* Have a trigraph.  We may or may not have to convert
679                      it.  Add a line note regardless, for -Wtrigraphs.  */
680                   add_line_note (buffer, s, s[2]);
681                   if (CPP_OPTION (pfile, trigraphs))
682                     {
683                       /* We do, and that means we have to switch to the
684                          slow path.  */
685                       d = (uchar *) s;
686                       *d = _cpp_trigraph_map[s[2]];
687                       s += 2;
688                       goto slow_path;
689                     }
690                 }
691               /* Not a trigraph.  Continue on fast-path.  */
692               s++;
693             }
694           else
695             break;
696         }
697
698       /* This must be \r or \n.  We're either done, or we'll be forced
699          to write back to the buffer and continue on the slow path.  */
700       d = (uchar *) s;
701
702       if (__builtin_expect (s == buffer->rlimit, false))
703         goto done;
704
705       /* DOS line ending? */
706       if (__builtin_expect (c == '\r', false) && s[1] == '\n')
707         {
708           s++;
709           if (s == buffer->rlimit)
710             goto done;
711         }
712
713       if (__builtin_expect (pbackslash == NULL, true))
714         goto done;
715
716       /* Check for escaped newline.  */
717       p = d;
718       while (is_nvspace (p[-1]))
719         p--;
720       if (p - 1 != pbackslash)
721         goto done;
722
723       /* Have an escaped newline; process it and proceed to
724          the slow path.  */
725       add_line_note (buffer, p - 1, p != d ? ' ' : '\\');
726       d = p - 2;
727       buffer->next_line = p - 1;
728
729     slow_path:
730       while (1)
731         {
732           c = *++s;
733           *++d = c;
734
735           if (c == '\n' || c == '\r')
736             {
737               /* Handle DOS line endings.  */
738               if (c == '\r' && s != buffer->rlimit && s[1] == '\n')
739                 s++;
740               if (s == buffer->rlimit)
741                 break;
742
743               /* Escaped?  */
744               p = d;
745               while (p != buffer->next_line && is_nvspace (p[-1]))
746                 p--;
747               if (p == buffer->next_line || p[-1] != '\\')
748                 break;
749
750               add_line_note (buffer, p - 1, p != d ? ' ': '\\');
751               d = p - 2;
752               buffer->next_line = p - 1;
753             }
754           else if (c == '?' && s[1] == '?' && _cpp_trigraph_map[s[2]])
755             {
756               /* Add a note regardless, for the benefit of -Wtrigraphs.  */
757               add_line_note (buffer, d, s[2]);
758               if (CPP_OPTION (pfile, trigraphs))
759                 {
760                   *d = _cpp_trigraph_map[s[2]];
761                   s += 2;
762                 }
763             }
764         }
765     }
766   else
767     {
768       while (*s != '\n' && *s != '\r')
769         s++;
770       d = (uchar *) s;
771
772       /* Handle DOS line endings.  */
773       if (*s == '\r' && s != buffer->rlimit && s[1] == '\n')
774         s++;
775     }
776
777  done:
778   *d = '\n';
779   /* A sentinel note that should never be processed.  */
780   add_line_note (buffer, d + 1, '\n');
781   buffer->next_line = s + 1;
782 }
783
784 /* Return true if the trigraph indicated by NOTE should be warned
785    about in a comment.  */
786 static bool
787 warn_in_comment (cpp_reader *pfile, _cpp_line_note *note)
788 {
789   const uchar *p;
790
791   /* Within comments we don't warn about trigraphs, unless the
792      trigraph forms an escaped newline, as that may change
793      behavior.  */
794   if (note->type != '/')
795     return false;
796
797   /* If -trigraphs, then this was an escaped newline iff the next note
798      is coincident.  */
799   if (CPP_OPTION (pfile, trigraphs))
800     return note[1].pos == note->pos;
801
802   /* Otherwise, see if this forms an escaped newline.  */
803   p = note->pos + 3;
804   while (is_nvspace (*p))
805     p++;
806
807   /* There might have been escaped newlines between the trigraph and the
808      newline we found.  Hence the position test.  */
809   return (*p == '\n' && p < note[1].pos);
810 }
811
812 /* Process the notes created by add_line_note as far as the current
813    location.  */
814 void
815 _cpp_process_line_notes (cpp_reader *pfile, int in_comment)
816 {
817   cpp_buffer *buffer = pfile->buffer;
818
819   for (;;)
820     {
821       _cpp_line_note *note = &buffer->notes[buffer->cur_note];
822       unsigned int col;
823
824       if (note->pos > buffer->cur)
825         break;
826
827       buffer->cur_note++;
828       col = CPP_BUF_COLUMN (buffer, note->pos + 1);
829
830       if (note->type == '\\' || note->type == ' ')
831         {
832           if (note->type == ' ' && !in_comment)
833             cpp_error_with_line (pfile, CPP_DL_WARNING, pfile->line_table->highest_line, col,
834                                  "backslash and newline separated by space");
835
836           if (buffer->next_line > buffer->rlimit)
837             {
838               cpp_error_with_line (pfile, CPP_DL_PEDWARN, pfile->line_table->highest_line, col,
839                                    "backslash-newline at end of file");
840               /* Prevent "no newline at end of file" warning.  */
841               buffer->next_line = buffer->rlimit;
842             }
843
844           buffer->line_base = note->pos;
845           CPP_INCREMENT_LINE (pfile, 0);
846         }
847       else if (_cpp_trigraph_map[note->type])
848         {
849           if (CPP_OPTION (pfile, warn_trigraphs)
850               && (!in_comment || warn_in_comment (pfile, note)))
851             {
852               if (CPP_OPTION (pfile, trigraphs))
853                 cpp_warning_with_line (pfile, CPP_W_TRIGRAPHS,
854                                        pfile->line_table->highest_line, col,
855                                        "trigraph ??%c converted to %c",
856                                        note->type,
857                                        (int) _cpp_trigraph_map[note->type]);
858               else
859                 {
860                   cpp_warning_with_line 
861                     (pfile, CPP_W_TRIGRAPHS,
862                      pfile->line_table->highest_line, col,
863                      "trigraph ??%c ignored, use -trigraphs to enable",
864                      note->type);
865                 }
866             }
867         }
868       else if (note->type == 0)
869         /* Already processed in lex_raw_string.  */;
870       else
871         abort ();
872     }
873 }
874
875 /* Skip a C-style block comment.  We find the end of the comment by
876    seeing if an asterisk is before every '/' we encounter.  Returns
877    nonzero if comment terminated by EOF, zero otherwise.
878
879    Buffer->cur points to the initial asterisk of the comment.  */
880 bool
881 _cpp_skip_block_comment (cpp_reader *pfile)
882 {
883   cpp_buffer *buffer = pfile->buffer;
884   const uchar *cur = buffer->cur;
885   uchar c;
886
887   cur++;
888   if (*cur == '/')
889     cur++;
890
891   for (;;)
892     {
893       /* People like decorating comments with '*', so check for '/'
894          instead for efficiency.  */
895       c = *cur++;
896
897       if (c == '/')
898         {
899           if (cur[-2] == '*')
900             break;
901
902           /* Warn about potential nested comments, but not if the '/'
903              comes immediately before the true comment delimiter.
904              Don't bother to get it right across escaped newlines.  */
905           if (CPP_OPTION (pfile, warn_comments)
906               && cur[0] == '*' && cur[1] != '/')
907             {
908               buffer->cur = cur;
909               cpp_warning_with_line (pfile, CPP_W_COMMENTS,
910                                      pfile->line_table->highest_line,
911                                      CPP_BUF_COL (buffer),
912                                      "\"/*\" within comment");
913             }
914         }
915       else if (c == '\n')
916         {
917           unsigned int cols;
918           buffer->cur = cur - 1;
919           _cpp_process_line_notes (pfile, true);
920           if (buffer->next_line >= buffer->rlimit)
921             return true;
922           _cpp_clean_line (pfile);
923
924           cols = buffer->next_line - buffer->line_base;
925           CPP_INCREMENT_LINE (pfile, cols);
926
927           cur = buffer->cur;
928         }
929     }
930
931   buffer->cur = cur;
932   _cpp_process_line_notes (pfile, true);
933   return false;
934 }
935
936 /* Skip a C++ line comment, leaving buffer->cur pointing to the
937    terminating newline.  Handles escaped newlines.  Returns nonzero
938    if a multiline comment.  */
939 static int
940 skip_line_comment (cpp_reader *pfile)
941 {
942   cpp_buffer *buffer = pfile->buffer;
943   source_location orig_line = pfile->line_table->highest_line;
944
945   while (*buffer->cur != '\n')
946     buffer->cur++;
947
948   _cpp_process_line_notes (pfile, true);
949   return orig_line != pfile->line_table->highest_line;
950 }
951
952 /* Skips whitespace, saving the next non-whitespace character.  */
953 static void
954 skip_whitespace (cpp_reader *pfile, cppchar_t c)
955 {
956   cpp_buffer *buffer = pfile->buffer;
957   bool saw_NUL = false;
958
959   do
960     {
961       /* Horizontal space always OK.  */
962       if (c == ' ' || c == '\t')
963         ;
964       /* Just \f \v or \0 left.  */
965       else if (c == '\0')
966         saw_NUL = true;
967       else if (pfile->state.in_directive && CPP_PEDANTIC (pfile))
968         cpp_error_with_line (pfile, CPP_DL_PEDWARN, pfile->line_table->highest_line,
969                              CPP_BUF_COL (buffer),
970                              "%s in preprocessing directive",
971                              c == '\f' ? "form feed" : "vertical tab");
972
973       c = *buffer->cur++;
974     }
975   /* We only want non-vertical space, i.e. ' ' \t \f \v \0.  */
976   while (is_nvspace (c));
977
978   if (saw_NUL)
979     cpp_error (pfile, CPP_DL_WARNING, "null character(s) ignored");
980
981   buffer->cur--;
982 }
983
984 /* See if the characters of a number token are valid in a name (no
985    '.', '+' or '-').  */
986 static int
987 name_p (cpp_reader *pfile, const cpp_string *string)
988 {
989   unsigned int i;
990
991   for (i = 0; i < string->len; i++)
992     if (!is_idchar (string->text[i]))
993       return 0;
994
995   return 1;
996 }
997
998 /* After parsing an identifier or other sequence, produce a warning about
999    sequences not in NFC/NFKC.  */
1000 static void
1001 warn_about_normalization (cpp_reader *pfile, 
1002                           const cpp_token *token,
1003                           const struct normalize_state *s)
1004 {
1005   if (CPP_OPTION (pfile, warn_normalize) < NORMALIZE_STATE_RESULT (s)
1006       && !pfile->state.skipping)
1007     {
1008       /* Make sure that the token is printed using UCNs, even
1009          if we'd otherwise happily print UTF-8.  */
1010       unsigned char *buf = XNEWVEC (unsigned char, cpp_token_len (token));
1011       size_t sz;
1012
1013       sz = cpp_spell_token (pfile, token, buf, false) - buf;
1014       if (NORMALIZE_STATE_RESULT (s) == normalized_C)
1015         cpp_warning_with_line (pfile, CPP_W_NORMALIZE, token->src_loc, 0,
1016                                "`%.*s' is not in NFKC", (int) sz, buf);
1017       else
1018         cpp_warning_with_line (pfile, CPP_W_NORMALIZE, token->src_loc, 0,
1019                                "`%.*s' is not in NFC", (int) sz, buf);
1020     }
1021 }
1022
1023 /* Returns TRUE if the sequence starting at buffer->cur is invalid in
1024    an identifier.  FIRST is TRUE if this starts an identifier.  */
1025 static bool
1026 forms_identifier_p (cpp_reader *pfile, int first,
1027                     struct normalize_state *state)
1028 {
1029   cpp_buffer *buffer = pfile->buffer;
1030
1031   if (*buffer->cur == '$')
1032     {
1033       if (!CPP_OPTION (pfile, dollars_in_ident))
1034         return false;
1035
1036       buffer->cur++;
1037       if (CPP_OPTION (pfile, warn_dollars) && !pfile->state.skipping)
1038         {
1039           CPP_OPTION (pfile, warn_dollars) = 0;
1040           cpp_error (pfile, CPP_DL_PEDWARN, "'$' in identifier or number");
1041         }
1042
1043       return true;
1044     }
1045
1046   /* Is this a syntactically valid UCN?  */
1047   if (CPP_OPTION (pfile, extended_identifiers)
1048       && *buffer->cur == '\\'
1049       && (buffer->cur[1] == 'u' || buffer->cur[1] == 'U'))
1050     {
1051       buffer->cur += 2;
1052       if (_cpp_valid_ucn (pfile, &buffer->cur, buffer->rlimit, 1 + !first,
1053                           state))
1054         return true;
1055       buffer->cur -= 2;
1056     }
1057
1058   return false;
1059 }
1060
1061 /* Helper function to get the cpp_hashnode of the identifier BASE.  */
1062 static cpp_hashnode *
1063 lex_identifier_intern (cpp_reader *pfile, const uchar *base)
1064 {
1065   cpp_hashnode *result;
1066   const uchar *cur;
1067   unsigned int len;
1068   unsigned int hash = HT_HASHSTEP (0, *base);
1069
1070   cur = base + 1;
1071   while (ISIDNUM (*cur))
1072     {
1073       hash = HT_HASHSTEP (hash, *cur);
1074       cur++;
1075     }
1076   len = cur - base;
1077   hash = HT_HASHFINISH (hash, len);
1078   result = CPP_HASHNODE (ht_lookup_with_hash (pfile->hash_table,
1079                                               base, len, hash, HT_ALLOC));
1080
1081   /* Rarely, identifiers require diagnostics when lexed.  */
1082   if (__builtin_expect ((result->flags & NODE_DIAGNOSTIC)
1083                         && !pfile->state.skipping, 0))
1084     {
1085       /* It is allowed to poison the same identifier twice.  */
1086       if ((result->flags & NODE_POISONED) && !pfile->state.poisoned_ok)
1087         cpp_error (pfile, CPP_DL_ERROR, "attempt to use poisoned \"%s\"",
1088                    NODE_NAME (result));
1089
1090       /* Constraint 6.10.3.5: __VA_ARGS__ should only appear in the
1091          replacement list of a variadic macro.  */
1092       if (result == pfile->spec_nodes.n__VA_ARGS__
1093           && !pfile->state.va_args_ok)
1094         cpp_error (pfile, CPP_DL_PEDWARN,
1095                    "__VA_ARGS__ can only appear in the expansion"
1096                    " of a C99 variadic macro");
1097
1098       /* For -Wc++-compat, warn about use of C++ named operators.  */
1099       if (result->flags & NODE_WARN_OPERATOR)
1100         cpp_warning (pfile, CPP_W_CXX_OPERATOR_NAMES,
1101                      "identifier \"%s\" is a special operator name in C++",
1102                      NODE_NAME (result));
1103     }
1104
1105   return result;
1106 }
1107
1108 /* Get the cpp_hashnode of an identifier specified by NAME in
1109    the current cpp_reader object.  If none is found, NULL is returned.  */
1110 cpp_hashnode *
1111 _cpp_lex_identifier (cpp_reader *pfile, const char *name)
1112 {
1113   cpp_hashnode *result;
1114   result = lex_identifier_intern (pfile, (uchar *) name);
1115   return result;
1116 }
1117
1118 /* Lex an identifier starting at BUFFER->CUR - 1.  */
1119 static cpp_hashnode *
1120 lex_identifier (cpp_reader *pfile, const uchar *base, bool starts_ucn,
1121                 struct normalize_state *nst)
1122 {
1123   cpp_hashnode *result;
1124   const uchar *cur;
1125   unsigned int len;
1126   unsigned int hash = HT_HASHSTEP (0, *base);
1127
1128   cur = pfile->buffer->cur;
1129   if (! starts_ucn)
1130     while (ISIDNUM (*cur))
1131       {
1132         hash = HT_HASHSTEP (hash, *cur);
1133         cur++;
1134       }
1135   pfile->buffer->cur = cur;
1136   if (starts_ucn || forms_identifier_p (pfile, false, nst))
1137     {
1138       /* Slower version for identifiers containing UCNs (or $).  */
1139       do {
1140         while (ISIDNUM (*pfile->buffer->cur))
1141           {
1142             pfile->buffer->cur++;
1143             NORMALIZE_STATE_UPDATE_IDNUM (nst);
1144           }
1145       } while (forms_identifier_p (pfile, false, nst));
1146       result = _cpp_interpret_identifier (pfile, base,
1147                                           pfile->buffer->cur - base);
1148     }
1149   else
1150     {
1151       len = cur - base;
1152       hash = HT_HASHFINISH (hash, len);
1153
1154       result = CPP_HASHNODE (ht_lookup_with_hash (pfile->hash_table,
1155                                                   base, len, hash, HT_ALLOC));
1156     }
1157
1158   /* Rarely, identifiers require diagnostics when lexed.  */
1159   if (__builtin_expect ((result->flags & NODE_DIAGNOSTIC)
1160                         && !pfile->state.skipping, 0))
1161     {
1162       /* It is allowed to poison the same identifier twice.  */
1163       if ((result->flags & NODE_POISONED) && !pfile->state.poisoned_ok)
1164         cpp_error (pfile, CPP_DL_ERROR, "attempt to use poisoned \"%s\"",
1165                    NODE_NAME (result));
1166
1167       /* Constraint 6.10.3.5: __VA_ARGS__ should only appear in the
1168          replacement list of a variadic macro.  */
1169       if (result == pfile->spec_nodes.n__VA_ARGS__
1170           && !pfile->state.va_args_ok)
1171         cpp_error (pfile, CPP_DL_PEDWARN,
1172                    "__VA_ARGS__ can only appear in the expansion"
1173                    " of a C99 variadic macro");
1174
1175       /* For -Wc++-compat, warn about use of C++ named operators.  */
1176       if (result->flags & NODE_WARN_OPERATOR)
1177         cpp_warning (pfile, CPP_W_CXX_OPERATOR_NAMES,
1178                      "identifier \"%s\" is a special operator name in C++",
1179                      NODE_NAME (result));
1180     }
1181
1182   return result;
1183 }
1184
1185 /* Lex a number to NUMBER starting at BUFFER->CUR - 1.  */
1186 static void
1187 lex_number (cpp_reader *pfile, cpp_string *number,
1188             struct normalize_state *nst)
1189 {
1190   const uchar *cur;
1191   const uchar *base;
1192   uchar *dest;
1193
1194   base = pfile->buffer->cur - 1;
1195   do
1196     {
1197       cur = pfile->buffer->cur;
1198
1199       /* N.B. ISIDNUM does not include $.  */
1200       while (ISIDNUM (*cur) || *cur == '.' || VALID_SIGN (*cur, cur[-1]))
1201         {
1202           cur++;
1203           NORMALIZE_STATE_UPDATE_IDNUM (nst);
1204         }
1205
1206       pfile->buffer->cur = cur;
1207     }
1208   while (forms_identifier_p (pfile, false, nst));
1209
1210   number->len = cur - base;
1211   dest = _cpp_unaligned_alloc (pfile, number->len + 1);
1212   memcpy (dest, base, number->len);
1213   dest[number->len] = '\0';
1214   number->text = dest;
1215 }
1216
1217 /* Create a token of type TYPE with a literal spelling.  */
1218 static void
1219 create_literal (cpp_reader *pfile, cpp_token *token, const uchar *base,
1220                 unsigned int len, enum cpp_ttype type)
1221 {
1222   uchar *dest = _cpp_unaligned_alloc (pfile, len + 1);
1223
1224   memcpy (dest, base, len);
1225   dest[len] = '\0';
1226   token->type = type;
1227   token->val.str.len = len;
1228   token->val.str.text = dest;
1229 }
1230
1231 /* Subroutine of lex_raw_string: Append LEN chars from BASE to the buffer
1232    sequence from *FIRST_BUFF_P to LAST_BUFF_P.  */
1233
1234 static void
1235 bufring_append (cpp_reader *pfile, const uchar *base, size_t len,
1236                 _cpp_buff **first_buff_p, _cpp_buff **last_buff_p)
1237 {
1238   _cpp_buff *first_buff = *first_buff_p;
1239   _cpp_buff *last_buff = *last_buff_p;
1240
1241   if (first_buff == NULL)
1242     first_buff = last_buff = _cpp_get_buff (pfile, len);
1243   else if (len > BUFF_ROOM (last_buff))
1244     {
1245       size_t room = BUFF_ROOM (last_buff);
1246       memcpy (BUFF_FRONT (last_buff), base, room);
1247       BUFF_FRONT (last_buff) += room;
1248       base += room;
1249       len -= room;
1250       last_buff = _cpp_append_extend_buff (pfile, last_buff, len);
1251     }
1252
1253   memcpy (BUFF_FRONT (last_buff), base, len);
1254   BUFF_FRONT (last_buff) += len;
1255
1256   *first_buff_p = first_buff;
1257   *last_buff_p = last_buff;
1258 }
1259
1260 /* Lexes a raw string.  The stored string contains the spelling, including
1261    double quotes, delimiter string, '(' and ')', any leading
1262    'L', 'u', 'U' or 'u8' and 'R' modifier.  It returns the type of the
1263    literal, or CPP_OTHER if it was not properly terminated.
1264
1265    The spelling is NUL-terminated, but it is not guaranteed that this
1266    is the first NUL since embedded NULs are preserved.  */
1267
1268 static void
1269 lex_raw_string (cpp_reader *pfile, cpp_token *token, const uchar *base,
1270                 const uchar *cur)
1271 {
1272   source_location saw_NUL = 0;
1273   const uchar *raw_prefix;
1274   unsigned int raw_prefix_len = 0;
1275   enum cpp_ttype type;
1276   size_t total_len = 0;
1277   _cpp_buff *first_buff = NULL, *last_buff = NULL;
1278   _cpp_line_note *note = &pfile->buffer->notes[pfile->buffer->cur_note];
1279
1280   type = (*base == 'L' ? CPP_WSTRING :
1281           *base == 'U' ? CPP_STRING32 :
1282           *base == 'u' ? (base[1] == '8' ? CPP_UTF8STRING : CPP_STRING16)
1283           : CPP_STRING);
1284
1285   raw_prefix = cur + 1;
1286   while (raw_prefix_len < 16)
1287     {
1288       switch (raw_prefix[raw_prefix_len])
1289         {
1290         case ' ': case '(': case ')': case '\\': case '\t':
1291         case '\v': case '\f': case '\n': default:
1292           break;
1293         /* Basic source charset except the above chars.  */
1294         case 'a': case 'b': case 'c': case 'd': case 'e': case 'f':
1295         case 'g': case 'h': case 'i': case 'j': case 'k': case 'l':
1296         case 'm': case 'n': case 'o': case 'p': case 'q': case 'r':
1297         case 's': case 't': case 'u': case 'v': case 'w': case 'x':
1298         case 'y': case 'z':
1299         case 'A': case 'B': case 'C': case 'D': case 'E': case 'F':
1300         case 'G': case 'H': case 'I': case 'J': case 'K': case 'L':
1301         case 'M': case 'N': case 'O': case 'P': case 'Q': case 'R':
1302         case 'S': case 'T': case 'U': case 'V': case 'W': case 'X':
1303         case 'Y': case 'Z':
1304         case '0': case '1': case '2': case '3': case '4': case '5':
1305         case '6': case '7': case '8': case '9':
1306         case '_': case '{': case '}': case '#': case '[': case ']':
1307         case '<': case '>': case '%': case ':': case ';': case '.':
1308         case '?': case '*': case '+': case '-': case '/': case '^':
1309         case '&': case '|': case '~': case '!': case '=': case ',':
1310         case '"': case '\'':
1311           raw_prefix_len++;
1312           continue;
1313         }
1314       break;
1315     }
1316
1317   if (raw_prefix[raw_prefix_len] != '(')
1318     {
1319       int col = CPP_BUF_COLUMN (pfile->buffer, raw_prefix + raw_prefix_len)
1320                 + 1;
1321       if (raw_prefix_len == 16)
1322         cpp_error_with_line (pfile, CPP_DL_ERROR, token->src_loc, col,
1323                              "raw string delimiter longer than 16 characters");
1324       else
1325         cpp_error_with_line (pfile, CPP_DL_ERROR, token->src_loc, col,
1326                              "invalid character '%c' in raw string delimiter",
1327                              (int) raw_prefix[raw_prefix_len]);
1328       pfile->buffer->cur = raw_prefix - 1;
1329       create_literal (pfile, token, base, raw_prefix - 1 - base, CPP_OTHER);
1330       return;
1331     }
1332
1333   cur = raw_prefix + raw_prefix_len + 1;
1334   for (;;)
1335     {
1336 #define BUF_APPEND(STR,LEN)                                     \
1337       do {                                                      \
1338         bufring_append (pfile, (const uchar *)(STR), (LEN),     \
1339                         &first_buff, &last_buff);               \
1340         total_len += (LEN);                                     \
1341       } while (0);
1342
1343       cppchar_t c;
1344
1345       /* If we previously performed any trigraph or line splicing
1346          transformations, undo them within the body of the raw string.  */
1347       while (note->pos < cur)
1348         ++note;
1349       for (; note->pos == cur; ++note)
1350         {
1351           switch (note->type)
1352             {
1353             case '\\':
1354             case ' ':
1355               /* Restore backslash followed by newline.  */
1356               BUF_APPEND (base, cur - base);
1357               base = cur;
1358               BUF_APPEND ("\\", 1);
1359             after_backslash:
1360               if (note->type == ' ')
1361                 {
1362                   /* GNU backslash whitespace newline extension.  FIXME
1363                      could be any sequence of non-vertical space.  When we
1364                      can properly restore any such sequence, we should mark
1365                      this note as handled so _cpp_process_line_notes
1366                      doesn't warn.  */
1367                   BUF_APPEND (" ", 1);
1368                 }
1369
1370               BUF_APPEND ("\n", 1);
1371               break;
1372
1373             case 0:
1374               /* Already handled.  */
1375               break;
1376
1377             default:
1378               if (_cpp_trigraph_map[note->type])
1379                 {
1380                   /* Don't warn about this trigraph in
1381                      _cpp_process_line_notes, since trigraphs show up as
1382                      trigraphs in raw strings.  */
1383                   uchar type = note->type;
1384                   note->type = 0;
1385
1386                   if (!CPP_OPTION (pfile, trigraphs))
1387                     /* If we didn't convert the trigraph in the first
1388                        place, don't do anything now either.  */
1389                     break;
1390
1391                   BUF_APPEND (base, cur - base);
1392                   base = cur;
1393                   BUF_APPEND ("??", 2);
1394
1395                   /* ??/ followed by newline gets two line notes, one for
1396                      the trigraph and one for the backslash/newline.  */
1397                   if (type == '/' && note[1].pos == cur)
1398                     {
1399                       if (note[1].type != '\\'
1400                           && note[1].type != ' ')
1401                         abort ();
1402                       BUF_APPEND ("/", 1);
1403                       ++note;
1404                       goto after_backslash;
1405                     }
1406                   /* The ) from ??) could be part of the suffix.  */
1407                   else if (type == ')'
1408                            && strncmp ((const char *) cur+1,
1409                                        (const char *) raw_prefix,
1410                                        raw_prefix_len) == 0
1411                            && cur[raw_prefix_len+1] == '"')
1412                     {
1413                       BUF_APPEND (")", 1);
1414                       base++;
1415                       cur += raw_prefix_len + 2;
1416                       goto break_outer_loop;
1417                     }
1418                   else
1419                     {
1420                       /* Skip the replacement character.  */
1421                       base = ++cur;
1422                       BUF_APPEND (&type, 1);
1423                     }
1424                 }
1425               else
1426                 abort ();
1427               break;
1428             }
1429         }
1430       c = *cur++;
1431
1432       if (c == ')'
1433           && strncmp ((const char *) cur, (const char *) raw_prefix,
1434                       raw_prefix_len) == 0
1435           && cur[raw_prefix_len] == '"')
1436         {
1437           cur += raw_prefix_len + 1;
1438           break;
1439         }
1440       else if (c == '\n')
1441         {
1442           if (pfile->state.in_directive
1443               || pfile->state.parsing_args
1444               || pfile->state.in_deferred_pragma)
1445             {
1446               cur--;
1447               type = CPP_OTHER;
1448               cpp_error_with_line (pfile, CPP_DL_ERROR, token->src_loc, 0,
1449                                    "unterminated raw string");
1450               break;
1451             }
1452
1453           BUF_APPEND (base, cur - base);
1454
1455           if (pfile->buffer->cur < pfile->buffer->rlimit)
1456             CPP_INCREMENT_LINE (pfile, 0);
1457           pfile->buffer->need_line = true;
1458
1459           pfile->buffer->cur = cur-1;
1460           _cpp_process_line_notes (pfile, false);
1461           if (!_cpp_get_fresh_line (pfile))
1462             {
1463               source_location src_loc = token->src_loc;
1464               token->type = CPP_EOF;
1465               /* Tell the compiler the line number of the EOF token.  */
1466               token->src_loc = pfile->line_table->highest_line;
1467               token->flags = BOL;
1468               if (first_buff != NULL)
1469                 _cpp_release_buff (pfile, first_buff);
1470               cpp_error_with_line (pfile, CPP_DL_ERROR, src_loc, 0,
1471                                    "unterminated raw string");
1472               return;
1473             }
1474
1475           cur = base = pfile->buffer->cur;
1476           note = &pfile->buffer->notes[pfile->buffer->cur_note];
1477         }
1478       else if (c == '\0' && !saw_NUL)
1479         LINEMAP_POSITION_FOR_COLUMN (saw_NUL, pfile->line_table,
1480                                      CPP_BUF_COLUMN (pfile->buffer, cur));
1481     }
1482  break_outer_loop:
1483
1484   if (saw_NUL && !pfile->state.skipping)
1485     cpp_error_with_line (pfile, CPP_DL_WARNING, saw_NUL, 0,
1486                "null character(s) preserved in literal");
1487
1488   pfile->buffer->cur = cur;
1489   if (first_buff == NULL)
1490     create_literal (pfile, token, base, cur - base, type);
1491   else
1492     {
1493       uchar *dest = _cpp_unaligned_alloc (pfile, total_len + (cur - base) + 1);
1494
1495       token->type = type;
1496       token->val.str.len = total_len + (cur - base);
1497       token->val.str.text = dest;
1498       last_buff = first_buff;
1499       while (last_buff != NULL)
1500         {
1501           memcpy (dest, last_buff->base,
1502                   BUFF_FRONT (last_buff) - last_buff->base);
1503           dest += BUFF_FRONT (last_buff) - last_buff->base;
1504           last_buff = last_buff->next;
1505         }
1506       _cpp_release_buff (pfile, first_buff);
1507       memcpy (dest, base, cur - base);
1508       dest[cur - base] = '\0';
1509     }
1510 }
1511
1512 /* Lexes a string, character constant, or angle-bracketed header file
1513    name.  The stored string contains the spelling, including opening
1514    quote and any leading 'L', 'u', 'U' or 'u8' and optional
1515    'R' modifier.  It returns the type of the literal, or CPP_OTHER
1516    if it was not properly terminated, or CPP_LESS for an unterminated
1517    header name which must be relexed as normal tokens.
1518
1519    The spelling is NUL-terminated, but it is not guaranteed that this
1520    is the first NUL since embedded NULs are preserved.  */
1521 static void
1522 lex_string (cpp_reader *pfile, cpp_token *token, const uchar *base)
1523 {
1524   bool saw_NUL = false;
1525   const uchar *cur;
1526   cppchar_t terminator;
1527   enum cpp_ttype type;
1528
1529   cur = base;
1530   terminator = *cur++;
1531   if (terminator == 'L' || terminator == 'U')
1532     terminator = *cur++;
1533   else if (terminator == 'u')
1534     {
1535       terminator = *cur++;
1536       if (terminator == '8')
1537         terminator = *cur++;
1538     }
1539   if (terminator == 'R')
1540     {
1541       lex_raw_string (pfile, token, base, cur);
1542       return;
1543     }
1544   if (terminator == '"')
1545     type = (*base == 'L' ? CPP_WSTRING :
1546             *base == 'U' ? CPP_STRING32 :
1547             *base == 'u' ? (base[1] == '8' ? CPP_UTF8STRING : CPP_STRING16)
1548                          : CPP_STRING);
1549   else if (terminator == '\'')
1550     type = (*base == 'L' ? CPP_WCHAR :
1551             *base == 'U' ? CPP_CHAR32 :
1552             *base == 'u' ? CPP_CHAR16 : CPP_CHAR);
1553   else
1554     terminator = '>', type = CPP_HEADER_NAME;
1555
1556   for (;;)
1557     {
1558       cppchar_t c = *cur++;
1559
1560       /* In #include-style directives, terminators are not escapable.  */
1561       if (c == '\\' && !pfile->state.angled_headers && *cur != '\n')
1562         cur++;
1563       else if (c == terminator)
1564         break;
1565       else if (c == '\n')
1566         {
1567           cur--;
1568           /* Unmatched quotes always yield undefined behavior, but
1569              greedy lexing means that what appears to be an unterminated
1570              header name may actually be a legitimate sequence of tokens.  */
1571           if (terminator == '>')
1572             {
1573               token->type = CPP_LESS;
1574               return;
1575             }
1576           type = CPP_OTHER;
1577           break;
1578         }
1579       else if (c == '\0')
1580         saw_NUL = true;
1581     }
1582
1583   if (saw_NUL && !pfile->state.skipping)
1584     cpp_error (pfile, CPP_DL_WARNING,
1585                "null character(s) preserved in literal");
1586
1587   if (type == CPP_OTHER && CPP_OPTION (pfile, lang) != CLK_ASM)
1588     cpp_error (pfile, CPP_DL_PEDWARN, "missing terminating %c character",
1589                (int) terminator);
1590
1591   pfile->buffer->cur = cur;
1592   create_literal (pfile, token, base, cur - base, type);
1593 }
1594
1595 /* Return the comment table. The client may not make any assumption
1596    about the ordering of the table.  */
1597 cpp_comment_table *
1598 cpp_get_comments (cpp_reader *pfile)
1599 {
1600   return &pfile->comments;
1601 }
1602
1603 /* Append a comment to the end of the comment table. */
1604 static void 
1605 store_comment (cpp_reader *pfile, cpp_token *token) 
1606 {
1607   int len;
1608
1609   if (pfile->comments.allocated == 0)
1610     {
1611       pfile->comments.allocated = 256; 
1612       pfile->comments.entries = (cpp_comment *) xmalloc
1613         (pfile->comments.allocated * sizeof (cpp_comment));
1614     }
1615
1616   if (pfile->comments.count == pfile->comments.allocated)
1617     {
1618       pfile->comments.allocated *= 2;
1619       pfile->comments.entries = (cpp_comment *) xrealloc
1620         (pfile->comments.entries,
1621          pfile->comments.allocated * sizeof (cpp_comment));
1622     }
1623
1624   len = token->val.str.len;
1625
1626   /* Copy comment. Note, token may not be NULL terminated. */
1627   pfile->comments.entries[pfile->comments.count].comment = 
1628     (char *) xmalloc (sizeof (char) * (len + 1));
1629   memcpy (pfile->comments.entries[pfile->comments.count].comment,
1630           token->val.str.text, len);
1631   pfile->comments.entries[pfile->comments.count].comment[len] = '\0';
1632
1633   /* Set source location. */
1634   pfile->comments.entries[pfile->comments.count].sloc = token->src_loc;
1635
1636   /* Increment the count of entries in the comment table. */
1637   pfile->comments.count++;
1638 }
1639
1640 /* The stored comment includes the comment start and any terminator.  */
1641 static void
1642 save_comment (cpp_reader *pfile, cpp_token *token, const unsigned char *from,
1643               cppchar_t type)
1644 {
1645   unsigned char *buffer;
1646   unsigned int len, clen, i;
1647
1648   len = pfile->buffer->cur - from + 1; /* + 1 for the initial '/'.  */
1649
1650   /* C++ comments probably (not definitely) have moved past a new
1651      line, which we don't want to save in the comment.  */
1652   if (is_vspace (pfile->buffer->cur[-1]))
1653     len--;
1654
1655   /* If we are currently in a directive or in argument parsing, then
1656      we need to store all C++ comments as C comments internally, and
1657      so we need to allocate a little extra space in that case.
1658
1659      Note that the only time we encounter a directive here is
1660      when we are saving comments in a "#define".  */
1661   clen = ((pfile->state.in_directive || pfile->state.parsing_args)
1662           && type == '/') ? len + 2 : len;
1663
1664   buffer = _cpp_unaligned_alloc (pfile, clen);
1665
1666   token->type = CPP_COMMENT;
1667   token->val.str.len = clen;
1668   token->val.str.text = buffer;
1669
1670   buffer[0] = '/';
1671   memcpy (buffer + 1, from, len - 1);
1672
1673   /* Finish conversion to a C comment, if necessary.  */
1674   if ((pfile->state.in_directive || pfile->state.parsing_args) && type == '/')
1675     {
1676       buffer[1] = '*';
1677       buffer[clen - 2] = '*';
1678       buffer[clen - 1] = '/';
1679       /* As there can be in a C++ comments illegal sequences for C comments
1680          we need to filter them out.  */
1681       for (i = 2; i < (clen - 2); i++)
1682         if (buffer[i] == '/' && (buffer[i - 1] == '*' || buffer[i + 1] == '*'))
1683           buffer[i] = '|';
1684     }
1685
1686   /* Finally store this comment for use by clients of libcpp. */
1687   store_comment (pfile, token);
1688 }
1689
1690 /* Allocate COUNT tokens for RUN.  */
1691 void
1692 _cpp_init_tokenrun (tokenrun *run, unsigned int count)
1693 {
1694   run->base = XNEWVEC (cpp_token, count);
1695   run->limit = run->base + count;
1696   run->next = NULL;
1697 }
1698
1699 /* Returns the next tokenrun, or creates one if there is none.  */
1700 static tokenrun *
1701 next_tokenrun (tokenrun *run)
1702 {
1703   if (run->next == NULL)
1704     {
1705       run->next = XNEW (tokenrun);
1706       run->next->prev = run;
1707       _cpp_init_tokenrun (run->next, 250);
1708     }
1709
1710   return run->next;
1711 }
1712
1713 /* Look ahead in the input stream.  */
1714 const cpp_token *
1715 cpp_peek_token (cpp_reader *pfile, int index)
1716 {
1717   cpp_context *context = pfile->context;
1718   const cpp_token *peektok;
1719   int count;
1720
1721   /* First, scan through any pending cpp_context objects.  */
1722   while (context->prev)
1723     {
1724       ptrdiff_t sz = (context->direct_p
1725                       ? LAST (context).token - FIRST (context).token
1726                       : LAST (context).ptoken - FIRST (context).ptoken);
1727
1728       if (index < (int) sz)
1729         return (context->direct_p
1730                 ? FIRST (context).token + index
1731                 : *(FIRST (context).ptoken + index));
1732
1733       index -= (int) sz;
1734       context = context->prev;
1735     }
1736
1737   /* We will have to read some new tokens after all (and do so
1738      without invalidating preceding tokens).  */
1739   count = index;
1740   pfile->keep_tokens++;
1741
1742   do
1743     {
1744       peektok = _cpp_lex_token (pfile);
1745       if (peektok->type == CPP_EOF)
1746         return peektok;
1747     }
1748   while (index--);
1749
1750   _cpp_backup_tokens_direct (pfile, count + 1);
1751   pfile->keep_tokens--;
1752
1753   return peektok;
1754 }
1755
1756 /* Allocate a single token that is invalidated at the same time as the
1757    rest of the tokens on the line.  Has its line and col set to the
1758    same as the last lexed token, so that diagnostics appear in the
1759    right place.  */
1760 cpp_token *
1761 _cpp_temp_token (cpp_reader *pfile)
1762 {
1763   cpp_token *old, *result;
1764   ptrdiff_t sz = pfile->cur_run->limit - pfile->cur_token;
1765   ptrdiff_t la = (ptrdiff_t) pfile->lookaheads;
1766
1767   old = pfile->cur_token - 1;
1768   /* Any pre-existing lookaheads must not be clobbered.  */
1769   if (la)
1770     {
1771       if (sz <= la)
1772         {
1773           tokenrun *next = next_tokenrun (pfile->cur_run);
1774
1775           if (sz < la)
1776             memmove (next->base + 1, next->base,
1777                      (la - sz) * sizeof (cpp_token));
1778
1779           next->base[0] = pfile->cur_run->limit[-1];
1780         }
1781
1782       if (sz > 1)
1783         memmove (pfile->cur_token + 1, pfile->cur_token,
1784                  MIN (la, sz - 1) * sizeof (cpp_token));
1785     }
1786
1787   if (!sz && pfile->cur_token == pfile->cur_run->limit)
1788     {
1789       pfile->cur_run = next_tokenrun (pfile->cur_run);
1790       pfile->cur_token = pfile->cur_run->base;
1791     }
1792
1793   result = pfile->cur_token++;
1794   result->src_loc = old->src_loc;
1795   return result;
1796 }
1797
1798 /* Lex a token into RESULT (external interface).  Takes care of issues
1799    like directive handling, token lookahead, multiple include
1800    optimization and skipping.  */
1801 const cpp_token *
1802 _cpp_lex_token (cpp_reader *pfile)
1803 {
1804   cpp_token *result;
1805
1806   for (;;)
1807     {
1808       if (pfile->cur_token == pfile->cur_run->limit)
1809         {
1810           pfile->cur_run = next_tokenrun (pfile->cur_run);
1811           pfile->cur_token = pfile->cur_run->base;
1812         }
1813       /* We assume that the current token is somewhere in the current
1814          run.  */
1815       if (pfile->cur_token < pfile->cur_run->base
1816           || pfile->cur_token >= pfile->cur_run->limit)
1817         abort ();
1818
1819       if (pfile->lookaheads)
1820         {
1821           pfile->lookaheads--;
1822           result = pfile->cur_token++;
1823         }
1824       else
1825         result = _cpp_lex_direct (pfile);
1826
1827       if (result->flags & BOL)
1828         {
1829           /* Is this a directive.  If _cpp_handle_directive returns
1830              false, it is an assembler #.  */
1831           if (result->type == CPP_HASH
1832               /* 6.10.3 p 11: Directives in a list of macro arguments
1833                  gives undefined behavior.  This implementation
1834                  handles the directive as normal.  */
1835               && pfile->state.parsing_args != 1)
1836             {
1837               if (_cpp_handle_directive (pfile, result->flags & PREV_WHITE))
1838                 {
1839                   if (pfile->directive_result.type == CPP_PADDING)
1840                     continue;
1841                   result = &pfile->directive_result;
1842                 }
1843             }
1844           else if (pfile->state.in_deferred_pragma)
1845             result = &pfile->directive_result;
1846
1847           if (pfile->cb.line_change && !pfile->state.skipping)
1848             pfile->cb.line_change (pfile, result, pfile->state.parsing_args);
1849         }
1850
1851       /* We don't skip tokens in directives.  */
1852       if (pfile->state.in_directive || pfile->state.in_deferred_pragma)
1853         break;
1854
1855       /* Outside a directive, invalidate controlling macros.  At file
1856          EOF, _cpp_lex_direct takes care of popping the buffer, so we never
1857          get here and MI optimization works.  */
1858       pfile->mi_valid = false;
1859
1860       if (!pfile->state.skipping || result->type == CPP_EOF)
1861         break;
1862     }
1863
1864   return result;
1865 }
1866
1867 /* Returns true if a fresh line has been loaded.  */
1868 bool
1869 _cpp_get_fresh_line (cpp_reader *pfile)
1870 {
1871   int return_at_eof;
1872
1873   /* We can't get a new line until we leave the current directive.  */
1874   if (pfile->state.in_directive)
1875     return false;
1876
1877   for (;;)
1878     {
1879       cpp_buffer *buffer = pfile->buffer;
1880
1881       if (!buffer->need_line)
1882         return true;
1883
1884       if (buffer->next_line < buffer->rlimit)
1885         {
1886           _cpp_clean_line (pfile);
1887           return true;
1888         }
1889
1890       /* First, get out of parsing arguments state.  */
1891       if (pfile->state.parsing_args)
1892         return false;
1893
1894       /* End of buffer.  Non-empty files should end in a newline.  */
1895       if (buffer->buf != buffer->rlimit
1896           && buffer->next_line > buffer->rlimit
1897           && !buffer->from_stage3)
1898         {
1899           /* Clip to buffer size.  */
1900           buffer->next_line = buffer->rlimit;
1901         }
1902
1903       return_at_eof = buffer->return_at_eof;
1904       _cpp_pop_buffer (pfile);
1905       if (pfile->buffer == NULL || return_at_eof)
1906         return false;
1907     }
1908 }
1909
1910 #define IF_NEXT_IS(CHAR, THEN_TYPE, ELSE_TYPE)          \
1911   do                                                    \
1912     {                                                   \
1913       result->type = ELSE_TYPE;                         \
1914       if (*buffer->cur == CHAR)                         \
1915         buffer->cur++, result->type = THEN_TYPE;        \
1916     }                                                   \
1917   while (0)
1918
1919 /* Lex a token into pfile->cur_token, which is also incremented, to
1920    get diagnostics pointing to the correct location.
1921
1922    Does not handle issues such as token lookahead, multiple-include
1923    optimization, directives, skipping etc.  This function is only
1924    suitable for use by _cpp_lex_token, and in special cases like
1925    lex_expansion_token which doesn't care for any of these issues.
1926
1927    When meeting a newline, returns CPP_EOF if parsing a directive,
1928    otherwise returns to the start of the token buffer if permissible.
1929    Returns the location of the lexed token.  */
1930 cpp_token *
1931 _cpp_lex_direct (cpp_reader *pfile)
1932 {
1933   cppchar_t c;
1934   cpp_buffer *buffer;
1935   const unsigned char *comment_start;
1936   cpp_token *result = pfile->cur_token++;
1937
1938  fresh_line:
1939   result->flags = 0;
1940   buffer = pfile->buffer;
1941   if (buffer->need_line)
1942     {
1943       if (pfile->state.in_deferred_pragma)
1944         {
1945           result->type = CPP_PRAGMA_EOL;
1946           pfile->state.in_deferred_pragma = false;
1947           if (!pfile->state.pragma_allow_expansion)
1948             pfile->state.prevent_expansion--;
1949           return result;
1950         }
1951       if (!_cpp_get_fresh_line (pfile))
1952         {
1953           result->type = CPP_EOF;
1954           if (!pfile->state.in_directive)
1955             {
1956               /* Tell the compiler the line number of the EOF token.  */
1957               result->src_loc = pfile->line_table->highest_line;
1958               result->flags = BOL;
1959             }
1960           return result;
1961         }
1962       if (!pfile->keep_tokens)
1963         {
1964           pfile->cur_run = &pfile->base_run;
1965           result = pfile->base_run.base;
1966           pfile->cur_token = result + 1;
1967         }
1968       result->flags = BOL;
1969       if (pfile->state.parsing_args == 2)
1970         result->flags |= PREV_WHITE;
1971     }
1972   buffer = pfile->buffer;
1973  update_tokens_line:
1974   result->src_loc = pfile->line_table->highest_line;
1975
1976  skipped_white:
1977   if (buffer->cur >= buffer->notes[buffer->cur_note].pos
1978       && !pfile->overlaid_buffer)
1979     {
1980       _cpp_process_line_notes (pfile, false);
1981       result->src_loc = pfile->line_table->highest_line;
1982     }
1983   c = *buffer->cur++;
1984
1985   LINEMAP_POSITION_FOR_COLUMN (result->src_loc, pfile->line_table,
1986                                CPP_BUF_COLUMN (buffer, buffer->cur));
1987
1988   switch (c)
1989     {
1990     case ' ': case '\t': case '\f': case '\v': case '\0':
1991       result->flags |= PREV_WHITE;
1992       skip_whitespace (pfile, c);
1993       goto skipped_white;
1994
1995     case '\n':
1996       if (buffer->cur < buffer->rlimit)
1997         CPP_INCREMENT_LINE (pfile, 0);
1998       buffer->need_line = true;
1999       goto fresh_line;
2000
2001     case '0': case '1': case '2': case '3': case '4':
2002     case '5': case '6': case '7': case '8': case '9':
2003       {
2004         struct normalize_state nst = INITIAL_NORMALIZE_STATE;
2005         result->type = CPP_NUMBER;
2006         lex_number (pfile, &result->val.str, &nst);
2007         warn_about_normalization (pfile, result, &nst);
2008         break;
2009       }
2010
2011     case 'L':
2012     case 'u':
2013     case 'U':
2014     case 'R':
2015       /* 'L', 'u', 'U', 'u8' or 'R' may introduce wide characters,
2016          wide strings or raw strings.  */
2017       if (c == 'L' || CPP_OPTION (pfile, uliterals))
2018         {
2019           if ((*buffer->cur == '\'' && c != 'R')
2020               || *buffer->cur == '"'
2021               || (*buffer->cur == 'R'
2022                   && c != 'R'
2023                   && buffer->cur[1] == '"'
2024                   && CPP_OPTION (pfile, uliterals))
2025               || (*buffer->cur == '8'
2026                   && c == 'u'
2027                   && (buffer->cur[1] == '"'
2028                       || (buffer->cur[1] == 'R' && buffer->cur[2] == '"'))))
2029             {
2030               lex_string (pfile, result, buffer->cur - 1);
2031               break;
2032             }
2033         }
2034       /* Fall through.  */
2035
2036     case '_':
2037     case 'a': case 'b': case 'c': case 'd': case 'e': case 'f':
2038     case 'g': case 'h': case 'i': case 'j': case 'k': case 'l':
2039     case 'm': case 'n': case 'o': case 'p': case 'q': case 'r':
2040     case 's': case 't':           case 'v': case 'w': case 'x':
2041     case 'y': case 'z':
2042     case 'A': case 'B': case 'C': case 'D': case 'E': case 'F':
2043     case 'G': case 'H': case 'I': case 'J': case 'K':
2044     case 'M': case 'N': case 'O': case 'P': case 'Q':
2045     case 'S': case 'T':           case 'V': case 'W': case 'X':
2046     case 'Y': case 'Z':
2047       result->type = CPP_NAME;
2048       {
2049         struct normalize_state nst = INITIAL_NORMALIZE_STATE;
2050         result->val.node.node = lex_identifier (pfile, buffer->cur - 1, false,
2051                                                 &nst);
2052         warn_about_normalization (pfile, result, &nst);
2053       }
2054
2055       /* Convert named operators to their proper types.  */
2056       if (result->val.node.node->flags & NODE_OPERATOR)
2057         {
2058           result->flags |= NAMED_OP;
2059           result->type = (enum cpp_ttype) result->val.node.node->directive_index;
2060         }
2061       break;
2062
2063     case '\'':
2064     case '"':
2065       lex_string (pfile, result, buffer->cur - 1);
2066       break;
2067
2068     case '/':
2069       /* A potential block or line comment.  */
2070       comment_start = buffer->cur;
2071       c = *buffer->cur;
2072       
2073       if (c == '*')
2074         {
2075           if (_cpp_skip_block_comment (pfile))
2076             cpp_error (pfile, CPP_DL_ERROR, "unterminated comment");
2077         }
2078       else if (c == '/' && (CPP_OPTION (pfile, cplusplus_comments)
2079                             || cpp_in_system_header (pfile)))
2080         {
2081           /* Warn about comments only if pedantically GNUC89, and not
2082              in system headers.  */
2083           if (CPP_OPTION (pfile, lang) == CLK_GNUC89 && CPP_PEDANTIC (pfile)
2084               && ! buffer->warned_cplusplus_comments)
2085             {
2086               cpp_error (pfile, CPP_DL_PEDWARN,
2087                          "C++ style comments are not allowed in ISO C90");
2088               cpp_error (pfile, CPP_DL_PEDWARN,
2089                          "(this will be reported only once per input file)");
2090               buffer->warned_cplusplus_comments = 1;
2091             }
2092
2093           if (skip_line_comment (pfile) && CPP_OPTION (pfile, warn_comments))
2094             cpp_warning (pfile, CPP_W_COMMENTS, "multi-line comment");
2095         }
2096       else if (c == '=')
2097         {
2098           buffer->cur++;
2099           result->type = CPP_DIV_EQ;
2100           break;
2101         }
2102       else
2103         {
2104           result->type = CPP_DIV;
2105           break;
2106         }
2107
2108       if (!pfile->state.save_comments)
2109         {
2110           result->flags |= PREV_WHITE;
2111           goto update_tokens_line;
2112         }
2113
2114       /* Save the comment as a token in its own right.  */
2115       save_comment (pfile, result, comment_start, c);
2116       break;
2117
2118     case '<':
2119       if (pfile->state.angled_headers)
2120         {
2121           lex_string (pfile, result, buffer->cur - 1);
2122           if (result->type != CPP_LESS)
2123             break;
2124         }
2125
2126       result->type = CPP_LESS;
2127       if (*buffer->cur == '=')
2128         buffer->cur++, result->type = CPP_LESS_EQ;
2129       else if (*buffer->cur == '<')
2130         {
2131           buffer->cur++;
2132           IF_NEXT_IS ('=', CPP_LSHIFT_EQ, CPP_LSHIFT);
2133         }
2134       else if (CPP_OPTION (pfile, digraphs))
2135         {
2136           if (*buffer->cur == ':')
2137             {
2138               buffer->cur++;
2139               result->flags |= DIGRAPH;
2140               result->type = CPP_OPEN_SQUARE;
2141             }
2142           else if (*buffer->cur == '%')
2143             {
2144               buffer->cur++;
2145               result->flags |= DIGRAPH;
2146               result->type = CPP_OPEN_BRACE;
2147             }
2148         }
2149       break;
2150
2151     case '>':
2152       result->type = CPP_GREATER;
2153       if (*buffer->cur == '=')
2154         buffer->cur++, result->type = CPP_GREATER_EQ;
2155       else if (*buffer->cur == '>')
2156         {
2157           buffer->cur++;
2158           IF_NEXT_IS ('=', CPP_RSHIFT_EQ, CPP_RSHIFT);
2159         }
2160       break;
2161
2162     case '%':
2163       result->type = CPP_MOD;
2164       if (*buffer->cur == '=')
2165         buffer->cur++, result->type = CPP_MOD_EQ;
2166       else if (CPP_OPTION (pfile, digraphs))
2167         {
2168           if (*buffer->cur == ':')
2169             {
2170               buffer->cur++;
2171               result->flags |= DIGRAPH;
2172               result->type = CPP_HASH;
2173               if (*buffer->cur == '%' && buffer->cur[1] == ':')
2174                 buffer->cur += 2, result->type = CPP_PASTE, result->val.token_no = 0;
2175             }
2176           else if (*buffer->cur == '>')
2177             {
2178               buffer->cur++;
2179               result->flags |= DIGRAPH;
2180               result->type = CPP_CLOSE_BRACE;
2181             }
2182         }
2183       break;
2184
2185     case '.':
2186       result->type = CPP_DOT;
2187       if (ISDIGIT (*buffer->cur))
2188         {
2189           struct normalize_state nst = INITIAL_NORMALIZE_STATE;
2190           result->type = CPP_NUMBER;
2191           lex_number (pfile, &result->val.str, &nst);
2192           warn_about_normalization (pfile, result, &nst);
2193         }
2194       else if (*buffer->cur == '.' && buffer->cur[1] == '.')
2195         buffer->cur += 2, result->type = CPP_ELLIPSIS;
2196       else if (*buffer->cur == '*' && CPP_OPTION (pfile, cplusplus))
2197         buffer->cur++, result->type = CPP_DOT_STAR;
2198       break;
2199
2200     case '+':
2201       result->type = CPP_PLUS;
2202       if (*buffer->cur == '+')
2203         buffer->cur++, result->type = CPP_PLUS_PLUS;
2204       else if (*buffer->cur == '=')
2205         buffer->cur++, result->type = CPP_PLUS_EQ;
2206       break;
2207
2208     case '-':
2209       result->type = CPP_MINUS;
2210       if (*buffer->cur == '>')
2211         {
2212           buffer->cur++;
2213           result->type = CPP_DEREF;
2214           if (*buffer->cur == '*' && CPP_OPTION (pfile, cplusplus))
2215             buffer->cur++, result->type = CPP_DEREF_STAR;
2216         }
2217       else if (*buffer->cur == '-')
2218         buffer->cur++, result->type = CPP_MINUS_MINUS;
2219       else if (*buffer->cur == '=')
2220         buffer->cur++, result->type = CPP_MINUS_EQ;
2221       break;
2222
2223     case '&':
2224       result->type = CPP_AND;
2225       if (*buffer->cur == '&')
2226         buffer->cur++, result->type = CPP_AND_AND;
2227       else if (*buffer->cur == '=')
2228         buffer->cur++, result->type = CPP_AND_EQ;
2229       break;
2230
2231     case '|':
2232       result->type = CPP_OR;
2233       if (*buffer->cur == '|')
2234         buffer->cur++, result->type = CPP_OR_OR;
2235       else if (*buffer->cur == '=')
2236         buffer->cur++, result->type = CPP_OR_EQ;
2237       break;
2238
2239     case ':':
2240       result->type = CPP_COLON;
2241       if (*buffer->cur == ':' && CPP_OPTION (pfile, cplusplus))
2242         buffer->cur++, result->type = CPP_SCOPE;
2243       else if (*buffer->cur == '>' && CPP_OPTION (pfile, digraphs))
2244         {
2245           buffer->cur++;
2246           result->flags |= DIGRAPH;
2247           result->type = CPP_CLOSE_SQUARE;
2248         }
2249       break;
2250
2251     case '*': IF_NEXT_IS ('=', CPP_MULT_EQ, CPP_MULT); break;
2252     case '=': IF_NEXT_IS ('=', CPP_EQ_EQ, CPP_EQ); break;
2253     case '!': IF_NEXT_IS ('=', CPP_NOT_EQ, CPP_NOT); break;
2254     case '^': IF_NEXT_IS ('=', CPP_XOR_EQ, CPP_XOR); break;
2255     case '#': IF_NEXT_IS ('#', CPP_PASTE, CPP_HASH); result->val.token_no = 0; break;
2256
2257     case '?': result->type = CPP_QUERY; break;
2258     case '~': result->type = CPP_COMPL; break;
2259     case ',': result->type = CPP_COMMA; break;
2260     case '(': result->type = CPP_OPEN_PAREN; break;
2261     case ')': result->type = CPP_CLOSE_PAREN; break;
2262     case '[': result->type = CPP_OPEN_SQUARE; break;
2263     case ']': result->type = CPP_CLOSE_SQUARE; break;
2264     case '{': result->type = CPP_OPEN_BRACE; break;
2265     case '}': result->type = CPP_CLOSE_BRACE; break;
2266     case ';': result->type = CPP_SEMICOLON; break;
2267
2268       /* @ is a punctuator in Objective-C.  */
2269     case '@': result->type = CPP_ATSIGN; break;
2270
2271     case '$':
2272     case '\\':
2273       {
2274         const uchar *base = --buffer->cur;
2275         struct normalize_state nst = INITIAL_NORMALIZE_STATE;
2276
2277         if (forms_identifier_p (pfile, true, &nst))
2278           {
2279             result->type = CPP_NAME;
2280             result->val.node.node = lex_identifier (pfile, base, true, &nst);
2281             warn_about_normalization (pfile, result, &nst);
2282             break;
2283           }
2284         buffer->cur++;
2285       }
2286
2287     default:
2288       create_literal (pfile, result, buffer->cur - 1, 1, CPP_OTHER);
2289       break;
2290     }
2291
2292   return result;
2293 }
2294
2295 /* An upper bound on the number of bytes needed to spell TOKEN.
2296    Does not include preceding whitespace.  */
2297 unsigned int
2298 cpp_token_len (const cpp_token *token)
2299 {
2300   unsigned int len;
2301
2302   switch (TOKEN_SPELL (token))
2303     {
2304     default:            len = 6;                                break;
2305     case SPELL_LITERAL: len = token->val.str.len;               break;
2306     case SPELL_IDENT:   len = NODE_LEN (token->val.node.node) * 10;     break;
2307     }
2308
2309   return len;
2310 }
2311
2312 /* Parse UTF-8 out of NAMEP and place a \U escape in BUFFER.
2313    Return the number of bytes read out of NAME.  (There are always
2314    10 bytes written to BUFFER.)  */
2315
2316 static size_t
2317 utf8_to_ucn (unsigned char *buffer, const unsigned char *name)
2318 {
2319   int j;
2320   int ucn_len = 0;
2321   int ucn_len_c;
2322   unsigned t;
2323   unsigned long utf32;
2324   
2325   /* Compute the length of the UTF-8 sequence.  */
2326   for (t = *name; t & 0x80; t <<= 1)
2327     ucn_len++;
2328   
2329   utf32 = *name & (0x7F >> ucn_len);
2330   for (ucn_len_c = 1; ucn_len_c < ucn_len; ucn_len_c++)
2331     {
2332       utf32 = (utf32 << 6) | (*++name & 0x3F);
2333       
2334       /* Ill-formed UTF-8.  */
2335       if ((*name & ~0x3F) != 0x80)
2336         abort ();
2337     }
2338   
2339   *buffer++ = '\\';
2340   *buffer++ = 'U';
2341   for (j = 7; j >= 0; j--)
2342     *buffer++ = "0123456789abcdef"[(utf32 >> (4 * j)) & 0xF];
2343   return ucn_len;
2344 }
2345
2346 /* Given a token TYPE corresponding to a digraph, return a pointer to
2347    the spelling of the digraph.  */
2348 static const unsigned char *
2349 cpp_digraph2name (enum cpp_ttype type)
2350 {
2351   return digraph_spellings[(int) type - (int) CPP_FIRST_DIGRAPH];
2352 }
2353
2354 /* Write the spelling of a token TOKEN to BUFFER.  The buffer must
2355    already contain the enough space to hold the token's spelling.
2356    Returns a pointer to the character after the last character written.
2357    FORSTRING is true if this is to be the spelling after translation
2358    phase 1 (this is different for UCNs).
2359    FIXME: Would be nice if we didn't need the PFILE argument.  */
2360 unsigned char *
2361 cpp_spell_token (cpp_reader *pfile, const cpp_token *token,
2362                  unsigned char *buffer, bool forstring)
2363 {
2364   switch (TOKEN_SPELL (token))
2365     {
2366     case SPELL_OPERATOR:
2367       {
2368         const unsigned char *spelling;
2369         unsigned char c;
2370
2371         if (token->flags & DIGRAPH)
2372           spelling = cpp_digraph2name (token->type);
2373         else if (token->flags & NAMED_OP)
2374           goto spell_ident;
2375         else
2376           spelling = TOKEN_NAME (token);
2377
2378         while ((c = *spelling++) != '\0')
2379           *buffer++ = c;
2380       }
2381       break;
2382
2383     spell_ident:
2384     case SPELL_IDENT:
2385       if (forstring)
2386         {
2387           memcpy (buffer, NODE_NAME (token->val.node.node),
2388                   NODE_LEN (token->val.node.node));
2389           buffer += NODE_LEN (token->val.node.node);
2390         }
2391       else
2392         {
2393           size_t i;
2394           const unsigned char * name = NODE_NAME (token->val.node.node);
2395           
2396           for (i = 0; i < NODE_LEN (token->val.node.node); i++)
2397             if (name[i] & ~0x7F)
2398               {
2399                 i += utf8_to_ucn (buffer, name + i) - 1;
2400                 buffer += 10;
2401               }
2402             else
2403               *buffer++ = NODE_NAME (token->val.node.node)[i];
2404         }
2405       break;
2406
2407     case SPELL_LITERAL:
2408       memcpy (buffer, token->val.str.text, token->val.str.len);
2409       buffer += token->val.str.len;
2410       break;
2411
2412     case SPELL_NONE:
2413       cpp_error (pfile, CPP_DL_ICE,
2414                  "unspellable token %s", TOKEN_NAME (token));
2415       break;
2416     }
2417
2418   return buffer;
2419 }
2420
2421 /* Returns TOKEN spelt as a null-terminated string.  The string is
2422    freed when the reader is destroyed.  Useful for diagnostics.  */
2423 unsigned char *
2424 cpp_token_as_text (cpp_reader *pfile, const cpp_token *token)
2425
2426   unsigned int len = cpp_token_len (token) + 1;
2427   unsigned char *start = _cpp_unaligned_alloc (pfile, len), *end;
2428
2429   end = cpp_spell_token (pfile, token, start, false);
2430   end[0] = '\0';
2431
2432   return start;
2433 }
2434
2435 /* Returns a pointer to a string which spells the token defined by
2436    TYPE and FLAGS.  Used by C front ends, which really should move to
2437    using cpp_token_as_text.  */
2438 const char *
2439 cpp_type2name (enum cpp_ttype type, unsigned char flags)
2440 {
2441   if (flags & DIGRAPH)
2442     return (const char *) cpp_digraph2name (type);
2443   else if (flags & NAMED_OP)
2444     return cpp_named_operator2name (type);
2445
2446   return (const char *) token_spellings[type].name;
2447 }
2448
2449 /* Writes the spelling of token to FP, without any preceding space.
2450    Separated from cpp_spell_token for efficiency - to avoid stdio
2451    double-buffering.  */
2452 void
2453 cpp_output_token (const cpp_token *token, FILE *fp)
2454 {
2455   switch (TOKEN_SPELL (token))
2456     {
2457     case SPELL_OPERATOR:
2458       {
2459         const unsigned char *spelling;
2460         int c;
2461
2462         if (token->flags & DIGRAPH)
2463           spelling = cpp_digraph2name (token->type);
2464         else if (token->flags & NAMED_OP)
2465           goto spell_ident;
2466         else
2467           spelling = TOKEN_NAME (token);
2468
2469         c = *spelling;
2470         do
2471           putc (c, fp);
2472         while ((c = *++spelling) != '\0');
2473       }
2474       break;
2475
2476     spell_ident:
2477     case SPELL_IDENT:
2478       {
2479         size_t i;
2480         const unsigned char * name = NODE_NAME (token->val.node.node);
2481         
2482         for (i = 0; i < NODE_LEN (token->val.node.node); i++)
2483           if (name[i] & ~0x7F)
2484             {
2485               unsigned char buffer[10];
2486               i += utf8_to_ucn (buffer, name + i) - 1;
2487               fwrite (buffer, 1, 10, fp);
2488             }
2489           else
2490             fputc (NODE_NAME (token->val.node.node)[i], fp);
2491       }
2492       break;
2493
2494     case SPELL_LITERAL:
2495       fwrite (token->val.str.text, 1, token->val.str.len, fp);
2496       break;
2497
2498     case SPELL_NONE:
2499       /* An error, most probably.  */
2500       break;
2501     }
2502 }
2503
2504 /* Compare two tokens.  */
2505 int
2506 _cpp_equiv_tokens (const cpp_token *a, const cpp_token *b)
2507 {
2508   if (a->type == b->type && a->flags == b->flags)
2509     switch (TOKEN_SPELL (a))
2510       {
2511       default:                  /* Keep compiler happy.  */
2512       case SPELL_OPERATOR:
2513         /* token_no is used to track where multiple consecutive ##
2514            tokens were originally located.  */
2515         return (a->type != CPP_PASTE || a->val.token_no == b->val.token_no);
2516       case SPELL_NONE:
2517         return (a->type != CPP_MACRO_ARG
2518                 || a->val.macro_arg.arg_no == b->val.macro_arg.arg_no);
2519       case SPELL_IDENT:
2520         return a->val.node.node == b->val.node.node;
2521       case SPELL_LITERAL:
2522         return (a->val.str.len == b->val.str.len
2523                 && !memcmp (a->val.str.text, b->val.str.text,
2524                             a->val.str.len));
2525       }
2526
2527   return 0;
2528 }
2529
2530 /* Returns nonzero if a space should be inserted to avoid an
2531    accidental token paste for output.  For simplicity, it is
2532    conservative, and occasionally advises a space where one is not
2533    needed, e.g. "." and ".2".  */
2534 int
2535 cpp_avoid_paste (cpp_reader *pfile, const cpp_token *token1,
2536                  const cpp_token *token2)
2537 {
2538   enum cpp_ttype a = token1->type, b = token2->type;
2539   cppchar_t c;
2540
2541   if (token1->flags & NAMED_OP)
2542     a = CPP_NAME;
2543   if (token2->flags & NAMED_OP)
2544     b = CPP_NAME;
2545
2546   c = EOF;
2547   if (token2->flags & DIGRAPH)
2548     c = digraph_spellings[(int) b - (int) CPP_FIRST_DIGRAPH][0];
2549   else if (token_spellings[b].category == SPELL_OPERATOR)
2550     c = token_spellings[b].name[0];
2551
2552   /* Quickly get everything that can paste with an '='.  */
2553   if ((int) a <= (int) CPP_LAST_EQ && c == '=')
2554     return 1;
2555
2556   switch (a)
2557     {
2558     case CPP_GREATER:   return c == '>';
2559     case CPP_LESS:      return c == '<' || c == '%' || c == ':';
2560     case CPP_PLUS:      return c == '+';
2561     case CPP_MINUS:     return c == '-' || c == '>';
2562     case CPP_DIV:       return c == '/' || c == '*'; /* Comments.  */
2563     case CPP_MOD:       return c == ':' || c == '>';
2564     case CPP_AND:       return c == '&';
2565     case CPP_OR:        return c == '|';
2566     case CPP_COLON:     return c == ':' || c == '>';
2567     case CPP_DEREF:     return c == '*';
2568     case CPP_DOT:       return c == '.' || c == '%' || b == CPP_NUMBER;
2569     case CPP_HASH:      return c == '#' || c == '%'; /* Digraph form.  */
2570     case CPP_NAME:      return ((b == CPP_NUMBER
2571                                  && name_p (pfile, &token2->val.str))
2572                                 || b == CPP_NAME
2573                                 || b == CPP_CHAR || b == CPP_STRING); /* L */
2574     case CPP_NUMBER:    return (b == CPP_NUMBER || b == CPP_NAME
2575                                 || c == '.' || c == '+' || c == '-');
2576                                       /* UCNs */
2577     case CPP_OTHER:     return ((token1->val.str.text[0] == '\\'
2578                                  && b == CPP_NAME)
2579                                 || (CPP_OPTION (pfile, objc)
2580                                     && token1->val.str.text[0] == '@'
2581                                     && (b == CPP_NAME || b == CPP_STRING)));
2582     default:            break;
2583     }
2584
2585   return 0;
2586 }
2587
2588 /* Output all the remaining tokens on the current line, and a newline
2589    character, to FP.  Leading whitespace is removed.  If there are
2590    macros, special token padding is not performed.  */
2591 void
2592 cpp_output_line (cpp_reader *pfile, FILE *fp)
2593 {
2594   const cpp_token *token;
2595
2596   token = cpp_get_token (pfile);
2597   while (token->type != CPP_EOF)
2598     {
2599       cpp_output_token (token, fp);
2600       token = cpp_get_token (pfile);
2601       if (token->flags & PREV_WHITE)
2602         putc (' ', fp);
2603     }
2604
2605   putc ('\n', fp);
2606 }
2607
2608 /* Return a string representation of all the remaining tokens on the
2609    current line.  The result is allocated using xmalloc and must be
2610    freed by the caller.  */
2611 unsigned char *
2612 cpp_output_line_to_string (cpp_reader *pfile, const unsigned char *dir_name)
2613 {
2614   const cpp_token *token;
2615   unsigned int out = dir_name ? ustrlen (dir_name) : 0;
2616   unsigned int alloced = 120 + out;
2617   unsigned char *result = (unsigned char *) xmalloc (alloced);
2618
2619   /* If DIR_NAME is empty, there are no initial contents.  */
2620   if (dir_name)
2621     {
2622       sprintf ((char *) result, "#%s ", dir_name);
2623       out += 2;
2624     }
2625
2626   token = cpp_get_token (pfile);
2627   while (token->type != CPP_EOF)
2628     {
2629       unsigned char *last;
2630       /* Include room for a possible space and the terminating nul.  */
2631       unsigned int len = cpp_token_len (token) + 2;
2632
2633       if (out + len > alloced)
2634         {
2635           alloced *= 2;
2636           if (out + len > alloced)
2637             alloced = out + len;
2638           result = (unsigned char *) xrealloc (result, alloced);
2639         }
2640
2641       last = cpp_spell_token (pfile, token, &result[out], 0);
2642       out = last - result;
2643
2644       token = cpp_get_token (pfile);
2645       if (token->flags & PREV_WHITE)
2646         result[out++] = ' ';
2647     }
2648
2649   result[out] = '\0';
2650   return result;
2651 }
2652
2653 /* Memory buffers.  Changing these three constants can have a dramatic
2654    effect on performance.  The values here are reasonable defaults,
2655    but might be tuned.  If you adjust them, be sure to test across a
2656    range of uses of cpplib, including heavy nested function-like macro
2657    expansion.  Also check the change in peak memory usage (NJAMD is a
2658    good tool for this).  */
2659 #define MIN_BUFF_SIZE 8000
2660 #define BUFF_SIZE_UPPER_BOUND(MIN_SIZE) (MIN_BUFF_SIZE + (MIN_SIZE) * 3 / 2)
2661 #define EXTENDED_BUFF_SIZE(BUFF, MIN_EXTRA) \
2662         (MIN_EXTRA + ((BUFF)->limit - (BUFF)->cur) * 2)
2663
2664 #if MIN_BUFF_SIZE > BUFF_SIZE_UPPER_BOUND (0)
2665   #error BUFF_SIZE_UPPER_BOUND must be at least as large as MIN_BUFF_SIZE!
2666 #endif
2667
2668 /* Create a new allocation buffer.  Place the control block at the end
2669    of the buffer, so that buffer overflows will cause immediate chaos.  */
2670 static _cpp_buff *
2671 new_buff (size_t len)
2672 {
2673   _cpp_buff *result;
2674   unsigned char *base;
2675
2676   if (len < MIN_BUFF_SIZE)
2677     len = MIN_BUFF_SIZE;
2678   len = CPP_ALIGN (len);
2679
2680   base = XNEWVEC (unsigned char, len + sizeof (_cpp_buff));
2681   result = (_cpp_buff *) (base + len);
2682   result->base = base;
2683   result->cur = base;
2684   result->limit = base + len;
2685   result->next = NULL;
2686   return result;
2687 }
2688
2689 /* Place a chain of unwanted allocation buffers on the free list.  */
2690 void
2691 _cpp_release_buff (cpp_reader *pfile, _cpp_buff *buff)
2692 {
2693   _cpp_buff *end = buff;
2694
2695   while (end->next)
2696     end = end->next;
2697   end->next = pfile->free_buffs;
2698   pfile->free_buffs = buff;
2699 }
2700
2701 /* Return a free buffer of size at least MIN_SIZE.  */
2702 _cpp_buff *
2703 _cpp_get_buff (cpp_reader *pfile, size_t min_size)
2704 {
2705   _cpp_buff *result, **p;
2706
2707   for (p = &pfile->free_buffs;; p = &(*p)->next)
2708     {
2709       size_t size;
2710
2711       if (*p == NULL)
2712         return new_buff (min_size);
2713       result = *p;
2714       size = result->limit - result->base;
2715       /* Return a buffer that's big enough, but don't waste one that's
2716          way too big.  */
2717       if (size >= min_size && size <= BUFF_SIZE_UPPER_BOUND (min_size))
2718         break;
2719     }
2720
2721   *p = result->next;
2722   result->next = NULL;
2723   result->cur = result->base;
2724   return result;
2725 }
2726
2727 /* Creates a new buffer with enough space to hold the uncommitted
2728    remaining bytes of BUFF, and at least MIN_EXTRA more bytes.  Copies
2729    the excess bytes to the new buffer.  Chains the new buffer after
2730    BUFF, and returns the new buffer.  */
2731 _cpp_buff *
2732 _cpp_append_extend_buff (cpp_reader *pfile, _cpp_buff *buff, size_t min_extra)
2733 {
2734   size_t size = EXTENDED_BUFF_SIZE (buff, min_extra);
2735   _cpp_buff *new_buff = _cpp_get_buff (pfile, size);
2736
2737   buff->next = new_buff;
2738   memcpy (new_buff->base, buff->cur, BUFF_ROOM (buff));
2739   return new_buff;
2740 }
2741
2742 /* Creates a new buffer with enough space to hold the uncommitted
2743    remaining bytes of the buffer pointed to by BUFF, and at least
2744    MIN_EXTRA more bytes.  Copies the excess bytes to the new buffer.
2745    Chains the new buffer before the buffer pointed to by BUFF, and
2746    updates the pointer to point to the new buffer.  */
2747 void
2748 _cpp_extend_buff (cpp_reader *pfile, _cpp_buff **pbuff, size_t min_extra)
2749 {
2750   _cpp_buff *new_buff, *old_buff = *pbuff;
2751   size_t size = EXTENDED_BUFF_SIZE (old_buff, min_extra);
2752
2753   new_buff = _cpp_get_buff (pfile, size);
2754   memcpy (new_buff->base, old_buff->cur, BUFF_ROOM (old_buff));
2755   new_buff->next = old_buff;
2756   *pbuff = new_buff;
2757 }
2758
2759 /* Free a chain of buffers starting at BUFF.  */
2760 void
2761 _cpp_free_buff (_cpp_buff *buff)
2762 {
2763   _cpp_buff *next;
2764
2765   for (; buff; buff = next)
2766     {
2767       next = buff->next;
2768       free (buff->base);
2769     }
2770 }
2771
2772 /* Allocate permanent, unaligned storage of length LEN.  */
2773 unsigned char *
2774 _cpp_unaligned_alloc (cpp_reader *pfile, size_t len)
2775 {
2776   _cpp_buff *buff = pfile->u_buff;
2777   unsigned char *result = buff->cur;
2778
2779   if (len > (size_t) (buff->limit - result))
2780     {
2781       buff = _cpp_get_buff (pfile, len);
2782       buff->next = pfile->u_buff;
2783       pfile->u_buff = buff;
2784       result = buff->cur;
2785     }
2786
2787   buff->cur = result + len;
2788   return result;
2789 }
2790
2791 /* Allocate permanent, unaligned storage of length LEN from a_buff.
2792    That buffer is used for growing allocations when saving macro
2793    replacement lists in a #define, and when parsing an answer to an
2794    assertion in #assert, #unassert or #if (and therefore possibly
2795    whilst expanding macros).  It therefore must not be used by any
2796    code that they might call: specifically the lexer and the guts of
2797    the macro expander.
2798
2799    All existing other uses clearly fit this restriction: storing
2800    registered pragmas during initialization.  */
2801 unsigned char *
2802 _cpp_aligned_alloc (cpp_reader *pfile, size_t len)
2803 {
2804   _cpp_buff *buff = pfile->a_buff;
2805   unsigned char *result = buff->cur;
2806
2807   if (len > (size_t) (buff->limit - result))
2808     {
2809       buff = _cpp_get_buff (pfile, len);
2810       buff->next = pfile->a_buff;
2811       pfile->a_buff = buff;
2812       result = buff->cur;
2813     }
2814
2815   buff->cur = result + len;
2816   return result;
2817 }
2818
2819 /* Say which field of TOK is in use.  */
2820
2821 enum cpp_token_fld_kind
2822 cpp_token_val_index (cpp_token *tok)
2823 {
2824   switch (TOKEN_SPELL (tok))
2825     {
2826     case SPELL_IDENT:
2827       return CPP_TOKEN_FLD_NODE;
2828     case SPELL_LITERAL:
2829       return CPP_TOKEN_FLD_STR;
2830     case SPELL_OPERATOR:
2831       if (tok->type == CPP_PASTE)
2832         return CPP_TOKEN_FLD_TOKEN_NO;
2833       else
2834         return CPP_TOKEN_FLD_NONE;
2835     case SPELL_NONE:
2836       if (tok->type == CPP_MACRO_ARG)
2837         return CPP_TOKEN_FLD_ARG_NO;
2838       else if (tok->type == CPP_PADDING)
2839         return CPP_TOKEN_FLD_SOURCE;
2840       else if (tok->type == CPP_PRAGMA)
2841         return CPP_TOKEN_FLD_PRAGMA;
2842       /* else fall through */
2843     default:
2844       return CPP_TOKEN_FLD_NONE;
2845     }
2846 }