summaryrefslogtreecommitdiff
path: root/src/trans/codegen_c.cpp
blob: e0ac3b3038b08d3c0633681a5b77c75ddf56afd1 (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
47
48
49
50
51
/*
 * MRustC - Rust Compiler
 * - By John Hodge (Mutabah/thePowersGang)
 *
 * trans/codegen_c.cpp
 * - Code generation emitting C code
 */
#include "codegen.hpp"
#include "mangling.hpp"
#include <fstream>

namespace {
    class CodeGenerator_C:
        public CodeGenerator
    {
        ::std::ofstream m_of;
    public:
        CodeGenerator_C(const ::std::string& outfile):
            m_of(outfile)
        {
        }
        
        ~CodeGenerator_C() {}

        void finalise() override
        {
        }
        
        void emit_struct(const ::HIR::GenericPath& p, const ::HIR::Struct& item) override
        {
            m_of << "struct s_" << Trans_Mangle(p) << " {\n";
            m_of << "}\n";
        }
        //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);
    private:
        
    };
}

::std::unique_ptr<CodeGenerator> Trans_Codegen_GetGeneratorC(const ::std::string& outfile)
{
    return ::std::unique_ptr<CodeGenerator>(new CodeGenerator_C(outfile));
}