Qt
Internal/Contributor docs for the Qt SDK. <b>Note:</b> These are NOT official API docs; those are found <a href='https://doc.qt.io/'>here</a>.
Loading...
Searching...
No Matches
glslast.cpp
Go to the documentation of this file.
1// Copyright (C) 2021 The Qt Company Ltd.
2// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
3
4#include "glslast_p.h"
5#include "glslastvisitor_p.h"
6#include "glslparsertable_p.h"
7
9
10using namespace GLSL;
11
12void AST::accept(Visitor *visitor)
13{
14 if (visitor->preVisit(this))
15 accept0(visitor);
16 visitor->postVisit(this);
17}
18
19void AST::accept(AST *ast, Visitor *visitor)
20{
21 if (ast)
22 ast->accept(visitor);
23}
24
26{
27 if (visitor->visit(this))
28 accept(declarations, visitor);
29 visitor->endVisit(this);
30}
31
33{
34 visitor->visit(this);
35 visitor->endVisit(this);
36}
37
39{
40 visitor->visit(this);
41 visitor->endVisit(this);
42}
43
45{
46 if (visitor->visit(this)) {
47 accept(left, visitor);
48 accept(right, visitor);
49 }
50 visitor->endVisit(this);
51}
52
54{
55 if (visitor->visit(this))
56 accept(expr, visitor);
57 visitor->endVisit(this);
58}
59
61{
62 if (visitor->visit(this)) {
63 accept(first, visitor);
64 accept(second, visitor);
65 accept(third, visitor);
66 }
67 visitor->endVisit(this);
68}
69
71{
72 if (visitor->visit(this)) {
73 accept(variable, visitor);
74 accept(value, visitor);
75 }
76 visitor->endVisit(this);
77}
78
80{
81 if (visitor->visit(this))
82 accept(expr, visitor);
83 visitor->endVisit(this);
84}
85
87{
88 if (visitor->visit(this)) {
89 accept(expr, visitor);
90 accept(id, visitor);
91 accept(arguments, visitor);
92 }
93 visitor->endVisit(this);
94}
95
97{
98 if (visitor->visit(this))
99 accept(type, visitor);
100 visitor->endVisit(this);
101}
102
104{
105 if (visitor->visit(this)) {
106 accept(type, visitor);
107 accept(initializer, visitor);
108 }
109 visitor->endVisit(this);
110}
111
113{
114 if (visitor->visit(this))
115 accept(expr, visitor);
116 visitor->endVisit(this);
117}
118
120{
121 if (visitor->visit(this))
122 accept(statements, visitor);
123 visitor->endVisit(this);
124}
125
127{
128 if (visitor->visit(this)) {
129 accept(condition, visitor);
130 accept(thenClause, visitor);
131 accept(elseClause, visitor);
132 }
133 visitor->endVisit(this);
134}
135
137{
138 if (visitor->visit(this)) {
139 accept(condition, visitor);
140 accept(body, visitor);
141 }
142 visitor->endVisit(this);
143}
144
146{
147 if (visitor->visit(this)) {
148 accept(body, visitor);
149 accept(condition, visitor);
150 }
151 visitor->endVisit(this);
152}
153
155{
156 if (visitor->visit(this)) {
157 accept(init, visitor);
158 accept(condition, visitor);
159 accept(increment, visitor);
160 accept(body, visitor);
161 }
162 visitor->endVisit(this);
163}
164
166{
167 visitor->visit(this);
168 visitor->endVisit(this);
169}
170
172{
173 if (visitor->visit(this))
174 accept(expr, visitor);
175 visitor->endVisit(this);
176}
177
179{
180 if (visitor->visit(this)) {
181 accept(expr, visitor);
182 accept(body, visitor);
183 }
184 visitor->endVisit(this);
185}
186
188{
189 if (visitor->visit(this))
190 accept(expr, visitor);
191 visitor->endVisit(this);
192}
193
195{
196 if (visitor->visit(this))
197 accept(decl, visitor);
198 visitor->endVisit(this);
199}
200
201BasicTypeAST::BasicTypeAST(int _token, const char *_name)
202 : TypeAST(Kind_BasicType), token(_token), name(_name)
203{
204 switch (token) {
211 break;
212 default:
214 break;
215 }
216}
217
219{
220 visitor->visit(this);
221 visitor->endVisit(this);
222}
223
225{
226 return prec;
227}
228
230{
231 if (prec == PrecNotValid)
232 return false;
233 prec = precision;
234 return true;
235}
236
238{
239 visitor->visit(this);
240 visitor->endVisit(this);
241}
242
244{
245 // Named types are typically structs, which cannot have their precision set.
246 return PrecNotValid;
247}
248
250{
251 return false;
252}
253
255{
256 if (visitor->visit(this)) {
257 accept(elementType, visitor);
258 accept(size, visitor);
259 }
260 visitor->endVisit(this);
261}
262
267
269{
270 if (elementType)
272
273 return false;
274}
275
277{
278 if (visitor->visit(this))
279 accept(fields, visitor);
280 visitor->endVisit(this);
281}
282
287
289{
290 // Structs cannot have a precision set.
291 return false;
292}
293
295{
296 if (visitor->visit(this))
297 accept(type, visitor);
298 visitor->endVisit(this);
299}
300
302{
303 if (!innerType)
304 return;
305 TypeAST **parent = &type;
306 TypeAST *inner = type;
307 while (inner != nullptr) {
308 ArrayTypeAST *array = inner->asArrayType();
309 if (!array)
310 break;
311 parent = &(array->elementType);
312 inner = array->elementType;
313 }
314 *parent = innerType;
315}
316
317List<StructTypeAST::Field *> *StructTypeAST::fixInnerTypes(TypeAST *innerType, List<Field *> *fields)
318{
319 if (!fields)
320 return fields;
321 List<Field *> *head = fields->next;
322 List<Field *> *current = head;
323 do {
324 current->value->setInnerType(innerType);
325 current = current->next;
326 } while (current && current != head);
327 return fields;
328}
329
331{
332 if (visitor->visit(this)) {
333 }
334 visitor->endVisit(this);
335}
336
338{
339 if (visitor->visit(this))
340 accept(type, visitor);
341 visitor->endVisit(this);
342}
343
345{
346 if (visitor->visit(this))
347 accept(type, visitor);
348 visitor->endVisit(this);
349}
350
352{
353 if (visitor->visit(this))
354 accept(type, visitor);
355 visitor->endVisit(this);
356}
357
359{
360 if (visitor->visit(this)) {
361 accept(type, visitor);
362 accept(initializer, visitor);
363 }
364 visitor->endVisit(this);
365}
366
368{
369 VariableDeclarationAST *var = decls->value->asVariableDeclaration();
370 return var ? var->type : nullptr;
371}
372
374{
375 if (visitor->visit(this))
376 accept(type, visitor);
377 visitor->endVisit(this);
378}
379
381{
382 if (visitor->visit(this)) {
383 accept(typeDecl, visitor);
384 accept(varDecl, visitor);
385 }
386 visitor->endVisit(this);
387}
388
390{
391 visitor->visit(this);
392 visitor->endVisit(this);
393}
394
396{
397 if (visitor->visit(this))
398 accept(decls, visitor);
399 visitor->endVisit(this);
400}
401
403{
404 if (visitor->visit(this)) {
405 accept(returnType, visitor);
406 accept(params, visitor);
407 accept(body, visitor);
408 }
409 visitor->endVisit(this);
410}
411
virtual void accept0(Visitor *visitor)=0
void accept(Visitor *visitor)
Definition glslast.cpp:12
void accept0(Visitor *visitor) override
Definition glslast.cpp:254
bool setPrecision(Precision precision) override
Definition glslast.cpp:268
ArrayTypeAST * asArrayType() override
Definition glslast_p.h:719
Precision precision() const override
Definition glslast.cpp:263
TypeAST * elementType
Definition glslast_p.h:727
void accept0(Visitor *visitor) override
Definition glslast.cpp:70
void accept0(Visitor *visitor) override
Definition glslast.cpp:218
BasicTypeAST(int _token, const char *_name)
Definition glslast.cpp:201
Precision precision() const override
Definition glslast.cpp:224
bool setPrecision(Precision precision) override
Definition glslast.cpp:229
void accept0(Visitor *visitor) override
Definition glslast.cpp:44
void accept0(Visitor *visitor) override
Definition glslast.cpp:187
List< StatementAST * > * statements
Definition glslast_p.h:513
void accept0(Visitor *visitor) override
Definition glslast.cpp:119
void accept0(Visitor *visitor) override
Definition glslast.cpp:103
void accept0(Visitor *visitor) override
Definition glslast.cpp:194
void accept0(Visitor *visitor) override
Definition glslast.cpp:145
StatementAST * body
Definition glslast_p.h:562
void accept0(Visitor *visitor) override
Definition glslast.cpp:112
StatementAST * body
Definition glslast_p.h:580
StatementAST * init
Definition glslast_p.h:577
void accept0(Visitor *visitor) override
Definition glslast.cpp:154
ExpressionAST * increment
Definition glslast_p.h:579
List< ExpressionAST * > * arguments
Definition glslast_p.h:437
void accept0(Visitor *visitor) override
Definition glslast.cpp:86
void accept0(Visitor *visitor) override
Definition glslast.cpp:402
void accept0(Visitor *visitor) override
Definition glslast.cpp:96
void accept0(Visitor *visitor) override
Definition glslast.cpp:32
StatementAST * elseClause
Definition glslast_p.h:533
StatementAST * thenClause
Definition glslast_p.h:532
void accept0(Visitor *visitor) override
Definition glslast.cpp:126
void accept0(Visitor *visitor) override
Definition glslast.cpp:395
void accept0(Visitor *visitor) override
Definition glslast.cpp:389
void accept0(Visitor *visitor) override
Definition glslast.cpp:165
void accept0(Visitor *visitor) override
Definition glslast.cpp:330
void accept0(Visitor *visitor) override
Definition glslast.cpp:38
void accept0(Visitor *visitor) override
Definition glslast.cpp:79
void accept0(Visitor *visitor) override
Definition glslast.cpp:237
Precision precision() const override
Definition glslast.cpp:243
bool setPrecision(Precision precision) override
Definition glslast.cpp:249
void accept0(Visitor *visitor) override
Definition glslast.cpp:351
void accept0(Visitor *visitor) override
Definition glslast.cpp:344
void accept0(Visitor *visitor) override
Definition glslast.cpp:337
void accept0(Visitor *visitor) override
Definition glslast.cpp:171
ExpressionAST * expr
Definition glslast_p.h:605
void setInnerType(TypeAST *innerType)
Definition glslast.cpp:301
void accept0(Visitor *visitor) override
Definition glslast.cpp:294
List< Field * > * fields
Definition glslast_p.h:772
bool setPrecision(Precision precision) override
Definition glslast.cpp:288
static List< Field * > * fixInnerTypes(TypeAST *innerType, List< Field * > *fields)
Definition glslast.cpp:317
Precision precision() const override
Definition glslast.cpp:283
void accept0(Visitor *visitor) override
Definition glslast.cpp:276
void accept0(Visitor *visitor) override
Definition glslast.cpp:178
StatementAST * body
Definition glslast_p.h:620
ExpressionAST * expr
Definition glslast_p.h:619
ExpressionAST * second
Definition glslast_p.h:384
ExpressionAST * third
Definition glslast_p.h:385
void accept0(Visitor *visitor) override
Definition glslast.cpp:60
void accept0(Visitor *visitor) override
Definition glslast.cpp:25
List< DeclarationAST * > * declarations
Definition glslast_p.h:303
virtual Precision precision() const =0
virtual bool setPrecision(Precision precision)=0
void accept0(Visitor *visitor) override
Definition glslast.cpp:380
void accept0(Visitor *visitor) override
Definition glslast.cpp:373
ExpressionAST * expr
Definition glslast_p.h:369
void accept0(Visitor *visitor) override
Definition glslast.cpp:53
static TypeAST * declarationType(List< DeclarationAST * > *decls)
Definition glslast.cpp:367
void accept0(Visitor *visitor) override
Definition glslast.cpp:358
virtual bool visit(TranslationUnitAST *)
virtual void endVisit(TranslationUnitAST *)
virtual bool preVisit(AST *)
virtual void postVisit(AST *)
StatementAST * body
Definition glslast_p.h:548
void accept0(Visitor *visitor) override
Definition glslast.cpp:136
Token token
Definition keywords.cpp:444
Definition glsl_p.h:22
Combined button and popup list for selecting options.
EGLOutputLayerEXT EGLint EGLAttrib value
[5]
GLenum GLuint GLintptr GLsizeiptr size
[1]
GLenum condition
GLdouble GLdouble right
GLint left
GLenum type
GLuint name
GLint first
void ** params
GLenum array
GLenum GLenum variable
GLenum GLint GLint * precision
manager head(request, this, [this](QRestReply &reply) { if(reply.isSuccess()) })
[6]