(root)/
Python-3.11.7/
Parser/
string_parser.h
       1  #ifndef STRINGS_H
       2  #define STRINGS_H
       3  
       4  #include <Python.h>
       5  #include <pycore_ast.h>
       6  #include "pegen.h"
       7  
       8  #define EXPRLIST_N_CACHED  64
       9  
      10  typedef struct {
      11      /* Incrementally build an array of expr_ty, so be used in an
      12         asdl_seq. Cache some small but reasonably sized number of
      13         expr_ty's, and then after that start dynamically allocating,
      14         doubling the number allocated each time. Note that the f-string
      15         f'{0}a{1}' contains 3 expr_ty's: 2 FormattedValue's, and one
      16         Constant for the literal 'a'. So you add expr_ty's about twice as
      17         fast as you add expressions in an f-string. */
      18  
      19      Py_ssize_t allocated;  /* Number we've allocated. */
      20      Py_ssize_t size;       /* Number we've used. */
      21      expr_ty    *p;         /* Pointer to the memory we're actually
      22                                using. Will point to 'data' until we
      23                                start dynamically allocating. */
      24      expr_ty    data[EXPRLIST_N_CACHED];
      25  } ExprList;
      26  
      27  /* The FstringParser is designed to add a mix of strings and
      28     f-strings, and concat them together as needed. Ultimately, it
      29     generates an expr_ty. */
      30  typedef struct {
      31      PyObject *last_str;
      32      ExprList expr_list;
      33      int fmode;
      34  } FstringParser;
      35  
      36  void _PyPegen_FstringParser_Init(FstringParser *);
      37  int _PyPegen_parsestr(Parser *, int *, int *, PyObject **,
      38                        const char **, Py_ssize_t *, Token *);
      39  int _PyPegen_FstringParser_ConcatFstring(Parser *, FstringParser *, const char **,
      40                                  const char *, int, int, Token *, Token *,
      41                                  Token *);
      42  int _PyPegen_FstringParser_ConcatAndDel(FstringParser *, PyObject *);
      43  expr_ty _PyPegen_FstringParser_Finish(Parser *, FstringParser *, Token *, Token *);
      44  void _PyPegen_FstringParser_Dealloc(FstringParser *);
      45  
      46  #endif