mirror of
https://github.com/ganelson/inform.git
synced 2024-06-26 04:00:43 +03:00
Fixed division by zero when indexing certain kinds
This commit is contained in:
parent
c9c25de0ee
commit
1617684835
|
@ -1197,9 +1197,13 @@ note that the following uses the raw text of the word.
|
|||
<span class="plain-syntax"> </span><span class="identifier-syntax">Kinds::Scalings::value_to_quanta</span><span class="plain-syntax">(</span><span class="identifier-syntax">v</span><span class="plain-syntax">, </span><span class="identifier-syntax">lp</span><span class="plain-syntax">-></span><span class="element-syntax">scaling</span><span class="plain-syntax">, &</span><span class="identifier-syntax">v</span><span class="plain-syntax">, &</span><span class="identifier-syntax">remainder</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">literal_pattern_element</span><span class="plain-syntax"> *</span><span class="identifier-syntax">lpe</span><span class="plain-syntax"> = &(</span><span class="identifier-syntax">lp</span><span class="plain-syntax">-></span><span class="element-syntax">lp_elements</span><span class="plain-syntax">[</span><span class="identifier-syntax">ec</span><span class="plain-syntax">]);</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">m</span><span class="plain-syntax"> = </span><span class="identifier-syntax">lpe</span><span class="plain-syntax">-></span><span class="element-syntax">element_range</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><a href="3-lp.html#SP26" class="function-link"><span class="function-syntax">LiteralPatterns::write_val</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">, </span><span class="identifier-syntax">m</span><span class="plain-syntax">,</span>
|
||||
<span class="plain-syntax"> (</span><span class="identifier-syntax">v</span><span class="plain-syntax">/(</span><span class="identifier-syntax">lpe</span><span class="plain-syntax">-></span><span class="element-syntax">element_multiplier</span><span class="plain-syntax">)) % </span><span class="identifier-syntax">m</span><span class="plain-syntax"> + </span><span class="identifier-syntax">lpe</span><span class="plain-syntax">-></span><span class="element-syntax">element_offset</span><span class="plain-syntax">,</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">lpe</span><span class="plain-syntax">-></span><span class="element-syntax">number_base</span><span class="plain-syntax">, </span><span class="identifier-syntax">lpe</span><span class="plain-syntax">-></span><span class="element-syntax">print_with_leading_zeros</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">m</span><span class="plain-syntax"> == </span><span class="constant-syntax">0</span><span class="plain-syntax">)</span>
|
||||
<span class="plain-syntax"> </span><a href="3-lp.html#SP26" class="function-link"><span class="function-syntax">LiteralPatterns::write_val</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">, </span><span class="constant-syntax">0</span><span class="plain-syntax">,</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">lpe</span><span class="plain-syntax">-></span><span class="element-syntax">element_offset</span><span class="plain-syntax">, </span><span class="identifier-syntax">lpe</span><span class="plain-syntax">-></span><span class="element-syntax">number_base</span><span class="plain-syntax">, </span><span class="identifier-syntax">lpe</span><span class="plain-syntax">-></span><span class="element-syntax">print_with_leading_zeros</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">else</span>
|
||||
<span class="plain-syntax"> </span><a href="3-lp.html#SP26" class="function-link"><span class="function-syntax">LiteralPatterns::write_val</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">, </span><span class="identifier-syntax">m</span><span class="plain-syntax">,</span>
|
||||
<span class="plain-syntax"> (</span><span class="identifier-syntax">v</span><span class="plain-syntax">/(</span><span class="identifier-syntax">lpe</span><span class="plain-syntax">-></span><span class="element-syntax">element_multiplier</span><span class="plain-syntax">)) % </span><span class="identifier-syntax">m</span><span class="plain-syntax"> + </span><span class="identifier-syntax">lpe</span><span class="plain-syntax">-></span><span class="element-syntax">element_offset</span><span class="plain-syntax">,</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">lpe</span><span class="plain-syntax">-></span><span class="element-syntax">number_base</span><span class="plain-syntax">, </span><span class="identifier-syntax">lpe</span><span class="plain-syntax">-></span><span class="element-syntax">print_with_leading_zeros</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">ec</span><span class="plain-syntax"> == </span><span class="constant-syntax">0</span><span class="plain-syntax">) </span><span class="named-paragraph-container code-font"><a href="3-lp.html#SP25_3_1" class="named-paragraph-link"><span class="named-paragraph">Index the fractional part of the value</span><span class="named-paragraph-number">25.3.1</span></a></span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> }</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">ec</span><span class="plain-syntax">++;</span>
|
||||
|
|
|
@ -1,28 +1,28 @@
|
|||
100.0% in inform7 run
|
||||
66.5% in compilation to Inter
|
||||
44.7% in //Sequence::undertake_queued_tasks//
|
||||
5.0% in //MajorNodes::pre_pass//
|
||||
3.6% in //MajorNodes::pass_1//
|
||||
66.7% in compilation to Inter
|
||||
45.2% in //Sequence::undertake_queued_tasks//
|
||||
4.5% in //MajorNodes::pre_pass//
|
||||
3.3% in //MajorNodes::pass_1//
|
||||
1.8% in //ImperativeDefinitions::assess_all//
|
||||
1.4% in //RTKindConstructors::compile//
|
||||
1.4% in //RTPhrasebook::compile_entries//
|
||||
1.0% in //Sequence::lint_inter//
|
||||
1.5% in //RTKindConstructors::compile//
|
||||
1.5% in //RTPhrasebook::compile_entries//
|
||||
1.1% in //Sequence::lint_inter//
|
||||
0.3% in //CompletionModule::compile//
|
||||
0.3% in //ImperativeDefinitions::compile_first_block//
|
||||
0.3% in //MajorNodes::pass_2//
|
||||
0.3% in //Sequence::undertake_queued_tasks//
|
||||
0.3% in //Sequence::undertake_queued_tasks//
|
||||
0.3% in //World::stage_V//
|
||||
5.1% not specifically accounted for
|
||||
26.9% in running Inter pipeline
|
||||
9.0% in step 14/15: generate inform6 -> auto.inf
|
||||
6.9% in step 5/15: load-binary-kits
|
||||
5.4% in step 6/15: make-synoptic-module
|
||||
5.2% not specifically accounted for
|
||||
27.1% in running Inter pipeline
|
||||
8.6% in step 14/15: generate inform6 -> auto.inf
|
||||
7.1% in step 5/15: load-binary-kits
|
||||
5.6% in step 6/15: make-synoptic-module
|
||||
1.8% 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
|
||||
2.2% not specifically accounted for
|
||||
5.8% in supervisor
|
||||
5.2% in supervisor
|
||||
0.8% not specifically accounted for
|
||||
|
|
|
@ -987,9 +987,13 @@ note that the following uses the raw text of the word.
|
|||
Kinds::Scalings::value_to_quanta(v, lp->scaling, &v, &remainder);
|
||||
literal_pattern_element *lpe = &(lp->lp_elements[ec]);
|
||||
int m = lpe->element_range;
|
||||
LiteralPatterns::write_val(OUT, m,
|
||||
(v/(lpe->element_multiplier)) % m + lpe->element_offset,
|
||||
lpe->number_base, lpe->print_with_leading_zeros);
|
||||
if (m == 0)
|
||||
LiteralPatterns::write_val(OUT, 0,
|
||||
lpe->element_offset, lpe->number_base, lpe->print_with_leading_zeros);
|
||||
else
|
||||
LiteralPatterns::write_val(OUT, m,
|
||||
(v/(lpe->element_multiplier)) % m + lpe->element_offset,
|
||||
lpe->number_base, lpe->print_with_leading_zeros);
|
||||
if (ec == 0) @<Index the fractional part of the value@>;
|
||||
}
|
||||
ec++;
|
||||
|
|
Loading…
Reference in a new issue