it's working again :)
[ozulis.git] / src / ast / llvm-generator-visitor.hh
blobd9b74efe96f70c506582c406f374dc7e800b75c6
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 Exp & node);
32 virtual void visit(const VoidExp & node);
33 virtual void visit(const IdExp & node);
34 virtual void visit(const NumberExp & node);
35 virtual void visit(const CallExp & node);
37 virtual void visit(const AssignExp & node);
38 virtual void visit(const AddExp & node);
39 virtual void visit(const SubExp & node);
40 virtual void visit(const MulExp & node);
41 virtual void visit(const DivExp & node);
42 void visitUDivExp(const DivExp & node);
43 void visitSDivExp(const DivExp & node);
44 void visitFDivExp(const DivExp & node);
45 virtual void visit(const ModExp & node);
46 void visitUModExp(const ModExp & node);
47 void visitSModExp(const ModExp & node);
48 void visitFModExp(const ModExp & node);
50 virtual void visit(const AndExp & node);
51 virtual void visit(const OrExp & node);
52 virtual void visit(const XorExp & node);
54 virtual void visit(const ShlExp & node);
55 virtual void visit(const AShrExp & node);
56 virtual void visit(const LShrExp & node);
58 virtual void visit(const AndAndExp & node);
59 virtual void visit(const OrOrExp & node);
61 virtual void visit(const NotExp & node);
62 virtual void visit(const BangExp & node);
63 virtual void visit(const NegExp & node);
65 virtual void visit(const EqExp & node);
66 virtual void visit(const NeqExp & node);
67 virtual void visit(const LtExp & node);
68 virtual void visit(const LtEqExp & node);
69 virtual void visit(const GtExp & node);
70 virtual void visit(const GtEqExp & node);
72 virtual void visit(const Label & node);
73 virtual void visit(const Goto & node);
74 virtual void visit(const Return & node);
75 virtual void visit(const ConditionalBranch & node);
76 // virtual void visit(const If & node);
77 // virtual void visit(const While & node);
78 // virtual void visit(const DoWhile & node);
80 virtual void visit(const Type & type);
81 virtual void visit(const VoidType & type);
82 virtual void visit(const BoolType & type);
83 virtual void visit(const NumberType & type);
84 virtual void visit(const IntegerType & type);
85 virtual void visit(const FloatType & type);
86 virtual void visit(const DoubleType & type);
88 virtual void visit(const CastExp & node);
90 protected:
91 void castBoolToBool(const CastExp & node);
92 void castBoolToInteger(const CastExp & node);
93 void castBoolToFloat(const CastExp & node);
94 void castBoolToDouble(const CastExp & node);
95 void castIntegerToBool(const CastExp & node);
96 void castIntegerToInteger(const CastExp & node);
97 void castIntegerToFloat(const CastExp & node);
98 void castIntegerToDouble(const CastExp & node);
99 void castFloatToDouble(const CastExp & node);
100 void castFloatToBool(const CastExp & node);
101 void castDoubleToBool(const CastExp & node);
103 typedef std::pair<id_t, id_t> castTableKey_t;
104 typedef void
105 (LLVMGeneratorVisitor::*castTableValue_t)(const CastExp & node);
106 typedef std::map<const castTableKey_t, castTableValue_t> castTable_t;
108 castTable_t castTable_;
110 protected:
111 std::ostream & out_;
115 #endif /* !AST_LLVM_GENERATOR_VISITOR_HH */