@@ -301,7 +301,26 @@ jsSubst var new (JSCond conds) =
302jsSubst _ _ js = js
302jsSubst _ _ js = js
305+isJSConstant :: JS -> Bool
307+ | JSString _ <- js = True
308+ | JSChar _ <- js = True
309+ | JSNum _ <- js = True
310+ | JSType _ <- js = True
312+ | JSApp (JSIdent "__IDRRT__bigInt") _ <- js = True
304inlineJS :: JS -> JS
315inlineJS :: JS -> JS
316+inlineJS (JSApp (JSIdent "__IDR__mEVAL0") [val])
317+ | isJSConstant val = val
319+inlineJS (JSApp (JSIdent "__IDRRT__tailcall") [
320+ JSFunction [] (JSReturn val)
322+ | isJSConstant val = val
305inlineJS (JSApp (JSFunction [] (JSSeq ret)) []) =
324inlineJS (JSApp (JSFunction [] (JSSeq ret)) []) =
306 JSApp (JSFunction [] (JSSeq (map inlineJS ret))) []
325 JSApp (JSFunction [] (JSSeq (map inlineJS ret))) []
@@ -373,6 +392,9 @@ inlineJS (JSCond cases) =
373inlineJS (JSObject fields) =
392inlineJS (JSObject fields) =
374 JSObject (map (second inlineJS) fields)
393 JSObject (map (second inlineJS) fields)
395+inlineJS (JSOp op lhs rhs) =
396+ JSOp op (inlineJS lhs) (inlineJS rhs)
376inlineJS js = js
398inlineJS js = js
378reduceJS :: [JS] -> [JS]
400reduceJS :: [JS] -> [JS]