diff --git a/rtree-c/src/ReduceC.hs b/rtree-c/src/ReduceC.hs index 1190e21aa632d64e900dc15623ced9bdae5cf77c..b6c5c38b9f843a04ad46ac39c5bc40d0c76e8774 100644 --- a/rtree-c/src/ReduceC.hs +++ b/rtree-c/src/ReduceC.hs @@ -28,12 +28,14 @@ import qualified Language.C.Data.Ident as C data Context = Context { keywords :: !(Set.Set Keyword) , typeDefs :: !(Map.Map C.Ident [C.CDeclarationSpecifier C.NodeInfo]) + , inlineExprs :: !(Map.Map C.Ident C.CExpr) } data Keyword = KeepMain | DoNoops | NoSemantics + | AllowEmptyDeclarations deriving (Show, Read, Enum, Eq, Ord) type CM m = (MonadReduce (String, C.Position) m, MonadReader Context m, MonadFail m) @@ -49,11 +51,19 @@ addTypeDefs ids cs Context{..} = , .. } +addInlineExpr :: C.Ident -> C.CExpr -> Context -> Context +addInlineExpr i e Context{..} = + Context + { inlineExprs = Map.insert i e inlineExprs + , .. + } + defaultContext :: Context defaultContext = Context { keywords = Set.fromList [KeepMain] , typeDefs = Map.empty + , inlineExprs = Map.empty } keyword :: (MonadReader Context m) => Keyword -> m Bool @@ -87,9 +97,37 @@ instance CReducible C.CTranslUnit where ("inline typedef " <> C.identToString ids, C.posOf r) (local (addTypeDefs [ids] rst) cont) ((r :) <$> local (addTypeDefs [ids] [C.CTypeSpec (C.CTypeDef ids n)]) cont) + -- A const + C.CDecl rec decl ni' -> do + (decl', cont') <- foldr reduceCDeclarationItem (pure ([], cont)) decl + allow <- keyword AllowEmptyDeclarations + case decl' of + [] + | allow -> + split ("remove empty declaration", C.posOf r) cont' do + (C.CDeclExt (C.CDecl rec decl' ni') :) <$> cont' + | otherwise -> cont' + _ow -> (C.CDeclExt (C.CDecl rec decl' ni') :) <$> cont' a -> don'tHandle a _r -> don'tHandle r +reduceCDeclarationItem + :: (CM m) + => C.CDeclarationItem C.NodeInfo + -> m ([C.CDeclarationItem C.NodeInfo], m a) + -> m ([C.CDeclarationItem C.NodeInfo], m a) +reduceCDeclarationItem d ma = case d of + C.CDeclarationItem + (C.CDeclr (Just i) [] Nothing [] ni) + (Just (C.CInitExpr c _)) + Nothing -> do + (ds, cont) <- ma + split + ("inline variable " <> C.identToString i, C.posOf ni) + (pure (ds, local (addInlineExpr i c) cont)) + (pure (d : ds, local (addInlineExpr i (C.CVar i ni)) cont)) + a -> don'tHandle a + prettyIdent :: C.Identifier C.NodeInfo -> [Char] prettyIdent (C.Ident s _ a) = s ++ " at " ++ show (C.posOfNode a) @@ -109,10 +147,18 @@ reduceCCompoundBlockItem r cont = case r of split ("remove statement", C.posOf r) cont do smt' <- reduceC smt (C.CBlockStmt smt' :) <$> cont - C.CBlockDecl decl -> do - case decl of - C.CDecl{} -> do - (r :) <$> cont + C.CBlockDecl declr -> do + case declr of + C.CDecl rec decl ni' -> do + (decl', cont') <- foldr reduceCDeclarationItem (pure ([], cont)) decl + allow <- keyword AllowEmptyDeclarations + case decl' of + [] + | allow -> + split ("remove empty declaration", C.posOf r) cont' do + (C.CBlockDecl (C.CDecl rec decl' ni') :) <$> cont' + | otherwise -> cont' + _ow -> (C.CBlockDecl (C.CDecl rec decl' ni') :) <$> cont' d -> don'tHandle d a -> don'tHandle a @@ -142,15 +188,6 @@ instance CReducible (C.CStatement C.NodeInfo) where pure $ C.CReturn Nothing ni a -> don'tHandle a -splitIf :: (MonadReduce l m) => Bool -> l -> m a -> m a -> m a -splitIf True s a b = split s a b -splitIf False _ _ b = b - -splitOn :: (MonadReduce l m, MonadReader Context m) => Keyword -> l -> m a -> m a -> m a -splitOn k s a b = do - con <- keyword k - splitIf con s a b - -- C.CCompound is cbi ni -> do -- cbi' <- collect (reduce @C.CCompoundBlockItem) cbi -- pure $ C.CCompound is cbi' ni @@ -214,8 +251,10 @@ instance CReducible C.CExpr where elhs' <- reduceC elhs erhs' <- reduceC erhs pure $ C.CBinary o elhs' erhs' ni - C.CVar i ni -> do - pure $ C.CVar i ni + C.CVar i _ -> do + asks (Map.lookup i . inlineExprs) >>= \case + Just mx -> pure mx + Nothing -> fail ("Could not find " <> show i) C.CConst x -> do pure $ C.CConst x C.CUnary o elhs ni -> do @@ -264,6 +303,15 @@ instance CReducible C.CExpr where -- where -- onBothExpr elhs erhs = onBoth (reduce elhs) (reduce erhs) +splitIf :: (MonadReduce l m) => Bool -> l -> m a -> m a -> m a +splitIf True s a b = split s a b +splitIf False _ _ b = b + +splitOn :: (MonadReduce l m, MonadReader Context m) => Keyword -> l -> m a -> m a -> m a +splitOn k s a b = do + con <- keyword k + splitIf con s a b + inlineTypeDefs :: forall d m. (Data d, MonadFail m, MonadReader Context m) => d -> m d inlineTypeDefs r = do case eqT @d @[C.CDeclarationSpecifier C.NodeInfo] of diff --git a/rtree-c/test/cases/constant.c b/rtree-c/test/cases/constant.c new file mode 100644 index 0000000000000000000000000000000000000000..1c591ba818f1ea54d1291a55b83e8846ce23ffbc --- /dev/null +++ b/rtree-c/test/cases/constant.c @@ -0,0 +1,6 @@ +int x = 10; + +int main () { + int y = 25; + return x + y; +} diff --git a/rtree-c/test/expected/constant/main.c b/rtree-c/test/expected/constant/main.c new file mode 100644 index 0000000000000000000000000000000000000000..2d97bcf93dfde4721d4fb10cf918207fcddd7aed --- /dev/null +++ b/rtree-c/test/expected/constant/main.c @@ -0,0 +1,6 @@ +int x = 10; +int main() +{ + int y = 25; + return x + y; +} diff --git a/rtree-c/test/expected/constant/reduction/r000.c b/rtree-c/test/expected/constant/reduction/r000.c new file mode 100644 index 0000000000000000000000000000000000000000..2d97bcf93dfde4721d4fb10cf918207fcddd7aed --- /dev/null +++ b/rtree-c/test/expected/constant/reduction/r000.c @@ -0,0 +1,6 @@ +int x = 10; +int main() +{ + int y = 25; + return x + y; +} diff --git a/rtree-c/test/expected/constant/reduction/r000.choices b/rtree-c/test/expected/constant/reduction/r000.choices new file mode 100644 index 0000000000000000000000000000000000000000..805d1e46d119fb64eed5ced44893cc390c035fb4 --- /dev/null +++ b/rtree-c/test/expected/constant/reduction/r000.choices @@ -0,0 +1,3 @@ +0 remove statement at ("test/cases/constant.c": line 5) +0 inline variable y at ("test/cases/constant.c": line 4) +0 inline variable x at ("test/cases/constant.c": line 1) diff --git a/rtree-c/test/expected/constant/reduction/r001.c b/rtree-c/test/expected/constant/reduction/r001.c new file mode 100644 index 0000000000000000000000000000000000000000..ce017c75b05c4627b85cec0cf810ffd93c75fbe8 --- /dev/null +++ b/rtree-c/test/expected/constant/reduction/r001.c @@ -0,0 +1,5 @@ +int x = 10; +int main() +{ + int y = 25; +} diff --git a/rtree-c/test/expected/constant/reduction/r001.choices b/rtree-c/test/expected/constant/reduction/r001.choices new file mode 100644 index 0000000000000000000000000000000000000000..ac41d353d720bad82da47eac348f5e9316cf5275 --- /dev/null +++ b/rtree-c/test/expected/constant/reduction/r001.choices @@ -0,0 +1,3 @@ +1 remove statement at ("test/cases/constant.c": line 5) +0 inline variable y at ("test/cases/constant.c": line 4) +0 inline variable x at ("test/cases/constant.c": line 1) diff --git a/rtree-c/test/expected/constant/reduction/r010.c b/rtree-c/test/expected/constant/reduction/r010.c new file mode 100644 index 0000000000000000000000000000000000000000..c9d30b9e5ad490feb040d19b73449ec52b004149 --- /dev/null +++ b/rtree-c/test/expected/constant/reduction/r010.c @@ -0,0 +1,5 @@ +int x = 10; +int main() +{ + return x + 25; +} diff --git a/rtree-c/test/expected/constant/reduction/r010.choices b/rtree-c/test/expected/constant/reduction/r010.choices new file mode 100644 index 0000000000000000000000000000000000000000..f19a549046cd9717a58eb4492353ea9c58846037 --- /dev/null +++ b/rtree-c/test/expected/constant/reduction/r010.choices @@ -0,0 +1,3 @@ +0 remove statement at ("test/cases/constant.c": line 5) +1 inline variable y at ("test/cases/constant.c": line 4) +0 inline variable x at ("test/cases/constant.c": line 1) diff --git a/rtree-c/test/expected/while-loops/reduction/r1.c b/rtree-c/test/expected/constant/reduction/r011.c similarity index 50% rename from rtree-c/test/expected/while-loops/reduction/r1.c rename to rtree-c/test/expected/constant/reduction/r011.c index 28c57198a6a492b3111dc1e96a5e9396ba9beb39..78bfe213fc82db904b7b2192675760ce23c3e333 100644 --- a/rtree-c/test/expected/while-loops/reduction/r1.c +++ b/rtree-c/test/expected/constant/reduction/r011.c @@ -1,4 +1,4 @@ +int x = 10; int main() { - int i = 0; } diff --git a/rtree-c/test/expected/constant/reduction/r011.choices b/rtree-c/test/expected/constant/reduction/r011.choices new file mode 100644 index 0000000000000000000000000000000000000000..22358a3035b055dbc9901595f4af49a3f92e3caa --- /dev/null +++ b/rtree-c/test/expected/constant/reduction/r011.choices @@ -0,0 +1,3 @@ +1 remove statement at ("test/cases/constant.c": line 5) +1 inline variable y at ("test/cases/constant.c": line 4) +0 inline variable x at ("test/cases/constant.c": line 1) diff --git a/rtree-c/test/expected/constant/reduction/r100.c b/rtree-c/test/expected/constant/reduction/r100.c new file mode 100644 index 0000000000000000000000000000000000000000..1c93710aea3b96651b053d28c0c64b1348377d33 --- /dev/null +++ b/rtree-c/test/expected/constant/reduction/r100.c @@ -0,0 +1,5 @@ +int main() +{ + int y = 25; + return 10 + y; +} diff --git a/rtree-c/test/expected/constant/reduction/r100.choices b/rtree-c/test/expected/constant/reduction/r100.choices new file mode 100644 index 0000000000000000000000000000000000000000..2bc5629417ea19a3ed8c35af79ca4967a7fba06f --- /dev/null +++ b/rtree-c/test/expected/constant/reduction/r100.choices @@ -0,0 +1,3 @@ +0 remove statement at ("test/cases/constant.c": line 5) +0 inline variable y at ("test/cases/constant.c": line 4) +1 inline variable x at ("test/cases/constant.c": line 1) diff --git a/rtree-c/test/expected/constant/reduction/r101.c b/rtree-c/test/expected/constant/reduction/r101.c new file mode 100644 index 0000000000000000000000000000000000000000..b6737657ff782d61f57b7bf4485e388310c38207 --- /dev/null +++ b/rtree-c/test/expected/constant/reduction/r101.c @@ -0,0 +1,4 @@ +int main() +{ + int y = 25; +} diff --git a/rtree-c/test/expected/constant/reduction/r101.choices b/rtree-c/test/expected/constant/reduction/r101.choices new file mode 100644 index 0000000000000000000000000000000000000000..e49e1e4b65150c4b7693bba10e9a26d1722c9e31 --- /dev/null +++ b/rtree-c/test/expected/constant/reduction/r101.choices @@ -0,0 +1,3 @@ +1 remove statement at ("test/cases/constant.c": line 5) +0 inline variable y at ("test/cases/constant.c": line 4) +1 inline variable x at ("test/cases/constant.c": line 1) diff --git a/rtree-c/test/expected/constant/reduction/r110.c b/rtree-c/test/expected/constant/reduction/r110.c new file mode 100644 index 0000000000000000000000000000000000000000..fd039c7be7e8c0d5329e00e1990368a2b7611ce6 --- /dev/null +++ b/rtree-c/test/expected/constant/reduction/r110.c @@ -0,0 +1,4 @@ +int main() +{ + return 10 + 25; +} diff --git a/rtree-c/test/expected/constant/reduction/r110.choices b/rtree-c/test/expected/constant/reduction/r110.choices new file mode 100644 index 0000000000000000000000000000000000000000..f84f675a49a5d8d7d95ed9fcba369e1dc22a2f20 --- /dev/null +++ b/rtree-c/test/expected/constant/reduction/r110.choices @@ -0,0 +1,3 @@ +0 remove statement at ("test/cases/constant.c": line 5) +1 inline variable y at ("test/cases/constant.c": line 4) +1 inline variable x at ("test/cases/constant.c": line 1) diff --git a/rtree-c/test/expected/constant/reduction/r111.c b/rtree-c/test/expected/constant/reduction/r111.c new file mode 100644 index 0000000000000000000000000000000000000000..5047a34e393afabd94f779966acc69b8edf9570d --- /dev/null +++ b/rtree-c/test/expected/constant/reduction/r111.c @@ -0,0 +1,3 @@ +int main() +{ +} diff --git a/rtree-c/test/expected/constant/reduction/r111.choices b/rtree-c/test/expected/constant/reduction/r111.choices new file mode 100644 index 0000000000000000000000000000000000000000..e0fb7c237aaf449cba7c5c205152e157955abb70 --- /dev/null +++ b/rtree-c/test/expected/constant/reduction/r111.choices @@ -0,0 +1,3 @@ +1 remove statement at ("test/cases/constant.c": line 5) +1 inline variable y at ("test/cases/constant.c": line 4) +1 inline variable x at ("test/cases/constant.c": line 1) diff --git a/rtree-c/test/expected/typedef/reduction/r000.c b/rtree-c/test/expected/typedef/reduction/r0000.c similarity index 100% rename from rtree-c/test/expected/typedef/reduction/r000.c rename to rtree-c/test/expected/typedef/reduction/r0000.c diff --git a/rtree-c/test/expected/typedef/reduction/r000.choices b/rtree-c/test/expected/typedef/reduction/r0000.choices similarity index 75% rename from rtree-c/test/expected/typedef/reduction/r000.choices rename to rtree-c/test/expected/typedef/reduction/r0000.choices index b281d1cc056d4d8dca690877b4f04f5b9ad42607..fa1b06c8e6595d32756258576f2307cde1e96280 100644 --- a/rtree-c/test/expected/typedef/reduction/r000.choices +++ b/rtree-c/test/expected/typedef/reduction/r0000.choices @@ -1,3 +1,4 @@ 0 remove statement at ("test/cases/typedef.c": line 9) +0 inline variable x at ("test/cases/typedef.c": line 8) 0 remove function f at ("test/cases/typedef.c": line 4) 0 inline typedef uint64 at ("test/cases/typedef.c": line 2) diff --git a/rtree-c/test/expected/typedef/reduction/r001.c b/rtree-c/test/expected/typedef/reduction/r0001.c similarity index 100% rename from rtree-c/test/expected/typedef/reduction/r001.c rename to rtree-c/test/expected/typedef/reduction/r0001.c diff --git a/rtree-c/test/expected/typedef/reduction/r001.choices b/rtree-c/test/expected/typedef/reduction/r0001.choices similarity index 75% rename from rtree-c/test/expected/typedef/reduction/r001.choices rename to rtree-c/test/expected/typedef/reduction/r0001.choices index a44e5d57ac287e233313d33ee873448ea5efdea1..9c6d7a29d18ea39ee552b5dbb3c25adfd704220c 100644 --- a/rtree-c/test/expected/typedef/reduction/r001.choices +++ b/rtree-c/test/expected/typedef/reduction/r0001.choices @@ -1,3 +1,4 @@ 1 remove statement at ("test/cases/typedef.c": line 9) +0 inline variable x at ("test/cases/typedef.c": line 8) 0 remove function f at ("test/cases/typedef.c": line 4) 0 inline typedef uint64 at ("test/cases/typedef.c": line 2) diff --git a/rtree-c/test/expected/typedef/reduction/r0010.c b/rtree-c/test/expected/typedef/reduction/r0010.c new file mode 100644 index 0000000000000000000000000000000000000000..d13fa764ff869364db73713978f3495c2e958d75 --- /dev/null +++ b/rtree-c/test/expected/typedef/reduction/r0010.c @@ -0,0 +1,8 @@ +typedef int uint64; +void f(uint64 a) +{ +} +int main() +{ + return 1; +} diff --git a/rtree-c/test/expected/typedef/reduction/r0010.choices b/rtree-c/test/expected/typedef/reduction/r0010.choices new file mode 100644 index 0000000000000000000000000000000000000000..986dac1ebe69e74d0a19d4f7e07a6a80aac4ffd0 --- /dev/null +++ b/rtree-c/test/expected/typedef/reduction/r0010.choices @@ -0,0 +1,4 @@ +0 remove statement at ("test/cases/typedef.c": line 9) +1 inline variable x at ("test/cases/typedef.c": line 8) +0 remove function f at ("test/cases/typedef.c": line 4) +0 inline typedef uint64 at ("test/cases/typedef.c": line 2) diff --git a/rtree-c/test/expected/typedef/reduction/r0011.c b/rtree-c/test/expected/typedef/reduction/r0011.c new file mode 100644 index 0000000000000000000000000000000000000000..1ce0a1b4da14e3c937604fee4dba5a9544aff775 --- /dev/null +++ b/rtree-c/test/expected/typedef/reduction/r0011.c @@ -0,0 +1,7 @@ +typedef int uint64; +void f(uint64 a) +{ +} +int main() +{ +} diff --git a/rtree-c/test/expected/typedef/reduction/r0011.choices b/rtree-c/test/expected/typedef/reduction/r0011.choices new file mode 100644 index 0000000000000000000000000000000000000000..81989ef72ad294d9967dd5f4d6a9adab191974e1 --- /dev/null +++ b/rtree-c/test/expected/typedef/reduction/r0011.choices @@ -0,0 +1,4 @@ +1 remove statement at ("test/cases/typedef.c": line 9) +1 inline variable x at ("test/cases/typedef.c": line 8) +0 remove function f at ("test/cases/typedef.c": line 4) +0 inline typedef uint64 at ("test/cases/typedef.c": line 2) diff --git a/rtree-c/test/expected/typedef/reduction/r010.c b/rtree-c/test/expected/typedef/reduction/r0100.c similarity index 100% rename from rtree-c/test/expected/typedef/reduction/r010.c rename to rtree-c/test/expected/typedef/reduction/r0100.c diff --git a/rtree-c/test/expected/typedef/reduction/r010.choices b/rtree-c/test/expected/typedef/reduction/r0100.choices similarity index 75% rename from rtree-c/test/expected/typedef/reduction/r010.choices rename to rtree-c/test/expected/typedef/reduction/r0100.choices index dbaeb2cd58084015017a8237845112fa630a5eba..145e4f841fda106b262dd5a47f9148ecc6de549b 100644 --- a/rtree-c/test/expected/typedef/reduction/r010.choices +++ b/rtree-c/test/expected/typedef/reduction/r0100.choices @@ -1,3 +1,4 @@ 0 remove statement at ("test/cases/typedef.c": line 9) +0 inline variable x at ("test/cases/typedef.c": line 8) 1 remove function f at ("test/cases/typedef.c": line 4) 0 inline typedef uint64 at ("test/cases/typedef.c": line 2) diff --git a/rtree-c/test/expected/typedef/reduction/r011.c b/rtree-c/test/expected/typedef/reduction/r0101.c similarity index 100% rename from rtree-c/test/expected/typedef/reduction/r011.c rename to rtree-c/test/expected/typedef/reduction/r0101.c diff --git a/rtree-c/test/expected/typedef/reduction/r011.choices b/rtree-c/test/expected/typedef/reduction/r0101.choices similarity index 75% rename from rtree-c/test/expected/typedef/reduction/r011.choices rename to rtree-c/test/expected/typedef/reduction/r0101.choices index 92fc7aed082767056d3e534e2556b35ae2a40f85..0bda8fbe7c2147d2a5553d29d893c694a13596f2 100644 --- a/rtree-c/test/expected/typedef/reduction/r011.choices +++ b/rtree-c/test/expected/typedef/reduction/r0101.choices @@ -1,3 +1,4 @@ 1 remove statement at ("test/cases/typedef.c": line 9) +0 inline variable x at ("test/cases/typedef.c": line 8) 1 remove function f at ("test/cases/typedef.c": line 4) 0 inline typedef uint64 at ("test/cases/typedef.c": line 2) diff --git a/rtree-c/test/expected/typedef/reduction/r0110.c b/rtree-c/test/expected/typedef/reduction/r0110.c new file mode 100644 index 0000000000000000000000000000000000000000..239f38da754c844fc4b0457660d2e10d61d62f2f --- /dev/null +++ b/rtree-c/test/expected/typedef/reduction/r0110.c @@ -0,0 +1,5 @@ +typedef int uint64; +int main() +{ + return 1; +} diff --git a/rtree-c/test/expected/typedef/reduction/r0110.choices b/rtree-c/test/expected/typedef/reduction/r0110.choices new file mode 100644 index 0000000000000000000000000000000000000000..8f09241ff2e8edca31007a2da29e915342f8a1cf --- /dev/null +++ b/rtree-c/test/expected/typedef/reduction/r0110.choices @@ -0,0 +1,4 @@ +0 remove statement at ("test/cases/typedef.c": line 9) +1 inline variable x at ("test/cases/typedef.c": line 8) +1 remove function f at ("test/cases/typedef.c": line 4) +0 inline typedef uint64 at ("test/cases/typedef.c": line 2) diff --git a/rtree-c/test/expected/typedef/reduction/r0111.c b/rtree-c/test/expected/typedef/reduction/r0111.c new file mode 100644 index 0000000000000000000000000000000000000000..17825b9e9424118eaa839851f59cf1e5426b394c --- /dev/null +++ b/rtree-c/test/expected/typedef/reduction/r0111.c @@ -0,0 +1,4 @@ +typedef int uint64; +int main() +{ +} diff --git a/rtree-c/test/expected/typedef/reduction/r0111.choices b/rtree-c/test/expected/typedef/reduction/r0111.choices new file mode 100644 index 0000000000000000000000000000000000000000..291f3872f4326a47f9fa22cec8531f60cd0f3dcd --- /dev/null +++ b/rtree-c/test/expected/typedef/reduction/r0111.choices @@ -0,0 +1,4 @@ +1 remove statement at ("test/cases/typedef.c": line 9) +1 inline variable x at ("test/cases/typedef.c": line 8) +1 remove function f at ("test/cases/typedef.c": line 4) +0 inline typedef uint64 at ("test/cases/typedef.c": line 2) diff --git a/rtree-c/test/expected/typedef/reduction/r100.c b/rtree-c/test/expected/typedef/reduction/r1000.c similarity index 100% rename from rtree-c/test/expected/typedef/reduction/r100.c rename to rtree-c/test/expected/typedef/reduction/r1000.c diff --git a/rtree-c/test/expected/typedef/reduction/r100.choices b/rtree-c/test/expected/typedef/reduction/r1000.choices similarity index 75% rename from rtree-c/test/expected/typedef/reduction/r100.choices rename to rtree-c/test/expected/typedef/reduction/r1000.choices index 48c32e18558929bdc7b8d123db70aef4b17775bb..a7a7a5002ff2b5714cf3dafd9e897bb4ec864b61 100644 --- a/rtree-c/test/expected/typedef/reduction/r100.choices +++ b/rtree-c/test/expected/typedef/reduction/r1000.choices @@ -1,3 +1,4 @@ 0 remove statement at ("test/cases/typedef.c": line 9) +0 inline variable x at ("test/cases/typedef.c": line 8) 0 remove function f at ("test/cases/typedef.c": line 4) 1 inline typedef uint64 at ("test/cases/typedef.c": line 2) diff --git a/rtree-c/test/expected/typedef/reduction/r101.c b/rtree-c/test/expected/typedef/reduction/r1001.c similarity index 100% rename from rtree-c/test/expected/typedef/reduction/r101.c rename to rtree-c/test/expected/typedef/reduction/r1001.c diff --git a/rtree-c/test/expected/typedef/reduction/r101.choices b/rtree-c/test/expected/typedef/reduction/r1001.choices similarity index 75% rename from rtree-c/test/expected/typedef/reduction/r101.choices rename to rtree-c/test/expected/typedef/reduction/r1001.choices index 76ba0838e1966d7c327004b76996ac790bcfa1a9..d8280cc9d7f16472a3438f0c4b9f1755d74cf32d 100644 --- a/rtree-c/test/expected/typedef/reduction/r101.choices +++ b/rtree-c/test/expected/typedef/reduction/r1001.choices @@ -1,3 +1,4 @@ 1 remove statement at ("test/cases/typedef.c": line 9) +0 inline variable x at ("test/cases/typedef.c": line 8) 0 remove function f at ("test/cases/typedef.c": line 4) 1 inline typedef uint64 at ("test/cases/typedef.c": line 2) diff --git a/rtree-c/test/expected/typedef/reduction/r1010.c b/rtree-c/test/expected/typedef/reduction/r1010.c new file mode 100644 index 0000000000000000000000000000000000000000..e11fc7db8535b827ed08921ae1187b553db5c19b --- /dev/null +++ b/rtree-c/test/expected/typedef/reduction/r1010.c @@ -0,0 +1,7 @@ +void f(int a) +{ +} +int main() +{ + return 1; +} diff --git a/rtree-c/test/expected/typedef/reduction/r1010.choices b/rtree-c/test/expected/typedef/reduction/r1010.choices new file mode 100644 index 0000000000000000000000000000000000000000..4b158a3624bdd6d66fc8d2334a170db7937637f9 --- /dev/null +++ b/rtree-c/test/expected/typedef/reduction/r1010.choices @@ -0,0 +1,4 @@ +0 remove statement at ("test/cases/typedef.c": line 9) +1 inline variable x at ("test/cases/typedef.c": line 8) +0 remove function f at ("test/cases/typedef.c": line 4) +1 inline typedef uint64 at ("test/cases/typedef.c": line 2) diff --git a/rtree-c/test/expected/typedef/reduction/r1011.c b/rtree-c/test/expected/typedef/reduction/r1011.c new file mode 100644 index 0000000000000000000000000000000000000000..3fa6be1ce4f41bead5cd77acb39b5eabda8c589d --- /dev/null +++ b/rtree-c/test/expected/typedef/reduction/r1011.c @@ -0,0 +1,6 @@ +void f(int a) +{ +} +int main() +{ +} diff --git a/rtree-c/test/expected/typedef/reduction/r1011.choices b/rtree-c/test/expected/typedef/reduction/r1011.choices new file mode 100644 index 0000000000000000000000000000000000000000..76cb6f2d73496a11b52f97431706bd4dd03cb1de --- /dev/null +++ b/rtree-c/test/expected/typedef/reduction/r1011.choices @@ -0,0 +1,4 @@ +1 remove statement at ("test/cases/typedef.c": line 9) +1 inline variable x at ("test/cases/typedef.c": line 8) +0 remove function f at ("test/cases/typedef.c": line 4) +1 inline typedef uint64 at ("test/cases/typedef.c": line 2) diff --git a/rtree-c/test/expected/typedef/reduction/r110.c b/rtree-c/test/expected/typedef/reduction/r1100.c similarity index 100% rename from rtree-c/test/expected/typedef/reduction/r110.c rename to rtree-c/test/expected/typedef/reduction/r1100.c diff --git a/rtree-c/test/expected/typedef/reduction/r110.choices b/rtree-c/test/expected/typedef/reduction/r1100.choices similarity index 75% rename from rtree-c/test/expected/typedef/reduction/r110.choices rename to rtree-c/test/expected/typedef/reduction/r1100.choices index e70ee972eeca9c39b5ab1c9f833f507f7c2fc429..9ee0fbdbfa1db3e739c12424206f2478ee8714f1 100644 --- a/rtree-c/test/expected/typedef/reduction/r110.choices +++ b/rtree-c/test/expected/typedef/reduction/r1100.choices @@ -1,3 +1,4 @@ 0 remove statement at ("test/cases/typedef.c": line 9) +0 inline variable x at ("test/cases/typedef.c": line 8) 1 remove function f at ("test/cases/typedef.c": line 4) 1 inline typedef uint64 at ("test/cases/typedef.c": line 2) diff --git a/rtree-c/test/expected/typedef/reduction/r111.c b/rtree-c/test/expected/typedef/reduction/r1101.c similarity index 100% rename from rtree-c/test/expected/typedef/reduction/r111.c rename to rtree-c/test/expected/typedef/reduction/r1101.c diff --git a/rtree-c/test/expected/typedef/reduction/r111.choices b/rtree-c/test/expected/typedef/reduction/r1101.choices similarity index 75% rename from rtree-c/test/expected/typedef/reduction/r111.choices rename to rtree-c/test/expected/typedef/reduction/r1101.choices index bceac89ebba248df4d51bad64bbcd0cbdd31bc65..1e5ebac29c639c077c68fadfbcb41260eecebd9a 100644 --- a/rtree-c/test/expected/typedef/reduction/r111.choices +++ b/rtree-c/test/expected/typedef/reduction/r1101.choices @@ -1,3 +1,4 @@ 1 remove statement at ("test/cases/typedef.c": line 9) +0 inline variable x at ("test/cases/typedef.c": line 8) 1 remove function f at ("test/cases/typedef.c": line 4) 1 inline typedef uint64 at ("test/cases/typedef.c": line 2) diff --git a/rtree-c/test/expected/typedef/reduction/r1110.c b/rtree-c/test/expected/typedef/reduction/r1110.c new file mode 100644 index 0000000000000000000000000000000000000000..2227c3aa8f2039e763e3b1aefe282dfc7c5e9ac5 --- /dev/null +++ b/rtree-c/test/expected/typedef/reduction/r1110.c @@ -0,0 +1,4 @@ +int main() +{ + return 1; +} diff --git a/rtree-c/test/expected/typedef/reduction/r1110.choices b/rtree-c/test/expected/typedef/reduction/r1110.choices new file mode 100644 index 0000000000000000000000000000000000000000..2b8312610e1d15b698520e473b45113b87ee9bfe --- /dev/null +++ b/rtree-c/test/expected/typedef/reduction/r1110.choices @@ -0,0 +1,4 @@ +0 remove statement at ("test/cases/typedef.c": line 9) +1 inline variable x at ("test/cases/typedef.c": line 8) +1 remove function f at ("test/cases/typedef.c": line 4) +1 inline typedef uint64 at ("test/cases/typedef.c": line 2) diff --git a/rtree-c/test/expected/typedef/reduction/r1111.c b/rtree-c/test/expected/typedef/reduction/r1111.c new file mode 100644 index 0000000000000000000000000000000000000000..5047a34e393afabd94f779966acc69b8edf9570d --- /dev/null +++ b/rtree-c/test/expected/typedef/reduction/r1111.c @@ -0,0 +1,3 @@ +int main() +{ +} diff --git a/rtree-c/test/expected/typedef/reduction/r1111.choices b/rtree-c/test/expected/typedef/reduction/r1111.choices new file mode 100644 index 0000000000000000000000000000000000000000..6c02b126cbc0bd321d5c230fed9ef77386727329 --- /dev/null +++ b/rtree-c/test/expected/typedef/reduction/r1111.choices @@ -0,0 +1,4 @@ +1 remove statement at ("test/cases/typedef.c": line 9) +1 inline variable x at ("test/cases/typedef.c": line 8) +1 remove function f at ("test/cases/typedef.c": line 4) +1 inline typedef uint64 at ("test/cases/typedef.c": line 2) diff --git a/rtree-c/test/expected/while-loops/reduction/r00.c b/rtree-c/test/expected/while-loops/reduction/r000.c similarity index 100% rename from rtree-c/test/expected/while-loops/reduction/r00.c rename to rtree-c/test/expected/while-loops/reduction/r000.c diff --git a/rtree-c/test/expected/while-loops/reduction/r00.choices b/rtree-c/test/expected/while-loops/reduction/r000.choices similarity index 66% rename from rtree-c/test/expected/while-loops/reduction/r00.choices rename to rtree-c/test/expected/while-loops/reduction/r000.choices index 4fee46cf1f79a8ce57fa9a30b2ab28878952f482..7712d43e629a34c2a3b633011741ded2268b6c94 100644 --- a/rtree-c/test/expected/while-loops/reduction/r00.choices +++ b/rtree-c/test/expected/while-loops/reduction/r000.choices @@ -1,2 +1,3 @@ 0 remove statement at ("test/cases/while-loops.c": line 4) 0 remove statement at ("test/cases/while-loops.c": line 3) +0 inline variable i at ("test/cases/while-loops.c": line 2) diff --git a/rtree-c/test/expected/while-loops/reduction/r001.c b/rtree-c/test/expected/while-loops/reduction/r001.c new file mode 100644 index 0000000000000000000000000000000000000000..714143b53b7c7e544b37c7a0753133581e2673ca --- /dev/null +++ b/rtree-c/test/expected/while-loops/reduction/r001.c @@ -0,0 +1,7 @@ +int main() +{ + int i = 0; + while (i < 10) + { + } +} diff --git a/rtree-c/test/expected/while-loops/reduction/r001.choices b/rtree-c/test/expected/while-loops/reduction/r001.choices new file mode 100644 index 0000000000000000000000000000000000000000..f04eb9779dcdd1f0f610631f3d9c9d7d85883d2d --- /dev/null +++ b/rtree-c/test/expected/while-loops/reduction/r001.choices @@ -0,0 +1,3 @@ +1 remove statement at ("test/cases/while-loops.c": line 4) +0 remove statement at ("test/cases/while-loops.c": line 3) +0 inline variable i at ("test/cases/while-loops.c": line 2) diff --git a/rtree-c/test/expected/while-loops/reduction/r01.c b/rtree-c/test/expected/while-loops/reduction/r01.c index 714143b53b7c7e544b37c7a0753133581e2673ca..28c57198a6a492b3111dc1e96a5e9396ba9beb39 100644 --- a/rtree-c/test/expected/while-loops/reduction/r01.c +++ b/rtree-c/test/expected/while-loops/reduction/r01.c @@ -1,7 +1,4 @@ int main() { int i = 0; - while (i < 10) - { - } } diff --git a/rtree-c/test/expected/while-loops/reduction/r01.choices b/rtree-c/test/expected/while-loops/reduction/r01.choices index 69ec6af359513d77d57c1fafb3c512098af6f0ab..a891b77d9a4d800f3247c06fd59131bad2bad7f0 100644 --- a/rtree-c/test/expected/while-loops/reduction/r01.choices +++ b/rtree-c/test/expected/while-loops/reduction/r01.choices @@ -1,2 +1,2 @@ -1 remove statement at ("test/cases/while-loops.c": line 4) -0 remove statement at ("test/cases/while-loops.c": line 3) +1 remove statement at ("test/cases/while-loops.c": line 3) +0 inline variable i at ("test/cases/while-loops.c": line 2) diff --git a/rtree-c/test/expected/while-loops/reduction/r1.choices b/rtree-c/test/expected/while-loops/reduction/r1.choices deleted file mode 100644 index efbb5949e944a195a22d82ee752f00cf2a476370..0000000000000000000000000000000000000000 --- a/rtree-c/test/expected/while-loops/reduction/r1.choices +++ /dev/null @@ -1 +0,0 @@ -1 remove statement at ("test/cases/while-loops.c": line 3) diff --git a/rtree-c/test/expected/while-loops/reduction/r100.c b/rtree-c/test/expected/while-loops/reduction/r100.c new file mode 100644 index 0000000000000000000000000000000000000000..45b4b7d818fe7858b9d3d0a947864f06dd4ee878 --- /dev/null +++ b/rtree-c/test/expected/while-loops/reduction/r100.c @@ -0,0 +1,7 @@ +int main() +{ + while (0 < 10) + { + 0++; + } +} diff --git a/rtree-c/test/expected/while-loops/reduction/r100.choices b/rtree-c/test/expected/while-loops/reduction/r100.choices new file mode 100644 index 0000000000000000000000000000000000000000..cdd24cf81de2e3678302398cb7b2b6e904a632fd --- /dev/null +++ b/rtree-c/test/expected/while-loops/reduction/r100.choices @@ -0,0 +1,3 @@ +0 remove statement at ("test/cases/while-loops.c": line 4) +0 remove statement at ("test/cases/while-loops.c": line 3) +1 inline variable i at ("test/cases/while-loops.c": line 2) diff --git a/rtree-c/test/expected/while-loops/reduction/r101.c b/rtree-c/test/expected/while-loops/reduction/r101.c new file mode 100644 index 0000000000000000000000000000000000000000..db783f8abc2aa6c74e9d960fe7adcb51b6e6aaa2 --- /dev/null +++ b/rtree-c/test/expected/while-loops/reduction/r101.c @@ -0,0 +1,6 @@ +int main() +{ + while (0 < 10) + { + } +} diff --git a/rtree-c/test/expected/while-loops/reduction/r101.choices b/rtree-c/test/expected/while-loops/reduction/r101.choices new file mode 100644 index 0000000000000000000000000000000000000000..c054f9bf22f796706f42415497dbd8498f4eaca7 --- /dev/null +++ b/rtree-c/test/expected/while-loops/reduction/r101.choices @@ -0,0 +1,3 @@ +1 remove statement at ("test/cases/while-loops.c": line 4) +0 remove statement at ("test/cases/while-loops.c": line 3) +1 inline variable i at ("test/cases/while-loops.c": line 2) diff --git a/rtree-c/test/expected/while-loops/reduction/r11.c b/rtree-c/test/expected/while-loops/reduction/r11.c new file mode 100644 index 0000000000000000000000000000000000000000..5047a34e393afabd94f779966acc69b8edf9570d --- /dev/null +++ b/rtree-c/test/expected/while-loops/reduction/r11.c @@ -0,0 +1,3 @@ +int main() +{ +} diff --git a/rtree-c/test/expected/while-loops/reduction/r11.choices b/rtree-c/test/expected/while-loops/reduction/r11.choices new file mode 100644 index 0000000000000000000000000000000000000000..7ad5e3f7c856b11eb527175b51ccf044ab2a113e --- /dev/null +++ b/rtree-c/test/expected/while-loops/reduction/r11.choices @@ -0,0 +1,2 @@ +1 remove statement at ("test/cases/while-loops.c": line 3) +1 inline variable i at ("test/cases/while-loops.c": line 2)