@@ -3,6 +3,8 @@
3module Generate.JavaScript.Name
3module Generate.JavaScript.Name
6 , toBuilder
8 , toBuilder
8 , fromLocal
10 , fromLocal
@@ -13,12 +15,14 @@ module Generate.JavaScript.Name
13 , makeLabel
15 , makeLabel
14 , makeTemp
16 , makeTemp
20import qualified Data.ByteString.Builder as B
23import qualified Data.ByteString.Builder as B
21import qualified Data.ByteString.Short as S
24import qualified Data.ByteString.Short as S
25+import qualified Data.List as List
22import Data.Monoid ((<>))
26import Data.Monoid ((<>))
23import Data.Map ((!))
27import Data.Map ((!))
24import qualified Data.Map as Map
28import qualified Data.Map as Map
@@ -45,8 +49,27 @@ newtype Name =
48− = Debug
52+ = Debug Target
53+ | Prod Target ShortFieldNames
56+data Target = Client | Server
59+type ShortFieldNames =
49− | Prod (Map.Map N.Name B.Builder)
60+ Map.Map N.Name Name
63+isServer :: Mode -> Bool
66+ Debug target -> isServerHelp target
67+ Prod target _ -> isServerHelp target
70+isServerHelp :: Target -> Bool
72+ case target of { Client -> False ; Server -> True }
@@ -92,11 +115,11 @@ fromKernel home name =
92fromField :: Mode -> N.Name -> Name
115fromField :: Mode -> N.Name -> Name
93fromField mode name =
116fromField mode name =
94 case mode of
117 case mode of
95− Debug ->
118+ Debug _ ->
96 Name (N.toBuilder name)
119 Name (N.toBuilder name)
98− Prod fields ->
121+ Prod _ fields ->
99− Name (fields ! name)
122+ fields ! name
@@ -119,6 +142,33 @@ dollar =
145+-- SHORTEN FIELD NAMES
148+shortenFieldNames :: Map.Map N.Name Int -> ShortFieldNames
149+shortenFieldNames frequencies =
150+ Map.foldr addToShortNames Map.empty $
151+ Map.foldrWithKey addToBuckets Map.empty frequencies
154+addToBuckets :: N.Name -> Int -> Map.Map Int [N.Name] -> Map.Map Int [N.Name]
155+addToBuckets field frequency buckets =
156+ -- TODO try using an IntMap for buckets
157+ Map.insertWith (++) frequency [field] buckets
160+addToShortNames :: [N.Name] -> ShortFieldNames -> ShortFieldNames
161+addToShortNames fields shortNames =
162+ List.foldl' addField shortNames fields
165+addField :: ShortFieldNames -> N.Name -> ShortFieldNames
166+addField shortNames field =
167+ let rename = fromInt (Map.size shortNames) in
168+ Map.insert field rename shortNames
122-- RESERVED NAMES
172-- RESERVED NAMES