[bugfix] VM: finally do inheritance properly
This commit is contained in:
parent
6d125da93f
commit
7606efc0bf
2 changed files with 36 additions and 21 deletions
|
|
@ -1,6 +1,7 @@
|
|||
discard """
|
||||
nimout: '''Hello fred , managed by sally
|
||||
Hello sally , managed by bob'''
|
||||
nimout: '''Hello fred, managed by sally
|
||||
Hello sally, managed by bob
|
||||
0'''
|
||||
"""
|
||||
# bug #3973
|
||||
|
||||
|
|
@ -10,20 +11,20 @@ type
|
|||
ecCode2
|
||||
|
||||
Person* = object of RootObj
|
||||
name* : string
|
||||
name*: string
|
||||
last_name*: string
|
||||
|
||||
Employee* = object of Person
|
||||
empl_code* : EmployeeCode
|
||||
mgr_name* : string
|
||||
empl_code*: EmployeeCode
|
||||
mgr_name*: string
|
||||
|
||||
proc test() =
|
||||
var
|
||||
empl1 = Employee(name: "fred", last_name: "smith", mgr_name: "sally", empl_code: ecCode1)
|
||||
empl2 = Employee(name: "sally", last_name: "jones", mgr_name: "bob", empl_code: ecCode2)
|
||||
|
||||
echo "Hello ", empl1.name, " , managed by ", empl1.mgr_name
|
||||
echo "Hello ", empl2.name, " , managed by ", empl2.mgr_name
|
||||
echo "Hello ", empl1.name, ", managed by ", empl1.mgr_name
|
||||
echo "Hello ", empl2.name, ", managed by ", empl2.mgr_name
|
||||
|
||||
static:
|
||||
test()
|
||||
|
|
@ -50,13 +51,13 @@ template check_templ(n: Base, k: MyKind) =
|
|||
if k == kA: doAssert(n of A) else: doAssert(not (n of A))
|
||||
if k in {kB, kC}: doAssert(n of B) else: doAssert(not (n of B))
|
||||
if k == kC: doAssert(n of C) else: doAssert(not (n of C))
|
||||
doAssert(n of Base)
|
||||
doAssert(n of Base)
|
||||
|
||||
proc check_proc(n: Base, k: MyKind) =
|
||||
if k == kA: doAssert(n of A) else: doAssert(not (n of A))
|
||||
if k in {kB, kC}: doAssert(n of B) else: doAssert(not (n of B))
|
||||
if k == kC: doAssert(n of C) else: doAssert(not (n of C))
|
||||
doAssert(n of Base)
|
||||
doAssert(n of Base)
|
||||
|
||||
static:
|
||||
let aa = new(A)
|
||||
|
|
@ -68,7 +69,7 @@ static:
|
|||
let cc = new(C)
|
||||
check_templ(cc, kC)
|
||||
check_proc(cc, kC)
|
||||
|
||||
|
||||
let aa = new(A)
|
||||
check_templ(aa, kA)
|
||||
check_proc(aa, kA)
|
||||
|
|
@ -78,3 +79,16 @@ check_proc(bb, kB)
|
|||
let cc = new(C)
|
||||
check_templ(cc, kC)
|
||||
check_proc(cc, kC)
|
||||
|
||||
type
|
||||
BBar = object of RootObj
|
||||
bbarField: set[char]
|
||||
xbarField: string
|
||||
d, e: int
|
||||
FooBar = object of BBar
|
||||
a: int
|
||||
b: string
|
||||
|
||||
static:
|
||||
var fb: FooBar
|
||||
echo fb.a
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue