diff --git a/compiler/modulepaths.nim b/compiler/modulepaths.nim index e80ea3fa6..8ecf27a85 100644 --- a/compiler/modulepaths.nim +++ b/compiler/modulepaths.nim @@ -70,6 +70,13 @@ proc checkModuleName*(conf: ConfigRef; n: PNode; doLocalError=true): FileIndex = else: result = fileInfoIdx(conf, fullPath) +proc rot13(result: var string) = + for i, c in result: + case c + of 'a'..'m', 'A'..'M': result[i] = char(c.uint8 + 13) + of 'n'..'z', 'N'..'Z': result[i] = char(c.uint8 - 13) + else: discard + proc mangleModuleName*(conf: ConfigRef; path: AbsoluteFile): string = ## Mangle a relative module path to avoid path and symbol collisions. ## @@ -78,9 +85,11 @@ proc mangleModuleName*(conf: ConfigRef; path: AbsoluteFile): string = ## ## Example: ## `foo-#head/../bar` becomes `@foo-@hhead@s..@sbar` - "@m" & relativeTo(path, conf.projectPath).string.multiReplace( + result = "@m" & relativeTo(path, conf.projectPath).string.multiReplace( {$os.DirSep: "@s", $os.AltSep: "@s", "#": "@h", "@": "@@", ":": "@c"}) + rot13(result) proc demangleModuleName*(path: string): string = ## Demangle a relative module path. result = path.multiReplace({"@@": "@", "@h": "#", "@s": "/", "@m": "", "@c": ":"}) + rot13(result) diff --git a/compiler/msgs.nim b/compiler/msgs.nim index 3f386cc61..054f7f647 100644 --- a/compiler/msgs.nim +++ b/compiler/msgs.nim @@ -659,8 +659,10 @@ proc uniqueModuleName*(conf: ConfigRef; fid: FileIndex): string = for i in 0..