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