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:
parent
6a4eaf6439
commit
11e1f756c1
|
@ -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"><<rp>></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">-></span><span class="element-syntax">name</span><span class="plain-syntax">, </span><span class="identifier-syntax">old_rule</span><span class="plain-syntax">-></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>
|
||||
|
|
|
@ -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">-></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">-></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>
|
||||
|
|
|
@ -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
|
||||
|
|
16
inform7/Tests/Test Cases/RuleSubstitutions.txt
Normal file
16
inform7/Tests/Test Cases/RuleSubstitutions.txt
Normal 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".
|
|
@ -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.
|
||||
|
||||
> >
|
|
@ -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);
|
||||
}
|
||||
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue