on master help sign in
Make reserved words a set for faster check in var parser
commit55a203d215fa5cb005a2bd034dbf1e68d47fffde authorEvan Czaplicki <evancz@users.noreply.github.com> dateFri 25 Nov 2016, 18:54 (10 years ago) parent36e7961
2 files changed+10−7
src/Parse/Helpers.hs+4−2 tests/Test/Property/Arbitrary.hs+6−5
src/Parse/Helpers.hs+4−2
@@ -15,6 +15,7 @@ module Parse.Helpers
1515 where
1616
1717import Data.Char (isUpper)
18+import qualified Data.Set as Set
1819import Text.Parsec hiding (newline, space, spaces)
1920
2021import qualified AST.Expression.Source as Src
@@ -60,7 +61,7 @@ makeVar firstChar =
6061 choice
6162 [ do lookAhead (char '\'')
6263 failure (Syntax.prime variable)
63− , if variable `elem` reserveds then
64+ , if Set.member variable reserveds then
6465 failure (Syntax.keyword variable)
6566 else
6667 return variable
@@ -79,8 +80,9 @@ reserved word =
7980 ]
8081
8182
82−reserveds :: [String]
83+reserveds :: Set.Set String
8384reserveds =
85+ Set.fromList
8486 [ "if", "then", "else"
8587 , "case", "of"
8688 , "let", "in"
tests/Test/Property/Arbitrary.hs+6−5
@@ -184,9 +184,10 @@ notReserved string =
184184 string `exceptFor` Parse.Helpers.reserveds
185185
186186
187−exceptFor :: (Ord a) => Gen a -> [a] -> Gen a
188−exceptFor generator list =
187+exceptFor :: Gen a -> Set.Set a -> Gen a
188+exceptFor generator set =
189+ let
190+ notInList x =
191+ Set.notMember x set
192+ in
189193 generator `suchThat` notInList
190− where
191− set = Set.fromList list
192− notInList x = Set.notMember x set