- = let ts' = case ts of
- [ "&", cid] -> [ cid]
- [fname, "&" ] -> [fname ]
- [fname, "&", cid] -> [fname, cid]
- _ -> ts
- in case ts' of
- [ cid] | is_cid cid -> Just (nilFS, mk_cid cid)
- [fname, cid] | is_cid cid -> Just (mkFastString fname, mk_cid cid)
- [ ] -> Just (nilFS, mk_cid nm)
- [fname ] -> Just (mkFastString fname, mk_cid nm)
- _ -> Nothing
+ = case ts of
+ [ ] -> mkFun nilFS nm
+ [ "&", cid] -> mkLbl nilFS cid
+ [fname, "&" ] -> mkLbl (mkFastString fname) nm
+ [fname, "&", cid] -> mkLbl (mkFastString fname) cid
+ [ "&" ] -> mkLbl nilFS nm
+ [fname, cid] -> mkFun (mkFastString fname) cid
+ [ cid]
+ | is_cid cid -> mkFun nilFS cid
+ | otherwise -> mkFun (mkFastString cid) nm
+ -- tricky case when there's a single string: "foo.h" is a header,
+ -- but "foo" is a C identifier, and we tell the difference by
+ -- checking for a valid C identifier (see is_cid below).
+ _anything_else -> Nothing
+