on master help sign in
Fix parsing bug in `as` patterns that would fully commit if any spaces were seen.

Also add `as` variables to reported variables in patterns.

commit28db3846914f04319e01822b5e7f398afbc0ac1d authorevancz <info@elm-lang.org> dateThu 6 Jun 2013, 23:16 (13 years ago) parent989d878
2 files changed+11−9
compiler/Parse/Patterns.hs+10−8 compiler/Transform/Replace.hs+1−1
compiler/Parse/Patterns.hs+10−8
@@ -19,11 +19,13 @@ patternBasic =
1919 return $ if isUpper c then PData x [] else PVar x
2020 ]
2121
22−patternMaybeAsVar :: Pattern -> IParser Pattern
23−patternMaybeAsVar x =
24− choice [ PAsVar <$>
25− (optional whitespace *> reserved "as" *> whitespace *> lowVar) <*> pure x,
26− pure x ]
22+asPattern :: IParser Pattern -> IParser Pattern
23+asPattern pattern = do
24+ p <- pattern
25+ var <- optionMaybe (try (whitespace >> reserved "as" >> whitespace >> lowVar))
26+ return $ case var of
27+ Just v -> PAsVar v p
28+ Nothing -> p
2729
2830patternRecord :: IParser Pattern
2931patternRecord = PRecord <$> brackets (commaSep1 lowVar)
@@ -44,9 +46,9 @@ patternConstructor :: IParser Pattern
4446patternConstructor = PData <$> capVar <*> spacePrefix patternTerm
4547
4648patternExpr :: IParser Pattern
47−patternExpr = (patternMaybeAsVar =<<
48− (foldr1 pcons <$> consSep1 (patternConstructor <|> patternTerm)))
49− <?> "pattern"
49+patternExpr =
50+ asPattern (foldr1 pcons <$> consSep1 (patternConstructor <|> patternTerm))
51+ <?> "pattern"
5052
5153makeLambda :: [Pattern] -> CExpr -> GuidCounter CExpr
5254makeLambda pats body = go (reverse pats) body
compiler/Transform/Replace.hs+1−1
@@ -33,7 +33,7 @@ patternVars pattern =
3333 case pattern of
3434 PData _ ps -> unions (map patternVars ps)
3535 PVar x -> singleton x
36− PAsVar _ p -> patternVars p
36+ PAsVar x p -> insert x (patternVars p)
3737 PAnything -> empty
3838
3939depth :: Expr -> Integer