class Opal::Nodes::ModuleNode

def compile

def compile
  name, base = name_and_base
  helper :module
  if body.nil?
    # Simplified compile for empty body
    if stmt?
      unshift '$module(', base, ", '#{name}')"
    else
      unshift '($module(', base, ", '#{name}'), nil)"
    end
  else
    line "  var self = $module($base, '#{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#{', $parent_nesting' if @define_nesting}) {"
    line '})(', base, "#{', ' + scope.nesting if @define_nesting})#{await_end}"
  end
end