From 8370af0d364872031b3523386137c9824a4811e6 Mon Sep 17 00:00:00 2001 From: Jean Privat Date: Fri, 29 May 2015 10:21:32 -0400 Subject: [PATCH] abstract_compiler: attach compiler and toolchain The role of the Compiler is to know how to compile Nit programs in C. The role of the Toolchain is to know where to save C file and how to compile them Signed-off-by: Jean Privat --- src/compiler/abstract_compiler.nit | 12 +++++++----- src/compiler/compiler_ffi/light.nit | 4 ++-- 2 files changed, 9 insertions(+), 7 deletions(-) diff --git a/src/compiler/abstract_compiler.nit b/src/compiler/abstract_compiler.nit index 48a19a8..904e73b 100644 --- a/src/compiler/abstract_compiler.nit +++ b/src/compiler/abstract_compiler.nit @@ -115,15 +115,12 @@ redef class ToolContext end redef class ModelBuilder - # The compilation directory - var compile_dir: String - # Simple indirection to `Toolchain::write_and_make` protected fun write_and_make(compiler: AbstractCompiler) do var platform = compiler.target_platform var toolchain = platform.toolchain(toolcontext, compiler) - compile_dir = toolchain.compile_dir + compiler.toolchain = toolchain toolchain.write_and_make end end @@ -496,6 +493,11 @@ abstract class AbstractCompiler # The modelbuilder used to know the model and the AST var modelbuilder: ModelBuilder is protected writable + # The associated toolchain + # + # Set by `modelbuilder.write_and_make` and permit sub-routines to access the current toolchain if required. + var toolchain: Toolchain is noinit + # Is hardening asked? (see --hardening) fun hardening: Bool do return self.modelbuilder.toolcontext.opt_hardening.value @@ -559,7 +561,7 @@ abstract class AbstractCompiler # Binds the generated C function names to Nit function names fun build_c_to_nit_bindings do - var compile_dir = modelbuilder.compile_dir + var compile_dir = toolchain.compile_dir var stream = new FileWriter.open("{compile_dir}/c_functions_hash.c") stream.write("#include \n") diff --git a/src/compiler/compiler_ffi/light.nit b/src/compiler/compiler_ffi/light.nit index dbe819a..01579b0 100644 --- a/src/compiler/compiler_ffi/light.nit +++ b/src/compiler/compiler_ffi/light.nit @@ -37,7 +37,7 @@ redef class MModule var n = nmodule(v) if n == null then return n.ensure_compile_ffi_wrapper - finalize_ffi_wrapper(v.compiler.modelbuilder.compile_dir, v.compiler.mainmodule) + finalize_ffi_wrapper(v.compiler.toolchain.compile_dir, v.compiler.mainmodule) for file in ffi_files do v.compiler.extern_bodies.add(file) ensure_compile_nitni_base(v) @@ -49,7 +49,7 @@ extern void nitni_global_ref_decr(void*); """ var cflags = self.cflags[""].join(" ") - nitni_ccu.write_as_nitni(self, v.compiler.modelbuilder.compile_dir) + nitni_ccu.write_as_nitni(self, v.compiler.toolchain.compile_dir) for file in nitni_ccu.files do var f = new ExternCFile(file, cflags) -- 1.7.9.5