X-Git-Url: https://git.distorted.org.uk/~mdw/sod/blobdiff_plain/d9c15186bf79bcac3caf752dd0936233778aa8f2..ddee4bb174ad62e6a9d7ecb49d69867fb2b4742c:/examples.lisp diff --git a/examples.lisp b/examples.lisp index 92489dd..cda6bcf 100644 --- a/examples.lisp +++ b/examples.lisp @@ -1,60 +1,60 @@ (set-dispatch-macro-character #\# #\{ 'c-fragment-reader) -(progn - (clear-the-decks) - - (define-sod-class "Animal" ("SodObject") - :nick 'nml - :link '|SodObject| - (slot "tickles" int) - (instance-initializer "nml" "tickles" :single #{ 0 }) - (message "tickle" (fun void)) - (method "nml" "tickle" (fun void) #{ - me->tickles++; - } - :role :before) - (method "nml" "tickle" (fun void) #{ })) - - (define-sod-class "Lion" ("Animal") - :nick 'lion - :link '|Animal| - (message "bite" (fun void)) - (method "lion" "bite" (fun void) nil) - (method "nml" "tickle" (fun void) #{ - me->_vt->lion.bite(me); - CALL_NEXT_METHOD; - })) - - (define-sod-class "Goat" ("Animal") - :nick 'goat - (message "butt" (fun void)) - (method "goat" "butt" (fun void) nil) - (method "nml" "tickle" (fun void) #{ - me->_vt->goat.bite(me); - CALL_NEXT_METHOD; - })) - - (define-sod-class "Serpent" ("Animal") - :nick 'serpent - (message "bite" (fun void)) - (method "serpent" "bite" (fun void) nil) - (message "hiss" (fun void)) - (method "serpent" "hiss" (fun void) nil) - (method "nml" "tickle" (fun void) #{ - if (me->tickles < 3) me->_vt->hiss(me); - else me->_vt->bite(me); - CALL_NEXT_METHOD; - })) - - (define-sod-class "Chimaera" ("Lion" "Goat" "Serpent") - :nick 'sir - :link '|Lion|) - - (defparameter *chimaera* (find-sod-class "Chimaera")) - (defparameter *emeth* (find "tickle" - (sod-class-effective-methods *chimaera*) - :key (lambda (method) - (sod-message-name - (effective-method-message method))) - :test #'string=))) +(defparameter *chimaera-module* + (define-module ("chimaera.sod") + + (define-sod-class "Animal" ("SodObject") + :nick 'nml + :link '|SodObject| + (slot "tickles" int) + (instance-initializer "nml" "tickles" :single #{ 0 }) + (message "tickle" (fun void)) + (method "nml" "tickle" (fun void) #{ + me->tickles++; + } + :role :before) + (method "nml" "tickle" (fun void) #{ })) + + (define-sod-class "Lion" ("Animal") + :nick 'lion + :link '|Animal| + (message "bite" (fun void)) + (method "lion" "bite" (fun void) nil) + (method "nml" "tickle" (fun void) #{ + me->_vt->lion.bite(me); + CALL_NEXT_METHOD; + })) + + (define-sod-class "Goat" ("Animal") + :nick 'goat + (message "butt" (fun void)) + (method "goat" "butt" (fun void) nil) + (method "nml" "tickle" (fun void) #{ + me->_vt->goat.bite(me); + CALL_NEXT_METHOD; + })) + + (define-sod-class "Serpent" ("Animal") + :nick 'serpent + (message "bite" (fun void)) + (method "serpent" "bite" (fun void) nil) + (message "hiss" (fun void)) + (method "serpent" "hiss" (fun void) nil) + (method "nml" "tickle" (fun void) #{ + if (me->tickles < 3) me->_vt->hiss(me); + else me->_vt->bite(me); + CALL_NEXT_METHOD; + })) + + (define-sod-class "Chimaera" ("Lion" "Goat" "Serpent") + :nick 'sir + :link '|Lion|) + + (defparameter *chimaera* (find-sod-class "Chimaera")) + (defparameter *emeth* (find "tickle" + (sod-class-effective-methods *chimaera*) + :key (lambda (method) + (sod-message-name + (effective-method-message method))) + :test #'string=))))