     inner: if props then '\n' + props + '\n' + @idt() else ''
     "{$inner}"
 
-
-# A class literal, including optional superclass and constructor.
-exports.ClassNode: class ClassNode extends BaseNode
-  type: 'Class'
-
-  constructor: (variable, parent, props) ->
-    @children: compact flatten [@variable: variable, @parent: parent, @properties: props or []]
-
-  compile_node: (o) ->
-    extension:   @parent and new ExtendsNode(@variable, @parent)
-    constructor: null
-    props:       new Expressions()
-    o.top:       true
-    ret:         del o, 'returns'
-
-    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
-          val: new ValueNode(@variable, [new AccessorNode(prop.variable, 'prototype')])
-          prop: new AssignNode(val, prop.value)
-        props.push prop
-
-    if not constructor
-      if @parent
-        applied: new ValueNode(@parent, [new AccessorNode(literal('apply'))])
-        constructor: new AssignNode(@variable, new CodeNode([], new Expressions([
-          new CallNode(applied, [literal('this'), literal('arguments')])
-        ])))
-      else
-        constructor: new AssignNode(@variable, new CodeNode())
-
-    construct:                       @idt() + constructor.compile(o) + ';\n'
-    props:     if props.empty() then '' else props.compile(o) + '\n'
-    extension: if extension     then @idt() + extension.compile(o) + ';\n' else ''
-    returns:   if ret           then '\n' + @idt() + 'return ' + @variable.compile(o) + ';' else ''
-    "$construct$extension$props$returns"
-
-statement ClassNode
-
+#### ArrayNode
 
 # An array literal.
 exports.ArrayNode: class ArrayNode extends BaseNode

  is_statement: ->
    @is_value() and (@variable.is_array() or @variable.is_object())

  compile_node: (o) ->
    top:    del o, 'top'
    return  @compile_pattern_match(o) if @is_statement()

  # the top level of a block (which would be unnecessary), and we haven't
  # already been asked to return the result (because statements know how to
  # return results).
  #
  # If a Node is *top_sensitive*, that means that it needs to compile differently
  # depending on whether it's being used as part of a larger expression, or is a
  # top-level statement within the function body.
  compile: (o) ->
    @options: merge o or {}
    @tab:     o.indent
