class Opal::Nodes::TopNode

def compile

def compile
  compiler.top_scope = self
  compiler.dynamic_cache_result = true if sexp.meta[:dynamic_cache_result]
  push version_comment
  helper :return_val if compiler.eof_content
  if body == s(:nil)
    # A shortpath for empty (stub?) modules.
    if compiler.requirable? || compiler.esm? || compiler.eval?
      unshift 'Opal.return_val(Opal.nil); '
      definition
    else
      unshift 'Opal.nil; '
    end
  else
    in_scope do
      line '"use strict";' if compiler.use_strict?
      body_code = in_closure(Closure::JS_FUNCTION | Closure::TOP) do
        stmt(stmts)
      end
      body_code = [body_code] unless body_code.is_a?(Array)
      if compiler.eval?
        add_temp '$nesting = self.$$is_a_module ? [self] : [self.$$class]' if @define_nesting
      else
        add_temp 'self = Opal.top' if @define_self
        add_temp '$nesting = []' if @define_nesting
      end
      add_temp '$$ = Opal.$r($nesting)' if @define_relative_access
      add_temp 'nil = Opal.nil'
      add_temp '$$$ = Opal.$$$' if @define_absolute_const
      add_used_helpers
      line scope.to_vars
      compile_method_stubs
      compile_irb_vars
      compile_end_construct
      line body_code
    end
    opening
    definition
    closing
  end
  add_file_source_embed if compiler.enable_file_source_embed?
end