strTable[s] = unsafeAddr(s) Such code can easily generate crashes.
It may work when you pass to internSting() a string which is a global variable, but when you pass a proc local variable that variable may not exists any more when that proc is terminated. Why would you want to write such strange code in Nim?