import CoreSyn
import Id ( mkWildId )
import Literal ( Literal(..), isLitLitLit, mkMachInt, mkMachWord
- , inIntRange, inWordRange, literalType
+ , literalType
, word2IntLit, int2WordLit, char2IntLit, int2CharLit
, float2IntLit, int2FloatLit, double2IntLit, int2DoubleLit
, addr2IntLit, int2AddrLit, float2DoubleLit, double2FloatLit
)
-import RdrName ( RdrName )
import PrimOp ( PrimOp(..), primOpOcc )
import TysWiredIn ( trueDataConId, falseDataConId )
import TyCon ( tyConDataConsIfAvailable, isEnumerationTyCon, isNewTyCon )
import CoreUtils ( exprIsValue, cheapEqExpr, exprIsConApp_maybe )
import Type ( splitTyConApp_maybe )
import OccName ( occNameUserString)
-import PrelNames ( unpackCStringFoldr_RDR )
-import Unique ( unpackCStringFoldrIdKey, hasKey )
+import PrelNames ( unpackCStringFoldrName, unpackCStringFoldrIdKey, hasKey )
+import Name ( Name )
import Bits ( Bits(..) )
import Word ( Word64 )
import Outputable
falseVal = Var falseDataConId
mkIntVal i = Lit (mkMachInt i)
mkWordVal w = Lit (mkMachWord w)
-mkCharVal c = Lit (MachChar c)
mkFloatVal f = Lit (convFloating (MachFloat f))
mkDoubleVal d = Lit (convFloating (MachDouble d))
\end{code}
%************************************************************************
\begin{code}
-builtinRules :: [(RdrName, CoreRule)]
+builtinRules :: [(Name, CoreRule)]
-- Rules for non-primops that can't be expressed using a RULE pragma
builtinRules
- = [ (unpackCStringFoldr_RDR, BuiltinRule match_append_lit_str)
+ = [ (unpackCStringFoldrName, BuiltinRule match_append_lit_str)
]
--- unpackFoldrCString# "foo" c (unpackFoldrCString# "baz" c n) = unpackFoldrCString# "foobaz" c n
+-- The rule is this:
+-- unpackFoldrCString# "foo" c (unpackFoldrCString# "baz" c n) = unpackFoldrCString# "foobaz" c n
match_append_lit_str [Type ty1,
Lit (MachStr s1),