class Opal::Nodes::DefinedNode

def compile

def compile
  case value.type
  when :self, :nil, :false, :true
    push value.type.to_s.inspect
  when :lvasgn, :ivasgn, :gvasgn, :cvasgn, :casgn, :op_asgn, :or_asgn, :and_asgn
    push "'assignment'"
  when :lvar
    push "'local-variable'"
  when :begin
    if value.children.size == 1 && value.children[0].type == :masgn
      push "'assignment'"
    else
      push "'expression'"
    end
  when :send
    compile_defined_send(value)
    wrap '(', " ? 'method' : nil)"
  when :ivar
    compile_defined_ivar(value)
    wrap '(', " ? 'instance-variable' : nil)"
  when :zsuper, :super
    compile_defined_super
  when :yield
    compile_defined_yield
    wrap '(', " ? 'yield' : nil)"
  when :xstr
    compile_defined_xstr(value)
  when :const
    compile_defined_const(value)
    wrap '(', " ? 'constant' : nil)"
  when :cvar
    compile_defined_cvar(value)
    wrap '(', " ? 'class variable' : nil)"
  when :gvar
    compile_defined_gvar(value)
    wrap '(', " ? 'global-variable' : nil)"
  when :back_ref
    compile_defined_back_ref
    wrap '(', " ? 'global-variable' : nil)"
  when :nth_ref
    compile_defined_nth_ref
    wrap '(', " ? 'global-variable' : nil)"
  when :array
    compile_defined_array(value)
    wrap '(', " ? 'expression' : nil)"
  else
    push "'expression'"
  end
end