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?
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?
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