From b3a9b5a30080d220d9edfb9b8c922882775135a1 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Alexis=20Laferri=C3=A8re?= Date: Sat, 17 Oct 2015 11:16:52 -0400 Subject: [PATCH] src/ffi: protect friendly macro names in type check and casts for global comp MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit Signed-off-by: Alexis Laferrière --- src/compiler/compiler_ffi/compiler_ffi.nit | 20 +++++++++++++++----- 1 file changed, 15 insertions(+), 5 deletions(-) diff --git a/src/compiler/compiler_ffi/compiler_ffi.nit b/src/compiler/compiler_ffi/compiler_ffi.nit index 2170a67..7a536b1 100644 --- a/src/compiler/compiler_ffi/compiler_ffi.nit +++ b/src/compiler/compiler_ffi/compiler_ffi.nit @@ -266,7 +266,9 @@ redef class MExplicitCast ccu.header_decl.add("extern {full_friendly_csignature};\n") # In nitni files, #define friendly as extern - ccu.header_decl.add("#define {check_cname} {v.compiler.mainmodule.name}___{check_cname}\n") + ccu.header_decl.add "#ifndef {check_cname}\n" + ccu.header_decl.add "#define {check_cname} {v.compiler.mainmodule.c_name}___{check_cname}\n" + ccu.header_decl.add "#endif\n" if compile_implementation_too then # Internally, implement internal function @@ -289,7 +291,9 @@ redef class MExplicitCast # special checks if from == to.as_nullable then # format A_is_null - ccu.header_decl.add("#define {from.mangled_cname}_is_null !{from.mangled_cname}_is_a_{to.mangled_cname}\n") + ccu.header_decl.add "#ifndef {from.mangled_cname}_is_null\n" + ccu.header_decl.add "#define {from.mangled_cname}_is_null !{from.mangled_cname}_is_a_{to.mangled_cname}\n" + ccu.header_decl.add "#endif\n" end # @@ -301,7 +305,9 @@ redef class MExplicitCast ccu.header_decl.add("extern {full_friendly_csignature};\n") # In nitni files, #define friendly as extern - ccu.header_decl.add("#define {cast_cname} {v.compiler.mainmodule.name}___{cast_cname}\n") + ccu.header_decl.add "#ifndef {cast_cname}\n" + ccu.header_decl.add "#define {cast_cname} {v.compiler.mainmodule.c_name}___{cast_cname}\n" + ccu.header_decl.add "#endif\n" if compile_implementation_too then # Internally, implement internal function @@ -333,12 +339,16 @@ redef class MExplicitCast # special casts if from.as_nullable == to then # format A_as_nullable - ccu.header_decl.add("#define {from.mangled_cname}_as_nullable {from.mangled_cname}_as_{to.mangled_cname}\n") + ccu.header_decl.add "#ifndef {from.mangled_cname}_as_nullable\n" + ccu.header_decl.add "#define {from.mangled_cname}_as_nullable {from.mangled_cname}_as_{to.mangled_cname}\n" + ccu.header_decl.add "#endif\n" end if from == to.as_nullable then # format A_as_nullable - ccu.header_decl.add("#define {to.mangled_cname}_as_not_nullable {from.mangled_cname}_as_{to.mangled_cname}\n") + ccu.header_decl.add "#ifndef {to.mangled_cname}_as_not_nullable\n" + ccu.header_decl.add "#define {to.mangled_cname}_as_not_nullable {from.mangled_cname}_as_{to.mangled_cname}\n" + ccu.header_decl.add "#endif\n" end end end -- 1.7.9.5