Here's the scoop:
Metadata for classes is simple. In PIR/assembly, they're noted with .things:
.class Foo .is bar .is baz .does some_thing .member x .member y .member z .ssalc
Unless someone tells me that ssalc is horribly obscene in some relatively common language, and we may still if the translation amuses me sufficiently.
Keywords are simple for the metadata. .class starts the declaration, has a single parameter the name. Class declarations end with .ssalc. Each .is defines a parent class, each .does defines an interface the class supports, and each .member defines a PMC member slot that each object.
If a class is defined in the bytecode, it gets instantiated when the bytecode is created. (It's a constant class, though like any other class is mutable at runtime so it's not that constant) There is no difference between a class created with metadata and one created by executable code piecemeal.
Classes, when instantiated, have a backing namespace that's identical to the class name.
We will be adding version metadata to the classes, but that's going to be deferred.
It's OK for the code that handles PIR and assembly to ignore this for the moment, at least until the metadata segment is better defined. Which will be soon, though I'd rather someone else do the bytecode modification as it's been a long time since I've had my hand in there.
This would be a good time to comment on the metadata, as I'm about to go finish defining the ops to create classes dynamically and actually finish the fscking object.c. code to do it.
Will there be a way to specify which methods belong to the class in the metadata? Or will Method namespaces just have to match class names so that a lookup can be done?
-Joe