OpenCores
URL https://opencores.org/ocsvn/openrisc/openrisc/trunk

Subversion Repositories openrisc

[/] [openrisc/] [trunk/] [gnu-old/] [gcc-4.2.2/] [libcpp/] [macro.c] - Blame information for rev 867

Go to most recent revision | Details | Compare with Previous | View Log

Line No. Rev Author Line
1 38 julius
/* Part of CPP library.  (Macro and #define handling.)
2
   Copyright (C) 1986, 1987, 1989, 1992, 1993, 1994, 1995, 1996, 1998,
3
   1999, 2000, 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc.
4
   Written by Per Bothner, 1994.
5
   Based on CCCP program by Paul Rubin, June 1986
6
   Adapted to ANSI C, Richard Stallman, Jan 1987
7
 
8
This program is free software; you can redistribute it and/or modify it
9
under the terms of the GNU General Public License as published by the
10
Free Software Foundation; either version 2, or (at your option) any
11
later version.
12
 
13
This program is distributed in the hope that it will be useful,
14
but WITHOUT ANY WARRANTY; without even the implied warranty of
15
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16
GNU General Public License for more details.
17
 
18
You should have received a copy of the GNU General Public License
19
along with this program; if not, write to the Free Software
20
Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
21
 
22
 In other words, you are welcome to use, share and improve this program.
23
 You are forbidden to forbid anyone else to use, share and improve
24
 what you give them.   Help stamp out software-hoarding!  */
25
 
26
#include "config.h"
27
#include "system.h"
28
#include "cpplib.h"
29
#include "internal.h"
30
 
31
typedef struct macro_arg macro_arg;
32
struct macro_arg
33
{
34
  const cpp_token **first;      /* First token in unexpanded argument.  */
35
  const cpp_token **expanded;   /* Macro-expanded argument.  */
36
  const cpp_token *stringified; /* Stringified argument.  */
37
  unsigned int count;           /* # of tokens in argument.  */
38
  unsigned int expanded_count;  /* # of tokens in expanded argument.  */
39
};
40
 
41
/* Macro expansion.  */
42
 
43
static int enter_macro_context (cpp_reader *, cpp_hashnode *);
44
static int builtin_macro (cpp_reader *, cpp_hashnode *);
45
static void push_ptoken_context (cpp_reader *, cpp_hashnode *, _cpp_buff *,
46
                                 const cpp_token **, unsigned int);
47
static _cpp_buff *collect_args (cpp_reader *, const cpp_hashnode *);
48
static cpp_context *next_context (cpp_reader *);
49
static const cpp_token *padding_token (cpp_reader *, const cpp_token *);
50
static void expand_arg (cpp_reader *, macro_arg *);
51
static const cpp_token *new_string_token (cpp_reader *, uchar *, unsigned int);
52
static const cpp_token *stringify_arg (cpp_reader *, macro_arg *);
53
static void paste_all_tokens (cpp_reader *, const cpp_token *);
54
static bool paste_tokens (cpp_reader *, const cpp_token **, const cpp_token *);
55
static void replace_args (cpp_reader *, cpp_hashnode *, cpp_macro *,
56
                          macro_arg *);
57
static _cpp_buff *funlike_invocation_p (cpp_reader *, cpp_hashnode *);
58
static bool create_iso_definition (cpp_reader *, cpp_macro *);
59
 
60
/* #define directive parsing and handling.  */
61
 
62
static cpp_token *alloc_expansion_token (cpp_reader *, cpp_macro *);
63
static cpp_token *lex_expansion_token (cpp_reader *, cpp_macro *);
64
static bool warn_of_redefinition (cpp_reader *, const cpp_hashnode *,
65
                                  const cpp_macro *);
66
static bool parse_params (cpp_reader *, cpp_macro *);
67
static void check_trad_stringification (cpp_reader *, const cpp_macro *,
68
                                        const cpp_string *);
69
 
70
/* Emits a warning if NODE is a macro defined in the main file that
71
   has not been used.  */
72
int
73
_cpp_warn_if_unused_macro (cpp_reader *pfile, cpp_hashnode *node,
74
                           void *v ATTRIBUTE_UNUSED)
75
{
76
  if (node->type == NT_MACRO && !(node->flags & NODE_BUILTIN))
77
    {
78
      cpp_macro *macro = node->value.macro;
79
 
80
      if (!macro->used
81
          && MAIN_FILE_P (linemap_lookup (pfile->line_table, macro->line)))
82
        cpp_error_with_line (pfile, CPP_DL_WARNING, macro->line, 0,
83
                             "macro \"%s\" is not used", NODE_NAME (node));
84
    }
85
 
86
  return 1;
87
}
88
 
89
/* Allocates and returns a CPP_STRING token, containing TEXT of length
90
   LEN, after null-terminating it.  TEXT must be in permanent storage.  */
91
static const cpp_token *
92
new_string_token (cpp_reader *pfile, unsigned char *text, unsigned int len)
93
{
94
  cpp_token *token = _cpp_temp_token (pfile);
95
 
96
  text[len] = '\0';
97
  token->type = CPP_STRING;
98
  token->val.str.len = len;
99
  token->val.str.text = text;
100
  token->flags = 0;
101
  return token;
102
}
103
 
104
static const char * const monthnames[] =
105
{
106
  "Jan", "Feb", "Mar", "Apr", "May", "Jun",
107
  "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"
108
};
109
 
110
/* Helper function for builtin_macro.  Returns the text generated by
111
   a builtin macro. */
112
const uchar *
113
_cpp_builtin_macro_text (cpp_reader *pfile, cpp_hashnode *node)
114
{
115
  const struct line_map *map;
116
  const uchar *result = NULL;
117
  unsigned int number = 1;
118
 
119
  switch (node->value.builtin)
120
    {
121
    default:
122
      cpp_error (pfile, CPP_DL_ICE, "invalid built-in macro \"%s\"",
123
                 NODE_NAME (node));
124
      break;
125
 
126
    case BT_TIMESTAMP:
127
      {
128
        cpp_buffer *pbuffer = cpp_get_buffer (pfile);
129
        if (pbuffer->timestamp == NULL)
130
          {
131
            /* Initialize timestamp value of the assotiated file. */
132
            struct _cpp_file *file = cpp_get_file (pbuffer);
133
            if (file)
134
              {
135
                /* Generate __TIMESTAMP__ string, that represents
136
                   the date and time of the last modification
137
                   of the current source file. The string constant
138
                   looks like "Sun Sep 16 01:03:52 1973".  */
139
                struct tm *tb = NULL;
140
                struct stat *st = _cpp_get_file_stat (file);
141
                if (st)
142
                  tb = localtime (&st->st_mtime);
143
                if (tb)
144
                  {
145
                    char *str = asctime (tb);
146
                    size_t len = strlen (str);
147
                    unsigned char *buf = _cpp_unaligned_alloc (pfile, len + 2);
148
                    buf[0] = '"';
149
                    strcpy ((char *) buf + 1, str);
150
                    buf[len] = '"';
151
                    pbuffer->timestamp = buf;
152
                  }
153
                else
154
                  {
155
                    cpp_errno (pfile, CPP_DL_WARNING,
156
                        "could not determine file timestamp");
157
                    pbuffer->timestamp = U"\"??? ??? ?? ??:??:?? ????\"";
158
                  }
159
              }
160
          }
161
        result = pbuffer->timestamp;
162
      }
163
      break;
164
    case BT_FILE:
165
    case BT_BASE_FILE:
166
      {
167
        unsigned int len;
168
        const char *name;
169
        uchar *buf;
170
        map = linemap_lookup (pfile->line_table, pfile->line_table->highest_line);
171
 
172
        if (node->value.builtin == BT_BASE_FILE)
173
          while (! MAIN_FILE_P (map))
174
            map = INCLUDED_FROM (pfile->line_table, map);
175
 
176
        name = map->to_file;
177
        len = strlen (name);
178
        buf = _cpp_unaligned_alloc (pfile, len * 2 + 3);
179
        result = buf;
180
        *buf = '"';
181
        buf = cpp_quote_string (buf + 1, (const unsigned char *) name, len);
182
        *buf++ = '"';
183
        *buf = '\0';
184
      }
185
      break;
186
 
187
    case BT_INCLUDE_LEVEL:
188
      /* The line map depth counts the primary source as level 1, but
189
         historically __INCLUDE_DEPTH__ has called the primary source
190
         level 0.  */
191
      number = pfile->line_table->depth - 1;
192
      break;
193
 
194
    case BT_SPECLINE:
195
      map = &pfile->line_table->maps[pfile->line_table->used-1];
196
      /* If __LINE__ is embedded in a macro, it must expand to the
197
         line of the macro's invocation, not its definition.
198
         Otherwise things like assert() will not work properly.  */
199
      if (CPP_OPTION (pfile, traditional))
200
        number = pfile->line_table->highest_line;
201
      else
202
        number = pfile->cur_token[-1].src_loc;
203
      number = SOURCE_LINE (map, number);
204
      break;
205
 
206
      /* __STDC__ has the value 1 under normal circumstances.
207
         However, if (a) we are in a system header, (b) the option
208
         stdc_0_in_system_headers is true (set by target config), and
209
         (c) we are not in strictly conforming mode, then it has the
210
         value 0.  (b) and (c) are already checked in cpp_init_builtins.  */
211
    case BT_STDC:
212
      if (cpp_in_system_header (pfile))
213
        number = 0;
214
      else
215
        number = 1;
216
      break;
217
 
218
    case BT_DATE:
219
    case BT_TIME:
220
      if (pfile->date == NULL)
221
        {
222
          /* Allocate __DATE__ and __TIME__ strings from permanent
223
             storage.  We only do this once, and don't generate them
224
             at init time, because time() and localtime() are very
225
             slow on some systems.  */
226
          time_t tt;
227
          struct tm *tb = NULL;
228
 
229
          /* (time_t) -1 is a legitimate value for "number of seconds
230
             since the Epoch", so we have to do a little dance to
231
             distinguish that from a genuine error.  */
232
          errno = 0;
233
          tt = time(NULL);
234
          if (tt != (time_t)-1 || errno == 0)
235
            tb = localtime (&tt);
236
 
237
          if (tb)
238
            {
239
              pfile->date = _cpp_unaligned_alloc (pfile,
240
                                                  sizeof ("\"Oct 11 1347\""));
241
              sprintf ((char *) pfile->date, "\"%s %2d %4d\"",
242
                       monthnames[tb->tm_mon], tb->tm_mday,
243
                       tb->tm_year + 1900);
244
 
245
              pfile->time = _cpp_unaligned_alloc (pfile,
246
                                                  sizeof ("\"12:34:56\""));
247
              sprintf ((char *) pfile->time, "\"%02d:%02d:%02d\"",
248
                       tb->tm_hour, tb->tm_min, tb->tm_sec);
249
            }
250
          else
251
            {
252
              cpp_errno (pfile, CPP_DL_WARNING,
253
                         "could not determine date and time");
254
 
255
              pfile->date = U"\"??? ?? ????\"";
256
              pfile->time = U"\"??:??:??\"";
257
            }
258
        }
259
 
260
      if (node->value.builtin == BT_DATE)
261
        result = pfile->date;
262
      else
263
        result = pfile->time;
264
      break;
265
    }
266
 
267
  if (result == NULL)
268
    {
269
      /* 21 bytes holds all NUL-terminated unsigned 64-bit numbers.  */
270
      result = _cpp_unaligned_alloc (pfile, 21);
271
      sprintf ((char *) result, "%u", number);
272
    }
273
 
274
  return result;
275
}
276
 
