1 #ifndef AST_LLVM_GENERATOR_VISITOR_HH
2 # define AST_LLVM_GENERATOR_VISITOR_HH
7 # include <ast/browse-visitor.hh>
11 /// @defgroup Visitors
13 * @brief Generates LLVM assembly
16 class LLVMGeneratorVisitor
: public ConstBrowseVisitor
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
);
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
;
88 (LLVMGeneratorVisitor::*castTableValue_t
)(const CastExp
& node
);
89 typedef std::map
<const castTableKey_t
, castTableValue_t
> castTable_t
;
91 castTable_t castTable_
;
98 #endif /* !AST_LLVM_GENERATOR_VISITOR_HH */