Skip to content

Commit

Permalink
Add tests
Browse files Browse the repository at this point in the history
  • Loading branch information
jmgomez committed Jan 31, 2024
1 parent 0dd4219 commit 6da1392
Show file tree
Hide file tree
Showing 2 changed files with 193 additions and 2 deletions.
4 changes: 2 additions & 2 deletions compiler/ccgutils.nim
Original file line number Diff line number Diff line change
Expand Up @@ -167,7 +167,7 @@ proc makeUnique(m: BModule; s: PSym, name: string = ""): string =
proc encodeSym*(m: BModule; s: PSym, makeUnique: bool = false): string =
#Module::Type
var name = s.name.s
if { sfFromGeneric, sfGlobal } * s.flags != {} or makeUnique:
if makeUnique:
name = makeUnique(m, s, name)
"N" & encodeName(s.owner.name.s) & encodeName(name) & "E"

Expand All @@ -178,7 +178,7 @@ proc encodeType*(m: BModule; t: PType): string =
of tyObject, tyEnum, tyDistinct, tyUserTypeClass, tyGenericParam:
encodeSym(m, t.sym)
of tyGenericInst, tyUserTypeClassInst, tyGenericBody:
var name = encodeSym(m, t[0].sym)
var name = encodeName(t[0].sym.name.s)
name.add "I"
for i in 1..<t.len - 1:
name.add encodeType(m, t[i])
Expand Down
191 changes: 191 additions & 0 deletions tests/codegen/titaniummangle.nim
Original file line number Diff line number Diff line change
@@ -0,0 +1,191 @@
discard """
targets: "c"
ccodecheck: "'_ZN14titaniummangle8testFuncE'"
ccodecheck: "'_ZN14titaniummangle8testFuncE6stringN14titaniummangle3FooE'"
ccodecheck: "'_ZN14titaniummangle8testFuncE3int7varargsI6stringE'"
ccodecheck: "'_ZN14titaniummangle8testFuncEN14titaniummangle3BooE'"
ccodecheck: "'_ZN8testFunc8testFuncE8typeDescIN14titaniummangle17EnumAnotherSampleEE'"
ccodecheck: "'_ZN14titaniummangle8testFuncE3ptrI14uncheckedArrayI3intEE'"
ccodecheck: "'_ZN14titaniummangle8testFuncE3setIN14titaniummangle10EnumSampleEE'"
ccodecheck: "'_ZN14titaniummangle8testFuncE4procI6string6stringE'"
ccodecheck: "'_ZN8testFunc8testFuncE3intN10Comparable10ComparableE'"
ccodecheck: "'_ZN14titaniummangle8testFuncE3int3int'"
ccodecheck: "'_ZN14titaniummangle8testFuncEN14titaniummangle10EnumSampleE'"
ccodecheck: "'_ZN14titaniummangle8testFuncEN14titaniummangle17EnumAnotherSampleE'"
ccodecheck: "'_ZN14titaniummangle8testFuncE3int3int'"
ccodecheck: "'_ZN14titaniummangle8testFuncEN14titaniummangle10EnumSampleE'"
ccodecheck: "'_ZN14titaniummangle8testFuncEN14titaniummangle17EnumAnotherSampleE'"
ccodecheck: "'_ZN14titaniummangle8testFuncE5tupleI3int3intE7cstring'"
ccodecheck: "'_ZN14titaniummangle8testFuncE5tupleI5float5floatE'"
ccodecheck: "'_ZN14titaniummangle8testFuncE3ptrI3intE'"
ccodecheck: "'_ZN14titaniummangle8testFuncE3ptrIN14titaniummangle3FooEE'"
ccodecheck: "'_ZN14titaniummangle8testFuncE3ptrI3ptrI3intEE'"
ccodecheck: "'_ZN14titaniummangle8testFuncE3refIN14titaniummangle3FooEE'"
ccodecheck: "'_ZN14titaniummangle8testFuncE3varIN14titaniummangle3FooEE5int325int323refIN14titaniummangle3FooEE'"
ccodecheck: "'_ZN14titaniummangle8testFuncE3varI3intE'"
ccodecheck: "'_ZN14titaniummangle8testFuncE9openArrayI6stringE'"
ccodecheck: "'_ZN14titaniummangle8testFuncE5arrayI7range013intE'"
ccodecheck: "'_ZN14titaniummangle8testFuncE9ContainerI3intE'"
ccodecheck: "'_ZN14titaniummangle8testFuncE10Container2I5int325int32E'"
ccodecheck: "'_ZN14titaniummangle8testFuncE9ContainerI10Container2I5int325int32EE'"
"""

