 exports.ParentheticalNode : -> @name: this.constructor.name; @values: arguments
 exports.IfNode            : -> @name: this.constructor.name; @values: arguments
 
-exports.Expressions.wrap  : (values) -> @values: values
-
 # Some helper functions
 
 # Tabs are two spaces for pretty printing.


# Merge objects.
merge: (src, dest) ->
  (dest[key]: val) for key, val of src
  dest

# Do any of the elements in the list pass a truth test?
any: (list, test) ->

ClosureNode: exports.ClosureNode: {

  wrap: (expressions, statement) ->
    func: new ParentheticalNode(new CodeNode([], Expressions.wrap([expressions])))
    call: new CallNode(new ValueNode(func, new AccessorNode(new LiteralNode('call'))), [new LiteralNode('this')])
    if statement then Expressions.wrap([call]) else call

}

