use pointers like this: a[4] works :-)
[ozulis.git] / src / ast / type-checker-visitor.hh
blobd3ebaa96cf692f640ebc0c8aa70de42b52d4642d
1 #ifndef AST_TYPE_CHECKER_VISITOR_HH
2 # define AST_TYPE_CHECKER_VISITOR_HH
4 # include <utility>
5 # include <map>
7 # include <ast/browse-visitor.hh>
9 namespace ast
11 /// @defgroup Visitors
12 /**
13 * @brief Check that all expressions are correct (type)
14 * @ingroup Visitors
16 class TypeCheckerVisitor : public BrowseVisitor
18 public:
19 TypeCheckerVisitor();
20 virtual ~TypeCheckerVisitor();
22 virtual void visit(AssignExp & node);
24 virtual void visit(AddExp & node);
25 virtual void visit(SubExp & node);
26 virtual void visit(MulExp & node);
27 virtual void visit(DivExp & node);
28 virtual void visit(ModExp & node);
30 virtual void visit(AndExp & node);
31 virtual void visit(OrExp & node);
32 virtual void visit(XorExp & node);
34 virtual void visit(ShlExp & node);
35 virtual void visit(AShrExp & node);
36 virtual void visit(LShrExp & node);
38 virtual void visit(OrOrExp & node);
39 virtual void visit(AndAndExp & node);
41 virtual void visit(EqExp & node);
42 virtual void visit(NeqExp & node);
43 virtual void visit(LtExp & node);
44 virtual void visit(LtEqExp & node);
45 virtual void visit(GtExp & node);
46 virtual void visit(GtEqExp & node);
48 virtual void visit(NotExp & node);
49 virtual void visit(NegExp & node);
50 virtual void visit(BangExp & node);
52 virtual void visit(IdExp & node);
53 virtual void visit(DereferenceExp & node);
54 virtual void visit(DereferenceByIndexExp & node);
55 virtual void visit(CastExp & node);
56 virtual void visit(CallExp & node);
58 virtual void visit(Symbol & node);
60 virtual void visit(File & node);
61 virtual void visit(Function & node);
62 virtual void visit(Block & node);
64 virtual void visit(Return & node);
66 virtual void visit(ConditionalBranch & node);
68 inline void setScope(Scope * scope);
70 protected:
71 static void homogenizeTypes(BinaryExp & node);
73 public:
74 typedef BrowseVisitor super_t;
76 private:
77 Function * currentFunction_;
78 Scope * scope_;
82 # include "type-checker-visitor.hxx"
84 #endif /* !AST_TYPE_CHECKER_VISITOR_HH */