on master help sign in
Update parser for the AST.Pattern move
commitc62990e1285703f92e7bf38bcc6e0dcd0cf15702 authorEvan Czaplicki <evancz@users.noreply.github.com> dateMon 30 Oct 2017, 22:16 (9 years ago) parenta561bf3
4 files changed+41−45
src/Parse/Declaration.hs+1−2 src/Parse/Expression.hs+10−11 src/Parse/Pattern.hs+27−28 src/Parse/Repl.hs+3−4
src/Parse/Declaration.hs+1−2
@@ -10,7 +10,6 @@ import Data.Text (Text)
1010import qualified Data.Text.Encoding as Text
1111
1212import qualified AST.Expression.Source as Src
13−import qualified AST.Pattern as Pattern
1413import qualified AST.Type as Type
1514import qualified Parse.Expression as Expr
1615import qualified Parse.Pattern as Pattern
@@ -76,7 +75,7 @@ def_ start =
7675 ]
7776
7877
79−definitionHelp :: R.Position -> A.Located Text -> [Pattern.Raw] -> SParser Src.Decl
78+definitionHelp :: R.Position -> A.Located Text -> [Src.Pattern] -> SParser Src.Decl
8079definitionHelp start name revArgs =
8180 oneOf
8281 [ do arg <- hint E.Arg Pattern.term
src/Parse/Expression.hs+10−11
@@ -7,8 +7,9 @@ module Parse.Expression
77
88
99import Control.Monad (guard)
10−import Data.Text (Text)
1110
11+import qualified AST.Expression.Source as Src
12+import qualified Elm.Name as N
1213import Parse.Primitives
1314import qualified Parse.Primitives.Keyword as Keyword
1415import qualified Parse.Primitives.Symbol as Symbol
@@ -17,9 +18,6 @@ import qualified Parse.Primitives.Whitespace as W
1718import qualified Parse.Literal as Literal
1819import qualified Parse.Pattern as Pattern
1920import qualified Parse.Type as Type
20−
21−import qualified AST.Expression.Source as Src
22−import qualified AST.Pattern as P
2321import qualified Reporting.Annotation as A
2422import qualified Reporting.Error.Syntax as E
2523import qualified Reporting.Region as R
@@ -197,7 +195,7 @@ record start =
197195 ]
198196
199197
200−type Field = ( A.Located Text, Src.Expr )
198+type Field = ( A.Located N.Name, Src.Expr )
201199
202200
203201chompFields :: [Field] -> Parser [Field]
@@ -249,7 +247,7 @@ expression =
249247
250248data State =
251249 State
252− { _ops :: ![(Src.Expr, A.Located Text)]
250+ { _ops :: ![(Src.Expr, A.Located N.Name)]
253251 , _expr :: !Src.Expr
254252 , _args :: ![Src.Expr]
255253 , _end :: !R.Position
@@ -387,7 +385,7 @@ function start =
387385 return ( func, end, space )
388386
389387
390−gatherArgs :: [P.Raw] -> Parser [P.Raw]
388+gatherArgs :: [Src.Pattern] -> Parser [Src.Pattern]
391389gatherArgs args =
392390 oneOf
393391 [ do arg <- Pattern.term
@@ -424,7 +422,7 @@ case_ start =
424422 )
425423
426424
427−branchHelp :: SParser (P.Raw, Src.Expr)
425+branchHelp :: SParser (Src.Pattern, Src.Expr)
428426branchHelp =
429427 do (pattern, patternPos) <- Pattern.expression
430428 checkSpace patternPos
@@ -434,7 +432,7 @@ branchHelp =
434432 return ( (pattern, branchExpr), end, pos )
435433
436434
437−caseHelp :: [(P.Raw, Src.Expr)] -> R.Position -> SPos -> SParser [(P.Raw, Src.Expr)]
435+caseHelp :: [(Src.Pattern, Src.Expr)] -> R.Position -> SPos -> SParser [(Src.Pattern, Src.Expr)]
438436caseHelp branches end pos =
439437 oneOf
440438 [ do checkAligned pos
@@ -500,6 +498,7 @@ definition :: SParser (A.Located Src.Def)
500498definition =
501499 do start <- getPosition
502500 name <- Var.lower
501+ nameEnd <- getPosition
503502 spaces
504503 oneOf
505504 [ do Symbol.hasType
@@ -508,11 +507,11 @@ definition =
508507 (tipe, end, space) <- Type.expression
509508 return ( A.at start end (Src.Annotate name tipe), end, space )
510509 , inContext start (E.Definition name) $
511− definitionHelp start name []
510+ definitionHelp start (A.at start nameEnd name) []
512511 ]
513512
514513
515−definitionHelp :: R.Position -> Text -> [P.Raw] -> SParser (A.Located Src.Def)
514+definitionHelp :: R.Position -> A.Located N.Name -> [Src.Pattern] -> SParser (A.Located Src.Def)
516515definitionHelp start name revArgs =
517516 oneOf
518517 [ do arg <- hint E.Arg Pattern.term
src/Parse/Pattern.hs+27−28
@@ -9,7 +9,7 @@ module Parse.Pattern
99
1010import qualified Data.List as List
1111
12−import qualified AST.Pattern as P
12+import qualified AST.Expression.Source as Src
1313import qualified Elm.Name as N
1414import qualified Parse.Literal as Literal
1515import Parse.Primitives (Parser, SParser, SPos, addLocation, checkSpace, getPosition, hint, inContext, spaces, oneOf)
@@ -26,7 +26,7 @@ import qualified Reporting.Region as R
2626-- TERM
2727
2828
29−term :: Parser P.Raw
29+term :: Parser Src.Pattern
3030term =
3131 hint E.Pattern $
3232 do start <- getPosition
@@ -38,27 +38,26 @@ term =
3838 ]
3939
4040
41−termHelp :: R.Position -> Parser P.Raw
41+termHelp :: R.Position -> Parser Src.Pattern
4242termHelp start =
4343 oneOf
4444 [
4545 do Symbol.underscore
4646 end <- getPosition
47− return (A.at start end P.RAnything)
47+ return (A.at start end Src.PAnything)
4848 ,
4949 do name <- Var.lower
5050 end <- getPosition
51− return (A.at start end (P.RVar name))
51+ return (A.at start end (Src.PVar name))
5252 ,
5353 do (maybePrefix, name) <- Var.foreignUpper
5454 end <- getPosition
55− let ctor = P.RCtor (R.Region start end) maybePrefix name []
55+ let ctor = Src.PCtor (R.Region start end) maybePrefix name []
5656 return (A.at start end ctor)
57−
5857 ,
5958 do lit <- Literal.literal
6059 end <- getPosition
61− return (A.at start end (P.RLiteral lit))
60+ return (A.at start end (Src.PLiteral lit))
6261 ]
6362
6463
@@ -68,7 +67,7 @@ termHelp start =
6867-- RECORDS
6968
7069
71−record :: R.Position -> Parser P.Raw
70+record :: R.Position -> Parser Src.Pattern
7271record start =
7372 do Symbol.leftCurly
7473 inContext start E.ExprRecord $
@@ -79,11 +78,11 @@ record start =
7978 recordHelp start [var]
8079 , do Symbol.rightCurly
8180 end <- getPosition
82− return (A.at start end (P.RRecord []))
81+ return (A.at start end (Src.PRecord []))
8382 ]
8483
8584
86−recordHelp :: R.Position -> [A.Located N.Name] -> Parser P.Raw
85+recordHelp :: R.Position -> [A.Located N.Name] -> Parser Src.Pattern
8786recordHelp start vars =
8887 oneOf
8988 [ do Symbol.comma
@@ -93,7 +92,7 @@ recordHelp start vars =
9392 recordHelp start (var:vars)
9493 , do Symbol.rightCurly
9594 end <- getPosition
96− return (A.at start end (P.RRecord vars))
95+ return (A.at start end (Src.PRecord vars))
9796 ]
9897
9998
@@ -101,7 +100,7 @@ recordHelp start vars =
101100-- TUPLES
102101
103102
104−tuple :: R.Position -> Parser P.Raw
103+tuple :: R.Position -> Parser Src.Pattern
105104tuple start =
106105 do Symbol.leftParen
107106 inContext start E.ExprTuple $
@@ -112,11 +111,11 @@ tuple start =
112111 tupleHelp start pattern []
113112 , do Symbol.rightParen
114113 end <- getPosition
115− return (A.at start end P.RUnit)
114+ return (A.at start end Src.PUnit)
116115 ]
117116
118117
119−tupleHelp :: R.Position -> P.Raw -> [P.Raw] -> Parser P.Raw
118+tupleHelp :: R.Position -> Src.Pattern -> [Src.Pattern] -> Parser Src.Pattern
120119tupleHelp start firstPattern revPatterns =
121120 oneOf
122121 [ do Symbol.comma
@@ -131,7 +130,7 @@ tupleHelp start firstPattern revPatterns =
131130
132131 secondPattern : otherPatterns ->
133132 do end <- getPosition
134− return (A.at start end (P.RTuple firstPattern secondPattern otherPatterns))
133+ return (A.at start end (Src.PTuple firstPattern secondPattern otherPatterns))
135134 ]
136135
137136
@@ -139,7 +138,7 @@ tupleHelp start firstPattern revPatterns =
139138-- LIST
140139
141140
142−list :: R.Position -> Parser P.Raw
141+list :: R.Position -> Parser Src.Pattern
143142list start =
144143 do Symbol.leftSquare
145144 inContext start E.PatternList $
@@ -150,11 +149,11 @@ list start =
150149 listHelp start [pattern]
151150 , do Symbol.rightSquare
152151 end <- getPosition
153− return (A.at start end (P.RList []))
152+ return (A.at start end (Src.PList []))
154153 ]
155154
156155
157−listHelp :: R.Position -> [P.Raw] -> Parser P.Raw
156+listHelp :: R.Position -> [Src.Pattern] -> Parser Src.Pattern
158157listHelp start patterns =
159158 oneOf
160159 [ do Symbol.comma
@@ -164,7 +163,7 @@ listHelp start patterns =
164163 listHelp start (pattern:patterns)
165164 , do Symbol.rightSquare
166165 end <- getPosition
167− return (A.at start end (P.RList (reverse patterns)))
166+ return (A.at start end (Src.PList (reverse patterns)))
168167 ]
169168
170169
@@ -172,7 +171,7 @@ listHelp start patterns =
172171-- EXPRESSION
173172
174173
175−expression :: Parser (P.Raw, SPos)
174+expression :: Parser (Src.Pattern, SPos)
176175expression =
177176 hint E.Pattern $
178177 do start <- getPosition
@@ -180,7 +179,7 @@ expression =
180179 exprHelp start [] cTerm
181180
182181
183−exprHelp :: R.Position -> [P.Raw] -> (P.Raw, R.Position, SPos) -> Parser (P.Raw, SPos)
182+exprHelp :: R.Position -> [Src.Pattern] -> (Src.Pattern, R.Position, SPos) -> Parser (Src.Pattern, SPos)
184183exprHelp start patterns (pattern, _end, sPos) =
185184 oneOf
186185 [ do checkSpace sPos
@@ -197,7 +196,7 @@ exprHelp start patterns (pattern, _end, sPos) =
197196 newSpace <- whitespace
198197 let alias = A.at nameStart newEnd name
199198 return
200− ( A.at start newEnd (P.RAlias (List.foldl' cons pattern patterns) alias)
199+ ( A.at start newEnd (Src.PAlias (List.foldl' cons pattern patterns) alias)
201200 , newSpace
202201 )
203202 , return
@@ -207,16 +206,16 @@ exprHelp start patterns (pattern, _end, sPos) =
207206 ]
208207
209208
210−cons :: P.Raw -> P.Raw -> P.Raw
209+cons :: Src.Pattern -> Src.Pattern -> Src.Pattern
211210cons tl@(A.A (R.Region _ end) _) hd@(A.A (R.Region start _) _) =
212− A.at start end (P.RCons hd tl)
211+ A.at start end (Src.PCons hd tl)
213212
214213
215214
216215-- EXPRESSION TERM
217216
218217
219−exprTerm :: SParser P.Raw
218+exprTerm :: SParser Src.Pattern
220219exprTerm =
221220 oneOf
222221 [ do start <- getPosition
@@ -227,7 +226,7 @@ exprTerm =
227226 ]
228227
229228
230−exprTermHelp :: R.Position -> (Maybe N.Name, N.Name) -> [P.Raw] -> SParser P.Raw
229+exprTermHelp :: R.Position -> (Maybe N.Name, N.Name) -> [Src.Pattern] -> SParser Src.Pattern
231230exprTermHelp start pair@(maybePrefix, name) args =
232231 do end <- getPosition
233232 sPos <- whitespace
@@ -236,7 +235,7 @@ exprTermHelp start pair@(maybePrefix, name) args =
236235 arg <- term
237236 exprTermHelp start pair (arg:args)
238237 , return
239− ( A.at start end (P.RCtor (R.Region start end) maybePrefix name (reverse args))
238+ ( A.at start end (Src.PCtor (R.Region start end) maybePrefix name (reverse args))
240239 , end
241240 , sPos
242241 )
src/Parse/Repl.hs+3−4
@@ -11,13 +11,12 @@ import qualified Data.ByteString.UTF8 as Utf8
1111import qualified Data.Text as Text
1212import Data.Text (Text)
1313
14+import qualified AST.Expression.Source as Src
1415import Parse.Primitives
1516import qualified Parse.Primitives.Keyword as Keyword
1617import qualified Parse.Primitives.Symbol as Symbol
1718import qualified Parse.Primitives.Variable as Var
1819import qualified Parse.Pattern as Pattern
19−
20−import qualified AST.Pattern as P
2120import qualified Reporting.Annotation as A
2221
2322
@@ -76,7 +75,7 @@ entryParser source =
7675 , do root <- Pattern.term
7776 spaces
7877 case A.drop root of
79− P.RVar name ->
78+ Src.PVar name ->
8079 oneOf
8180 [ do Symbol.hasType
8281 return Annotation
@@ -85,7 +84,7 @@ entryParser source =
8584 ]
8685
8786 _ ->
88− do chompArgs
87+ do Symbol.equals
8988 return (Def Nothing source)
9089 ]
9190