diff --git a/doc/manual.rst b/doc/manual.rst index 7b0a30f6a4..a2d51cf082 100644 --- a/doc/manual.rst +++ b/doc/manual.rst @@ -2288,7 +2288,7 @@ A type ``a`` is **implicitly** convertible to type ``b`` iff the following algorithm returns true: .. code-block:: nim - # XXX range types? + proc isImplicitlyConvertible(a, b: PType): bool = if isSubtype(a, b) or isCovariant(a, b): return true @@ -2316,6 +2316,18 @@ algorithm returns true: of string: result = b == cstring + +Implicit conversions are also performed for Nim's ``range`` type +constructor. + +Let ``a0``, ``b0`` of type ``T``. + +Let ``A = range[a0..b0]`` be the argument's type, ``F`` the formal +parameter's type. Then an implicit conversion from ``A`` to ``F`` +exists if ``a0 >= low(F) and b0 <= high(F)`` and both ``T`` and ``F`` +are signed integers or if both are unsigned integers. + + A type ``a`` is **explicitly** convertible to type ``b`` iff the following algorithm returns true: