diff options
Diffstat (limited to 'compiler')
| -rw-r--r-- | compiler/prelude/PrelRules.lhs | 24 |
1 files changed, 14 insertions, 10 deletions
diff --git a/compiler/prelude/PrelRules.lhs b/compiler/prelude/PrelRules.lhs index 713726288f..2fccc0b7be 100644 --- a/compiler/prelude/PrelRules.lhs +++ b/compiler/prelude/PrelRules.lhs @@ -665,7 +665,10 @@ builtinIntegerRules = -- These rules below don't actually have to be built in, but if we -- put them in the Haskell source then we'd have to duplicate them -- between all Integer implementations - rule_smallIntegerToInt "smallIntegerToInt" integerToIntName, + rule_XToIntegerToX "smallIntegerToInt" integerToIntName smallIntegerName, + rule_XToIntegerToX "wordToIntegerToWord" integerToWordName wordToIntegerName, + rule_XToIntegerToX "int64ToIntegerToInt64" integerToInt64Name int64ToIntegerName, + rule_XToIntegerToX "word64ToIntegerToWord64" integerToWord64Name word64ToIntegerName, rule_smallIntegerTo "smallIntegerToWord" integerToWordName Int2WordOp, rule_smallIntegerTo "smallIntegerToFloat" floatFromIntegerName Int2FloatOp, rule_smallIntegerTo "smallIntegerToDouble" doubleFromIntegerName Int2DoubleOp @@ -712,9 +715,9 @@ builtinIntegerRules = rule_decodeDouble str name = BuiltinRule { ru_name = fsLit str, ru_fn = name, ru_nargs = 1, ru_try = match_decodeDouble } - rule_smallIntegerToInt str name + rule_XToIntegerToX str name toIntegerName = BuiltinRule { ru_name = fsLit str, ru_fn = name, ru_nargs = 1, - ru_try = match_smallIntegerToInt } + ru_try = match_XToIntegerToX toIntegerName } rule_smallIntegerTo str name primOp = BuiltinRule { ru_name = fsLit str, ru_fn = name, ru_nargs = 1, ru_try = match_smallIntegerTo primOp } @@ -968,14 +971,15 @@ match_decodeDouble fn id_unf [xl] panic "match_decodeDouble: Id has the wrong type" match_decodeDouble _ _ _ = Nothing -match_smallIntegerToInt :: Id - -> IdUnfoldingFun - -> [Expr CoreBndr] - -> Maybe (Expr CoreBndr) -match_smallIntegerToInt _ _ [App (Var x) y] - | idName x == smallIntegerName +match_XToIntegerToX :: Name + -> Id + -> IdUnfoldingFun + -> [Expr CoreBndr] + -> Maybe (Expr CoreBndr) +match_XToIntegerToX n _ _ [App (Var x) y] + | idName x == n = Just y -match_smallIntegerToInt _ _ _ = Nothing +match_XToIntegerToX _ _ _ _ = Nothing match_smallIntegerTo :: PrimOp -> Id |
