3 TargetLangPerson=@() subclass(Person(),'id',@(self) "TargetLangPerson");
4 TargetLangChild=@() subclass(Child(),'id',@(self) "TargetLangChild");
5 TargetLangGrandChild=@() subclass(GrandChild(),'id',@(self) "TargetLangGrandChild");
7 # Semis - don't override id() in target language
8 TargetLangSemiPerson=@() subclass(Person());
9 TargetLangSemiChild=@() subclass(Child());
10 TargetLangSemiGrandChild=@() subclass(GrandChild());
12 # Orphans - don't override id() in C++
13 TargetLangOrphanPerson=@() subclass(OrphanPerson(),'id',@(self) "TargetLangOrphanPerson");
14 TargetLangOrphanChild=@() subclass(OrphanChild(),'id',@(self) "TargetLangOrphanChild");
17 function check(person,expected)
20 # Normal target language polymorphic call
23 raise ("Failed. Received: " + ret + " Expected: " + expected);
26 # Polymorphic call from C++
28 caller.setCallback(person);
31 error ("Failed. Received: " + ret + " Expected: " + expected);
34 # Polymorphic call of object created in target language and passed to C++ and back again
35 baseclass = caller.baseClass();
38 error ("Failed. Received: " + ret + " Expected: " + expected);
41 caller.resetCallback();
46 check(person, "Person");
50 check(person, "Child");
53 person = GrandChild();
54 check(person, "GrandChild");
57 person = TargetLangPerson();
58 check(person, "TargetLangPerson");
61 person = TargetLangChild();
62 check(person, "TargetLangChild");
65 person = TargetLangGrandChild();
66 check(person, "TargetLangGrandChild");
69 # Semis - don't override id() in target language
70 person = TargetLangSemiPerson();
71 check(person, "Person");
74 person = TargetLangSemiChild();
75 check(person, "Child");
78 person = TargetLangSemiGrandChild();
79 check(person, "GrandChild");
82 # Orphans - don't override id() in C++
83 person = OrphanPerson();
84 check(person, "Person");
87 person = OrphanChild();
88 check(person, "Child");
91 person = TargetLangOrphanPerson();
92 check(person, "TargetLangOrphanPerson");
95 person = TargetLangOrphanChild();
96 check(person, "TargetLangOrphanChild");