on master help sign in
Fix bug in parsing expressions like (-1, 100)
189ba10Evan Czaplicki
compiler/src/Parse/Expression.hs+14−11
@@ -128,9 +128,9 @@ chompListEnd start entries =
128tuple :: A.Position -> Parser E.Expr Src.Expr
128tuple :: A.Position -> Parser E.Expr Src.Expr
129tuple start@(A.Position row col) =
129tuple start@(A.Position row col) =
130 inContext E.Tuple (word1 0x28 {-(-} E.Start) $
130 inContext E.Tuple (word1 0x28 {-(-} E.Start) $
131− oneOf E.TupleOpen
131+ oneOf E.TupleIndentExpr1
132 [
132 [
133− do op <- Symbol.operator E.TupleOpen E.TupleOperatorReserved
133+ do op <- Symbol.operator E.TupleIndentExpr1 E.TupleOperatorReserved
134 if op == "-"
134 if op == "-"
135 then
135 then
136 oneOf E.TupleOperatorClose
136 oneOf E.TupleOperatorClose
@@ -138,21 +138,24 @@ tuple start@(A.Position row col) =
138 do word1 0x29 {-)-} E.TupleOperatorClose
138 do word1 0x29 {-)-} E.TupleOperatorClose
139 addEnd start (Src.Op op)
139 addEnd start (Src.Op op)
140 ,
140 ,
141+ do (entry, end) <-
141− specialize E.TupleExpr $
142+ specialize E.TupleExpr $
142− do negatedExpr@(A.At (A.Region _ end) _) <- term
143+ do negatedExpr@(A.At (A.Region _ end) _) <- term
143− Space.chomp E.Space
144+ Space.chomp E.Space
144− let exprStart = A.Position row (col + 2)
145+ let exprStart = A.Position row (col + 2)
145− let expr = A.at exprStart end (Src.Negate negatedExpr)
146+ let expr = A.at exprStart end (Src.Negate negatedExpr)
146− fst <$> chompExprEnd exprStart (State [] expr [] end)
147+ chompExprEnd exprStart (State [] expr [] end)
148+ Space.checkIndent end E.TupleIndentEnd
149+ chompTupleEnd start entry []
147 ]
150 ]
148 else
151 else
149 do word1 0x29 {-)-} E.TupleOperatorClose
152 do word1 0x29 {-)-} E.TupleOperatorClose
150 addEnd start (Src.Op op)
153 addEnd start (Src.Op op)
151 ,
154 ,
152− do word1 0x29 {-)-} E.TupleOpen
155+ do word1 0x29 {-)-} E.TupleIndentExpr1
153 addEnd start Src.Unit
156 addEnd start Src.Unit
154 ,
157 ,
155− do Space.chompAndCheckIndent E.TupleSpace E.TupleIndentExpr
158+ do Space.chompAndCheckIndent E.TupleSpace E.TupleIndentExpr1
156 (entry, end) <- specialize E.TupleExpr expression
159 (entry, end) <- specialize E.TupleExpr expression
157 Space.checkIndent end E.TupleIndentEnd
160 Space.checkIndent end E.TupleIndentEnd
158 chompTupleEnd start entry []
161 chompTupleEnd start entry []
@@ -163,7 +166,7 @@ chompTupleEnd :: A.Position -> Src.Expr -> [Src.Expr] -> Parser E.Tuple Src.Expr
163chompTupleEnd start firstExpr revExprs =
166chompTupleEnd start firstExpr revExprs =
164 oneOf E.TupleEnd
167 oneOf E.TupleEnd
165 [ do word1 0x2C {-,-} E.TupleEnd
168 [ do word1 0x2C {-,-} E.TupleEnd
166− Space.chompAndCheckIndent E.TupleSpace E.TupleIndentExpr
169+ Space.chompAndCheckIndent E.TupleSpace E.TupleIndentExprN
167 (entry, end) <- specialize E.TupleExpr expression
170 (entry, end) <- specialize E.TupleExpr expression
168 Space.checkIndent end E.TupleIndentEnd
171 Space.checkIndent end E.TupleIndentEnd
169 chompTupleEnd start firstExpr (entry : revExprs)
172 chompTupleEnd start firstExpr (entry : revExprs)