[add some more efficient property modification methods to HasProperties, add HasInfo instance for TVr, make worker/wrapper transform preserve ONESHOT and JOINPOINT properties
John Meacham <john@repetae.net>**20060814055405] hunk ./E/Values.hs 15
+import Info.Info(HasInfo(..))
hunk ./E/Values.hs 199
+    getProperties tvr = getProperties (tvrInfo tvr)
+    setProperties [] tvr = tvr
+    setProperties props tvr = tvrInfo_u (setProperties props) tvr
+
+instance HasInfo TVr where
+    getInfo = tvrInfo
+    modifyInfo = tvrInfo_u
+
hunk ./E/WorkerWrapper.hs 7
+import qualified Data.Set as Set
hunk ./E/WorkerWrapper.hs 93
-    ans = doTicks >> return ((setProperty prop_WRAPPER tvr,wrapper),(setProperty prop_WORKER tvr',worker))
+    nprops = Set.toList $ getProperties tvr `Set.intersection` Set.fromList [prop_JOINPOINT, prop_ONESHOT]
+    ans = doTicks >> return ((setProperty prop_WRAPPER tvr,wrapper),(setProperties (prop_WORKER:nprops) tvr',worker))
hunk ./E/WorkerWrapper.hs 146
-    wwE (ELetRec ds e) = do
+    wwE ELetRec { eDefs = ds, eBody =  e } = do
hunk ./Info/Types.hs 67
+    getProperties :: a -> Set.Set Atom
+    setProperties :: [Atom] -> a -> a
+
+    setProperty prop x = setProperties [prop] x
+    setProperties xs x = foldr setProperty x xs
+    getProperty atom x = atom `Set.member` getProperties x
hunk ./Info/Types.hs 79
+    getProperties (Properties x) = x
+    setProperties [] p = p
+    setProperties xs (Properties x) = Properties (x `mappend` Set.fromList xs)
+
hunk ./Info/Types.hs 95
+    getProperties info = getProperties (Info.fetch info :: Properties)
+    setProperties [] info = info
+    setProperties props info = case Info.lookup info of
+        Just p@(Properties _) -> Info.insert (setProperties props p) info
+        Nothing -> Info.insert (Properties $ Set.fromList props) info
+
hunk ./Info/Types.hs 102
-setProperties :: HasProperties a => [Atom] -> a -> a
-setProperties [] nfo = nfo
-setProperties (p:ps) nfo = setProperty p (setProperties ps nfo)
+--setProperties :: HasProperties a => [Atom] -> a -> a
+--setProperties [] nfo = nfo
+--setProperties (p:ps) nfo = setProperty p (setProperties ps nfo)