From 5b0448b72cc36c79e027614549774ee6827122a4 Mon Sep 17 00:00:00 2001 From: Jean Privat Date: Fri, 23 Jul 2010 04:08:41 -0400 Subject: [PATCH] compile: cnames for classes and modules Allow the compilation of programs with class name conflicts and submodule name conflicts. note: fix valgrind script to inlude new name mangling Signed-off-by: Jean Privat --- src/compiling/compiling.nit | 16 +++--- src/compiling/compiling_base.nit | 57 +++++++++++++++++--- src/compiling/compiling_global.nit | 34 ++++++------ src/compiling/compiling_icode.nit | 10 ++-- src/valgrind.sh | 2 +- tests/base_conflict_class_name.nit | 23 ++++++++ tests/base_conflict_class_name_submodule1.nit | 22 ++++++++ tests/base_conflict_class_name_submodule2.nit | 22 ++++++++ tests/base_conflict_submodule_name.nit | 23 ++++++++ .../base_conflict_submodule_name_submodule1.nit | 1 + .../submodule.nit | 22 ++++++++ .../base_conflict_submodule_name_submodule2.nit | 1 + .../submodule.nit | 22 ++++++++ tests/sav/base_conflict_class_name.sav | 2 + tests/sav/base_conflict_class_name_alt1.sav | 3 ++ tests/sav/base_conflict_class_name_alt2.sav | 3 ++ tests/sav/base_conflict_submodule_name.sav | 2 + tests/sav/base_conflict_submodule_name_alt1.sav | 3 ++ tests/sav/base_conflict_submodule_name_alt2.sav | 3 ++ 19 files changed, 234 insertions(+), 37 deletions(-) create mode 100644 tests/base_conflict_class_name.nit create mode 100644 tests/base_conflict_class_name_submodule1.nit create mode 100644 tests/base_conflict_class_name_submodule2.nit create mode 100644 tests/base_conflict_submodule_name.nit create mode 100644 tests/base_conflict_submodule_name_submodule1/base_conflict_submodule_name_submodule1.nit create mode 100644 tests/base_conflict_submodule_name_submodule1/submodule.nit create mode 100644 tests/base_conflict_submodule_name_submodule2/base_conflict_submodule_name_submodule2.nit create mode 100644 tests/base_conflict_submodule_name_submodule2/submodule.nit create mode 100644 tests/sav/base_conflict_class_name.sav create mode 100644 tests/sav/base_conflict_class_name_alt1.sav create mode 100644 tests/sav/base_conflict_class_name_alt2.sav create mode 100644 tests/sav/base_conflict_class_name_submodule1.sav create mode 100644 tests/sav/base_conflict_class_name_submodule2.sav create mode 100644 tests/sav/base_conflict_submodule_name.sav create mode 100644 tests/sav/base_conflict_submodule_name_alt1.sav create mode 100644 tests/sav/base_conflict_submodule_name_alt2.sav diff --git a/src/compiling/compiling.nit b/src/compiling/compiling.nit index 8dcadba..b71b827 100644 --- a/src/compiling/compiling.nit +++ b/src/compiling/compiling.nit @@ -75,10 +75,10 @@ redef class Program v.add_decl("#include ") compile_tables_to_c(v) compile_main_part(v) - var filename = "{cprogram.compdir}/{main_module.name}._tables.c" + var filename = "{cprogram.compdir}/{main_module.cname}._tables.c" cprogram.files.add(filename) var f = new OFStream.open(filename) - f.write("/* This C file is generated by NIT to compile program {main_module.name}. */\n") + f.write("/* This C file is generated by NIT to compile program {main_module.cname}. */\n") for m in main_module.mhe.greaters_and_self do f.write("#include \"{cprogram.module_header_name(m)}\"\n") end @@ -93,7 +93,7 @@ redef class MMModule private fun compile_separate_module(cprogram: CProgram) do var tc = cprogram.program.tc - tc.info("Generating C code for module: {name}",2) + tc.info("Generating C code for module: {full_name}",2) var v = new CompilerVisitor(self, cprogram) v.add_decl("#include ") @@ -111,18 +111,18 @@ redef class MMModule var hfilename = cprogram.module_header_name(self) var f = new OFStream.open("{cprogram.compdir}/{hfilename}") - f.write("/* This C header file is generated by NIT to compile modules and programs that requires {name}. */\n") - f.write("#ifndef {name}{cprogram.get_file_ending}\n") - f.write("#define {name}{cprogram.get_file_ending}\n") + f.write("/* This C header file is generated by NIT to compile modules and programs that requires {full_name}. */\n") + f.write("#ifndef {cname}{cprogram.get_file_ending}\n") + f.write("#define {cname}{cprogram.get_file_ending}\n") for m in mhe.direct_greaters do f.write("#include \"{cprogram.module_header_name(m)}\"\n") v.header_writer.write_to_stream(f) f.write("#endif\n") f.close - var cfilename = "{cprogram.compdir}/{name}.{cprogram.get_file_ending}.c" + var cfilename = "{cprogram.compdir}/{cname}.{cprogram.get_file_ending}.c" cprogram.files.add(cfilename) f = new OFStream.open("{cfilename}") - f.write("/* This C file is generated by NIT to compile module {name}. */\n") + f.write("/* This C file is generated by NIT to compile module {cname}. */\n") f.write("#include \"{hfilename}\"\n") v.top_writer.write_to_stream(f) f.close diff --git a/src/compiling/compiling_base.nit b/src/compiling/compiling_base.nit index 24d4fcb..e6f7f9a 100644 --- a/src/compiling/compiling_base.nit +++ b/src/compiling/compiling_base.nit @@ -43,7 +43,7 @@ class CProgram do _program = p _compdir = p.tc.compdir.as(not null) - _build_file = "{compdir}/{program.main_module.name}._build.sh" + _build_file = "{compdir}/{program.main_module.cname}._build.sh" end # The Nit program compiled to C @@ -67,7 +67,7 @@ class CProgram if _module_include.has_key(m) then return _module_include[m] end - var filename = "{m.name}.{get_file_ending}.h" + var filename = "{m.cname}.{get_file_ending}.h" _module_include[m] = filename return filename end @@ -94,7 +94,7 @@ class CProgram end f.write("#!/bin/sh\n") - f.write("# This shell script is generated by NIT to compile the program {program.main_module.name}.\n") + f.write("# This shell script is generated by NIT to compile the program {program.main_module.full_name}.\n") f.write("CLIBDIR=\"{tc.clibdir.as(not null)}\"\n") f.write("{tc.bindir.as(not null)}/gccx {verbose} -d {compdir} -I $CLIBDIR {include_dirs.join(" ")}") if tc.output_file != null then @@ -249,25 +249,68 @@ redef class MMGlobalProperty end redef class MMGlobalClass + # Cacher result of cname + var _cname_cache: nullable String + + # The mangled name of the global class + fun cname: String + do + var cname = _cname_cache + if cname == null then + cname = intro.mmmodule.cname + "___" + cmangle(intro.name) + _cname_cache = cname + end + return cname + end + # C symbol refering the identifier of the class fun id_id: String do - return "ID_{intro.name}" + return "ID_{cname}" end # C symbol refering the color of the class (for subtype tests) fun color_id: String do - return "COLOR_{intro.name}" + return "COLOR_{cname}" end # C symbol refering the init table position of the class (for constructor linearization) fun init_table_pos_id: String do - return "INIT_TABLE_POS_{intro.name}" + return "INIT_TABLE_POS_{cname}" + end +end + +redef class MMModule + # Cacher result of cname + var _cname_cache: nullable String + + # The mangled name of the module + fun cname: String + do + var cname = _cname_cache + if cname == null then + var l = new List[String] + var m: nullable MMModule = self + while m != null do + l.unshift(cmangle(m.name)) + var d: nullable MMDirectory = m.directory + while d != null and d.owner == m do d = d.parent + if d == null then m = null else m = d.owner + end + cname = l.to_a.join("___") + _cname_cache = cname + end + return cname end end +redef class MMLocalClass + # The mangled name of the global class + fun cname: String do return global.cname +end + redef class MMLocalProperty # Cacher result of cname var _cname_cache: nullable String @@ -277,7 +320,7 @@ redef class MMLocalProperty do var cname = _cname_cache if cname == null then - cname = cmangle(mmmodule.name, local_class.name, name) + cname = mmmodule.cname + "___" + cmangle(local_class.name, name) _cname_cache = cname end return cname diff --git a/src/compiling/compiling_global.nit b/src/compiling/compiling_global.nit index da63476..1dac70b 100644 --- a/src/compiling/compiling_global.nit +++ b/src/compiling/compiling_global.nit @@ -36,7 +36,8 @@ redef class Program var s = new Buffer.from("classtable_t TAG2VFT[4] = \{NULL") for t in ["Int","Char","Bool"] do if main_module.has_global_class_named(t.to_symbol) then - s.append(", (const classtable_t)VFT_{t}") + var c = main_module.class_by_name(t.to_symbol) + s.append(", (const classtable_t)VFT_{c.cname}") else s.append(", NULL") end @@ -55,7 +56,8 @@ redef class Program if v.program.main_method == null then print("No main") else - v.add_instr("G_sys = NEW_Sys();") + var c = v.program.main_class + v.add_instr("G_sys = NEW_{c.cname}();") v.add_instr("register_static_object(&G_sys);") v.add_instr("{v.program.main_method.cname}(G_sys);") end @@ -79,9 +81,9 @@ redef class MMModule # Compile sep files fun compile_mod_to_c(v: CompilerVisitor) do - v.add_decl("extern const char *LOCATE_{name};") + v.add_decl("extern const char *LOCATE_{cname};") if not v.program.tc.use_SFT_optimization then - v.add_decl("extern const int SFT_{name}[];") + v.add_decl("extern const int SFT_{cname}[];") end var i = 0 for e in local_table do @@ -89,7 +91,7 @@ redef class MMModule if v.program.tc.use_SFT_optimization then value = "{e.value(v.program)}" else - value = "SFT_{name}[{i}]" + value = "SFT_{cname}[{i}]" i = i + 1 end e.compile_macros(v, value) @@ -116,13 +118,13 @@ redef class MMModule # Compile module file for the current module fun compile_local_table_to_c(v: CompilerVisitor) do - v.add_instr("const char *LOCATE_{name} = \"{location.file}\";") + v.add_instr("const char *LOCATE_{cname} = \"{location.file}\";") if v.program.tc.use_SFT_optimization or local_table.is_empty then return end - v.add_instr("const int SFT_{name}[{local_table.length}] = \{") + v.add_instr("const int SFT_{cname}[{local_table.length}] = \{") v.indent for e in local_table do v.add_instr(e.value(v.program) + ",") @@ -323,7 +325,7 @@ redef class MMLocalClass do v.add_decl("") var pi = primitive_info - v.add_decl("extern const classtable_elt_t VFT_{name}[];") + v.add_decl("extern const classtable_elt_t VFT_{cname}[];") if pi != null and not pi.tagged then var t = pi.cname var tbox = "struct TBOX_{name}" @@ -343,7 +345,7 @@ redef class MMLocalClass clen = v.program.table_information.max_class_table_length end - v.add_instr("const classtable_elt_t VFT_{name}[{clen}] = \{") + v.add_instr("const classtable_elt_t VFT_{cname}[{clen}] = \{") v.indent for e in ctab do if e == null then @@ -372,7 +374,7 @@ redef class MMLocalClass v.indent v.add_instr("Nit_NativeArray array;") v.add_instr("array = (Nit_NativeArray)alloc(sizeof(struct Nit_NativeArray) + ((length - 1) * size));") - v.add_instr("array->vft = (classtable_elt_t*)VFT_{name};") + v.add_instr("array->vft = (classtable_elt_t*)VFT_{cname};") v.add_instr("array->object_id = object_id_counter;") v.add_instr("object_id_counter = object_id_counter + 1;") v.add_instr("array->size = length;") @@ -382,7 +384,7 @@ redef class MMLocalClass else if pi == null then do # Generate INIT_ATTRIBUTES routine - var cname = "INIT_ATTRIBUTES__{name}" + var cname = "INIT_ATTRIBUTES__{cname}" var args = init_var_iroutine.compile_signature_to_c(v, cname, "init var of {name}", null, null) var decl_writer_old = v.decl_writer v.decl_writer = v.writer.sub @@ -393,13 +395,13 @@ redef class MMLocalClass end do # Generate NEW routine - v.add_decl("val_t NEW_{name}(void);") - v.add_instr("val_t NEW_{name}(void)") + v.add_decl("val_t NEW_{cname}(void);") + v.add_instr("val_t NEW_{cname}(void)") v.add_instr("\{") v.indent v.add_instr("obj_t obj;") v.add_instr("obj = alloc(sizeof(val_t) * {itab.length});") - v.add_instr("obj->vft = (classtable_elt_t*)VFT_{name};") + v.add_instr("obj->vft = (classtable_elt_t*)VFT_{cname};") v.add_instr("obj[1].object_id = object_id_counter;") v.add_instr("object_id_counter = object_id_counter + 1;") v.add_instr("return OBJ2VAL(obj);") @@ -408,7 +410,7 @@ redef class MMLocalClass end do # Compile CHECKNAME - var cname = "CHECKNEW_{name}" + var cname = "CHECKNEW_{cname}" var args = checknew_iroutine.compile_signature_to_c(v, cname, "check new {name}", null, null) var decl_writer_old = v.decl_writer v.decl_writer = v.writer.sub @@ -444,7 +446,7 @@ redef class MMLocalClass v.add_instr("val_t BOX_{name}({t} val) \{") v.indent v.add_instr("{tbox} *box = ({tbox}*)alloc(sizeof({tbox}));") - v.add_instr("box->vft = VFT_{name};") + v.add_instr("box->vft = VFT_{cname};") v.add_instr("box->val = val;") v.add_instr("box->object_id = object_id_counter;") v.add_instr("object_id_counter = object_id_counter + 1;") diff --git a/src/compiling/compiling_icode.nit b/src/compiling/compiling_icode.nit index 00e87c4..a805219 100644 --- a/src/compiling/compiling_icode.nit +++ b/src/compiling/compiling_icode.nit @@ -289,7 +289,7 @@ redef class IRoutine v.add_decl("struct \{struct stack_frame_t me;\} fra;") end v.add_instr("fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;") - v.add_instr("fra.me.file = LOCATE_{v.visitor.mmmodule.name};") + v.add_instr("fra.me.file = LOCATE_{v.visitor.mmmodule.cname};") v.add_instr("fra.me.line = {ll};") v.add_instr("fra.me.meth = LOCATE_{v.basecname};") v.add_instr("fra.me.has_broke = 0;") @@ -624,7 +624,7 @@ redef class IAllocateInstance v.add_location(location) var w = new_result(v) w.add("NEW_") - w.add(stype.local_class.name.to_s) + w.add(stype.local_class.cname) w.add("()") end end @@ -635,7 +635,7 @@ redef class ICheckInstance v.add_location(location) var w = new_result(v) w.add("CHECKNEW_") - w.add(stype.local_class.name.to_s) + w.add(stype.local_class.cname) w.add("(") w.add(v.register(expr)) w.add(")") @@ -648,7 +648,7 @@ redef class IInitAttributes v.add_location(location) var w = v.new_instr w.add("INIT_ATTRIBUTES__") - w.add(stype.local_class.name.to_s) + w.add(stype.local_class.cname) w.add("(") w.add(v.register(expr)) w.add(");\n") @@ -943,7 +943,7 @@ redef class IAbort w.add("\", NULL") end w.add(", LOCATE_") - w.add(module_location.name.to_s) + w.add(module_location.cname) var ll = location if ll != null then w.add(", ") diff --git a/src/valgrind.sh b/src/valgrind.sh index c024763..d34dfd7 100755 --- a/src/valgrind.sh +++ b/src/valgrind.sh @@ -7,4 +7,4 @@ NIT_GC_OPTION=large export NIT_GC_OPTION # Skip usual methods with blocks to avoid loops -exec valgrind --tool=callgrind --fn-skip=array___Array___iterate --fn-skip=abstract_collection___Collection___iterate --fn-skip=parser_prod___Visitor___enter_visit "$@" +exec valgrind --tool=callgrind --fn-skip=array___Array___iterate --fn-skip=abstract_collection___Collection___iterate --fn-skip=parser_prod___Visitor___enter_visit --fn-skip=standard___collection___abstract_collection___Collection___iterate --fn-skip=standard___collection___array___Array___iterate "$@" diff --git a/tests/base_conflict_class_name.nit b/tests/base_conflict_class_name.nit new file mode 100644 index 0000000..74ca118 --- /dev/null +++ b/tests/base_conflict_class_name.nit @@ -0,0 +1,23 @@ +# This file is part of NIT ( http://www.nitlanguage.org ). +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import base_conflict_class_name_submodule1 +import base_conflict_class_name_submodule2 + +var a1 = newa1 +fooa1(a1) +var a2 = newa2 +fooa2(a2) +#alt1#fooa1(a2) +#alt2#fooa2(a1) diff --git a/tests/base_conflict_class_name_submodule1.nit b/tests/base_conflict_class_name_submodule1.nit new file mode 100644 index 0000000..1879ac3 --- /dev/null +++ b/tests/base_conflict_class_name_submodule1.nit @@ -0,0 +1,22 @@ +# This file is part of NIT ( http://www.nitlanguage.org ). +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import kernel + +class A + fun foo do 1.output +end + +fun newa1: Object do return new A +fun fooa1(a: Object) do a.as(A).foo diff --git a/tests/base_conflict_class_name_submodule2.nit b/tests/base_conflict_class_name_submodule2.nit new file mode 100644 index 0000000..3a6c056 --- /dev/null +++ b/tests/base_conflict_class_name_submodule2.nit @@ -0,0 +1,22 @@ +# This file is part of NIT ( http://www.nitlanguage.org ). +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import kernel + +class A + fun foo do 2.output +end + +fun newa2: Object do return new A +fun fooa2(a: Object) do a.as(A).foo diff --git a/tests/base_conflict_submodule_name.nit b/tests/base_conflict_submodule_name.nit new file mode 100644 index 0000000..f1e2250 --- /dev/null +++ b/tests/base_conflict_submodule_name.nit @@ -0,0 +1,23 @@ +# This file is part of NIT ( http://www.nitlanguage.org ). +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import base_conflict_submodule_name_submodule1 +import base_conflict_submodule_name_submodule2 + +var a1 = newa1 +fooa1(a1) +var a2 = newa2 +fooa2(a2) +#alt1#fooa1(a2) +#alt2#fooa2(a1) diff --git a/tests/base_conflict_submodule_name_submodule1/base_conflict_submodule_name_submodule1.nit b/tests/base_conflict_submodule_name_submodule1/base_conflict_submodule_name_submodule1.nit new file mode 100644 index 0000000..1960a71 --- /dev/null +++ b/tests/base_conflict_submodule_name_submodule1/base_conflict_submodule_name_submodule1.nit @@ -0,0 +1 @@ +import submodule diff --git a/tests/base_conflict_submodule_name_submodule1/submodule.nit b/tests/base_conflict_submodule_name_submodule1/submodule.nit new file mode 100644 index 0000000..1879ac3 --- /dev/null +++ b/tests/base_conflict_submodule_name_submodule1/submodule.nit @@ -0,0 +1,22 @@ +# This file is part of NIT ( http://www.nitlanguage.org ). +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import kernel + +class A + fun foo do 1.output +end + +fun newa1: Object do return new A +fun fooa1(a: Object) do a.as(A).foo diff --git a/tests/base_conflict_submodule_name_submodule2/base_conflict_submodule_name_submodule2.nit b/tests/base_conflict_submodule_name_submodule2/base_conflict_submodule_name_submodule2.nit new file mode 100644 index 0000000..1960a71 --- /dev/null +++ b/tests/base_conflict_submodule_name_submodule2/base_conflict_submodule_name_submodule2.nit @@ -0,0 +1 @@ +import submodule diff --git a/tests/base_conflict_submodule_name_submodule2/submodule.nit b/tests/base_conflict_submodule_name_submodule2/submodule.nit new file mode 100644 index 0000000..3a6c056 --- /dev/null +++ b/tests/base_conflict_submodule_name_submodule2/submodule.nit @@ -0,0 +1,22 @@ +# This file is part of NIT ( http://www.nitlanguage.org ). +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import kernel + +class A + fun foo do 2.output +end + +fun newa2: Object do return new A +fun fooa2(a: Object) do a.as(A).foo diff --git a/tests/sav/base_conflict_class_name.sav b/tests/sav/base_conflict_class_name.sav new file mode 100644 index 0000000..1191247 --- /dev/null +++ b/tests/sav/base_conflict_class_name.sav @@ -0,0 +1,2 @@ +1 +2 diff --git a/tests/sav/base_conflict_class_name_alt1.sav b/tests/sav/base_conflict_class_name_alt1.sav new file mode 100644 index 0000000..21da3c5 --- /dev/null +++ b/tests/sav/base_conflict_class_name_alt1.sav @@ -0,0 +1,3 @@ +1 +2 +Cast failed (./base_conflict_class_name_submodule1.nit:22) diff --git a/tests/sav/base_conflict_class_name_alt2.sav b/tests/sav/base_conflict_class_name_alt2.sav new file mode 100644 index 0000000..f1b42be --- /dev/null +++ b/tests/sav/base_conflict_class_name_alt2.sav @@ -0,0 +1,3 @@ +1 +2 +Cast failed (./base_conflict_class_name_submodule2.nit:22) diff --git a/tests/sav/base_conflict_class_name_submodule1.sav b/tests/sav/base_conflict_class_name_submodule1.sav new file mode 100644 index 0000000..e69de29 diff --git a/tests/sav/base_conflict_class_name_submodule2.sav b/tests/sav/base_conflict_class_name_submodule2.sav new file mode 100644 index 0000000..e69de29 diff --git a/tests/sav/base_conflict_submodule_name.sav b/tests/sav/base_conflict_submodule_name.sav new file mode 100644 index 0000000..1191247 --- /dev/null +++ b/tests/sav/base_conflict_submodule_name.sav @@ -0,0 +1,2 @@ +1 +2 diff --git a/tests/sav/base_conflict_submodule_name_alt1.sav b/tests/sav/base_conflict_submodule_name_alt1.sav new file mode 100644 index 0000000..53131dc --- /dev/null +++ b/tests/sav/base_conflict_submodule_name_alt1.sav @@ -0,0 +1,3 @@ +1 +2 +Cast failed (./base_conflict_submodule_name_submodule1//submodule.nit:22) diff --git a/tests/sav/base_conflict_submodule_name_alt2.sav b/tests/sav/base_conflict_submodule_name_alt2.sav new file mode 100644 index 0000000..4354f78 --- /dev/null +++ b/tests/sav/base_conflict_submodule_name_alt2.sav @@ -0,0 +1,3 @@ +1 +2 +Cast failed (./base_conflict_submodule_name_submodule2//submodule.nit:22) -- 1.7.9.5