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.
Supported classes
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.
Supported classes:
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:
Array
Bag
Bitmap
ByteArray
Dictionary
IdentityBag
IdentityDictionary
IdentitySet
Interval
MagmaCollection
MagmaSet
MagmaDictionary
OrderedCollection
RunArray
String
Symbol
Set
SortedCollection
The following atomics:
true
false
nil
all Characters
all SmallIntegers
The following Magnitudinal classes:
Float
LargePositiveInteger
LargeNegativeInteger
Fraction
Point
Date
Time
DateAndTime
The following Stream classes:
ReadStream
ReadWriteStream
WriteStream
not FileStreams (although that wouldn't be hard to do)
Various Morphs, the following are part of the test cases:
PasteUpMorph
RectangleMorph
StringMorph, TextMorph
BookMorph
EnvelopeEditorMorph, ScorePlayerMorph, PianoRollScoreMorph, SpectrumAnalyzerMorph, many others..
The following "by name reference" only:
any Class or Metaclass
Transcript
Smalltalk
Processor
Fonts
basically any global entry in Smalltalk is stored by reference
TextConstants at: #DefaultMarginTabsArray. and TextConstants at: #DefaultTabsArray.
CAUTION:
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...)
Sockets
Obsolete classes (e.g., classes that begin with "AnObsolete" or "Obsolete")