@@ -182,11 +182,11 @@ compileJS (JSCond branches) =
182182
183183 createIfBlock (JSTrue, e) =
184184 "{\n"
185− ++ "return " ++ compileJS e
185+ ++ compileJS e
186186 ++ ";\n}"
187187 createIfBlock (cond, e) =
188188 "if (" ++ compileJS cond ++") {\n"
189− ++ "return " ++ compileJS e
189+ ++ compileJS e
190190 ++ ";\n}"
191191
192192compileJS (JSTernary cond true false) =
@@ -383,16 +383,17 @@ inlineJS :: JS -> JS
383383inlineJS (JSReturn (JSApp (JSFunction ["cse"] body) [val@(JSVar _)])) =
384384 inlineJS $ jsSubst (JSIdent "cse") val body
385385
386+
386387inlineJS (JSReturn (JSApp (JSFunction [arg] cond@(JSCond _)) [val])) =
387− JSSeq [ JSAlloc arg (Just (inlineJS val))
388− , inlineJS cond
389− ]
388+ inlineJS $ JSSeq [ JSAlloc arg (Just val)
389+ , cond
390+ ]
390391
391392inlineJS (JSApp (JSProj (JSFunction args (JSReturn body)) "apply") [
392393 JSThis,JSProj var "vars"
393394 ])
394395 | var /= JSIdent "cse" =
395− inlineApply args body 0
396+ inlineJS $ inlineApply args body 0
396397 where
397398 inlineApply [] body _ = inlineJS body
398399 inlineApply (a:as) body n =
@@ -477,7 +478,7 @@ inlineJS (JSAlloc name (Just js)) =
477478 JSAlloc name (Just $ inlineJS js)
478479
479480inlineJS (JSCond cases) =
480− JSCond (map (second inlineJS) cases)
481+ JSCond $ map (inlineJS *** inlineJS) cases
481482
482483inlineJS (JSObject fields) =
483484 JSObject (map (second inlineJS) fields)
@@ -1269,7 +1270,8 @@ translateDeclaration (path, SFun name params stackSize body)
12691270
12701271 caseFun :: [(LVar, String)] -> LVar -> SAlt -> JS
12711272 caseFun aux var cse =
1272− jsFunAux aux (translateCase (Just (translateVariableName var)) cse)
1273+ let (JSReturn c) = translateCase (Just (translateVariableName var)) cse in
1274+ jsFunAux aux c
12731275
12741276 getTag :: SAlt -> Maybe Int
12751277 getTag (SConCase _ tag _ _ _) = Just tag
@@ -1631,10 +1633,10 @@ translateCaseCond var cse@(SConCase _ tag _ _ _) =
16311633 (CaseCond $ ConCase tag, translateCase (Just var) cse)
16321634
16331635translateCase :: Maybe String -> SAlt -> JS
1634−translateCase _ (SDefaultCase e) = translateExpression e
1635−translateCase _ (SConstCase _ e) = translateExpression e
1636+translateCase _ (SDefaultCase e) = JSReturn $ translateExpression e
1637+translateCase _ (SConstCase _ e) = JSReturn $ translateExpression e
16361638translateCase (Just var) (SConCase a _ _ vars e) =
16371639 let params = map jsVar [a .. (a + length vars)] in
1638− jsMeth (JSFunction params (JSReturn $ translateExpression e)) "apply" [
1640+ JSReturn $ jsMeth (JSFunction params (JSReturn $ translateExpression e)) "apply" [
16391641 JSThis, JSProj (JSIdent var) "vars"
16401642 ]