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 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
);
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
;
105 (LLVMGeneratorVisitor::*castTableValue_t
)(const CastExp
& node
);
106 typedef std::map
<const castTableKey_t
, castTableValue_t
> castTable_t
;
108 castTable_t castTable_
;
115 #endif /* !AST_LLVM_GENERATOR_VISITOR_HH */