#ifndef LLVMLAYER_H
#define LLVMLAYER_H

#include "llvm/IR/Module.h"
#include "llvm/IR/Function.h"
#include "llvm/PassManager.h"
#include "llvm/IR/CallingConv.h"
#include "llvm/IR/Verifier.h"
#include "llvm/IR/IRPrintingPasses.h"
#include "llvm/IR/IRBuilder.h"
#include "llvm/Support/raw_ostream.h"
#include "llvm/IR/LLVMContext.h"

//#include "ast.h"

class LLVMLayer
{
public:
    LLVMLayer();

    llvm::Module* module;
    llvm::IRBuilder<> builder;

    void moveToGarbage(void* o);
    llvm::Value* compile() const;

private:
    std::vector<void*> __garbage;
};

#endif // LLVMLAYER_H
