@@ -97,7 +97,7 @@ parseManyStatements = (do
97 return sts) P.<?> "block"
97 return sts) P.<?> "block"
99parseValueAtom :: P.Parsec String ParseState Value
99parseValueAtom :: P.Parsec String ParseState Value
100−parseValueAtom = C.indented *> P.choice
100+parseValueAtom = P.choice
101 [ P.try parseNumericLiteral
101 [ P.try parseNumericLiteral
102 , P.try parseStringLiteral
102 , P.try parseStringLiteral
103 , P.try parseBooleanLiteral
103 , P.try parseBooleanLiteral
@@ -153,8 +153,10 @@ parseVariableIntroduction = do
154parseAssignment :: P.Parsec String ParseState Statement
154parseAssignment :: P.Parsec String ParseState Statement
155parseAssignment = do
155parseAssignment = do
156− tgt <- C.parseIdent
157+ tgt <- C.parseIdent
157− C.lexeme $ C.indented *> P.char '='
158+ C.lexeme $ C.indented *> P.char '='
158 value <- parseValue
160 value <- parseValue
159 C.indented *> C.semi
161 C.indented *> C.semi
160 return $ Assignment tgt value
162 return $ Assignment tgt value
@@ -187,18 +189,22 @@ parseElseStatement :: P.Parsec String ParseState ElseStatement
187parseElseStatement = C.reserved "else" >> (ElseIf <$> parseIfStatement
189parseElseStatement = C.reserved "else" >> (ElseIf <$> parseIfStatement
188 <|> Else <$> parseManyStatements)
190 <|> Else <$> parseManyStatements)
192+parseValueStatement :: P.Parsec String ParseState Statement
193+parseValueStatement = ValueStatement <$> (parseValue <* C.semi)
190parseReturn :: P.Parsec String ParseState Statement
195parseReturn :: P.Parsec String ParseState Statement
191parseReturn = Return <$> (C.reserved "return" *> parseValue <* C.indented <* C.semi)
196parseReturn = Return <$> (C.reserved "return" *> parseValue <* C.indented <* C.semi)
193parseStatement :: P.Parsec String ParseState Statement
198parseStatement :: P.Parsec String ParseState Statement
194−parseStatement = P.choice (map P.try
199+parseStatement = P.choice
195 [ parseVariableIntroduction
200 [ parseVariableIntroduction
196 , parseAssignment
201 , parseAssignment
197 , parseWhile
202 , parseWhile
198 , parseFor
203 , parseFor
199 , parseForEach
204 , parseForEach
200 , parseIf
205 , parseIf
206+ , parseValueStatement
201− , parseReturn ]) P.<?> "statement"
207+ , parseReturn ] P.<?> "statement"
203parseStringBinder :: P.Parsec String ParseState Binder
209parseStringBinder :: P.Parsec String ParseState Binder
204parseStringBinder = StringBinder <$> C.stringLiteral
210parseStringBinder = StringBinder <$> C.stringLiteral