llvm-journey

LLVM Journey
git clone git://0xff.ir/g/llvm-journey.git
Log | Files | Refs | README | LICENSE

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