@@ -1,15 +1,14 @@
1{-# OPTIONS_GHC -Wall #-}
1{-# OPTIONS_GHC -Wall #-}
2{-# LANGUAGE OverloadedStrings #-}
2{-# LANGUAGE OverloadedStrings #-}
3module Generate.JavaScript
3module Generate.JavaScript
6− , Mode(..)
4+ ( Mode(..)
12−import Prelude hiding (cycle)
11+import Prelude hiding (cycle, print)
13import qualified Data.ByteString.Builder as B
12import qualified Data.ByteString.Builder as B
14import Data.Monoid ((<>))
13import Data.Monoid ((<>))
15import qualified Data.List as List
14import qualified Data.List as List
@@ -20,6 +19,8 @@ import qualified Data.Text as Text
21import qualified AST.Optimized as Opt
20import qualified AST.Optimized as Opt
22import qualified AST.Module.Name as ModuleName
21import qualified AST.Module.Name as ModuleName
22+import qualified Elm.Compiler.Type as Type
23+import qualified Elm.Compiler.Type.Extract as Extract
23import qualified Elm.Interface as I
24import qualified Elm.Interface as I
24import qualified Elm.Name as N
25import qualified Elm.Name as N
25import qualified Generate.JavaScript.Builder as JS
26import qualified Generate.JavaScript.Builder as JS
@@ -28,36 +29,14 @@ import qualified Generate.JavaScript.Name as Name
36− { _repl_code :: B.Builder
37− , _repl_name :: B.Builder
41−generateForRepl :: Opt.Graph -> ModuleName.Canonical -> N.Name -> ReplBuilder
42−generateForRepl (Opt.Graph _ graph _) home name =
46− addGlobal (Name.Debug Name.Client) graph emptyState (Opt.Global home name)
48− Name.toBuilder (Name.fromGlobal home name)
53-- GENERATE MAINS
32-- GENERATE MAINS
56data Mode = Debug | Prod
35data Mode = Debug | Prod
59−generate :: Mode -> Name.Target -> Opt.Graph -> I.Interfaces -> [ModuleName.Canonical] -> Either [ModuleName.Canonical] B.Builder
38+generate :: Mode -> Name.Target -> I.Interfaces -> Opt.Graph -> [ModuleName.Canonical] -> Either [ModuleName.Canonical] B.Builder
60−generate mode target (Opt.Graph mains graph fields) interfaces roots =
39+generate mode target interfaces (Opt.Graph mains graph fields) roots =
62 rootSet = Set.fromList roots
41 rootSet = Set.fromList roots
63 rootMap = Map.restrictKeys mains rootSet
42 rootMap = Map.restrictKeys mains rootSet
@@ -90,6 +69,36 @@ toRealMode mode target fields =
75+generateForRepl :: I.Interfaces -> Opt.Graph -> ModuleName.Canonical -> N.Name -> B.Builder
76+generateForRepl interfaces (Opt.Graph _ graph _) home name =
78+ mode = Name.Debug Name.Server
79+ eval = addGlobal mode graph emptyState (Opt.Global home name)
81+ stateToBuilder eval <> print interfaces home name
84+print :: I.Interfaces -> ModuleName.Canonical -> N.Name -> B.Builder
85+print interfaces home name =
87+ value = Name.toBuilder (Name.fromGlobal home name)
88+ toString = Name.toBuilder (Name.fromKernel N.debug "toString")
89+ annotation = I._types (interfaces ! home) ! name
90+ tipe = Type.toString Type.MultiLine $ Extract.fromAnnotation annotation
92+ "var _value = " <> toString <> "(" <> value <> ");\n" <>
93+ "var _type = '" <> B.stringUtf8 (show tipe) <> "';\n\
94+ \if (_value.length + 3 + _type.length >= 80 || _type.indexOf('\\n') >= 0) {\n\
95+ \ console.log(_value + '\\n : ' + _type.split('\\n').join('\\n '));\n\
97+ \ console.log(_value + ' : ' + _type);\n\
93-- GRAPH TRAVERSAL STATE
102-- GRAPH TRAVERSAL STATE