on master help sign in
Whitespace upgrade + handle bools in patterns
commitbede6f3ceb34f202545d68b901db790ebb743854 authorEvan Czaplicki <evancz@users.noreply.github.com> dateMon 5 Dec 2016, 12:36 (10 years ago) parentb569401
1 file changed+29−20
src/Parse/Pattern.hs+29−20
src/Parse/Pattern.hs+29−20
@@ -4,6 +4,7 @@ module Parse.Pattern (term, expression) where
44
55import Data.Text (Text)
66
7+import qualified AST.Literal as L
78import qualified AST.Pattern as P
89import qualified AST.Variable as Var
910import Parse.Helpers
@@ -35,7 +36,15 @@ termHelp =
3536
3637mkCtor :: Text -> P.Raw'
3738mkCtor ctor =
38− P.Ctor (Var.Raw ctor) []
39+ case ctor of
40+ "True" ->
41+ P.Literal (L.Boolean True)
42+
43+ "False" ->
44+ P.Literal (L.Boolean False)
45+
46+ _ ->
47+ P.Ctor (Var.Raw ctor) []
3948
4049
4150
@@ -79,8 +88,8 @@ tuple =
7988 leftParen
8089 spaces
8190 oneOf
82− [ do (pattern, space) <- expression
83− checkSpaces space
91+ [ do (pattern, sPos) <- expression
92+ checkSpace sPos
8493 tupleHelp start [pattern]
8594 , do rightParen
8695 end <- getPosition
@@ -93,8 +102,8 @@ tupleHelp start patterns =
93102 oneOf
94103 [ do comma
95104 spaces
96− (pattern, space) <- expression
97− checkSpaces space
105+ (pattern, sPos) <- expression
106+ checkSpace sPos
98107 tupleHelp start (pattern:patterns)
99108 , do rightParen
100109 case patterns of
@@ -116,8 +125,8 @@ list =
116125 do leftSquare
117126 spaces
118127 oneOf
119− [ do (pattern, space) <- expression
120− checkSpaces space
128+ [ do (pattern, sPos) <- expression
129+ checkSpace sPos
121130 listHelp [pattern]
122131 , do rightSquare
123132 end <- getPosition
@@ -130,8 +139,8 @@ listHelp patterns =
130139 oneOf
131140 [ do comma
132141 spaces
133− (pattern, space) <- expression
134− checkSpaces space
142+ (pattern, sPos) <- expression
143+ checkSpace sPos
135144 listHelp (pattern:patterns)
136145 , do end <- getPosition
137146 rightSquare
@@ -143,14 +152,14 @@ listHelp patterns =
143152-- PATTERN EXPRESSION
144153
145154
146−expression :: Parser (P.Raw, Space)
155+expression :: Parser (P.Raw, SPos)
147156expression =
148157 do start <- getPosition
149158 cTerm <- consTerm
150159 exprHelp start [] cTerm
151160
152161
153−consTerm :: Parser (P.Raw, R.Position, Space)
162+consTerm :: SParser P.Raw
154163consTerm =
155164 oneOf
156165 [ do start <- getPosition
@@ -160,15 +169,15 @@ consTerm =
160169 ]
161170
162171
163−exprHelp :: R.Position -> [P.Raw] -> (P.Raw, R.Position, Space) -> Parser (P.Raw, Space)
164−exprHelp start patterns (pattern, end, space) =
172+exprHelp :: R.Position -> [P.Raw] -> (P.Raw, R.Position, SPos) -> Parser (P.Raw, SPos)
173+exprHelp start patterns (pattern, end, sPos) =
165174 oneOf
166− [ do checkSpaces space
175+ [ do checkSpace sPos
167176 cons
168177 spaces
169178 cTerm <- consTerm
170179 exprHelp start (pattern:patterns) cTerm
171− , do checkSpaces space
180+ , do checkSpace sPos
172181 keyword "as"
173182 spaces
174183 alias <- lowVar
@@ -180,7 +189,7 @@ exprHelp start patterns (pattern, end, space) =
180189 )
181190 , return
182191 ( foldl (consHelp end) pattern patterns
183− , space
192+ , sPos
184193 )
185194 ]
186195
@@ -190,17 +199,17 @@ consHelp end tl hd@(A.A (R.Region start _) _) =
190199 A.at start end (P.Ctor (Var.Raw "::") [hd, tl])
191200
192201
193−constructorHelp :: R.Position -> Text -> [P.Raw] -> Parser (P.Raw, R.Position, Space)
202+constructorHelp :: R.Position -> Text -> [P.Raw] -> SParser P.Raw
194203constructorHelp start ctor args =
195204 do end <- getPosition
196− space <- whitespace
205+ sPos <- whitespace
197206 oneOf
198− [ do checkSpaces space
207+ [ do checkSpace sPos
199208 arg <- term
200209 constructorHelp start ctor (arg:args)
201210 , return
202211 ( A.at start end (P.Ctor (Var.Raw ctor) (reverse args))
203212 , end
204− , space
213+ , sPos
205214 )
206215 ]