class Opal::Nodes::ConstNode

def compile

def compile
  if magical_data_const?
    push('$__END__')
  elsif optimized_access?
    helper :"#{name}"
    push "$#{name}"
  elsif const_scope == s(:cbase)
    push "#{top_scope.absolute_const}('#{name}')"
  elsif const_scope
    push "#{top_scope.absolute_const}(", recv(const_scope), ", '#{name}')"
  elsif compiler.eval?
    push "#{scope.relative_access}('#{name}')"
  else
    push "#{scope.relative_access}('#{name}')"
  end
end

def magical_data_const?

DATA const should be resolved to a regular ::DATA constant
2. When current file doesn't have __END__ section
DATA const should be resolved to the string located after __END__
1. When current file contains __END__ in the end of the file
that should be processed in a different way:
Ruby has a magical const DATA
def magical_data_const?
  const_scope.nil? && name == :DATA && compiler.eof_content
end

def optimized_access?

beginning.
optimize the calls. We can be sure they are defined from the
For a certain case of calls like `::Opal.coerce_to?` we can
def optimized_access?
  const_scope == s(:cbase) && OPTIMIZED_ACCESS_CONSTS.include?(name)
end