paste #rz4Z :: 2018-01-03T15:40:27Z :: new :: raw
diff --git a/src/compiler/crystal/codegen/codegen.cr b/src/compiler/crystal/codegen/codegen.cr
index cbf63ad..1c0e537 100644
--- a/src/compiler/crystal/codegen/codegen.cr
+++ b/src/compiler/crystal/codegen/codegen.cr
@@ -2050,13 +2050,10 @@ module Crystal
   def self.safe_mangling(program, name)
     if program.has_flag?("windows")
       name.gsub do |char|
-        case char
-        when '<', '>', '(', ')', '*', ':', ',', '#', '@', ' '
-          "."
-        when '+'
-          ".."
-        else
+        if char.ascii_alphanumeric?
           char
+        else
+          ".#{char.ord.to_s(16)}."
         end
       end
     else