1 #ifndef AST_LLVM_ASM_GENERATOR_VISITOR_HH
2 # define AST_LLVM_ASM_GENERATOR_VISITOR_HH
7 # include <ast/browse-visitor.hh>
11 /// @defgroup Visitors
13 * @brief Generates LLVM assembly
16 class LLVMAsmGeneratorVisitor
: public ConstBrowseVisitor
19 typedef ConstBrowseVisitor super_t
;
21 LLVMAsmGeneratorVisitor(std::ostream
& out
);
22 virtual ~LLVMAsmGeneratorVisitor();
24 virtual void visit(const FunctionDecl
& node
);
25 virtual void visit(const Function
& node
);
27 virtual void visit(const VarDecl
& node
);
29 virtual void visit(const LoadVar
& node
);
30 virtual void visit(const StoreVar
& node
);
32 virtual void visit(const Exp
& node
);
33 virtual void visit(const VoidExp
& node
);
34 virtual void visit(const IdExp
& node
);
35 virtual void visit(const NumberExp
& 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
& node
);
82 virtual void visit(const VoidType
& node
);
83 virtual void visit(const BoolType
& node
);
84 virtual void visit(const NumberType
& node
);
85 virtual void visit(const IntegerType
& node
);
86 virtual void visit(const FloatType
& node
);
87 virtual void visit(const DoubleType
& node
);
88 virtual void visit(const PointerType
& node
);
89 virtual void visit(const ReferenceType
& node
);
91 virtual void visit(const CastExp
& node
);
94 void castBoolToBool(const CastExp
& node
);
95 void castBoolToInteger(const CastExp
& node
);
96 void castBoolToFloat(const CastExp
& node
);
97 void castBoolToDouble(const CastExp
& node
);
98 void castIntegerToBool(const CastExp
& node
);
99 void castIntegerToInteger(const CastExp
& node
);
100 void castIntegerToFloat(const CastExp
& node
);
101 void castIntegerToDouble(const CastExp
& node
);
102 void castFloatToDouble(const CastExp
& node
);
103 void castFloatToBool(const CastExp
& node
);
104 void castDoubleToBool(const CastExp
& node
);
106 void castIntegerToPointer(const CastExp
& node
);
107 void castPointerToInteger(const CastExp
& node
);
109 void writeFunctionHeader(const FunctionDecl
& node
);
111 typedef std::pair
<id_t
, id_t
> castTableKey_t
;
113 (LLVMAsmGeneratorVisitor::*castTableValue_t
)(const CastExp
& node
);
114 typedef std::map
<const castTableKey_t
, castTableValue_t
> castTable_t
;
116 castTable_t castTable_
;
123 #endif /* !AST_LLVM_ASM_GENERATOR_VISITOR_HH */