chiark / gitweb /
cc56236ff62f3fae25dccc1aeeaa5d5eb5d94d17
[sod] / test / chimaera.sod
1 /* -*-sod-*-
2  *
3  * A simple SOD module for testing.
4  */
5
6 code c : includes {
7 #include <stdio.h>
8 #include "chimaera.h"
9 }
10
11 code h : includes {
12 #include "sod.h"
13 }
14
15 [nick = nml, link = SodObject]
16 class Animal : SodObject {
17   int tickles = 0;
18
19   void tickle(void) { }
20
21   [role = before]
22   void nml.tickle(void) { me->nml.tickles++; }
23 }
24
25 class Lion : Animal {
26   void bite(void) { puts("Munch!"); }
27   void nml.tickle(void) { me->_vt.lion.bite(me); }
28 }
29
30 class Goat : Animal {
31   void butt(void) { puts("Bonk!"); }
32   void nml.tickle(void) { me->_vt.goat.butt(me); }
33 }
34
35 class Serpent : Animal {
36   void hiss(void) { puts("Sssss!"); }
37   void bite(void) { puts("Nom!"); }
38   void nml.tickle(void) {
39     if (SERPENT__CONV_NML(me)->nml.tickles > 2)
40       me->_vt.serpent.bite();
41     else
42       me->_vt.serpent.hiss();
43   }
44 }
45
46 [nick = sir, link = Animal]
47 class Chimaera : Lion, Goat, Serpent {
48 }
49