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