Prototype-based objects


Usage:


Create an object/class:
  object/class = parent {value, ...; field = value ...}
  An object's metatable is itself.
  In the initialiser, unnamed values are assigned to the fields
  given by _init (assuming the default _clone).
  Private fields and methods start with "_"


Access an object field: object.field
Call an object method: object:method (...)
Call a class method: class.method (self, ...)


Add a field: object.field = x
Add a method: function object:method (...) ... end


Root object


Object:_clone: Object constructor
  values: initial values for fields in
  _init
returns
  object: new object


Object:__call: Sugar instance creation