277
/* Convert builtin macros like __FILE__ to a token and push it on the
278
   context stack.  Also handles _Pragma, for which a new token may not
279
   be created.  Returns 1 if it generates a new token context, 0 to
280
   return the token to the caller.  */
281
static int
282
builtin_macro (cpp_reader *pfile, cpp_hashnode *node)
283
{
284
  const uchar *buf;
285
  size_t len;
286
  char *nbuf;
287
 
288
  if (node->value.builtin == BT_PRAGMA)
289
    {
290
      /* Don't interpret _Pragma within directives.  The standard is
291
         not clear on this, but to me this makes most sense.  */
292
      if (pfile->state.in_directive)
293
        return 0;
294
 
295
      _cpp_do__Pragma (pfile);
296
      return 1;
297
    }
298
 
299
  buf = _cpp_builtin_macro_text (pfile, node);
300
  len = ustrlen (buf);
301
  nbuf = (char *) alloca (len + 1);
302
  memcpy (nbuf, buf, len);
303
  nbuf[len]='\n';
304
 
305
  cpp_push_buffer (pfile, (uchar *) nbuf, len, /* from_stage3 */ true);
306
  _cpp_clean_line (pfile);
307
 
308
  /* Set pfile->cur_token as required by _cpp_lex_direct.  */
309
  pfile->cur_token = _cpp_temp_token (pfile);
310
  _cpp_push_token_context (pfile, NULL, _cpp_lex_direct (pfile), 1);
311
  if (pfile->buffer->cur != pfile->buffer->rlimit)
312
    cpp_error (pfile, CPP_DL_ICE, "invalid built-in macro \"%s\"",
313
               NODE_NAME (node));
314
  _cpp_pop_buffer (pfile);
315
 
316
  return 1;
317
}
318
 
319
/* Copies SRC, of length LEN, to DEST, adding backslashes before all
320
   backslashes and double quotes. DEST must be of sufficient size.
321
   Returns a pointer to the end of the string.  */
322
uchar *
323
cpp_quote_string (uchar *dest, const uchar *src, unsigned int len)
324
{
325
  while (len--)
326
    {
327
      uchar c = *src++;
328
 
329
      if (c == '\\' || c == '"')
330
        {
331
          *dest++ = '\\';
332
          *dest++ = c;
333
        }
334
      else
335
          *dest++ = c;
336
    }
337
 
338
  return dest;
339
}
340
 
341
/* Convert a token sequence ARG to a single string token according to
342
   the rules of the ISO C #-operator.  */
343
static const cpp_token *
344
stringify_arg (cpp_reader *pfile, macro_arg *arg)
345
{
346
  unsigned char *dest;
347
  unsigned int i, escape_it, backslash_count = 0;
348
  const cpp_token *source = NULL;
349
  size_t len;
350
 
351
  if (BUFF_ROOM (pfile->u_buff) < 3)
352
    _cpp_extend_buff (pfile, &pfile->u_buff, 3);
353
  dest = BUFF_FRONT (pfile->u_buff);
354
  *dest++ = '"';
355
 
356
  /* Loop, reading in the argument's tokens.  */
357
  for (i = 0; i < arg->count; i++)
358
    {
359
      const cpp_token *token = arg->first[i];
360
 
361
      if (token->type == CPP_PADDING)
362
        {
363
          if (source == NULL)
364
            source = token->val.source;
365
          continue;
366
        }
367
 
368
      escape_it = (token->type == CPP_STRING || token->type == CPP_WSTRING
369
                   || token->type == CPP_CHAR || token->type == CPP_WCHAR);
370
 
371
      /* Room for each char being written in octal, initial space and
372
         final quote and NUL.  */
373
      len = cpp_token_len (token);
374
      if (escape_it)
375
        len *= 4;
376
      len += 3;
377
 
378
      if ((size_t) (BUFF_LIMIT (pfile->u_buff) - dest) < len)
379
        {
380
          size_t len_so_far = dest - BUFF_FRONT (pfile->u_buff);
381
          _cpp_extend_buff (pfile, &pfile->u_buff, len);
382
          dest = BUFF_FRONT (pfile->u_buff) + len_so_far;
383
        }
384
 
385
      /* Leading white space?  */
386
      if (dest - 1 != BUFF_FRONT (pfile->u_buff))
387
        {
388
          if (source == NULL)
389
            source = token;
390
          if (source->flags & PREV_WHITE)
391
            *dest++ = ' ';
392
        }
393
      source = NULL;
394
 
395
      if (escape_it)
396
        {
397
          _cpp_buff *buff = _cpp_get_buff (pfile, len);
398
          unsigned char *buf = BUFF_FRONT (buff);
399
          len = cpp_spell_token (pfile, token, buf, true) - buf;
400
          dest = cpp_quote_string (dest, buf, len);
401
          _cpp_release_buff (pfile, buff);
402
        }
403
      else
404
        dest = cpp_spell_token (pfile, token, dest, true);
405
 
406
      if (token->type == CPP_OTHER && token->val.str.text[0] == '\\')
407
        backslash_count++;
408
      else
409
        backslash_count = 0;
410
    }
411
 
412
  /* Ignore the final \ of invalid string literals.  */
413
  if (backslash_count & 1)
414
    {
415
      cpp_error (pfile, CPP_DL_WARNING,
416
                 "invalid string literal, ignoring final '\\'");
417
      dest--;
418
    }
419
 
420
  /* Commit the memory, including NUL, and return the token.  */
421
  *dest++ = '"';
422
  len = dest - BUFF_FRONT (pfile->u_buff);
423
  BUFF_FRONT (pfile->u_buff) = dest + 1;
424
  return new_string_token (pfile, dest - len, len);
425
}
426
 
427
/* Try to paste two tokens.  On success, return nonzero.  In any
428
   case, PLHS is updated to point to the pasted token, which is
429
   guaranteed to not have the PASTE_LEFT flag set.  */
