Parse ksh nested arrays and warn about var=((
This commit is contained in:
parent
5c01b6c7f5
commit
3cf8b9ceab
|
@ -2400,6 +2400,9 @@ prop_readAssignmentWord9c= isOk readAssignmentWord "foo= #bar"
|
||||||
prop_readAssignmentWord10= isWarning readAssignmentWord "foo$n=42"
|
prop_readAssignmentWord10= isWarning readAssignmentWord "foo$n=42"
|
||||||
prop_readAssignmentWord11= isOk readAssignmentWord "foo=([a]=b [c] [d]= [e f )"
|
prop_readAssignmentWord11= isOk readAssignmentWord "foo=([a]=b [c] [d]= [e f )"
|
||||||
prop_readAssignmentWord12= isOk readAssignmentWord "a[b <<= 3 + c]='thing'"
|
prop_readAssignmentWord12= isOk readAssignmentWord "a[b <<= 3 + c]='thing'"
|
||||||
|
prop_readAssignmentWord13= isOk readAssignmentWord "var=( (1 2) (3 4) )"
|
||||||
|
prop_readAssignmentWord14= isOk readAssignmentWord "var=( 1 [2]=(3 4) )"
|
||||||
|
prop_readAssignmentWord15= isOk readAssignmentWord "var=(1 [2]=(3 4))"
|
||||||
readAssignmentWord = readAssignmentWordExt True
|
readAssignmentWord = readAssignmentWordExt True
|
||||||
readWellFormedAssignment = readAssignmentWordExt False
|
readWellFormedAssignment = readAssignmentWordExt False
|
||||||
readAssignmentWordExt lenient = try $ do
|
readAssignmentWordExt lenient = try $ do
|
||||||
|
@ -2459,7 +2462,11 @@ readArrayIndex = do
|
||||||
readArray :: Monad m => SCParser m Token
|
readArray :: Monad m => SCParser m Token
|
||||||
readArray = called "array assignment" $ do
|
readArray = called "array assignment" $ do
|
||||||
id <- getNextId
|
id <- getNextId
|
||||||
|
opening <- getPosition
|
||||||
char '('
|
char '('
|
||||||
|
optional $ do
|
||||||
|
lookAhead $ char '('
|
||||||
|
parseProblemAt opening ErrorC 1116 "Missing $ on a $((..)) expression? (or use ( ( for arrays)."
|
||||||
allspacing
|
allspacing
|
||||||
words <- readElement `reluctantlyTill` char ')'
|
words <- readElement `reluctantlyTill` char ')'
|
||||||
char ')' <|> fail "Expected ) to close array assignment"
|
char ')' <|> fail "Expected ) to close array assignment"
|
||||||
|
@ -2472,9 +2479,9 @@ readArray = called "array assignment" $ do
|
||||||
x <- many1 readArrayIndex
|
x <- many1 readArrayIndex
|
||||||
char '='
|
char '='
|
||||||
return x
|
return x
|
||||||
value <- readNormalWord <|> nothing
|
value <- readRegular <|> nothing
|
||||||
return $ T_IndexedElement id index value
|
return $ T_IndexedElement id index value
|
||||||
readRegular = readNormalWord
|
readRegular = readArray <|> readNormalWord
|
||||||
|
|
||||||
nothing = do
|
nothing = do
|
||||||
id <- getNextId
|
id <- getNextId
|
||||||
|
|
Loading…
Reference in New Issue