[project @ 2000-05-22 19:53:01 by panne]
[ghc-hetmet.git] / ghc / compiler / basicTypes / OccName.lhs
index 5b1ed18..8de9aae 100644 (file)
@@ -422,29 +422,29 @@ The basic encoding scheme is this.
 
 * Tuples (,,,) are coded as Z3T
 
-* Alphabetic characters (upper and lower), digits, and '_'
+* Alphabetic characters (upper and lower) and digits
        all translate to themselves; 
        except 'Z', which translates to 'ZZ'
        and    'z', which translates to 'zz'
   We need both so that we can preserve the variable/tycon distinction
 
-* Most other printable characters translate to 'Zx' for some
+* Most other printable characters translate to 'zx' or 'Zx' for some
        alphabetic character x
 
-* The others translate as 'Zxdd' where 'dd' is exactly two hexadecimal
+* The others translate as 'zxdd' where 'dd' is exactly two hexadecimal
        digits for the ord of the character
 
        Before          After
        --------------------------
        Trak            Trak
-       foo_wib         foo_wib
-       >               Zg
-       >1              Zg1
-       foo#            fooZh
-       foo##           fooZhZh
-       foo##1          fooZhXh1
+       foo_wib         foozuwib
+       >               zg
+       >1              zg1
+       foo#            foozh
+       foo##           foozhzh
+       foo##1          foozhzh1
        fooZ            fooZZ   
-       :+              ZcZp
+       :+              Zczp
        ()              Z0T
        (,,,,)          Z4T
 
@@ -456,7 +456,6 @@ The basic encoding scheme is this.
 alreadyEncoded :: String -> Bool
 alreadyEncoded s = all ok s
                 where
-                  ok '_' = True
                   ok ' ' = True                -- This is a bit of a lie; if we really wanted spaces
                                                -- in names we'd have to encode them.  But we do put
                                                -- spaces in ccall "occurrences", and we don't want to
@@ -490,7 +489,6 @@ encodeFS fast_str  | all unencodedChar str = fast_str
                     str = _UNPK_ fast_str
 
 unencodedChar :: Char -> Bool  -- True for chars that don't need encoding
-unencodedChar '_' = True
 unencodedChar 'Z' = False
 unencodedChar 'z' = False
 unencodedChar c   = ISALPHANUM c
@@ -510,6 +508,7 @@ encode_ch 'Z'  = "ZZ"
 encode_ch 'z'  = "zz"
 encode_ch '&'  = "za"
 encode_ch '|'  = "zb"
+encode_ch '^'  = "zc"
 encode_ch '$'  = "zd"
 encode_ch '='  = "ze"
 encode_ch '>'  = "zg"
@@ -523,7 +522,7 @@ encode_ch '\'' = "zq"
 encode_ch '\\' = "zr"
 encode_ch '/'  = "zs"
 encode_ch '*'  = "zt"
-encode_ch '^'  = "zu"
+encode_ch '_'  = "zu"
 encode_ch '%'  = "zv"
 encode_ch c    = ['z', 'x', intToDigit hi, intToDigit lo]
               where
@@ -544,16 +543,17 @@ decode (c   : rest) = c : decode rest
 
 decode_escape :: EncodedString -> UserString
 
-decode_escape ('Z' : rest) = 'Z' : decode rest
-decode_escape ('C' : rest) = ':' : decode rest
 decode_escape ('L' : rest) = '(' : decode rest
 decode_escape ('R' : rest) = ')' : decode rest
 decode_escape ('M' : rest) = '[' : decode rest
 decode_escape ('N' : rest) = ']' : decode rest
+decode_escape ('C' : rest) = ':' : decode rest
+decode_escape ('Z' : rest) = 'Z' : decode rest
 
 decode_escape ('z' : rest) = 'z' : decode rest
 decode_escape ('a' : rest) = '&' : decode rest
 decode_escape ('b' : rest) = '|' : decode rest
+decode_escape ('c' : rest) = '^' : decode rest
 decode_escape ('d' : rest) = '$' : decode rest
 decode_escape ('e' : rest) = '=' : decode rest
 decode_escape ('g' : rest) = '>' : decode rest
@@ -567,7 +567,7 @@ decode_escape ('q' : rest) = '\'' : decode rest
 decode_escape ('r' : rest) = '\\' : decode rest
 decode_escape ('s' : rest) = '/' : decode rest
 decode_escape ('t' : rest) = '*' : decode rest
-decode_escape ('u' : rest) = '^' : decode rest
+decode_escape ('u' : rest) = '_' : decode rest
 decode_escape ('v' : rest) = '%' : decode rest
 decode_escape ('x' : d1 : d2 : rest) = chr (digitToInt d1 * 16 + digitToInt d2)  : decode rest