module Ruby
  class Constant < Statement
    def to_sol
      sol_brother.new
    end
  end
  class ValueConstant < Constant
    attr_reader :value
    def initialize(value)
      @value = value
    end
    def to_sol
      sol_brother.new(@value)
    end
  end
  class IntegerConstant < ValueConstant
    def to_s
      value.to_s
    end
  end
  class FloatConstant < ValueConstant
    attr_reader :value
    def initialize(value)
      @value = value
    end
  end
  class TrueConstant < Constant
    def to_s(depth = 0)
      "true"
    end
  end
  class FalseConstant < Constant
    def to_s(depth = 0)
      "false"
    end
  end
  class NilConstant < Constant
    def to_s(depth = 0)
      "nil"
    end
  end
  class SelfExpression < Constant
    def to_s(depth = 0)
      "self"
    end
  end
  class StringConstant < ValueConstant
    attr_reader :value
    def initialize(value)
      @value = value
    end
    def to_s(depth = 0)
      "'#{@value}'"
    end
  end
  class SymbolConstant < StringConstant
  end
end