cpp

Coverage Report

Created: 2025-05-14 17:40

/home/uke/oil/cpp/pgen2.h
Line
Count
Source (jump to first uncovered line)
1
// pgen2.h
2
3
#ifndef CPP_PGEN2_H
4
#define CPP_PGEN2_H
5
6
#include <deque>
7
#include <vector>
8
9
#include "_gen/frontend/syntax.asdl.h"
10
#include "mycpp/runtime.h"
11
12
namespace grammar {
13
14
typedef Tuple2<int, int> arc_t;
15
typedef Dict<int, int> first_t;
16
typedef List<List<arc_t*>*> states_t;
17
typedef Tuple2<states_t*, first_t*> dfa_t;
18
19
class Grammar {
20
 public:
21
  Grammar();
22
23
  Dict<BigStr*, int>* symbol2number;
24
  Dict<int, BigStr*>* number2symbol;
25
  List<List<Tuple2<int, int>*>*>* states;
26
  Dict<int, Tuple2<List<List<Tuple2<int, int>*>*>*, Dict<int, int>*>*>* dfas;
27
  List<int>* labels;
28
  Dict<BigStr*, int>* keywords;
29
  Dict<int, int>* tokens;
30
  Dict<BigStr*, int>* symbol2label;
31
  int start;
32
33
0
  static constexpr ObjHeader obj_header() {
34
0
    return ObjHeader::ClassFixed(field_mask(), sizeof(Grammar));
35
0
  }
36
37
0
  static constexpr uint32_t field_mask() {
38
0
    return maskbit(offsetof(Grammar, symbol2number)) |
39
0
           maskbit(offsetof(Grammar, number2symbol)) |
40
0
           maskbit(offsetof(Grammar, states)) |
41
0
           maskbit(offsetof(Grammar, dfas)) |
42
0
           maskbit(offsetof(Grammar, labels)) |
43
0
           maskbit(offsetof(Grammar, keywords)) |
44
0
           maskbit(offsetof(Grammar, tokens)) |
45
0
           maskbit(offsetof(Grammar, symbol2label));
46
0
  }
47
48
  DISALLOW_COPY_AND_ASSIGN(Grammar)
49
};
50
51
}  // namespace grammar
52
53
namespace pnode {
54
55
class PNode {
56
 public:
57
  PNode(int typ, syntax_asdl::Token* tok, List<PNode*>*);
58
59
  void AddChild(PNode* node);
60
  PNode* GetChild(int i);
61
  int NumChildren();
62
63
  int typ;
64
  syntax_asdl::Token* tok;
65
  std::vector<PNode*> children;
66
};
67
68
class PNodeAllocator {
69
 public:
70
  PNodeAllocator();
71
72
  PNode* NewPNode(int typ, syntax_asdl::Token* tok);
73
  void Clear();
74
75
0
  static constexpr ObjHeader obj_header() {
76
0
    return ObjHeader::Class(HeapTag::Opaque, kZeroMask, sizeof(PNodeAllocator));
77
0
  }
78
79
 private:
80
  // We put this on the heap so we can call its destructor from `Clear()`...
81
  std::deque<PNode>* arena_;
82
};
83
84
}  // namespace pnode
85
86
#endif  // CPP_PGEN2_H