source: src/AST/Fwd.hpp @ 2a5e8a6

ADTarm-ehast-experimentalcleanup-dtorsenumforall-pointer-decayjacob/cs343-translationjenkins-sandboxnew-astnew-ast-unique-exprpthread-emulationqualifiedEnum
Last change on this file since 2a5e8a6 was e0115286, checked in by Thierry Delisle <tdelisle@…>, 5 years ago

Fix a cyclic dependency with ptr and nodes

  • Property mode set to 100644
File size: 17.3 KB
Line 
1//
2// Cforall Version 1.0.0 Copyright (C) 2015 University of Waterloo
3//
4// The contents of this file are covered under the licence agreement in the
5// file "LICENCE" distributed with Cforall.
6//
7// Fwd.hpp -- Forward declarations of AST Types.
8//
9// Author           : Andrew Beach
10// Created On       : Wed May  8 16:05:00 2019
11// Last Modified By : Andrew Beach
12// Last Modified On : Thr May  9 13:09:00 2019
13// Update Count     : 0
14//
15
16#pragma once
17
18#include "AST/Node.hpp"
19
20namespace ast {
21
22class ParseNode;
23
24class Decl;
25class DeclWithType;
26class ObjectDecl;
27class FunctionDecl;
28class AggregateDecl;
29class StructDecl;
30class UnionDecl;
31class EnumDecl;
32class TraitDecl;
33class NamedTypeDecl;
34class TypeDecl;
35class FtypeDecl;
36class DtypeDecl;
37class TypedefDecl;
38class AsmDecl;
39class StaticAssertDecl;
40
41class Stmt;
42class CompoundStmt;
43class ExprStmt;
44class AsmStmt;
45class DirectiveStmt;
46class IfStmt;
47class WhileStmt;
48class ForStmt;
49class SwitchStmt;
50class CaseStmt;
51class BranchStmt;
52class ReturnStmt;
53class ThrowStmt;
54class TryStmt;
55class CatchStmt;
56class FinallyStmt;
57class WaitForStmt;
58class WithStmt;
59class DeclStmt;
60class NullStmt;
61class ImplicitCtorDtorStmt;
62
63class Expr;
64class ApplicationExpr;
65class UntypedExpr;
66class NameExpr;
67class AddressExpr;
68class LabelAddressExpr;
69class CastExpr;
70class KeywordCastExpr;
71class VirtualCastExpr;
72class MemberExpr;
73class UntypedMemberExpr;
74class VariableExpr;
75class ConstantExpr;
76class SizeofExpr;
77class AlignofExpr;
78class UntypedOffsetofExpr;
79class OffsetofExpr;
80class OffsetPackExpr;
81class AttrExpr;
82class LogicalExpr;
83class ConditionalExpr;
84class CommaExpr;
85class TypeExpr;
86class AsmExpr;
87class ImplicitCopyCtorExpr;
88class ConstructorExpr;
89class CompoundLiteralExpr;
90class UntypedValofExpr;
91class RangeExpr;
92class UntypedTupleExpr;
93class TupleExpr;
94class TupleIndexExpr;
95class TupleAssignExpr;
96class StmtExpr;
97class UniqueExpr;
98class UntypedInitExpr;
99class InitExpr;
100class DeletedExpr;
101class DefaultArgExpr;
102class GenericExpr;
103
104class Type;
105class VoidType;
106class BasicType;
107class PointerType;
108class ArrayType;
109class ReferenceType;
110class QualifiedType;
111class FunctionType;
112class ReferenceToType;
113class StructInstType;
114class UnionInstType;
115class EnumInstType;
116class TraitInstType;
117class TypeInstType;
118class TupleType;
119class TypeofType;
120class AttrType;
121class VarArgsType;
122class ZeroType;
123class OneType;
124class GlobalScopeType;
125
126class Designation;
127class Init;
128class SingleInit;
129class ListInit;
130class ConstructorInit;
131
132class Constant;
133
134class Label;
135
136class Attribute;
137
138class TypeSubstitution;
139
140//=================================================================================================
141/// This disgusting and giant piece of boiler-plate is here to solve a cyclic dependency
142/// remove only if there is a better solution
143/// The problem is that ast::ptr< ... > uses increment/decrement which won't work well with
144/// forward declarations
145inline void decrement( const class Node * node, Node::ref_type ref ) { node->decrement(ref); }
146inline void increment( const class Node * node, Node::ref_type ref ) { node->increment(ref); }
147inline void increment( const class ParseNode *, Node::ref_type );
148inline void decrement( const class ParseNode *, Node::ref_type );
149inline void increment( const class Decl *, Node::ref_type );
150inline void decrement( const class Decl *, Node::ref_type );
151inline void increment( const class DeclWithType *, Node::ref_type );
152inline void decrement( const class DeclWithType *, Node::ref_type );
153inline void increment( const class ObjectDecl *, Node::ref_type );
154inline void decrement( const class ObjectDecl *, Node::ref_type );
155inline void increment( const class FunctionDecl *, Node::ref_type );
156inline void decrement( const class FunctionDecl *, Node::ref_type );
157inline void increment( const class AggregateDecl *, Node::ref_type );
158inline void decrement( const class AggregateDecl *, Node::ref_type );
159inline void increment( const class StructDecl *, Node::ref_type );
160inline void decrement( const class StructDecl *, Node::ref_type );
161inline void increment( const class UnionDecl *, Node::ref_type );
162inline void decrement( const class UnionDecl *, Node::ref_type );
163inline void increment( const class EnumDecl *, Node::ref_type );
164inline void decrement( const class EnumDecl *, Node::ref_type );
165inline void increment( const class TraitDecl *, Node::ref_type );
166inline void decrement( const class TraitDecl *, Node::ref_type );
167inline void increment( const class NamedTypeDecl *, Node::ref_type );
168inline void decrement( const class NamedTypeDecl *, Node::ref_type );
169inline void increment( const class TypeDecl *, Node::ref_type );
170inline void decrement( const class TypeDecl *, Node::ref_type );
171inline void increment( const class FtypeDecl *, Node::ref_type );
172inline void decrement( const class FtypeDecl *, Node::ref_type );
173inline void increment( const class DtypeDecl *, Node::ref_type );
174inline void decrement( const class DtypeDecl *, Node::ref_type );
175inline void increment( const class TypedefDecl *, Node::ref_type );
176inline void decrement( const class TypedefDecl *, Node::ref_type );
177inline void increment( const class AsmDecl *, Node::ref_type );
178inline void decrement( const class AsmDecl *, Node::ref_type );
179inline void increment( const class StaticAssertDecl *, Node::ref_type );
180inline void decrement( const class StaticAssertDecl *, Node::ref_type );
181inline void increment( const class Stmt *, Node::ref_type );
182inline void decrement( const class Stmt *, Node::ref_type );
183inline void increment( const class CompoundStmt *, Node::ref_type );
184inline void decrement( const class CompoundStmt *, Node::ref_type );
185inline void increment( const class ExprStmt *, Node::ref_type );
186inline void decrement( const class ExprStmt *, Node::ref_type );
187inline void increment( const class AsmStmt *, Node::ref_type );
188inline void decrement( const class AsmStmt *, Node::ref_type );
189inline void increment( const class DirectiveStmt *, Node::ref_type );
190inline void decrement( const class DirectiveStmt *, Node::ref_type );
191inline void increment( const class IfStmt *, Node::ref_type );
192inline void decrement( const class IfStmt *, Node::ref_type );
193inline void increment( const class WhileStmt *, Node::ref_type );
194inline void decrement( const class WhileStmt *, Node::ref_type );
195inline void increment( const class ForStmt *, Node::ref_type );
196inline void decrement( const class ForStmt *, Node::ref_type );
197inline void increment( const class SwitchStmt *, Node::ref_type );
198inline void decrement( const class SwitchStmt *, Node::ref_type );
199inline void increment( const class CaseStmt *, Node::ref_type );
200inline void decrement( const class CaseStmt *, Node::ref_type );
201inline void increment( const class BranchStmt *, Node::ref_type );
202inline void decrement( const class BranchStmt *, Node::ref_type );
203inline void increment( const class ReturnStmt *, Node::ref_type );
204inline void decrement( const class ReturnStmt *, Node::ref_type );
205inline void increment( const class ThrowStmt *, Node::ref_type );
206inline void decrement( const class ThrowStmt *, Node::ref_type );
207inline void increment( const class TryStmt *, Node::ref_type );
208inline void decrement( const class TryStmt *, Node::ref_type );
209inline void increment( const class CatchStmt *, Node::ref_type );
210inline void decrement( const class CatchStmt *, Node::ref_type );
211inline void increment( const class FinallyStmt *, Node::ref_type );
212inline void decrement( const class FinallyStmt *, Node::ref_type );
213inline void increment( const class WaitForStmt *, Node::ref_type );
214inline void decrement( const class WaitForStmt *, Node::ref_type );
215inline void increment( const class WithStmt *, Node::ref_type );
216inline void decrement( const class WithStmt *, Node::ref_type );
217inline void increment( const class DeclStmt *, Node::ref_type );
218inline void decrement( const class DeclStmt *, Node::ref_type );
219inline void increment( const class NullStmt *, Node::ref_type );
220inline void decrement( const class NullStmt *, Node::ref_type );
221inline void increment( const class ImplicitCtorDtorStmt *, Node::ref_type );
222inline void decrement( const class ImplicitCtorDtorStmt *, Node::ref_type );
223inline void increment( const class Expr *, Node::ref_type );
224inline void decrement( const class Expr *, Node::ref_type );
225inline void increment( const class ApplicationExpr *, Node::ref_type );
226inline void decrement( const class ApplicationExpr *, Node::ref_type );
227inline void increment( const class UntypedExpr *, Node::ref_type );
228inline void decrement( const class UntypedExpr *, Node::ref_type );
229inline void increment( const class NameExpr *, Node::ref_type );
230inline void decrement( const class NameExpr *, Node::ref_type );
231inline void increment( const class AddressExpr *, Node::ref_type );
232inline void decrement( const class AddressExpr *, Node::ref_type );
233inline void increment( const class LabelAddressExpr *, Node::ref_type );
234inline void decrement( const class LabelAddressExpr *, Node::ref_type );
235inline void increment( const class CastExpr *, Node::ref_type );
236inline void decrement( const class CastExpr *, Node::ref_type );
237inline void increment( const class KeywordCastExpr *, Node::ref_type );
238inline void decrement( const class KeywordCastExpr *, Node::ref_type );
239inline void increment( const class VirtualCastExpr *, Node::ref_type );
240inline void decrement( const class VirtualCastExpr *, Node::ref_type );
241inline void increment( const class MemberExpr *, Node::ref_type );
242inline void decrement( const class MemberExpr *, Node::ref_type );
243inline void increment( const class UntypedMemberExpr *, Node::ref_type );
244inline void decrement( const class UntypedMemberExpr *, Node::ref_type );
245inline void increment( const class VariableExpr *, Node::ref_type );
246inline void decrement( const class VariableExpr *, Node::ref_type );
247inline void increment( const class ConstantExpr *, Node::ref_type );
248inline void decrement( const class ConstantExpr *, Node::ref_type );
249inline void increment( const class SizeofExpr *, Node::ref_type );
250inline void decrement( const class SizeofExpr *, Node::ref_type );
251inline void increment( const class AlignofExpr *, Node::ref_type );
252inline void decrement( const class AlignofExpr *, Node::ref_type );
253inline void increment( const class UntypedOffsetofExpr *, Node::ref_type );
254inline void decrement( const class UntypedOffsetofExpr *, Node::ref_type );
255inline void increment( const class OffsetofExpr *, Node::ref_type );
256inline void decrement( const class OffsetofExpr *, Node::ref_type );
257inline void increment( const class OffsetPackExpr *, Node::ref_type );
258inline void decrement( const class OffsetPackExpr *, Node::ref_type );
259inline void increment( const class AttrExpr *, Node::ref_type );
260inline void decrement( const class AttrExpr *, Node::ref_type );
261inline void increment( const class LogicalExpr *, Node::ref_type );
262inline void decrement( const class LogicalExpr *, Node::ref_type );
263inline void increment( const class ConditionalExpr *, Node::ref_type );
264inline void decrement( const class ConditionalExpr *, Node::ref_type );
265inline void increment( const class CommaExpr *, Node::ref_type );
266inline void decrement( const class CommaExpr *, Node::ref_type );
267inline void increment( const class TypeExpr *, Node::ref_type );
268inline void decrement( const class TypeExpr *, Node::ref_type );
269inline void increment( const class AsmExpr *, Node::ref_type );
270inline void decrement( const class AsmExpr *, Node::ref_type );
271inline void increment( const class ImplicitCopyCtorExpr *, Node::ref_type );
272inline void decrement( const class ImplicitCopyCtorExpr *, Node::ref_type );
273inline void increment( const class ConstructorExpr *, Node::ref_type );
274inline void decrement( const class ConstructorExpr *, Node::ref_type );
275inline void increment( const class CompoundLiteralExpr *, Node::ref_type );
276inline void decrement( const class CompoundLiteralExpr *, Node::ref_type );
277inline void increment( const class UntypedValofExpr *, Node::ref_type );
278inline void decrement( const class UntypedValofExpr *, Node::ref_type );
279inline void increment( const class RangeExpr *, Node::ref_type );
280inline void decrement( const class RangeExpr *, Node::ref_type );
281inline void increment( const class UntypedTupleExpr *, Node::ref_type );
282inline void decrement( const class UntypedTupleExpr *, Node::ref_type );
283inline void increment( const class TupleExpr *, Node::ref_type );
284inline void decrement( const class TupleExpr *, Node::ref_type );
285inline void increment( const class TupleIndexExpr *, Node::ref_type );
286inline void decrement( const class TupleIndexExpr *, Node::ref_type );
287inline void increment( const class TupleAssignExpr *, Node::ref_type );
288inline void decrement( const class TupleAssignExpr *, Node::ref_type );
289inline void increment( const class StmtExpr *, Node::ref_type );
290inline void decrement( const class StmtExpr *, Node::ref_type );
291inline void increment( const class UniqueExpr *, Node::ref_type );
292inline void decrement( const class UniqueExpr *, Node::ref_type );
293inline void increment( const class UntypedInitExpr *, Node::ref_type );
294inline void decrement( const class UntypedInitExpr *, Node::ref_type );
295inline void increment( const class InitExpr *, Node::ref_type );
296inline void decrement( const class InitExpr *, Node::ref_type );
297inline void increment( const class DeletedExpr *, Node::ref_type );
298inline void decrement( const class DeletedExpr *, Node::ref_type );
299inline void increment( const class DefaultArgExpr *, Node::ref_type );
300inline void decrement( const class DefaultArgExpr *, Node::ref_type );
301inline void increment( const class GenericExpr *, Node::ref_type );
302inline void decrement( const class GenericExpr *, Node::ref_type );
303inline void increment( const class Type *, Node::ref_type );
304inline void decrement( const class Type *, Node::ref_type );
305inline void increment( const class VoidType *, Node::ref_type );
306inline void decrement( const class VoidType *, Node::ref_type );
307inline void increment( const class BasicType *, Node::ref_type );
308inline void decrement( const class BasicType *, Node::ref_type );
309inline void increment( const class PointerType *, Node::ref_type );
310inline void decrement( const class PointerType *, Node::ref_type );
311inline void increment( const class ArrayType *, Node::ref_type );
312inline void decrement( const class ArrayType *, Node::ref_type );
313inline void increment( const class ReferenceType *, Node::ref_type );
314inline void decrement( const class ReferenceType *, Node::ref_type );
315inline void increment( const class QualifiedType *, Node::ref_type );
316inline void decrement( const class QualifiedType *, Node::ref_type );
317inline void increment( const class FunctionType *, Node::ref_type );
318inline void decrement( const class FunctionType *, Node::ref_type );
319inline void increment( const class ReferenceToType *, Node::ref_type );
320inline void decrement( const class ReferenceToType *, Node::ref_type );
321inline void increment( const class StructInstType *, Node::ref_type );
322inline void decrement( const class StructInstType *, Node::ref_type );
323inline void increment( const class UnionInstType *, Node::ref_type );
324inline void decrement( const class UnionInstType *, Node::ref_type );
325inline void increment( const class EnumInstType *, Node::ref_type );
326inline void decrement( const class EnumInstType *, Node::ref_type );
327inline void increment( const class TraitInstType *, Node::ref_type );
328inline void decrement( const class TraitInstType *, Node::ref_type );
329inline void increment( const class TypeInstType *, Node::ref_type );
330inline void decrement( const class TypeInstType *, Node::ref_type );
331inline void increment( const class TupleType *, Node::ref_type );
332inline void decrement( const class TupleType *, Node::ref_type );
333inline void increment( const class TypeofType *, Node::ref_type );
334inline void decrement( const class TypeofType *, Node::ref_type );
335inline void increment( const class AttrType *, Node::ref_type );
336inline void decrement( const class AttrType *, Node::ref_type );
337inline void increment( const class VarArgsType *, Node::ref_type );
338inline void decrement( const class VarArgsType *, Node::ref_type );
339inline void increment( const class ZeroType *, Node::ref_type );
340inline void decrement( const class ZeroType *, Node::ref_type );
341inline void increment( const class OneType *, Node::ref_type );
342inline void decrement( const class OneType *, Node::ref_type );
343inline void increment( const class GlobalScopeType *, Node::ref_type );
344inline void decrement( const class GlobalScopeType *, Node::ref_type );
345inline void increment( const class Designation *, Node::ref_type );
346inline void decrement( const class Designation *, Node::ref_type );
347inline void increment( const class Init *, Node::ref_type );
348inline void decrement( const class Init *, Node::ref_type );
349inline void increment( const class SingleInit *, Node::ref_type );
350inline void decrement( const class SingleInit *, Node::ref_type );
351inline void increment( const class ListInit *, Node::ref_type );
352inline void decrement( const class ListInit *, Node::ref_type );
353inline void increment( const class ConstructorInit *, Node::ref_type );
354inline void decrement( const class ConstructorInit *, Node::ref_type );
355inline void increment( const class Constant *, Node::ref_type );
356inline void decrement( const class Constant *, Node::ref_type );
357inline void increment( const class Label *, Node::ref_type );
358inline void decrement( const class Label *, Node::ref_type );
359inline void increment( const class Attribute *, Node::ref_type );
360inline void decrement( const class Attribute *, Node::ref_type );
361inline void increment( const class TypeSubstitution *, Node::ref_type );
362inline void decrement( const class TypeSubstitution *, Node::ref_type );
363
364typedef unsigned int UniqueId;
365
366}
Note: See TracBrowser for help on using the repository browser.