 
 compileAstToJs = (compileFn, ast) ->
   ctx = new Context
-  compileCtxAstToJs compileFn, ctx, ast
+  compileCtxAstToJsAlways compileFn, ctx, ast
+
+compileCtxAstToJsAlways = (compileFn, ctx, ast) ->
+  ir = compileFn ctx, ast
+  {js} = compileCtxIrToJs ctx, ir
+  {ctx, ast, ir, js}
 
 compileCtxAstToJs = (compileFn, ctx, ast) ->
   ir = compileFn ctx, ast
   if ctx.requested()
     return request: ctx.requested(), ast: ast, ir: ir
   {js} = compileCtxIrToJs ctx, ir
-  {ast, ir, js}
+  {ctx, ast, ir, js}
 
 compileCtxIrToJs = (ctx, ir) ->
   if ir

        #{elseCase}
      }"""


jsExprList = (elems) ->
  {js: jsExprListTranslate, elems}


compileExpression = (source, moduleName = '@unnamed') ->
  ast = (astFromSource "(#{source})", -1, -1)
  if _empty _validTerms ast
    {
      ast: ast
      js: ''
