     expr = @body.unwrap()
     if expr instanceof Value and expr.isAtomic()
       expr.front = @front
-      return expr.compile o
-    code = expr.compile o, LEVEL_PAREN
+      return expr.compileToFragments o
+    fragments = expr.compileToFragments o, LEVEL_PAREN
     bare = o.level < LEVEL_OP and (expr instanceof Op or expr instanceof Call or
       (expr instanceof For and expr.returns))
-    if bare then code else "(#{code})"
+    if bare then fragments else @wrapInBraces fragments
 
 #### For
 

  filterImplicitObjects: Call::filterImplicitObjects

  compileNode: (o) ->
    return '[]' unless @objects.length
    o.indent += TAB
    objs = @filterImplicitObjects @objects
    return code if code = Splat.compileSplattedArray o, objs
    code = (obj.compile o, LEVEL_LIST for obj in objs).join ', '
    if code.indexOf('\n') >= 0
      "[\n#{o.indent}#{code}\n#{@tab}]"
    else
      "[#{code}]"

  assigns: (name) ->
    for obj in @objects when obj.assigns name then return yes

      else
        name = obj.unwrap().value
        if obj instanceof Splat
          obj = obj.name.compileToFragments o
          throw new SyntaxError \
            "multiple splats are disallowed in an assignment: #{obj}..."
        if typeof idx is 'number'
