**************************************************************************
** title:      Slots
** author:     Brian Frank
** created:    8 Dec 07
** copyright:  Copyright (c) 2007, Brian Frank and Andy Frank
** license:    Licensed under the Academic Free License version 3.0
**************************************************************************

Overview [#overview]
********************
Types are composed of uniquely named [slots]`Structure#slots`.
Slots define the state and behavior of the object oriented type.
There are two types of slots:
  - `Fields` define state
  - `Methods` define behavior

Slot Modifiers [#modifiers]
****************************
Slots may be annotated with one of the following modifiers:
  - 'abstract': see [fields]`Fields#abstract` and [methods]`Methods#abstract`
  - 'const': see [fields]`Fields#const`
  - 'new': see [methods]`Methods#ctor`
  - 'internal': see [protection]`#protection`
  - 'native': see [fields]`Fields#native` and [methods]`Methods#native`
  - 'override': see [fields]`Fields#virtual` and [methods]`Methods#virtual`
  - 'private': see [protection]`#protection`
  - 'protected': see [protection]`#protection`
  - 'public': see [protection]`#protection`
  - 'static': see [fields]`Fields#static` and [methods]`Methods#overview`
  - 'virtual': see [fields]`Fields#virtual` and [methods]`Methods#virtual`

Protection [#protection]
========================
A slot can be annotated with one of the following modifiers
to define its visibility:

  - 'public': everyone can access the slot
  - 'protected': only subclasses and types within declaring pod can access the slot
  - 'internal': only types within the declaring pod can access the slot
  - 'private': only declaring type can access the slot

If no protection keyword is specified, the slot defaults to public.