class Opal::Nodes::ClassNode

def compile

def compile
  name, base = name_and_base
  helper :klass
  if body.nil?
    # Simplified compile for empty body
    if stmt?
      unshift '$klass(', base, ', ', super_code, ", '#{name}')"
    else
      unshift '($klass(', base, ', ', super_code, ", '#{name}'), nil)"
    end
  else
    line "  var self = $klass($base, $super, '#{name}');"
    in_scope do
      scope.name = name
      in_closure(Closure::MODULE | Closure::JS_FUNCTION) do
        compile_body
      end
    end
    if await_encountered
      await_begin = '(await '
      await_end = ')'
      async = 'async '
      parent.await_encountered = true
    else
      await_begin, await_end, async = '', '', ''
    end
    unshift "#{await_begin}(#{async}function($base, $super#{', $parent_nesting' if @define_nesting}) {"
    line '})(', base, ', ', super_code, "#{', ' + scope.nesting if @define_nesting})#{await_end}"
  end
end

def super_code

def super_code
  sup ? expr(sup) : 'null'
end