summary refs log tree commit diff stats
diff options
context:
space:
mode:
authorJasper Jenkins <jasper.vs.jenkins@gmail.com>2020-03-17 02:47:27 -0700
committerGitHub <noreply@github.com>2020-03-17 10:47:27 +0100
commit6a23452bf4f386a57bcbb4e99c8d27149fe1d10b (patch)
tree170fca08087708a0386f53c2fe5794a58de9fd6b
parentbec0522fca2fcaf57fd2c5b4ba6f43ccf47b7b32 (diff)
downloadNim-6a23452bf4f386a57bcbb4e99c8d27149fe1d10b.tar.gz
fix sets of scoped imported enums (#13666)
-rw-r--r--compiler/ccgtypes.nim3
-rw-r--r--tests/cpp/enum.hpp3
-rw-r--r--tests/cpp/tenum_set.nim9
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