Module: JSON::TruffleRuby::Generator::GeneratorMethods::Float

Defined in:
lib/json/truffle_ruby/generator.rb

Instance Method Summary collapse

Instance Method Details

#to_json(state = nil, *args) ⇒ Object

Returns a JSON string representation for this Float number.



653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
# File 'lib/json/truffle_ruby/generator.rb', line 653

def to_json(state = nil, *args)
  state = State.from_state(state)
  if infinite? || nan?
    if state.allow_nan?
      to_s
    elsif state.strict? && state.as_json
      casted_value = state.as_json.call(self, false)

      if casted_value.equal?(self)
        raise GeneratorError.new("#{self} not allowed in JSON", self)
      end
      unless Generator.native_type?(casted_value)
        raise GeneratorError.new("#{casted_value.class} returned by #{state.as_json} not allowed in JSON", casted_value)
      end

      state.check_max_nesting
      state.depth += 1
      result = casted_value.to_json(state, *args)
      state.depth -= 1
      result
    else
      raise GeneratorError.new("#{self} not allowed in JSON", self)
    end
  else
    to_s
  end
end