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

Allowing use of new Name.toEscapedBuilder that escapes without allocating anything extra.

commit0d4ba6e48f515c8cb05dbcf750926fe8750c04b4 authorEvan Czaplicki <evancz@users.noreply.github.com> dateMon 19 Nov 2018, 13:31 (8 years ago) parent2fb73b7
4 files changed+189−194
compiler/src/Generate/JavaScript.hs+43−43 compiler/src/Generate/JavaScript/Expression.hs+100−100 compiler/src/Generate/JavaScript/Mode.hs+8−8 compiler/src/Generate/JavaScript/Name.hs+38−43
compiler/src/Generate/JavaScript.hs+43−43
@@ -13,6 +13,7 @@ import Data.Monoid ((<>))
1313import qualified Data.List as List
1414import Data.Map ((!))
1515import qualified Data.Map as Map
16+import qualified Data.Name as Name
1617import qualified Data.Set as Set
1718import qualified Data.Text as Text
1819import qualified Data.Text.Encoding as Text
@@ -22,10 +23,9 @@ import qualified AST.Optimized as Opt
2223import qualified AST.Module.Name as ModuleName
2324import qualified Data.Index as Index
2425import qualified Elm.Interface as I
25−import qualified Elm.Name as N
2626import qualified Generate.JavaScript.Builder as JS
2727import qualified Generate.JavaScript.Expression as Expr
28−import qualified Generate.JavaScript.Name as Name
28+import qualified Generate.JavaScript.Name as JsName
2929import qualified Generate.JavaScript.Mode as Mode
3030import qualified Reporting.Doc as D
3131import qualified Reporting.Render.Type as RT
@@ -38,7 +38,7 @@ import qualified Reporting.Render.Type.Localizer as L
3838
3939data Output
4040 = None
41− | Some N.Name [N.Name] B.Builder
41+ | Some Name.Name [Name.Name] B.Builder
4242
4343
4444generate :: Mode.Mode -> Opt.Graph -> [ModuleName.Canonical] -> Output
@@ -85,7 +85,7 @@ perfNote mode =
8585-- GENERATE FOR REPL
8686
8787
88−generateForRepl :: Bool -> L.Localizer -> Opt.Graph -> I.Interface -> ModuleName.Canonical -> N.Name -> B.Builder
88+generateForRepl :: Bool -> L.Localizer -> Opt.Graph -> I.Interface -> ModuleName.Canonical -> Name.Name -> B.Builder
8989generateForRepl ansi localizer (Opt.Graph _ graph _) iface home name =
9090 let
9191 mode = Mode.dev Mode.Client
@@ -97,11 +97,11 @@ generateForRepl ansi localizer (Opt.Graph _ graph _) iface home name =
9797 print ansi localizer home name (I._types iface ! name)
9898
9999
100−print :: Bool -> L.Localizer -> ModuleName.Canonical -> N.Name -> Can.Annotation -> B.Builder
100+print :: Bool -> L.Localizer -> ModuleName.Canonical -> Name.Name -> Can.Annotation -> B.Builder
101101print ansi localizer home name (Can.Forall _ tipe) =
102102 let
103− value = Name.toBuilder (Name.fromGlobal home name)
104− toString = Name.toBuilder (Name.fromKernel N.debug "toAnsiString")
103+ value = JsName.toBuilder (JsName.fromGlobal home name)
104+ toString = JsName.toBuilder (JsName.fromKernel Name.debug "toAnsiString")
105105 tipeDoc = RT.canToDoc localizer RT.None tipe
106106 bool = if ansi then "true" else "false"
107107 in
@@ -241,19 +241,19 @@ addKernel (State revKernels revBuilders seen) kernel =
241241
242242var :: Opt.Global -> Expr.Code -> JS.Stmt
243243var (Opt.Global home name) code =
244− JS.Var [ (Name.fromGlobal home name, Just (Expr.codeToExpr code)) ]
244+ JS.Var [ (JsName.fromGlobal home name, Just (Expr.codeToExpr code)) ]
245245
246246
247247isDebugger :: Opt.Global -> Bool
248248isDebugger (Opt.Global (ModuleName.Canonical _ home) _) =
249− home == N.debugger
249+ home == Name.debugger
250250
251251
252252
253253-- GENERATE CYCLES
254254
255255
256−generateCycle :: Mode.Mode -> Opt.Global -> [N.Name] -> [(N.Name, Opt.Expr)] -> [Opt.Def] -> JS.Stmt
256+generateCycle :: Mode.Mode -> Opt.Global -> [Name.Name] -> [(Name.Name, Opt.Expr)] -> [Opt.Def] -> JS.Stmt
257257generateCycle mode (Opt.Global home _) names values functions =
258258 JS.Block
259259 [ JS.Block $ map (generateCycleFunc mode home) functions
@@ -268,8 +268,8 @@ generateCycle mode (Opt.Global home _) names values functions =
268268 JS.Block realBlock
269269
270270 Mode.Dev _ _ ->
271− JS.Try (JS.Block realBlock) Name.dollar $ JS.Throw $ JS.String $
272− "Some top-level definitions from `" <> N.toBuilder (ModuleName._module home) <> "` are causing infinite recursion:\\n"
271+ JS.Try (JS.Block realBlock) JsName.dollar $ JS.Throw $ JS.String $
272+ "Some top-level definitions from `" <> Name.toBuilder (ModuleName._module home) <> "` are causing infinite recursion:\\n"
273273 <> drawCycle names
274274 <> "\\n\\nThese errors are very tricky, so read "
275275 <> B.stringUtf8 (D.makeNakedLink "halting-problem")
@@ -281,23 +281,23 @@ generateCycleFunc :: Mode.Mode -> ModuleName.Canonical -> Opt.Def -> JS.Stmt
281281generateCycleFunc mode home def =
282282 case def of
283283 Opt.Def name expr ->
284− JS.Var [ (Name.fromGlobal home name, Just (Expr.codeToExpr (Expr.generate mode expr))) ]
284+ JS.Var [ (JsName.fromGlobal home name, Just (Expr.codeToExpr (Expr.generate mode expr))) ]
285285
286286 Opt.TailDef name args expr ->
287− JS.Var [ (Name.fromGlobal home name, Just (Expr.codeToExpr (Expr.generateTailDef mode name args expr))) ]
287+ JS.Var [ (JsName.fromGlobal home name, Just (Expr.codeToExpr (Expr.generateTailDef mode name args expr))) ]
288288
289289
290−generateSafeCycle :: Mode.Mode -> ModuleName.Canonical -> (N.Name, Opt.Expr) -> JS.Stmt
290+generateSafeCycle :: Mode.Mode -> ModuleName.Canonical -> (Name.Name, Opt.Expr) -> JS.Stmt
291291generateSafeCycle mode home (name, expr) =
292− JS.FunctionStmt (Name.fromCycle home name) [] $
292+ JS.FunctionStmt (JsName.fromCycle home name) [] $
293293 Expr.codeToStmtList (Expr.generate mode expr)
294294
295295
296−generateRealCycle :: ModuleName.Canonical -> (N.Name, expr) -> JS.Stmt
296+generateRealCycle :: ModuleName.Canonical -> (Name.Name, expr) -> JS.Stmt
297297generateRealCycle home (name, _) =
298298 let
299− safeName = Name.fromCycle home name
300− realName = Name.fromGlobal home name
299+ safeName = JsName.fromCycle home name
300+ realName = JsName.fromGlobal home name
301301 in
302302 JS.Block
303303 [ JS.Var [ ( realName, Just (JS.Call (JS.Ref safeName) []) ) ]
@@ -306,11 +306,11 @@ generateRealCycle home (name, _) =
306306 ]
307307
308308
309−drawCycle :: [N.Name] -> B.Builder
309+drawCycle :: [Name.Name] -> B.Builder
310310drawCycle names =
311311 let
312312 topLine = "\\n ┌─────┐"
313− nameLine name = "\\n │ " <> N.toBuilder name
313+ nameLine name = "\\n │ " <> Name.toBuilder name
314314 midLine = "\\n │ ↓"
315315 bottomLine = "\\n └─────┘"
316316 in
@@ -333,16 +333,16 @@ addChunk mode builder chunk =
333333 B.byteString javascript <> builder
334334
335335 Opt.ElmVar home name ->
336− Name.toBuilder (Name.fromGlobal home name) <> builder
336+ JsName.toBuilder (JsName.fromGlobal home name) <> builder
337337
338338 Opt.JsVar home name ->
339− Name.toBuilder (Name.fromKernel home name) <> builder
339+ JsName.toBuilder (JsName.fromKernel home name) <> builder
340340
341341 Opt.ElmField name ->
342− Name.toBuilder (Expr.generateField mode name) <> builder
342+ JsName.toBuilder (Expr.generateField mode name) <> builder
343343
344344 Opt.JsField int ->
345− Name.toBuilder (Name.fromInt int) <> builder
345+ JsName.toBuilder (JsName.fromInt int) <> builder
346346
347347 Opt.JsEnum int ->
348348 B.intDec int <> builder
@@ -379,7 +379,7 @@ generateEnum mode global@(Opt.Global home name) index =
379379 Mode.Prod _ _ ->
380380 JS.Int (Index.toMachine index)
381381 in
382− JS.Var [ (Name.fromGlobal home name, Just definition) ]
382+ JS.Var [ (JsName.fromGlobal home name, Just definition) ]
383383
384384
385385
@@ -395,25 +395,25 @@ generateBox mode global@(Opt.Global home name) =
395395 Expr.codeToExpr (Expr.generateCtor mode global Index.first 1)
396396
397397 Mode.Prod _ _ ->
398− JS.Ref (Name.fromGlobal ModuleName.basics N.identity)
398+ JS.Ref (JsName.fromGlobal ModuleName.basics Name.identity)
399399 in
400− JS.Var [ (Name.fromGlobal home name, Just definition) ]
400+ JS.Var [ (JsName.fromGlobal home name, Just definition) ]
401401
402402
403403
404404-- GENERATE PORTS
405405
406406
407−generatePort :: Mode.Mode -> Opt.Global -> N.Name -> Opt.Expr -> JS.Stmt
407+generatePort :: Mode.Mode -> Opt.Global -> Name.Name -> Opt.Expr -> JS.Stmt
408408generatePort mode (Opt.Global home name) makePort converter =
409409 let
410410 definition =
411− JS.Call (JS.Ref (Name.fromKernel N.platform makePort))
412− [ JS.String (N.toBuilder name)
411+ JS.Call (JS.Ref (JsName.fromKernel Name.platform makePort))
412+ [ JS.String (Name.toBuilder name)
413413 , Expr.codeToExpr (Expr.generate mode converter)
414414 ]
415415 in
416− JS.Var [ (Name.fromGlobal home name, Just definition) ]
416+ JS.Var [ (JsName.fromGlobal home name, Just definition) ]
417417
418418
419419
@@ -425,40 +425,40 @@ generateManager mode graph (Opt.Global home@(ModuleName.Canonical _ moduleName)
425425 let
426426 managerLVar =
427427 JS.LBracket
428− (JS.Ref (Name.fromKernel N.platform "effectManagers"))
429− (JS.String (N.toBuilder moduleName))
428+ (JS.Ref (JsName.fromKernel Name.platform "effectManagers"))
429+ (JS.String (Name.toBuilder moduleName))
430430
431431 (deps, args, stmts) =
432432 generateManagerHelp home effectsType
433433
434434 createManager =
435435 JS.ExprStmt $ JS.Assign managerLVar $
436− JS.Call (JS.Ref (Name.fromKernel N.platform "createManager")) args
436+ JS.Call (JS.Ref (JsName.fromKernel Name.platform "createManager")) args
437437 in
438438 addStmt (List.foldl' (addGlobal mode graph) state deps) $
439439 JS.Block (createManager : stmts)
440440
441441
442−generateLeaf :: ModuleName.Canonical -> N.Name -> JS.Stmt
442+generateLeaf :: ModuleName.Canonical -> Name.Name -> JS.Stmt
443443generateLeaf home@(ModuleName.Canonical _ moduleName) name =
444444 let
445445 definition =
446− JS.Call leaf [ JS.String (N.toBuilder moduleName) ]
446+ JS.Call leaf [ JS.String (Name.toBuilder moduleName) ]
447447 in
448− JS.Var [ (Name.fromGlobal home name, Just definition) ]
448+ JS.Var [ (JsName.fromGlobal home name, Just definition) ]
449449
450450
451451{-# NOINLINE leaf #-}
452452leaf :: JS.Expr
453453leaf =
454− JS.Ref (Name.fromKernel N.platform "leaf")
454+ JS.Ref (JsName.fromKernel Name.platform "leaf")
455455
456456
457457generateManagerHelp :: ModuleName.Canonical -> Opt.EffectsType -> ([Opt.Global], [JS.Expr], [JS.Stmt])
458458generateManagerHelp home effectsType =
459459 let
460460 dep name = Opt.Global home name
461− ref name = JS.Ref (Name.fromGlobal home name)
461+ ref name = JS.Ref (JsName.fromGlobal home name)
462462 in
463463 case effectsType of
464464 Opt.Cmd ->
@@ -489,10 +489,10 @@ generateManagerHelp home effectsType =
489489toMainExports :: Mode.Mode -> Map.Map ModuleName.Canonical Opt.Main -> B.Builder
490490toMainExports mode mains =
491491 let
492− export = Name.fromKernel N.platform "export"
492+ export = JsName.fromKernel Name.platform "export"
493493 exports = generateExports mode (Map.foldrWithKey addToTrie emptyTrie mains)
494494 in
495− Name.toBuilder export <> "(" <> exports <> ");"
495+ JsName.toBuilder export <> "(" <> exports <> ");"
496496
497497
498498generateExports :: Mode.Mode -> Trie -> B.Builder
@@ -542,7 +542,7 @@ emptyTrie =
542542
543543addToTrie :: ModuleName.Canonical -> Opt.Main -> Trie -> Trie
544544addToTrie home@(ModuleName.Canonical _ moduleName) main trie =
545− merge trie $ segmentsToTrie home (Text.splitOn "." (N.toText moduleName)) main
545+ merge trie $ segmentsToTrie home (Text.splitOn "." (Name.toText moduleName)) main
546546
547547
548548segmentsToTrie :: ModuleName.Canonical -> [Text.Text] -> Opt.Main -> Trie
compiler/src/Generate/JavaScript/Expression.hs+100−100
@@ -16,6 +16,7 @@ import qualified Data.IntMap as IntMap
1616import qualified Data.List as List
1717import Data.Map ((!))
1818import qualified Data.Map as Map
19+import qualified Data.Name as Name
1920import qualified Data.Set as Set
2021import qualified Data.Text.Encoding as Text
2122import qualified Data.Utf8 as Utf8
@@ -26,12 +27,11 @@ import qualified AST.Module.Name as ModuleName
2627import qualified Data.Index as Index
2728import qualified Elm.Compiler.Type as Type
2829import qualified Elm.Compiler.Type.Extract as Extract
29−import qualified Elm.Name as N
3030import qualified Elm.Package as Pkg
3131import qualified Elm.Compiler.Version as Version
3232import qualified Generate.JavaScript.Builder as JS
3333import qualified Generate.JavaScript.Mode as Mode
34−import qualified Generate.JavaScript.Name as Name
34+import qualified Generate.JavaScript.Name as JsName
3535import qualified Json.Encode as Encode
3636import qualified Optimize.DecisionTree as DT
3737import qualified Reporting.Region as R
@@ -71,15 +71,15 @@ generate mode expression =
7171 JsExpr $ JS.Float float
7272
7373 Opt.VarLocal name ->
74− JsExpr $ JS.Ref (Name.fromLocal name)
74+ JsExpr $ JS.Ref (JsName.fromLocal name)
7575
7676 Opt.VarGlobal (Opt.Global home name) ->
77− JsExpr $ JS.Ref (Name.fromGlobal home name)
77+ JsExpr $ JS.Ref (JsName.fromGlobal home name)
7878
7979 Opt.VarEnum (Opt.Global home name) index ->
8080 case mode of
8181 Mode.Dev _ _ ->
82− JsExpr $ JS.Ref (Name.fromGlobal home name)
82+ JsExpr $ JS.Ref (JsName.fromGlobal home name)
8383
8484 Mode.Prod _ _ ->
8585 JsExpr $ JS.Int (Index.toMachine index)
@@ -87,32 +87,32 @@ generate mode expression =
8787 Opt.VarBox (Opt.Global home name) ->
8888 JsExpr $ JS.Ref $
8989 case mode of
90− Mode.Dev _ _ -> Name.fromGlobal home name
91− Mode.Prod _ _ -> Name.fromGlobal ModuleName.basics N.identity
90+ Mode.Dev _ _ -> JsName.fromGlobal home name
91+ Mode.Prod _ _ -> JsName.fromGlobal ModuleName.basics Name.identity
9292
9393 Opt.VarCycle home name ->
94− JsExpr $ JS.Call (JS.Ref (Name.fromCycle home name)) []
94+ JsExpr $ JS.Call (JS.Ref (JsName.fromCycle home name)) []
9595
9696 Opt.VarDebug name home region unhandledValueName ->
9797 JsExpr $ generateDebug name home region unhandledValueName
9898
9999 Opt.VarKernel home name ->
100− JsExpr $ JS.Ref (Name.fromKernel home name)
100+ JsExpr $ JS.Ref (JsName.fromKernel home name)
101101
102102 Opt.List entries ->
103103 case entries of
104104 [] ->
105− JsExpr $ JS.Ref (Name.fromKernel N.list "Nil")
105+ JsExpr $ JS.Ref (JsName.fromKernel Name.list "Nil")
106106
107107 _ ->
108108 JsExpr $
109109 JS.Call
110− (JS.Ref (Name.fromKernel N.list "fromArray"))
110+ (JS.Ref (JsName.fromKernel Name.list "fromArray"))
111111 [ JS.Array $ map (generateJsExpr mode) entries
112112 ]
113113
114114 Opt.Function args body ->
115− generateFunction (map Name.fromLocal args) (generate mode body)
115+ generateFunction (map JsName.fromLocal args) (generate mode body)
116116
117117 Opt.Call func args ->
118118 JsExpr $ generateCall mode func args
@@ -130,7 +130,7 @@ generate mode expression =
130130 Opt.Destruct (Opt.Destructor name path) body ->
131131 let
132132 pathExpr = generatePath mode path
133− pathDef = JS.Var [ (Name.fromLocal name, Just pathExpr) ]
133+ pathDef = JS.Var [ (JsName.fromLocal name, Just pathExpr) ]
134134 in
135135 JsBlock $ pathDef : codeToStmtList (generate mode body)
136136
@@ -138,9 +138,9 @@ generate mode expression =
138138 JsBlock $ generateCase mode label root decider jumps
139139
140140 Opt.Accessor field ->
141− JsExpr $ JS.Function Nothing [Name.dollar]
141+ JsExpr $ JS.Function Nothing [JsName.dollar]
142142 [ JS.Return $ Just $
143− JS.Access (JS.Ref Name.dollar) (generateField mode field)
143+ JS.Access (JS.Ref JsName.dollar) (generateField mode field)
144144 ]
145145
146146 Opt.Access record field ->
@@ -148,7 +148,7 @@ generate mode expression =
148148
149149 Opt.Update record fields ->
150150 JsExpr $
151− JS.Call (JS.Ref (Name.fromKernel N.utils "update"))
151+ JS.Call (JS.Ref (JsName.fromKernel Name.utils "update"))
152152 [ generateJsExpr mode record
153153 , generateRecord mode fields
154154 ]
@@ -159,7 +159,7 @@ generate mode expression =
159159 Opt.Unit ->
160160 case mode of
161161 Mode.Dev _ _ ->
162− JsExpr $ JS.Ref (Name.fromKernel N.utils "Tuple0")
162+ JsExpr $ JS.Ref (JsName.fromKernel Name.utils "Tuple0")
163163
164164 Mode.Prod _ _ ->
165165 JsExpr $ JS.Int 0
@@ -168,13 +168,13 @@ generate mode expression =
168168 JsExpr $
169169 case maybeC of
170170 Nothing ->
171− JS.Call (JS.Ref (Name.fromKernel N.utils "Tuple2"))
171+ JS.Call (JS.Ref (JsName.fromKernel Name.utils "Tuple2"))
172172 [ generateJsExpr mode a
173173 , generateJsExpr mode b
174174 ]
175175
176176 Just c ->
177− JS.Call (JS.Ref (Name.fromKernel N.utils "Tuple3"))
177+ JS.Call (JS.Ref (JsName.fromKernel Name.utils "Tuple3"))
178178 [ generateJsExpr mode a
179179 , generateJsExpr mode b
180180 , generateJsExpr mode c
@@ -183,17 +183,17 @@ generate mode expression =
183183 Opt.Shader src attributes uniforms ->
184184 let
185185 toTranlation field =
186− ( Name.fromLocal field
187− , JS.String (Name.toBuilder (generateField mode field))
186+ ( JsName.fromLocal field
187+ , JS.String (JsName.toBuilder (generateField mode field))
188188 )
189189
190190 toTranslationObject fields =
191191 JS.Object (map toTranlation (Set.toList fields))
192192 in
193193 JsExpr $ JS.Object $
194− [ ( Name.fromLocal "src", JS.String (Text.encodeUtf8Builder src) )
195− , ( Name.fromLocal "attributes", toTranslationObject attributes )
196− , ( Name.fromLocal "uniforms", toTranslationObject uniforms )
194+ [ ( JsName.fromLocal "src", JS.String (Text.encodeUtf8Builder src) )
195+ , ( JsName.fromLocal "attributes", toTranslationObject attributes )
196+ , ( JsName.fromLocal "uniforms", toTranslationObject uniforms )
197197 ]
198198
199199
@@ -255,7 +255,7 @@ codeToStmt code =
255255{-# NOINLINE toChar #-}
256256toChar :: JS.Expr
257257toChar =
258− JS.Ref (Name.fromKernel N.utils "chr")
258+ JS.Ref (JsName.fromKernel Name.utils "chr")
259259
260260
261261
@@ -266,18 +266,18 @@ generateCtor :: Mode.Mode -> Opt.Global -> Index.ZeroBased -> Int -> Code
266266generateCtor mode (Opt.Global home name) index arity =
267267 let
268268 argNames =
269− Index.indexedMap (\i _ -> Name.fromIndex i) [1 .. arity]
269+ Index.indexedMap (\i _ -> JsName.fromIndex i) [1 .. arity]
270270
271271 ctorTag =
272272 case mode of
273− Mode.Dev _ _ -> JS.String (N.toBuilder name)
273+ Mode.Dev _ _ -> JS.String (Name.toBuilder name)
274274 Mode.Prod _ _ -> JS.Int (ctorToInt home name index)
275275 in
276276 generateFunction argNames $ JsExpr $ JS.Object $
277− (Name.dollar, ctorTag) : map (\n -> (n, JS.Ref n)) argNames
277+ (JsName.dollar, ctorTag) : map (\n -> (n, JS.Ref n)) argNames
278278
279279
280−ctorToInt :: ModuleName.Canonical -> N.Name -> Index.ZeroBased -> Int
280+ctorToInt :: ModuleName.Canonical -> Name.Name -> Index.ZeroBased -> Int
281281ctorToInt home name index =
282282 if home == ModuleName.dict && name == "RBNode_elm_builtin" || name == "RBEmpty_elm_builtin" then
283283 0 - Index.toHuman index
@@ -289,7 +289,7 @@ ctorToInt home name index =
289289-- RECORDS
290290
291291
292−generateRecord :: Mode.Mode -> Map.Map N.Name Opt.Expr -> JS.Expr
292+generateRecord :: Mode.Mode -> Map.Map Name.Name Opt.Expr -> JS.Expr
293293generateRecord mode fields =
294294 let
295295 toPair (field, value) =
@@ -298,11 +298,11 @@ generateRecord mode fields =
298298 JS.Object (map toPair (Map.toList fields))
299299
300300
301−generateField :: Mode.Mode -> N.Name -> Name.Name
301+generateField :: Mode.Mode -> Name.Name -> JsName.Name
302302generateField mode name =
303303 case mode of
304304 Mode.Dev _ _ ->
305− Name.fromLocal name
305+ JsName.fromLocal name
306306
307307 Mode.Prod _ fields ->
308308 fields ! name
@@ -313,39 +313,39 @@ generateField mode name =
313313-- DEBUG
314314
315315
316−generateDebug :: N.Name -> ModuleName.Canonical -> R.Region -> Maybe N.Name -> JS.Expr
316+generateDebug :: Name.Name -> ModuleName.Canonical -> R.Region -> Maybe Name.Name -> JS.Expr
317317generateDebug name (ModuleName.Canonical _ home) region unhandledValueName =
318318 if name /= "todo" then
319− JS.Ref (Name.fromGlobal ModuleName.debug name)
319+ JS.Ref (JsName.fromGlobal ModuleName.debug name)
320320 else
321321 case unhandledValueName of
322322 Nothing ->
323− JS.Call (JS.Ref (Name.fromKernel N.debug "todo")) $
324− [ JS.String (N.toBuilder home)
323+ JS.Call (JS.Ref (JsName.fromKernel Name.debug "todo")) $
324+ [ JS.String (Name.toBuilder home)
325325 , regionToJsExpr region
326326 ]
327327
328328 Just valueName ->
329− JS.Call (JS.Ref (Name.fromKernel N.debug "todoCase")) $
330− [ JS.String (N.toBuilder home)
329+ JS.Call (JS.Ref (JsName.fromKernel Name.debug "todoCase")) $
330+ [ JS.String (Name.toBuilder home)
331331 , regionToJsExpr region
332− , JS.Ref (Name.fromLocal valueName)
332+ , JS.Ref (JsName.fromLocal valueName)
333333 ]
334334
335335
336336regionToJsExpr :: R.Region -> JS.Expr
337337regionToJsExpr (R.Region start end) =
338338 JS.Object
339− [ ( Name.fromLocal "start", positionToJsExpr start )
340− , ( Name.fromLocal "end", positionToJsExpr end )
339+ [ ( JsName.fromLocal "start", positionToJsExpr start )
340+ , ( JsName.fromLocal "end", positionToJsExpr end )
341341 ]
342342
343343
344344positionToJsExpr :: R.Position -> JS.Expr
345345positionToJsExpr (R.Position line column) =
346346 JS.Object
347− [ ( Name.fromLocal "line", JS.Int line )
348− , ( Name.fromLocal "column", JS.Int column )
347+ [ ( JsName.fromLocal "line", JS.Int line )
348+ , ( JsName.fromLocal "column", JS.Int column )
349349 ]
350350
351351
@@ -353,7 +353,7 @@ positionToJsExpr (R.Position line column) =
353353-- FUNCTION
354354
355355
356−generateFunction :: [Name.Name] -> Code -> Code
356+generateFunction :: [JsName.Name] -> Code -> Code
357357generateFunction args body =
358358 case IntMap.lookup (length args) funcHelpers of
359359 Just helper ->
@@ -376,7 +376,7 @@ generateFunction args body =
376376funcHelpers :: IntMap.IntMap JS.Expr
377377funcHelpers =
378378 IntMap.fromList $
379− map (\n -> (n, JS.Ref (Name.makeF n))) [2..9]
379+ map (\n -> (n, JS.Ref (JsName.makeF n))) [2..9]
380380
381381
382382
@@ -413,9 +413,9 @@ generateCallHelp mode func args =
413413 (map (generateJsExpr mode) args)
414414
415415
416−generateGlobalCall :: ModuleName.Canonical -> N.Name -> [JS.Expr] -> JS.Expr
416+generateGlobalCall :: ModuleName.Canonical -> Name.Name -> [JS.Expr] -> JS.Expr
417417generateGlobalCall home name args =
418− generateNormalCall (JS.Ref (Name.fromGlobal home name)) args
418+ generateNormalCall (JS.Ref (JsName.fromGlobal home name)) args
419419
420420
421421generateNormalCall :: JS.Expr -> [JS.Expr] -> JS.Expr
@@ -432,7 +432,7 @@ generateNormalCall func args =
432432callHelpers :: IntMap.IntMap JS.Expr
433433callHelpers =
434434 IntMap.fromList $
435− map (\n -> (n, JS.Ref (Name.makeA n))) [2..9]
435+ map (\n -> (n, JS.Ref (JsName.makeA n))) [2..9]
436436
437437
438438
@@ -441,36 +441,36 @@ callHelpers =
441441
442442generateCoreCall :: Mode.Mode -> Opt.Global -> [Opt.Expr] -> JS.Expr
443443generateCoreCall mode (Opt.Global home@(ModuleName.Canonical _ moduleName) name) args =
444− if moduleName == N.basics then
444+ if moduleName == Name.basics then
445445 generateBasicsCall mode home name args
446446
447− else if moduleName == N.bitwise then
447+ else if moduleName == Name.bitwise then
448448 generateBitwiseCall home name (map (generateJsExpr mode) args)
449449
450− else if moduleName == N.tuple then
450+ else if moduleName == Name.tuple then
451451 generateTupleCall home name (map (generateJsExpr mode) args)
452452
453− else if moduleName == N.jsArray then
453+ else if moduleName == Name.jsArray then
454454 generateJsArrayCall home name (map (generateJsExpr mode) args)
455455
456456 else
457457 generateGlobalCall home name (map (generateJsExpr mode) args)
458458
459459
460−generateTupleCall :: ModuleName.Canonical -> N.Name -> [JS.Expr] -> JS.Expr
460+generateTupleCall :: ModuleName.Canonical -> Name.Name -> [JS.Expr] -> JS.Expr
461461generateTupleCall home name args =
462462 case args of
463463 [value] ->
464464 case name of
465− "first" -> JS.Access value (Name.fromLocal "a")
466− "second" -> JS.Access value (Name.fromLocal "b")
465+ "first" -> JS.Access value (JsName.fromLocal "a")
466+ "second" -> JS.Access value (JsName.fromLocal "b")
467467 _ -> generateGlobalCall home name args
468468
469469 _ ->
470470 generateGlobalCall home name args
471471
472472
473−generateJsArrayCall :: ModuleName.Canonical -> N.Name -> [JS.Expr] -> JS.Expr
473+generateJsArrayCall :: ModuleName.Canonical -> Name.Name -> [JS.Expr] -> JS.Expr
474474generateJsArrayCall home name args =
475475 case args of
476476 [entry] | name == "singleton" -> JS.Array [entry]
@@ -478,7 +478,7 @@ generateJsArrayCall home name args =
478478 _ -> generateGlobalCall home name args
479479
480480
481−generateBitwiseCall :: ModuleName.Canonical -> N.Name -> [JS.Expr] -> JS.Expr
481+generateBitwiseCall :: ModuleName.Canonical -> Name.Name -> [JS.Expr] -> JS.Expr
482482generateBitwiseCall home name args =
483483 case args of
484484 [arg] ->
@@ -500,7 +500,7 @@ generateBitwiseCall home name args =
500500 generateGlobalCall home name args
501501
502502
503−generateBasicsCall :: Mode.Mode -> ModuleName.Canonical -> N.Name -> [Opt.Expr] -> JS.Expr
503+generateBasicsCall :: Mode.Mode -> ModuleName.Canonical -> Name.Name -> [Opt.Expr] -> JS.Expr
504504generateBasicsCall mode home name args =
505505 case args of
506506 [elmArg] ->
@@ -551,7 +551,7 @@ equal left right =
551551 if isLiteral left || isLiteral right then
552552 strictEq left right
553553 else
554− JS.Call (JS.Ref (Name.fromKernel N.utils "eq")) [left, right]
554+ JS.Call (JS.Ref (JsName.fromKernel Name.utils "eq")) [left, right]
555555
556556
557557notEqual :: JS.Expr -> JS.Expr -> JS.Expr
@@ -560,7 +560,7 @@ notEqual left right =
560560 strictNEq left right
561561 else
562562 JS.Prefix JS.PrefixLNot $
563− JS.Call (JS.Ref (Name.fromKernel N.utils "eq")) [left, right]
563+ JS.Call (JS.Ref (JsName.fromKernel Name.utils "eq")) [left, right]
564564
565565
566566cmp :: JS.InfixOp -> JS.InfixOp -> Int -> JS.Expr -> JS.Expr -> JS.Expr
@@ -569,7 +569,7 @@ cmp idealOp backupOp backupInt left right =
569569 JS.Infix idealOp left right
570570 else
571571 JS.Infix backupOp
572− (JS.Call (JS.Ref (Name.fromKernel N.utils "cmp")) [left, right])
572+ (JS.Call (JS.Ref (JsName.fromKernel Name.utils "cmp")) [left, right])
573573 (JS.Int backupInt)
574574
575575
@@ -616,7 +616,7 @@ append mode left right =
616616
617617jsAppend :: JS.Expr -> JS.Expr -> JS.Expr
618618jsAppend a b =
619− JS.Call (JS.Ref (Name.fromKernel N.utils "ap")) [a, b]
619+ JS.Call (JS.Ref (JsName.fromKernel Name.utils "ap")) [a, b]
620620
621621
622622toSeqs :: Mode.Mode -> Opt.Expr -> [JS.Expr]
@@ -692,19 +692,19 @@ strictNEq left right =
692692
693693-- TODO check if JS minifiers collapse unnecessary temporary variables
694694--
695−generateTailCall :: Mode.Mode -> N.Name -> [(N.Name, Opt.Expr)] -> [JS.Stmt]
695+generateTailCall :: Mode.Mode -> Name.Name -> [(Name.Name, Opt.Expr)] -> [JS.Stmt]
696696generateTailCall mode name args =
697697 let
698698 toTempVars (argName, arg) =
699− ( Name.makeTemp argName, Just (generateJsExpr mode arg) )
699+ ( JsName.makeTemp argName, Just (generateJsExpr mode arg) )
700700
701701 toRealVars (argName, _) =
702702 JS.ExprStmt $
703− JS.Assign (JS.LRef (Name.fromLocal argName)) (JS.Ref (Name.makeTemp argName))
703+ JS.Assign (JS.LRef (JsName.fromLocal argName)) (JS.Ref (JsName.makeTemp argName))
704704 in
705705 JS.Var (map toTempVars args)
706706 : map toRealVars args
707− ++ [ JS.Continue (Just (Name.fromLocal name)) ]
707+ ++ [ JS.Continue (Just (JsName.fromLocal name)) ]
708708
709709
710710
@@ -715,16 +715,16 @@ generateDef :: Mode.Mode -> Opt.Def -> JS.Stmt
715715generateDef mode def =
716716 case def of
717717 Opt.Def name body ->
718− JS.Var [ (Name.fromLocal name, Just (generateJsExpr mode body)) ]
718+ JS.Var [ (JsName.fromLocal name, Just (generateJsExpr mode body)) ]
719719
720720 Opt.TailDef name argNames body ->
721− JS.Var [ (Name.fromLocal name, Just (codeToExpr (generateTailDef mode name argNames body))) ]
721+ JS.Var [ (JsName.fromLocal name, Just (codeToExpr (generateTailDef mode name argNames body))) ]
722722
723723
724−generateTailDef :: Mode.Mode -> N.Name -> [N.Name] -> Opt.Expr -> Code
724+generateTailDef :: Mode.Mode -> Name.Name -> [Name.Name] -> Opt.Expr -> Code
725725generateTailDef mode name argNames body =
726− generateFunction (map Name.fromLocal argNames) $ JsBlock $
727− [ JS.Labelled (Name.fromLocal name) $
726+ generateFunction (map JsName.fromLocal argNames) $ JsBlock $
727+ [ JS.Labelled (JsName.fromLocal name) $
728728 JS.While (JS.Bool True) $
729729 codeToStmt $ generate mode body
730730 ]
@@ -738,10 +738,10 @@ generatePath :: Mode.Mode -> Opt.Path -> JS.Expr
738738generatePath mode path =
739739 case path of
740740 Opt.Index index subPath ->
741− JS.Access (generatePath mode subPath) (Name.fromIndex index)
741+ JS.Access (generatePath mode subPath) (JsName.fromIndex index)
742742
743743 Opt.Root name ->
744− JS.Ref (Name.fromLocal name)
744+ JS.Ref (JsName.fromLocal name)
745745
746746 Opt.Field field subPath ->
747747 JS.Access (generatePath mode subPath) (generateField mode field)
@@ -749,7 +749,7 @@ generatePath mode path =
749749 Opt.Unbox subPath ->
750750 case mode of
751751 Mode.Dev _ _ ->
752− JS.Access (generatePath mode subPath) (Name.fromIndex Index.first)
752+ JS.Access (generatePath mode subPath) (JsName.fromIndex Index.first)
753753
754754 Mode.Prod _ _ ->
755755 generatePath mode subPath
@@ -824,30 +824,30 @@ crushIfsHelp visitedBranches unvisitedBranches final =
824824-- CASE EXPRESSIONS
825825
826826
827−generateCase :: Mode.Mode -> N.Name -> N.Name -> Opt.Decider Opt.Choice -> [(Int, Opt.Expr)] -> [JS.Stmt]
827+generateCase :: Mode.Mode -> Name.Name -> Name.Name -> Opt.Decider Opt.Choice -> [(Int, Opt.Expr)] -> [JS.Stmt]
828828generateCase mode label root decider jumps =
829829 foldr (goto mode label) (generateDecider mode label root decider) jumps
830830
831831
832−goto :: Mode.Mode -> N.Name -> (Int, Opt.Expr) -> [JS.Stmt] -> [JS.Stmt]
832+goto :: Mode.Mode -> Name.Name -> (Int, Opt.Expr) -> [JS.Stmt] -> [JS.Stmt]
833833goto mode label (index, branch) stmts =
834834 let
835835 labeledDeciderStmt =
836836 JS.Labelled
837− (Name.makeLabel label index)
837+ (JsName.makeLabel label index)
838838 (JS.While (JS.Bool True) (JS.Block stmts))
839839 in
840840 labeledDeciderStmt : codeToStmtList (generate mode branch)
841841
842842
843−generateDecider :: Mode.Mode -> N.Name -> N.Name -> Opt.Decider Opt.Choice -> [JS.Stmt]
843+generateDecider :: Mode.Mode -> Name.Name -> Name.Name -> Opt.Decider Opt.Choice -> [JS.Stmt]
844844generateDecider mode label root decisionTree =
845845 case decisionTree of
846846 Opt.Leaf (Opt.Inline branch) ->
847847 codeToStmtList (generate mode branch)
848848
849849 Opt.Leaf (Opt.Jump index) ->
850− [ JS.Break (Just (Name.makeLabel label index)) ]
850+ [ JS.Break (Just (JsName.makeLabel label index)) ]
851851
852852 Opt.Chain testChain success failure ->
853853 [ JS.IfStmt
@@ -867,7 +867,7 @@ generateDecider mode label root decisionTree =
867867 ]
868868
869869
870−generateIfTest :: Mode.Mode -> N.Name -> (DT.Path, DT.Test) -> JS.Expr
870+generateIfTest :: Mode.Mode -> Name.Name -> (DT.Path, DT.Test) -> JS.Expr
871871generateIfTest mode root (path, test) =
872872 let
873873 value = pathToJsExpr mode root path
@@ -877,16 +877,16 @@ generateIfTest mode root (path, test) =
877877 let
878878 tag =
879879 case mode of
880− Mode.Dev _ _ -> JS.Access value Name.dollar
880+ Mode.Dev _ _ -> JS.Access value JsName.dollar
881881 Mode.Prod _ _ ->
882882 case opts of
883− Can.Normal -> JS.Access value Name.dollar
883+ Can.Normal -> JS.Access value JsName.dollar
884884 Can.Enum -> value
885885 Can.Unbox -> value
886886 in
887887 strictEq tag $
888888 case mode of
889− Mode.Dev _ _ -> JS.String (N.toBuilder name)
889+ Mode.Dev _ _ -> JS.String (Name.toBuilder name)
890890 Mode.Prod _ _ -> JS.Int (ctorToInt home name index)
891891
892892 DT.IsBool True ->
@@ -901,25 +901,25 @@ generateIfTest mode root (path, test) =
901901 DT.IsChr char ->
902902 strictEq (JS.String (Utf8.toBuilder char)) $
903903 case mode of
904− Mode.Dev _ _ -> JS.Call (JS.Access value (Name.fromLocal "valueOf")) []
904+ Mode.Dev _ _ -> JS.Call (JS.Access value (JsName.fromLocal "valueOf")) []
905905 Mode.Prod _ _ -> value
906906
907907 DT.IsStr string ->
908908 strictEq value (JS.String (Utf8.toBuilder string))
909909
910910 DT.IsCons ->
911− JS.Access value (Name.fromLocal "b")
911+ JS.Access value (JsName.fromLocal "b")
912912
913913 DT.IsNil ->
914914 JS.Prefix JS.PrefixLNot $
915− JS.Access value (Name.fromLocal "b")
915+ JS.Access value (JsName.fromLocal "b")
916916
917917 DT.IsTuple ->
918918 error "COMPILER BUG - there should never be tests on a tuple"
919919
920920
921921
922−generateCaseBranch :: Mode.Mode -> N.Name -> N.Name -> (DT.Test, Opt.Decider Opt.Choice) -> JS.Case
922+generateCaseBranch :: Mode.Mode -> Name.Name -> Name.Name -> (DT.Test, Opt.Decider Opt.Choice) -> JS.Case
923923generateCaseBranch mode label root (test, subTree) =
924924 JS.Case
925925 (generateCaseValue mode test)
@@ -931,7 +931,7 @@ generateCaseValue mode test =
931931 case test of
932932 DT.IsCtor home name index _ _ ->
933933 case mode of
934− Mode.Dev _ _ -> JS.String (N.toBuilder name)
934+ Mode.Dev _ _ -> JS.String (Name.toBuilder name)
935935 Mode.Prod _ _ -> JS.Int (ctorToInt home name index)
936936
937937 DT.IsInt int ->
@@ -956,24 +956,24 @@ generateCaseValue mode test =
956956 error "COMPILER BUG - there should never be three tests on a tuple"
957957
958958
959−generateCaseTest :: Mode.Mode -> N.Name -> DT.Path -> DT.Test -> JS.Expr
959+generateCaseTest :: Mode.Mode -> Name.Name -> DT.Path -> DT.Test -> JS.Expr
960960generateCaseTest mode root path exampleTest =
961961 let
962962 value = pathToJsExpr mode root path
963963 in
964964 case exampleTest of
965965 DT.IsCtor home name _ _ opts ->
966− if name == N.bool && home == ModuleName.basics then
966+ if name == Name.bool && home == ModuleName.basics then
967967 value
968968 else
969969 case mode of
970970 Mode.Dev _ _ ->
971− JS.Access value Name.dollar
971+ JS.Access value JsName.dollar
972972
973973 Mode.Prod _ _ ->
974974 case opts of
975975 Can.Normal ->
976− JS.Access value Name.dollar
976+ JS.Access value JsName.dollar
977977
978978 Can.Enum ->
979979 value
@@ -990,7 +990,7 @@ generateCaseTest mode root path exampleTest =
990990 DT.IsChr _ ->
991991 case mode of
992992 Mode.Dev _ _ ->
993− JS.Call (JS.Access value (Name.fromLocal "valueOf")) []
993+ JS.Call (JS.Access value (JsName.fromLocal "valueOf")) []
994994
995995 Mode.Prod _ _ ->
996996 value
@@ -1012,22 +1012,22 @@ generateCaseTest mode root path exampleTest =
10121012-- PATTERN PATHS
10131013
10141014
1015−pathToJsExpr :: Mode.Mode -> N.Name -> DT.Path -> JS.Expr
1015+pathToJsExpr :: Mode.Mode -> Name.Name -> DT.Path -> JS.Expr
10161016pathToJsExpr mode root path =
10171017 case path of
10181018 DT.Index index subPath ->
1019− JS.Access (pathToJsExpr mode root subPath) (Name.fromIndex index)
1019+ JS.Access (pathToJsExpr mode root subPath) (JsName.fromIndex index)
10201020
10211021 DT.Unbox subPath ->
10221022 case mode of
10231023 Mode.Dev _ _ ->
1024− JS.Access (pathToJsExpr mode root subPath) (Name.fromIndex Index.first)
1024+ JS.Access (pathToJsExpr mode root subPath) (JsName.fromIndex Index.first)
10251025
10261026 Mode.Prod _ _ ->
10271027 pathToJsExpr mode root subPath
10281028
10291029 DT.Empty ->
1030− JS.Ref (Name.fromLocal root)
1030+ JS.Ref (JsName.fromLocal root)
10311031
10321032
10331033
@@ -1038,13 +1038,13 @@ generateMain :: Mode.Mode -> ModuleName.Canonical -> Opt.Main -> JS.Expr
10381038generateMain mode home main =
10391039 case main of
10401040 Opt.Static ->
1041− JS.Ref (Name.fromKernel N.virtualDom "init")
1042− # JS.Ref (Name.fromGlobal home "main")
1041+ JS.Ref (JsName.fromKernel Name.virtualDom "init")
1042+ # JS.Ref (JsName.fromGlobal home "main")
10431043 # JS.Int 0
10441044 # JS.Int 0
10451045
10461046 Opt.Dynamic msgType decoder ->
1047− JS.Ref (Name.fromGlobal home "main")
1047+ JS.Ref (JsName.fromGlobal home "main")
10481048 # generateJsExpr mode decoder
10491049 # toDebugMetadata mode msgType
10501050
compiler/src/Generate/JavaScript/Mode.hs+8−8
@@ -13,11 +13,11 @@ module Generate.JavaScript.Mode
1313import qualified Data.List as List
1414import qualified Data.Map as Map
1515import qualified Data.Maybe as Maybe
16+import qualified Data.Name as Name
1617
1718import qualified AST.Optimized as Opt
1819import qualified Elm.Interface as I
19−import qualified Elm.Name as N
20−import qualified Generate.JavaScript.Name as Name
20+import qualified Generate.JavaScript.Name as JsName
2121
2222
2323
@@ -80,27 +80,27 @@ isServerHelp target =
8080
8181
8282type ShortFieldNames =
83− Map.Map N.Name Name.Name
83+ Map.Map Name.Name JsName.Name
8484
8585
86−shortenFieldNames :: Map.Map N.Name Int -> ShortFieldNames
86+shortenFieldNames :: Map.Map Name.Name Int -> ShortFieldNames
8787shortenFieldNames frequencies =
8888 Map.foldr addToShortNames Map.empty $
8989 Map.foldrWithKey addToBuckets Map.empty frequencies
9090
9191
92−addToBuckets :: N.Name -> Int -> Map.Map Int [N.Name] -> Map.Map Int [N.Name]
92+addToBuckets :: Name.Name -> Int -> Map.Map Int [Name.Name] -> Map.Map Int [Name.Name]
9393addToBuckets field frequency buckets =
9494 -- TODO try using an IntMap for buckets
9595 Map.insertWith (++) frequency [field] buckets
9696
9797
98−addToShortNames :: [N.Name] -> ShortFieldNames -> ShortFieldNames
98+addToShortNames :: [Name.Name] -> ShortFieldNames -> ShortFieldNames
9999addToShortNames fields shortNames =
100100 List.foldl' addField shortNames fields
101101
102102
103−addField :: ShortFieldNames -> N.Name -> ShortFieldNames
103+addField :: ShortFieldNames -> Name.Name -> ShortFieldNames
104104addField shortNames field =
105− let rename = Name.fromInt (Map.size shortNames) in
105+ let rename = JsName.fromInt (Map.size shortNames) in
106106 Map.insert field rename shortNames
compiler/src/Generate/JavaScript/Name.hs+38−43
@@ -19,17 +19,14 @@ module Generate.JavaScript.Name
1919
2020
2121import qualified Data.ByteString.Builder as B
22−import qualified Data.ByteString.Short as S
2322import Data.Monoid ((<>))
2423import qualified Data.Map as Map
24+import qualified Data.Name as Name
2525import qualified Data.Set as Set
26−import qualified Data.Text as Text
27−import qualified Data.Text.Encoding as Text
2826import Data.Word (Word8)
2927
3028import qualified AST.Module.Name as ModuleName
3129import qualified Data.Index as Index
32−import qualified Elm.Name as N
3330import qualified Elm.Package as Pkg
3431
3532
@@ -52,38 +49,36 @@ fromIndex index =
5249
5350fromInt :: Int -> Name
5451fromInt n =
55− Name (B.shortByteString (intToAscii n))
52+ Name (Name.toBuilder (intToAscii n))
5653
5754
58−fromLocal :: N.Name -> Name
55+fromLocal :: Name.Name -> Name
5956fromLocal name =
6057 if Set.member name reservedNames then
61− Name ("_" <> N.toBuilder name)
58+ Name ("_" <> Name.toBuilder name)
6259 else
63− Name (N.toBuilder name)
60+ Name (Name.toBuilder name)
6461
6562
66−fromGlobal :: ModuleName.Canonical -> N.Name -> Name
67−fromGlobal (ModuleName.Canonical (Pkg.Name user project) home) name =
68− Name $
69− Text.encodeUtf8Builder (Text.replace "-" "_" user)
70− <> "$" <> Text.encodeUtf8Builder (Text.replace "-" "_" project) -- TODO store this in a better way
71− <> "$" <> N.toDotlessBuilder home
72− <> "$" <> N.toBuilder name
63+fromGlobal :: ModuleName.Canonical -> Name.Name -> Name
64+fromGlobal (ModuleName.Canonical (Pkg.Name author project) home) name =
65+ Name $ Name.toEscapedBuilder 0x2D {- - -} 0x5F {- _ -} author
66+ <> "$" <> Name.toEscapedBuilder 0x2D {- - -} 0x5F {- _ -} project
67+ <> "$" <> Name.toEscapedBuilder 0x2E {- . -} 0x24 {- $ -} home
68+ <> "$" <> Name.toBuilder name
7369
7470
75−fromCycle :: ModuleName.Canonical -> N.Name -> Name
76−fromCycle (ModuleName.Canonical (Pkg.Name user project) home) name =
77− Name $
78− Text.encodeUtf8Builder (Text.replace "-" "_" user)
79− <> "$" <> Text.encodeUtf8Builder (Text.replace "-" "_" project) -- TODO store this in a better way
80− <> "$" <> N.toDotlessBuilder home
81− <> "$cyclic$" <> N.toBuilder name
71+fromCycle :: ModuleName.Canonical -> Name.Name -> Name
72+fromCycle (ModuleName.Canonical (Pkg.Name author project) home) name =
73+ Name $ Name.toEscapedBuilder 0x2D {- - -} 0x5F {- _ -} author
74+ <> "$" <> Name.toEscapedBuilder 0x2D {- - -} 0x5F {- _ -} project
75+ <> "$" <> Name.toEscapedBuilder 0x2E {- . -} 0x24 {- $ -} home
76+ <> "$cyclic$" <> Name.toBuilder name
8277
8378
84−fromKernel :: N.Name -> N.Name -> Name
79+fromKernel :: Name.Name -> Name.Name -> Name
8580fromKernel home name =
86− Name ("_" <> N.toBuilder home <> "_" <> N.toBuilder name)
81+ Name ("_" <> Name.toBuilder home <> "_" <> Name.toBuilder name)
8782
8883
8984
@@ -100,19 +95,19 @@ makeA n =
10095 Name ("A" <> B.intDec n)
10196
10297
103−makeLabel :: N.Name -> Int -> Name
98+makeLabel :: Name.Name -> Int -> Name
10499makeLabel name index =
105− Name (N.toBuilder name <> "$" <> B.intDec index)
100+ Name (Name.toBuilder name <> "$" <> B.intDec index)
106101
107102
108−makeTemp :: N.Name -> Name
103+makeTemp :: Name.Name -> Name
109104makeTemp name =
110− Name ("$temp$" <> N.toBuilder name)
105+ Name ("$temp$" <> Name.toBuilder name)
111106
112107
113108dollar :: Name
114109dollar =
115− Name (N.toBuilder N.dollar)
110+ Name (Name.toBuilder Name.dollar)
116111
117112
118113
@@ -120,12 +115,12 @@ dollar =
120115
121116
122117{-# NOINLINE reservedNames #-}
123−reservedNames :: Set.Set N.Name
118+reservedNames :: Set.Set Name.Name
124119reservedNames =
125120 Set.union jsReservedWords elmReservedWords
126121
127122
128−jsReservedWords :: Set.Set N.Name
123+jsReservedWords :: Set.Set Name.Name
129124jsReservedWords =
130125 Set.fromList
131126 [ "do", "if", "in"
@@ -141,7 +136,7 @@ jsReservedWords =
141136 ]
142137
143138
144−elmReservedWords :: Set.Set N.Name
139+elmReservedWords :: Set.Set Name.Name
145140elmReservedWords =
146141 Set.fromList
147142 [ "F2", "F3", "F4", "F5", "F6", "F7", "F8", "F9"
@@ -153,16 +148,16 @@ elmReservedWords =
153148-- INT TO ASCII
154149
155150
156−intToAscii :: Int -> S.ShortByteString
151+intToAscii :: Int -> Name.Name
157152intToAscii n =
158153 if n < 53 then -- skip $ as a standalone name
159− S.pack [toByte n]
154+ Name.fromWords [toByte n]
160155
161156 else
162157 intToAsciiHelp 2 (numStartBytes * numInnerBytes) allBadFields (n - 53)
163158
164159
165−intToAsciiHelp :: Int -> Int -> [BadFields] -> Int -> S.ShortByteString
160+intToAsciiHelp :: Int -> Int -> [BadFields] -> Int -> Name.Name
166161intToAsciiHelp width blockSize badFields n =
167162 case badFields of
168163 [] ->
@@ -184,10 +179,10 @@ intToAsciiHelp width blockSize badFields n =
184179-- UNSAFE INT TO ASCII
185180
186181
187−unsafeIntToAscii :: Int -> [Word8] -> Int -> S.ShortByteString
182+unsafeIntToAscii :: Int -> [Word8] -> Int -> Name.Name
188183unsafeIntToAscii width bytes n =
189184 if width <= 1 then
190− S.pack (toByte n : bytes)
185+ Name.fromWords (toByte n : bytes)
191186 else
192187 let
193188 (quotient, remainder) =
@@ -229,27 +224,27 @@ newtype BadFields =
229224
230225
231226type Renamings =
232− Map.Map S.ShortByteString S.ShortByteString
227+ Map.Map Name.Name Name.Name
233228
234229
235230allBadFields :: [BadFields]
236231allBadFields =
237232 let
238233 add keyword dict =
239− Map.alter (Just . addRenaming keyword) (N.length keyword) dict
234+ Map.alter (Just . addRenaming keyword) (Name.length keyword) dict
240235 in
241236 Map.elems $ Set.foldr add Map.empty jsReservedWords
242237
243238
244−addRenaming :: N.Name -> Maybe BadFields -> BadFields
239+addRenaming :: Name.Name -> Maybe BadFields -> BadFields
245240addRenaming keyword maybeBadFields =
246241 let
247− width = N.length keyword
242+ width = Name.length keyword
248243 maxName = numStartBytes * numInnerBytes ^ (width - 1) - 1
249244 in
250245 case maybeBadFields of
251246 Nothing ->
252− BadFields $ Map.singleton (N.toShort keyword) (unsafeIntToAscii width [] maxName)
247+ BadFields $ Map.singleton keyword (unsafeIntToAscii width [] maxName)
253248
254249 Just (BadFields renamings) ->
255− BadFields $ Map.insert (N.toShort keyword) (unsafeIntToAscii width [] (maxName - Map.size renamings)) renamings
250+ BadFields $ Map.insert keyword (unsafeIntToAscii width [] (maxName - Map.size renamings)) renamings