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 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
);
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
;
94 (LLVMGeneratorVisitor::*castTableValue_t
)(const CastExp
& node
);
95 typedef std::map
<const castTableKey_t
, castTableValue_t
> castTable_t
;
97 castTable_t castTable_
;
104 #endif /* !AST_LLVM_GENERATOR_VISITOR_HH */