on master help sign in
Update parser for the AST.Pattern move
c62990eEvan Czaplicki
src/Parse/Declaration.hs+1−2
@@ -10,7 +10,6 @@ import Data.Text (Text)
10import qualified Data.Text.Encoding as Text
10import qualified Data.Text.Encoding as Text
11
11
12import qualified AST.Expression.Source as Src
12import qualified AST.Expression.Source as Src
13−import qualified AST.Pattern as Pattern
14import qualified AST.Type as Type
13import qualified AST.Type as Type
15import qualified Parse.Expression as Expr
14import qualified Parse.Expression as Expr
16import qualified Parse.Pattern as Pattern
15import qualified Parse.Pattern as Pattern
@@ -76,7 +75,7 @@ def_ start =
76 ]
75 ]
77
76
78
77
79−definitionHelp :: R.Position -> A.Located Text -> [Pattern.Raw] -> SParser Src.Decl
78+definitionHelp :: R.Position -> A.Located Text -> [Src.Pattern] -> SParser Src.Decl
80definitionHelp start name revArgs =
79definitionHelp start name revArgs =
81 oneOf
80 oneOf
82 [ do arg <- hint E.Arg Pattern.term
81 [ do arg <- hint E.Arg Pattern.term
src/Parse/Expression.hs+10−11
@@ -7,8 +7,9 @@ module Parse.Expression
7
7
8
8
9import Control.Monad (guard)
9import Control.Monad (guard)
10−import Data.Text (Text)
11
10
11+import qualified AST.Expression.Source as Src
12+import qualified Elm.Name as N
12import Parse.Primitives
13import Parse.Primitives
13import qualified Parse.Primitives.Keyword as Keyword
14import qualified Parse.Primitives.Keyword as Keyword
14import qualified Parse.Primitives.Symbol as Symbol
15import qualified Parse.Primitives.Symbol as Symbol
@@ -17,9 +18,6 @@ import qualified Parse.Primitives.Whitespace as W
17import qualified Parse.Literal as Literal
18import qualified Parse.Literal as Literal
18import qualified Parse.Pattern as Pattern
19import qualified Parse.Pattern as Pattern
19import qualified Parse.Type as Type
20import qualified Parse.Type as Type
20−
21−import qualified AST.Expression.Source as Src
22−import qualified AST.Pattern as P
23import qualified Reporting.Annotation as A
21import qualified Reporting.Annotation as A
24import qualified Reporting.Error.Syntax as E
22import qualified Reporting.Error.Syntax as E
25import qualified Reporting.Region as R
23import qualified Reporting.Region as R
@@ -197,7 +195,7 @@ record start =
197 ]
195 ]
198
196
199
197
200−type Field = ( A.Located Text, Src.Expr )
198+type Field = ( A.Located N.Name, Src.Expr )
201
199
202
200
203chompFields :: [Field] -> Parser [Field]
201chompFields :: [Field] -> Parser [Field]
@@ -249,7 +247,7 @@ expression =
249
247
250data State =
248data State =
251 State
249 State
252− { _ops :: ![(Src.Expr, A.Located Text)]
250+ { _ops :: ![(Src.Expr, A.Located N.Name)]
253 , _expr :: !Src.Expr
251 , _expr :: !Src.Expr
254 , _args :: ![Src.Expr]
252 , _args :: ![Src.Expr]
255 , _end :: !R.Position
253 , _end :: !R.Position
@@ -387,7 +385,7 @@ function start =
387 return ( func, end, space )
385 return ( func, end, space )
388
386
389
387
390−gatherArgs :: [P.Raw] -> Parser [P.Raw]
388+gatherArgs :: [Src.Pattern] -> Parser [Src.Pattern]
391gatherArgs args =
389gatherArgs args =
392 oneOf
390 oneOf
393 [ do arg <- Pattern.term
391 [ do arg <- Pattern.term
@@ -424,7 +422,7 @@ case_ start =
424 )
422 )
425
423
426
424
427−branchHelp :: SParser (P.Raw, Src.Expr)
425+branchHelp :: SParser (Src.Pattern, Src.Expr)
428branchHelp =
426branchHelp =
429 do (pattern, patternPos) <- Pattern.expression
427 do (pattern, patternPos) <- Pattern.expression
430 checkSpace patternPos
428 checkSpace patternPos
@@ -434,7 +432,7 @@ branchHelp =
434 return ( (pattern, branchExpr), end, pos )
432 return ( (pattern, branchExpr), end, pos )
435
433
436
434
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)]
438caseHelp branches end pos =
436caseHelp branches end pos =
439 oneOf
437 oneOf
440 [ do checkAligned pos
438 [ do checkAligned pos
@@ -500,6 +498,7 @@ definition :: SParser (A.Located Src.Def)
500definition =
498definition =
501 do start <- getPosition
499 do start <- getPosition
502 name <- Var.lower
500 name <- Var.lower
501+ nameEnd <- getPosition
503 spaces
502 spaces
504 oneOf
503 oneOf
505 [ do Symbol.hasType
504 [ do Symbol.hasType
@@ -508,11 +507,11 @@ definition =
508 (tipe, end, space) <- Type.expression
507 (tipe, end, space) <- Type.expression
509 return ( A.at start end (Src.Annotate name tipe), end, space )
508 return ( A.at start end (Src.Annotate name tipe), end, space )
510 , inContext start (E.Definition name) $
509 , inContext start (E.Definition name) $
511− definitionHelp start name []
510+ definitionHelp start (A.at start nameEnd name) []
512 ]
511 ]
513
512
514
513
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)
516definitionHelp start name revArgs =
515definitionHelp start name revArgs =
517 oneOf
516 oneOf
518 [ do arg <- hint E.Arg Pattern.term
517 [ do arg <- hint E.Arg Pattern.term
src/Parse/Pattern.hs+27−28
@@ -9,7 +9,7 @@ module Parse.Pattern
9
9
10import qualified Data.List as List
10import qualified Data.List as List
11
11
12−import qualified AST.Pattern as P
12+import qualified AST.Expression.Source as Src
13import qualified Elm.Name as N
13import qualified Elm.Name as N
14import qualified Parse.Literal as Literal
14import qualified Parse.Literal as Literal
15import Parse.Primitives (Parser, SParser, SPos, addLocation, checkSpace, getPosition, hint, inContext, spaces, oneOf)
15import Parse.Primitives (Parser, SParser, SPos, addLocation, checkSpace, getPosition, hint, inContext, spaces, oneOf)
@@ -26,7 +26,7 @@ import qualified Reporting.Region as R
26-- TERM
26-- TERM
27
27
28
28
29−term :: Parser P.Raw
29+term :: Parser Src.Pattern
30term =
30term =
31 hint E.Pattern $
31 hint E.Pattern $
32 do start <- getPosition
32 do start <- getPosition
@@ -38,27 +38,26 @@ term =
38 ]
38 ]
39
39
40
40
41−termHelp :: R.Position -> Parser P.Raw
41+termHelp :: R.Position -> Parser Src.Pattern
42termHelp start =
42termHelp start =
43 oneOf
43 oneOf
44 [
44 [
45 do Symbol.underscore
45 do Symbol.underscore
46 end <- getPosition
46 end <- getPosition
47− return (A.at start end P.RAnything)
47+ return (A.at start end Src.PAnything)
48 ,
48 ,
49 do name <- Var.lower
49 do name <- Var.lower
50 end <- getPosition
50 end <- getPosition
51− return (A.at start end (P.RVar name))
51+ return (A.at start end (Src.PVar name))
52 ,
52 ,
53 do (maybePrefix, name) <- Var.foreignUpper
53 do (maybePrefix, name) <- Var.foreignUpper
54 end <- getPosition
54 end <- getPosition
55− let ctor = P.RCtor (R.Region start end) maybePrefix name []
55+ let ctor = Src.PCtor (R.Region start end) maybePrefix name []
56 return (A.at start end ctor)
56 return (A.at start end ctor)
57−
58 ,
57 ,
59 do lit <- Literal.literal
58 do lit <- Literal.literal
60 end <- getPosition
59 end <- getPosition
61− return (A.at start end (P.RLiteral lit))
60+ return (A.at start end (Src.PLiteral lit))
62 ]
61 ]
63
62
64
63
@@ -68,7 +67,7 @@ termHelp start =
68-- RECORDS
67-- RECORDS
69
68
70
69
71−record :: R.Position -> Parser P.Raw
70+record :: R.Position -> Parser Src.Pattern
72record start =
71record start =
73 do Symbol.leftCurly
72 do Symbol.leftCurly
74 inContext start E.ExprRecord $
73 inContext start E.ExprRecord $
@@ -79,11 +78,11 @@ record start =
79 recordHelp start [var]
78 recordHelp start [var]
80 , do Symbol.rightCurly
79 , do Symbol.rightCurly
81 end <- getPosition
80 end <- getPosition
82− return (A.at start end (P.RRecord []))
81+ return (A.at start end (Src.PRecord []))
83 ]
82 ]
84
83
85
84
86−recordHelp :: R.Position -> [A.Located N.Name] -> Parser P.Raw
85+recordHelp :: R.Position -> [A.Located N.Name] -> Parser Src.Pattern
87recordHelp start vars =
86recordHelp start vars =
88 oneOf
87 oneOf
89 [ do Symbol.comma
88 [ do Symbol.comma
@@ -93,7 +92,7 @@ recordHelp start vars =
93 recordHelp start (var:vars)
92 recordHelp start (var:vars)
94 , do Symbol.rightCurly
93 , do Symbol.rightCurly
95 end <- getPosition
94 end <- getPosition
96− return (A.at start end (P.RRecord vars))
95+ return (A.at start end (Src.PRecord vars))
97 ]
96 ]
98
97
99
98
@@ -101,7 +100,7 @@ recordHelp start vars =
101-- TUPLES
100-- TUPLES
102
101
103
102
104−tuple :: R.Position -> Parser P.Raw
103+tuple :: R.Position -> Parser Src.Pattern
105tuple start =
104tuple start =
106 do Symbol.leftParen
105 do Symbol.leftParen
107 inContext start E.ExprTuple $
106 inContext start E.ExprTuple $
@@ -112,11 +111,11 @@ tuple start =
112 tupleHelp start pattern []
111 tupleHelp start pattern []
113 , do Symbol.rightParen
112 , do Symbol.rightParen
114 end <- getPosition
113 end <- getPosition
115− return (A.at start end P.RUnit)
114+ return (A.at start end Src.PUnit)
116 ]
115 ]
117
116
118
117
119−tupleHelp :: R.Position -> P.Raw -> [P.Raw] -> Parser P.Raw
118+tupleHelp :: R.Position -> Src.Pattern -> [Src.Pattern] -> Parser Src.Pattern
120tupleHelp start firstPattern revPatterns =
119tupleHelp start firstPattern revPatterns =
121 oneOf
120 oneOf
122 [ do Symbol.comma
121 [ do Symbol.comma
@@ -131,7 +130,7 @@ tupleHelp start firstPattern revPatterns =
131
130
132 secondPattern : otherPatterns ->
131 secondPattern : otherPatterns ->
133 do end <- getPosition
132 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))
135 ]
134 ]
136
135
137
136
@@ -139,7 +138,7 @@ tupleHelp start firstPattern revPatterns =
139-- LIST
138-- LIST
140
139
141
140
142−list :: R.Position -> Parser P.Raw
141+list :: R.Position -> Parser Src.Pattern
143list start =
142list start =
144 do Symbol.leftSquare
143 do Symbol.leftSquare
145 inContext start E.PatternList $
144 inContext start E.PatternList $
@@ -150,11 +149,11 @@ list start =
150 listHelp start [pattern]
149 listHelp start [pattern]
151 , do Symbol.rightSquare
150 , do Symbol.rightSquare
152 end <- getPosition
151 end <- getPosition
153− return (A.at start end (P.RList []))
152+ return (A.at start end (Src.PList []))
154 ]
153 ]
155
154
156
155
157−listHelp :: R.Position -> [P.Raw] -> Parser P.Raw
156+listHelp :: R.Position -> [Src.Pattern] -> Parser Src.Pattern
158listHelp start patterns =
157listHelp start patterns =
159 oneOf
158 oneOf
160 [ do Symbol.comma
159 [ do Symbol.comma
@@ -164,7 +163,7 @@ listHelp start patterns =
164 listHelp start (pattern:patterns)
163 listHelp start (pattern:patterns)
165 , do Symbol.rightSquare
164 , do Symbol.rightSquare
166 end <- getPosition
165 end <- getPosition
167− return (A.at start end (P.RList (reverse patterns)))
166+ return (A.at start end (Src.PList (reverse patterns)))
168 ]
167 ]
169
168
170
169
@@ -172,7 +171,7 @@ listHelp start patterns =
172-- EXPRESSION
171-- EXPRESSION
173
172
174
173
175−expression :: Parser (P.Raw, SPos)
174+expression :: Parser (Src.Pattern, SPos)
176expression =
175expression =
177 hint E.Pattern $
176 hint E.Pattern $
178 do start <- getPosition
177 do start <- getPosition
@@ -180,7 +179,7 @@ expression =
180 exprHelp start [] cTerm
179 exprHelp start [] cTerm
181
180
182
181
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)
184exprHelp start patterns (pattern, _end, sPos) =
183exprHelp start patterns (pattern, _end, sPos) =
185 oneOf
184 oneOf
186 [ do checkSpace sPos
185 [ do checkSpace sPos
@@ -197,7 +196,7 @@ exprHelp start patterns (pattern, _end, sPos) =
197 newSpace <- whitespace
196 newSpace <- whitespace
198 let alias = A.at nameStart newEnd name
197 let alias = A.at nameStart newEnd name
199 return
198 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)
201 , newSpace
200 , newSpace
202 )
201 )
203 , return
202 , return
@@ -207,16 +206,16 @@ exprHelp start patterns (pattern, _end, sPos) =
207 ]
206 ]
208
207
209
208
210−cons :: P.Raw -> P.Raw -> P.Raw
209+cons :: Src.Pattern -> Src.Pattern -> Src.Pattern
211cons tl@(A.A (R.Region _ end) _) hd@(A.A (R.Region start _) _) =
210cons 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)
213
212
214
213
215
214
216-- EXPRESSION TERM
215-- EXPRESSION TERM
217
216
218
217
219−exprTerm :: SParser P.Raw
218+exprTerm :: SParser Src.Pattern
220exprTerm =
219exprTerm =
221 oneOf
220 oneOf
222 [ do start <- getPosition
221 [ do start <- getPosition
@@ -227,7 +226,7 @@ exprTerm =
227 ]
226 ]
228
227
229
228
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
231exprTermHelp start pair@(maybePrefix, name) args =
230exprTermHelp start pair@(maybePrefix, name) args =
232 do end <- getPosition
231 do end <- getPosition
233 sPos <- whitespace
232 sPos <- whitespace
@@ -236,7 +235,7 @@ exprTermHelp start pair@(maybePrefix, name) args =
236 arg <- term
235 arg <- term
237 exprTermHelp start pair (arg:args)
236 exprTermHelp start pair (arg:args)
238 , return
237 , 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))
240 , end
239 , end
241 , sPos
240 , sPos
242 )
241 )
src/Parse/Repl.hs+3−4
@@ -11,13 +11,12 @@ import qualified Data.ByteString.UTF8 as Utf8
11import qualified Data.Text as Text
11import qualified Data.Text as Text
12import Data.Text (Text)
12import Data.Text (Text)
13
13
14+import qualified AST.Expression.Source as Src
14import Parse.Primitives
15import Parse.Primitives
15import qualified Parse.Primitives.Keyword as Keyword
16import qualified Parse.Primitives.Keyword as Keyword
16import qualified Parse.Primitives.Symbol as Symbol
17import qualified Parse.Primitives.Symbol as Symbol
17import qualified Parse.Primitives.Variable as Var
18import qualified Parse.Primitives.Variable as Var
18import qualified Parse.Pattern as Pattern
19import qualified Parse.Pattern as Pattern
19−
20−import qualified AST.Pattern as P
21import qualified Reporting.Annotation as A
20import qualified Reporting.Annotation as A
22
21
23
22
@@ -76,7 +75,7 @@ entryParser source =
76 , do root <- Pattern.term
75 , do root <- Pattern.term
77 spaces
76 spaces
78 case A.drop root of
77 case A.drop root of
79− P.RVar name ->
78+ Src.PVar name ->
80 oneOf
79 oneOf
81 [ do Symbol.hasType
80 [ do Symbol.hasType
82 return Annotation
81 return Annotation
@@ -85,7 +84,7 @@ entryParser source =
85 ]
84 ]
86
85
87 _ ->
86 _ ->
88− do chompArgs
87+ do Symbol.equals
89 return (Def Nothing source)
88 return (Def Nothing source)
90 ]
89 ]
91
90