#When debugging this notice that if one check fails, it can be due to any of the above.

type
Comparable = concept x, y
(x < y) is bool

type
Foo = object
a: int32
b: int32

FooTuple = tuple
a: int
b: int
Container[T] = object
data: T
Container2[T, T2] = object
data: T
data2: T2

Boo = distinct Foo

Coo = Foo

Doo = Boo | Foo

TestProc = proc(a:string): string

type EnumSample = enum
a, b, c

type EnumAnotherSample = enum
a, b, c

proc testFunc(a: set[EnumSample]) =
echo $a

proc testFunc(a: typedesc) =
echo $a

proc testFunc(a: ptr Foo) =
echo repr a

proc testFunc(s: string, a: Coo) =
echo repr a

proc testFunc(s: int, a: Comparable) =
echo repr a

proc testFunc(a: TestProc) =
let b = ""
echo repr a("")

proc testFunc(a: ref Foo) =
echo repr a

proc testFunc(b: Boo) =
echo repr b

proc testFunc(a: ptr UncheckedArray[int]) =
echo repr a

proc testFunc(a: ptr int) =
echo repr a

proc testFunc(a: ptr ptr int) =
echo repr a

proc testFunc(e: FooTuple, str: cstring) =
echo e

proc testFunc(e: (float, float)) =
echo e

proc testFunc(e: EnumSample) =
echo e

proc testFunc(e: var int) =
echo e

proc testFunc(e: var Foo, a, b: int32, refFoo: ref Foo) =
echo e

proc testFunc(xs: Container[int]) =
let a = 2
echo xs

proc testFunc(xs: Container2[int32, int32]) =
let a = 2
echo xs

proc testFunc(xs: Container[Container2[int32, int32]]) =
let a = 2
echo xs

proc testFunc(xs: seq[int]) =
let a = 2
echo xs

proc testFunc(xs: openArray[string]) =
let a = 2
echo xs

proc testFunc(xs: array[2, int]) =
let a = 2
echo xs

proc testFunc(e: EnumAnotherSample) =
echo e

proc testFunc(a, b: int) =
echo "hola"
discard

proc testFunc(a: int, xs: varargs[string]) =
let a = 10
for x in xs:
echo x

proc testFunc() =
var a = 2
var aPtr = a.addr
var foo = Foo()
let refFoo : ref Foo = new(Foo)
let b = Foo().Boo()
let d: Doo = Foo()
testFunc("", Coo())
testFunc(1, )
testFunc(b)
testFunc(EnumAnotherSample)
var t = [1, 2]
let uArr = cast[ptr UncheckedArray[int]](t.addr)
testFunc(uArr)
testFunc({})
testFunc(proc(s:string): string = "test")
testFunc(20, a.int32)
testFunc(20, 2)
testFunc(EnumSample.c)
testFunc(EnumAnotherSample.c)
testFunc((2, 1), "adios")
testFunc((22.1, 1.2))
testFunc(a.addr)
testFunc(foo.addr)
testFunc(aPtr.addr)
testFunc(refFoo)
testFunc(foo, 2, 1, refFoo)
testFunc(a)
testFunc(@[2, 1, 2])
testFunc(@["hola"])
testFunc(2, "hola", "adios")
let arr: array[2, int] = [2, 1]
testFunc(arr)
testFunc(Container[int](data: 10))
let c2 = Container2[int32, int32](data: 10, data2: 20)
testFunc(c2)
testFunc(Container[Container2[int32, int32]](data: c2))


testFunc()

0 comments on commit 6da1392

Please sign in to comment.