       rv = "#{KEYWORD_TRANSLATE[@preop.value]}(#{rv})"
     return rv
 
-  @WhenExpression::js = (true_block_js) ->
+  @WhenExpression::js = (true_block_js, must_return_value) ->
     conditional_js = @condition.js()
     conditional_js = "!(#{conditional_js})" if @specifier.value is 'unless' or @specifier.value is 'except'
     if @false_expr?
       return "(#{conditional_js}) ? #{true_block_js} : #{@false_expr.js()}"
     else
-      indented_js = '  ' + true_block_js.replace /\n/g, '\n  '
-      return "if (#{conditional_js}) {\n#{indented_js}\n#{i}}"
+      if must_return_value
+        return "(#{conditional_js}) ? #{true_block_js} : void 0"
+      else
+        indented_js = '  ' + true_block_js.replace /\n/g, '\n  '
+        return "if (#{conditional_js}) {\n#{indented_js}\n#{i}}"
     return rv
   
   @ExisentialCheck::js = ->

    op = @assignOp.value
    op += '=' if op isnt '='
    rv = "#{@lvalue.js()} #{op} #{@rvalue.js()};"
    rv = @conditional.js(rv) if @conditional?
    return rv
    
  @NumberConstant::js = ->

    
  @ReturnStatement::js = ->  
    rv = "return #{@expr.js()};"
    rv = @conditional.js(rv, no) if @conditional?
    return rv
    
  @ExpressionStatement::js = ->