430
static bool
431
paste_tokens (cpp_reader *pfile, const cpp_token **plhs, const cpp_token *rhs)
432
{
433
  unsigned char *buf, *end, *lhsend;
434
  const cpp_token *lhs;
435
  unsigned int len;
436
 
437
  lhs = *plhs;
438
  len = cpp_token_len (lhs) + cpp_token_len (rhs) + 1;
439
  buf = (unsigned char *) alloca (len);
440
  end = lhsend = cpp_spell_token (pfile, lhs, buf, false);
441
 
442
  /* Avoid comment headers, since they are still processed in stage 3.
443
     It is simpler to insert a space here, rather than modifying the
444
     lexer to ignore comments in some circumstances.  Simply returning
445
     false doesn't work, since we want to clear the PASTE_LEFT flag.  */
446
  if (lhs->type == CPP_DIV && rhs->type != CPP_EQ)
447
    *end++ = ' ';
448
  end = cpp_spell_token (pfile, rhs, end, false);
449
  *end = '\n';
450
 
451
  cpp_push_buffer (pfile, buf, end - buf, /* from_stage3 */ true);
452
  _cpp_clean_line (pfile);
453
 
454
  /* Set pfile->cur_token as required by _cpp_lex_direct.  */
455
  pfile->cur_token = _cpp_temp_token (pfile);
456
  *plhs = _cpp_lex_direct (pfile);
457
  if (pfile->buffer->cur != pfile->buffer->rlimit)
458
    {
459
      _cpp_pop_buffer (pfile);
460
      _cpp_backup_tokens (pfile, 1);
461
      *lhsend = '\0';
462
 
463
      /* Mandatory error for all apart from assembler.  */
464
      if (CPP_OPTION (pfile, lang) != CLK_ASM)
465
        cpp_error (pfile, CPP_DL_ERROR,
466
         "pasting \"%s\" and \"%s\" does not give a valid preprocessing token",
467
                   buf, cpp_token_as_text (pfile, rhs));
468
      return false;
469
    }
470
 
471
  _cpp_pop_buffer (pfile);
472
  return true;
473
}
474
 
475
/* Handles an arbitrarily long sequence of ## operators, with initial
476
   operand LHS.  This implementation is left-associative,
477
   non-recursive, and finishes a paste before handling succeeding
478
   ones.  If a paste fails, we back up to the RHS of the failing ##
479
   operator before pushing the context containing the result of prior
480
   successful pastes, with the effect that the RHS appears in the
481
   output stream after the pasted LHS normally.  */
482
static void
483
paste_all_tokens (cpp_reader *pfile, const cpp_token *lhs)
484
{
485
  const cpp_token *rhs;
486
  cpp_context *context = pfile->context;
487
 
488
  do
489
    {
490
      /* Take the token directly from the current context.  We can do
491
         this, because we are in the replacement list of either an
492
         object-like macro, or a function-like macro with arguments
493
         inserted.  In either case, the constraints to #define
494
         guarantee we have at least one more token.  */
495
      if (context->direct_p)
496
        rhs = FIRST (context).token++;
497
      else
498
        rhs = *FIRST (context).ptoken++;
499
 
500
      if (rhs->type == CPP_PADDING)
501
        abort ();
502
 
503
      if (!paste_tokens (pfile, &lhs, rhs))
504
        break;
505
    }
506
  while (rhs->flags & PASTE_LEFT);
507
 
508
  /* Put the resulting token in its own context.  */
509
  _cpp_push_token_context (pfile, NULL, lhs, 1);
510
}
511
 
512
/* Returns TRUE if the number of arguments ARGC supplied in an
513
   invocation of the MACRO referenced by NODE is valid.  An empty
514
   invocation to a macro with no parameters should pass ARGC as zero.
515
 
516
   Note that MACRO cannot necessarily be deduced from NODE, in case
517
   NODE was redefined whilst collecting arguments.  */
518
bool
519
_cpp_arguments_ok (cpp_reader *pfile, cpp_macro *macro, const cpp_hashnode *node, unsigned int argc)
520
{
521
  if (argc == macro->paramc)
522
    return true;
523
 
524
  if (argc < macro->paramc)
525
    {
526
      /* As an extension, a rest argument is allowed to not appear in
527
         the invocation at all.
528
         e.g. #define debug(format, args...) something
529
         debug("string");
530
 
531
         This is exactly the same as if there had been an empty rest
532
         argument - debug("string", ).  */
533
 
534
      if (argc + 1 == macro->paramc && macro->variadic)
535
        {
536
          if (CPP_PEDANTIC (pfile) && ! macro->syshdr)
537
            cpp_error (pfile, CPP_DL_PEDWARN,
538
                       "ISO C99 requires rest arguments to be used");
539
          return true;
540
        }
541
 
542
      cpp_error (pfile, CPP_DL_ERROR,
543
                 "macro \"%s\" requires %u arguments, but only %u given",
544
                 NODE_NAME (node), macro->paramc, argc);
545
    }
546
  else
547
    cpp_error (pfile, CPP_DL_ERROR,
548
               "macro \"%s\" passed %u arguments, but takes just %u",
549
               NODE_NAME (node), argc, macro->paramc);
550
 
551
  return false;
552
}
553
 
554
/* Reads and returns the arguments to a function-like macro
555
   invocation.  Assumes the opening parenthesis has been processed.
556
   If there is an error, emits an appropriate diagnostic and returns
557
   NULL.  Each argument is terminated by a CPP_EOF token, for the
558
   future benefit of expand_arg().  */
559
static _cpp_buff *
560
collect_args (cpp_reader *pfile, const cpp_hashnode *node)
561
{
562
  _cpp_buff *buff, *base_buff;
563
  cpp_macro *macro;
564
  macro_arg *args, *arg;
565
  const cpp_token *token;
566
  unsigned int argc;
567
 
568
  macro = node->value.macro;
569
  if (macro->paramc)
570
    argc = macro->paramc;
571
  else
572
    argc = 1;
573
  buff = _cpp_get_buff (pfile, argc * (50 * sizeof (cpp_token *)
574
                                       + sizeof (macro_arg)));
575
  base_buff = buff;
576
  args = (macro_arg *) buff->base;
577
  memset (args, 0, argc * sizeof (macro_arg));
578
  buff->cur = (unsigned char *) &args[argc];
579
  arg = args, argc = 0;
580
 
581
  /* Collect the tokens making up each argument.  We don't yet know
582
     how many arguments have been supplied, whether too many or too
583
     few.  Hence the slightly bizarre usage of "argc" and "arg".  */
584
  do
585
    {
586
      unsigned int paren_depth = 0;
587
      unsigned int ntokens = 0;
588
 
589
      argc++;
590
      arg->first = (const cpp_token **) buff->cur;
591
 
592
      for (;;)
593
        {
594
          /* Require space for 2 new tokens (including a CPP_EOF).  */
595
          if ((unsigned char *) &arg->first[ntokens + 2] > buff->limit)
596
            {
597
              buff = _cpp_append_extend_buff (pfile, buff,
598
                                              1000 * sizeof (cpp_token *));
599
              arg->first = (const cpp_token **) buff->cur;
600
            }
601
 
602
          token = cpp_get_token (pfile);
603
 
604
          if (token->type == CPP_PADDING)
605
            {
606
              /* Drop leading padding.  */
607
              if (ntokens == 0)
608
                continue;
609
            }
610
          else if (token->type == CPP_OPEN_PAREN)
611
            paren_depth++;
612
          else if (token->type == CPP_CLOSE_PAREN)
613
            {
614
              if (paren_depth-- == 0)
615
                break;
616
            }
617
          else if (token->type == CPP_COMMA)
618
            {
619
              /* A comma does not terminate an argument within
620
                 parentheses or as part of a variable argument.  */
621
              if (paren_depth == 0
622
                  && ! (macro->variadic && argc == macro->paramc))
623
                break;
624
            }
625
          else if (token->type == CPP_EOF
626
                   || (token->type == CPP_HASH && token->flags & BOL))
627
            break;
628
 
629
          arg->first[ntokens++] = token;
630
        }
631
 
632
      /* Drop trailing padding.  */
633
      while (ntokens > 0 && arg->first[ntokens - 1]->type == CPP_PADDING)
634
        ntokens--;
635
 
636
      arg->count = ntokens;
637
      arg->first[ntokens] = &pfile->eof;
638
 
639
      /* Terminate the argument.  Excess arguments loop back and
640
         overwrite the final legitimate argument, before failing.  */
641
      if (argc <= macro->paramc)
642
        {
643
          buff->cur = (unsigned char *) &arg->first[ntokens + 1];
644
          if (argc != macro->paramc)
645
            arg++;
646
        }
647
    }
648
  while (token->type != CPP_CLOSE_PAREN && token->type != CPP_EOF);
649
 
650
  if (token->type == CPP_EOF)
651
    {
652
      /* We still need the CPP_EOF to end directives, and to end
653
         pre-expansion of a macro argument.  Step back is not
654
         unconditional, since we don't want to return a CPP_EOF to our
655
         callers at the end of an -include-d file.  */
656
      if (pfile->context->prev || pfile->state.in_directive)
657
        _cpp_backup_tokens (pfile, 1);
658
      cpp_error (pfile, CPP_DL_ERROR,
659
                 "unterminated argument list invoking macro \"%s\"",
660
                 NODE_NAME (node));
661
    }
662
  else
663
    {
664
      /* A single empty argument is counted as no argument.  */
665
      if (argc == 1 && macro->paramc == 0 && args[0].count == 0)
666
        argc = 0;
667
      if (_cpp_arguments_ok (pfile, macro, node, argc))
668
        {
669
          /* GCC has special semantics for , ## b where b is a varargs
670
             parameter: we remove the comma if b was omitted entirely.
671
             If b was merely an empty argument, the comma is retained.
672
             If the macro takes just one (varargs) parameter, then we
673
             retain the comma only if we are standards conforming.
674
 
675
             If FIRST is NULL replace_args () swallows the comma.  */
676
          if (macro->variadic && (argc < macro->paramc
677
                                  || (argc == 1 && args[0].count == 0
678
                                      && !CPP_OPTION (pfile, std))))
679
            args[macro->paramc - 1].first = NULL;
680
          return base_buff;
681
        }
682
    }
683
 
684
  /* An error occurred.  */
685
  _cpp_release_buff (pfile, base_buff);
686
  return NULL;
687
}
688
 
