diff --git a/docs/final-module/2-cg.html b/docs/final-module/2-cg.html index 3ff8f097a..729541b7a 100644 --- a/docs/final-module/2-cg.html +++ b/docs/final-module/2-cg.html @@ -299,7 +299,7 @@ to go back to where it was. These calls must be made in properly nested pairs.

-generated_segment *CodeGen::select(code_generation *gen, int i) {
+generated_segment *CodeGen::select(code_generation *gen, int i) {
     generated_segment *saved = gen->segmentation.current_segment;
     if ((i < 0) || (i >= NO_DEFINED_I7CGS_VALUES)) internal_error("out of range");
     if (gen->segmentation.temporarily_diverted) internal_error("poorly timed selection");
@@ -309,7 +309,7 @@ to go back to where it was. These calls must be made in properly nested pairs.
     return saved;
 }
 
-void CodeGen::deselect(code_generation *gen, generated_segment *saved) {
+void CodeGen::deselect(code_generation *gen, generated_segment *saved) {
     if (gen->segmentation.temporarily_diverted) internal_error("poorly timed deselection");
     gen->segmentation.current_segment = saved;
 }
diff --git a/docs/final-module/2-cg2.html b/docs/final-module/2-cg2.html
index 28f71210b..aad0b4c99 100644
--- a/docs/final-module/2-cg2.html
+++ b/docs/final-module/2-cg2.html
@@ -234,19 +234,12 @@ I6 code. Still, all pragmas are offered to all generators.
 
 INT_METHOD_TYPE(GENERAL_SEGMENT_MTID, code_generator *generator, code_generation *gen, inter_tree_node *P)
-INT_METHOD_TYPE(DEFAULT_SEGMENT_MTID, code_generator *generator, code_generation *gen)
 
 int Generators::general_segment(code_generation *gen, inter_tree_node *P) {
     int rv = 0;
     INT_METHOD_CALL(rv, gen->generator, GENERAL_SEGMENT_MTID, gen, P);
     return rv;
 }
-
-int Generators::default_segment(code_generation *gen) {
-    int rv = 0;
-    INT_METHOD_CALL(rv, gen->generator, DEFAULT_SEGMENT_MTID, gen);
-    return rv;
-}
 

§9.

@@ -254,7 +247,7 @@ I6 code. Still, all pragmas are offered to all generators.
 VOID_METHOD_TYPE(MANGLE_IDENTIFIER_MTID, code_generator *generator, text_stream *OUT, text_stream *identifier)
-void Generators::mangle(code_generation *gen, text_stream *OUT, text_stream *identifier) {
+void Generators::mangle(code_generation *gen, text_stream *OUT, text_stream *identifier) {
     VOID_METHOD_CALL(gen->generator, MANGLE_IDENTIFIER_MTID, OUT, identifier);
 }
 
@@ -264,7 +257,7 @@ I6 code. Still, all pragmas are offered to all generators.
 VOID_METHOD_TYPE(COMPILE_DICTIONARY_WORD_MTID, code_generator *generator, code_generation *gen, text_stream *S, int pluralise)
-void Generators::compile_dictionary_word(code_generation *gen, text_stream *S, int pluralise) {
+void Generators::compile_dictionary_word(code_generation *gen, text_stream *S, int pluralise) {
     VOID_METHOD_CALL(gen->generator, COMPILE_DICTIONARY_WORD_MTID, gen, S, pluralise);
 }
 
@@ -276,10 +269,10 @@ I6 code. Still, all pragmas are offered to all generators.
 VOID_METHOD_TYPE(COMPILE_LITERAL_NUMBER_MTID, code_generator *generator, code_generation *gen, inter_ti val, int hex_mode)
 VOID_METHOD_TYPE(COMPILE_LITERAL_REAL_MTID, code_generator *generator, code_generation *gen, text_stream *textual)
-void Generators::compile_literal_number(code_generation *gen, inter_ti val, int hex_mode) {
+void Generators::compile_literal_number(code_generation *gen, inter_ti val, int hex_mode) {
     VOID_METHOD_CALL(gen->generator, COMPILE_LITERAL_NUMBER_MTID, gen, val, hex_mode);
 }
-void Generators::compile_literal_real(code_generation *gen, text_stream *textual) {
+void Generators::compile_literal_real(code_generation *gen, text_stream *textual) {
     VOID_METHOD_CALL(gen->generator, COMPILE_LITERAL_REAL_MTID, gen, textual);
 }
 
@@ -289,7 +282,7 @@ I6 code. Still, all pragmas are offered to all generators.
 VOID_METHOD_TYPE(COMPILE_LITERAL_TEXT_MTID, code_generator *generator, code_generation *gen, text_stream *S, int escape_mode)
-void Generators::compile_literal_text(code_generation *gen, text_stream *S, int escape_mode) {
+void Generators::compile_literal_text(code_generation *gen, text_stream *S, int escape_mode) {
     VOID_METHOD_CALL(gen->generator, COMPILE_LITERAL_TEXT_MTID, gen, S, escape_mode);
 }
 
@@ -301,10 +294,10 @@ I6 code. Still, all pragmas are offered to all generators.
 VOID_METHOD_TYPE(DECLARE_PROPERTY_MTID, code_generator *generator, code_generation *gen, inter_symbol *prop_name, int used)
 VOID_METHOD_TYPE(DECLARE_ATTRIBUTE_MTID, code_generator *generator, code_generation *gen, text_stream *prop_name)
-void Generators::declare_property(code_generation *gen, inter_symbol *prop_name, int used) {
+void Generators::declare_property(code_generation *gen, inter_symbol *prop_name, int used) {
     VOID_METHOD_CALL(gen->generator, DECLARE_PROPERTY_MTID, gen, prop_name, used);
 }
-void Generators::declare_attribute(code_generation *gen, text_stream *prop_name) {
+void Generators::declare_attribute(code_generation *gen, text_stream *prop_name) {
     VOID_METHOD_CALL(gen->generator, DECLARE_ATTRIBUTE_MTID, gen, prop_name);
 }
 
@@ -331,10 +324,10 @@ I6 code. Still, all pragmas are offered to all generators. INT_METHOD_CALL(rv, gen->generator, DECLARE_VARIABLE_MTID, gen, P, var_name, k, of); return rv; } -void Generators::declare_variables(code_generation *gen, linked_list *L) { +void Generators::declare_variables(code_generation *gen, linked_list *L) { VOID_METHOD_CALL(gen->generator, DECLARE_VARIABLES_MTID, gen, L); } -void Generators::evaluate_variable(code_generation *gen, inter_symbol *var_name, int as_reference) { +void Generators::evaluate_variable(code_generation *gen, inter_symbol *var_name, int as_reference) { VOID_METHOD_CALL(gen->generator, EVALUATE_VARIABLE_MTID, gen, var_name, as_reference); } @@ -344,7 +337,7 @@ I6 code. Still, all pragmas are offered to all generators.
 VOID_METHOD_TYPE(PSEUDO_OBJECT_MTID, code_generator *generator, code_generation *gen, text_stream *obj_name)
-void Generators::pseudo_object(code_generation *gen, text_stream *obj_name) {
+void Generators::pseudo_object(code_generation *gen, text_stream *obj_name) {
     VOID_METHOD_CALL(gen->generator, PSEUDO_OBJECT_MTID, gen, obj_name);
 }
 
@@ -362,35 +355,35 @@ I6 code. Still, all pragmas are offered to all generators.
 VOID_METHOD_TYPE(DECLARE_CLASS_MTID, code_generator *generator, code_generation *gen, text_stream *class_name, text_stream *printed_name, text_stream *super_class)
 VOID_METHOD_TYPE(END_CLASS_MTID, code_generator *generator, code_generation *gen, text_stream *class_name)
-void Generators::declare_class(code_generation *gen, text_stream *class_name, text_stream *printed_name, text_stream *super_class) {
+void Generators::declare_class(code_generation *gen, text_stream *class_name, text_stream *printed_name, text_stream *super_class) {
     VOID_METHOD_CALL(gen->generator, DECLARE_CLASS_MTID, gen, class_name, printed_name, super_class);
 }
-void Generators::end_class(code_generation *gen, text_stream *class_name) {
+void Generators::end_class(code_generation *gen, text_stream *class_name) {
     VOID_METHOD_CALL(gen->generator, END_CLASS_MTID, gen, class_name);
 }
 VOID_METHOD_TYPE(DECLARE_INSTANCE_MTID, code_generator *generator, code_generation *gen, text_stream *class_name, text_stream *instance_name, text_stream *printed_name, int acount, int is_dir)
 VOID_METHOD_TYPE(END_INSTANCE_MTID, code_generator *generator, code_generation *gen, text_stream *class_name, text_stream *instance_name)
-void Generators::declare_instance(code_generation *gen, text_stream *class_name, text_stream *instance_name, text_stream *printed_name, int acount, int is_dir) {
+void Generators::declare_instance(code_generation *gen, text_stream *class_name, text_stream *instance_name, text_stream *printed_name, int acount, int is_dir) {
     VOID_METHOD_CALL(gen->generator, DECLARE_INSTANCE_MTID, gen, class_name, instance_name, printed_name, acount, is_dir);
 }
-void Generators::end_instance(code_generation *gen, text_stream *class_name, text_stream *instance_name) {
+void Generators::end_instance(code_generation *gen, text_stream *class_name, text_stream *instance_name) {
     VOID_METHOD_CALL(gen->generator, END_INSTANCE_MTID, gen, class_name, instance_name);
 }
 VOID_METHOD_TYPE(DECLARE_VALUE_INSTANCE_MTID, code_generator *generator, code_generation *gen, text_stream *instance_name, text_stream *printed_name, text_stream *val)
-void Generators::declare_value_instance(code_generation *gen, text_stream *instance_name, text_stream *printed_name, text_stream *val) {
+void Generators::declare_value_instance(code_generation *gen, text_stream *instance_name, text_stream *printed_name, text_stream *val) {
     VOID_METHOD_CALL(gen->generator, DECLARE_VALUE_INSTANCE_MTID, gen, instance_name, printed_name, val);
 }
 INT_METHOD_TYPE(OPTIMISE_PROPERTY_MTID, code_generator *generator, code_generation *gen, inter_symbol *prop_name, inter_tree_node *X)
-int Generators::optimise_property_value(code_generation *gen, inter_symbol *prop_name, inter_tree_node *X) {
+int Generators::optimise_property_value(code_generation *gen, inter_symbol *prop_name, inter_tree_node *X) {
     int rv = FALSE;
     INT_METHOD_CALL(rv, gen->generator, OPTIMISE_PROPERTY_MTID, gen, prop_name, X);
     return rv;
 }
 VOID_METHOD_TYPE(ASSIGN_PROPERTY_MTID, code_generator *generator, code_generation *gen, text_stream *property_name, text_stream *val, int as_att)
-void Generators::assign_property(code_generation *gen, text_stream *property_name, text_stream *val, int as_att) {
+void Generators::assign_property(code_generation *gen, text_stream *property_name, text_stream *val, int as_att) {
     VOID_METHOD_CALL(gen->generator, ASSIGN_PROPERTY_MTID, gen, property_name, val, as_att);
 }
-void Generators::assign_mangled_property(code_generation *gen, text_stream *property_name, text_stream *val, int as_att) {
+void Generators::assign_mangled_property(code_generation *gen, text_stream *property_name, text_stream *val, int as_att) {
     TEMPORARY_TEXT(mangled)
     Generators::mangle(gen, mangled, val);
     Generators::assign_property(gen, property_name, mangled, as_att);
@@ -398,7 +391,7 @@ I6 code. Still, all pragmas are offered to all generators.
 }
 
 VOID_METHOD_TYPE(PROPERTY_OFFSET_MTID, code_generator *generator, code_generation *gen, text_stream *property_name, int pos, int as_att)
-void Generators::property_offset(code_generation *gen, text_stream *property_name, int pos, int as_att) {
+void Generators::property_offset(code_generation *gen, text_stream *property_name, int pos, int as_att) {
     VOID_METHOD_CALL(gen->generator, PROPERTY_OFFSET_MTID, gen, property_name, pos, as_att);
 }
 
@@ -412,7 +405,7 @@ I6 code. Still, all pragmas are offered to all generators.
 VOID_METHOD_TYPE(DECLARE_CONSTANT_MTID, code_generator *generator, code_generation *gen, text_stream *const_name, inter_symbol *const_s, int form, inter_tree_node *P, text_stream *val, int ifndef_me)
-void Generators::declare_constant(code_generation *gen, text_stream *const_name, inter_symbol *const_s, int form, inter_tree_node *P, text_stream *val, int ifndef_me) {
+void Generators::declare_constant(code_generation *gen, text_stream *const_name, inter_symbol *const_s, int form, inter_tree_node *P, text_stream *val, int ifndef_me) {
     VOID_METHOD_CALL(gen->generator, DECLARE_CONSTANT_MTID, gen, const_name, const_s, form, P, val, ifndef_me);
 }
 
@@ -427,10 +420,10 @@ I6 code. Still, all pragmas are offered to all generators. VOID_METHOD_TYPE(PREDECLARE_FUNCTION_MTID, code_generator *generator, code_generation *gen, inter_symbol *fn, inter_tree_node *code) VOID_METHOD_TYPE(DECLARE_FUNCTION_MTID, code_generator *generator, code_generation *gen, inter_symbol *fn, inter_tree_node *code) VOID_METHOD_TYPE(END_FUNCTION_MTID, code_generator *generator, int pass, code_generation *gen, inter_symbol *fn) -void Generators::predeclare_function(code_generation *gen, inter_symbol *fn, inter_tree_node *code) { +void Generators::predeclare_function(code_generation *gen, inter_symbol *fn, inter_tree_node *code) { VOID_METHOD_CALL(gen->generator, PREDECLARE_FUNCTION_MTID, gen, fn, code); } -void Generators::declare_function(code_generation *gen, inter_symbol *fn, inter_tree_node *code) { +void Generators::declare_function(code_generation *gen, inter_symbol *fn, inter_tree_node *code) { VOID_METHOD_CALL(gen->generator, DECLARE_FUNCTION_MTID, gen, fn, code); } void Generators::end_function(int pass, code_generation *gen, inter_symbol *fn) { @@ -455,28 +448,28 @@ I6 code. Still, all pragmas are offered to all generators. VOID_METHOD_TYPE(ARRAY_ENTRIES_MTID, code_generator *generator, code_generation *gen, int how_many, int plus_ips, int format) VOID_METHOD_TYPE(COMPILE_LITERAL_SYMBOL_MTID, code_generator *generator, code_generation *gen, inter_symbol *aliased) VOID_METHOD_TYPE(END_ARRAY_MTID, code_generator *generator, code_generation *gen, int format) -int Generators::begin_array(code_generation *gen, text_stream *const_name, inter_symbol *array_s, inter_tree_node *P, int format) { +int Generators::begin_array(code_generation *gen, text_stream *const_name, inter_symbol *array_s, inter_tree_node *P, int format) { int rv = FALSE; INT_METHOD_CALL(rv, gen->generator, BEGIN_ARRAY_MTID, gen, const_name, array_s, P, format); return rv; } -void Generators::array_entry(code_generation *gen, text_stream *entry, int format) { +void Generators::array_entry(code_generation *gen, text_stream *entry, int format) { VOID_METHOD_CALL(gen->generator, ARRAY_ENTRY_MTID, gen, entry, format); } -void Generators::array_entries(code_generation *gen, int how_many, int plus_ips, int format) { +void Generators::array_entries(code_generation *gen, int how_many, int plus_ips, int format) { VOID_METHOD_CALL(gen->generator, ARRAY_ENTRIES_MTID, gen, how_many, plus_ips, format); } -void Generators::mangled_array_entry(code_generation *gen, text_stream *entry, int format) { +void Generators::mangled_array_entry(code_generation *gen, text_stream *entry, int format) { TEMPORARY_TEXT(mangled) Generators::mangle(gen, mangled, entry); VOID_METHOD_CALL(gen->generator, ARRAY_ENTRY_MTID, gen, mangled, format); DISCARD_TEXT(mangled) } -void Generators::compile_literal_symbol(code_generation *gen, inter_symbol *aliased) { +void Generators::compile_literal_symbol(code_generation *gen, inter_symbol *aliased) { VOID_METHOD_CALL(gen->generator, COMPILE_LITERAL_SYMBOL_MTID, gen, aliased); } -void Generators::end_array(code_generation *gen, int format) { +void Generators::end_array(code_generation *gen, int format) { VOID_METHOD_CALL(gen->generator, END_ARRAY_MTID, gen, format); } @@ -496,7 +489,7 @@ I6 code. Still, all pragmas are offered to all generators.
 VOID_METHOD_TYPE(NEW_ACTION_MTID, code_generator *generator, code_generation *gen, text_stream *name, int true_action)
-void Generators::new_action(code_generation *gen, text_stream *name, int true_action) {
+void Generators::new_action(code_generation *gen, text_stream *name, int true_action) {
     VOID_METHOD_CALL(gen->generator, NEW_ACTION_MTID, gen, name, true_action);
 }
 
diff --git a/docs/final-module/2-vo.html b/docs/final-module/2-vo.html index a2b07bb94..60d4ea517 100644 --- a/docs/final-module/2-vo.html +++ b/docs/final-module/2-vo.html @@ -147,9 +147,7 @@ MathJax = { void VanillaObjects::consolidate(code_generation *gen) { if (properties_written == FALSE) { InterTree::traverse(gen->from, VanillaObjects::pseudo_object_visitor, gen, NULL, CONSTANT_IST); - generated_segment *saved = CodeGen::select(gen, Generators::default_segment(gen)); VanillaObjects::knowledge(gen); - CodeGen::deselect(gen, saved); properties_written = TRUE; } } diff --git a/docs/final-module/4-fi6.html b/docs/final-module/4-fi6.html index a11441fbb..81645d8a3 100644 --- a/docs/final-module/4-fi6.html +++ b/docs/final-module/4-fi6.html @@ -143,7 +143,6 @@ function togglePopup(material_id) { code_generator *cgt = Generators::new(I"inform6"); METHOD_ADD(cgt, BEGIN_GENERATION_MTID, I6Target::begin_generation); METHOD_ADD(cgt, GENERAL_SEGMENT_MTID, I6Target::general_segment); - METHOD_ADD(cgt, DEFAULT_SEGMENT_MTID, I6Target::default_segment); METHOD_ADD(cgt, INVOKE_PRIMITIVE_MTID, I6Target::invoke_primitive); METHOD_ADD(cgt, MANGLE_IDENTIFIER_MTID, I6Target::mangle); METHOD_ADD(cgt, COMPILE_DICTIONARY_WORD_MTID, I6Target::compile_dictionary_word); @@ -326,15 +325,12 @@ It's used in the I6 veneer, and need not exist on any other final compilation ta return main_matter_I7CGS; } -int I6Target::default_segment(code_generator *cgt) { - return main_matter_I7CGS; -} -int I6Target::basic_constant_segment(code_generator *cgt, code_generation *gen, inter_symbol *con_name, int depth) { +int I6Target::basic_constant_segment(code_generator *cgt, code_generation *gen, inter_symbol *con_name, int depth) { if (depth >= 10) depth = 10; return constants_1_I7CGS + depth - 1; } -void I6Target::offer_pragma(code_generator *cgt, code_generation *gen, +void I6Target::offer_pragma(code_generator *cgt, code_generation *gen, inter_tree_node *P, text_stream *tag, text_stream *content) { if (Str::eq(tag, I"Inform6")) { generated_segment *saved = CodeGen::select(gen, pragmatic_matter_I7CGS); @@ -344,11 +340,11 @@ It's used in the I6 veneer, and need not exist on any other final compilation ta } } -void I6Target::mangle(code_generator *cgt, OUTPUT_STREAM, text_stream *identifier) { +void I6Target::mangle(code_generator *cgt, OUTPUT_STREAM, text_stream *identifier) { WRITE("%S", identifier); } -void I6Target::invoke_primitive(code_generator *cgt, code_generation *gen, +void I6Target::invoke_primitive(code_generator *cgt, code_generation *gen, inter_symbol *prim_name, inter_tree_node *P, int void_context) { text_stream *OUT = CodeGen::current(gen); int suppress_terminal_semicolon = FALSE; @@ -705,7 +701,7 @@ then the result.

§4.

-void I6Target::compile_dictionary_word(code_generator *cgt, code_generation *gen,
+void I6Target::compile_dictionary_word(code_generator *cgt, code_generation *gen,
     text_stream *S, int pluralise) {
     text_stream *OUT = CodeGen::current(gen);
     int n = 0;
@@ -730,14 +726,14 @@ then the result.
 

§5.

-void I6Target::compile_literal_number(code_generator *cgt,
+void I6Target::compile_literal_number(code_generator *cgt,
     code_generation *gen, inter_ti val, int hex_mode) {
     text_stream *OUT = CodeGen::current(gen);
     if (hex_mode) WRITE("$%x", val);
     else WRITE("%d", val);
 }
 
-void I6Target::compile_literal_real(code_generator *cgt,
+void I6Target::compile_literal_real(code_generator *cgt,
     code_generation *gen, text_stream *textual) {
     text_stream *OUT = CodeGen::current(gen);
     WRITE("$%S", textual);
@@ -746,7 +742,7 @@ then the result.
 

§6.

-void I6Target::compile_literal_text(code_generator *cgt, code_generation *gen,
+void I6Target::compile_literal_text(code_generator *cgt, code_generation *gen,
     text_stream *S, int escape_mode) {
     text_stream *OUT = CodeGen::current(gen);
     WRITE("\"");
@@ -812,7 +808,7 @@ trick called "stubbing", these being "stub definitions".)
 

-void I6Target::declare_property(code_generator *cgt, code_generation *gen,
+void I6Target::declare_property(code_generator *cgt, code_generation *gen,
     inter_symbol *prop_name, int used) {
     text_stream *name = Inter::Symbols::name(prop_name);
     if (used) {
@@ -826,13 +822,13 @@ trick called "stubbing", these being "stub definitions".)
     }
 }
 
-void I6Target::declare_attribute(code_generator *cgt, code_generation *gen, text_stream *prop_name) {
+void I6Target::declare_attribute(code_generator *cgt, code_generation *gen, text_stream *prop_name) {
     generated_segment *saved = CodeGen::select(gen, I6Target::basic_constant_segment(cgt, gen, NULL, 1));
     WRITE_TO(CodeGen::current(gen), "Attribute %S;\n", prop_name);
     CodeGen::deselect(gen, saved);
 }
 
-void I6Target::property_offset(code_generator *cgt, code_generation *gen, text_stream *prop, int pos, int as_attr) {
+void I6Target::property_offset(code_generator *cgt, code_generation *gen, text_stream *prop, int pos, int as_attr) {
     generated_segment *saved = CodeGen::select(gen, property_offset_creator_I7CGS);
     text_stream *OUT = CodeGen::current(gen);
     if (I6_GEN_DATA(I6_property_offsets_made)++ == 0) {
@@ -851,7 +847,7 @@ trick called "stubbing", these being "stub definitions".)
 

§8.

-void I6Target::declare_variables(code_generator *cgt, code_generation *gen,
+void I6Target::declare_variables(code_generator *cgt, code_generation *gen,
     linked_list *L) {
     int k = 0;
     inter_symbol *var_name;
@@ -888,23 +884,23 @@ trick called "stubbing", these being "stub definitions".)
     }
 }
 
-void I6Target::evaluate_variable(code_generator *cgt, code_generation *gen, inter_symbol *var_name, int as_reference) {
+void I6Target::evaluate_variable(code_generator *cgt, code_generation *gen, inter_symbol *var_name, int as_reference) {
     text_stream *OUT = CodeGen::current(gen);
     WRITE("%S", Inter::Symbols::name(var_name));
 }
 
-void I6Target::declare_class(code_generator *cgt, code_generation *gen, text_stream *class_name, text_stream *printed_name, text_stream *super_class) {
+void I6Target::declare_class(code_generator *cgt, code_generation *gen, text_stream *class_name, text_stream *printed_name, text_stream *super_class) {
     text_stream *OUT = CodeGen::current(gen);
     WRITE("Class %S\n", class_name);
     if (Str::len(super_class) > 0) WRITE("  class %S\n", super_class);
 }
 
-void I6Target::end_class(code_generator *cgt, code_generation *gen, text_stream *class_name) {
+void I6Target::end_class(code_generator *cgt, code_generation *gen, text_stream *class_name) {
     text_stream *OUT = CodeGen::current(gen);
     WRITE(";\n");
 }
 
-void I6Target::declare_instance(code_generator *cgt, code_generation *gen, text_stream *class_name, text_stream *instance_name, text_stream *printed_name, int acount, int is_dir) {
+void I6Target::declare_instance(code_generator *cgt, code_generation *gen, text_stream *class_name, text_stream *instance_name, text_stream *printed_name, int acount, int is_dir) {
     text_stream *OUT = CodeGen::current(gen);
     WRITE("%S", class_name);
     for (int i=0; i<acount; i++) WRITE(" ->");
@@ -912,12 +908,12 @@ trick called "stubbing", these being "stub definitions".)
     if (is_dir) WRITE(" Compass");
 }
 
-void I6Target::end_instance(code_generator *cgt, code_generation *gen, text_stream *class_name, text_stream *instance_name) {
+void I6Target::end_instance(code_generator *cgt, code_generation *gen, text_stream *class_name, text_stream *instance_name) {
     text_stream *OUT = CodeGen::current(gen);
     WRITE(";\n");
 }
 
-int I6Target::optimise_property_value(code_generator *cgt, code_generation *gen, inter_symbol *prop_name, inter_tree_node *X) {
+int I6Target::optimise_property_value(code_generator *cgt, code_generation *gen, inter_symbol *prop_name, inter_tree_node *X) {
     if (Inter::Symbols::is_stored_in_data(X->W.data[DVAL1_PVAL_IFLD], X->W.data[DVAL2_PVAL_IFLD])) {
         inter_symbol *S = InterSymbolsTables::symbol_from_data_pair_and_frame(X->W.data[DVAL1_PVAL_IFLD], X->W.data[DVAL2_PVAL_IFLD], X);
         if ((S) && (Inter::Symbols::read_annotation(S, INLINE_ARRAY_IANN) == 1)) {
@@ -933,7 +929,7 @@ trick called "stubbing", these being "stub definitions".)
     return FALSE;
 }
 
-void I6Target::assign_property(code_generator *cgt, code_generation *gen, text_stream *property_name, text_stream *val, int as_att) {
+void I6Target::assign_property(code_generator *cgt, code_generation *gen, text_stream *property_name, text_stream *val, int as_att) {
     text_stream *OUT = CodeGen::current(gen);
     if (as_att) {
         if (Str::eq(val, I"0")) WRITE("    has ~%S\n", property_name);
@@ -954,7 +950,7 @@ trick called "stubbing", these being "stub definitions".)
     LOOP_THROUGH_INTER_CHILDREN(F, P) I6Target::seek_locals(gen, F);
 }
 
-void I6Target::declare_constant(code_generator *cgt, code_generation *gen, text_stream *const_name, inter_symbol *const_s, int form, inter_tree_node *P, text_stream *val, int ifndef_me) {
+void I6Target::declare_constant(code_generator *cgt, code_generation *gen, text_stream *const_name, inter_symbol *const_s, int form, inter_tree_node *P, text_stream *val, int ifndef_me) {
     if ((const_s) && (Inter::Symbols::read_annotation(const_s, INLINE_ARRAY_IANN) == 1)) return;
 
     if (Str::eq(const_name, I"FLOAT_INFINITY")) return;
@@ -1005,7 +1001,7 @@ trick called "stubbing", these being "stub definitions".)
 }
 
 int this_is_I6_Main = 0;
-void I6Target::declare_function(code_generator *cgt, code_generation *gen, inter_symbol *fn, inter_tree_node *D) {
+void I6Target::declare_function(code_generator *cgt, code_generation *gen, inter_symbol *fn, inter_tree_node *D) {
     text_stream *fn_name = Inter::Symbols::name(fn);
     this_is_I6_Main = 0;
     text_stream *OUT = CodeGen::current(gen);
@@ -1096,11 +1092,11 @@ trick called "stubbing", these being "stub definitions".)
     }
     WRITE("];\n");
 }
-void I6Target::place_label(code_generator *cgt, code_generation *gen, text_stream *label_name) {
+void I6Target::place_label(code_generator *cgt, code_generation *gen, text_stream *label_name) {
     text_stream *OUT = CodeGen::current(gen);
     WRITE("%S;\n", label_name);
 }
-void I6Target::evaluate_label(code_generator *cgt, code_generation *gen, text_stream *label_name) {
+void I6Target::evaluate_label(code_generator *cgt, code_generation *gen, text_stream *label_name) {
     text_stream *OUT = CodeGen::current(gen);
     LOOP_THROUGH_TEXT(pos, label_name)
         if (Str::get(pos) != '.')
@@ -1117,7 +1113,7 @@ or implement assembly-language operations like 
 
 
-void I6Target::invoke_function(code_generator *cgt, code_generation *gen, inter_symbol *fn, inter_tree_node *P, int void_context) {
+void I6Target::invoke_function(code_generator *cgt, code_generation *gen, inter_symbol *fn, inter_tree_node *P, int void_context) {
     text_stream *fn_name = Inter::Symbols::name(fn);
     text_stream *OUT = CodeGen::current(gen);
     WRITE("%S(", fn_name);
@@ -1130,7 +1126,7 @@ or implement assembly-language operations like     if (void_context) WRITE(";\n");
 }
 
-void I6Target::invoke_opcode(code_generator *cgt, code_generation *gen,
+void I6Target::invoke_opcode(code_generator *cgt, code_generation *gen,
     text_stream *opcode, int operand_count, inter_tree_node **operands,
     inter_tree_node *label, int label_sense, int void_context) {
     text_stream *OUT = CodeGen::current(gen);
@@ -1147,7 +1143,7 @@ or implement assembly-language operations like     if (void_context) WRITE(";\n");
 }
 
-int I6Target::begin_array(code_generator *cgt, code_generation *gen, text_stream *array_name, inter_symbol *array_s, inter_tree_node *P, int format) {
+int I6Target::begin_array(code_generator *cgt, code_generation *gen, text_stream *array_name, inter_symbol *array_s, inter_tree_node *P, int format) {
     text_stream *OUT = CodeGen::current(gen);
 
     if ((array_s) && (Inter::Symbols::read_annotation(array_s, VERBARRAY_IANN) == 1)) {
@@ -1202,12 +1198,12 @@ or implement assembly-language operations like     return TRUE;
 }
 
-void I6Target::array_entry(code_generator *cgt, code_generation *gen, text_stream *entry, int format) {
+void I6Target::array_entry(code_generator *cgt, code_generation *gen, text_stream *entry, int format) {
     text_stream *OUT = CodeGen::current(gen);
     WRITE(" (%S)", entry);
 }
 
-void I6Target::compile_literal_symbol(code_generator *cgt, code_generation *gen, inter_symbol *aliased) {
+void I6Target::compile_literal_symbol(code_generator *cgt, code_generation *gen, inter_symbol *aliased) {
     text_stream *OUT = CodeGen::current(gen);
     text_stream *S = Inter::Symbols::name(aliased);
     Generators::mangle(gen, OUT, S);
@@ -1218,26 +1214,26 @@ then be initialised to 0.
 

-void I6Target::array_entries(code_generator *cgt, code_generation *gen,
+void I6Target::array_entries(code_generator *cgt, code_generation *gen,
     int how_many, int plus_ips, int format) {
     text_stream *OUT = CodeGen::current(gen);
     if (plus_ips) WRITE(" (%d + INDIV_PROP_START)", how_many, plus_ips);
     else WRITE(" (%d)", how_many);
 }
 
-void I6Target::end_array(code_generator *cgt, code_generation *gen, int format) {
+void I6Target::end_array(code_generator *cgt, code_generation *gen, int format) {
     text_stream *OUT = CodeGen::current(gen);
     WRITE(";\n");
 }
 
-void I6Target::new_action(code_generator *cgt, code_generation *gen, text_stream *name, int true_action) {
+void I6Target::new_action(code_generator *cgt, code_generation *gen, text_stream *name, int true_action) {
     if (true_action == FALSE) {
         text_stream *OUT = CodeGen::current(gen);
         WRITE("Fake_Action %S;\n", name);
     }
 }
 
-void I6Target::pseudo_object(code_generator *cgt, code_generation *gen, text_stream *obj_name) {
+void I6Target::pseudo_object(code_generator *cgt, code_generation *gen, text_stream *obj_name) {
     generated_segment *saved = CodeGen::select(gen, main_matter_I7CGS);
     text_stream *OUT = CodeGen::current(gen);
     WRITE("Object %S \"(%S object)\" has concealed;\n", obj_name, obj_name);
diff --git a/docs/final-module/5-fnc.html b/docs/final-module/5-fnc.html
index 104b0545f..2be4d3503 100644
--- a/docs/final-module/5-fnc.html
+++ b/docs/final-module/5-fnc.html
@@ -97,7 +97,6 @@ function togglePopup(material_id) {
     CInputOutputModel::initialise(c_target);
 
     METHOD_ADD(c_target, GENERAL_SEGMENT_MTID, CTarget::general_segment);
-    METHOD_ADD(c_target, DEFAULT_SEGMENT_MTID, CTarget::default_segment);
 }
 

§2. Static supporting code. The C code generated here would not compile as a stand-alone file. It needs @@ -633,13 +632,10 @@ first of those: return choice; } } - return CTarget::default_segment(cgt); -} - -int CTarget::default_segment(code_generator *cgt) { return c_main_matter_I7CGS; } -int CTarget::basic_constant_segment(code_generator *cgt, code_generation *gen, inter_symbol *con_name, int depth) { + +int CTarget::basic_constant_segment(code_generator *cgt, code_generation *gen, inter_symbol *con_name, int depth) { if (con_name) { if (Str::eq(Inter::Symbols::name(con_name), I"Release")) return c_ids_and_maxima_I7CGS; if (Str::eq(Inter::Symbols::name(con_name), I"Serial")) return c_ids_and_maxima_I7CGS; diff --git a/inform7/Figures/memory-diagnostics.txt b/inform7/Figures/memory-diagnostics.txt index e6184241d..5c409dcec 100644 --- a/inform7/Figures/memory-diagnostics.txt +++ b/inform7/Figures/memory-diagnostics.txt @@ -1,6 +1,6 @@ Total memory consumption was 394542K = 385 MB -60.8% was used for 1997169 objects, in 371209 frames in 300 x 800K = 240000K = 234 MB: +60.8% was used for 1997167 objects, in 371207 frames in 300 x 800K = 240000K = 234 MB: 10.3% inter_tree_node_array 58 x 8192 = 475136 objects, 41813824 bytes 7.1% text_stream_array 5144 x 100 = 514400 objects, 28971008 bytes @@ -96,7 +96,7 @@ Total memory consumption was 394542K = 385 MB ---- nonlocal_variable 93 objects, 20088 bytes ---- property 146 objects, 19856 bytes ---- timed_rules_rfd_data 400 objects, 19200 bytes - ---- method 382 objects, 18336 bytes + ---- method 380 objects, 18240 bytes ---- pcalc_prop_deferral 86 objects, 17888 bytes ---- instance 167 objects, 17368 bytes ---- parse_node_tree 20 objects, 17280 bytes @@ -256,5 +256,5 @@ Total memory consumption was 394542K = 385 MB ---- code generation workspace for objects 9760 bytes in 9 claims ---- emitter array storage 161792 bytes in 2062 claims -18.7% was overhead - 75839944 bytes = 74062K = 72 MB +18.7% was overhead - 75840040 bytes = 74062K = 72 MB diff --git a/inform7/Figures/timings-diagnostics.txt b/inform7/Figures/timings-diagnostics.txt index 0481b138c..d239aeb3c 100644 --- a/inform7/Figures/timings-diagnostics.txt +++ b/inform7/Figures/timings-diagnostics.txt @@ -1,11 +1,11 @@ 100.0% in inform7 run - 54.9% in compilation to Inter - 39.5% in //Sequence::undertake_queued_tasks// - 3.5% in //MajorNodes::pre_pass// + 55.1% in compilation to Inter + 39.8% in //Sequence::undertake_queued_tasks// + 3.3% in //MajorNodes::pre_pass// 2.5% in //MajorNodes::pass_1// - 2.1% in //RTPhrasebook::compile_entries// - 1.4% in //ImperativeDefinitions::assess_all// - 1.1% in //RTKindConstructors::compile// + 2.0% in //RTPhrasebook::compile_entries// + 1.3% in //ImperativeDefinitions::assess_all// + 1.2% in //RTKindConstructors::compile// 0.4% in //ImperativeDefinitions::compile_first_block// 0.4% in //MajorNodes::pass_2// 0.4% in //Sequence::undertake_queued_tasks// @@ -16,22 +16,22 @@ 0.1% in //RTKindConstructors::compile_permissions// 0.1% in //Task::make_built_in_kind_constructors// 0.1% in //World::stages_II_and_III// - 1.7% not specifically accounted for - 43.2% in running Inter pipeline - 12.4% in step preparation - 9.4% in inter step 7/16: consolidate-text - 7.9% in inter step 2/16: link - 7.2% in inter step 16/16: generate inform6 -> auto.inf - 1.5% in inter step 11/16: make-identifiers-unique + 2.0% not specifically accounted for + 42.9% in running Inter pipeline + 12.2% in step preparation + 9.5% in inter step 7/16: consolidate-text + 7.8% in inter step 2/16: link + 7.0% in inter step 16/16: generate inform6 -> auto.inf + 1.4% in inter step 11/16: make-identifiers-unique 0.4% in inter step 12/16: reconcile-verbs + 0.2% in inter step 10/16: detect-indirect-calls 0.2% in inter step 14/16: eliminate-redundant-operations 0.2% in inter step 6/16: assimilate 0.2% in inter step 8/16: resolve-external-symbols 0.2% in inter step 9/16: inspect-plugs - 0.1% in inter step 10/16: detect-indirect-calls 0.1% in inter step 13/16: eliminate-redundant-labels 0.1% in inter step 4/16: parse-linked-matter 0.1% in inter step 5/16: resolve-conditional-compilation 2.6% not specifically accounted for 1.6% in supervisor - 0.2% not specifically accounted for + 0.3% not specifically accounted for diff --git a/inter/final-module/Chapter 2/Code Generators.w b/inter/final-module/Chapter 2/Code Generators.w index d35b15d36..5c0df45b0 100644 --- a/inter/final-module/Chapter 2/Code Generators.w +++ b/inter/final-module/Chapter 2/Code Generators.w @@ -155,7 +155,6 @@ void Generators::invoke_opcode(code_generation *gen, text_stream *opcode, int op = INT_METHOD_TYPE(GENERAL_SEGMENT_MTID, code_generator *generator, code_generation *gen, inter_tree_node *P) -INT_METHOD_TYPE(DEFAULT_SEGMENT_MTID, code_generator *generator, code_generation *gen) int Generators::general_segment(code_generation *gen, inter_tree_node *P) { int rv = 0; @@ -163,12 +162,6 @@ int Generators::general_segment(code_generation *gen, inter_tree_node *P) { return rv; } -int Generators::default_segment(code_generation *gen) { - int rv = 0; - INT_METHOD_CALL(rv, gen->generator, DEFAULT_SEGMENT_MTID, gen); - return rv; -} - @ @e MANGLE_IDENTIFIER_MTID diff --git a/inter/final-module/Chapter 2/Vanilla Objects.w b/inter/final-module/Chapter 2/Vanilla Objects.w index 7a911728e..59d9e8f49 100644 --- a/inter/final-module/Chapter 2/Vanilla Objects.w +++ b/inter/final-module/Chapter 2/Vanilla Objects.w @@ -60,9 +60,7 @@ void VanillaObjects::propertyvalue(code_generation *gen, inter_tree_node *P) { void VanillaObjects::consolidate(code_generation *gen) { if (properties_written == FALSE) { InterTree::traverse(gen->from, VanillaObjects::pseudo_object_visitor, gen, NULL, CONSTANT_IST); -// generated_segment *saved = CodeGen::select(gen, Generators::default_segment(gen)); VanillaObjects::knowledge(gen); -// CodeGen::deselect(gen, saved); properties_written = TRUE; } } diff --git a/inter/final-module/Chapter 4/Final Inform 6.w b/inter/final-module/Chapter 4/Final Inform 6.w index a32429597..9cc222e96 100644 --- a/inter/final-module/Chapter 4/Final Inform 6.w +++ b/inter/final-module/Chapter 4/Final Inform 6.w @@ -70,7 +70,6 @@ void I6Target::create_generator(void) { code_generator *cgt = Generators::new(I"inform6"); METHOD_ADD(cgt, BEGIN_GENERATION_MTID, I6Target::begin_generation); METHOD_ADD(cgt, GENERAL_SEGMENT_MTID, I6Target::general_segment); - METHOD_ADD(cgt, DEFAULT_SEGMENT_MTID, I6Target::default_segment); METHOD_ADD(cgt, INVOKE_PRIMITIVE_MTID, I6Target::invoke_primitive); METHOD_ADD(cgt, MANGLE_IDENTIFIER_MTID, I6Target::mangle); METHOD_ADD(cgt, COMPILE_DICTIONARY_WORD_MTID, I6Target::compile_dictionary_word); @@ -252,9 +251,6 @@ int I6Target::general_segment(code_generator *cgt, code_generation *gen, inter_t return main_matter_I7CGS; } -int I6Target::default_segment(code_generator *cgt) { - return main_matter_I7CGS; -} int I6Target::basic_constant_segment(code_generator *cgt, code_generation *gen, inter_symbol *con_name, int depth) { if (depth >= 10) depth = 10; return constants_1_I7CGS + depth - 1; diff --git a/inter/final-module/Chapter 5/Final C.w b/inter/final-module/Chapter 5/Final C.w index b60151f4b..9d43daca6 100644 --- a/inter/final-module/Chapter 5/Final C.w +++ b/inter/final-module/Chapter 5/Final C.w @@ -23,7 +23,6 @@ void CTarget::create_generator(void) { CInputOutputModel::initialise(c_target); METHOD_ADD(c_target, GENERAL_SEGMENT_MTID, CTarget::general_segment); - METHOD_ADD(c_target, DEFAULT_SEGMENT_MTID, CTarget::default_segment); } @h Static supporting code. @@ -556,12 +555,9 @@ int CTarget::general_segment(code_generator *cgt, code_generation *gen, inter_tr return choice; } } - return CTarget::default_segment(cgt); -} - -int CTarget::default_segment(code_generator *cgt) { return c_main_matter_I7CGS; } + int CTarget::basic_constant_segment(code_generator *cgt, code_generation *gen, inter_symbol *con_name, int depth) { if (con_name) { if (Str::eq(Inter::Symbols::name(con_name), I"Release")) return c_ids_and_maxima_I7CGS;