1 --!! worker/wrapper turns ( \ <absent> -> Int# ) function
2 --!! into Int# -- WRONG
4 import PrelBase --ghc1.3
6 main = putStr (shows true_or_false "\n")
9 = case (cmp_name True imp1 imp2) of
14 imp1 = Imp s "Imp1" s s
15 imp2 = Imp s "Imp2" s s
19 -- taken from compiler: basicTypes/ProtoName.lhs
21 cmp_name :: Bool -> ProtoName -> ProtoName -> Int#
23 cmp_name by_local (Unk n1) (Unk n2) = cmpString n1 n2
24 cmp_name by_local (Unk n1) (Imp m n2 _ o2) = cmpString n1 (if by_local then o2 else n2)
25 cmp_name by_local (Unk n1) (Prel nm)
26 = let (_, n2) = getOrigName nm in
29 cmp_name by_local (Prel n1) (Prel n2) = cmpName n1 n2
31 cmp_name True (Imp _ _ _ o1) (Imp _ _ _ o2) = cmpString o1 o2
33 cmp_name False (Imp m1 n1 _ _) (Imp m2 n2 _ _)
34 = case cmpString n1 n2 of {
36 0# -> case cmpString m1 m2 of {
38 xxx -> if null m1 || null m2
45 cmp_name True (Imp _ _ _ o1) (Prel nm)
47 (_, n2) = getOrigName nm
51 cmp_name False (Imp m1 n1 _ _) (Prel nm)
52 = case getOrigName nm of { (m2, n2) ->
53 case cmpString n1 n2 of { -1# -> -1#; 0# -> cmpString m1 m2; _ -> 1# }}
55 cmp_name by_local other_p1 other_p2
56 = case cmp_name by_local other_p2 other_p1 of -- compare the other way around
62 = Unk String -- local name in module
64 | Imp String -- name of defining module
65 String -- name used in defining name
66 String -- name of the module whose interface told me
68 String -- occurrence name
72 cmpString, cmpName :: String -> String -> Int#
76 getOrigName :: String -> (String, String)
77 getOrigName x = ("MODULE", x)