689
/* Search for an opening parenthesis to the macro of NODE, in such a
690
   way that, if none is found, we don't lose the information in any
691
   intervening padding tokens.  If we find the parenthesis, collect
692
   the arguments and return the buffer containing them.  */
693
static _cpp_buff *
694
funlike_invocation_p (cpp_reader *pfile, cpp_hashnode *node)
695
{
696
  const cpp_token *token, *padding = NULL;
697
 
698
  for (;;)
699
    {
700
      token = cpp_get_token (pfile);
701
      if (token->type != CPP_PADDING)
702
        break;
703
      if (padding == NULL
704
          || (!(padding->flags & PREV_WHITE) && token->val.source == NULL))
705
        padding = token;
706
    }
707
 
708
  if (token->type == CPP_OPEN_PAREN)
709
    {
710
      pfile->state.parsing_args = 2;
711
      return collect_args (pfile, node);
712
    }
713
 
714
  /* CPP_EOF can be the end of macro arguments, or the end of the
715
     file.  We mustn't back up over the latter.  Ugh.  */
716
  if (token->type != CPP_EOF || token == &pfile->eof)
717
    {
718
      /* Back up.  We may have skipped padding, in which case backing
719
         up more than one token when expanding macros is in general
720
         too difficult.  We re-insert it in its own context.  */
721
      _cpp_backup_tokens (pfile, 1);
722
      if (padding)
723
        _cpp_push_token_context (pfile, NULL, padding, 1);
724
    }
725
 
726
  return NULL;
727
}
728
 
729
/* Push the context of a macro with hash entry NODE onto the context
730
   stack.  If we can successfully expand the macro, we push a context
731
   containing its yet-to-be-rescanned replacement list and return one.
732
   Otherwise, we don't push a context and return zero.  */
733
static int
734
enter_macro_context (cpp_reader *pfile, cpp_hashnode *node)
735
{
736
  /* The presence of a macro invalidates a file's controlling macro.  */
737
  pfile->mi_valid = false;
738
 
739
  pfile->state.angled_headers = false;
740
 
741
  /* Handle standard macros.  */
742
  if (! (node->flags & NODE_BUILTIN))
743
    {
744
      cpp_macro *macro = node->value.macro;
745
 
746
      if (macro->fun_like)
747
        {
748
          _cpp_buff *buff;
749
 
750
          pfile->state.prevent_expansion++;
751
          pfile->keep_tokens++;
752
          pfile->state.parsing_args = 1;
753
          buff = funlike_invocation_p (pfile, node);
754
          pfile->state.parsing_args = 0;
755
          pfile->keep_tokens--;
756
          pfile->state.prevent_expansion--;
757
 
758
          if (buff == NULL)
759
            {
760
              if (CPP_WTRADITIONAL (pfile) && ! node->value.macro->syshdr)
761
                cpp_error (pfile, CPP_DL_WARNING,
762
 "function-like macro \"%s\" must be used with arguments in traditional C",
763
                           NODE_NAME (node));
764
 
765
              return 0;
766
            }
767
 
768
          if (macro->paramc > 0)
769
            replace_args (pfile, node, macro, (macro_arg *) buff->base);
770
          _cpp_release_buff (pfile, buff);
771
        }
772
 
773
      /* Disable the macro within its expansion.  */
774
      node->flags |= NODE_DISABLED;
775
 
776
      macro->used = 1;
777
 
778
      if (macro->paramc == 0)
779
        _cpp_push_token_context (pfile, node, macro->exp.tokens, macro->count);
780
 
781
      return 1;
782
    }
783
 
784
  /* Handle built-in macros and the _Pragma operator.  */
785
  return builtin_macro (pfile, node);
786
}
787
 
788
/* Replace the parameters in a function-like macro of NODE with the
789
   actual ARGS, and place the result in a newly pushed token context.
790
   Expand each argument before replacing, unless it is operated upon
791
   by the # or ## operators.  */
792
static void
793
replace_args (cpp_reader *pfile, cpp_hashnode *node, cpp_macro *macro, macro_arg *args)
794
{
795
  unsigned int i, total;
796
  const cpp_token *src, *limit;
797
  const cpp_token **dest, **first;
798
  macro_arg *arg;
799
  _cpp_buff *buff;
800
 
801
  /* First, fully macro-expand arguments, calculating the number of
802
     tokens in the final expansion as we go.  The ordering of the if
803
     statements below is subtle; we must handle stringification before
804
     pasting.  */
805
  total = macro->count;
806
  limit = macro->exp.tokens + macro->count;
807
 
808
  for (src = macro->exp.tokens; src < limit; src++)
809
    if (src->type == CPP_MACRO_ARG)
810
      {
811
        /* Leading and trailing padding tokens.  */
812
        total += 2;
813
 
814
        /* We have an argument.  If it is not being stringified or
815
           pasted it is macro-replaced before insertion.  */
816
        arg = &args[src->val.arg_no - 1];
817
 
818
        if (src->flags & STRINGIFY_ARG)
819
          {
820
            if (!arg->stringified)
821
              arg->stringified = stringify_arg (pfile, arg);
822
          }
823
        else if ((src->flags & PASTE_LEFT)
824
                 || (src > macro->exp.tokens && (src[-1].flags & PASTE_LEFT)))
825
          total += arg->count - 1;
826
        else
827
          {
828
            if (!arg->expanded)
829
              expand_arg (pfile, arg);
830
            total += arg->expanded_count - 1;
831
          }
832
      }
833
 
834
  /* Now allocate space for the expansion, copy the tokens and replace
835
     the arguments.  */
836
  buff = _cpp_get_buff (pfile, total * sizeof (cpp_token *));
837
  first = (const cpp_token **) buff->base;
838
  dest = first;
839
 
840
  for (src = macro->exp.tokens; src < limit; src++)
841
    {
842
      unsigned int count;
843
      const cpp_token **from, **paste_flag;
844
 
845
      if (src->type != CPP_MACRO_ARG)
846
        {
847
          *dest++ = src;
848
          continue;
849
        }
850
 
851
      paste_flag = 0;
852
      arg = &args[src->val.arg_no - 1];
853
      if (src->flags & STRINGIFY_ARG)
854
        count = 1, from = &arg->stringified;
855
      else if (src->flags & PASTE_LEFT)
856
        count = arg->count, from = arg->first;
857
      else if (src != macro->exp.tokens && (src[-1].flags & PASTE_LEFT))
858
        {
859
          count = arg->count, from = arg->first;
860
          if (dest != first)
861
            {
862
              if (dest[-1]->type == CPP_COMMA
863
                  && macro->variadic
864
                  && src->val.arg_no == macro->paramc)
865
                {
866
                  /* Swallow a pasted comma if from == NULL, otherwise
867
                     drop the paste flag.  */
868
                  if (from == NULL)
869
                    dest--;
870
                  else
871
                    paste_flag = dest - 1;
872
                }
873
              /* Remove the paste flag if the RHS is a placemarker.  */
874
              else if (count == 0)
875
                paste_flag = dest - 1;
876
            }
877
        }
878
      else
879
        count = arg->expanded_count, from = arg->expanded;
880
 
881
      /* Padding on the left of an argument (unless RHS of ##).  */
882
      if ((!pfile->state.in_directive || pfile->state.directive_wants_padding)
883
          && src != macro->exp.tokens && !(src[-1].flags & PASTE_LEFT))
884
        *dest++ = padding_token (pfile, src);
885
 
886
      if (count)
887
        {
888
          memcpy (dest, from, count * sizeof (cpp_token *));
889
          dest += count;
890
 
891
          /* With a non-empty argument on the LHS of ##, the last
892
             token should be flagged PASTE_LEFT.  */
893
          if (src->flags & PASTE_LEFT)
894
            paste_flag = dest - 1;
895
        }
896
 
897
      /* Avoid paste on RHS (even case count == 0).  */
898
      if (!pfile->state.in_directive && !(src->flags & PASTE_LEFT))
899
        *dest++ = &pfile->avoid_paste;
900
 
901
      /* Add a new paste flag, or remove an unwanted one.  */
902
      if (paste_flag)
903
        {
904
          cpp_token *token = _cpp_temp_token (pfile);
905
          token->type = (*paste_flag)->type;
906
          token->val = (*paste_flag)->val;
907
          if (src->flags & PASTE_LEFT)
908
            token->flags = (*paste_flag)->flags | PASTE_LEFT;
909
          else
910
            token->flags = (*paste_flag)->flags & ~PASTE_LEFT;
911
          *paste_flag = token;
912
        }
913
    }
914
 
915
  /* Free the expanded arguments.  */
916
  for (i = 0; i < macro->paramc; i++)
917
    if (args[i].expanded)
918
      free (args[i].expanded);
919
 
920
  push_ptoken_context (pfile, node, buff, first, dest - first);
921
}
922
 
