X-Git-Url: https://git.stderr.nl/gitweb?a=blobdiff_plain;f=NormalizeTools.hs;h=25c9273d8fb38ef4810f6207925aa8e109251e73;hb=b62b2e3aa902db1f774c2f655b25e8428e2b1cf0;hp=7ccb4d1a119e8523d9a4c1a32560b69ccec31e59;hpb=570e26f7870fffb1b08fcf44c972b2152d942fc6;p=matthijs%2Fmaster-project%2Fc%CE%BBash.git diff --git a/NormalizeTools.hs b/NormalizeTools.hs index 7ccb4d1..25c9273 100644 --- a/NormalizeTools.hs +++ b/NormalizeTools.hs @@ -58,8 +58,8 @@ mkTypeVar str kind = do -- works for both value and type level expressions, so it can return a Var or -- TyVar (which is just an alias for Var). mkBinderFor :: CoreExpr -> String -> TransformMonad Var.Var -mkBinderFor (Type ty) = mkTypeVar string (Type.typeKind ty) -mkBinderFor expr = mkInternalVar string (CoreUtils.exprType expr) +mkBinderFor (Type ty) string = mkTypeVar string (Type.typeKind ty) +mkBinderFor expr string = mkInternalVar string (CoreUtils.exprType expr) -- Creates a reference to the given variable. This works for both a normal -- variable as well as a type variable @@ -74,6 +74,17 @@ cloneVar v = do -- contains, but vannillaIdInfo is always correct, since it means "no info"). return $ Var.lazySetVarIdInfo (Var.setVarUnique v uniq) IdInfo.vanillaIdInfo +-- Creates a new function with the same name as the given binder (but with a +-- new unique) and with the given function body. Returns the new binder for +-- this function. +mkFunction :: CoreBndr -> CoreExpr -> TransformMonad CoreBndr +mkFunction bndr body = do + let ty = CoreUtils.exprType body + id <- cloneVar bndr + let newid = Var.setVarType id ty + Trans.lift $ addGlobalBind newid body + return newid + -- Apply the given transformation to all expressions in the given expression, -- including the expression itself. everywhere :: (String, Transform) -> Transform