summaryrefslogtreecommitdiff
path: root/tiger-compiler/src/ast/fwd.hh
blob: 3d2a6113c87890aea8fed13fb85ab9f88a574cb4 (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
/**
 ** \file ast/fwd.hh
 ** \brief Forward declarations of all AST classes
 ** (needed by the visitors).
 */

#pragma once

#include <list>
#include <vector>
#include <misc/fwd.hh>
#include <misc/vector.hh>

namespace ast
{
  class ArrayExp;
  class ArrayTy;
  class AssertExp;
  class AssignExp;
  class Ast;
  class BreakExp;
  class CallExp;
  class CastExp;
  class ChunkList;
  class ClassTy;
  class Dec;
  class Escapable;
  class Exp;
  class Field;
  class FieldInit;
  class FieldVar;
  class ForExp;
  class FunctionDec;
  class IfExp;
  class IntExp;
  class LetExp;
  class MethodCallExp;
  class MethodDec;
  class NameTy;
  class NilExp;
  class ObjectExp;
  class OpExp;
  class RecordExp;
  class RecordTy;
  class SeqExp;
  class SimpleVar;
  class StringExp;
  class SubscriptVar;
  class Ty;
  class Typable;
  class TypeConstructor;
  class TypeDec;
  class Var;
  class VarDec;
  class WhileExp;

  // From visitor.hh
  template <template <typename> class Const> class GenVisitor;
  using ConstVisitor = GenVisitor<misc::constify_traits>;
  using Visitor = GenVisitor<misc::id_traits>;

  // Collections of nodes.
  using exps_type = std::vector<Exp*>;
  using fieldinits_type = std::vector<FieldInit*>;
  using fields_type = std::vector<Field*>;

  // From chunk-interface.hh.
  class ChunkInterface;

  // From chunk-list.hh.
  class ChunkList;

  // From chunk.hh.
  template <typename T> class Chunk;
  using FunctionChunk = Chunk<FunctionDec>;
  using MethodChunk = Chunk<MethodDec>;
  using TypeChunk = Chunk<TypeDec>;
  using VarChunk = Chunk<VarDec>;

} // namespace ast