923
/* Return a special padding token, with padding inherited from SOURCE.  */
924
static const cpp_token *
925
padding_token (cpp_reader *pfile, const cpp_token *source)
926
{
927
  cpp_token *result = _cpp_temp_token (pfile);
928
 
929
  result->type = CPP_PADDING;
930
 
931
  /* Data in GCed data structures cannot be made const so far, so we
932
     need a cast here.  */
933
  result->val.source = (cpp_token *) source;
934
  result->flags = 0;
935
  return result;
936
}
937
 
938
/* Get a new uninitialized context.  Create a new one if we cannot
939
   re-use an old one.  */
940
static cpp_context *
941
next_context (cpp_reader *pfile)
942
{
943
  cpp_context *result = pfile->context->next;
944
 
945
  if (result == 0)
946
    {
947
      result = XNEW (cpp_context);
948
      result->prev = pfile->context;
949
      result->next = 0;
950
      pfile->context->next = result;
951
    }
952
 
953
  pfile->context = result;
954
  return result;
955
}
956
 
957
/* Push a list of pointers to tokens.  */
958
static void
959
push_ptoken_context (cpp_reader *pfile, cpp_hashnode *macro, _cpp_buff *buff,
960
                     const cpp_token **first, unsigned int count)
961
{
962
  cpp_context *context = next_context (pfile);
963
 
964
  context->direct_p = false;
965
  context->macro = macro;
966
  context->buff = buff;
967
  FIRST (context).ptoken = first;
968
  LAST (context).ptoken = first + count;
969
}
970
 
971
/* Push a list of tokens.  */
972
void
973
_cpp_push_token_context (cpp_reader *pfile, cpp_hashnode *macro,
974
                         const cpp_token *first, unsigned int count)
975
{
976
  cpp_context *context = next_context (pfile);
977
 
978
  context->direct_p = true;
979
  context->macro = macro;
980
  context->buff = NULL;
981
  FIRST (context).token = first;
982
  LAST (context).token = first + count;
983
}
984
 
985
/* Push a traditional macro's replacement text.  */
986
void
987
_cpp_push_text_context (cpp_reader *pfile, cpp_hashnode *macro,
988
                        const uchar *start, size_t len)
989
{
990
  cpp_context *context = next_context (pfile);
991
 
992
  context->direct_p = true;
993
  context->macro = macro;
994
  context->buff = NULL;
995
  CUR (context) = start;
996
  RLIMIT (context) = start + len;
997
  macro->flags |= NODE_DISABLED;
998
}
999
 
1000
/* Expand an argument ARG before replacing parameters in a
1001
   function-like macro.  This works by pushing a context with the
1002
   argument's tokens, and then expanding that into a temporary buffer
1003
   as if it were a normal part of the token stream.  collect_args()
1004
   has terminated the argument's tokens with a CPP_EOF so that we know
1005
   when we have fully expanded the argument.  */
1006
static void
1007
expand_arg (cpp_reader *pfile, macro_arg *arg)
1008
{
1009
  unsigned int capacity;
1010
  bool saved_warn_trad;
1011
 
1012
  if (arg->count == 0)
1013
    return;
1014
 
1015
  /* Don't warn about funlike macros when pre-expanding.  */
1016
  saved_warn_trad = CPP_WTRADITIONAL (pfile);
1017
  CPP_WTRADITIONAL (pfile) = 0;
1018
 
1019
  /* Loop, reading in the arguments.  */
1020
  capacity = 256;
1021
  arg->expanded = XNEWVEC (const cpp_token *, capacity);
1022
 
1023
  push_ptoken_context (pfile, NULL, NULL, arg->first, arg->count + 1);
1024
  for (;;)
1025
    {
1026
      const cpp_token *token;
1027
 
1028
      if (arg->expanded_count + 1 >= capacity)
1029
        {
1030
          capacity *= 2;
1031
          arg->expanded = XRESIZEVEC (const cpp_token *, arg->expanded,
1032
                                      capacity);
1033
        }
1034
 
1035
      token = cpp_get_token (pfile);
1036
 
1037
      if (token->type == CPP_EOF)
1038
        break;
1039
 
1040
      arg->expanded[arg->expanded_count++] = token;
1041
    }
1042
 
1043
  _cpp_pop_context (pfile);
1044
 
1045
  CPP_WTRADITIONAL (pfile) = saved_warn_trad;
1046
}
1047
 
1048
/* Pop the current context off the stack, re-enabling the macro if the
1049
   context represented a macro's replacement list.  The context
1050
   structure is not freed so that we can re-use it later.  */
1051
void
1052
_cpp_pop_context (cpp_reader *pfile)
1053
{
1054
  cpp_context *context = pfile->context;
1055
 
1056
  if (context->macro)
1057
    context->macro->flags &= ~NODE_DISABLED;
1058
 
1059
  if (context->buff)
1060
    _cpp_release_buff (pfile, context->buff);
1061
 
1062
  pfile->context = context->prev;
1063
}
1064
 
1065
/* External routine to get a token.  Also used nearly everywhere
1066
   internally, except for places where we know we can safely call
1067
   _cpp_lex_token directly, such as lexing a directive name.
1068
 
1069
   Macro expansions and directives are transparently handled,
1070
   including entering included files.  Thus tokens are post-macro
1071
   expansion, and after any intervening directives.  External callers
1072
   see CPP_EOF only at EOF.  Internal callers also see it when meeting
1073
   a directive inside a macro call, when at the end of a directive and
1074
   state.in_directive is still 1, and at the end of argument
1075
   pre-expansion.  */
1076
const cpp_token *
1077
cpp_get_token (cpp_reader *pfile)
1078
{
1079
  const cpp_token *result;
1080
 
1081
  for (;;)
1082
    {
1083
      cpp_hashnode *node;
1084
      cpp_context *context = pfile->context;
1085
 
1086
      /* Context->prev == 0 <=> base context.  */
1087
      if (!context->prev)
1088
        result = _cpp_lex_token (pfile);
1089
      else if (FIRST (context).token != LAST (context).token)
1090
        {
1091
          if (context->direct_p)
1092
            result = FIRST (context).token++;
1093
          else
1094
            result = *FIRST (context).ptoken++;
1095
 
1096
          if (result->flags & PASTE_LEFT)
1097
            {
1098
              paste_all_tokens (pfile, result);
1099
              if (pfile->state.in_directive)
1100
                continue;
1101
              return padding_token (pfile, result);
1102
            }
1103
        }
1104
      else
1105
        {
1106
          _cpp_pop_context (pfile);
1107
          if (pfile->state.in_directive)
1108
            continue;
1109
          return &pfile->avoid_paste;
1110
        }
1111
 
1112
      if (pfile->state.in_directive && result->type == CPP_COMMENT)
1113
        continue;
1114
 
1115
      if (result->type != CPP_NAME)
1116
        break;
1117
 
1118
      node = result->val.node;
1119
 
1120
      if (node->type != NT_MACRO || (result->flags & NO_EXPAND))
1121
        break;
1122
 
1123
      if (!(node->flags & NODE_DISABLED))
1124
        {
1125
          if (!pfile->state.prevent_expansion
1126
              && enter_macro_context (pfile, node))
1127
            {
1128
              if (pfile->state.in_directive)
1129
                continue;
1130
              return padding_token (pfile, result);
1131
            }
1132
        }
1133
      else
1134
        {
1135
          /* Flag this token as always unexpandable.  FIXME: move this
1136
             to collect_args()?.  */
1137
          cpp_token *t = _cpp_temp_token (pfile);
1138
          t->type = result->type;
1139
          t->flags = result->flags | NO_EXPAND;
1140
          t->val = result->val;
1141
          result = t;
1142
        }
1143
 
1144
      break;
1145
    }
1146
 
1147
  return result;
1148
}
1149
 
1150
/* Returns true if we're expanding an object-like macro that was
1151
   defined in a system header.  Just checks the macro at the top of
1152
   the stack.  Used for diagnostic suppression.  */
1153
int
1154
cpp_sys_macro_p (cpp_reader *pfile)
1155
{
1156
  cpp_hashnode *node = pfile->context->macro;
1157
 
1158
  return node && node->value.macro && node->value.macro->syshdr;
1159
}
1160
 
1161
/* Read each token in, until end of the current file.  Directives are
1162
   transparently processed.  */
