           prop:   new AssignNode(val, func)
         props.push prop
 
-    unless 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'
+    construct: @idt() + (new AssignNode(@variable, 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 @returns      then new ReturnNode(@variable).compile(o)  else ''

# The CoffeeScript class definition.
exports.ClassNode: class ClassNode extends BaseNode

  class:         'ClassNode'
  children:     ['variable', 'parent', 'properties']
  isStatement: -> yes

  # Initialize a **ClassNode** with its name, an optional superclass, and a
  # list of prototype property assignments.

  # constructor, property assignments, and inheritance getting built out below.
  compileNode: (o) ->
    extension:   @parent and new ExtendsNode(@variable, @parent)
    props:       new Expressions()
    o.top:       true

    if @parent
      applied: new ValueNode(@parent, [new AccessorNode(literal('apply'))])
      constructor: new CodeNode([], new Expressions([
        new CallNode(applied, [literal('this'), literal('arguments')])
      ]))
    else
      constructor: new CodeNode()

    for prop in @properties
      [pvar, func]: [prop.variable, prop.value]
      if pvar and pvar.base.value is 'constructor' and func instanceof CodeNode
        func.name: @variable.compile(o)
        func.body.push new ReturnNode literal 'this'
        @variable: new ValueNode @variable
        @variable.namespaced: include func.name, '.'
        constructor: func
        continue
      if func instanceof CodeNode and func.bound
        constructor.body.push    new ReturnNode literal 'this' if constructor.body.empty()
        constructor.body.unshift new AssignNode(new ValueNode(literal('this'), [new AccessorNode(pvar)]), func)
      else
        if pvar
          access: if prop.context is 'this' then pvar.base.properties[0] else new AccessorNode(pvar, 'prototype')
