@@ -109,6 +109,8 @@ compileJS (JSOp op lhs rhs) =
109compileJS (JSProj obj field)
109compileJS (JSProj obj field)
110 | JSFunction {} <- obj =
110 | JSFunction {} <- obj =
111 concat ["(", compileJS obj, ").", field]
111 concat ["(", compileJS obj, ").", field]
112+ | JSAssign {} <- obj =
113+ concat ["(", compileJS obj, ").", field]
112 | otherwise =
114 | otherwise =
113 compileJS obj ++ '.' : field
115 compileJS obj ++ '.' : field
@@ -244,6 +246,12 @@ optimizeJS (JSApp (JSFunction [arg] (JSReturn ret)) [val])
244 JSOp op (head $ jsSubst arg [lhs] (optimizeJS val)) $
246 JSOp op (head $ jsSubst arg [lhs] (optimizeJS val)) $
245 (head $ jsSubst arg [rhs] (optimizeJS val))
247 (head $ jsSubst arg [rhs] (optimizeJS val))
249+ | JSIndex (JSProj obj field) idx <- ret =
251+ head $ jsSubst arg [obj] (optimizeJS val)
253+ ) (head $ jsSubst arg [idx] (optimizeJS val))
247optimizeJS (JSSeq seq) =
255optimizeJS (JSSeq seq) =
248 JSSeq (map optimizeJS seq)
256 JSSeq (map optimizeJS seq)