1163
void
1164
cpp_scan_nooutput (cpp_reader *pfile)
1165
{
1166
  /* Request a CPP_EOF token at the end of this file, rather than
1167
     transparently continuing with the including file.  */
1168
  pfile->buffer->return_at_eof = true;
1169
 
1170
  pfile->state.discarding_output++;
1171
  pfile->state.prevent_expansion++;
1172
 
1173
  if (CPP_OPTION (pfile, traditional))
1174
    while (_cpp_read_logical_line_trad (pfile))
1175
      ;
1176
  else
1177
    while (cpp_get_token (pfile)->type != CPP_EOF)
1178
      ;
1179
 
1180
  pfile->state.discarding_output--;
1181
  pfile->state.prevent_expansion--;
1182
}
1183
 
1184
/* Step back one (or more) tokens.  Can only step back more than 1 if
1185
   they are from the lexer, and not from macro expansion.  */
1186
void
1187
_cpp_backup_tokens (cpp_reader *pfile, unsigned int count)
1188
{
1189
  if (pfile->context->prev == NULL)
1190
    {
1191
      pfile->lookaheads += count;
1192
      while (count--)
1193
        {
1194
          pfile->cur_token--;
1195
          if (pfile->cur_token == pfile->cur_run->base
1196
              /* Possible with -fpreprocessed and no leading #line.  */
1197
              && pfile->cur_run->prev != NULL)
1198
            {
1199
              pfile->cur_run = pfile->cur_run->prev;
1200
              pfile->cur_token = pfile->cur_run->limit;
1201
            }
1202
        }
1203
    }
1204
  else
1205
    {
1206
      if (count != 1)
1207
        abort ();
1208
      if (pfile->context->direct_p)
1209
        FIRST (pfile->context).token--;
1210
      else
1211
        FIRST (pfile->context).ptoken--;
1212
    }
1213
}
1214
 
1215
/* #define directive parsing and handling.  */
1216
 
1217
/* Returns nonzero if a macro redefinition warning is required.  */
1218
static bool
1219
warn_of_redefinition (cpp_reader *pfile, const cpp_hashnode *node,
1220
                      const cpp_macro *macro2)
1221
{
1222
  const cpp_macro *macro1;
1223
  unsigned int i;
1224
 
1225
  /* Some redefinitions need to be warned about regardless.  */
1226
  if (node->flags & NODE_WARN)
1227
    return true;
1228
 
1229
  /* Redefinition of a macro is allowed if and only if the old and new
1230
     definitions are the same.  (6.10.3 paragraph 2).  */
1231
  macro1 = node->value.macro;
1232
 
1233
  /* Don't check count here as it can be different in valid
1234
     traditional redefinitions with just whitespace differences.  */
1235
  if (macro1->paramc != macro2->paramc
1236
      || macro1->fun_like != macro2->fun_like
1237
      || macro1->variadic != macro2->variadic)
1238
    return true;
1239
 
1240
  /* Check parameter spellings.  */
1241
  for (i = 0; i < macro1->paramc; i++)
1242
    if (macro1->params[i] != macro2->params[i])
1243
      return true;
1244
 
1245
  /* Check the replacement text or tokens.  */
1246
  if (CPP_OPTION (pfile, traditional))
1247
    return _cpp_expansions_different_trad (macro1, macro2);
1248
 
1249
  if (macro1->count != macro2->count)
1250
    return true;
1251
 
1252
  for (i = 0; i < macro1->count; i++)
1253
    if (!_cpp_equiv_tokens (&macro1->exp.tokens[i], &macro2->exp.tokens[i]))
1254
      return true;
1255
 
1256
  return false;
1257
}
1258
 
1259
/* Free the definition of hashnode H.  */
1260
void
1261
_cpp_free_definition (cpp_hashnode *h)
1262
{
1263
  /* Macros and assertions no longer have anything to free.  */
1264
  h->type = NT_VOID;
1265
  /* Clear builtin flag in case of redefinition.  */
1266
  h->flags &= ~(NODE_BUILTIN | NODE_DISABLED);
1267
}
1268
 
1269
/* Save parameter NODE to the parameter list of macro MACRO.  Returns
1270
   zero on success, nonzero if the parameter is a duplicate.  */
1271
bool
1272
_cpp_save_parameter (cpp_reader *pfile, cpp_macro *macro, cpp_hashnode *node)
1273
{
1274
  unsigned int len;
1275
  /* Constraint 6.10.3.6 - duplicate parameter names.  */
1276
  if (node->flags & NODE_MACRO_ARG)
1277
    {
1278
      cpp_error (pfile, CPP_DL_ERROR, "duplicate macro parameter \"%s\"",
1279
                 NODE_NAME (node));
1280
      return true;
1281
    }
1282
 
1283
  if (BUFF_ROOM (pfile->a_buff)
1284
      < (macro->paramc + 1) * sizeof (cpp_hashnode *))
1285
    _cpp_extend_buff (pfile, &pfile->a_buff, sizeof (cpp_hashnode *));
1286
 
1287
  ((cpp_hashnode **) BUFF_FRONT (pfile->a_buff))[macro->paramc++] = node;
1288
  node->flags |= NODE_MACRO_ARG;
1289
  len = macro->paramc * sizeof (union _cpp_hashnode_value);
1290
  if (len > pfile->macro_buffer_len)
1291
    {
1292
      pfile->macro_buffer = XRESIZEVEC (unsigned char, pfile->macro_buffer,
1293
                                        len);
1294
      pfile->macro_buffer_len = len;
1295
    }
1296
  ((union _cpp_hashnode_value *) pfile->macro_buffer)[macro->paramc - 1]
1297
    = node->value;
1298
 
1299
  node->value.arg_index  = macro->paramc;
1300
  return false;
1301
}
1302
 
1303
/* Check the syntax of the parameters in a MACRO definition.  Returns
1304
   false if an error occurs.  */
1305
static bool
1306
parse_params (cpp_reader *pfile, cpp_macro *macro)
1307
{
1308
  unsigned int prev_ident = 0;
1309
 
1310
  for (;;)
1311
    {
1312
      const cpp_token *token = _cpp_lex_token (pfile);
1313
 
1314
      switch (token->type)
1315
        {
1316
        default:
1317
          /* Allow/ignore comments in parameter lists if we are
1318
             preserving comments in macro expansions.  */
1319
          if (token->type == CPP_COMMENT
1320
              && ! CPP_OPTION (pfile, discard_comments_in_macro_exp))
1321
            continue;
1322
 
1323
          cpp_error (pfile, CPP_DL_ERROR,
1324
                     "\"%s\" may not appear in macro parameter list",
1325
                     cpp_token_as_text (pfile, token));
1326
          return false;
1327
 
1328
        case CPP_NAME:
1329
          if (prev_ident)
1330
            {
1331
              cpp_error (pfile, CPP_DL_ERROR,
1332
                         "macro parameters must be comma-separated");
1333
              return false;
1334
            }
1335
          prev_ident = 1;
1336
 
1337
          if (_cpp_save_parameter (pfile, macro, token->val.node))
1338
            return false;
1339
          continue;
1340
 
1341
        case CPP_CLOSE_PAREN:
1342
          if (prev_ident || macro->paramc == 0)
1343
            return true;
1344
 
1345
          /* Fall through to pick up the error.  */
1346
        case CPP_COMMA:
1347
          if (!prev_ident)
1348
            {
1349
              cpp_error (pfile, CPP_DL_ERROR, "parameter name missing");
1350
              return false;
1351
            }
1352
          prev_ident = 0;
1353
          continue;
1354
 
1355
        case CPP_ELLIPSIS:
1356
          macro->variadic = 1;
1357
          if (!prev_ident)
1358
            {
1359
              _cpp_save_parameter (pfile, macro,
1360
                                   pfile->spec_nodes.n__VA_ARGS__);
1361
              pfile->state.va_args_ok = 1;
1362
              if (! CPP_OPTION (pfile, c99)
1363
                  && CPP_OPTION (pfile, pedantic)
1364
                  && CPP_OPTION (pfile, warn_variadic_macros))
1365
                cpp_error (pfile, CPP_DL_PEDWARN,
1366
                           "anonymous variadic macros were introduced in C99");
1367
            }
1368
          else if (CPP_OPTION (pfile, pedantic)
1369
                   && CPP_OPTION (pfile, warn_variadic_macros))
1370
            cpp_error (pfile, CPP_DL_PEDWARN,
1371
                       "ISO C does not permit named variadic macros");
1372
 
1373
          /* We're at the end, and just expect a closing parenthesis.  */
1374
          token = _cpp_lex_token (pfile);
1375
          if (token->type == CPP_CLOSE_PAREN)
1376
            return true;
1377
          /* Fall through.  */
1378
 
1379
        case CPP_EOF:
1380
          cpp_error (pfile, CPP_DL_ERROR, "missing ')' in macro parameter list");
1381
          return false;
1382
        }
1383
    }
1384
}
1385
 
