implement RFCs/294 ; disallow enum <=> enum conversion (#16351)

* fix https://github.com/nim-lang/RFCs/issues/294 ; disallow enum <=> enum conversion
* fix the runnableExamples that was the instigator of this RFC
* legacy -d:nimLegacyConvEnumEnum
* use -d:nimLegacyConvEnumEnum in important_package nimgame2
* add test for enum cast
* improve changelog
* add changelog: Changes affecting backward compatibility
* cleanup changelog
* fix changelog
This commit is contained in:
Timothee Cour 2021-04-02 22:15:21 -07:00 • committed by GitHub
commit 270964c487
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
9 changed files with 115 additions and 38 deletions

View file

@ -1,5 +1,13 @@
discard """
nimout:'''
tconv.nim(81, 15) Warning: enum to enum conversion is now deprecated [User]
'''
"""
template reject(x) =
static: assert(not compiles(x))
static: doAssert(not compiles(x))
template accept(x) =
static: doAssert(compiles(x))
reject:
const x = int8(300)
@ -55,3 +63,26 @@ block: # issue 3766
proc r(x: static[R]) =
echo x
r 3.R
block: # https://github.com/nim-lang/RFCs/issues/294
type Koo = enum k1, k2
type Goo = enum g1, g2
accept: Koo(k2)
accept: k2.Koo
accept: k2.int.Goo
reject: Goo(k2)
reject: k2.Goo
reject: k2.string
{.define(nimLegacyConvEnumEnum).}
discard Goo(k2)
accept: Goo(k2)
accept: k2.Goo
reject: k2.string
{.undef(nimLegacyConvEnumEnum).}
reject: Goo(k2)
reject: k2.Goo