Don't consider concept types as non-complex during codegen (#8119)

Fixes #7125
This commit is contained in:
LemonBoy 2018-06-27 17:21:53 +02:00 • committed by Andreas Rumpf
commit bb23d903b6
2 changed files with 15 additions and 2 deletions

View file

@ -288,7 +288,7 @@ type
proc genRefAssign(p: BProc, dest, src: TLoc, flags: TAssignmentFlags) proc genRefAssign(p: BProc, dest, src: TLoc, flags: TAssignmentFlags)
proc isComplexValueType(t: PType): bool {.inline.} = proc isComplexValueType(t: PType): bool {.inline.} =
let t = t.skipTypes(abstractInst) let t = t.skipTypes(abstractInst + tyUserTypeClasses)
result = t.kind in {tyArray, tySet, tyTuple, tyObject} or result = t.kind in {tyArray, tySet, tyTuple, tyObject} or
(t.kind == tyProc and t.callConv == ccClosure) (t.kind == tyProc and t.callConv == ccClosure)

View file

@ -9,7 +9,8 @@ implicit generic
generic generic
false false
true true
-1''' -1
Meow'''
""" """
# https://github.com/nim-lang/Nim/issues/1147 # https://github.com/nim-lang/Nim/issues/1147
@ -98,3 +99,15 @@ let b = B()
echo b is A echo b is A
echo b.size() echo b.size()
# https://github.com/nim-lang/Nim/issues/7125
type
Thing = concept x
x.hello is string
Cat = object
proc hello(d: Cat): string = "Meow"
proc sayHello(c: Thing) = echo(c.hello)
var a: Thing = Cat()
a.sayHello()