diff options
author | Jasper Jenkins <jasper.vs.jenkins@gmail.com> | 2020-03-17 02:47:27 -0700 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-03-17 10:47:27 +0100 |
commit | 6a23452bf4f386a57bcbb4e99c8d27149fe1d10b (patch) | |
tree | 170fca08087708a0386f53c2fe5794a58de9fd6b | |
parent | bec0522fca2fcaf57fd2c5b4ba6f43ccf47b7b32 (diff) | |
download | Nim-6a23452bf4f386a57bcbb4e99c8d27149fe1d10b.tar.gz |
fix sets of scoped imported enums (#13666)
-rw-r--r-- | compiler/ccgtypes.nim | 3 | ||||
-rw-r--r-- | tests/cpp/enum.hpp | 3 | ||||
-rw-r--r-- | tests/cpp/tenum_set.nim | 9 |
3 files changed, 14 insertions, 1 deletions
diff --git a/compiler/ccgtypes.nim b/compiler/ccgtypes.nim index 759330a3e..22e9a5217 100644 --- a/compiler/ccgtypes.nim +++ b/compiler/ccgtypes.nim @@ -880,7 +880,8 @@ proc getTypeDescAux(m: BModule, origTyp: PType, check: var IntSet): Rope = m.s[cfsTypes].add(recdesc) elif tfIncompleteStruct notin t.flags: addAbiCheck(m, t, result) of tySet: - result = $t.kind & '_' & getTypeName(m, t.lastSon, hashType t.lastSon) + # Don't use the imported name as it may be scoped: 'Foo::SomeKind' + result = $t.kind & '_' & t.lastSon.typeName & $t.lastSon.hashType m.typeCache[sig] = result if not isImportedType(t): let s = int(getSize(m.config, t)) diff --git a/tests/cpp/enum.hpp b/tests/cpp/enum.hpp new file mode 100644 index 000000000..268999d68 --- /dev/null +++ b/tests/cpp/enum.hpp @@ -0,0 +1,3 @@ +namespace namespaced { +enum Enum { A, B, C }; +} diff --git a/tests/cpp/tenum_set.nim b/tests/cpp/tenum_set.nim new file mode 100644 index 000000000..6afed722f --- /dev/null +++ b/tests/cpp/tenum_set.nim @@ -0,0 +1,9 @@ +discard """ +targets: "cpp" +output: "{A, B, C}" +""" + +type Enum {.importcpp: "namespaced::Enum", header: "enum.hpp".} = enum A, B, C + +var vals = {low(Enum) .. high(Enum)} +echo vals |