     inner: if props then '\n' + props + '\n' + @idt() else ''
     '{' + inner + '}'
 
-}
 
 # A class literal, including optional superclass and constructor.
-ClassNode: exports.ClassNode: inherit BaseNode, {
+exports.ClassNode: class ClassNode extends BaseNode
   type: 'Class'
 
   constructor: (variable, parent, props) ->
     @children: compact flatten [@variable: variable, @parent: parent, @properties: props or []]
-    this
 
   compile_node: (o) ->
     extension:   @parent and new ExtendsNode(@variable, @parent)

      if i is 0 then code else '.concat(' + code + ')'
    @prefix + meth + '.apply(' + obj + ', ' + args.join('') + ')'

}

# Node to extend an object's prototype with an ancestor object.
# After goog.inherits from the Closure Library.
ExtendsNode: exports.ExtendsNode: inherit BaseNode, {
  type: 'Extends'

  constructor: (child, parent) ->
    @children:  [@child: child, @parent: parent]
    this

  # Hooking one constructor into another's prototype chain.
  compile_node: (o) ->

statement: (klass, only) ->
  klass::is_statement: -> true
  (klass::is_statement_only: -> true) if only


# The abstract base class for all CoffeeScript nodes.
# All nodes are implement a "compile_node" method, which performs the