1386
/* Allocate room for a token from a macro's replacement list.  */
1387
static cpp_token *
1388
alloc_expansion_token (cpp_reader *pfile, cpp_macro *macro)
1389
{
1390
  if (BUFF_ROOM (pfile->a_buff) < (macro->count + 1) * sizeof (cpp_token))
1391
    _cpp_extend_buff (pfile, &pfile->a_buff, sizeof (cpp_token));
1392
 
1393
  return &((cpp_token *) BUFF_FRONT (pfile->a_buff))[macro->count++];
1394
}
1395
 
1396
/* Lex a token from the expansion of MACRO, but mark parameters as we
1397
   find them and warn of traditional stringification.  */
1398
static cpp_token *
1399
lex_expansion_token (cpp_reader *pfile, cpp_macro *macro)
1400
{
1401
  cpp_token *token;
1402
 
1403
  pfile->cur_token = alloc_expansion_token (pfile, macro);
1404
  token = _cpp_lex_direct (pfile);
1405
 
1406
  /* Is this a parameter?  */
1407
  if (token->type == CPP_NAME
1408
      && (token->val.node->flags & NODE_MACRO_ARG) != 0)
1409
    {
1410
      token->type = CPP_MACRO_ARG;
1411
      token->val.arg_no = token->val.node->value.arg_index;
1412
    }
1413
  else if (CPP_WTRADITIONAL (pfile) && macro->paramc > 0
1414
           && (token->type == CPP_STRING || token->type == CPP_CHAR))
1415
    check_trad_stringification (pfile, macro, &token->val.str);
1416
 
1417
  return token;
1418
}
1419
 
1420
static bool
1421
create_iso_definition (cpp_reader *pfile, cpp_macro *macro)
1422
{
1423
  cpp_token *token;
1424
  const cpp_token *ctoken;
1425
 
1426
  /* Get the first token of the expansion (or the '(' of a
1427
     function-like macro).  */
1428
  ctoken = _cpp_lex_token (pfile);
1429
 
1430
  if (ctoken->type == CPP_OPEN_PAREN && !(ctoken->flags & PREV_WHITE))
1431
    {
1432
      bool ok = parse_params (pfile, macro);
1433
      macro->params = (cpp_hashnode **) BUFF_FRONT (pfile->a_buff);
1434
      if (!ok)
1435
        return false;
1436
 
1437
      /* Success.  Commit or allocate the parameter array.  */
1438
      if (pfile->hash_table->alloc_subobject)
1439
        {
1440
          cpp_hashnode **params =
1441
            (cpp_hashnode **) pfile->hash_table->alloc_subobject
1442
            (sizeof (cpp_hashnode *) * macro->paramc);
1443
          memcpy (params, macro->params,
1444
                  sizeof (cpp_hashnode *) * macro->paramc);
1445
          macro->params = params;
1446
        }
1447
      else
1448
        BUFF_FRONT (pfile->a_buff) = (uchar *) &macro->params[macro->paramc];
1449
      macro->fun_like = 1;
1450
    }
1451
  else if (ctoken->type != CPP_EOF && !(ctoken->flags & PREV_WHITE))
1452
    {
1453
      /* While ISO C99 requires whitespace before replacement text
1454
         in a macro definition, ISO C90 with TC1 allows there characters
1455
         from the basic source character set.  */
1456
      if (CPP_OPTION (pfile, c99))
1457
        cpp_error (pfile, CPP_DL_PEDWARN,
1458
                   "ISO C99 requires whitespace after the macro name");
1459
      else
1460
        {
1461
          int warntype = CPP_DL_WARNING;
1462
          switch (ctoken->type)
1463
            {
1464
            case CPP_ATSIGN:
1465
            case CPP_AT_NAME:
1466
            case CPP_OBJC_STRING:
1467
              /* '@' is not in basic character set.  */
1468
              warntype = CPP_DL_PEDWARN;
1469
              break;
1470
            case CPP_OTHER:
1471
              /* Basic character set sans letters, digits and _.  */
1472
              if (strchr ("!\"#%&'()*+,-./:;<=>?[\\]^{|}~",
1473
                          ctoken->val.str.text[0]) == NULL)
1474
                warntype = CPP_DL_PEDWARN;
1475
              break;
1476
            default:
1477
              /* All other tokens start with a character from basic
1478
                 character set.  */
1479
              break;
1480
            }
1481
          cpp_error (pfile, warntype,
1482
                     "missing whitespace after the macro name");
1483
        }
1484
    }
1485
 
1486
  if (macro->fun_like)
1487
    token = lex_expansion_token (pfile, macro);
1488
  else
1489
    {
1490
      token = alloc_expansion_token (pfile, macro);
1491
      *token = *ctoken;
1492
    }
1493
 
1494
  for (;;)
1495
    {
1496
      /* Check the stringifying # constraint 6.10.3.2.1 of
1497
         function-like macros when lexing the subsequent token.  */
1498
      if (macro->count > 1 && token[-1].type == CPP_HASH && macro->fun_like)
1499
        {
1500
          if (token->type == CPP_MACRO_ARG)
1501
            {
1502
              token->flags &= ~PREV_WHITE;
1503
              token->flags |= STRINGIFY_ARG;
1504
              token->flags |= token[-1].flags & PREV_WHITE;
1505
              token[-1] = token[0];
1506
              macro->count--;
1507
            }
1508
          /* Let assembler get away with murder.  */
1509
          else if (CPP_OPTION (pfile, lang) != CLK_ASM)
1510
            {
1511
              cpp_error (pfile, CPP_DL_ERROR,
1512
                         "'#' is not followed by a macro parameter");
1513
              return false;
1514
            }
1515
        }
1516
 
1517
      if (token->type == CPP_EOF)
1518
        break;
1519
 
1520
      /* Paste operator constraint 6.10.3.3.1.  */
1521
      if (token->type == CPP_PASTE)
1522
        {
1523
          /* Token-paste ##, can appear in both object-like and
1524
             function-like macros, but not at the ends.  */
1525
          if (--macro->count > 0)
1526
            token = lex_expansion_token (pfile, macro);
1527
 
1528
          if (macro->count == 0 || token->type == CPP_EOF)
1529
            {
1530
              cpp_error (pfile, CPP_DL_ERROR,
1531
                 "'##' cannot appear at either end of a macro expansion");
1532
              return false;
1533
            }
1534
 
1535
          token[-1].flags |= PASTE_LEFT;
1536
        }
1537
 
1538
      token = lex_expansion_token (pfile, macro);
1539
    }
1540
 
1541
  macro->exp.tokens = (cpp_token *) BUFF_FRONT (pfile->a_buff);
1542
  macro->traditional = 0;
1543
 
1544
  /* Don't count the CPP_EOF.  */
1545
  macro->count--;
1546
 
1547
  /* Clear whitespace on first token for warn_of_redefinition().  */
1548
  if (macro->count)
1549
    macro->exp.tokens[0].flags &= ~PREV_WHITE;
1550
 
1551
  /* Commit or allocate the memory.  */
1552
  if (pfile->hash_table->alloc_subobject)
1553
    {
1554
      cpp_token *tokns =
1555
        (cpp_token *) pfile->hash_table->alloc_subobject (sizeof (cpp_token)
1556
                                                          * macro->count);
1557
      memcpy (tokns, macro->exp.tokens, sizeof (cpp_token) * macro->count);
1558
      macro->exp.tokens = tokns;
1559
    }
1560
  else
1561
    BUFF_FRONT (pfile->a_buff) = (uchar *) &macro->exp.tokens[macro->count];
1562
 
1563
  return true;
1564
}
1565
 
