added new expr to test
[ozulis.git] / src / ast / llvm-generator-visitor.hh
blobd0e801ab3cf683e07dbbf8afc630f9ef451233a9
1 #ifndef AST_LLVM_GENERATOR_VISITOR_HH
2 # define AST_LLVM_GENERATOR_VISITOR_HH
4 # include <ostream>
5 # include <map>
7 # include <ast/browse-visitor.hh>
9 namespace ast
11 /// @defgroup Visitors
12 /**
13 * @brief Generates LLVM assembly
14 * @ingroup Visitors
16 class LLVMGeneratorVisitor : public ConstBrowseVisitor
18 public:
19 typedef ConstBrowseVisitor super_t;
21 LLVMGeneratorVisitor(std::ostream & out);
22 virtual ~LLVMGeneratorVisitor();
24 virtual void visit(const Function & node);
26 virtual void visit(const VarDecl & node);
28 virtual void visit(const LoadVar & node);
29 virtual void visit(const StoreVar & node);
31 virtual void visit(const IdExp & node);
32 virtual void visit(const NumberExp & node);
33 virtual void visit(const TmpResultExp & node);
35 virtual void visit(const AssignExp & node);
36 virtual void visit(const AddExp & node);
37 virtual void visit(const SubExp & node);
38 virtual void visit(const MulExp & node);
39 virtual void visit(const DivExp & node);
40 void visitUDivExp(const DivExp & node);
41 void visitSDivExp(const DivExp & node);
42 void visitFDivExp(const DivExp & node);
43 virtual void visit(const ModExp & node);
44 void visitUModExp(const ModExp & node);
45 void visitSModExp(const ModExp & node);
46 void visitFModExp(const ModExp & node);
48 virtual void visit(const AndExp & node);
49 virtual void visit(const OrExp & node);
50 virtual void visit(const XorExp & node);
52 virtual void visit(const ShlExp & node);
53 virtual void visit(const AShrExp & node);
54 virtual void visit(const LShrExp & node);
56 virtual void visit(const AndAndExp & node);
57 virtual void visit(const OrOrExp & node);
59 virtual void visit(const EqExp & node);
60 virtual void visit(const NeqExp & node);
61 virtual void visit(const LtExp & node);
62 virtual void visit(const LtEqExp & node);
63 virtual void visit(const GtExp & node);
64 virtual void visit(const GtEqExp & node);
66 virtual void visit(const Label & node);
67 virtual void visit(const Goto & node);
68 virtual void visit(const If & node);
70 virtual void visit(const Type & type);
71 virtual void visit(const BoolType & type);
72 virtual void visit(const NumberType & type);
73 virtual void visit(const IntegerType & type);
74 virtual void visit(const FloatType & type);
75 virtual void visit(const DoubleType & type);
77 virtual void visit(const CastExp & node);
79 protected:
80 void castBoolToBool(const CastExp & node);
81 void castBoolToInteger(const CastExp & node);
82 void castBoolToFloat(const CastExp & node);
83 void castBoolToDouble(const CastExp & node);
84 void castIntegerToBool(const CastExp & node);
85 void castIntegerToInteger(const CastExp & node);
86 void castIntegerToFloat(const CastExp & node);
87 void castIntegerToDouble(const CastExp & node);
88 void castFloatToDouble(const CastExp & node);
89 void castFloatToBool(const CastExp & node);
90 void castDoubleToBool(const CastExp & node);
92 typedef std::pair<id_t, id_t> castTableKey_t;
93 typedef void
94 (LLVMGeneratorVisitor::*castTableValue_t)(const CastExp & node);
95 typedef std::map<const castTableKey_t, castTableValue_t> castTable_t;
97 castTable_t castTable_;
99 protected:
100 std::ostream & out_;
104 #endif /* !AST_LLVM_GENERATOR_VISITOR_HH */