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.
Unless otherwise noted, fixed objects with named and indexed variables probably don't work (I haven't tested them). They are rarely found and never required.
Supported classes
The objects supported by Magma is largely determined by the objects supported by its underlying serialization framework.
Unfortunately, this generic serialization and materialization is not sufficient for several kinds of Squeak objects. For example, CompiledMethods have a special nature and therefore require special processing. 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:
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
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
The following Stream classes:
ReadStream
ReadWriteStream
not FileStreams
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.
I discovered the following are not part of the test cases, yet I fully expect them to work:
Any object with both named and indexed instance-variables
WriteStream
IdentityBag
IdentityDictionary
IdentitySet
Special note about Projects
There is a special test case written explicitly for projects. Currently, the following projects are tested:
(From MagmaTestCase class>>#projectsToTest)
^ #('Building with Squeak' 'Fun with Morphic' 'Fun With Music' 'SmalltalkIntroduction')
step 1: client2 expunges these projects
step 2: client1 commits these projects to the repository
step 3: client2 opens a workspace instructing you to enter each project and play around to see if they are working ok
It actually works! Well, almost.. Despite my efforts, there must be some further nuance to Etoys that I did not catch. While the projects tested do save and load and seem to work, I noticed something didn't get fully reconnected in the Building with Squeak project (driving a car). The car is drivable with the wheel, but only after nudging one of the script parameters up and then back down. I would be happy to work with someone who understands these nuances better than I to get ths fixed.
Special note about CompiledMethods, MethodContexts and BlockContexts
CompiledMethods, MethodContexts or BlockContexts are supported except if the block references "self" or any instance variable of the class. Calls to accessing methods should be used instead.
Also, you may not add a CompiledMethod, MethodContext or BlockContext to a Set or key of a Dictionary. However, you may reference them from other objects.
Special note about Morphs
The test cases do not explicitly test many different kinds of Morphs, just RectangleMorph, TextMorph, and a few others). However, the success of Projects requires the success of many other kinds of Morphs.
CAUTION: Unsupported
The following kinds of objects are not supported. They've never been tested and I don't expect them to work:
Classes with both named and indexed instance-variables.
Any 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
Sockets
Obsolete classes (e.g., classes that begin with "AnObsolete" or "Obsolete")
I have not tested Wonderland objects because the Wonderland project in 3.7Full has instances of Obsolete classes in it.