commit
8581fb715f
4 changed files with 42 additions and 55 deletions
|
|
@ -12,48 +12,9 @@
|
||||||
# ------------------------- Name Mangling --------------------------------
|
# ------------------------- Name Mangling --------------------------------
|
||||||
|
|
||||||
proc mangleField(name: string): string =
|
proc mangleField(name: string): string =
|
||||||
case name[0]
|
result = mangle(name)
|
||||||
of 'a'..'z':
|
if name[0] in 'a'..'z':
|
||||||
result = ""
|
result[0] = name[0].toUpper
|
||||||
add(result, chr(ord(name[0]) - ord('a') + ord('A')))
|
|
||||||
of '0'..'9', 'A'..'Z':
|
|
||||||
result = ""
|
|
||||||
add(result, name[0])
|
|
||||||
else: result = "HEX" & toHex(ord(name[0]), 2)
|
|
||||||
for i in countup(1, len(name) - 1):
|
|
||||||
case name[i]
|
|
||||||
of 'A'..'Z':
|
|
||||||
add(result, chr(ord(name[i]) - ord('A') + ord('a')))
|
|
||||||
of '_':
|
|
||||||
discard
|
|
||||||
of 'a'..'z', '0'..'9':
|
|
||||||
add(result, name[i])
|
|
||||||
else:
|
|
||||||
add(result, "HEX")
|
|
||||||
add(result, toHex(ord(name[i]), 2))
|
|
||||||
|
|
||||||
proc mangle(name: string): string =
|
|
||||||
when false:
|
|
||||||
case name[0]
|
|
||||||
of 'a'..'z':
|
|
||||||
result = ""
|
|
||||||
add(result, chr(ord(name[0]) - ord('a') + ord('A')))
|
|
||||||
of '0'..'9', 'A'..'Z':
|
|
||||||
result = ""
|
|
||||||
add(result, name[0])
|
|
||||||
else: result = "HEX" & toHex(ord(name[0]), 2)
|
|
||||||
result = ""
|
|
||||||
for i in countup(0, len(name) - 1):
|
|
||||||
case name[i]
|
|
||||||
of 'A'..'Z':
|
|
||||||
add(result, chr(ord(name[i]) - ord('A') + ord('a')))
|
|
||||||
of '_':
|
|
||||||
discard
|
|
||||||
of 'a'..'z', '0'..'9':
|
|
||||||
add(result, name[i])
|
|
||||||
else:
|
|
||||||
add(result, "HEX")
|
|
||||||
add(result, toHex(ord(name[i]), 2))
|
|
||||||
|
|
||||||
proc isKeyword(w: PIdent): bool =
|
proc isKeyword(w: PIdent): bool =
|
||||||
# nimrod and C++ share some keywords
|
# nimrod and C++ share some keywords
|
||||||
|
|
|
||||||
|
|
@ -161,6 +161,27 @@ proc makeSingleLineCString*(s: string): string =
|
||||||
result.add(c.toCChar)
|
result.add(c.toCChar)
|
||||||
result.add('\"')
|
result.add('\"')
|
||||||
|
|
||||||
|
proc mangle*(name: string): string =
|
||||||
|
result = ""
|
||||||
|
case name[0]
|
||||||
|
of Letters:
|
||||||
|
result.add(name[0].toLower)
|
||||||
|
of Digits:
|
||||||
|
result.add("N" & name[0])
|
||||||
|
else:
|
||||||
|
result = "HEX" & toHex(ord(name[0]), 2)
|
||||||
|
for i in 1..(name.len-1):
|
||||||
|
let c = name[i]
|
||||||
|
case c
|
||||||
|
of 'A'..'Z':
|
||||||
|
add(result, c.toLower)
|
||||||
|
of '_':
|
||||||
|
discard
|
||||||
|
of 'a'..'z', '0'..'9':
|
||||||
|
add(result, c)
|
||||||
|
else:
|
||||||
|
add(result, "HEX" & toHex(ord(c), 2))
|
||||||
|
|
||||||
proc makeLLVMString*(s: string): PRope =
|
proc makeLLVMString*(s: string): PRope =
|
||||||
const MaxLineLength = 64
|
const MaxLineLength = 64
|
||||||
result = nil
|
result = nil
|
||||||
|
|
|
||||||
|
|
@ -136,18 +136,6 @@ proc mapType(typ: PType): TJSTypeKind =
|
||||||
of tyProc: result = etyProc
|
of tyProc: result = etyProc
|
||||||
of tyCString: result = etyString
|
of tyCString: result = etyString
|
||||||
|
|
||||||
proc mangle(name: string): string =
|
|
||||||
result = ""
|
|
||||||
for i in countup(0, len(name) - 1):
|
|
||||||
case name[i]
|
|
||||||
of 'A'..'Z':
|
|
||||||
add(result, chr(ord(name[i]) - ord('A') + ord('a')))
|
|
||||||
of '_':
|
|
||||||
discard
|
|
||||||
of 'a'..'z', '0'..'9':
|
|
||||||
add(result, name[i])
|
|
||||||
else: add(result, 'X' & toHex(ord(name[i]), 2))
|
|
||||||
|
|
||||||
proc mangleName(s: PSym): PRope =
|
proc mangleName(s: PSym): PRope =
|
||||||
result = s.loc.r
|
result = s.loc.r
|
||||||
if result == nil:
|
if result == nil:
|
||||||
|
|
|
||||||
17
tests/ccgbugs/tbug1081.nim
Normal file
17
tests/ccgbugs/tbug1081.nim
Normal file
|
|
@ -0,0 +1,17 @@
|
||||||
|
discard """
|
||||||
|
output: '''1
|
||||||
|
0
|
||||||
|
0
|
||||||
|
0'''
|
||||||
|
"""
|
||||||
|
|
||||||
|
proc `1/1`() = echo(1 div 1)
|
||||||
|
template `1/2`() = echo(1 div 2)
|
||||||
|
var `1/3` = 1 div 4
|
||||||
|
`1/3` = 1 div 3 # oops, 1/3!=1/4
|
||||||
|
let `1/4` = 1 div 4
|
||||||
|
|
||||||
|
`1/1`()
|
||||||
|
`1/2`()
|
||||||
|
echo `1/3`
|
||||||
|
echo `1/4`
|
||||||
Loading…
Add table
Add a link
Reference in a new issue