diff options
author | Albert Safin <xzfcpw@gmail.com> | 2019-08-31 09:46:13 +0000 |
---|---|---|
committer | Albert Safin <xzfcpw@gmail.com> | 2019-08-31 10:16:26 +0000 |
commit | efe1bed82e8fa9476b4c9ed2a85802f6fb222cc6 (patch) | |
tree | f12af830435549f9f9830aafdb672909ffb6ee9a | |
parent | 9ae0dd611f77c4cd7122e6ac77e0278c1bafbbd7 (diff) | |
download | Nim-efe1bed82e8fa9476b4c9ed2a85802f6fb222cc6.tar.gz |
Allow typeof(nil) as a return type
-rw-r--r-- | compiler/ccgtypes.nim | 1 | ||||
-rw-r--r-- | compiler/jsgen.nim | 2 | ||||
-rw-r--r-- | compiler/types.nim | 2 | ||||
-rw-r--r-- | tests/ccgbugs/tnil_type.nim | 5 |
4 files changed, 8 insertions, 2 deletions
diff --git a/compiler/ccgtypes.nim b/compiler/ccgtypes.nim index 1e3826780..5c5999e82 100644 --- a/compiler/ccgtypes.nim +++ b/compiler/ccgtypes.nim @@ -155,6 +155,7 @@ proc mapType(conf: ConfigRef; typ: PType): TCTypeKind = of tyNone, tyTyped: result = ctVoid of tyBool: result = ctBool of tyChar: result = ctChar + of tyNil: result = ctPtr of tySet: result = mapSetType(conf, typ) of tyOpenArray, tyArray, tyVarargs, tyUncheckedArray: result = ctArray of tyObject, tyTuple: result = ctStruct diff --git a/compiler/jsgen.nim b/compiler/jsgen.nim index 107fa2b28..1d980ab6f 100644 --- a/compiler/jsgen.nim +++ b/compiler/jsgen.nim @@ -1600,6 +1600,8 @@ proc createVar(p: PProc, typ: PType, indirect: bool): Rope = result = putToSeq("{}", indirect) of tyBool: result = putToSeq("false", indirect) + of tyNil: + result = putToSeq("null", indirect) of tyArray: let length = toInt(lengthOrd(p.config, t)) let e = elemType(t) diff --git a/compiler/types.nim b/compiler/types.nim index 1473be261..3a5f5fa62 100644 --- a/compiler/types.nim +++ b/compiler/types.nim @@ -1310,7 +1310,7 @@ proc typeAllowedAux(marker: var IntSet, typ: PType, kind: TSymKind, tyNone, tyForward, tyFromExpr: result = t of tyNil: - if kind != skConst and kind != skParam: result = t + if kind != skConst and kind != skParam and kind != skResult: result = t of tyString, tyBool, tyChar, tyEnum, tyInt..tyUInt64, tyCString, tyPointer: result = nil of tyOrdinal: diff --git a/tests/ccgbugs/tnil_type.nim b/tests/ccgbugs/tnil_type.nim index b57e64513..12310dae9 100644 --- a/tests/ccgbugs/tnil_type.nim +++ b/tests/ccgbugs/tnil_type.nim @@ -12,4 +12,7 @@ proc f3(_: typedesc) = discard f3(typeof(nil)) proc f4[T](_: T) = discard -f4(nil) \ No newline at end of file +f4(nil) + +proc f5(): typeof(nil) = nil +discard f5() |