From b3a80dd2eb775367b52c1aed3f130cbdd51d36aa Mon Sep 17 00:00:00 2001 From: cooldome Date: Sun, 29 Apr 2018 23:17:07 +0100 Subject: [PATCH] update the doc --- changelog.md | 2 ++ compiler/types.nim | 2 +- doc/manual.rst | 10 +++++++--- 3 files changed, 10 insertions(+), 4 deletions(-) diff --git a/changelog.md b/changelog.md index 8ac02a388a..ddfeb4d362 100644 --- a/changelog.md +++ b/changelog.md @@ -81,6 +81,8 @@ Imported exceptions can be raised and caught just like Nim exceptions. More details in language manual. +- Range float typed, example `range[0.0 .. Inf]`. More details in language manual. + ### Tool changes - ``jsondoc2`` has been renamed ``jsondoc``, similar to how ``doc2`` was renamed diff --git a/compiler/types.nim b/compiler/types.nim index 19e61a3329..bb6a132bb6 100644 --- a/compiler/types.nim +++ b/compiler/types.nim @@ -704,7 +704,7 @@ proc lastValue*[T:BiggestInt|BiggestFloat](t: PType; fixedUnsigned = false): T = internalError("invalid kind for first(" & $t.kind & ')') result = NaN -proc lastOrd*(t: PType; fixedUnsigned = false): BiggestInt {.inline.}= +proc lastOrd*(t: PType; fixedUnsigned = false): BiggestInt {.inline.} = lastValue[BiggestInt](t, fixedUnsigned) proc lengthOrd*(t: PType): BiggestInt = diff --git a/doc/manual.rst b/doc/manual.rst index 636bf796be..e67d8c0f46 100644 --- a/doc/manual.rst +++ b/doc/manual.rst @@ -741,22 +741,26 @@ For further details, see `Convertible relation Subrange types -------------- -A subrange type is a range of values from an ordinal type (the base +A subrange type is a range of values from an ordinal or float point type (the base type). To define a subrange type, one must specify it's limiting values: the lowest and highest value of the type: .. code-block:: nim type Subrange = range[0..5] + PositiveFloat = range[0.0..Inf] ``Subrange`` is a subrange of an integer which can only hold the values 0 -to 5. Assigning any other value to a variable of type ``Subrange`` is a +to 5. ``PositiveFloat`` defines a subrange of all positive floating point values. +NaN does not belong to any subrange of floating point types. +Assigning any other value to a variable of type ``Subrange`` is a checked runtime error (or static error if it can be statically determined). Assignments from the base type to one of its subrange types (and vice versa) are allowed. -A subrange type has the same size as its base type (``int`` in the example). +A subrange type has the same size as its base type (``int`` in the +Subrange example). Pre-defined floating point types