diff --git a/source/tlang/compiler/typecheck/core.d b/source/tlang/compiler/typecheck/core.d index dab9ce0..ba31151 100644 --- a/source/tlang/compiler/typecheck/core.d +++ b/source/tlang/compiler/typecheck/core.d @@ -518,7 +518,52 @@ unittest } catch (CollidingNameException e) { - /* Make sure the member y.y collided with root container (module) y */ + /* Make sure the member y.a.b.c.y collided with root container (module) y */ + assert(e.defined == container); + } +} + +/* Test name colliding with container name (3/3) [container (non-module), nested collider] */ +unittest +{ + import std.file; + import std.stdio; + import compiler.lexer; + import compiler.parsing.core; + + string sourceFile = "source/tlang/testing/collide_container_non_module.t"; + + File sourceFileFile; + sourceFileFile.open(sourceFile); /* TODO: Error handling with ANY file I/O */ + ulong fileSize = sourceFileFile.size(); + byte[] fileBytes; + fileBytes.length = fileSize; + fileBytes = sourceFileFile.rawRead(fileBytes); + sourceFileFile.close(); + + string sourceCode = cast(string) fileBytes; + Lexer currentLexer = new Lexer(sourceCode); + currentLexer.performLex(); + + Parser parser = new Parser(currentLexer.getTokens()); + Module modulle = parser.parse(); + TypeChecker typeChecker = new TypeChecker(modulle); + + /* Setup testing variables */ + Entity container = typeChecker.getResolver().resolveBest(typeChecker.getModule, "a.b.c"); + Entity colliderMember = typeChecker.getResolver().resolveBest(typeChecker.getModule, "a.b.c.c"); + + try + { + /* Perform test */ + typeChecker.beginCheck(); + + /* Shouldn't reach here, collision exception MUST occur */ + assert(false); + } + catch (CollidingNameException e) + { + /* Make sure the member a.b.c.c collided with a.b.c container */ assert(e.defined == container); } } diff --git a/source/tlang/testing/collide_container_non_module.t b/source/tlang/testing/collide_container_non_module.t new file mode 100644 index 0000000..2f6ac11 --- /dev/null +++ b/source/tlang/testing/collide_container_non_module.t @@ -0,0 +1,15 @@ +module y; + +class a +{ + class b + { + class c + { + class c + { + + } + } + } +} \ No newline at end of file