OOParsing: preliminary ephermeral framework

Signed-off-by: Gregory M. Turner <gmt@be-evil.net>
OOParsing: add ephemeral example

Signed-off-by: Gregory M. Turner <gmt@be-evil.net>
OOParsing: Allow become() vetoing

With this patch, ephemeron sub- and super-classes can implement become()
and raise a TransformationRejection Exception to veto the change.

When this occurs, the real_me attribute will be removed as if nothing
ever happened, if it ever gets set.  The TransformationRejection
exceptions are munged into TypeError by descriptors wrapping become().

Also: save the affected class into the descriptors so that super()
may be invoked.

Signed-off-by: Gregory M. Turner <gmt@be-evil.net>
OOParser: ephemerals: weakref self-references where possible

Not happy about this.  We need weakrefs but if they use slots (like my
actual use case does) then that won't work.  Try to approximate a set of
ultra-safe assumptions under which we can auto-extend __slots__ to
include __weakref__ (anybody know a better answer?).

That way the decorator will never do anything utterly crazy, except
leak memory like mad.

Signed-off-by: Gregory M. Turner <gmt@be-evil.net>
Refer consistently to MixIn[A-Z][A-Za-z]* in comments

Signed-off-by: Gregory M. Turner <gmt@be-evil.net>
Fix a variable scoping thinko

Signed-off-by: Gregory M. Turner <gmt@be-evil.net>
OOParsing: note that disappearing epehemerals is not implemented in the comment where I describe their (completely nonexistent) interface :)

Signed-off-by: Gregory M. Turner <gmt@be-evil.net>
OOParsing: Comment clarity touchups

Signed-off-by: Gregory M. Turner <gmt@be-evil.net>
OOParsing: SuperMetaEphemeral -> MetaEphemeral

There is no longer any need for the per-decorator-application
dynamically generated (and, confusingly, identically named)
SuperMetaEphemeral subclass.  This used to be required when I
had not yet figured out ways to pass in various bits of state that
the SuperMetaEphemeral needed to do its job right.

Now all of that is gone and this only serves to cook up a big ol'
Meta-mess.  This patch should fix multiple inherited epehermerals
(so long as they avoid other pitfalls).

Signed-off-by: Gregory M. Turner <gmt@be-evil.net>
OOParsing: touch up __weakref__ in-source doc & handling

Not sure how important some of these changes are but some
of them were in response to observed failures when testing
("playing with," might be a better term) some of the
@ephemerals stuff.

Signed-off-by: Gregory M. Turner <gmt@be-evil.net>
This commit tries to firm up the semantic clarity/requirements if MixIns.

o Mostly for the sake of consistency, move
  AtomicProduction's 'ID' into MixInProduction's __slots__

o Add a new ConcreteProduction class to make explicit the transition
  from the MixInProduction sub-tree to the concrete instances classes.

o Add some metaprogramming to enforce single-inheritance of
  ConcreteProduction subclasses.  Chief immediate benefit is
  that we can confidently recycle variables in MixInProduction's
  __slots__  without fear of confusing results (indeed mixing
  multiple bases with ConcreteProduction superclasses will
  give a 'compile'-time error rather than simply acting insane.

Signed-off-by: Gregory M. Turner <gmt@be-evil.net>
OOParsing: minor nits

Fix a supid whitespace/comment thingy

Fix a broken constructor invocation in UserListProduction.__getslice__

Signed-off-by: Gregory M. Turner <gmt@be-evil.net>
OOParsing: Ephemerals rough-cut

Everything is not put together yet but what's
there seems mostly stable.  Sheesh, slow going...
.gitignore: *.py~

Signed-off-by: Gregory M. Turner <gmt@be-evil.net>