1
0
Fork 0
mirror of https://github.com/ganelson/inform.git synced 2024-07-02 23:14:57 +03:00

Fix for Jira bug I7-2142

This commit is contained in:
Graham Nelson 2023-06-12 21:12:13 +01:00
parent 6a4eaf6439
commit 11e1f756c1
7 changed files with 81 additions and 22 deletions

View file

@ -209,6 +209,7 @@ subject and object NPs.
<span class="plain-syntax"> </span><span class="reserved-syntax">rule</span><span class="plain-syntax"> *</span><span class="identifier-syntax">old_rule</span><span class="plain-syntax"> = </span><span class="function-syntax">&lt;&lt;rp&gt;&gt;</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">wording</span><span class="plain-syntax"> </span><span class="identifier-syntax">CW</span><span class="plain-syntax"> = </span><span class="identifier-syntax">EMPTY_WORDING</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">p3</span><span class="plain-syntax">) </span><span class="identifier-syntax">CW</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Node::get_text</span><span class="plain-syntax">(</span><span class="identifier-syntax">p3</span><span class="plain-syntax">);</span>
<span class="identifier-syntax">LOG</span><span class="plain-syntax">(</span><span class="string-syntax">"Impose constraint %W, %W, %W, %d\n"</span><span class="plain-syntax">, </span><span class="identifier-syntax">new_rule</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">name</span><span class="plain-syntax">, </span><span class="identifier-syntax">old_rule</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">name</span><span class="plain-syntax">, </span><span class="identifier-syntax">CW</span><span class="plain-syntax">, </span><span class="identifier-syntax">sense</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="6-rls.html#SP15" class="function-link"><span class="function-syntax">Rules::impose_constraint</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">new_rule</span><span class="plain-syntax">, </span><span class="identifier-syntax">old_rule</span><span class="plain-syntax">, </span><span class="identifier-syntax">CW</span><span class="plain-syntax">, (</span><span class="identifier-syntax">sense</span><span class="plain-syntax">)?</span><span class="identifier-syntax">FALSE:TRUE</span><span class="plain-syntax">);</span>
<span class="plain-syntax">}</span>
</pre>

View file

@ -487,11 +487,7 @@ failing; so it doesn't terminate the following of its rulebook.
<span class="plain-syntax"> </span><a href="2-ec.html#SP3" class="function-link"><span class="function-syntax">EmitCode::down</span></a><span class="plain-syntax">();</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">acl</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">substituted_rule</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">inter_name</span><span class="plain-syntax"> *</span><span class="identifier-syntax">subbed</span><span class="plain-syntax"> = </span><a href="5-rls.html#SP9" class="function-link"><span class="function-syntax">RTRules::iname</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">acl</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">substituted_rule</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">PackageInstruction::is_function</span><span class="plain-syntax">(</span><span class="identifier-syntax">InterNames::to_symbol</span><span class="plain-syntax">(</span><span class="identifier-syntax">subbed</span><span class="plain-syntax">)) == </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><a href="2-ec.html#SP8" class="function-link"><span class="function-syntax">EmitCode::val_number</span></a><span class="plain-syntax">(0);</span>
<span class="plain-syntax"> } </span><span class="reserved-syntax">else</span><span class="plain-syntax"> {</span>
<span class="plain-syntax"> </span><a href="2-ec.html#SP14" class="function-link"><span class="function-syntax">EmitCode::call</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">subbed</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><a href="2-ec.html#SP14" class="function-link"><span class="function-syntax">EmitCode::call</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">subbed</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> } </span><span class="reserved-syntax">else</span><span class="plain-syntax"> {</span>
<span class="plain-syntax"> </span><a href="2-ec.html#SP8" class="function-link"><span class="function-syntax">EmitCode::val_number</span></a><span class="plain-syntax">(0);</span>
<span class="plain-syntax"> }</span>

View file

