blob: 44a6d62ff3b28db0a59b8836a3fd7af46eb98b9d (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
|
// Copyright (C) 2021 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include "glslsymbols_p.h"
#include "glsltypes_p.h"
#include <QDebug>
QT_BEGIN_NAMESPACE
using namespace GLSL;
Argument::Argument(Function *scope)
: Symbol(scope)
, _type(nullptr)
{
}
const Type *Argument::type() const
{
return _type;
}
void Argument::setType(const Type *type)
{
_type = type;
}
Block::Block(Scope *enclosingScope)
: Scope(enclosingScope)
{
}
QList<Symbol *> Block::members() const
{
return _members.values();
}
void Block::add(Symbol *symbol)
{
_members.insert(symbol->name(), symbol);
}
const Type *Block::type() const
{
// ### assert?
return nullptr;
}
Symbol *Block::find(const QString &name) const
{
return _members.value(name);
}
Variable::Variable(Scope *scope)
: Symbol(scope)
, _type(nullptr)
, _qualifiers(0)
{
}
const Type *Variable::type() const
{
return _type;
}
void Variable::setType(const Type *type)
{
_type = type;
}
Namespace::Namespace()
{
}
Namespace::~Namespace()
{
qDeleteAll(_overloadSets);
}
QList<Symbol *> Namespace::members() const
{
return _members.values();
}
void Namespace::add(Symbol *symbol)
{
Symbol *&sym = _members[symbol->name()];
if (! sym) {
sym = symbol;
} else if (Function *fun = symbol->asFunction()) {
if (OverloadSet *o = sym->asOverloadSet()) {
o->addFunction(fun);
} else if (Function *firstFunction = sym->asFunction()) {
o = new OverloadSet(this);
_overloadSets.append(o);
o->setName(symbol->name());
o->addFunction(firstFunction);
o->addFunction(fun);
sym = o;
} else {
// ### warning? return false?
}
} else {
// ### warning? return false?
}
}
const Type *Namespace::type() const
{
return nullptr;
}
Symbol *Namespace::find(const QString &name) const
{
return _members.value(name);
}
QT_END_NAMESPACE
|