   # TODO: This generates pretty ugly code ... shrink it.
   compile_array: (o) ->
     name: o.scope.free_variable()
-    body: Expressions.wrap([new LiteralNode(name)])
-    arr:  Expressions.wrap([new ForNode(body, {source: (new ValueNode(this))}, new LiteralNode(name))])
+    body: Expressions.wrap([literal(name)])
+    arr:  Expressions.wrap([new ForNode(body, {source: (new ValueNode(this))}, literal(name))])
     (new ParentheticalNode(new CallNode(new CodeNode([], arr)))).compile(o)
 
 

  # If the code generation wishes to use the result of a complex expression
  # in multiple places, ensure that the expression is only ever evaluated once.
  compile_reference: (o) ->
    reference: new LiteralNode(o.scope.free_variable())
    compiled:  new AssignNode(reference, this)
    [compiled, reference]


    for prop in @properties
      if prop.variable and prop.variable.base.value is 'constructor'
        func: prop.value
        func.body.push(new ReturnNode(literal('this')))
        constructor: new AssignNode(@variable, func)
      else
        if prop.variable
