diff options
author | andri lim <jangko128@gmail.com> | 2017-04-01 02:58:09 +0700 |
---|---|---|
committer | Andreas Rumpf <rumpf_a@web.de> | 2017-03-31 21:58:09 +0200 |
commit | fce4b7cd6216cb1f3f195cfdefc4c16da37958fd (patch) | |
tree | f108e065b390acc2ea3a2c04c2b231f9a9ff4370 | |
parent | d7eb146d28515e9aea5ae0f98e01b09bd96b5919 (diff) | |
download | Nim-fce4b7cd6216cb1f3f195cfdefc4c16da37958fd.tar.gz |
attempt to fix #5621 #5615 generic ref object typeRel (#5633)
-rw-r--r-- | compiler/semtypinst.nim | 2 | ||||
-rw-r--r-- | tests/generics/tobjecttyperel2.nim | 42 |
2 files changed, 43 insertions, 1 deletions
diff --git a/compiler/semtypinst.nim b/compiler/semtypinst.nim index fddcc7a24..9ff0b7e78 100644 --- a/compiler/semtypinst.nim +++ b/compiler/semtypinst.nim @@ -472,7 +472,7 @@ proc replaceTypeVarsTAux(cl: var TReplTypeVars, t: PType): PType = var r = replaceTypeVarsT(cl, result.sons[i]) if result.kind == tyObject: # carefully coded to not skip the precious tyGenericInst: - let r2 = r.skipTypes({tyGenericInst, tyAlias}) + let r2 = r.skipTypes({tyAlias}) if r2.kind in {tyPtr, tyRef}: r = skipTypes(r2, {tyPtr, tyRef}) result.sons[i] = r diff --git a/tests/generics/tobjecttyperel2.nim b/tests/generics/tobjecttyperel2.nim new file mode 100644 index 000000000..d8c0751b7 --- /dev/null +++ b/tests/generics/tobjecttyperel2.nim @@ -0,0 +1,42 @@ +discard """ + output: '''1 +a +13''' +""" + +# bug #5621 #5615 +type + Obj5[T] = ref object of RootObj + x_impl: T + +proc x[T](v476205: Obj5[T]): T {.used.} = + v476205.x_impl + +type + Obj6[T, U] = ref object of Obj5[T] + y_impl: U + +proc newObj6[T, U](x: T; y: U): Obj6[T, U] = + new(result) + result.x_impl = x + result.y_impl = y + +proc x[T, U](v477606: Obj6[T, U]): T {.used.} = + v477606.x_impl + +proc y[T, U](v477608: Obj6[T, U]): U {.used.} = + v477608.y_impl + +let e = newObj6(1, "a") +echo e.x +echo e.y + +type + Fruit[T] = ref object of RootObj + Apple[T] = ref object of Fruit[T] + +proc getColor[T](v: Fruit[T]): T = 13 + +var w: Apple[int] +let r = getColor(w) +echo r |