source: src/AST/Fwd.hpp @ 23f99e1

arm-ehcleanup-dtorsjacob/cs343-translationjenkins-sandboxnew-astnew-ast-unique-expr
Last change on this file since 23f99e1 was 23f99e1, checked in by Thierry Delisle <tdelisle@…>, 3 years ago

Finished implementing declarations

  • Property mode set to 100644
File size: 17.0 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 TypedefDecl;
36class AsmDecl;
37class StaticAssertDecl;
38
39class Stmt;
40class CompoundStmt;
41class ExprStmt;
42class AsmStmt;
43class DirectiveStmt;
44class IfStmt;
45class WhileStmt;
46class ForStmt;
47class SwitchStmt;
48class CaseStmt;
49class BranchStmt;
50class ReturnStmt;
51class ThrowStmt;
52class TryStmt;
53class CatchStmt;
54class FinallyStmt;
55class WaitForStmt;
56class WithStmt;
57class DeclStmt;
58class NullStmt;
59class ImplicitCtorDtorStmt;
60
61class Expr;
62class ApplicationExpr;
63class UntypedExpr;
64class NameExpr;
65class AddressExpr;
66class LabelAddressExpr;
67class CastExpr;
68class KeywordCastExpr;
69class VirtualCastExpr;
70class MemberExpr;
71class UntypedMemberExpr;
72class VariableExpr;
73class ConstantExpr;
74class SizeofExpr;
75class AlignofExpr;
76class UntypedOffsetofExpr;
77class OffsetofExpr;
78class OffsetPackExpr;
79class AttrExpr;
80class LogicalExpr;
81class ConditionalExpr;
82class CommaExpr;
83class TypeExpr;
84class AsmExpr;
85class ImplicitCopyCtorExpr;
86class ConstructorExpr;
87class CompoundLiteralExpr;
88class UntypedValofExpr;
89class RangeExpr;
90class UntypedTupleExpr;
91class TupleExpr;
92class TupleIndexExpr;
93class TupleAssignExpr;
94class StmtExpr;
95class UniqueExpr;
96class UntypedInitExpr;
97class InitExpr;
98class DeletedExpr;
99class DefaultArgExpr;
100class GenericExpr;
101
102class Type;
103class VoidType;
104class BasicType;
105class PointerType;
106class ArrayType;
107class ReferenceType;
108class QualifiedType;
109class FunctionType;
110class ReferenceToType;
111class StructInstType;
112class UnionInstType;
113class EnumInstType;
114class TraitInstType;
115class TypeInstType;
116class TupleType;
117class TypeofType;
118class AttrType;
119class VarArgsType;
120class ZeroType;
121class OneType;
122class GlobalScopeType;
123
124class Designation;
125class Init;
126class SingleInit;
127class ListInit;
128class ConstructorInit;
129
130class Constant;
131
132class Label;
133
134class Attribute;
135
136class TypeSubstitution;
137
138std::string toString( const Node * );
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 TypedefDecl *, Node::ref_type );
172inline void decrement( const class TypedefDecl *, Node::ref_type );
173inline void increment( const class AsmDecl *, Node::ref_type );
174inline void decrement( const class AsmDecl *, Node::ref_type );
175inline void increment( const class StaticAssertDecl *, Node::ref_type );
176inline void decrement( const class StaticAssertDecl *, Node::ref_type );
177inline void increment( const class Stmt *, Node::ref_type );
178inline void decrement( const class Stmt *, Node::ref_type );
179inline void increment( const class CompoundStmt *, Node::ref_type );
180inline void decrement( const class CompoundStmt *, Node::ref_type );
181inline void increment( const class ExprStmt *, Node::ref_type );
182inline void decrement( const class ExprStmt *, Node::ref_type );
183inline void increment( const class AsmStmt *, Node::ref_type );
184inline void decrement( const class AsmStmt *, Node::ref_type );
185inline void increment( const class DirectiveStmt *, Node::ref_type );
186inline void decrement( const class DirectiveStmt *, Node::ref_type );
187inline void increment( const class IfStmt *, Node::ref_type );
188inline void decrement( const class IfStmt *, Node::ref_type );
189inline void increment( const class WhileStmt *, Node::ref_type );
190inline void decrement( const class WhileStmt *, Node::ref_type );
191inline void increment( const class ForStmt *, Node::ref_type );
192inline void decrement( const class ForStmt *, Node::ref_type );
193inline void increment( const class SwitchStmt *, Node::ref_type );
194inline void decrement( const class SwitchStmt *, Node::ref_type );
195inline void increment( const class CaseStmt *, Node::ref_type );
196inline void decrement( const class CaseStmt *, Node::ref_type );
197inline void increment( const class BranchStmt *, Node::ref_type );
198inline void decrement( const class BranchStmt *, Node::ref_type );
199inline void increment( const class ReturnStmt *, Node::ref_type );
200inline void decrement( const class ReturnStmt *, Node::ref_type );
201inline void increment( const class ThrowStmt *, Node::ref_type );
202inline void decrement( const class ThrowStmt *, Node::ref_type );
203inline void increment( const class TryStmt *, Node::ref_type );
204inline void decrement( const class TryStmt *, Node::ref_type );
205inline void increment( const class CatchStmt *, Node::ref_type );
206inline void decrement( const class CatchStmt *, Node::ref_type );
207inline void increment( const class FinallyStmt *, Node::ref_type );
208inline void decrement( const class FinallyStmt *, Node::ref_type );
209inline void increment( const class WaitForStmt *, Node::ref_type );
210inline void decrement( const class WaitForStmt *, Node::ref_type );
211inline void increment( const class WithStmt *, Node::ref_type );
212inline void decrement( const class WithStmt *, Node::ref_type );
213inline void increment( const class DeclStmt *, Node::ref_type );
214inline void decrement( const class DeclStmt *, Node::ref_type );
215inline void increment( const class NullStmt *, Node::ref_type );
216inline void decrement( const class NullStmt *, Node::ref_type );
217inline void increment( const class ImplicitCtorDtorStmt *, Node::ref_type );
218inline void decrement( const class ImplicitCtorDtorStmt *, Node::ref_type );
219inline void increment( const class Expr *, Node::ref_type );
220inline void decrement( const class Expr *, Node::ref_type );
221inline void increment( const class ApplicationExpr *, Node::ref_type );
222inline void decrement( const class ApplicationExpr *, Node::ref_type );
223inline void increment( const class UntypedExpr *, Node::ref_type );
224inline void decrement( const class UntypedExpr *, Node::ref_type );
225inline void increment( const class NameExpr *, Node::ref_type );
226inline void decrement( const class NameExpr *, Node::ref_type );
227inline void increment( const class AddressExpr *, Node::ref_type );
228inline void decrement( const class AddressExpr *, Node::ref_type );
229inline void increment( const class LabelAddressExpr *, Node::ref_type );
230inline void decrement( const class LabelAddressExpr *, Node::ref_type );
231inline void increment( const class CastExpr *, Node::ref_type );
232inline void decrement( const class CastExpr *, Node::ref_type );
233inline void increment( const class KeywordCastExpr *, Node::ref_type );
234inline void decrement( const class KeywordCastExpr *, Node::ref_type );
235inline void increment( const class VirtualCastExpr *, Node::ref_type );
236inline void decrement( const class VirtualCastExpr *, Node::ref_type );
237inline void increment( const class MemberExpr *, Node::ref_type );
238inline void decrement( const class MemberExpr *, Node::ref_type );
239inline void increment( const class UntypedMemberExpr *, Node::ref_type );
240inline void decrement( const class UntypedMemberExpr *, Node::ref_type );
241inline void increment( const class VariableExpr *, Node::ref_type );
242inline void decrement( const class VariableExpr *, Node::ref_type );
243inline void increment( const class ConstantExpr *, Node::ref_type );
244inline void decrement( const class ConstantExpr *, Node::ref_type );
245inline void increment( const class SizeofExpr *, Node::ref_type );
246inline void decrement( const class SizeofExpr *, Node::ref_type );
247inline void increment( const class AlignofExpr *, Node::ref_type );
248inline void decrement( const class AlignofExpr *, Node::ref_type );
249inline void increment( const class UntypedOffsetofExpr *, Node::ref_type );
250inline void decrement( const class UntypedOffsetofExpr *, Node::ref_type );
251inline void increment( const class OffsetofExpr *, Node::ref_type );
252inline void decrement( const class OffsetofExpr *, Node::ref_type );
253inline void increment( const class OffsetPackExpr *, Node::ref_type );
254inline void decrement( const class OffsetPackExpr *, Node::ref_type );
255inline void increment( const class AttrExpr *, Node::ref_type );
256inline void decrement( const class AttrExpr *, Node::ref_type );
257inline void increment( const class LogicalExpr *, Node::ref_type );
258inline void decrement( const class LogicalExpr *, Node::ref_type );
259inline void increment( const class ConditionalExpr *, Node::ref_type );
260inline void decrement( const class ConditionalExpr *, Node::ref_type );
261inline void increment( const class CommaExpr *, Node::ref_type );
262inline void decrement( const class CommaExpr *, Node::ref_type );
263inline void increment( const class TypeExpr *, Node::ref_type );
264inline void decrement( const class TypeExpr *, Node::ref_type );
265inline void increment( const class AsmExpr *, Node::ref_type );
266inline void decrement( const class AsmExpr *, Node::ref_type );
267inline void increment( const class ImplicitCopyCtorExpr *, Node::ref_type );
268inline void decrement( const class ImplicitCopyCtorExpr *, Node::ref_type );
269inline void increment( const class ConstructorExpr *, Node::ref_type );
270inline void decrement( const class ConstructorExpr *, Node::ref_type );
271inline void increment( const class CompoundLiteralExpr *, Node::ref_type );
272inline void decrement( const class CompoundLiteralExpr *, Node::ref_type );
273inline void increment( const class UntypedValofExpr *, Node::ref_type );
274inline void decrement( const class UntypedValofExpr *, Node::ref_type );
275inline void increment( const class RangeExpr *, Node::ref_type );
276inline void decrement( const class RangeExpr *, Node::ref_type );
277inline void increment( const class UntypedTupleExpr *, Node::ref_type );
278inline void decrement( const class UntypedTupleExpr *, Node::ref_type );
279inline void increment( const class TupleExpr *, Node::ref_type );
280inline void decrement( const class TupleExpr *, Node::ref_type );
281inline void increment( const class TupleIndexExpr *, Node::ref_type );
282inline void decrement( const class TupleIndexExpr *, Node::ref_type );
283inline void increment( const class TupleAssignExpr *, Node::ref_type );
284inline void decrement( const class TupleAssignExpr *, Node::ref_type );
285inline void increment( const class StmtExpr *, Node::ref_type );
286inline void decrement( const class StmtExpr *, Node::ref_type );
287inline void increment( const class UniqueExpr *, Node::ref_type );
288inline void decrement( const class UniqueExpr *, Node::ref_type );
289inline void increment( const class UntypedInitExpr *, Node::ref_type );
290inline void decrement( const class UntypedInitExpr *, Node::ref_type );
291inline void increment( const class InitExpr *, Node::ref_type );
292inline void decrement( const class InitExpr *, Node::ref_type );
293inline void increment( const class DeletedExpr *, Node::ref_type );
294inline void decrement( const class DeletedExpr *, Node::ref_type );
295inline void increment( const class DefaultArgExpr *, Node::ref_type );
296inline void decrement( const class DefaultArgExpr *, Node::ref_type );
297inline void increment( const class GenericExpr *, Node::ref_type );
298inline void decrement( const class GenericExpr *, Node::ref_type );
299inline void increment( const class Type *, Node::ref_type );
300inline void decrement( const class Type *, Node::ref_type );
301inline void increment( const class VoidType *, Node::ref_type );
302inline void decrement( const class VoidType *, Node::ref_type );
303inline void increment( const class BasicType *, Node::ref_type );
304inline void decrement( const class BasicType *, Node::ref_type );
305inline void increment( const class PointerType *, Node::ref_type );
306inline void decrement( const class PointerType *, Node::ref_type );
307inline void increment( const class ArrayType *, Node::ref_type );
308inline void decrement( const class ArrayType *, Node::ref_type );
309inline void increment( const class ReferenceType *, Node::ref_type );
310inline void decrement( const class ReferenceType *, Node::ref_type );
311inline void increment( const class QualifiedType *, Node::ref_type );
312inline void decrement( const class QualifiedType *, Node::ref_type );
313inline void increment( const class FunctionType *, Node::ref_type );
314inline void decrement( const class FunctionType *, Node::ref_type );
315inline void increment( const class ReferenceToType *, Node::ref_type );
316inline void decrement( const class ReferenceToType *, Node::ref_type );
317inline void increment( const class StructInstType *, Node::ref_type );
318inline void decrement( const class StructInstType *, Node::ref_type );
319inline void increment( const class UnionInstType *, Node::ref_type );
320inline void decrement( const class UnionInstType *, Node::ref_type );
321inline void increment( const class EnumInstType *, Node::ref_type );
322inline void decrement( const class EnumInstType *, Node::ref_type );
323inline void increment( const class TraitInstType *, Node::ref_type );
324inline void decrement( const class TraitInstType *, Node::ref_type );
325inline void increment( const class TypeInstType *, Node::ref_type );
326inline void decrement( const class TypeInstType *, Node::ref_type );
327inline void increment( const class TupleType *, Node::ref_type );
328inline void decrement( const class TupleType *, Node::ref_type );
329inline void increment( const class TypeofType *, Node::ref_type );
330inline void decrement( const class TypeofType *, Node::ref_type );
331inline void increment( const class AttrType *, Node::ref_type );
332inline void decrement( const class AttrType *, Node::ref_type );
333inline void increment( const class VarArgsType *, Node::ref_type );
334inline void decrement( const class VarArgsType *, Node::ref_type );
335inline void increment( const class ZeroType *, Node::ref_type );
336inline void decrement( const class ZeroType *, Node::ref_type );
337inline void increment( const class OneType *, Node::ref_type );
338inline void decrement( const class OneType *, Node::ref_type );
339inline void increment( const class GlobalScopeType *, Node::ref_type );
340inline void decrement( const class GlobalScopeType *, Node::ref_type );
341inline void increment( const class Designation *, Node::ref_type );
342inline void decrement( const class Designation *, Node::ref_type );
343inline void increment( const class Init *, Node::ref_type );
344inline void decrement( const class Init *, Node::ref_type );
345inline void increment( const class SingleInit *, Node::ref_type );
346inline void decrement( const class SingleInit *, Node::ref_type );
347inline void increment( const class ListInit *, Node::ref_type );
348inline void decrement( const class ListInit *, Node::ref_type );
349inline void increment( const class ConstructorInit *, Node::ref_type );
350inline void decrement( const class ConstructorInit *, Node::ref_type );
351inline void increment( const class Constant *, Node::ref_type );
352inline void decrement( const class Constant *, Node::ref_type );
353inline void increment( const class Attribute *, Node::ref_type );
354inline void decrement( const class Attribute *, Node::ref_type );
355inline void increment( const class TypeSubstitution *, Node::ref_type );
356inline void decrement( const class TypeSubstitution *, Node::ref_type );
357
358typedef unsigned int UniqueId;
359
360}
Note: See TracBrowser for help on using the repository browser.