pass all expr tests
[ozulis.git] / src / ast / llvm-generator-visitor.hh
blobb75b8f08983312486633a7272a11b6eec4d7b1b5
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 EqExp & node);
57 virtual void visit(const NeqExp & node);
58 virtual void visit(const LtExp & node);
59 virtual void visit(const LtEqExp & node);
60 virtual void visit(const GtExp & node);
61 virtual void visit(const GtEqExp & node);
63 virtual void visit(const Label & node);
64 virtual void visit(const Goto & node);
65 virtual void visit(const If & node);
67 virtual void visit(const Type & type);
68 virtual void visit(const BoolType & type);
69 virtual void visit(const NumberType & type);
70 virtual void visit(const IntegerType & type);
71 virtual void visit(const FloatType & type);
72 virtual void visit(const DoubleType & type);
74 virtual void visit(const CastExp & node);
76 protected:
77 void castBoolToBool(const CastExp & node);
78 void castBoolToInteger(const CastExp & node);
79 void castBoolToFloat(const CastExp & node);
80 void castBoolToDouble(const CastExp & node);
81 void castIntegerToInteger(const CastExp & node);
82 void castIntegerToFloat(const CastExp & node);
83 void castIntegerToDouble(const CastExp & node);
84 void castFloatToDouble(const CastExp & node);
86 typedef std::pair<id_t, id_t> castTableKey_t;
87 typedef void
88 (LLVMGeneratorVisitor::*castTableValue_t)(const CastExp & node);
89 typedef std::map<const castTableKey_t, castTableValue_t> castTable_t;
91 castTable_t castTable_;
93 protected:
94 std::ostream & out_;
98 #endif /* !AST_LLVM_GENERATOR_VISITOR_HH */