Home | History | Annotate | Line # | Download | only in gdb
macroexp.c revision 1.6
      1 /* C preprocessor macro expansion for GDB.
      2    Copyright (C) 2002-2016 Free Software Foundation, Inc.
      3    Contributed by Red Hat, Inc.
      4 
      5    This file is part of GDB.
      6 
      7    This program is free software; you can redistribute it and/or modify
      8    it under the terms of the GNU General Public License as published by
      9    the Free Software Foundation; either version 3 of the License, or
     10    (at your option) any later version.
     11 
     12    This program is distributed in the hope that it will be useful,
     13    but WITHOUT ANY WARRANTY; without even the implied warranty of
     14    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
     15    GNU General Public License for more details.
     16 
     17    You should have received a copy of the GNU General Public License
     18    along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
     19 
     20 #include "defs.h"
     21 #include "gdb_obstack.h"
     22 #include "bcache.h"
     23 #include "macrotab.h"
     24 #include "macroexp.h"
     25 #include "c-lang.h"
     26 
     27 
     28 
     29 /* A resizeable, substringable string type.  */
     31 
     32 
     33 /* A string type that we can resize, quickly append to, and use to
     34    refer to substrings of other strings.  */
     35 struct macro_buffer
     36 {
     37   /* An array of characters.  The first LEN bytes are the real text,
     38      but there are SIZE bytes allocated to the array.  If SIZE is
     39      zero, then this doesn't point to a malloc'ed block.  If SHARED is
     40      non-zero, then this buffer is actually a pointer into some larger
     41      string, and we shouldn't append characters to it, etc.  Because
     42      of sharing, we can't assume in general that the text is
     43      null-terminated.  */
     44   char *text;
     45 
     46   /* The number of characters in the string.  */
     47   int len;
     48 
     49   /* The number of characters allocated to the string.  If SHARED is
     50      non-zero, this is meaningless; in this case, we set it to zero so
     51      that any "do we have room to append something?" tests will fail,
     52      so we don't always have to check SHARED before using this field.  */
     53   int size;
     54 
     55   /* Zero if TEXT can be safely realloc'ed (i.e., it's its own malloc
     56      block).  Non-zero if TEXT is actually pointing into the middle of
     57      some other block, and we shouldn't reallocate it.  */
     58   int shared;
     59 
     60   /* For detecting token splicing.
     61 
     62      This is the index in TEXT of the first character of the token
     63      that abuts the end of TEXT.  If TEXT contains no tokens, then we
     64      set this equal to LEN.  If TEXT ends in whitespace, then there is
     65      no token abutting the end of TEXT (it's just whitespace), and
     66      again, we set this equal to LEN.  We set this to -1 if we don't
     67      know the nature of TEXT.  */
     68   int last_token;
     69 
     70   /* If this buffer is holding the result from get_token, then this
     71      is non-zero if it is an identifier token, zero otherwise.  */
     72   int is_identifier;
     73 };
     74 
     75 
     76 /* Set the macro buffer *B to the empty string, guessing that its
     77    final contents will fit in N bytes.  (It'll get resized if it
     78    doesn't, so the guess doesn't have to be right.)  Allocate the
     79    initial storage with xmalloc.  */
     80 static void
     81 init_buffer (struct macro_buffer *b, int n)
     82 {
     83   b->size = n;
     84   if (n > 0)
     85     b->text = (char *) xmalloc (n);
     86   else
     87     b->text = NULL;
     88   b->len = 0;
     89   b->shared = 0;
     90   b->last_token = -1;
     91 }
     92 
     93 
     94 /* Set the macro buffer *BUF to refer to the LEN bytes at ADDR, as a
     95    shared substring.  */
     96 static void
     97 init_shared_buffer (struct macro_buffer *buf, char *addr, int len)
     98 {
     99   buf->text = addr;
    100   buf->len = len;
    101   buf->shared = 1;
    102   buf->size = 0;
    103   buf->last_token = -1;
    104 }
    105 
    106 
    107 /* Free the text of the buffer B.  Raise an error if B is shared.  */
    108 static void
    109 free_buffer (struct macro_buffer *b)
    110 {
    111   gdb_assert (! b->shared);
    112   if (b->size)
    113     xfree (b->text);
    114 }
    115 
    116 /* Like free_buffer, but return the text as an xstrdup()d string.
    117    This only exists to try to make the API relatively clean.  */
    118 
    119 static char *
    120 free_buffer_return_text (struct macro_buffer *b)
    121 {
    122   gdb_assert (! b->shared);
    123   gdb_assert (b->size);
    124   /* Nothing to do.  */
    125   return b->text;
    126 }
    127 
    128 /* A cleanup function for macro buffers.  */
    129 static void
    130 cleanup_macro_buffer (void *untyped_buf)
    131 {
    132   free_buffer ((struct macro_buffer *) untyped_buf);
    133 }
    134 
    135 
    136 /* Resize the buffer B to be at least N bytes long.  Raise an error if
    137    B shouldn't be resized.  */
    138 static void
    139 resize_buffer (struct macro_buffer *b, int n)
    140 {
    141   /* We shouldn't be trying to resize shared strings.  */
    142   gdb_assert (! b->shared);
    143 
    144   if (b->size == 0)
    145     b->size = n;
    146   else
    147     while (b->size <= n)
    148       b->size *= 2;
    149 
    150   b->text = (char *) xrealloc (b->text, b->size);
    151 }
    152 
    153 
    154 /* Append the character C to the buffer B.  */
    155 static void
    156 appendc (struct macro_buffer *b, int c)
    157 {
    158   int new_len = b->len + 1;
    159 
    160   if (new_len > b->size)
    161     resize_buffer (b, new_len);
    162 
    163   b->text[b->len] = c;
    164   b->len = new_len;
    165 }
    166 
    167 
    168 /* Append the LEN bytes at ADDR to the buffer B.  */
    169 static void
    170 appendmem (struct macro_buffer *b, char *addr, int len)
    171 {
    172   int new_len = b->len + len;
    173 
    174   if (new_len > b->size)
    175     resize_buffer (b, new_len);
    176 
    177   memcpy (b->text + b->len, addr, len);
    178   b->len = new_len;
    179 }
    180 
    181 
    182 
    183 /* Recognizing preprocessor tokens.  */
    185 
    186 
    187 int
    188 macro_is_whitespace (int c)
    189 {
    190   return (c == ' '
    191           || c == '\t'
    192           || c == '\n'
    193           || c == '\v'
    194           || c == '\f');
    195 }
    196 
    197 
    198 int
    199 macro_is_digit (int c)
    200 {
    201   return ('0' <= c && c <= '9');
    202 }
    203 
    204 
    205 int
    206 macro_is_identifier_nondigit (int c)
    207 {
    208   return (c == '_'
    209           || ('a' <= c && c <= 'z')
    210           || ('A' <= c && c <= 'Z'));
    211 }
    212 
    213 
    214 static void
    215 set_token (struct macro_buffer *tok, char *start, char *end)
    216 {
    217   init_shared_buffer (tok, start, end - start);
    218   tok->last_token = 0;
    219 
    220   /* Presumed; get_identifier may overwrite this.  */
    221   tok->is_identifier = 0;
    222 }
    223 
    224 
    225 static int
    226 get_comment (struct macro_buffer *tok, char *p, char *end)
    227 {
    228   if (p + 2 > end)
    229     return 0;
    230   else if (p[0] == '/'
    231            && p[1] == '*')
    232     {
    233       char *tok_start = p;
    234 
    235       p += 2;
    236 
    237       for (; p < end; p++)
    238         if (p + 2 <= end
    239             && p[0] == '*'
    240             && p[1] == '/')
    241           {
    242             p += 2;
    243             set_token (tok, tok_start, p);
    244             return 1;
    245           }
    246 
    247       error (_("Unterminated comment in macro expansion."));
    248     }
    249   else if (p[0] == '/'
    250            && p[1] == '/')
    251     {
    252       char *tok_start = p;
    253 
    254       p += 2;
    255       for (; p < end; p++)
    256         if (*p == '\n')
    257           break;
    258 
    259       set_token (tok, tok_start, p);
    260       return 1;
    261     }
    262   else
    263     return 0;
    264 }
    265 
    266 
    267 static int
    268 get_identifier (struct macro_buffer *tok, char *p, char *end)
    269 {
    270   if (p < end
    271       && macro_is_identifier_nondigit (*p))
    272     {
    273       char *tok_start = p;
    274 
    275       while (p < end
    276              && (macro_is_identifier_nondigit (*p)
    277                  || macro_is_digit (*p)))
    278         p++;
    279 
    280       set_token (tok, tok_start, p);
    281       tok->is_identifier = 1;
    282       return 1;
    283     }
    284   else
    285     return 0;
    286 }
    287 
    288 
    289 static int
    290 get_pp_number (struct macro_buffer *tok, char *p, char *end)
    291 {
    292   if (p < end
    293       && (macro_is_digit (*p)
    294           || (*p == '.'
    295 	      && p + 2 <= end
    296 	      && macro_is_digit (p[1]))))
    297     {
    298       char *tok_start = p;
    299 
    300       while (p < end)
    301         {
    302 	  if (p + 2 <= end
    303 	      && strchr ("eEpP", *p)
    304 	      && (p[1] == '+' || p[1] == '-'))
    305             p += 2;
    306           else if (macro_is_digit (*p)
    307 		   || macro_is_identifier_nondigit (*p)
    308 		   || *p == '.')
    309             p++;
    310           else
    311             break;
    312         }
    313 
    314       set_token (tok, tok_start, p);
    315       return 1;
    316     }
    317   else
    318     return 0;
    319 }
    320 
    321 
    322 
    323 /* If the text starting at P going up to (but not including) END
    324    starts with a character constant, set *TOK to point to that
    325    character constant, and return 1.  Otherwise, return zero.
    326    Signal an error if it contains a malformed or incomplete character
    327    constant.  */
    328 static int
    329 get_character_constant (struct macro_buffer *tok, char *p, char *end)
    330 {
    331   /* ISO/IEC 9899:1999 (E)  Section 6.4.4.4  paragraph 1
    332      But of course, what really matters is that we handle it the same
    333      way GDB's C/C++ lexer does.  So we call parse_escape in utils.c
    334      to handle escape sequences.  */
    335   if ((p + 1 <= end && *p == '\'')
    336       || (p + 2 <= end
    337 	  && (p[0] == 'L' || p[0] == 'u' || p[0] == 'U')
    338 	  && p[1] == '\''))
    339     {
    340       char *tok_start = p;
    341       int char_count = 0;
    342 
    343       if (*p == '\'')
    344         p++;
    345       else if (*p == 'L' || *p == 'u' || *p == 'U')
    346         p += 2;
    347       else
    348         gdb_assert_not_reached ("unexpected character constant");
    349 
    350       for (;;)
    351         {
    352           if (p >= end)
    353             error (_("Unmatched single quote."));
    354           else if (*p == '\'')
    355             {
    356               if (!char_count)
    357                 error (_("A character constant must contain at least one "
    358                        "character."));
    359               p++;
    360               break;
    361             }
    362           else if (*p == '\\')
    363             {
    364 	      const char *s, *o;
    365 
    366 	      s = o = ++p;
    367 	      char_count += c_parse_escape (&s, NULL);
    368 	      p += s - o;
    369             }
    370           else
    371 	    {
    372 	      p++;
    373 	      char_count++;
    374 	    }
    375         }
    376 
    377       set_token (tok, tok_start, p);
    378       return 1;
    379     }
    380   else
    381     return 0;
    382 }
    383 
    384 
    385 /* If the text starting at P going up to (but not including) END
    386    starts with a string literal, set *TOK to point to that string
    387    literal, and return 1.  Otherwise, return zero.  Signal an error if
    388    it contains a malformed or incomplete string literal.  */
    389 static int
    390 get_string_literal (struct macro_buffer *tok, char *p, char *end)
    391 {
    392   if ((p + 1 <= end
    393        && *p == '"')
    394       || (p + 2 <= end
    395           && (p[0] == 'L' || p[0] == 'u' || p[0] == 'U')
    396           && p[1] == '"'))
    397     {
    398       char *tok_start = p;
    399 
    400       if (*p == '"')
    401         p++;
    402       else if (*p == 'L' || *p == 'u' || *p == 'U')
    403         p += 2;
    404       else
    405         gdb_assert_not_reached ("unexpected string literal");
    406 
    407       for (;;)
    408         {
    409           if (p >= end)
    410             error (_("Unterminated string in expression."));
    411           else if (*p == '"')
    412             {
    413               p++;
    414               break;
    415             }
    416           else if (*p == '\n')
    417             error (_("Newline characters may not appear in string "
    418                    "constants."));
    419           else if (*p == '\\')
    420             {
    421 	      const char *s, *o;
    422 
    423 	      s = o = ++p;
    424 	      c_parse_escape (&s, NULL);
    425 	      p += s - o;
    426             }
    427           else
    428             p++;
    429         }
    430 
    431       set_token (tok, tok_start, p);
    432       return 1;
    433     }
    434   else
    435     return 0;
    436 }
    437 
    438 
    439 static int
    440 get_punctuator (struct macro_buffer *tok, char *p, char *end)
    441 {
    442   /* Here, speed is much less important than correctness and clarity.  */
    443 
    444   /* ISO/IEC 9899:1999 (E)  Section 6.4.6  Paragraph 1.
    445      Note that this table is ordered in a special way.  A punctuator
    446      which is a prefix of another punctuator must appear after its
    447      "extension".  Otherwise, the wrong token will be returned.  */
    448   static const char * const punctuators[] = {
    449     "[", "]", "(", ")", "{", "}", "?", ";", ",", "~",
    450     "...", ".",
    451     "->", "--", "-=", "-",
    452     "++", "+=", "+",
    453     "*=", "*",
    454     "!=", "!",
    455     "&&", "&=", "&",
    456     "/=", "/",
    457     "%>", "%:%:", "%:", "%=", "%",
    458     "^=", "^",
    459     "##", "#",
    460     ":>", ":",
    461     "||", "|=", "|",
    462     "<<=", "<<", "<=", "<:", "<%", "<",
    463     ">>=", ">>", ">=", ">",
    464     "==", "=",
    465     0
    466   };
    467 
    468   int i;
    469 
    470   if (p + 1 <= end)
    471     {
    472       for (i = 0; punctuators[i]; i++)
    473         {
    474           const char *punctuator = punctuators[i];
    475 
    476           if (p[0] == punctuator[0])
    477             {
    478               int len = strlen (punctuator);
    479 
    480               if (p + len <= end
    481                   && ! memcmp (p, punctuator, len))
    482                 {
    483                   set_token (tok, p, p + len);
    484                   return 1;
    485                 }
    486             }
    487         }
    488     }
    489 
    490   return 0;
    491 }
    492 
    493 
    494 /* Peel the next preprocessor token off of SRC, and put it in TOK.
    495    Mutate TOK to refer to the first token in SRC, and mutate SRC to
    496    refer to the text after that token.  SRC must be a shared buffer;
    497    the resulting TOK will be shared, pointing into the same string SRC
    498    does.  Initialize TOK's last_token field.  Return non-zero if we
    499    succeed, or 0 if we didn't find any more tokens in SRC.  */
    500 static int
    501 get_token (struct macro_buffer *tok,
    502            struct macro_buffer *src)
    503 {
    504   char *p = src->text;
    505   char *end = p + src->len;
    506 
    507   gdb_assert (src->shared);
    508 
    509   /* From the ISO C standard, ISO/IEC 9899:1999 (E), section 6.4:
    510 
    511      preprocessing-token:
    512          header-name
    513          identifier
    514          pp-number
    515          character-constant
    516          string-literal
    517          punctuator
    518          each non-white-space character that cannot be one of the above
    519 
    520      We don't have to deal with header-name tokens, since those can
    521      only occur after a #include, which we will never see.  */
    522 
    523   while (p < end)
    524     if (macro_is_whitespace (*p))
    525       p++;
    526     else if (get_comment (tok, p, end))
    527       p += tok->len;
    528     else if (get_pp_number (tok, p, end)
    529              || get_character_constant (tok, p, end)
    530              || get_string_literal (tok, p, end)
    531              /* Note: the grammar in the standard seems to be
    532                 ambiguous: L'x' can be either a wide character
    533                 constant, or an identifier followed by a normal
    534                 character constant.  By trying `get_identifier' after
    535                 we try get_character_constant and get_string_literal,
    536                 we give the wide character syntax precedence.  Now,
    537                 since GDB doesn't handle wide character constants
    538                 anyway, is this the right thing to do?  */
    539              || get_identifier (tok, p, end)
    540              || get_punctuator (tok, p, end))
    541       {
    542         /* How many characters did we consume, including whitespace?  */
    543         int consumed = p - src->text + tok->len;
    544 
    545         src->text += consumed;
    546         src->len -= consumed;
    547         return 1;
    548       }
    549     else
    550       {
    551         /* We have found a "non-whitespace character that cannot be
    552            one of the above."  Make a token out of it.  */
    553         int consumed;
    554 
    555         set_token (tok, p, p + 1);
    556         consumed = p - src->text + tok->len;
    557         src->text += consumed;
    558         src->len -= consumed;
    559         return 1;
    560       }
    561 
    562   return 0;
    563 }
    564 
    565 
    566 
    567 /* Appending token strings, with and without splicing  */
    569 
    570 
    571 /* Append the macro buffer SRC to the end of DEST, and ensure that
    572    doing so doesn't splice the token at the end of SRC with the token
    573    at the beginning of DEST.  SRC and DEST must have their last_token
    574    fields set.  Upon return, DEST's last_token field is set correctly.
    575 
    576    For example:
    577 
    578    If DEST is "(" and SRC is "y", then we can return with
    579    DEST set to "(y" --- we've simply appended the two buffers.
    580 
    581    However, if DEST is "x" and SRC is "y", then we must not return
    582    with DEST set to "xy" --- that would splice the two tokens "x" and
    583    "y" together to make a single token "xy".  However, it would be
    584    fine to return with DEST set to "x y".  Similarly, "<" and "<" must
    585    yield "< <", not "<<", etc.  */
    586 static void
    587 append_tokens_without_splicing (struct macro_buffer *dest,
    588                                 struct macro_buffer *src)
    589 {
    590   int original_dest_len = dest->len;
    591   struct macro_buffer dest_tail, new_token;
    592 
    593   gdb_assert (src->last_token != -1);
    594   gdb_assert (dest->last_token != -1);
    595 
    596   /* First, just try appending the two, and call get_token to see if
    597      we got a splice.  */
    598   appendmem (dest, src->text, src->len);
    599 
    600   /* If DEST originally had no token abutting its end, then we can't
    601      have spliced anything, so we're done.  */
    602   if (dest->last_token == original_dest_len)
    603     {
    604       dest->last_token = original_dest_len + src->last_token;
    605       return;
    606     }
    607 
    608   /* Set DEST_TAIL to point to the last token in DEST, followed by
    609      all the stuff we just appended.  */
    610   init_shared_buffer (&dest_tail,
    611                       dest->text + dest->last_token,
    612                       dest->len - dest->last_token);
    613 
    614   /* Re-parse DEST's last token.  We know that DEST used to contain
    615      at least one token, so if it doesn't contain any after the
    616      append, then we must have spliced "/" and "*" or "/" and "/" to
    617      make a comment start.  (Just for the record, I got this right
    618      the first time.  This is not a bug fix.)  */
    619   if (get_token (&new_token, &dest_tail)
    620       && (new_token.text + new_token.len
    621           == dest->text + original_dest_len))
    622     {
    623       /* No splice, so we're done.  */
    624       dest->last_token = original_dest_len + src->last_token;
    625       return;
    626     }
    627 
    628   /* Okay, a simple append caused a splice.  Let's chop dest back to
    629      its original length and try again, but separate the texts with a
    630      space.  */
    631   dest->len = original_dest_len;
    632   appendc (dest, ' ');
    633   appendmem (dest, src->text, src->len);
    634 
    635   init_shared_buffer (&dest_tail,
    636                       dest->text + dest->last_token,
    637                       dest->len - dest->last_token);
    638 
    639   /* Try to re-parse DEST's last token, as above.  */
    640   if (get_token (&new_token, &dest_tail)
    641       && (new_token.text + new_token.len
    642           == dest->text + original_dest_len))
    643     {
    644       /* No splice, so we're done.  */
    645       dest->last_token = original_dest_len + 1 + src->last_token;
    646       return;
    647     }
    648 
    649   /* As far as I know, there's no case where inserting a space isn't
    650      enough to prevent a splice.  */
    651   internal_error (__FILE__, __LINE__,
    652                   _("unable to avoid splicing tokens during macro expansion"));
    653 }
    654 
    655 /* Stringify an argument, and insert it into DEST.  ARG is the text to
    656    stringify; it is LEN bytes long.  */
    657 
    658 static void
    659 stringify (struct macro_buffer *dest, const char *arg, int len)
    660 {
    661   /* Trim initial whitespace from ARG.  */
    662   while (len > 0 && macro_is_whitespace (*arg))
    663     {
    664       ++arg;
    665       --len;
    666     }
    667 
    668   /* Trim trailing whitespace from ARG.  */
    669   while (len > 0 && macro_is_whitespace (arg[len - 1]))
    670     --len;
    671 
    672   /* Insert the string.  */
    673   appendc (dest, '"');
    674   while (len > 0)
    675     {
    676       /* We could try to handle strange cases here, like control
    677 	 characters, but there doesn't seem to be much point.  */
    678       if (macro_is_whitespace (*arg))
    679 	{
    680 	  /* Replace a sequence of whitespace with a single space.  */
    681 	  appendc (dest, ' ');
    682 	  while (len > 1 && macro_is_whitespace (arg[1]))
    683 	    {
    684 	      ++arg;
    685 	      --len;
    686 	    }
    687 	}
    688       else if (*arg == '\\' || *arg == '"')
    689 	{
    690 	  appendc (dest, '\\');
    691 	  appendc (dest, *arg);
    692 	}
    693       else
    694 	appendc (dest, *arg);
    695       ++arg;
    696       --len;
    697     }
    698   appendc (dest, '"');
    699   dest->last_token = dest->len;
    700 }
    701 
    702 /* See macroexp.h.  */
    703 
    704 char *
    705 macro_stringify (const char *str)
    706 {
    707   struct macro_buffer buffer;
    708   int len = strlen (str);
    709 
    710   init_buffer (&buffer, len);
    711   stringify (&buffer, str, len);
    712   appendc (&buffer, '\0');
    713 
    714   return free_buffer_return_text (&buffer);
    715 }
    716 
    717 
    718 /* Expanding macros!  */
    720 
    721 
    722 /* A singly-linked list of the names of the macros we are currently
    723    expanding --- for detecting expansion loops.  */
    724 struct macro_name_list {
    725   const char *name;
    726   struct macro_name_list *next;
    727 };
    728 
    729 
    730 /* Return non-zero if we are currently expanding the macro named NAME,
    731    according to LIST; otherwise, return zero.
    732 
    733    You know, it would be possible to get rid of all the NO_LOOP
    734    arguments to these functions by simply generating a new lookup
    735    function and baton which refuses to find the definition for a
    736    particular macro, and otherwise delegates the decision to another
    737    function/baton pair.  But that makes the linked list of excluded
    738    macros chained through untyped baton pointers, which will make it
    739    harder to debug.  :(  */
    740 static int
    741 currently_rescanning (struct macro_name_list *list, const char *name)
    742 {
    743   for (; list; list = list->next)
    744     if (strcmp (name, list->name) == 0)
    745       return 1;
    746 
    747   return 0;
    748 }
    749 
    750 
    751 /* Gather the arguments to a macro expansion.
    752 
    753    NAME is the name of the macro being invoked.  (It's only used for
    754    printing error messages.)
    755 
    756    Assume that SRC is the text of the macro invocation immediately
    757    following the macro name.  For example, if we're processing the
    758    text foo(bar, baz), then NAME would be foo and SRC will be (bar,
    759    baz).
    760 
    761    If SRC doesn't start with an open paren ( token at all, return
    762    zero, leave SRC unchanged, and don't set *ARGC_P to anything.
    763 
    764    If SRC doesn't contain a properly terminated argument list, then
    765    raise an error.
    766 
    767    For a variadic macro, NARGS holds the number of formal arguments to
    768    the macro.  For a GNU-style variadic macro, this should be the
    769    number of named arguments.  For a non-variadic macro, NARGS should
    770    be -1.
    771 
    772    Otherwise, return a pointer to the first element of an array of
    773    macro buffers referring to the argument texts, and set *ARGC_P to
    774    the number of arguments we found --- the number of elements in the
    775    array.  The macro buffers share their text with SRC, and their
    776    last_token fields are initialized.  The array is allocated with
    777    xmalloc, and the caller is responsible for freeing it.
    778 
    779    NOTE WELL: if SRC starts with a open paren ( token followed
    780    immediately by a close paren ) token (e.g., the invocation looks
    781    like "foo()"), we treat that as one argument, which happens to be
    782    the empty list of tokens.  The caller should keep in mind that such
    783    a sequence of tokens is a valid way to invoke one-parameter
    784    function-like macros, but also a valid way to invoke zero-parameter
    785    function-like macros.  Eeew.
    786 
    787    Consume the tokens from SRC; after this call, SRC contains the text
    788    following the invocation.  */
    789 
    790 static struct macro_buffer *
    791 gather_arguments (const char *name, struct macro_buffer *src,
    792 		  int nargs, int *argc_p)
    793 {
    794   struct macro_buffer tok;
    795   int args_len, args_size;
    796   struct macro_buffer *args = NULL;
    797   struct cleanup *back_to = make_cleanup (free_current_contents, &args);
    798 
    799   /* Does SRC start with an opening paren token?  Read from a copy of
    800      SRC, so SRC itself is unaffected if we don't find an opening
    801      paren.  */
    802   {
    803     struct macro_buffer temp;
    804 
    805     init_shared_buffer (&temp, src->text, src->len);
    806 
    807     if (! get_token (&tok, &temp)
    808         || tok.len != 1
    809         || tok.text[0] != '(')
    810       {
    811         discard_cleanups (back_to);
    812         return 0;
    813       }
    814   }
    815 
    816   /* Consume SRC's opening paren.  */
    817   get_token (&tok, src);
    818 
    819   args_len = 0;
    820   args_size = 6;
    821   args = XNEWVEC (struct macro_buffer, args_size);
    822 
    823   for (;;)
    824     {
    825       struct macro_buffer *arg;
    826       int depth;
    827 
    828       /* Make sure we have room for the next argument.  */
    829       if (args_len >= args_size)
    830         {
    831           args_size *= 2;
    832           args = XRESIZEVEC (struct macro_buffer, args, args_size);
    833         }
    834 
    835       /* Initialize the next argument.  */
    836       arg = &args[args_len++];
    837       set_token (arg, src->text, src->text);
    838 
    839       /* Gather the argument's tokens.  */
    840       depth = 0;
    841       for (;;)
    842         {
    843           if (! get_token (&tok, src))
    844             error (_("Malformed argument list for macro `%s'."), name);
    845 
    846           /* Is tok an opening paren?  */
    847           if (tok.len == 1 && tok.text[0] == '(')
    848             depth++;
    849 
    850           /* Is tok is a closing paren?  */
    851           else if (tok.len == 1 && tok.text[0] == ')')
    852             {
    853               /* If it's a closing paren at the top level, then that's
    854                  the end of the argument list.  */
    855               if (depth == 0)
    856                 {
    857 		  /* In the varargs case, the last argument may be
    858 		     missing.  Add an empty argument in this case.  */
    859 		  if (nargs != -1 && args_len == nargs - 1)
    860 		    {
    861 		      /* Make sure we have room for the argument.  */
    862 		      if (args_len >= args_size)
    863 			{
    864 			  args_size++;
    865 			  args = XRESIZEVEC (struct macro_buffer, args,
    866 					     args_size);
    867 			}
    868 		      arg = &args[args_len++];
    869 		      set_token (arg, src->text, src->text);
    870 		    }
    871 
    872                   discard_cleanups (back_to);
    873                   *argc_p = args_len;
    874                   return args;
    875                 }
    876 
    877               depth--;
    878             }
    879 
    880           /* If tok is a comma at top level, then that's the end of
    881              the current argument.  However, if we are handling a
    882              variadic macro and we are computing the last argument, we
    883              want to include the comma and remaining tokens.  */
    884           else if (tok.len == 1 && tok.text[0] == ',' && depth == 0
    885 		   && (nargs == -1 || args_len < nargs))
    886             break;
    887 
    888           /* Extend the current argument to enclose this token.  If
    889              this is the current argument's first token, leave out any
    890              leading whitespace, just for aesthetics.  */
    891           if (arg->len == 0)
    892             {
    893               arg->text = tok.text;
    894               arg->len = tok.len;
    895               arg->last_token = 0;
    896             }
    897           else
    898             {
    899               arg->len = (tok.text + tok.len) - arg->text;
    900               arg->last_token = tok.text - arg->text;
    901             }
    902         }
    903     }
    904 }
    905 
    906 
    907 /* The `expand' and `substitute_args' functions both invoke `scan'
    908    recursively, so we need a forward declaration somewhere.  */
    909 static void scan (struct macro_buffer *dest,
    910                   struct macro_buffer *src,
    911                   struct macro_name_list *no_loop,
    912                   macro_lookup_ftype *lookup_func,
    913                   void *lookup_baton);
    914 
    915 
    916 /* A helper function for substitute_args.
    917 
    918    ARGV is a vector of all the arguments; ARGC is the number of
    919    arguments.  IS_VARARGS is true if the macro being substituted is a
    920    varargs macro; in this case VA_ARG_NAME is the name of the
    921    "variable" argument.  VA_ARG_NAME is ignored if IS_VARARGS is
    922    false.
    923 
    924    If the token TOK is the name of a parameter, return the parameter's
    925    index.  If TOK is not an argument, return -1.  */
    926 
    927 static int
    928 find_parameter (const struct macro_buffer *tok,
    929 		int is_varargs, const struct macro_buffer *va_arg_name,
    930 		int argc, const char * const *argv)
    931 {
    932   int i;
    933 
    934   if (! tok->is_identifier)
    935     return -1;
    936 
    937   for (i = 0; i < argc; ++i)
    938     if (tok->len == strlen (argv[i])
    939 	&& !memcmp (tok->text, argv[i], tok->len))
    940       return i;
    941 
    942   if (is_varargs && tok->len == va_arg_name->len
    943       && ! memcmp (tok->text, va_arg_name->text, tok->len))
    944     return argc - 1;
    945 
    946   return -1;
    947 }
    948 
    949 /* Given the macro definition DEF, being invoked with the actual
    950    arguments given by ARGC and ARGV, substitute the arguments into the
    951    replacement list, and store the result in DEST.
    952 
    953    IS_VARARGS should be true if DEF is a varargs macro.  In this case,
    954    VA_ARG_NAME should be the name of the "variable" argument -- either
    955    __VA_ARGS__ for c99-style varargs, or the final argument name, for
    956    GNU-style varargs.  If IS_VARARGS is false, this parameter is
    957    ignored.
    958 
    959    If it is necessary to expand macro invocations in one of the
    960    arguments, use LOOKUP_FUNC and LOOKUP_BATON to find the macro
    961    definitions, and don't expand invocations of the macros listed in
    962    NO_LOOP.  */
    963 
    964 static void
    965 substitute_args (struct macro_buffer *dest,
    966                  struct macro_definition *def,
    967 		 int is_varargs, const struct macro_buffer *va_arg_name,
    968                  int argc, struct macro_buffer *argv,
    969                  struct macro_name_list *no_loop,
    970                  macro_lookup_ftype *lookup_func,
    971                  void *lookup_baton)
    972 {
    973   /* A macro buffer for the macro's replacement list.  */
    974   struct macro_buffer replacement_list;
    975   /* The token we are currently considering.  */
    976   struct macro_buffer tok;
    977   /* The replacement list's pointer from just before TOK was lexed.  */
    978   char *original_rl_start;
    979   /* We have a single lookahead token to handle token splicing.  */
    980   struct macro_buffer lookahead;
    981   /* The lookahead token might not be valid.  */
    982   int lookahead_valid;
    983   /* The replacement list's pointer from just before LOOKAHEAD was
    984      lexed.  */
    985   char *lookahead_rl_start;
    986 
    987   init_shared_buffer (&replacement_list, (char *) def->replacement,
    988                       strlen (def->replacement));
    989 
    990   gdb_assert (dest->len == 0);
    991   dest->last_token = 0;
    992 
    993   original_rl_start = replacement_list.text;
    994   if (! get_token (&tok, &replacement_list))
    995     return;
    996   lookahead_rl_start = replacement_list.text;
    997   lookahead_valid = get_token (&lookahead, &replacement_list);
    998 
    999   for (;;)
   1000     {
   1001       /* Just for aesthetics.  If we skipped some whitespace, copy
   1002          that to DEST.  */
   1003       if (tok.text > original_rl_start)
   1004         {
   1005           appendmem (dest, original_rl_start, tok.text - original_rl_start);
   1006           dest->last_token = dest->len;
   1007         }
   1008 
   1009       /* Is this token the stringification operator?  */
   1010       if (tok.len == 1
   1011           && tok.text[0] == '#')
   1012 	{
   1013 	  int arg;
   1014 
   1015 	  if (!lookahead_valid)
   1016 	    error (_("Stringification operator requires an argument."));
   1017 
   1018 	  arg = find_parameter (&lookahead, is_varargs, va_arg_name,
   1019 				def->argc, def->argv);
   1020 	  if (arg == -1)
   1021 	    error (_("Argument to stringification operator must name "
   1022 		     "a macro parameter."));
   1023 
   1024 	  stringify (dest, argv[arg].text, argv[arg].len);
   1025 
   1026 	  /* Read one token and let the loop iteration code handle the
   1027 	     rest.  */
   1028 	  lookahead_rl_start = replacement_list.text;
   1029 	  lookahead_valid = get_token (&lookahead, &replacement_list);
   1030 	}
   1031       /* Is this token the splicing operator?  */
   1032       else if (tok.len == 2
   1033 	       && tok.text[0] == '#'
   1034 	       && tok.text[1] == '#')
   1035 	error (_("Stray splicing operator"));
   1036       /* Is the next token the splicing operator?  */
   1037       else if (lookahead_valid
   1038 	       && lookahead.len == 2
   1039 	       && lookahead.text[0] == '#'
   1040 	       && lookahead.text[1] == '#')
   1041 	{
   1042 	  int finished = 0;
   1043 	  int prev_was_comma = 0;
   1044 
   1045 	  /* Note that GCC warns if the result of splicing is not a
   1046 	     token.  In the debugger there doesn't seem to be much
   1047 	     benefit from doing this.  */
   1048 
   1049 	  /* Insert the first token.  */
   1050 	  if (tok.len == 1 && tok.text[0] == ',')
   1051 	    prev_was_comma = 1;
   1052 	  else
   1053 	    {
   1054 	      int arg = find_parameter (&tok, is_varargs, va_arg_name,
   1055 					def->argc, def->argv);
   1056 
   1057 	      if (arg != -1)
   1058 		appendmem (dest, argv[arg].text, argv[arg].len);
   1059 	      else
   1060 		appendmem (dest, tok.text, tok.len);
   1061 	    }
   1062 
   1063 	  /* Apply a possible sequence of ## operators.  */
   1064 	  for (;;)
   1065 	    {
   1066 	      if (! get_token (&tok, &replacement_list))
   1067 		error (_("Splicing operator at end of macro"));
   1068 
   1069 	      /* Handle a comma before a ##.  If we are handling
   1070 		 varargs, and the token on the right hand side is the
   1071 		 varargs marker, and the final argument is empty or
   1072 		 missing, then drop the comma.  This is a GNU
   1073 		 extension.  There is one ambiguous case here,
   1074 		 involving pedantic behavior with an empty argument,
   1075 		 but we settle that in favor of GNU-style (GCC uses an
   1076 		 option).  If we aren't dealing with varargs, we
   1077 		 simply insert the comma.  */
   1078 	      if (prev_was_comma)
   1079 		{
   1080 		  if (! (is_varargs
   1081 			 && tok.len == va_arg_name->len
   1082 			 && !memcmp (tok.text, va_arg_name->text, tok.len)
   1083 			 && argv[argc - 1].len == 0))
   1084 		    appendmem (dest, ",", 1);
   1085 		  prev_was_comma = 0;
   1086 		}
   1087 
   1088 	      /* Insert the token.  If it is a parameter, insert the
   1089 		 argument.  If it is a comma, treat it specially.  */
   1090 	      if (tok.len == 1 && tok.text[0] == ',')
   1091 		prev_was_comma = 1;
   1092 	      else
   1093 		{
   1094 		  int arg = find_parameter (&tok, is_varargs, va_arg_name,
   1095 					    def->argc, def->argv);
   1096 
   1097 		  if (arg != -1)
   1098 		    appendmem (dest, argv[arg].text, argv[arg].len);
   1099 		  else
   1100 		    appendmem (dest, tok.text, tok.len);
   1101 		}
   1102 
   1103 	      /* Now read another token.  If it is another splice, we
   1104 		 loop.  */
   1105 	      original_rl_start = replacement_list.text;
   1106 	      if (! get_token (&tok, &replacement_list))
   1107 		{
   1108 		  finished = 1;
   1109 		  break;
   1110 		}
   1111 
   1112 	      if (! (tok.len == 2
   1113 		     && tok.text[0] == '#'
   1114 		     && tok.text[1] == '#'))
   1115 		break;
   1116 	    }
   1117 
   1118 	  if (prev_was_comma)
   1119 	    {
   1120 	      /* We saw a comma.  Insert it now.  */
   1121 	      appendmem (dest, ",", 1);
   1122 	    }
   1123 
   1124           dest->last_token = dest->len;
   1125 	  if (finished)
   1126 	    lookahead_valid = 0;
   1127 	  else
   1128 	    {
   1129 	      /* Set up for the loop iterator.  */
   1130 	      lookahead = tok;
   1131 	      lookahead_rl_start = original_rl_start;
   1132 	      lookahead_valid = 1;
   1133 	    }
   1134 	}
   1135       else
   1136 	{
   1137 	  /* Is this token an identifier?  */
   1138 	  int substituted = 0;
   1139 	  int arg = find_parameter (&tok, is_varargs, va_arg_name,
   1140 				    def->argc, def->argv);
   1141 
   1142 	  if (arg != -1)
   1143 	    {
   1144 	      struct macro_buffer arg_src;
   1145 
   1146 	      /* Expand any macro invocations in the argument text,
   1147 		 and append the result to dest.  Remember that scan
   1148 		 mutates its source, so we need to scan a new buffer
   1149 		 referring to the argument's text, not the argument
   1150 		 itself.  */
   1151 	      init_shared_buffer (&arg_src, argv[arg].text, argv[arg].len);
   1152 	      scan (dest, &arg_src, no_loop, lookup_func, lookup_baton);
   1153 	      substituted = 1;
   1154 	    }
   1155 
   1156 	  /* If it wasn't a parameter, then just copy it across.  */
   1157 	  if (! substituted)
   1158 	    append_tokens_without_splicing (dest, &tok);
   1159 	}
   1160 
   1161       if (! lookahead_valid)
   1162 	break;
   1163 
   1164       tok = lookahead;
   1165       original_rl_start = lookahead_rl_start;
   1166 
   1167       lookahead_rl_start = replacement_list.text;
   1168       lookahead_valid = get_token (&lookahead, &replacement_list);
   1169     }
   1170 }
   1171 
   1172 
   1173 /* Expand a call to a macro named ID, whose definition is DEF.  Append
   1174    its expansion to DEST.  SRC is the input text following the ID
   1175    token.  We are currently rescanning the expansions of the macros
   1176    named in NO_LOOP; don't re-expand them.  Use LOOKUP_FUNC and
   1177    LOOKUP_BATON to find definitions for any nested macro references.
   1178 
   1179    Return 1 if we decided to expand it, zero otherwise.  (If it's a
   1180    function-like macro name that isn't followed by an argument list,
   1181    we don't expand it.)  If we return zero, leave SRC unchanged.  */
   1182 static int
   1183 expand (const char *id,
   1184         struct macro_definition *def,
   1185         struct macro_buffer *dest,
   1186         struct macro_buffer *src,
   1187         struct macro_name_list *no_loop,
   1188         macro_lookup_ftype *lookup_func,
   1189         void *lookup_baton)
   1190 {
   1191   struct macro_name_list new_no_loop;
   1192 
   1193   /* Create a new node to be added to the front of the no-expand list.
   1194      This list is appropriate for re-scanning replacement lists, but
   1195      it is *not* appropriate for scanning macro arguments; invocations
   1196      of the macro whose arguments we are gathering *do* get expanded
   1197      there.  */
   1198   new_no_loop.name = id;
   1199   new_no_loop.next = no_loop;
   1200 
   1201   /* What kind of macro are we expanding?  */
   1202   if (def->kind == macro_object_like)
   1203     {
   1204       struct macro_buffer replacement_list;
   1205 
   1206       init_shared_buffer (&replacement_list, (char *) def->replacement,
   1207                           strlen (def->replacement));
   1208 
   1209       scan (dest, &replacement_list, &new_no_loop, lookup_func, lookup_baton);
   1210       return 1;
   1211     }
   1212   else if (def->kind == macro_function_like)
   1213     {
   1214       struct cleanup *back_to = make_cleanup (null_cleanup, 0);
   1215       int argc = 0;
   1216       struct macro_buffer *argv = NULL;
   1217       struct macro_buffer substituted;
   1218       struct macro_buffer substituted_src;
   1219       struct macro_buffer va_arg_name = {0};
   1220       int is_varargs = 0;
   1221 
   1222       if (def->argc >= 1)
   1223 	{
   1224 	  if (strcmp (def->argv[def->argc - 1], "...") == 0)
   1225 	    {
   1226 	      /* In C99-style varargs, substitution is done using
   1227 		 __VA_ARGS__.  */
   1228 	      init_shared_buffer (&va_arg_name, "__VA_ARGS__",
   1229 				  strlen ("__VA_ARGS__"));
   1230 	      is_varargs = 1;
   1231 	    }
   1232 	  else
   1233 	    {
   1234 	      int len = strlen (def->argv[def->argc - 1]);
   1235 
   1236 	      if (len > 3
   1237 		  && strcmp (def->argv[def->argc - 1] + len - 3, "...") == 0)
   1238 		{
   1239 		  /* In GNU-style varargs, the name of the
   1240 		     substitution parameter is the name of the formal
   1241 		     argument without the "...".  */
   1242 		  init_shared_buffer (&va_arg_name,
   1243 				      (char *) def->argv[def->argc - 1],
   1244 				      len - 3);
   1245 		  is_varargs = 1;
   1246 		}
   1247 	    }
   1248 	}
   1249 
   1250       make_cleanup (free_current_contents, &argv);
   1251       argv = gather_arguments (id, src, is_varargs ? def->argc : -1,
   1252 			       &argc);
   1253 
   1254       /* If we couldn't find any argument list, then we don't expand
   1255          this macro.  */
   1256       if (! argv)
   1257         {
   1258           do_cleanups (back_to);
   1259           return 0;
   1260         }
   1261 
   1262       /* Check that we're passing an acceptable number of arguments for
   1263          this macro.  */
   1264       if (argc != def->argc)
   1265         {
   1266 	  if (is_varargs && argc >= def->argc - 1)
   1267 	    {
   1268 	      /* Ok.  */
   1269 	    }
   1270           /* Remember that a sequence of tokens like "foo()" is a
   1271              valid invocation of a macro expecting either zero or one
   1272              arguments.  */
   1273           else if (! (argc == 1
   1274 		      && argv[0].len == 0
   1275 		      && def->argc == 0))
   1276             error (_("Wrong number of arguments to macro `%s' "
   1277                    "(expected %d, got %d)."),
   1278                    id, def->argc, argc);
   1279         }
   1280 
   1281       /* Note that we don't expand macro invocations in the arguments
   1282          yet --- we let subst_args take care of that.  Parameters that
   1283          appear as operands of the stringifying operator "#" or the
   1284          splicing operator "##" don't get macro references expanded,
   1285          so we can't really tell whether it's appropriate to macro-
   1286          expand an argument until we see how it's being used.  */
   1287       init_buffer (&substituted, 0);
   1288       make_cleanup (cleanup_macro_buffer, &substituted);
   1289       substitute_args (&substituted, def, is_varargs, &va_arg_name,
   1290 		       argc, argv, no_loop, lookup_func, lookup_baton);
   1291 
   1292       /* Now `substituted' is the macro's replacement list, with all
   1293          argument values substituted into it properly.  Re-scan it for
   1294          macro references, but don't expand invocations of this macro.
   1295 
   1296          We create a new buffer, `substituted_src', which points into
   1297          `substituted', and scan that.  We can't scan `substituted'
   1298          itself, since the tokenization process moves the buffer's
   1299          text pointer around, and we still need to be able to find
   1300          `substituted's original text buffer after scanning it so we
   1301          can free it.  */
   1302       init_shared_buffer (&substituted_src, substituted.text, substituted.len);
   1303       scan (dest, &substituted_src, &new_no_loop, lookup_func, lookup_baton);
   1304 
   1305       do_cleanups (back_to);
   1306 
   1307       return 1;
   1308     }
   1309   else
   1310     internal_error (__FILE__, __LINE__, _("bad macro definition kind"));
   1311 }
   1312 
   1313 
   1314 /* If the single token in SRC_FIRST followed by the tokens in SRC_REST
   1315    constitute a macro invokation not forbidden in NO_LOOP, append its
   1316    expansion to DEST and return non-zero.  Otherwise, return zero, and
   1317    leave DEST unchanged.
   1318 
   1319    SRC_FIRST and SRC_REST must be shared buffers; DEST must not be one.
   1320    SRC_FIRST must be a string built by get_token.  */
   1321 static int
   1322 maybe_expand (struct macro_buffer *dest,
   1323               struct macro_buffer *src_first,
   1324               struct macro_buffer *src_rest,
   1325               struct macro_name_list *no_loop,
   1326               macro_lookup_ftype *lookup_func,
   1327               void *lookup_baton)
   1328 {
   1329   gdb_assert (src_first->shared);
   1330   gdb_assert (src_rest->shared);
   1331   gdb_assert (! dest->shared);
   1332 
   1333   /* Is this token an identifier?  */
   1334   if (src_first->is_identifier)
   1335     {
   1336       /* Make a null-terminated copy of it, since that's what our
   1337          lookup function expects.  */
   1338       char *id = (char *) xmalloc (src_first->len + 1);
   1339       struct cleanup *back_to = make_cleanup (xfree, id);
   1340 
   1341       memcpy (id, src_first->text, src_first->len);
   1342       id[src_first->len] = 0;
   1343 
   1344       /* If we're currently re-scanning the result of expanding
   1345          this macro, don't expand it again.  */
   1346       if (! currently_rescanning (no_loop, id))
   1347         {
   1348           /* Does this identifier have a macro definition in scope?  */
   1349           struct macro_definition *def = lookup_func (id, lookup_baton);
   1350 
   1351           if (def && expand (id, def, dest, src_rest, no_loop,
   1352                              lookup_func, lookup_baton))
   1353             {
   1354               do_cleanups (back_to);
   1355               return 1;
   1356             }
   1357         }
   1358 
   1359       do_cleanups (back_to);
   1360     }
   1361 
   1362   return 0;
   1363 }
   1364 
   1365 
   1366 /* Expand macro references in SRC, appending the results to DEST.
   1367    Assume we are re-scanning the result of expanding the macros named
   1368    in NO_LOOP, and don't try to re-expand references to them.
   1369 
   1370    SRC must be a shared buffer; DEST must not be one.  */
   1371 static void
   1372 scan (struct macro_buffer *dest,
   1373       struct macro_buffer *src,
   1374       struct macro_name_list *no_loop,
   1375       macro_lookup_ftype *lookup_func,
   1376       void *lookup_baton)
   1377 {
   1378   gdb_assert (src->shared);
   1379   gdb_assert (! dest->shared);
   1380 
   1381   for (;;)
   1382     {
   1383       struct macro_buffer tok;
   1384       char *original_src_start = src->text;
   1385 
   1386       /* Find the next token in SRC.  */
   1387       if (! get_token (&tok, src))
   1388         break;
   1389 
   1390       /* Just for aesthetics.  If we skipped some whitespace, copy
   1391          that to DEST.  */
   1392       if (tok.text > original_src_start)
   1393         {
   1394           appendmem (dest, original_src_start, tok.text - original_src_start);
   1395           dest->last_token = dest->len;
   1396         }
   1397 
   1398       if (! maybe_expand (dest, &tok, src, no_loop, lookup_func, lookup_baton))
   1399         /* We didn't end up expanding tok as a macro reference, so
   1400            simply append it to dest.  */
   1401         append_tokens_without_splicing (dest, &tok);
   1402     }
   1403 
   1404   /* Just for aesthetics.  If there was any trailing whitespace in
   1405      src, copy it to dest.  */
   1406   if (src->len)
   1407     {
   1408       appendmem (dest, src->text, src->len);
   1409       dest->last_token = dest->len;
   1410     }
   1411 }
   1412 
   1413 
   1414 char *
   1415 macro_expand (const char *source,
   1416               macro_lookup_ftype *lookup_func,
   1417               void *lookup_func_baton)
   1418 {
   1419   struct macro_buffer src, dest;
   1420   struct cleanup *back_to;
   1421 
   1422   init_shared_buffer (&src, (char *) source, strlen (source));
   1423 
   1424   init_buffer (&dest, 0);
   1425   dest.last_token = 0;
   1426   back_to = make_cleanup (cleanup_macro_buffer, &dest);
   1427 
   1428   scan (&dest, &src, 0, lookup_func, lookup_func_baton);
   1429 
   1430   appendc (&dest, '\0');
   1431 
   1432   discard_cleanups (back_to);
   1433   return dest.text;
   1434 }
   1435 
   1436 
   1437 char *
   1438 macro_expand_once (const char *source,
   1439                    macro_lookup_ftype *lookup_func,
   1440                    void *lookup_func_baton)
   1441 {
   1442   error (_("Expand-once not implemented yet."));
   1443 }
   1444 
   1445 
   1446 char *
   1447 macro_expand_next (const char **lexptr,
   1448                    macro_lookup_ftype *lookup_func,
   1449                    void *lookup_baton)
   1450 {
   1451   struct macro_buffer src, dest, tok;
   1452   struct cleanup *back_to;
   1453 
   1454   /* Set up SRC to refer to the input text, pointed to by *lexptr.  */
   1455   init_shared_buffer (&src, (char *) *lexptr, strlen (*lexptr));
   1456 
   1457   /* Set up DEST to receive the expansion, if there is one.  */
   1458   init_buffer (&dest, 0);
   1459   dest.last_token = 0;
   1460   back_to = make_cleanup (cleanup_macro_buffer, &dest);
   1461 
   1462   /* Get the text's first preprocessing token.  */
   1463   if (! get_token (&tok, &src))
   1464     {
   1465       do_cleanups (back_to);
   1466       return 0;
   1467     }
   1468 
   1469   /* If it's a macro invocation, expand it.  */
   1470   if (maybe_expand (&dest, &tok, &src, 0, lookup_func, lookup_baton))
   1471     {
   1472       /* It was a macro invocation!  Package up the expansion as a
   1473          null-terminated string and return it.  Set *lexptr to the
   1474          start of the next token in the input.  */
   1475       appendc (&dest, '\0');
   1476       discard_cleanups (back_to);
   1477       *lexptr = src.text;
   1478       return dest.text;
   1479     }
   1480   else
   1481     {
   1482       /* It wasn't a macro invocation.  */
   1483       do_cleanups (back_to);
   1484       return 0;
   1485     }
   1486 }
   1487