Skip to content

Commit 0f43bb6

Browse files
authored
Imperative core, initial refactoring (purescript#2723)
* Extract first version of an imperative core from the JS AST * Remove redundant import * Remove TypeOf
1 parent c71054c commit 0f43bb6

22 files changed

Lines changed: 999 additions & 1053 deletions

File tree

purescript.cabal

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -188,15 +188,8 @@ library
188188
Language.PureScript.Externs
189189
Language.PureScript.CodeGen
190190
Language.PureScript.CodeGen.JS
191-
Language.PureScript.CodeGen.JS.AST
192191
Language.PureScript.CodeGen.JS.Common
193-
Language.PureScript.CodeGen.JS.Optimizer
194-
Language.PureScript.CodeGen.JS.Optimizer.Blocks
195-
Language.PureScript.CodeGen.JS.Optimizer.Common
196-
Language.PureScript.CodeGen.JS.Optimizer.Inliner
197-
Language.PureScript.CodeGen.JS.Optimizer.MagicDo
198-
Language.PureScript.CodeGen.JS.Optimizer.TCO
199-
Language.PureScript.CodeGen.JS.Optimizer.Unused
192+
Language.PureScript.CodeGen.JS.Printer
200193
Language.PureScript.Constants
201194
Language.PureScript.CoreFn
202195
Language.PureScript.CoreFn.Ann
@@ -207,6 +200,15 @@ library
207200
Language.PureScript.CoreFn.Module
208201
Language.PureScript.CoreFn.Traversals
209202
Language.PureScript.CoreFn.ToJSON
203+
Language.PureScript.CoreImp
204+
Language.PureScript.CoreImp.AST
205+
Language.PureScript.CoreImp.Optimizer
206+
Language.PureScript.CoreImp.Optimizer.Blocks
207+
Language.PureScript.CoreImp.Optimizer.Common
208+
Language.PureScript.CoreImp.Optimizer.Inliner
209+
Language.PureScript.CoreImp.Optimizer.MagicDo
210+
Language.PureScript.CoreImp.Optimizer.TCO
211+
Language.PureScript.CoreImp.Optimizer.Unused
210212
Language.PureScript.Comments
211213
Language.PureScript.Environment
212214
Language.PureScript.Errors
@@ -229,7 +231,6 @@ library
229231
Language.PureScript.Parser.Types
230232
Language.PureScript.Pretty
231233
Language.PureScript.Pretty.Common
232-
Language.PureScript.Pretty.JS
233234
Language.PureScript.Pretty.Kinds
234235
Language.PureScript.Pretty.Types
235236
Language.PureScript.Pretty.Values

src/Language/PureScript/CodeGen/JS.hs

Lines changed: 132 additions & 160 deletions
Large diffs are not rendered by default.

src/Language/PureScript/CodeGen/JS/AST.hs

Lines changed: 0 additions & 231 deletions
This file was deleted.

src/Language/PureScript/CodeGen/JS/Common.hs

Lines changed: 6 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,4 @@
1-
-- |
2-
-- Common code generation utility functions
3-
--
1+
-- | Common code generation utility functions
42
module Language.PureScript.CodeGen.JS.Common where
53

64
import Prelude.Compat
@@ -18,15 +16,13 @@ moduleNameToJs (ModuleName pns) =
1816
let name = T.intercalate "_" (runProperName `map` pns)
1917
in if nameIsJsBuiltIn name then "$$" <> name else name
2018

21-
-- |
22-
-- Convert an Ident into a valid JavaScript identifier:
19+
-- | Convert an 'Ident' into a valid JavaScript identifier:
2320
--
2421
-- * Alphanumeric characters are kept unmodified.
2522
--
2623
-- * Reserved javascript identifiers are prefixed with '$$'.
2724
--
2825
-- * Symbols are prefixed with '$' followed by a symbol name or their ordinal value.
29-
--
3026
identToJs :: Ident -> Text
3127
identToJs (Ident name) = properToJs name
3228
identToJs (GenIdent _ _) = internalError "GenIdent in identToJs"
@@ -36,16 +32,12 @@ properToJs name
3632
| nameIsJsReserved name || nameIsJsBuiltIn name = "$$" <> name
3733
| otherwise = T.concatMap identCharToText name
3834

39-
-- |
40-
-- Test if a string is a valid JS identifier without escaping.
41-
--
35+
-- | Test if a string is a valid AST identifier without escaping.
4236
identNeedsEscaping :: Text -> Bool
4337
identNeedsEscaping s = s /= properToJs s || T.null s
4438

45-
-- |
46-
-- Attempts to find a human-readable name for a symbol, if none has been specified returns the
39+
-- | Attempts to find a human-readable name for a symbol, if none has been specified returns the
4740
-- ordinal value.
48-
--
4941
identCharToText :: Char -> Text
5042
identCharToText c | isAlphaNum c = T.singleton c
5143
identCharToText '_' = "_"
@@ -72,16 +64,12 @@ identCharToText '@' = "$at"
7264
identCharToText '\'' = "$prime"
7365
identCharToText c = '$' `T.cons` T.pack (show (ord c))
7466

75-
-- |
76-
-- Checks whether an identifier name is reserved in JavaScript.
77-
--
67+
-- | Checks whether an identifier name is reserved in JavaScript.
7868
nameIsJsReserved :: Text -> Bool
7969
nameIsJsReserved name =
8070
name `elem` jsAnyReserved
8171

82-
-- |
83-
-- Checks whether a name matches a built-in value in JavaScript.
84-
--
72+
-- | Checks whether a name matches a built-in value in JavaScript.
8573
nameIsJsBuiltIn :: Text -> Bool
8674
nameIsJsBuiltIn name =
8775
name `elem`

src/Language/PureScript/CodeGen/JS/Optimizer.hs

Lines changed: 0 additions & 60 deletions
This file was deleted.

0 commit comments

Comments
 (0)