Skip to content
This repository was archived by the owner on Apr 1, 2025. It is now read-only.

Commit 7ecebae

Browse files
committed
Try harder to deal with blocks and things.
1 parent 3ea0bd9 commit 7ecebae

File tree

1 file changed

+7
-8
lines changed

1 file changed

+7
-8
lines changed

src/Language/Python/Assignment.hs

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -249,22 +249,22 @@ withStatement = mk <$> symbol WithStatement <*> children (someTerm with)
249249
<|> flip Statement.Let <$> term expression <*> emptyTerm
250250

251251
forStatement :: Assignment Term
252-
forStatement = symbol ForStatement >>= \ loc -> children (make loc <$> (symbol Variables *> children expressions) <*> term expressionList <*> (makeTerm <$> location <*> manyTermsTill expression (void (symbol ElseClause) <|> eof)) <*> optional (symbol ElseClause *> children expressions))
252+
forStatement = symbol ForStatement >>= \ loc -> children (make loc <$> (symbol Variables *> children expressions) <*> term expressionList <*> term block' <*> optional (symbol ElseClause *> children expressions))
253253
where
254254
make loc binding subject body forElseClause = case forElseClause of
255255
Nothing -> makeTerm loc (Statement.ForEach binding subject body)
256256
Just a -> makeTerm loc (Statement.Else (makeTerm loc $ Statement.ForEach binding subject body) a)
257257

258258
whileStatement :: Assignment Term
259-
whileStatement = symbol WhileStatement >>= \ loc -> children (make loc <$> term expression <*> expressions <*> optional (symbol ElseClause *> children expressions))
259+
whileStatement = symbol WhileStatement >>= \ loc -> children (make loc <$> term expression <*> term block <*> optional (symbol ElseClause *> children expressions))
260260
where
261261
make loc whileCondition whileBody whileElseClause = case whileElseClause of
262262
Nothing -> makeTerm loc (Statement.While whileCondition whileBody)
263263
Just a -> makeTerm loc (Statement.Else (makeTerm loc $ Statement.While whileCondition whileBody) a)
264264

265265
tryStatement :: Assignment Term
266-
tryStatement = makeTerm <$> symbol TryStatement <*> children (Statement.Try <$> term expression <*> manyTerm (expression <|> elseClause))
267-
where elseClause = makeTerm <$> symbol ElseClause <*> children (Statement.Else <$> emptyTerm <*> expressions)
266+
tryStatement = makeTerm <$> symbol TryStatement <*> children (Statement.Try <$> term block <*> manyTerm (expression <|> elseClause))
267+
where elseClause = makeTerm <$> symbol ElseClause <*> children (Statement.Else <$> emptyTerm <*> term block)
268268

269269
exceptClause :: Assignment Term
270270
exceptClause = makeTerm <$> symbol ExceptClause <*> children
@@ -291,9 +291,8 @@ functionDefinition =
291291
in maybe fn (makeTerm loc . Type.Annotation fn) ty
292292

293293
classDefinition :: Assignment Term
294-
classDefinition = makeTerm <$> symbol ClassDefinition <*> children (Declaration.Class [] <$> term expression <*> argumentList <*> expressions')
294+
classDefinition = makeTerm <$> symbol ClassDefinition <*> children (Declaration.Class [] <$> term expression <*> argumentList <*> term block')
295295
where
296-
expressions' = makeTerm <$> location <*> manyTerm expression
297296
argumentList = symbol ArgumentList *> children (manyTerm expression)
298297
<|> pure []
299298

@@ -473,8 +472,8 @@ ifStatement :: Assignment Term
473472
ifStatement = makeTerm <$> symbol IfStatement <*> children if'
474473
where
475474
if' = Statement.If <$> term expression <*> thenClause <*> (elseClause <|> emptyTerm)
476-
thenClause = makeTerm <$> location <*> manyTermsTill expression (void (symbol ElseClause) <|> void (symbol ElifClause) <|> eof)
477-
elseClause = makeTerm <$> location <*> many (comment <|> elif <|> else')
475+
thenClause = makeTerm'' <$> location <*> manyTermsTill expression (void (symbol ElseClause) <|> void (symbol ElifClause) <|> eof)
476+
elseClause = makeTerm'' <$> location <*> many (comment <|> elif <|> else')
478477
elif = makeTerm <$> symbol ElifClause <*> children if'
479478
else' = symbol ElseClause *> children expressions
480479

0 commit comments

Comments
 (0)