src/foo.sod: Split `Second' off into its own separate chain.
[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