1 #ifndef AST_TYPE_CHECKER_VISITOR_HH
2 # define AST_TYPE_CHECKER_VISITOR_HH
7 # include <ast/browse-visitor.hh>
11 /// @defgroup Visitors
13 * @brief Check that all expressions are correct (type)
16 class TypeCheckerVisitor
: public BrowseVisitor
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
);
71 static void homogenizeTypes(BinaryExp
& node
);
74 typedef BrowseVisitor super_t
;
77 Function
* currentFunction_
;
82 # include "type-checker-visitor.hxx"
84 #endif /* !AST_TYPE_CHECKER_VISITOR_HH */