summaryrefslogtreecommitdiff
path: root/src/trans/codegen.hpp
blob: 0aff9412fc8b3ff23b491fc6c6f12776d159deda (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
/*
 * MRustC - Rust Compiler
 * - By John Hodge (Mutabah/thePowersGang)
 *
 * trans/codegen.hpp
 * - Common class and methods for codegen
 */
#pragma once

#include "trans_list.hpp"

namespace HIR {
    class TypeRef;
    class Path;
    class GenericPath;
    
    class Function;
    class Static;
}
namespace MIR {
    class FunctionPointer;
}


class CodeGenerator
{
public:
    virtual ~CodeGenerator() {}
    virtual void finalise() {}
    
    virtual void emit_tuple(const ::HIR::GenericPath& p, const ::std::vector<::HIR::TypeRef>& ) {}
    virtual void emit_struct(const ::HIR::GenericPath& p, const ::HIR::Struct& item) {}
    virtual void emit_union(const ::HIR::GenericPath& p, const ::HIR::Union& item) {}
    virtual void emit_enum(const ::HIR::GenericPath& p, const ::HIR::Enum& item) {}
    
    virtual void emit_static_ext(const ::HIR::Path& p) {}
    virtual void emit_static_local(const ::HIR::Path& p, const ::HIR::Static& item, const Trans_Params& params) {}
    
    virtual void emit_function_ext(const ::HIR::Path& p, const ::HIR::Function& item, const Trans_Params& params) {}
    virtual void emit_function_proto(const ::HIR::Path& p, const ::HIR::Function& item, const Trans_Params& params) {}
    virtual void emit_function_code(const ::HIR::Path& p, const ::HIR::Function& item, const Trans_Params& params, const ::MIR::FunctionPointer& code) {}
};


extern ::std::unique_ptr<CodeGenerator> Trans_Codegen_GetGeneratorC(const ::std::string& outfile);