The Science of Programming/SwayPresentations/Objects/Examples3

Examples

Being able to extend a class such that the subclass has the same name is a great way to implement aspects.

   extends(stack());                //if subclass has new name
   extends((shadowed(:stack))());   //if subclass has same name

As an alternative, here's an instrumented stack using filters:

   include("stack.s");
   
   function emptyPopChecker($expr)
       {
       if ($expr . context . empty?())
           {
           throw(:stackError,"pop on empty stack");
           }
       force($expr);
       }

Then we make and instrument a particular stack:

   var s = stack();
   
   s . pop . filter = emptyPopChecker;

Not quite right. Anybody?

   function emptyPopChecker2($expr)
       {
       var result = catch(force($expr));
       if (type(result) == :ERROR)
           {
           throw(:stackError,"pop on empty stack");
           }
       result;
       }

Next Previous Top