emit sollte auf kurz oder lang print ablösen, wobei print ein emit(stdout) entsprechen könnte, wobei stdout ausschließlich strings und byte-Arrays akzeptiert.
emit bekommt als optionales Argument einen Generator genannt, z.B. C++.
ImageSize is enum
{
Large,
Small;
};
generator cplusplus
{
// Variablen, die zum Projekt-Enviroment gehören.
enum( e is type ) // irgendein enum
{
emit "enum "+e$;
emit "{";
bool comma = false;
for( type t of e.elements() )
{
if( comma )
emit ",";
emit "\n "+ t$;
}
emit "\n};";
};
// ImageSize
// {
// emit "Generator für Typ ImageSize, ansprechbar über value";
// }
};
emit(cplusplus) ImageSize;
Hier besteht also ein passender Generator, der auch ein enum verarbeiten kann.
ImageSize is enum
{
Large,
Small;
};
sollte mit
gc -e cplusplus imagesize.g -o imagesize.h
kompiliert werden können. Dafür wird nachgeprüft, ob auf Festplatte ein „cplusplus“-Generator existiert und falls ja, wird dieser geladen. Existiert dann eine Beschreibung für ImageSize oder als Fallback für enum, dann wird dieser ausgeführt, sobald das enum als Genesys-Code gelesen wurde.
Die Genesys-Anweisungen werden nur gelesen und sofort an den Generator weitergeleitet.