Allow {} in arithmetic for loops

This commit is contained in:
Vidar Holen 2014-01-26 12:44:51 -08:00
parent 7ad0110443
commit 4262c4b1bf
2 changed files with 14 additions and 7 deletions

View file

@ -1371,6 +1371,7 @@ checkSpuriousExec = doLists
doLists (T_WhileExpression _ _ cmds) = doList cmds doLists (T_WhileExpression _ _ cmds) = doList cmds
doLists (T_UntilExpression _ _ cmds) = doList cmds doLists (T_UntilExpression _ _ cmds) = doList cmds
doLists (T_ForIn _ _ _ cmds) = doList cmds doLists (T_ForIn _ _ _ cmds) = doList cmds
doLists (T_ForArithmetic _ _ _ _ cmds) = doList cmds
doLists (T_IfExpression _ thens elses) = do doLists (T_IfExpression _ thens elses) = do
mapM_ (\(_, l) -> doList l) thens mapM_ (\(_, l) -> doList l) thens
doList elses doList elses
@ -1968,6 +1969,7 @@ prop_checkCdAndBack3 = verifyNot (checkCdAndBack Sh) "while [[ $PWD != / ]]; do
checkCdAndBack shell = doLists checkCdAndBack shell = doLists
where where
doLists (T_ForIn _ _ _ cmds) = doList cmds doLists (T_ForIn _ _ _ cmds) = doList cmds
doLists (T_ForArithmetic _ _ _ _ cmds) = doList cmds
doLists (T_WhileExpression _ _ cmds) = doList cmds doLists (T_WhileExpression _ _ cmds) = doList cmds
doLists (T_UntilExpression _ _ cmds) = doList cmds doLists (T_UntilExpression _ _ cmds) = doList cmds
doLists (T_IfExpression _ thens elses) = do doLists (T_IfExpression _ thens elses) = do

View file

@ -1486,15 +1486,14 @@ prop_readForClause6 = isOk readForClause "for ((;;))\ndo echo $i\ndone"
prop_readForClause7 = isOk readForClause "for ((;;)) do echo $i\ndone" prop_readForClause7 = isOk readForClause "for ((;;)) do echo $i\ndone"
prop_readForClause8 = isOk readForClause "for ((;;)) ; do echo $i\ndone" prop_readForClause8 = isOk readForClause "for ((;;)) ; do echo $i\ndone"
prop_readForClause9 = isOk readForClause "for i do true; done" prop_readForClause9 = isOk readForClause "for i do true; done"
prop_readForClause10= isOk readForClause "for ((;;)) { true; }"
readForClause = called "for loop" $ do readForClause = called "for loop" $ do
pos <- getPosition pos <- getPosition
(T_For id) <- g_For (T_For id) <- g_For
spacing spacing
typ <- (readRegular <|> readArithmetic) readRegular id pos <|> readArithmetic id pos
group <- readDoGroup pos
typ id group
where where
readArithmetic = called "arithmetic for condition" $ do readArithmetic id pos = called "arithmetic for condition" $ do
try $ string "((" try $ string "(("
x <- readArithmeticContents x <- readArithmeticContents
char ';' >> spacing char ';' >> spacing
@ -1505,13 +1504,19 @@ readForClause = called "for loop" $ do
string "))" string "))"
spacing spacing
optional $ readSequentialSep >> spacing optional $ readSequentialSep >> spacing
return $ \id group -> (return $ T_ForArithmetic id x y z group) group <- readBraced <|> readDoGroup pos
return $ T_ForArithmetic id x y z group
readRegular = do readBraced = do
(T_BraceGroup _ list) <- readBraceGroup
return list
readRegular id pos = do
name <- readVariableName name <- readVariableName
spacing spacing
values <- readInClause <|> (optional readSequentialSep >> return []) values <- readInClause <|> (optional readSequentialSep >> return [])
return $ \id group -> (return $ T_ForIn id name values group) group <- readDoGroup pos
return $ T_ForIn id name values group
prop_readSelectClause1 = isOk readSelectClause "select foo in *; do echo $foo; done" prop_readSelectClause1 = isOk readSelectClause "select foo in *; do echo $foo; done"
prop_readSelectClause2 = isOk readSelectClause "select foo; do echo $foo; done" prop_readSelectClause2 = isOk readSelectClause "select foo; do echo $foo; done"