Coverage Report

Created: 2022-07-08 09:39

/home/mdboom/Work/builds/cpython/Parser/string_parser.h
Line
Count
Source
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