An issue with enumerated types is that they are hard to extend. What if you make a subclass, and want to have an extra choice available in the enumerated type? With raw symbols this is fine. With class-per-state this is fine. But with a Pascal-like or C-like (or ML-like!) enumerated type, you can only extend it by editing the original definition.
I feel like saying "And this is =my= problem somehow?" but:
-> I would be happy just to have it private to a class.
-> If it were exposed, why would extending it be so challenging? They're just integers underneath, eh? I guess there'd be some issues with passing an enumerated type. Hmmm.
I meant in Pascal or C. In these languages, there is a single declaration that lists all the possibilities. To add more possibilities you have to modify that declaration. These languages don't have subclasses, so it is not a big deal. I wonder what C++ does for this, though? Can a C++ subclass add items to an enumerated type its superclass uses? I bet not -- figuring out what it would mean is a headache!
In a Smalltalk (or Java) enumerated type, there's no declaration at all. You are right that you can just use more codes whenever and wherever you like.
Chuck is good at finding all the symbols that are available in an enumerated type. Point to a variable which holds the Squeak equivelant of an enumerated type, and, if Chuck can figure out what the code is doing, the type of that variable will be the list of possible symbols.
What is Chuck? What is the Squeak-equivalent of an enumerated type?
Chuck is a project to help people browse Smalltalk code. Its browser lets you point to a variable and say "what is your type", among other things. The type system of Chuck includes types like "#foo or #bar or #baz", ie lists of symbols. And that's my answer to your second question: I think that lists of symbols would be the Squeak-equivalent of an enumerated type.
Chuck is on SqueakMap, and has this home page:
http://www.cc.gatech.edu/~lex/chuck/
-Lex