@@ -3,8 +3,6 @@
3module Generate.JavaScript.Variable
3module Generate.JavaScript.Variable
4 ( Generator
4 ( Generator
@@ -15,9 +13,8 @@ module Generate.JavaScript.Variable
18−import qualified Control.Monad.State as State
16+import qualified Control.Monad.State.Strict as State
19import Data.Monoid ((<>))
17import Data.Monoid ((<>))
20−import qualified Data.Map as Map
21import qualified Data.Set as Set
18import qualified Data.Set as Set
22import qualified Data.Text as Text
19import qualified Data.Text as Text
23import Data.Text (Text)
20import Data.Text (Text)
@@ -34,28 +31,12 @@ import qualified Generate.JavaScript.Helpers as JS
34-- GENERATOR
31-- GENERATOR
37−type Generator = State.State Table
34+type Generator = State.State Int
40−run :: Table -> Generator a -> ( a, Table )
37+run :: Generator a -> a
41−run table generator =
38+run generator =
42− State.runState generator table
39+ State.evalState generator 0
52− , _names :: Map.Map Var.Global Text
@@ -64,9 +45,9 @@ emptyTable =
65fresh :: Generator Text
46fresh :: Generator Text
67− do (Table uid names) <- State.get
48+ do uid <- State.get
68− State.put (Table (uid + 1) names)
49+ State.put (uid + 1)
69− return (Text.pack ("_v" ++ show uid))
50+ return ("_v" <> Text.pack (show uid))
@@ -117,26 +98,8 @@ global var =
119globalName :: Var.Global -> Generator Text
100globalName :: Var.Global -> Generator Text
120−globalName var =
101+globalName (Var.Global home name) =
121− do table <- State.get
122− globalNameHelp var table
125−globalNameHelp :: Var.Global -> Table -> Generator Text
126−globalNameHelp var@(Var.Global home name) (Table uid names) =
127− case Help.isOp name of
129− return $ globalToName home name
102+ return (globalToName home name)
132− case Map.lookup var names of
137− do let jsName = globalToName home ("_op" <> Text.pack (show uid))
138− State.put (Table (uid + 1) (Map.insert var jsName names))
142globalToName :: ModuleName.Canonical -> Text -> Text
105globalToName :: ModuleName.Canonical -> Text -> Text
@@ -145,8 +108,15 @@ globalToName (ModuleName.Canonical (Pkg.Name user project) moduleName) name =
145 "_" <> ModuleName.getKernel moduleName <> "_" <> name
108 "_" <> ModuleName.getKernel moduleName <> "_" <> name
113+ if Help.isOp name then
114+ "_op_" <> Help.desymbol name
148− Text.replace "-" "_" user
118+ Text.replace "-" "_" user
149− <> "$" <> Text.replace "-" "_" project
119+ <> "$" <> Text.replace "-" "_" project
150− <> "$" <> Text.replace "." "_" moduleName
120+ <> "$" <> Text.replace "." "_" moduleName
151− <> "$" <> name
121+ <> "$" <> revisedName