From d87f28fbbb0dcb95e12cc3df5a0411a6ff6888ec Mon Sep 17 00:00:00 2001 From: Graham Nelson Date: Wed, 13 Apr 2022 13:10:45 +0100 Subject: [PATCH] Fix for Mantis bug 1851 --- inform7/Figures/memory-diagnostics.txt | 2 +- inform7/Figures/timings-diagnostics.txt | 20 ++-- inform7/Tests/Test Makes/Eg4-C/textual.txt | 112 +++++++++++------- .../assertions-module/Chapter 4/Assemblies.w | 4 +- .../assertions-module/Chapter 4/Assertions.w | 15 ++- .../Inform-Only Nodes and Annotations.w | 1 + 6 files changed, 95 insertions(+), 59 deletions(-) diff --git a/inform7/Figures/memory-diagnostics.txt b/inform7/Figures/memory-diagnostics.txt index 6264084d8e..ff99f15345 100644 --- a/inform7/Figures/memory-diagnostics.txt +++ b/inform7/Figures/memory-diagnostics.txt @@ -237,7 +237,7 @@ Total memory consumption was 126311K = 123 MB 100.0% was used for memory not allocated for objects: - 59.2% text stream storage 76619304 bytes in 452741 claims + 59.2% text stream storage 76619312 bytes in 452741 claims 3.5% dictionary storage 4550144 bytes in 6627 claims ---- sorting 744 bytes in 3 claims 5.5% source text 7200000 bytes in 3 claims diff --git a/inform7/Figures/timings-diagnostics.txt b/inform7/Figures/timings-diagnostics.txt index 12d58e73db..4e33c1c62d 100644 --- a/inform7/Figures/timings-diagnostics.txt +++ b/inform7/Figures/timings-diagnostics.txt @@ -1,6 +1,6 @@ 100.0% in inform7 run - 68.1% in compilation to Inter - 47.8% in //Sequence::undertake_queued_tasks// + 68.4% in compilation to Inter + 48.1% in //Sequence::undertake_queued_tasks// 4.5% in //MajorNodes::pre_pass// 3.2% in //MajorNodes::pass_1// 2.4% in //RTPhrasebook::compile_entries// @@ -18,20 +18,20 @@ 0.1% in //Task::make_built_in_kind_constructors// 0.1% in //Understand::traverse// 0.1% in //World::stages_II_and_III// - 2.0% not specifically accounted for - 29.2% in running Inter pipeline - 10.1% in step 14/15: generate inform6 -> auto.inf - 7.6% in step 5/15: load-binary-kits - 6.7% in step 6/15: make-synoptic-module + 2.1% not specifically accounted for + 29.0% in running Inter pipeline + 10.2% in step 14/15: generate inform6 -> auto.inf + 7.5% in step 5/15: load-binary-kits + 6.6% in step 6/15: make-synoptic-module 1.6% in step 9/15: make-identifiers-unique - 0.5% in step 4/15: compile-splats 0.4% in step 12/15: eliminate-redundant-operations + 0.4% in step 4/15: compile-splats 0.4% in step 7/15: shorten-wiring 0.3% in step 8/15: detect-indirect-calls 0.2% in step 11/15: eliminate-redundant-labels 0.1% in step 10/15: reconcile-verbs 0.1% in step 2/15: parse-insertions 0.1% in step 3/15: resolve-conditional-compilation - 0.6% not specifically accounted for + 0.5% not specifically accounted for 2.2% in supervisor - 0.4% not specifically accounted for + 0.3% not specifically accounted for diff --git a/inform7/Tests/Test Makes/Eg4-C/textual.txt b/inform7/Tests/Test Makes/Eg4-C/textual.txt index 099b98dea4..b8473bc74f 100644 --- a/inform7/Tests/Test Makes/Eg4-C/textual.txt +++ b/inform7/Tests/Test Makes/Eg4-C/textual.txt @@ -49450,6 +49450,30 @@ package main _plain inv !lookup val right_txt val 1 + inv !if + inv !and + inv !ofclass + inv !lookup + val left_txt + val 1 + val /main/architectural/Routine + inv !ofclass + inv !lookup + val right_txt + val 1 + val /main/architectural/Routine + code + inv !if + inv !eq + inv !lookup + val left_txt + val 1 + inv !lookup + val right_txt + val 1 + code + inv !return + val 0 inv !store reference val cpl @@ -50090,7 +50114,6 @@ package main _plain local ch local i local dsize - local csize local blobcount local gp local cl @@ -50101,23 +50124,18 @@ package main _plain val dsize inv /main/BasicInformKit/functions/BlkValueLBCapacity_fn/BlkValueLBCapacity val txt - inv !ifelse - val ctxt - code - inv !store - reference - val csize - inv /main/BasicInformKit/functions/BlkValueLBCapacity_fn/BlkValueLBCapacity - val ctxt + inv !if + inv !and + val rtxt + inv !eq + val ctxt + val 0 code - inv !if - val rtxt - code - inv !print - val "*** rtxt without ctxt ***" - inv !printnl - inv !return - val 1 + inv !print + val "*** rtxt without ctxt ***" + inv !printnl + inv !return + val 1 inv !store reference val brm @@ -50523,6 +50541,24 @@ package main _plain inv !ifelse val rtxt code + inv !if + inv !ge + inv !plus + val cl + val 1 + inv /main/BasicInformKit/functions/BlkValueLBCapacity_fn/BlkValueLBCapacity + val ctxt + code + inv !if + inv !eq + inv /main/BasicInformKit/functions/BlkValueSetLBCapacity_fn/BlkValueSetLBCapacity + val ctxt + inv !times + val 2 + val cl + val 0 + code + inv !break inv /main/BasicInformKit/functions/BlkValueWrite_fn/BlkValueWrite val ctxt val cl @@ -50531,11 +50567,6 @@ package main _plain val ctxt val rtxt val /main/BasicInformKit/constants/CHR_BLOB_con/CHR_BLOB - inv !store - reference - val csize - inv /main/BasicInformKit/functions/BlkValueLBCapacity_fn/BlkValueLBCapacity - val ctxt inv !store reference val cl @@ -50565,7 +50596,8 @@ package main _plain inv !plus val cl val 1 - val csize + inv /main/BasicInformKit/functions/BlkValueLBCapacity_fn/BlkValueLBCapacity + val ctxt code inv !if inv !eq @@ -50577,11 +50609,6 @@ package main _plain val 0 code inv !break - inv !store - reference - val csize - inv /main/BasicInformKit/functions/BlkValueLBCapacity_fn/BlkValueLBCapacity - val ctxt inv /main/BasicInformKit/functions/BlkValueWrite_fn/BlkValueWrite val ctxt inv !postincrement @@ -50597,7 +50624,8 @@ package main _plain inv !plus val cl val 1 - val csize + inv /main/BasicInformKit/functions/BlkValueLBCapacity_fn/BlkValueLBCapacity + val ctxt code inv !if inv !eq @@ -50609,11 +50637,6 @@ package main _plain val 0 code inv !break - inv !store - reference - val csize - inv /main/BasicInformKit/functions/BlkValueLBCapacity_fn/BlkValueLBCapacity - val ctxt inv /main/BasicInformKit/functions/BlkValueWrite_fn/BlkValueWrite val ctxt inv !postincrement @@ -50635,7 +50658,8 @@ package main _plain inv !plus val cl val 1 - val csize + inv /main/BasicInformKit/functions/BlkValueLBCapacity_fn/BlkValueLBCapacity + val ctxt code inv !if inv !eq @@ -50647,11 +50671,6 @@ package main _plain val 0 code inv !break - inv !store - reference - val csize - inv /main/BasicInformKit/functions/BlkValueLBCapacity_fn/BlkValueLBCapacity - val ctxt inv /main/BasicInformKit/functions/BlkValueWrite_fn/BlkValueWrite val ctxt inv !postincrement @@ -50661,6 +50680,19 @@ package main _plain inv !if val ctxt code + inv !if + inv !ge + inv !plus + val cl + val 1 + inv /main/BasicInformKit/functions/BlkValueLBCapacity_fn/BlkValueLBCapacity + val ctxt + code + inv /main/BasicInformKit/functions/BlkValueSetLBCapacity_fn/BlkValueSetLBCapacity + val ctxt + inv !times + val 2 + val cl inv /main/BasicInformKit/functions/BlkValueWrite_fn/BlkValueWrite val ctxt inv !postincrement diff --git a/inform7/assertions-module/Chapter 4/Assemblies.w b/inform7/assertions-module/Chapter 4/Assemblies.w index d8fae89e1d..865433c262 100644 --- a/inform7/assertions-module/Chapter 4/Assemblies.w +++ b/inform7/assertions-module/Chapter 4/Assemblies.w @@ -133,7 +133,7 @@ void Assertions::Assemblies::make_generalisation(parse_node *look_for, parse_nod Annotations::write_int(current_sentence, you_can_ignore_ANNOT, TRUE); - LOGIF(ASSEMBLIES, "New generalisation made concerning $j:\nLook for: $T\nMake: $T\n", + LOGIF(ASSEMBLIES, "Assembly on $j:\n- - - -\nLook for: $T\nMake: $T- - - -\n\n", k, g->look_for, g->what_to_make); Assertions::Assemblies::ensure_all_generalisations_made(k); @@ -331,7 +331,7 @@ void Assertions::Assemblies::satisfies_generalisation(inference_subject *infs, g global_pass_state.assembly_position = new_sentence; LOGIF(ASSEMBLIES, - "Subject $j satisfies generalisation %d (from $j), making sentence:\n$T", + "Subject $j satisfies generalisation %d (from $j), making sentence:\n$T\n", infs, g->allocation_id, infs_k, new_sentence); } diff --git a/inform7/assertions-module/Chapter 4/Assertions.w b/inform7/assertions-module/Chapter 4/Assertions.w index 23cec7a873..3108ddbf9c 100644 --- a/inform7/assertions-module/Chapter 4/Assertions.w +++ b/inform7/assertions-module/Chapter 4/Assertions.w @@ -253,12 +253,15 @@ void Assertions::make_assertion_recursive_inner(parse_node *px, parse_node *py) ((Node::get_type(py) == COMMON_NOUN_NT) && (Node::get_evaluation(py)) && (Annotations::read_int(py, multiplicity_ANNOT) > 1) && (Node::get_type(px) != RELATIONSHIP_NT))) { - StandardProblems::sentence_problem(Task::syntax_tree(), _p_(PM_MultiplyVague), - "multiple objects can only be put into relationships", - "by saying something like 'In the Drawing Room are two women.', " - "and all other assertions with multiple objects are disallowed: " - "so 'Three doors are open.' is rejected - I can't tell which three."); - return; + if (Node::get_implicit_in_creation_of(current_sentence) == NULL) { + LOG("px = $T\npy=$T\n", px, py); + StandardProblems::sentence_problem(Task::syntax_tree(), _p_(PM_MultiplyVague), + "multiple objects can only be put into relationships", + "by saying something like 'In the Drawing Room are two women.', " + "and all other assertions with multiple objects are disallowed: " + "so 'Three doors are open.' is rejected - I can't tell which three."); + return; + } } @ The case names here are systematic and were constructed from the above diff --git a/inform7/core-module/Chapter 1/Inform-Only Nodes and Annotations.w b/inform7/core-module/Chapter 1/Inform-Only Nodes and Annotations.w index ab1f14dc53..00689ba6ac 100644 --- a/inform7/core-module/Chapter 1/Inform-Only Nodes and Annotations.w +++ b/inform7/core-module/Chapter 1/Inform-Only Nodes and Annotations.w @@ -535,6 +535,7 @@ void CoreSyntax::grant_L3_permissions(void) { Annotations::allow_for_category(L3_NCAT, subject_ANNOT); Annotations::allow_for_category(L3_NCAT, explicit_gender_marker_ANNOT); Annotations::allow(ADJECTIVE_NT, predicate_ANNOT); + Annotations::allow(ADJECTIVE_NT, multiplicity_ANNOT); Annotations::allow(VERB_NT, category_of_I6_translation_ANNOT); Annotations::allow(VERB_NT, rule_placement_sense_ANNOT); Annotations::allow(COMMON_NOUN_NT, creation_site_ANNOT);