Add cloneVar function to clone a Var.
authorMatthijs Kooijman <m.kooijman@student.utwente.nl>
Sun, 21 Jun 2009 11:37:04 +0000 (13:37 +0200)
committerMatthijs Kooijman <m.kooijman@student.utwente.nl>
Sun, 21 Jun 2009 11:37:04 +0000 (13:37 +0200)
NormalizeTools.hs

index 817dd51fcda0a7239b27ddb9013599b87ce941ba..82da086a260f07c8b7fb23967a2c0322e4781a7e 100644 (file)
@@ -43,6 +43,13 @@ mkInternalVar str ty = do
   let name = Name.mkInternalName uniq occname SrcLoc.noSrcSpan
   return $ Var.mkLocalIdVar name ty IdInfo.vanillaIdInfo
 
+cloneVar :: Var.Var -> TransformMonad Var.Var
+cloneVar v = do
+  uniq <- mkUnique
+  -- Swap out the unique, and reset the IdInfo (I'm not 100% sure what it
+  -- contains, but vannillaIdInfo is always correct, since it means "no info").
+  return $ Var.lazySetVarIdInfo (Var.setVarUnique v uniq) IdInfo.vanillaIdInfo
+
 -- Apply the given transformation to all expressions in the given expression,
 -- including the expression itself.
 everywhere :: (String, Transform) -> Transform