on master help sign in
Merge branch 'pr/606'
adaa65fEvan Czaplicki
compiler/Generate/JavaScript.hs+2−1
@@ -34,10 +34,11 @@ include alias moduleName =
34
34
35internalImports :: String -> Statement ()
35internalImports :: String -> Statement ()
36internalImports name =
36internalImports name =
37− VarDeclStmt ()
37+ VarDeclStmt ()
38 [ varDecl "_N" (obj "Elm.Native")
38 [ varDecl "_N" (obj "Elm.Native")
39 , include "_U" "_N.Utils"
39 , include "_U" "_N.Utils"
40 , include "_L" "_N.List"
40 , include "_L" "_N.List"
41+ , include "_A" "_N.Array"
41 , include "_E" "_N.Error"
42 , include "_E" "_N.Error"
42 , varDecl "$moduleName" (string name)
43 , varDecl "$moduleName" (string name)
43 ]
44 ]
compiler/Generate/JavaScript/Ports.hs+15−8
@@ -38,7 +38,7 @@ inc tipe x =
38
38
39 Data "Json.Value" [] ->
39 Data "Json.Value" [] ->
40 obj "Native.Json.fromJS" <| x
40 obj "Native.Json.fromJS" <| x
41−
41+
42 Data ctor []
42 Data ctor []
43 | ctor == "Int" -> from JSNumber
43 | ctor == "Int" -> from JSNumber
44 | ctor == "Float" -> from JSNumber
44 | ctor == "Float" -> from JSNumber
@@ -55,8 +55,12 @@ inc tipe x =
55
55
56 | ctor == "_List" ->
56 | ctor == "_List" ->
57 check x JSArray (obj "_L.fromArray" <| array)
57 check x JSArray (obj "_L.fromArray" <| array)
58+
59+ | ctor == "Array.Array" ->
60+ check x JSArray (obj "_A.fromJSArray" <| array)
61+
58− where
62+ where
59− array = DotRef () x (var "map") <| incoming t
63+ array = DotRef () x (var "map") <| incoming t
60
64
61 Data ctor ts
65 Data ctor ts
62 | Help.isTuple ctor -> check x JSArray tuple
66 | Help.isTuple ctor -> check x JSArray tuple
@@ -67,10 +71,10 @@ inc tipe x =
67 , inc t (BracketRef () x (IntLit () n)))
71 , inc t (BracketRef () x (IntLit () n)))
68
72
69 Data _ _ ->
73 Data _ _ ->
70− error "bad ADT got to port generation code"
74+ error "bad ADT got to incoming port generation code"
71
75
72 Record _ (Just _) ->
76 Record _ (Just _) ->
73− error "bad record got to port generation code"
77+ error "bad record got to incoming port generation code"
74
78
75 Record fields Nothing ->
79 Record fields Nothing ->
76 check x (JSObject (map fst fields)) object
80 check x (JSObject (map fst fields)) object
@@ -117,16 +121,19 @@ out tipe x =
117 | ctor == "_List" ->
121 | ctor == "_List" ->
118 DotRef () (obj "_L.toArray" <| x) (var "map") <| outgoing t
122 DotRef () (obj "_L.toArray" <| x) (var "map") <| outgoing t
119
123
124+ | ctor == "Array.Array" ->
125+ DotRef () (obj "_A.toJSArray" <| x) (var "map") <| outgoing t
126+
120 Data ctor ts
127 Data ctor ts
121 | Help.isTuple ctor ->
128 | Help.isTuple ctor ->
122 let convert n t = out t $ DotRef () x $ var ('_':show n)
129 let convert n t = out t $ DotRef () x $ var ('_':show n)
123 in ArrayLit () $ zipWith convert [0..] ts
130 in ArrayLit () $ zipWith convert [0..] ts
124−
131+
125 Data _ _ ->
132 Data _ _ ->
126− error "bad ADT got to port generation code"
133+ error "bad ADT got to outgoing port generation code"
127
134
128 Record _ (Just _) ->
135 Record _ (Just _) ->
129− error "bad record got to port generation code"
136+ error "bad record got to outgoing port generation code"
130
137
131 Record fields Nothing ->
138 Record fields Nothing ->
132 ObjectLit () keys
139 ObjectLit () keys
compiler/Type/ExtraChecks.hs+2−3
@@ -60,8 +60,7 @@ portTypes rules expr =
60 | otherwise -> err' True "an unsupported type"
60 | otherwise -> err' True "an unsupported type"
61 where
61 where
62 primitives =
62 primitives =
63− ["Int","Float","String","Bool","Maybe.Maybe","_List","Json.Value"]
63+ ["Int","Float","String","Bool","Maybe.Maybe","_List","Array.Array","Json.Value"]
64−
65 validConstructor =
64 validConstructor =
66 ctor `elem` primitives || Help.isTuple ctor
65 ctor `elem` primitives || Help.isTuple ctor
67
66
@@ -102,7 +101,7 @@ portTypes rules expr =
102 , txt [ "It contains ", kind, ":\n" ]
101 , txt [ "It contains ", kind, ":\n" ]
103 , (P.nest 4 . SPP.pretty $ Alias.realias rules tipe) <> P.text "\n"
102 , (P.nest 4 . SPP.pretty $ Alias.realias rules tipe) <> P.text "\n"
104 , txt [ "Acceptable values for ", dir "incoming" "outgoing", " ports include:" ]
103 , txt [ "Acceptable values for ", dir "incoming" "outgoing", " ports include:" ]
105− , txt [ " Ints, Floats, Bools, Strings, Maybes, Lists, Tuples," ]
104+ , txt [ " Ints, Floats, Bools, Strings, Maybes, Lists, Arrays, Tuples," ]
106 , txt [ " Json.Values, ", dir "" "first-order functions, ", "and concrete records." ]
105 , txt [ " Json.Values, ", dir "" "first-order functions, ", "and concrete records." ]
107 ] ++ if couldBeAlias then aliasWarning else []
106 ] ++ if couldBeAlias then aliasWarning else []
108
107
libraries/Native/Error.js+2−4
@@ -4,8 +4,6 @@ Elm.Native.Error.make = function(elm) {
4 elm.Native.Error = elm.Native.Error || {};
4 elm.Native.Error = elm.Native.Error || {};
5 if (elm.Native.Error.values) return elm.Native.Error.values;
5 if (elm.Native.Error.values) return elm.Native.Error.values;
6
6
7− var fromString = Elm.Native.JavaScript.make(elm).fromString;
8−
9 function indent(lines) {
7 function indent(lines) {
10 var msg = '';
8 var msg = '';
11 for (var i = 0; i < lines.length; ++i) {
9 for (var i = 0; i < lines.length; ++i) {
@@ -26,7 +24,7 @@ Elm.Native.Error.make = function(elm) {
26 throw new Error('Runtime error in module ' + moduleName + ' (' + span + '):' + msg);
24 throw new Error('Runtime error in module ' + moduleName + ' (' + span + '):' + msg);
27 }
25 }
28
26
29− function raise(str) { throw new Error(fromString(str)); }
27+ function raise(str) { throw new Error(str); }
30
28
31 return elm.Native.Error.values = { Case: Case, If: If, raise: raise };
29 return elm.Native.Error.values = { Case: Case, If: If, raise: raise };
32−};
30+};