emit

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.