summary refs log tree commit diff stats
path: root/compiler/ccgutils.nim
diff options
context:
space:
mode:
Diffstat (limited to 'compiler/ccgutils.nim')
-rw-r--r--compiler/ccgutils.nim21
1 files changed, 21 insertions, 0 deletions
diff --git a/compiler/ccgutils.nim b/compiler/ccgutils.nim
index 1d8f0158b..9beb08a21 100644
--- a/compiler/ccgutils.nim
+++ b/compiler/ccgutils.nim
@@ -161,6 +161,27 @@ proc makeSingleLineCString*(s: string): string =
     result.add(c.toCChar)
   result.add('\"')
 
+proc mangle*(name: string): string =
+  result = ""
+  case name[0]
+  of Letters:
+    result.add(name[0].toLower)
+  of Digits:
+    result.add("N" & name[0])
+  else:
+    result = "HEX" & toHex(ord(name[0]), 2)
+  for i in 1..(name.len-1):
+    let c = name[i]
+    case c
+    of 'A'..'Z':
+      add(result, c.toLower)
+    of '_':
+      discard
+    of 'a'..'z', '0'..'9':
+      add(result, c)
+    else:
+      add(result, "HEX" & toHex(ord(c), 2))
+
 proc makeLLVMString*(s: string): PRope = 
   const MaxLineLength = 64
   result = nil