kaleidoscope_codegen.hpp (874B)
1 2 #pragma once 3 4 #include <string> 5 6 namespace llvm { 7 class Value; 8 class Function; 9 } 10 11 namespace kal { 12 13 struct Number; 14 struct Variable; 15 struct BinaryOp; 16 struct Call; 17 struct Prototype; 18 struct Function; 19 20 llvm::Value* 21 codegen(const Number&); 22 llvm::Value* 23 codegen(const Variable&); 24 llvm::Value* 25 codegen(const BinaryOp&); 26 llvm::Value* 27 codegen(const Call&); 28 llvm::Function* 29 codegen(const Prototype&); 30 llvm::Function* 31 codegen(const Function&, bool optimize = false); 32 33 class ASTNode; 34 35 // pre-condition: kal::node_type(n) != kal::NodeType::None 36 // pre-condition: kal::node_type(n) != kal::NodeType::Prototype 37 // pre-condition: kal::node_type(n) != kal::NodeType::Function 38 llvm::Value* 39 codegen(const ASTNode& n); 40 41 llvm::Function* 42 mkfunc(const std::string& name, 43 kal::ASTNode* f, 44 kal::ASTNode* l, 45 bool optimize = false); 46 47 void 48 codegen_reset(void); 49 50 } // namespace kal