1566
/* Parse a macro and save its expansion.  Returns nonzero on success.  */
1567
bool
1568
_cpp_create_definition (cpp_reader *pfile, cpp_hashnode *node)
1569
{
1570
  cpp_macro *macro;
1571
  unsigned int i;
1572
  bool ok;
1573
 
1574
  if (pfile->hash_table->alloc_subobject)
1575
    macro = (cpp_macro *) pfile->hash_table->alloc_subobject
1576
      (sizeof (cpp_macro));
1577
  else
1578
    macro = (cpp_macro *) _cpp_aligned_alloc (pfile, sizeof (cpp_macro));
1579
  macro->line = pfile->directive_line;
1580
  macro->params = 0;
1581
  macro->paramc = 0;
1582
  macro->variadic = 0;
1583
  macro->used = !CPP_OPTION (pfile, warn_unused_macros);
1584
  macro->count = 0;
1585
  macro->fun_like = 0;
1586
  /* To suppress some diagnostics.  */
1587
  macro->syshdr = pfile->buffer && pfile->buffer->sysp != 0;
1588
 
1589
  if (CPP_OPTION (pfile, traditional))
1590
    ok = _cpp_create_trad_definition (pfile, macro);
1591
  else
1592
    {
1593
      cpp_token *saved_cur_token = pfile->cur_token;
1594
 
1595
      ok = create_iso_definition (pfile, macro);
1596
 
1597
      /* Restore lexer position because of games lex_expansion_token()
1598
         plays lexing the macro.  We set the type for SEEN_EOL() in
1599
         directives.c.
1600
 
1601
         Longer term we should lex the whole line before coming here,
1602
         and just copy the expansion.  */
1603
      saved_cur_token[-1].type = pfile->cur_token[-1].type;
1604
      pfile->cur_token = saved_cur_token;
1605
 
1606
      /* Stop the lexer accepting __VA_ARGS__.  */
1607
      pfile->state.va_args_ok = 0;
1608
    }
1609
 
1610
  /* Clear the fast argument lookup indices.  */
1611
  for (i = macro->paramc; i-- > 0; )
1612
    {
1613
      struct cpp_hashnode *node = macro->params[i];
1614
      node->flags &= ~ NODE_MACRO_ARG;
1615
      node->value = ((union _cpp_hashnode_value *) pfile->macro_buffer)[i];
1616
    }
1617
 
1618
  if (!ok)
1619
    return ok;
1620
 
1621
  if (node->type == NT_MACRO)
1622
    {
1623
      if (CPP_OPTION (pfile, warn_unused_macros))
1624
        _cpp_warn_if_unused_macro (pfile, node, NULL);
1625
 
1626
      if (warn_of_redefinition (pfile, node, macro))
1627
        {
1628
          cpp_error_with_line (pfile, CPP_DL_PEDWARN, pfile->directive_line, 0,
1629
                               "\"%s\" redefined", NODE_NAME (node));
1630
 
1631
          if (node->type == NT_MACRO && !(node->flags & NODE_BUILTIN))
1632
            cpp_error_with_line (pfile, CPP_DL_PEDWARN,
1633
                                 node->value.macro->line, 0,
1634
                         "this is the location of the previous definition");
1635
        }
1636
    }
1637
 
1638
  if (node->type != NT_VOID)
1639
    _cpp_free_definition (node);
1640
 
1641
  /* Enter definition in hash table.  */
1642
  node->type = NT_MACRO;
1643
  node->value.macro = macro;
1644
  if (! ustrncmp (NODE_NAME (node), DSC ("__STDC_")))
1645
    node->flags |= NODE_WARN;
1646
 
1647
  return ok;
1648
}
1649
 
1650
/* Warn if a token in STRING matches one of a function-like MACRO's
1651
   parameters.  */
1652
static void
1653
check_trad_stringification (cpp_reader *pfile, const cpp_macro *macro,
1654
                            const cpp_string *string)
1655
{
1656
  unsigned int i, len;
1657
  const uchar *p, *q, *limit;
1658
 
1659
  /* Loop over the string.  */
1660
  limit = string->text + string->len - 1;
1661
  for (p = string->text + 1; p < limit; p = q)
1662
    {
1663
      /* Find the start of an identifier.  */
1664
      while (p < limit && !is_idstart (*p))
1665
        p++;
1666
 
1667
      /* Find the end of the identifier.  */
1668
      q = p;
1669
      while (q < limit && is_idchar (*q))
1670
        q++;
1671
 
1672
      len = q - p;
1673
 
1674
      /* Loop over the function macro arguments to see if the
1675
         identifier inside the string matches one of them.  */
1676
      for (i = 0; i < macro->paramc; i++)
1677
        {
1678
          const cpp_hashnode *node = macro->params[i];
1679
 
1680
          if (NODE_LEN (node) == len
1681
              && !memcmp (p, NODE_NAME (node), len))
1682
            {
1683
              cpp_error (pfile, CPP_DL_WARNING,
1684
           "macro argument \"%s\" would be stringified in traditional C",
1685
                         NODE_NAME (node));
1686
              break;
1687
            }
1688
        }
1689
    }
1690
}
1691
 
1692
/* Returns the name, arguments and expansion of a macro, in a format
1693
   suitable to be read back in again, and therefore also for DWARF 2
1694
   debugging info.  e.g. "PASTE(X, Y) X ## Y", or "MACNAME EXPANSION".
1695
   Caller is expected to generate the "#define" bit if needed.  The
1696
   returned text is temporary, and automatically freed later.  */
1697
const unsigned char *
1698
cpp_macro_definition (cpp_reader *pfile, const cpp_hashnode *node)
1699
{
1700
  unsigned int i, len;
1701
  const cpp_macro *macro = node->value.macro;
1702
  unsigned char *buffer;
1703
 
1704
  if (node->type != NT_MACRO || (node->flags & NODE_BUILTIN))
1705
    {
1706
      cpp_error (pfile, CPP_DL_ICE,
1707
                 "invalid hash type %d in cpp_macro_definition", node->type);
1708
      return 0;
1709
    }
1710
 
1711
  /* Calculate length.  */
1712
  len = NODE_LEN (node) + 2;                    /* ' ' and NUL.  */
1713
  if (macro->fun_like)
1714
    {
1715
      len += 4;         /* "()" plus possible final ".." of named
1716
                           varargs (we have + 1 below).  */
1717
      for (i = 0; i < macro->paramc; i++)
1718
        len += NODE_LEN (macro->params[i]) + 1; /* "," */
1719
    }
1720
 
1721
  /* This should match below where we fill in the buffer.  */
1722
  if (CPP_OPTION (pfile, traditional))
1723
    len += _cpp_replacement_text_len (macro);
1724
  else
1725
    {
1726
      for (i = 0; i < macro->count; i++)
1727
        {
1728
          cpp_token *token = &macro->exp.tokens[i];
1729
 
1730
          if (token->type == CPP_MACRO_ARG)
1731
            len += NODE_LEN (macro->params[token->val.arg_no - 1]);
1732
          else
1733
            len += cpp_token_len (token);
1734
 
1735
          if (token->flags & STRINGIFY_ARG)
1736
            len++;                      /* "#" */
1737
          if (token->flags & PASTE_LEFT)
1738
            len += 3;           /* " ##" */
1739
          if (token->flags & PREV_WHITE)
1740
            len++;              /* " " */
1741
        }
1742
    }
1743
 
1744
  if (len > pfile->macro_buffer_len)
1745
    {
1746
      pfile->macro_buffer = XRESIZEVEC (unsigned char,
1747
                                        pfile->macro_buffer, len);
1748
      pfile->macro_buffer_len = len;
1749
    }
1750
 
1751
  /* Fill in the buffer.  Start with the macro name.  */
1752
  buffer = pfile->macro_buffer;
1753
  memcpy (buffer, NODE_NAME (node), NODE_LEN (node));
1754
  buffer += NODE_LEN (node);
1755
 
1756
  /* Parameter names.  */
1757
  if (macro->fun_like)
1758
    {
1759
      *buffer++ = '(';
1760
      for (i = 0; i < macro->paramc; i++)
1761
        {
1762
          cpp_hashnode *param = macro->params[i];
1763
 
1764
          if (param != pfile->spec_nodes.n__VA_ARGS__)
1765
            {
1766
              memcpy (buffer, NODE_NAME (param), NODE_LEN (param));
1767
              buffer += NODE_LEN (param);
1768
            }
1769
 
1770
          if (i + 1 < macro->paramc)
1771
            /* Don't emit a space after the comma here; we're trying
1772
               to emit a Dwarf-friendly definition, and the Dwarf spec
1773
               forbids spaces in the argument list.  */
1774
            *buffer++ = ',';
1775
          else if (macro->variadic)
1776
            *buffer++ = '.', *buffer++ = '.', *buffer++ = '.';
1777
        }
1778
      *buffer++ = ')';
1779
    }
1780
 
1781
  /* The Dwarf spec requires a space after the macro name, even if the
1782
     definition is the empty string.  */
1783
  *buffer++ = ' ';
1784
 
1785
  if (CPP_OPTION (pfile, traditional))
1786
    buffer = _cpp_copy_replacement_text (macro, buffer);
1787
  else if (macro->count)
1788
  /* Expansion tokens.  */
1789
    {
1790
      for (i = 0; i < macro->count; i++)
1791
        {
1792
          cpp_token *token = &macro->exp.tokens[i];
1793
 
1794
          if (token->flags & PREV_WHITE)
1795
            *buffer++ = ' ';
1796
          if (token->flags & STRINGIFY_ARG)
1797
            *buffer++ = '#';
1798
 
1799
          if (token->type == CPP_MACRO_ARG)
1800
            {
1801
              memcpy (buffer,
1802
                      NODE_NAME (macro->params[token->val.arg_no - 1]),
1803
                      NODE_LEN (macro->params[token->val.arg_no - 1]));
1804
              buffer += NODE_LEN (macro->params[token->val.arg_no - 1]);
1805
            }
1806
          else
1807
            buffer = cpp_spell_token (pfile, token, buffer, false);
1808
 
1809
          if (token->flags & PASTE_LEFT)
1810
            {
1811
              *buffer++ = ' ';
1812
              *buffer++ = '#';
1813
              *buffer++ = '#';
1814
              /* Next has PREV_WHITE; see _cpp_create_definition.  */
1815
            }
1816
        }
1817
    }
1818
 
1819
  *buffer = '\0';
1820
  return pfile->macro_buffer;
1821
}

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.