Suneido

Contributed by Chris Rathman

Note: This version uses an object merge technique as described here. Currently Suneido only supports base classes which are defined globally in a library. The merge technique used has the disadvantage of not supporting delegation via the super() method.

Suneido Script

shape = class {
   // constructor for shape class - not currently used
   New(x, y) { .MoveTo(x, y) }

   // accessors for x and y
   SetX(x) { .x = x }
   SetY(y) { .y = y }
   GetX() { return .x }
   GetY() { return .y }

   // move the x & y position of the object
   MoveTo(x, y) { .SetX(x); .SetY(y) }
   RMoveTo(dx, dy) { .MoveTo(.x + dx, .y + dy) }
}

stage_rectangle = class {
   New(x, y, width, height) {
      .MoveTo(x, y);
      .SetWidth(width);
      .SetHeight(height);
   }

   // accessors for width and height
   GetWidth() { return .width }
   GetHeight() { return .height }
   SetWidth(width) { .width = width }
   SetHeight(height) { .height = height }

   // draw the rectangle
   Draw() {
      Print("Draw a Rectangle at:(" $ .GetX() $ "," $ .GetY() $
         "), width " $ .GetWidth() $ ", height " $ .GetHeight())
   }
}
rectangle = Class(Object().Merge(shape).Merge(stage_rectangle))

stage_circle = class {
   // constructor for circle class
   New(x, y, radius) {
      .MoveTo(x, y);
      .SetRadius(radius);
   }

   // accessors for radius
   GetRadius() { return .radius }
   SetRadius(radius) { .radius = radius }

   // draw the circle
   Draw() {
      Print("Draw a Circle at:(" $ .GetX() $ "," $ .GetY() $ "), radius " $ .GetRadius())
   }
}
circle = Class(Object().Merge(shape).Merge(stage_circle))

// set up some shape instances
scribble = new Object();
scribble[0] = new rectangle(10, 20, 5, 6)
scribble[1] = new circle(15, 25, 8)

// iterate through the array and handle shapes polymorphically
foreach (value x in scribble) {
   x.Draw()
   x.RMoveTo(100, 100)
   x.Draw()
}

// access a rectangle specific function
arect = new rectangle(10, 20, 5, 6)
arect.SetWidth(30)
arect.Draw()

Output

Draw a Rectangle at:(10,20), width 5, height 6
Draw a Rectangle at:(110,120), width 5, height 6
Draw a Circle at:(15,25), radius 8
Draw a Circle at:(115,125), radius 8
Draw a Rectangle at:(10,20), width 30, height 6
""

Chris Rathman / Chris.Rathman@tx.rr.com