diff options
Diffstat (limited to 'src/trans/codegen.hpp')
-rw-r--r-- | src/trans/codegen.hpp | 46 |
1 files changed, 46 insertions, 0 deletions
diff --git a/src/trans/codegen.hpp b/src/trans/codegen.hpp new file mode 100644 index 00000000..0aff9412 --- /dev/null +++ b/src/trans/codegen.hpp @@ -0,0 +1,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); + |