on master help sign in
Make reserved words a set for faster check in var parser
55a203dEvan Czaplicki
src/Parse/Helpers.hs+4−2
@@ -15,6 +15,7 @@ module Parse.Helpers
15 where
15 where
16
16
17import Data.Char (isUpper)
17import Data.Char (isUpper)
18+import qualified Data.Set as Set
18import Text.Parsec hiding (newline, space, spaces)
19import Text.Parsec hiding (newline, space, spaces)
19
20
20import qualified AST.Expression.Source as Src
21import qualified AST.Expression.Source as Src
@@ -60,7 +61,7 @@ makeVar firstChar =
60 choice
61 choice
61 [ do lookAhead (char '\'')
62 [ do lookAhead (char '\'')
62 failure (Syntax.prime variable)
63 failure (Syntax.prime variable)
63− , if variable `elem` reserveds then
64+ , if Set.member variable reserveds then
64 failure (Syntax.keyword variable)
65 failure (Syntax.keyword variable)
65 else
66 else
66 return variable
67 return variable
@@ -79,8 +80,9 @@ reserved word =
79 ]
80 ]
80
81
81
82
82−reserveds :: [String]
83+reserveds :: Set.Set String
83reserveds =
84reserveds =
85+ Set.fromList
84 [ "if", "then", "else"
86 [ "if", "then", "else"
85 , "case", "of"
87 , "case", "of"
86 , "let", "in"
88 , "let", "in"
tests/Test/Property/Arbitrary.hs+6−5
@@ -184,9 +184,10 @@ notReserved string =
184 string `exceptFor` Parse.Helpers.reserveds
184 string `exceptFor` Parse.Helpers.reserveds
185
185
186
186
187−exceptFor :: (Ord a) => Gen a -> [a] -> Gen a
187+exceptFor :: Gen a -> Set.Set a -> Gen a
188−exceptFor generator list =
188+exceptFor generator set =
189+ let
190+ notInList x =
191+ Set.notMember x set
192+ in
189 generator `suchThat` notInList
193 generator `suchThat` notInList
190− where
191− set = Set.fromList list
192− notInList x = Set.notMember x set