Magma Supported Classes
Last updated at 1:04 pm UTC on 15 January 2017
Generically, Magma supports all four types of Squeak objects:
Fixed objects with named variables
Variable objects with indexed variables
Variable byte objects
Variable word objects
However, several kinds of objects require some additional handling which is provided by the hooks in Ma object serialization.
The objects supported by Magma is largely determined by the objects supported by its underlying serialization framework.
And globals such as Smalltalk are serialized and materialized "by name reference". These kinds of object make use of various serialization hooks such as pre and post-processing, transient variables, and storage objects.
The following is not an exhaustive list of supported classes, just a partial list of classes that are known to be used in existing applications.
- any class that inherits from Object with only named instance variables. This should cover 99% of modern Squeak-user development.
- The following collection classes:
- The following atomics:
- all Characters
- all SmallIntegers
- The following Magnitudinal classes:
- The following Stream classes:
- not FileStreams (although that wouldn't be hard to do)
- Various Morphs, the following are part of the test cases:
- StringMorph, TextMorph
- EnvelopeEditorMorph, ScorePlayerMorph, PianoRollScoreMorph, SpectrumAnalyzerMorph, many others..
- The following "by name reference" only:
- any Class or Metaclass
- basically any global entry in Smalltalk is stored by reference
- TextConstants at: #DefaultMarginTabsArray. and TextConstants at: #DefaultTabsArray.
The following kinds of objects should get special scrutiny; they have not been tested.
- Classes with both named and indexed instance-variables.
- Subclasses of Set or Dictionary.
- Weak anything (except the WeakSets in Morphs)
- Running Processes (note: the test case actually includes a suspended Process that we resume in the other client and it seems to work, but that's the only test I've done, proceed with caution).
- Open file streams (but I think we just need a postMaterialization block to reopen the file if it was open...)
- Obsolete classes (e.g., classes that begin with "AnObsolete" or "Obsolete")