Line data Source code
1 : #ifndef VALIDATE_TREE_H
2 : #define VALIDATE_TREE_H
3 :
4 : #include "../visitor.h"
5 :
6 : class CheckPosition;
7 :
8 : namespace nicole {
9 :
10 : class ValidateTree final : public Visitor<bool> {
11 : public:
12 : [[nodiscard]] std::expected<bool, Error>
13 : visit(const AST_BOOL *node) const noexcept override;
14 :
15 : [[nodiscard]] std::expected<bool, Error>
16 : visit(const AST_CHAR *node) const noexcept override;
17 :
18 : [[nodiscard]] std::expected<bool, Error>
19 : visit(const AST_DOUBLE *node) const noexcept override;
20 :
21 : [[nodiscard]] std::expected<bool, Error>
22 : visit(const AST_FLOAT *node) const noexcept override;
23 :
24 : [[nodiscard]] std::expected<bool, Error>
25 : visit(const AST_INT *node) const noexcept override;
26 :
27 : [[nodiscard]] std::expected<bool, Error>
28 : visit(const AST_NULL *node) const noexcept override;
29 :
30 : [[nodiscard]] std::expected<bool, Error>
31 : visit(const AST_STRING *node) const noexcept override;
32 :
33 : [[nodiscard]] std::expected<bool, Error>
34 : visit(const AST_VECTOR *node) const noexcept override;
35 :
36 : [[nodiscard]] std::expected<bool, Error>
37 : visit(const AST_INDEX *node) const noexcept override;
38 :
39 : [[nodiscard]] std::expected<bool, Error>
40 : visit(const AST_DELETE *node) const noexcept override;
41 :
42 : [[nodiscard]] std::expected<bool, Error>
43 : visit(const AST_NEW *node) const noexcept override;
44 :
45 : [[nodiscard]] std::expected<bool, Error>
46 : visit(const AST_DEREF *node) const noexcept override;
47 :
48 : [[nodiscard]] std::expected<bool, Error>
49 : visit(const AST_BINARY *node) const noexcept override;
50 :
51 : [[nodiscard]] std::expected<bool, Error>
52 : visit(const AST_UNARY *node) const noexcept override;
53 :
54 : [[nodiscard]] std::expected<bool, Error>
55 : visit(const AST_ASSIGNMENT *node) const noexcept override;
56 :
57 : [[nodiscard]] std::expected<bool, Error>
58 : visit(const AST_PRINT *node) const noexcept override;
59 :
60 : [[nodiscard]] std::expected<bool, Error>
61 : visit(const AST_IMPORT *node) const noexcept override;
62 :
63 : [[nodiscard]] std::expected<bool, Error>
64 : visit(const AST_STATEMENT *node) const noexcept override;
65 :
66 : [[nodiscard]] std::expected<bool, Error>
67 : visit(const AST_BODY *node) const noexcept override;
68 :
69 : [[nodiscard]] std::expected<bool, Error>
70 : visit(const AST_WHILE *node) const noexcept override;
71 :
72 : [[nodiscard]] std::expected<bool, Error>
73 : visit(const AST_FOR *node) const noexcept override;
74 :
75 : [[nodiscard]] std::expected<bool, Error>
76 : visit(const AST_DO_WHILE *node) const noexcept override;
77 :
78 : [[nodiscard]] std::expected<bool, Error>
79 : visit(const AST_PASS *node) const noexcept override;
80 :
81 : [[nodiscard]] std::expected<bool, Error>
82 : visit(const AST_STOP *node) const noexcept override;
83 :
84 : [[nodiscard]] std::expected<bool, Error>
85 : visit(const AST_IF *node) const noexcept override;
86 :
87 : [[nodiscard]] std::expected<bool, Error>
88 : visit(const AST_ELSE_IF *node) const noexcept override;
89 :
90 : [[nodiscard]] std::expected<bool, Error>
91 : visit(const AST_SWITCH *node) const noexcept override;
92 :
93 : [[nodiscard]] std::expected<bool, Error>
94 : visit(const AST_CASE *node) const noexcept override;
95 :
96 : [[nodiscard]] std::expected<bool, Error>
97 : visit(const AST_DEFAULT *node) const noexcept override;
98 :
99 : [[nodiscard]] std::expected<bool, Error>
100 : visit(const AST_TERNARY *node) const noexcept override;
101 :
102 : [[nodiscard]] std::expected<bool, Error>
103 : visit(const AST_CONDITION *node) const noexcept override;
104 :
105 : [[nodiscard]] std::expected<bool, Error>
106 : visit(const AST_FUNC_CALL *node) const noexcept override;
107 :
108 : [[nodiscard]] std::expected<bool, Error>
109 : visit(const AST_FUNC_DECL *node) const noexcept override;
110 :
111 : [[nodiscard]] std::expected<bool, Error>
112 : visit(const AST_RETURN *node) const noexcept override;
113 :
114 : [[nodiscard]] std::expected<bool, Error>
115 : visit(const AST_ENUM *node) const noexcept override;
116 :
117 : [[nodiscard]] std::expected<bool, Error>
118 : visit(const AST_ENUM_ACCESS *node) const noexcept override;
119 :
120 : [[nodiscard]] std::expected<bool, Error>
121 : visit(const AST_STRUCT *node) const noexcept override;
122 :
123 : [[nodiscard]] std::expected<bool, Error>
124 : visit(const AST_ATTR_ACCESS *node) const noexcept override;
125 :
126 : [[nodiscard]] std::expected<bool, Error>
127 : visit(const AST_METHOD_CALL *node) const noexcept override;
128 :
129 : [[nodiscard]] std::expected<bool, Error>
130 : visit(const AST_METHOD_DECL *node) const noexcept override;
131 :
132 : [[nodiscard]] std::expected<bool, Error>
133 : visit(const AST_CONSTRUCTOR_DECL *node) const noexcept override;
134 :
135 : [[nodiscard]] std::expected<bool, Error>
136 : visit(const AST_SUPER *node) const noexcept override;
137 :
138 : [[nodiscard]] std::expected<bool, Error>
139 : visit(const AST_DESTRUCTOR_DECL *node) const noexcept override;
140 :
141 : [[nodiscard]] std::expected<bool, Error>
142 : visit(const AST_THIS *node) const noexcept override;
143 :
144 : [[nodiscard]] std::expected<bool, Error>
145 : visit(const AST_CONSTRUCTOR_CALL *node) const noexcept override;
146 :
147 : [[nodiscard]] std::expected<bool, Error>
148 : visit(const AST_AUTO_DECL *node) const noexcept override;
149 :
150 : [[nodiscard]] std::expected<bool, Error>
151 : visit(const AST_VAR_TYPED_DECL *node) const noexcept override;
152 :
153 : [[nodiscard]] std::expected<bool, Error>
154 : visit(const AST_VAR_CALL *node) const noexcept override;
155 :
156 : [[nodiscard]] std::expected<bool, Error>
157 : visit(const AST_CHAINED *node) const noexcept override;
158 :
159 : [[nodiscard]] std::expected<bool, Error>
160 : visit(const Tree *tree) const noexcept override;
161 :
162 : [[nodiscard]] std::expected<bool, Error>
163 0 : validate(const Tree *tree) const noexcept {
164 0 : return visit(tree);
165 0 : }
166 : };
167 :
168 : } // namespace nicole
169 :
170 : #endif
|