summary refs log tree commit diff stats
diff options
context:
space:
mode:
authorMamy Ratsimbazafy <mamy_github@numforge.co>2020-05-21 17:52:40 +0200
committerGitHub <noreply@github.com>2020-05-21 17:52:40 +0200
commitf71f8b0239e3d6aff75390075bba13a62c292422 (patch)
treeefcff63cdefd2386cde7c3c6f663d8bb39f3700b
parent5caaa4bf6fd95cf8252dd86669b67d02aec903db (diff)
downloadNim-f71f8b0239e3d6aff75390075bba13a62c292422.tar.gz
The whole options module should be inline (#14417) [backport:1.2]
* The whole options module should be inline

* Use inline per proc and tag `lent` where appropriate

* Remove lent annotation (failing at compiletime)
-rwxr-xr-xbuild.outbin0 -> 430264 bytes
-rw-r--r--lib/pure/options.nim29
2 files changed, 14 insertions, 15 deletions
diff --git a/build.out b/build.out
new file mode 100755
index 000000000..9edb996b0
--- /dev/null
+++ b/build.out
Binary files differdiff --git a/lib/pure/options.nim b/lib/pure/options.nim
index ad98e626b..0a20d3d73 100644
--- a/lib/pure/options.nim
+++ b/lib/pure/options.nim
@@ -77,7 +77,7 @@ type
   UnpackDefect* = object of Defect
   UnpackError* {.deprecated: "See corresponding Defect".} = UnpackDefect
 
-proc option*[T](val: T): Option[T] =
+proc option*[T](val: T): Option[T] {.inline.} =
   ## Can be used to convert a pointer type (`ptr` or `ref` or `proc`) to an option type.
   ## It converts `nil` to `None`.
   ##
@@ -98,7 +98,7 @@ proc option*[T](val: T): Option[T] =
   when T isnot SomePointer:
     result.has = true
 
-proc some*[T](val: T): Option[T] =
+proc some*[T](val: T): Option[T] {.inline.} =
   ## Returns an `Option` that has the value `val`.
   ##
   ## See also:
@@ -121,7 +121,7 @@ proc some*[T](val: T): Option[T] =
     result.has = true
     result.val = val
 
-proc none*(T: typedesc): Option[T] =
+proc none*(T: typedesc): Option[T] {.inline.} =
   ## Returns an `Option` for this type that has no value.
   ##
   ## See also:
@@ -136,7 +136,7 @@ proc none*(T: typedesc): Option[T] =
   # the default is the none type
   discard
 
-proc none*[T]: Option[T] =
+proc none*[T]: Option[T] {.inline.} =
   ## Alias for `none(T) proc <#none,typedesc>`_.
   none(T)
 
@@ -167,7 +167,7 @@ proc isNone*[T](self: Option[T]): bool {.inline.} =
   else:
     not self.has
 
-proc get*[T](self: Option[T]): T =
+proc get*[T](self: Option[T]): T {.inline.} =
   ## Returns contents of an `Option`. If it is `None`, then an exception is
   ## thrown.
   ##
@@ -185,7 +185,7 @@ proc get*[T](self: Option[T]): T =
     raise newException(UnpackError, "Can't obtain a value from a `none`")
   self.val
 
-proc get*[T](self: Option[T], otherwise: T): T =
+proc get*[T](self: Option[T], otherwise: T): T {.inline.} =
   ## Returns the contents of the `Option` or an `otherwise` value if
   ## the `Option` is `None`.
   runnableExamples:
@@ -200,7 +200,7 @@ proc get*[T](self: Option[T], otherwise: T): T =
   else:
     otherwise
 
-proc get*[T](self: var Option[T]): var T =
+proc get*[T](self: var Option[T]): var T {.inline.} =
   ## Returns contents of the `var Option`. If it is `None`, then an exception
   ## is thrown.
   runnableExamples:
@@ -215,7 +215,7 @@ proc get*[T](self: var Option[T]): var T =
     raise newException(UnpackError, "Can't obtain a value from a `none`")
   return self.val
 
-proc map*[T](self: Option[T], callback: proc (input: T)) =
+proc map*[T](self: Option[T], callback: proc (input: T)) {.inline.} =
   ## Applies a `callback` function to the value of the `Option`, if it has one.
   ##
   ## See also:
@@ -239,7 +239,7 @@ proc map*[T](self: Option[T], callback: proc (input: T)) =
   if self.isSome:
     callback(self.val)
 
-proc map*[T, R](self: Option[T], callback: proc (input: T): R): Option[R] =
+proc map*[T, R](self: Option[T], callback: proc (input: T): R): Option[R] {.inline.} =
   ## Applies a `callback` function to the value of the `Option` and returns an
   ## `Option` containing the new value.
   ##
@@ -266,7 +266,7 @@ proc map*[T, R](self: Option[T], callback: proc (input: T): R): Option[R] =
   else:
     none(R)
 
-proc flatten*[A](self: Option[Option[A]]): Option[A] =
+proc flatten*[A](self: Option[Option[A]]): Option[A] {.inline.} =
   ## Remove one level of structure in a nested `Option`.
   runnableExamples:
     let a = some(some(42))
@@ -278,7 +278,7 @@ proc flatten*[A](self: Option[Option[A]]): Option[A] =
     none(A)
 
 proc flatMap*[A, B](self: Option[A],
-                    callback: proc (input: A): Option[B]): Option[B] =
+                    callback: proc (input: A): Option[B]): Option[B] {.inline.} =
   ## Applies a `callback` function to the value of the `Option` and returns an
   ## `Option` containing the new value.
   ##
@@ -308,7 +308,7 @@ proc flatMap*[A, B](self: Option[A],
 
   map(self, callback).flatten()
 
-proc filter*[T](self: Option[T], callback: proc (input: T): bool): Option[T] =
+proc filter*[T](self: Option[T], callback: proc (input: T): bool): Option[T] {.inline.} =
   ## Applies a `callback` to the value of the `Option`.
   ##
   ## If the `callback` returns `true`, the option is returned as `Some`.
@@ -333,7 +333,7 @@ proc filter*[T](self: Option[T], callback: proc (input: T): bool): Option[T] =
   else:
     self
 
-proc `==`*(a, b: Option): bool =
+proc `==`*(a, b: Option): bool {.inline.} =
   ## Returns `true` if both `Option`s are `None`,
   ## or if they are both `Some` and have equal values.
   runnableExamples:
@@ -363,7 +363,7 @@ proc `$`*[T](self: Option[T]): string =
   else:
     result = "None[" & name(T) & "]"
 
-proc unsafeGet*[T](self: Option[T]): T =
+proc unsafeGet*[T](self: Option[T]): T {.inline.}=
   ## Returns the value of a `some`. Behavior is undefined for `none`.
   ##
   ## **Note:** Use it only when you are **absolutely sure** the value is present
@@ -513,4 +513,3 @@ when isMainModule:
     test "Ref type with overloaded `==`":
       let p = some(RefPerson.new())
       check p.isSome
-