     @ensureConstructor name
     @addBoundFunctions o
     @body.spaced = yes
-    @body.expressions.unshift @ctor unless @ctor instanceof Code
     @body.expressions.push lname
 
     if @parent
-      superClass = new Literal o.scope.freeVariable 'super', no
+      superClass = new Literal o.classScope.freeVariable 'super', no
       @body.expressions.unshift new Extends lname, superClass
       func.params.push new Param superClass
       args.push @parent


  jumps: NO

  # Compilation creates a new scope unless explicitly asked to share with the
  # outer scope. Handles splat parameters in the parameter list by peeking at
  # the JavaScript `arguments` object. If the function is bound with the `=>`

    lname = new Literal name
    func  = new Code [], Block.wrap [@body]
    args  = []
    o.classScope = func.makeScope o.scope

    @hoistDirectivePrologue()
    @setContext name
