summaryrefslogtreecommitdiff
path: root/utils/genprimopcode/Main.hs
diff options
context:
space:
mode:
Diffstat (limited to 'utils/genprimopcode/Main.hs')
-rw-r--r--utils/genprimopcode/Main.hs114
1 files changed, 57 insertions, 57 deletions
diff --git a/utils/genprimopcode/Main.hs b/utils/genprimopcode/Main.hs
index e6af0f200e..294591444d 100644
--- a/utils/genprimopcode/Main.hs
+++ b/utils/genprimopcode/Main.hs
@@ -66,7 +66,7 @@ desugarVectorSpec i = case vecOptions i of
| drop len s == suf = Just (take len s)
| otherwise = Nothing
where
- len = length s - length suf
+ len = length s - length suf
lowerHead s = toLower (head s) : tail s
@@ -121,37 +121,37 @@ main = getArgs >>= \args ->
-> seq (sanityTop p_o_specs) (
case head args of
- "--data-decl"
+ "--data-decl"
-> putStr (gen_data_decl p_o_specs)
- "--has-side-effects"
- -> putStr (gen_switch_from_attribs
- "has_side_effects"
+ "--has-side-effects"
+ -> putStr (gen_switch_from_attribs
+ "has_side_effects"
"primOpHasSideEffects" p_o_specs)
- "--out-of-line"
- -> putStr (gen_switch_from_attribs
- "out_of_line"
+ "--out-of-line"
+ -> putStr (gen_switch_from_attribs
+ "out_of_line"
"primOpOutOfLine" p_o_specs)
- "--commutable"
- -> putStr (gen_switch_from_attribs
- "commutable"
+ "--commutable"
+ -> putStr (gen_switch_from_attribs
+ "commutable"
"commutableOp" p_o_specs)
"--code-size"
- -> putStr (gen_switch_from_attribs
+ -> putStr (gen_switch_from_attribs
"code_size"
"primOpCodeSize" p_o_specs)
"--can-fail"
-> putStr (gen_switch_from_attribs
- "can_fail"
+ "can_fail"
"primOpCanFail" p_o_specs)
- "--strictness"
- -> putStr (gen_switch_from_attribs
- "strictness"
+ "--strictness"
+ -> putStr (gen_switch_from_attribs
+ "strictness"
"primOpStrictness" p_o_specs)
"--fixity"
@@ -159,31 +159,31 @@ main = getArgs >>= \args ->
"fixity"
"primOpFixity" p_o_specs)
- "--primop-primop-info"
+ "--primop-primop-info"
-> putStr (gen_primop_info p_o_specs)
- "--primop-tag"
+ "--primop-tag"
-> putStr (gen_primop_tag p_o_specs)
- "--primop-list"
+ "--primop-list"
-> putStr (gen_primop_list p_o_specs)
- "--primop-vector-uniques"
+ "--primop-vector-uniques"
-> putStr (gen_primop_vector_uniques p_o_specs)
- "--primop-vector-tys"
+ "--primop-vector-tys"
-> putStr (gen_primop_vector_tys p_o_specs)
- "--primop-vector-tys-exports"
+ "--primop-vector-tys-exports"
-> putStr (gen_primop_vector_tys_exports p_o_specs)
- "--primop-vector-tycons"
+ "--primop-vector-tycons"
-> putStr (gen_primop_vector_tycons p_o_specs)
- "--make-haskell-wrappers"
+ "--make-haskell-wrappers"
-> putStr (gen_wrappers p_o_specs)
-
- "--make-haskell-source"
+
+ "--make-haskell-source"
-> putStr (gen_hs_source p_o_specs)
"--make-latex-doc"
@@ -193,7 +193,7 @@ main = getArgs >>= \args ->
)
known_args :: [String]
-known_args
+known_args
= [ "--data-decl",
"--has-side-effects",
"--out-of-line",
@@ -391,12 +391,12 @@ pprTy = pty
gen_latex_doc :: Info -> String
gen_latex_doc (Info defaults entries)
- = "\\primopdefaults{"
+ = "\\primopdefaults{"
++ mk_options defaults
++ "}\n"
++ (concat (map mk_entry entries))
where mk_entry (PrimOpSpec {cons=constr,name=n,ty=t,cat=c,desc=d,opts=o}) =
- "\\primopdesc{"
+ "\\primopdesc{"
++ latex_encode constr ++ "}{"
++ latex_encode n ++ "}{"
++ latex_encode (zencode n) ++ "}{"
@@ -409,7 +409,7 @@ gen_latex_doc (Info defaults entries)
mk_entry (PrimVecOpSpec {}) =
""
mk_entry (Section {title=ti,desc=d}) =
- "\\primopsection{"
+ "\\primopsection{"
++ latex_encode ti ++ "}{"
++ d ++ "}\n"
mk_entry (PrimTypeSpec {ty=t,desc=d,opts=o}) =
@@ -438,7 +438,7 @@ gen_latex_doc (Info defaults entries)
pbty t = paty t
paty (TyVar tv) = tv
paty t = "(" ++ pty t ++ ")"
-
+
mk_core_ty typ = foralls ++ (pty typ)
where pty (TyF t1 t2) = pbty t1 ++ " -> " ++ pty t2
pty (TyC t1 t2) = pbty t1 ++ " => " ++ pty t2
@@ -453,7 +453,7 @@ gen_latex_doc (Info defaults entries)
utuplenm n = "(#" ++ (replicate (n-1) ',') ++ "#)"
foralls = if tvars == [] then "" else "%forall " ++ (tbinds tvars)
tvars = tvars_of typ
- tbinds [] = ". "
+ tbinds [] = ". "
tbinds ("o":tbs) = "(o::?) " ++ (tbinds tbs)
tbinds (tv:tbs) = tv ++ " " ++ (tbinds tbs)
tvars_of (TyF t1 t2) = tvars_of t1 `union` tvars_of t2
@@ -461,7 +461,7 @@ gen_latex_doc (Info defaults entries)
tvars_of (TyApp _ ts) = foldl union [] (map tvars_of ts)
tvars_of (TyUTup ts) = foldr union [] (map tvars_of ts)
tvars_of (TyVar tv) = [tv]
-
+
mk_options o =
"\\primoptions{"
++ mk_has_side_effects o ++ "}{"
@@ -488,12 +488,12 @@ gen_latex_doc (Info defaults entries)
Just (OptionFixity _) -> error "Fixity value for boolean option"
Just (OptionVector _) -> error "vector template for boolean option"
Nothing -> ""
-
- mk_strictness o =
+
+ mk_strictness o =
case lookup_attrib "strictness" o of
Just (OptionString _ s) -> s -- for now
Just _ -> error "Wrong value for strictness"
- Nothing -> ""
+ Nothing -> ""
mk_fixity o = case lookup_attrib "fixity" o of
Just (OptionFixity (Just (Fixity _ i d)))
@@ -514,19 +514,19 @@ gen_latex_doc (Info defaults entries)
(n, ')' : _) -> Just ('Z' : shows (n+1) "T")
_ -> Nothing
maybe_tuple _ = Nothing
-
+
count_commas :: Int -> String -> (Int, String)
count_commas n (',' : cs) = count_commas (n+1) cs
count_commas n cs = (n,cs)
-
+
unencodedChar :: Char -> Bool -- True for chars that don't need encoding
unencodedChar 'Z' = False
unencodedChar 'z' = False
unencodedChar c = isAlphaNum c
-
+
encode_ch :: Char -> String
encode_ch c | unencodedChar c = [c] -- Common case first
-
+
-- Constructors
encode_ch '(' = "ZL" -- Needed for things like (,), and (->)
encode_ch ')' = "ZR" -- For symmetry with (
@@ -534,7 +534,7 @@ gen_latex_doc (Info defaults entries)
encode_ch ']' = "ZN"
encode_ch ':' = "ZC"
encode_ch 'Z' = "ZZ"
-
+
-- Variables
encode_ch 'z' = "zz"
encode_ch '&' = "za"
@@ -556,7 +556,7 @@ gen_latex_doc (Info defaults entries)
encode_ch '_' = "zu"
encode_ch '%' = "zv"
encode_ch c = 'z' : shows (ord c) "U"
-
+
latex_encode [] = []
latex_encode (c:cs) | c `elem` "#$%&_^{}" = "\\" ++ c:(latex_encode cs)
latex_encode ('~':cs) = "\\verb!~!" ++ (latex_encode cs)
@@ -568,8 +568,8 @@ gen_wrappers (Info _ entries)
= "{-# LANGUAGE MagicHash, NoImplicitPrelude, UnboxedTuples #-}\n"
-- Dependencies on Prelude must be explicit in libraries/base, but we
-- don't need the Prelude here so we add NoImplicitPrelude.
- ++ "module GHC.PrimopWrappers where\n"
- ++ "import qualified GHC.Prim\n"
+ ++ "module GHC.PrimopWrappers where\n"
+ ++ "import qualified GHC.Prim\n"
++ "import GHC.Tuple ()\n"
++ "import GHC.Prim (" ++ types ++ ")\n"
++ unlines (concatMap f specs)
@@ -591,7 +591,7 @@ gen_wrappers (Info _ entries)
| otherwise = "(" ++ nm ++ ")"
dodgy spec
- = name spec `elem`
+ = name spec `elem`
[-- tagToEnum# is really magical, and can't have
-- a wrapper since its implementation depends on
-- the type of its result
@@ -610,7 +610,7 @@ gen_primop_list (Info _ entries)
[ " [" ++ cons first ]
++
map (\p -> " , " ++ cons p) rest
- ++
+ ++
[ " ]" ]
) where (first:rest) = concatMap desugarVectorSpec (filter is_primop entries)
@@ -699,7 +699,7 @@ gen_data_decl (Info _ entries) =
++ unlines (map (" | "++) (tail conss))
where
conss = map genCons (filter is_primop entries)
-
+
genCons :: Entry -> String
genCons entry =
case vecOptions entry of
@@ -728,7 +728,7 @@ gen_switch_from_attribs attrib_name fn_name (Info defaults entries)
in
case defv of
Nothing -> error ("gen_switch_from: " ++ attrib_name)
- Just xx
+ Just xx
-> unlines alternatives
++ fn_name ++ " _ = " ++ getAltRhs xx ++ "\n"
@@ -750,9 +750,9 @@ mkPOI_LHS_text i
mkPOI_RHS_text :: Entry -> String
mkPOI_RHS_text i
= case cat i of
- Compare
+ Compare
-> case ty i of
- TyF t1 (TyF _ _)
+ TyF t1 (TyF _ _)
-> "mkCompare " ++ sl_name i ++ ppType t1
_ -> error "Type error in comparison op"
Monadic
@@ -769,7 +769,7 @@ mkPOI_RHS_text i
-> let (argTys, resTy) = flatTys (ty i)
tvs = nub (tvsIn (ty i))
in
- "mkGenPrimOp " ++ sl_name i ++ " "
+ "mkGenPrimOp " ++ sl_name i ++ " "
++ listify (map ppTyVar tvs) ++ " "
++ listify (map ppType argTys) ++ " "
++ "(" ++ ppType resTy ++ ")"
@@ -782,7 +782,7 @@ ppTyVar "a" = "alphaTyVar"
ppTyVar "b" = "betaTyVar"
ppTyVar "c" = "gammaTyVar"
ppTyVar "s" = "deltaTyVar"
-ppTyVar "o" = "levity1TyVar, openAlphaTyVar"
+ppTyVar "o" = "runtimeRep1TyVar, openAlphaTyVar"
ppTyVar _ = error "Unknown type var"
ppType :: Ty -> String
@@ -813,14 +813,14 @@ ppType (TyVar "s") = "deltaTy"
ppType (TyVar "o") = "openAlphaTy"
ppType (TyApp (TyCon "State#") [x]) = "mkStatePrimTy " ++ ppType x
-ppType (TyApp (TyCon "MutVar#") [x,y]) = "mkMutVarPrimTy " ++ ppType x
+ppType (TyApp (TyCon "MutVar#") [x,y]) = "mkMutVarPrimTy " ++ ppType x
++ " " ++ ppType y
ppType (TyApp (TyCon "MutableArray#") [x,y]) = "mkMutableArrayPrimTy " ++ ppType x
++ " " ++ ppType y
ppType (TyApp (TyCon "MutableArrayArray#") [x]) = "mkMutableArrayArrayPrimTy " ++ ppType x
ppType (TyApp (TyCon "SmallMutableArray#") [x,y]) = "mkSmallMutableArrayPrimTy " ++ ppType x
++ " " ++ ppType y
-ppType (TyApp (TyCon "MutableByteArray#") [x]) = "mkMutableByteArrayPrimTy "
+ppType (TyApp (TyCon "MutableByteArray#") [x]) = "mkMutableByteArrayPrimTy "
++ ppType x
ppType (TyApp (TyCon "Array#") [x]) = "mkArrayPrimTy " ++ ppType x
ppType (TyApp (TyCon "ArrayArray#") []) = "mkArrayArrayPrimTy"
@@ -831,14 +831,14 @@ ppType (TyApp (TyCon "Weak#") [x]) = "mkWeakPrimTy " ++ ppType x
ppType (TyApp (TyCon "StablePtr#") [x]) = "mkStablePtrPrimTy " ++ ppType x
ppType (TyApp (TyCon "StableName#") [x]) = "mkStableNamePrimTy " ++ ppType x
-ppType (TyApp (TyCon "MVar#") [x,y]) = "mkMVarPrimTy " ++ ppType x
+ppType (TyApp (TyCon "MVar#") [x,y]) = "mkMVarPrimTy " ++ ppType x
++ " " ++ ppType y
-ppType (TyApp (TyCon "TVar#") [x,y]) = "mkTVarPrimTy " ++ ppType x
+ppType (TyApp (TyCon "TVar#") [x,y]) = "mkTVarPrimTy " ++ ppType x
++ " " ++ ppType y
ppType (TyApp (VecTyCon _ pptc) []) = pptc
-ppType (TyUTup ts) = "(mkTupleTy Unboxed "
+ppType (TyUTup ts) = "(mkTupleTy Unboxed "
++ listify (map ppType ts) ++ ")"
ppType (TyF s d) = "(mkFunTy (" ++ ppType s ++ ") (" ++ ppType d ++ "))"