fixes #5404
This commit is contained in:
parent
5620e08563
commit
dd8cbf5fca
2 changed files with 23 additions and 1 deletions
|
|
@ -24,7 +24,13 @@ proc isKeyword(w: PIdent): bool =
|
||||||
|
|
||||||
proc mangleField(m: BModule; name: PIdent): string =
|
proc mangleField(m: BModule; name: PIdent): string =
|
||||||
result = mangle(name.s)
|
result = mangle(name.s)
|
||||||
if isKeyword(name) or m.g.config.cppDefines.contains(result):
|
# fields are tricky to get right and thanks to generic types producing
|
||||||
|
# duplicates we can end up mangling the same field multiple times. However
|
||||||
|
# if we do so, the 'cppDefines' table might be modified in the meantime
|
||||||
|
# meaning we produce inconsistent field names (see bug #5404).
|
||||||
|
# Hence we do not check for ``m.g.config.cppDefines.contains(result)`` here
|
||||||
|
# anymore:
|
||||||
|
if isKeyword(name):
|
||||||
result.add "_0"
|
result.add "_0"
|
||||||
|
|
||||||
when false:
|
when false:
|
||||||
|
|
|
||||||
16
tests/ccgbugs/tmangle_field.nim
Normal file
16
tests/ccgbugs/tmangle_field.nim
Normal file
|
|
@ -0,0 +1,16 @@
|
||||||
|
discard """
|
||||||
|
"""
|
||||||
|
|
||||||
|
# bug #5404
|
||||||
|
|
||||||
|
import parseopt2
|
||||||
|
|
||||||
|
{.emit: """typedef struct {
|
||||||
|
int key;
|
||||||
|
} foo;""".}
|
||||||
|
|
||||||
|
type foo* {.importc: "foo", nodecl.} = object
|
||||||
|
key* {.importc: "key".}: cint
|
||||||
|
|
||||||
|
for kind, key, value in parseopt2.getopt():
|
||||||
|
discard
|
||||||
Loading…
Add table
Add a link
Reference in a new issue