Predeclaring the classes used in the six central Inform modules.
§1. For annoying reasons to do with code ordering constraints in C, we need to declare the classes used by the central Inform modules all at once and up front, here in core. (This enables them to be used as values of syntax tree annotations.) The central modules can't be independently compiled of each other or of core in any case.
Deep breath, then: the following macros define several hundred functions. We begin with core itself.
enum compile_task_data_CLASS
DECLARE_CLASS(compile_task_data)
§2. assertions —
enum adjective_iname_holder_CLASS enum adjective_meaning_CLASS enum application_CLASS enum generalisation_CLASS enum i6_memory_setting_CLASS enum implication_CLASS enum relation_guard_CLASS enum table_CLASS enum table_column_CLASS enum table_contribution_CLASS enum use_option_CLASS
DECLARE_CLASS(adjective_iname_holder) DECLARE_CLASS(adjective_meaning) DECLARE_CLASS_ALLOCATED_IN_ARRAYS(application, 100) DECLARE_CLASS(generalisation) DECLARE_CLASS(i6_memory_setting) DECLARE_CLASS(implication) DECLARE_CLASS(relation_guard) DECLARE_CLASS(table) DECLARE_CLASS(table_column) DECLARE_CLASS_ALLOCATED_IN_ARRAYS(table_contribution, 100) DECLARE_CLASS(use_option)
§3. values —
enum equation_CLASS enum equation_node_CLASS enum equation_symbol_CLASS enum instance_CLASS enum instance_usage_CLASS enum inv_token_problem_token_CLASS enum literal_list_CLASS enum literal_pattern_CLASS enum literal_pattern_name_CLASS enum literal_text_CLASS enum llist_entry_CLASS enum nonlocal_variable_CLASS enum response_message_CLASS enum text_substitution_CLASS
DECLARE_CLASS(equation) DECLARE_CLASS(equation_node) DECLARE_CLASS(equation_symbol) DECLARE_CLASS(instance) DECLARE_CLASS_ALLOCATED_IN_ARRAYS(instance_usage, 200) DECLARE_CLASS(inv_token_problem_token) DECLARE_CLASS(literal_list) DECLARE_CLASS(literal_pattern) DECLARE_CLASS(literal_pattern_name) DECLARE_CLASS(literal_text) DECLARE_CLASS(llist_entry) DECLARE_CLASS(nonlocal_variable) DECLARE_CLASS(response_message) DECLARE_CLASS(text_substitution)
§4. knowledge —
enum activity_CLASS enum activity_crossref_CLASS enum activity_list_CLASS enum applicability_condition_CLASS enum booking_CLASS enum comparative_bp_data_CLASS enum counting_data_CLASS enum inference_CLASS enum inference_subject_CLASS enum measurement_definition_CLASS enum named_rulebook_outcome_CLASS enum placement_affecting_CLASS enum property_CLASS enum property_permission_CLASS enum property_of_value_storage_CLASS enum rule_CLASS enum rulebook_CLASS enum rulebook_outcome_CLASS enum stacked_variable_CLASS enum stacked_variable_list_CLASS enum stacked_variable_owner_CLASS enum stacked_variable_owner_list_CLASS
DECLARE_CLASS(activity) DECLARE_CLASS_ALLOCATED_IN_ARRAYS(activity_crossref, 100) DECLARE_CLASS_ALLOCATED_IN_ARRAYS(activity_list, 1000) DECLARE_CLASS(applicability_condition) DECLARE_CLASS(booking) DECLARE_CLASS(comparative_bp_data) DECLARE_CLASS(counting_data) DECLARE_CLASS(inference) DECLARE_CLASS(inference_subject) DECLARE_CLASS(measurement_definition) DECLARE_CLASS(named_rulebook_outcome) DECLARE_CLASS_ALLOCATED_IN_ARRAYS(placement_affecting, 100) DECLARE_CLASS(property_of_value_storage) DECLARE_CLASS(property_permission) DECLARE_CLASS(property) DECLARE_CLASS(rule) DECLARE_CLASS(rulebook) DECLARE_CLASS(rulebook_outcome) DECLARE_CLASS_ALLOCATED_IN_ARRAYS(stacked_variable, 100) DECLARE_CLASS_ALLOCATED_IN_ARRAYS(stacked_variable_list, 100) DECLARE_CLASS_ALLOCATED_IN_ARRAYS(stacked_variable_owner, 100) DECLARE_CLASS_ALLOCATED_IN_ARRAYS(stacked_variable_owner_list, 100)
§5. imperative —
enum constant_phrase_CLASS enum invocation_options_CLASS enum local_variable_CLASS enum past_tense_action_record_CLASS enum past_tense_condition_record_CLASS enum pcalc_prop_deferral_CLASS enum ph_stack_frame_box_CLASS enum phrase_CLASS enum phrase_option_CLASS enum pointer_allocation_CLASS enum to_phrase_request_CLASS enum use_as_event_CLASS
DECLARE_CLASS(constant_phrase) DECLARE_CLASS_ALLOCATED_IN_ARRAYS(invocation_options, 100) DECLARE_CLASS_ALLOCATED_IN_ARRAYS(local_variable, 100) DECLARE_CLASS(past_tense_action_record) DECLARE_CLASS(past_tense_condition_record) DECLARE_CLASS(pcalc_prop_deferral) DECLARE_CLASS(ph_stack_frame_box) DECLARE_CLASS(phrase) DECLARE_CLASS_ALLOCATED_IN_ARRAYS(phrase_option, 100) DECLARE_CLASS(pointer_allocation) DECLARE_CLASS(to_phrase_request) DECLARE_CLASS(use_as_event)
§6. runtime —
enum definition_CLASS enum dval_written_CLASS enum i6_inclusion_matter_CLASS enum internal_test_case_CLASS enum kind_interaction_CLASS enum label_namespace_CLASS enum list_together_routine_CLASS enum nascent_array_CLASS enum plugin_CLASS enum plugin_call_CLASS enum runtime_kind_structure_CLASS enum test_scenario_CLASS
DECLARE_CLASS(definition) DECLARE_CLASS(dval_written) DECLARE_CLASS(i6_inclusion_matter) DECLARE_CLASS(internal_test_case) DECLARE_CLASS(kind_interaction) DECLARE_CLASS(label_namespace) DECLARE_CLASS(list_together_routine) DECLARE_CLASS(nascent_array) DECLARE_CLASS(plugin) DECLARE_CLASS_ALLOCATED_IN_ARRAYS(plugin_call, 100) DECLARE_CLASS(runtime_kind_structure) DECLARE_CLASS(test_scenario)
§7. And finally index —
enum contents_entry_CLASS enum documentation_ref_CLASS enum index_page_CLASS enum index_element_CLASS enum index_lexicon_entry_CLASS
DECLARE_CLASS(contents_entry) DECLARE_CLASS(documentation_ref) DECLARE_CLASS(index_element) DECLARE_CLASS(index_page) DECLARE_CLASS(index_lexicon_entry)