basic function calling
[ozulis.git] / src / ast / llvm-generator-visitor.hh
blobec54d5af238a0d5732b6e1f210dfc1a0f77e7d03
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 TmpResultExp & node);
36 virtual void visit(const CallExp & node);
38 virtual void visit(const AssignExp & node);
39 virtual void visit(const AddExp & node);
40 virtual void visit(const SubExp & node);
41 virtual void visit(const MulExp & node);
42 virtual void visit(const DivExp & node);
43 void visitUDivExp(const DivExp & node);
44 void visitSDivExp(const DivExp & node);
45 void visitFDivExp(const DivExp & node);
46 virtual void visit(const ModExp & node);
47 void visitUModExp(const ModExp & node);
48 void visitSModExp(const ModExp & node);
49 void visitFModExp(const ModExp & node);
51 virtual void visit(const AndExp & node);
52 virtual void visit(const OrExp & node);
53 virtual void visit(const XorExp & node);
55 virtual void visit(const ShlExp & node);
56 virtual void visit(const AShrExp & node);
57 virtual void visit(const LShrExp & node);
59 virtual void visit(const AndAndExp & node);
60 virtual void visit(const OrOrExp & node);
62 virtual void visit(const NotExp & node);
63 virtual void visit(const BangExp & node);
64 virtual void visit(const NegExp & node);
66 virtual void visit(const EqExp & node);
67 virtual void visit(const NeqExp & node);
68 virtual void visit(const LtExp & node);
69 virtual void visit(const LtEqExp & node);
70 virtual void visit(const GtExp & node);
71 virtual void visit(const GtEqExp & node);
73 virtual void visit(const Label & node);
74 virtual void visit(const Goto & node);
75 virtual void visit(const Return & node);
76 virtual void visit(const ConditionalBranch & node);
77 // virtual void visit(const If & node);
78 // virtual void visit(const While & node);
79 // virtual void visit(const DoWhile & node);
81 virtual void visit(const Type & type);
82 virtual void visit(const VoidType & type);
83 virtual void visit(const BoolType & type);
84 virtual void visit(const NumberType & type);
85 virtual void visit(const IntegerType & type);
86 virtual void visit(const FloatType & type);
87 virtual void visit(const DoubleType & type);
89 virtual void visit(const CastExp & node);
91 protected:
92 void castBoolToBool(const CastExp & node);
93 void castBoolToInteger(const CastExp & node);
94 void castBoolToFloat(const CastExp & node);
95 void castBoolToDouble(const CastExp & node);
96 void castIntegerToBool(const CastExp & node);
97 void castIntegerToInteger(const CastExp & node);
98 void castIntegerToFloat(const CastExp & node);
99 void castIntegerToDouble(const CastExp & node);
100 void castFloatToDouble(const CastExp & node);
101 void castFloatToBool(const CastExp & node);
102 void castDoubleToBool(const CastExp & node);
104 typedef std::pair<id_t, id_t> castTableKey_t;
105 typedef void
106 (LLVMGeneratorVisitor::*castTableValue_t)(const CastExp & node);
107 typedef std::map<const castTableKey_t, castTableValue_t> castTable_t;
109 castTable_t castTable_;
111 protected:
112 std::ostream & out_;
116 #endif /* !AST_LLVM_GENERATOR_VISITOR_HH */