on master help sign in
javascript: substitute more
commitf7fc73b05f18a25a1aa55d09f860f3be335176e8 authorraichoo <raichoo@googlemail.com> dateTue 8 Oct 2013, 23:56 (13 years ago) parente5ad9f2
1 file changed+18
src/IRTS/CodegenJavaScript.hs+18
src/IRTS/CodegenJavaScript.hs+18
@@ -222,9 +222,27 @@ jsSubst :: String -> JS -> JS -> JS
222222jsSubst var new (JSVar old)
223223 | var == translateVariableName old = new
224224
225+jsSubst var new (JSRaw old)
226+ | var == old = new
227+
225228jsSubst var new (JSArray fields) =
226229 JSArray (map (jsSubst var new) fields)
227230
231+jsSubst var new (JSNew con [tag, vals]) =
232+ JSNew con [tag, jsSubst var new vals]
233+
234+jsSubst var new (JSNew con [JSFunction [] (JSReturn (JSApp fun vars))]) =
235+ JSNew con [JSFunction [] (
236+ JSReturn $ JSApp fun (map (jsSubst var new) vars)
237+ )]
238+
239+jsSubst var new (JSApp (JSRaw "__IDRRT__tailcall") [JSFunction [] (
240+ JSReturn (JSApp fun args)
241+ )]) =
242+ JSApp (JSRaw "__IDRRT__tailcall") [JSFunction [] (
243+ JSReturn $ JSApp fun (map (jsSubst var new) args)
244+ )]
245+
228246jsSubst _ _ js = js
229247
230248optimizeJS :: JS -> JS