Setting up the use of this module.

§1. This section simply sets up the module in ways expected by foundation, and contains no code of interest. The following constant exists only in tools which use this module:

define BYTECODE_MODULE TRUE

§2. This module defines the following classes:

enum inter_tree_CLASS
enum inter_tree_node_CLASS
enum inter_warehouse_CLASS
enum inter_warehouse_room_CLASS
enum inter_symbols_table_CLASS
enum inter_symbol_CLASS
enum inter_annotation_CLASS
enum inter_construct_CLASS
enum inter_annotation_form_CLASS
enum inter_error_message_CLASS
enum inter_error_stash_CLASS
enum inter_package_CLASS
enum inter_node_list_CLASS
enum inter_node_array_CLASS
DECLARE_CLASS(inter_tree)
DECLARE_CLASS(inter_warehouse)
DECLARE_CLASS(inter_warehouse_room)
DECLARE_CLASS(inter_symbols_table)
DECLARE_CLASS(inter_construct)
DECLARE_CLASS(inter_annotation_form)
DECLARE_CLASS(inter_error_message)
DECLARE_CLASS(inter_package)
DECLARE_CLASS(inter_node_list)
DECLARE_CLASS(inter_node_array)
DECLARE_CLASS_ALLOCATED_IN_ARRAYS(inter_error_stash, 1024)
DECLARE_CLASS_ALLOCATED_IN_ARRAYS(inter_symbol, 1024)
DECLARE_CLASS_ALLOCATED_IN_ARRAYS(inter_tree_node, 8192)
DECLARE_CLASS_ALLOCATED_IN_ARRAYS(inter_annotation, 8192)

§3. Like all modules, this one must define a start and end function:

void BytecodeModule::start(void) {
    Register this module's memory allocation reasons3.2;
    Register this module's stream writers3.3;
    Register this module's debugging log aspects3.5;
    Register this module's debugging log writers3.6;

    InterInstruction::create_language();
    InterTypes::initialise_constructors();
}
void BytecodeModule::end(void) {
}

§3.1.

enum INTER_SYMBOLS_MREASON
enum INTER_BYTECODE_MREASON
enum INTER_LINKS_MREASON
enum TREE_LIST_MREASON

§3.2. Register this module's memory allocation reasons3.2 =

    Memory::reason_name(INTER_SYMBOLS_MREASON, "inter symbols storage");
    Memory::reason_name(INTER_BYTECODE_MREASON, "inter bytecode storage");
    Memory::reason_name(INTER_LINKS_MREASON, "inter links storage");
    Memory::reason_name(TREE_LIST_MREASON, "inter tree location list storage");

§3.3. Register this module's stream writers3.3 =

    Writers::register_writer('t', &TextualInter::writer);
    Writers::register_writer('F', &InterInstruction::instruction_writer);

§3.4.

enum INTER_FILE_READ_DA
enum INTER_MEMORY_DA
enum INTER_BINARY_DA
enum INTER_SYMBOLS_DA
enum INTER_CONNECTORS_DA
enum CONSTANT_DEPTH_CALCULATION_DA

§3.5. Register this module's debugging log aspects3.5 =

    Log::declare_aspect(INTER_MEMORY_DA, U"inter memory usage", FALSE, FALSE);
    Log::declare_aspect(INTER_FILE_READ_DA, U"intermediate file reading", FALSE, FALSE);
    Log::declare_aspect(INTER_BINARY_DA, U"inter binary", FALSE, FALSE);
    Log::declare_aspect(INTER_SYMBOLS_DA, U"inter symbols", FALSE, FALSE);
    Log::declare_aspect(INTER_CONNECTORS_DA, U"inter connectors", FALSE, FALSE);
    Log::declare_aspect(CONSTANT_DEPTH_CALCULATION_DA, U"constant depth calculation", FALSE, FALSE);

§3.6. Register this module's debugging log writers3.6 =

    Writers::register_logger('3', InterSymbol::log);
    Writers::register_logger('4', InterSymbolsTable::log);
    Writers::register_logger('5', InterBookmark::log);
    Writers::register_logger('6', InterPackage::log);