@ -1,32 +1,32 @@
100.0% in inform7 run
70.3% in compilation to Inter
50.2% in //Sequence::undertake_queued_tasks//
4.6% in //MajorNodes::pre_pass//
69.1% in compilation to Inter
48.7% in //Sequence::undertake_queued_tasks//
4.9% in //MajorNodes::pre_pass//
3.3% in //MajorNodes::pass_1//
1.7% in //ImperativeDefinitions::assess_all//
1.5% in //RTPhrasebook::compile_entries//
1.3% in //RTKindConstructors::compile//
1.3% in //RTPhrasebook::compile_entries//
0.9% in //Sequence::lint_inter//
0.5% in //ImperativeDefinitions::compile_first_block//
0.5% in //Sequence::undertake_queued_tasks//
0.5% in //MajorNodes::pass_2//
0.5% in //World::stage_V//
0.3% in //InferenceSubjects::emit_all//
0.3% in //MajorNodes::pass_2//
0.3% in //Sequence::undertake_queued_tasks//
0.3% in //Sequence::undertake_queued_tasks//
0.1% in //CompletionModule::compile//
0.1% in //RTKindConstructors::compile_permissions//
0.1% in //Task::make_built_in_kind_constructors//
2.9% not specifically accounted for
26.1% in running Inter pipeline
10.7% in step 14/15: generate inform6 -> auto.inf
3.1% not specifically accounted for
27.5% in running Inter pipeline
11.1% in step 14/15: generate inform6 -> auto.inf
5.8% in step 5/15: load-binary-kits
5.0% in step 6/15: make-synoptic-module
5.6% in step 6/15: make-synoptic-module
1.7% in step 9/15: make-identifiers-unique
0.3% in step 12/15: eliminate-redundant-operations
0.3% in step 4/15: compile-splats
0.3% in step 7/15: shorten-wiring
0.3% in step 8/15: detect-indirect-calls
0.1% in step 11/15: eliminate-redundant-labels
1.0% not specifically accounted for
1.2% not specifically accounted for
2.9% in supervisor
0.6% not specifically accounted for
0.4% not specifically accounted for

View file

@ -0,0 +1,16 @@
Lab is a room.
The box is in the Lab.
Before doing anything when the player does not carry the box (this is the yow rule): say "yow."
This is the zow rule: say "zow.".
Every turn (this is the kow rule): say "kow."
This is the pow rule: say "pow."
The zow rule substitutes for the yow rule when the player carries the box.
The pow rule substitutes for the kow rule.
Test me with "z / get box / z / drop box / z".

View file

@ -0,0 +1,49 @@
Lab
Welcome
An Interactive Fiction
Release 1 / Serial number 160428 / Inform 7 v10.2.0 / D
yow.
Lab
You can see a box here.
> > Lab
(Testing.)
>[1] z
yow.
Time passes.
pow.
>[2] get box
yow.
Taken.
pow.
>[3] z
zow.
Time passes.
pow.
>[4] drop box
zow.
Dropped.
pow.
>[5] z
yow.
Time passes.
pow.
> >

View file

@ -126,6 +126,7 @@ void RulePlacement::request_substitute(parse_node *p1, parse_node *p2, parse_nod
rule *old_rule = <<rp>>;
wording CW = EMPTY_WORDING;
if (p3) CW = Node::get_text(p3);
LOG("Impose constraint %W, %W, %W, %d\n", new_rule->name, old_rule->name, CW, sense);
Rules::impose_constraint(new_rule, old_rule, CW, (sense)?FALSE:TRUE);
}

View file

@ -382,11 +382,7 @@ failing; so it doesn't terminate the following of its rulebook.
EmitCode::down();
if (acl->substituted_rule) {
inter_name *subbed = RTRules::iname(acl->substituted_rule);
if (PackageInstruction::is_function(InterNames::to_symbol(subbed)) == FALSE) {
EmitCode::val_number(0);
} else {
EmitCode::call(subbed);
}
EmitCode::call(subbed);
} else {
EmitCode::val_number(0);
}