on master help sign in
Switch Parser/ over to Data.Name

Mostly changing imports, but a little bit of switching to Name.fromByteString which is able to skip the allocation of an internal bytestring PS value. Yay for less allocation!

commitc7504cc76e8c1a1f4f17a6d78b261430bdcac3de authorEvan Czaplicki <evancz@users.noreply.github.com> dateMon 19 Nov 2018, 11:44 (8 years ago) parent6055395
10 files changed+58−55
compiler/src/Parse/Declaration.hs+5−5 compiler/src/Parse/Expression.hs+5−4 compiler/src/Parse/Module.hs+7−6 compiler/src/Parse/Pattern.hs+2−2 compiler/src/Parse/Primitives/Kernel.hs+7−7 compiler/src/Parse/Primitives/Symbol.hs+3−3 compiler/src/Parse/Primitives/Variable.hs+14−14 compiler/src/Parse/Repl.hs+7−7 compiler/src/Parse/Shader.hs+4−4 compiler/src/Parse/Type.hs+4−3
compiler/src/Parse/Declaration.hs+5−5
@@ -7,11 +7,11 @@ module Parse.Declaration
77 where
88
99
10+import qualified Data.Name as Name
1011import qualified Data.Text.Encoding as Text
1112
1213import qualified AST.Source as Src
1314import qualified AST.Utils.Binop as Binop
14−import qualified Elm.Name as N
1515import qualified Parse.Expression as Expr
1616import qualified Parse.Pattern as Pattern
1717import Parse.Primitives
@@ -77,7 +77,7 @@ def_ start =
7777 ]
7878
7979
80−definitionHelp :: R.Position -> A.Located N.Name -> [Src.Pattern] -> SParser Src.Decl
80+definitionHelp :: R.Position -> A.Located Name.Name -> [Src.Pattern] -> SParser Src.Decl
8181definitionHelp start name revArgs =
8282 oneOf
8383 [ do arg <- hint E.Arg Pattern.term
@@ -115,14 +115,14 @@ type_ start =
115115 ]
116116
117117
118−nameArgsEquals :: Parser (A.Located N.Name, [A.Located N.Name])
118+nameArgsEquals :: Parser (A.Located Name.Name, [A.Located Name.Name])
119119nameArgsEquals =
120120 do name <- addLocation Var.upper
121121 spaces
122122 nameArgsEqualsHelp name []
123123
124124
125−nameArgsEqualsHelp :: A.Located N.Name -> [A.Located N.Name] -> Parser (A.Located N.Name, [A.Located N.Name])
125+nameArgsEqualsHelp :: A.Located Name.Name -> [A.Located Name.Name] -> Parser (A.Located Name.Name, [A.Located Name.Name])
126126nameArgsEqualsHelp name args =
127127 oneOf
128128 [ do arg <- addLocation Var.lower
@@ -134,7 +134,7 @@ nameArgsEqualsHelp name args =
134134 ]
135135
136136
137−chompConstructors :: [(A.Located N.Name, [Src.Type])] -> R.Position -> SPos -> SParser [(A.Located N.Name, [Src.Type])]
137+chompConstructors :: [(A.Located Name.Name, [Src.Type])] -> R.Position -> SPos -> SParser [(A.Located Name.Name, [Src.Type])]
138138chompConstructors ctors end pos =
139139 oneOf
140140 [ do checkSpace pos
compiler/src/Parse/Expression.hs+5−4
@@ -6,8 +6,9 @@ module Parse.Expression
66 where
77
88
9+import qualified Data.Name as Name
10+
911import qualified AST.Source as Src
10−import qualified Elm.Name as N
1112import Parse.Primitives
1213import qualified Parse.Primitives.Keyword as Keyword
1314import qualified Parse.Primitives.Number as Number
@@ -218,7 +219,7 @@ record start =
218219 ]
219220
220221
221−type Field = ( A.Located N.Name, Src.Expr )
222+type Field = ( A.Located Name.Name, Src.Expr )
222223
223224
224225chompFields :: [Field] -> Parser [Field]
@@ -270,7 +271,7 @@ expression =
270271
271272data State =
272273 State
273− { _ops :: ![(Src.Expr, A.Located N.Name)]
274+ { _ops :: ![(Src.Expr, A.Located Name.Name)]
274275 , _expr :: !Src.Expr
275276 , _args :: ![Src.Expr]
276277 , _end :: !R.Position
@@ -536,7 +537,7 @@ definition =
536537 ]
537538
538539
539−definitionHelp :: R.Position -> A.Located N.Name -> [Src.Pattern] -> SParser (A.Located Src.Def)
540+definitionHelp :: R.Position -> A.Located Name.Name -> [Src.Pattern] -> SParser (A.Located Src.Def)
540541definitionHelp start name revArgs =
541542 oneOf
542543 [ do arg <- hint E.Arg Pattern.term
compiler/src/Parse/Module.hs+7−6
@@ -9,9 +9,10 @@ module Parse.Module
99 where
1010
1111
12+import qualified Data.Name as Name
13+
1214import qualified AST.Source as Src
1315import qualified Elm.Compiler.Imports as Imports
14−import qualified Elm.Name as N
1516import qualified Elm.Package as Pkg
1617import Parse.Primitives (Parser, oneOf)
1718import qualified Parse.Primitives as P
@@ -57,7 +58,7 @@ chompHeader =
5758-- port module MyThing
5859-- effect module MyThing where { command = MyCmd }
5960--
60−chompNameAndEffects :: Parser (N.Name, Src.Effects)
61+chompNameAndEffects :: Parser (Name.Name, Src.Effects)
6162chompNameAndEffects =
6263 oneOf
6364 [
@@ -135,7 +136,7 @@ chompManager =
135136 ]
136137
137138
138−chompCommand :: Parser (A.Located N.Name)
139+chompCommand :: Parser (A.Located Name.Name)
139140chompCommand =
140141 do Keyword.command_
141142 P.spaces
@@ -144,7 +145,7 @@ chompCommand =
144145 P.addLocation Var.upper
145146
146147
147−chompSubscription :: Parser (A.Located N.Name)
148+chompSubscription :: Parser (A.Located Name.Name)
148149chompSubscription =
149150 do Keyword.subscription_
150151 P.spaces
@@ -199,7 +200,7 @@ chompImports imports =
199200 ]
200201
201202
202−chompAs :: A.Located N.Name -> [Src.Import] -> Parser [Src.Import]
203+chompAs :: A.Located Name.Name -> [Src.Import] -> Parser [Src.Import]
203204chompAs name imports =
204205 do Keyword.as_
205206 P.spaces
@@ -215,7 +216,7 @@ chompAs name imports =
215216 ]
216217
217218
218−chompExposing :: A.Located N.Name -> Maybe N.Name -> [Src.Import] -> Parser [Src.Import]
219+chompExposing :: A.Located Name.Name -> Maybe Name.Name -> [Src.Import] -> Parser [Src.Import]
219220chompExposing name maybeAlias imports =
220221 do Keyword.exposing_
221222 P.spaces
compiler/src/Parse/Pattern.hs+2−2
@@ -8,9 +8,9 @@ module Parse.Pattern
88
99
1010import qualified Data.List as List
11+import qualified Data.Name as Name
1112
1213import qualified AST.Source as Src
13−import qualified Elm.Name as N
1414import Parse.Primitives (Parser, SParser, SPos, addLocation, checkSpace, getPosition, hint, inContext, spaces, oneOf)
1515import qualified Parse.Primitives as P
1616import qualified Parse.Primitives.Keyword as Keyword
@@ -103,7 +103,7 @@ record start =
103103 ]
104104
105105
106−recordHelp :: R.Position -> [A.Located N.Name] -> Parser Src.Pattern
106+recordHelp :: R.Position -> [A.Located Name.Name] -> Parser Src.Pattern
107107recordHelp start vars =
108108 oneOf
109109 [ do Symbol.comma
compiler/src/Parse/Primitives/Kernel.hs+7−7
@@ -9,10 +9,10 @@ module Parse.Primitives.Kernel
99
1010import Prelude hiding (length)
1111import qualified Data.ByteString.Internal as B
12+import qualified Data.Name as Name
1213import Data.Word (Word8)
1314import Foreign.ForeignPtr (ForeignPtr)
1415
15−import qualified Elm.Name as N
1616import Parse.Primitives.Internals (Parser(..), State(..), noError)
1717import qualified Parse.Primitives.Internals as I
1818import qualified Parse.Primitives.Variable as Var
@@ -23,12 +23,12 @@ import qualified Parse.Primitives.Variable as Var
2323
2424
2525data Special
26− = Enum Word8 N.Name
26+ = Enum Word8 Name.Name
2727 | Prod
2828 | Debug
29− | Import N.Name
30− | JsField N.Name
31− | ElmField N.Name
29+ | Import Name.Name
30+ | JsField Name.Name
31+ | ElmField Name.Name
3232
3333
3434
@@ -94,10 +94,10 @@ chompSpecial fp offset terminal row col jsOffset =
9494
9595 !special =
9696 if word == 0x24 {- $ -} then
97− ElmField (N.fromForeignPtr fp offset (newOffset - offset))
97+ ElmField (Name.fromByteString fp offset (newOffset - offset))
9898
9999 else
100− let !name = N.fromForeignPtr fp tagOffset (newOffset - tagOffset) in
100+ let !name = Name.fromByteString fp tagOffset (newOffset - tagOffset) in
101101 if 0x30 <= word && word <= 0x39 then
102102 Enum (fromIntegral (word - 0x30)) name
103103
compiler/src/Parse/Primitives/Symbol.hs+3−3
@@ -16,11 +16,11 @@ import qualified Data.ByteString.Internal as B
1616import qualified Data.ByteString.Char8 as Char8
1717import qualified Data.Char as Char
1818import qualified Data.IntSet as IntSet
19+import qualified Data.Name as Name
1920import qualified Data.Vector as Vector
2021import Foreign.ForeignPtr (ForeignPtr)
2122import GHC.Word (Word8)
2223
23−import qualified Elm.Name as N
2424import Parse.Primitives.Internals (Parser(..), State(..), expect, noError)
2525import qualified Parse.Primitives.Internals as I
2626import qualified Parse.Primitives.Variable as Var
@@ -54,7 +54,7 @@ underscore =
5454-- BINOP
5555
5656
57−binop :: Parser N.Name
57+binop :: Parser Name.Name
5858binop =
5959 Parser $ \(State fp offset terminal indent row col ctx) cok cerr _ eerr ->
6060 let !newOffset = chompOps fp offset terminal in
@@ -63,7 +63,7 @@ binop =
6363
6464 else
6565 let !length = newOffset - offset in
66− case N.fromForeignPtr fp offset length of
66+ case Name.fromByteString fp offset length of
6767 "." -> cerr (E.ParseError row col (E.BadOp Dot ctx))
6868 "|" -> cerr (E.ParseError row col (E.BadOp Pipe ctx))
6969 "->" -> cerr (E.ParseError row col (E.BadOp Arrow ctx))
compiler/src/Parse/Primitives/Variable.hs+14−14
@@ -17,12 +17,12 @@ module Parse.Primitives.Variable
1717import Control.Exception (assert)
1818import Data.Bits ((.&.), (.|.), shiftL)
1919import qualified Data.Char as Char
20+import qualified Data.Name as Name
2021import qualified Data.Set as Set
2122import Foreign.ForeignPtr (ForeignPtr)
2223import GHC.Word (Word8)
2324
2425import qualified AST.Source as Src
25−import qualified Elm.Name as N
2626import Parse.Primitives.Internals (Parser(..), State(..), expect, noError, unsafeIndex)
2727import qualified Reporting.Error.Syntax as E
2828
@@ -31,14 +31,14 @@ import qualified Reporting.Error.Syntax as E
3131-- LOCAL UPPER
3232
3333
34−upper :: Parser N.Name
34+upper :: Parser Name.Name
3535upper =
3636 Parser $ \(State fp offset terminal indent row col ctx) cok _ _ eerr ->
3737 let (# newOffset, newCol #) = chompUpper fp offset terminal col in
3838 if offset == newOffset then
3939 eerr (expect row col ctx E.CapVar)
4040 else
41− let !name = N.fromForeignPtr fp offset (newOffset - offset) in
41+ let !name = Name.fromByteString fp offset (newOffset - offset) in
4242 cok name (State fp newOffset terminal indent row newCol ctx) noError
4343
4444
@@ -46,14 +46,14 @@ upper =
4646-- LOCAL LOWER
4747
4848
49−lower :: Parser N.Name
49+lower :: Parser Name.Name
5050lower =
5151 Parser $ \(State fp offset terminal indent row col ctx) cok _ _ eerr ->
5252 let (# newOffset, newCol #) = chompLower fp offset terminal col in
5353 if offset == newOffset then
5454 eerr (expect row col ctx E.LowVar)
5555 else
56− let !name = N.fromForeignPtr fp offset (newOffset - offset) in
56+ let !name = Name.fromByteString fp offset (newOffset - offset) in
5757 if Set.member name reservedWords then
5858 eerr (expect row col ctx E.LowVar)
5959 else
@@ -61,7 +61,7 @@ lower =
6161
6262
6363{-# NOINLINE reservedWords #-}
64−reservedWords :: Set.Set N.Name
64+reservedWords :: Set.Set Name.Name
6565reservedWords =
6666 Set.fromList
6767 [ "if", "then", "else"
@@ -79,7 +79,7 @@ reservedWords =
7979-- MODULE NAME
8080
8181
82−moduleName :: Parser N.Name
82+moduleName :: Parser Name.Name
8383moduleName =
8484 Parser $ \(State fp offset terminal indent row col ctx) cok _ _ eerr ->
8585 let (# newOffset, newCol #) = chompUpper fp offset terminal col in
@@ -89,7 +89,7 @@ moduleName =
8989
9090 Good end endCol ->
9191 let
92− !name = N.fromForeignPtr fp offset (end - offset)
92+ !name = Name.fromByteString fp offset (end - offset)
9393 !newState = State fp end terminal indent row endCol ctx
9494 in
9595 cok name newState noError
@@ -119,8 +119,8 @@ moduleNameHelp fp offset terminal col =
119119
120120
121121data Upper
122− = Unqualified N.Name
123− | Qualified N.Name N.Name
122+ = Unqualified Name.Name
123+ | Qualified Name.Name Name.Name
124124
125125
126126foreignUpper :: Parser Upper
@@ -132,12 +132,12 @@ foreignUpper =
132132 else
133133 let
134134 !newState = State fp end terminal indent row newCol ctx
135− !name = N.fromForeignPtr fp start (end - start)
135+ !name = Name.fromByteString fp start (end - start)
136136 !foreign =
137137 if start == offset then
138138 Unqualified name
139139 else
140− let !home = N.fromForeignPtr fp offset ((start - 1) - offset) in
140+ let !home = Name.fromByteString fp offset ((start - 1) - offset) in
141141 Qualified home name
142142 in
143143 cok foreign newState noError
@@ -171,7 +171,7 @@ foreignAlpha =
171171 else
172172 let
173173 !newState = State fp end terminal indent row newCol ctx
174− !name = N.fromForeignPtr fp start (end - start)
174+ !name = Name.fromByteString fp start (end - start)
175175 in
176176 if start == offset then
177177 if Set.member name reservedWords then
@@ -179,7 +179,7 @@ foreignAlpha =
179179 else
180180 cok (Src.Var varType name) newState noError
181181 else
182− let !home = N.fromForeignPtr fp offset ((start - 1) - offset) in
182+ let !home = Name.fromByteString fp offset ((start - 1) - offset) in
183183 cok (Src.VarQual varType home name) newState noError
184184
185185
compiler/src/Parse/Repl.hs+7−7
@@ -7,12 +7,12 @@ module Parse.Repl
77 where
88
99
10−import qualified Data.ByteString.UTF8 as Utf8
10+import qualified Data.ByteString.UTF8 as BS_UTF8
1111import qualified Data.Text as Text
1212import Data.Text (Text)
13+import Data.Name (Name)
1314
1415import qualified AST.Source as Src
15−import qualified Elm.Name as N
1616import qualified Parse.Module as Module
1717import Parse.Primitives
1818import qualified Parse.Primitives.Keyword as Keyword
@@ -27,9 +27,9 @@ import qualified Reporting.Annotation as A
2727
2828
2929data Entry
30− = Import N.Name (Maybe N.Name) Src.Exposing Text
31− | Type N.Name Text
32− | Def (Maybe N.Name) Text
30+ = Import Name (Maybe Name) Src.Exposing Text
31+ | Type Name Text
32+ | Def (Maybe Name) Text
3333 | Other Text
3434 | Annotation
3535 | Port
@@ -45,7 +45,7 @@ parseEntry rawEntry =
4545 source =
4646 Text.pack rawEntry
4747 in
48− case run (entryParser source) (Utf8.fromString rawEntry) of
48+ case run (entryParser source) (BS_UTF8.fromString rawEntry) of
4949 Right entry ->
5050 entry
5151
@@ -104,7 +104,7 @@ chompArgs =
104104 ]
105105
106106
107−tryAlias :: Parser (Maybe N.Name)
107+tryAlias :: Parser (Maybe Name)
108108tryAlias =
109109 oneOf
110110 [ try $
compiler/src/Parse/Shader.hs+4−4
@@ -8,6 +8,7 @@ module Parse.Shader
88
99import qualified Data.List as List
1010import qualified Data.Map as Map
11+import qualified Data.Name as Name
1112import qualified Data.Text as Text
1213import qualified Language.GLSL.Parser as GLP
1314import qualified Language.GLSL.Syntax as GLS
@@ -16,7 +17,6 @@ import qualified Text.Parsec.Error as Parsec
1617
1718import qualified AST.Source as Src
1819import qualified AST.Utils.Shader as Shader
19−import qualified Elm.Name as N
2020import qualified Reporting.Annotation as A
2121import qualified Reporting.Region as R
2222import Parse.Primitives (Parser, getPosition)
@@ -71,9 +71,9 @@ emptyShader =
7171addInput :: (GLS.StorageQualifier, Shader.Type, String) -> Shader.Shader -> Shader.Shader
7272addInput (qual, tipe, name) glDecls =
7373 case qual of
74− GLS.Attribute -> glDecls { Shader._attribute = Map.insert (N.fromString name) tipe (Shader._attribute glDecls) }
75− GLS.Uniform -> glDecls { Shader._uniform = Map.insert (N.fromString name) tipe (Shader._uniform glDecls) }
76− GLS.Varying -> glDecls { Shader._varying = Map.insert (N.fromString name) tipe (Shader._varying glDecls) }
74+ GLS.Attribute -> glDecls { Shader._attribute = Map.insert (Name.fromString name) tipe (Shader._attribute glDecls) }
75+ GLS.Uniform -> glDecls { Shader._uniform = Map.insert (Name.fromString name) tipe (Shader._uniform glDecls) }
76+ GLS.Varying -> glDecls { Shader._varying = Map.insert (Name.fromString name) tipe (Shader._varying glDecls) }
7777 _ -> error "Should never happen due to `extractInputs` function"
7878
7979
compiler/src/Parse/Type.hs+4−3
@@ -7,8 +7,9 @@ module Parse.Type
77 where
88
99
10+import qualified Data.Name as Name
11+
1012import qualified AST.Source as Src
11−import qualified Elm.Name as N
1213import Parse.Primitives (Parser, SParser, addLocation, checkSpace, getPosition, hint, spaces, oneOf)
1314import qualified Parse.Primitives as P
1415import qualified Parse.Primitives.Symbol as Symbol
@@ -108,7 +109,7 @@ app start =
108109 return ( A.at start end tipe, end, pos )
109110
110111
111−unionConstructor :: SParser (A.Located N.Name, [Src.Type])
112+unionConstructor :: SParser (A.Located Name.Name, [Src.Type])
112113unionConstructor =
113114 do start <- getPosition
114115 name <- Var.upper
@@ -202,7 +203,7 @@ record start =
202203 ]
203204
204205
205−type Field = ( A.Located N.Name, Src.Type )
206+type Field = ( A.Located Name.Name, Src.Type )
206207
207208
208209chompFields :: [Field] -> Parser [Field]