@@ -218,43 +218,44 @@ jsLet name value body =
218218 )
219219 ) [value]
220220
221−jsSubst :: String -> [JS] -> JS -> [JS]
222−jsSubst _ [] _ = []
223−jsSubst var (x@(JSVar old) : xs) new
224− | var == translateVariableName old = new : xs
225− | otherwise = x : jsSubst var xs new
226−jsSubst _ xs _ = xs
221+jsSubst :: String -> JS -> JS -> JS
222+jsSubst var new (JSVar old)
223+ | var == translateVariableName old = new
227224
228−optimizeJS :: JS -> JS
225+jsSubst var new (JSArray fields) =
226+ JSArray (map (jsSubst var new) fields)
227+
228+jsSubst _ _ js = js
229229
230+optimizeJS :: JS -> JS
230231optimizeJS (JSApp (JSFunction [] (JSSeq ret)) []) =
231232 JSApp (JSFunction [] (JSSeq (map optimizeJS ret))) []
232233
233234optimizeJS (JSApp (JSFunction [arg] (JSReturn ret)) [val])
234− | JSNew con [tag, JSArray vals] <- ret =
235− JSNew con [tag, JSArray $ jsSubst arg vals (optimizeJS val)]
235+ | JSNew con [tag, vals] <- ret =
236+ JSNew con [tag, jsSubst arg (optimizeJS val) vals]
236237
237238 | JSNew con [JSFunction [] (JSReturn (JSApp fun vars))] <- ret =
238239 JSNew con [JSFunction [] (
239− JSReturn $ JSApp fun (jsSubst arg vars (optimizeJS val))
240+ JSReturn $ JSApp fun (map (jsSubst arg (optimizeJS val)) vars)
240241 )]
241242
242243 | JSApp (JSRaw "__IDRRT__tailcall") [JSFunction [] (
243244 JSReturn (JSApp fun args)
244245 )] <- ret =
245246 JSApp (JSRaw "__IDRRT__tailcall") [JSFunction [] (
246− JSReturn $ JSApp fun (jsSubst arg args (optimizeJS val))
247+ JSReturn $ JSApp fun (map (jsSubst arg (optimizeJS val)) args)
247248 )]
248249
249250 | JSOp op lhs rhs <- ret =
250− JSOp op (head $ jsSubst arg [lhs] (optimizeJS val)) $
251− (head $ jsSubst arg [rhs] (optimizeJS val))
251+ JSOp op (jsSubst arg (optimizeJS val) lhs) $
252+ (jsSubst arg (optimizeJS val) rhs)
252253
253254 | JSIndex (JSProj obj field) idx <- ret =
254255 JSIndex (JSProj (
255− head $ jsSubst arg [obj] (optimizeJS val)
256+ jsSubst arg (optimizeJS val) obj
256257 ) field
257− ) (head $ jsSubst arg [idx] (optimizeJS val))
258+ ) (jsSubst arg (optimizeJS val) idx)
258259
259260optimizeJS (JSAssign lhs rhs) =
260261 JSAssign lhs (optimizeJS rhs)