summary refs log tree commit diff stats
path: root/lib/system.nim
diff options
context:
space:
mode:
Diffstat (limited to 'lib/system.nim')
-rw-r--r--lib/system.nim19
1 files changed, 17 insertions, 2 deletions
diff --git a/lib/system.nim b/lib/system.nim
index 888217493..508978521 100644
--- a/lib/system.nim
+++ b/lib/system.nim
@@ -251,8 +251,23 @@ when defined(nimHasTypeof):
     magic: "TypeOf", noSideEffect, compileTime.} =
     ## Builtin `typeof` operation for accessing the type of an expression.
     ## Since version 0.20.0.
-    discard
-
+    runnableExamples:
+      proc myFoo(): float = 0.0
+      iterator myFoo(): string = yield "abc"
+      iterator myFoo2(): string = yield "abc"
+      iterator myFoo3(): string {.closure.} = yield "abc"
+      doAssert type(myFoo()) is string
+      doAssert typeof(myFoo()) is string
+      doAssert typeof(myFoo(), typeOfIter) is string
+      doAssert typeof(myFoo3) is "iterator"
+
+      doAssert typeof(myFoo(), typeOfProc) is float
+      doAssert typeof(0.0, typeOfProc) is float
+      doAssert typeof(myFoo3, typeOfProc) is "iterator"
+      doAssert not compiles(typeof(myFoo2(), typeOfProc))
+        # this would give: Error: attempting to call routine: 'myFoo2'
+        # since `typeOfProc` expects a typed expression and `myFoo2()` can
+        # only be used in a `for` context.
 
 const ThisIsSystem = true