1
0
Fork 0
mirror of https://github.com/ganelson/inform.git synced 2024-06-29 05:24:57 +03:00

Fix for Jira bug I7-2107

This commit is contained in:
Graham Nelson 2022-05-15 16:46:47 +01:00
parent d08a9659b8
commit 4bd2c0ad86
6 changed files with 33 additions and 27 deletions

View file

@ -1,13 +1,13 @@
Total memory consumption was 123345K = 120 MB Total memory consumption was 123345K = 120 MB
---- was used for 2044505 objects, in 362824 frames in 0 x 800K = 0K = 0 MB: ---- was used for 2044504 objects, in 362823 frames in 0 x 800K = 0K = 0 MB:
33.1% inter_tree_node_array 58 x 8192 = 475136 objects, 41813824 bytes 33.1% inter_tree_node_array 58 x 8192 = 475136 objects, 41813824 bytes
20.5% text_stream_array 4603 x 100 = 460300 objects, 25924096 bytes 20.5% text_stream_array 4603 x 100 = 460300 objects, 25924096 bytes
19.2% linked_list 43446 objects, 24329760 bytes 19.2% linked_list 43446 objects, 24329760 bytes
11.1% inter_symbol_array 132 x 1024 = 135168 objects, 14061696 bytes 11.1% inter_symbol_array 132 x 1024 = 135168 objects, 14061696 bytes
10.4% inter_error_stash_array 101 x 1024 = 103424 objects, 13241504 bytes 10.4% inter_error_stash_array 101 x 1024 = 103424 objects, 13241504 bytes
8.2% parse_node 129721 objects, 10377680 bytes 8.2% parse_node 129720 objects, 10377600 bytes
5.8% verb_conjugation 160 objects, 7425280 bytes 5.8% verb_conjugation 160 objects, 7425280 bytes
4.3% parse_node_annotation_array 346 x 500 = 173000 objects, 5547072 bytes 4.3% parse_node_annotation_array 346 x 500 = 173000 objects, 5547072 bytes
2.6% pcalc_prop_array 25 x 1000 = 25000 objects, 3400800 bytes 2.6% pcalc_prop_array 25 x 1000 = 25000 objects, 3400800 bytes
@ -255,5 +255,5 @@ Total memory consumption was 123345K = 120 MB
---- code generation workspace for objects 1336 bytes in 4 claims ---- code generation workspace for objects 1336 bytes in 4 claims
0.2% emitter array storage 280032 bytes in 1997 claims 0.2% emitter array storage 280032 bytes in 1997 claims
-146.-1% was overhead - -184624928 bytes = -180297K = -176 MB -146.-1% was overhead - -184624848 bytes = -180297K = -176 MB

View file

@ -1,15 +1,15 @@
100.0% in inform7 run 100.0% in inform7 run
70.8% in compilation to Inter 70.9% in compilation to Inter
50.8% in //Sequence::undertake_queued_tasks// 50.6% in //Sequence::undertake_queued_tasks//
4.6% in //MajorNodes::pre_pass// 4.6% in //MajorNodes::pre_pass//
3.2% in //MajorNodes::pass_1// 3.3% in //MajorNodes::pass_1//
1.9% in //ImperativeDefinitions::assess_all// 1.9% in //ImperativeDefinitions::assess_all//
1.7% in //RTPhrasebook::compile_entries// 1.8% in //RTPhrasebook::compile_entries//
1.5% in //RTKindConstructors::compile// 1.4% in //RTKindConstructors::compile//
1.1% in //Sequence::lint_inter// 1.0% in //Sequence::lint_inter//
0.5% in //MajorNodes::pass_2// 0.6% in //MajorNodes::pass_2//
0.5% in //Sequence::undertake_queued_tasks// 0.6% in //Sequence::undertake_queued_tasks//
0.5% in //World::stage_V// 0.6% in //World::stage_V//
0.4% in //ImperativeDefinitions::compile_first_block// 0.4% in //ImperativeDefinitions::compile_first_block//
0.4% in //Sequence::undertake_queued_tasks// 0.4% in //Sequence::undertake_queued_tasks//
0.2% in //CompletionModule::compile// 0.2% in //CompletionModule::compile//
@ -18,20 +18,20 @@
0.1% in //Task::make_built_in_kind_constructors// 0.1% in //Task::make_built_in_kind_constructors//
0.1% in //Understand::traverse// 0.1% in //Understand::traverse//
0.1% in //World::stages_II_and_III// 0.1% in //World::stages_II_and_III//
2.0% not specifically accounted for 2.3% not specifically accounted for
26.4% in running Inter pipeline 26.4% in running Inter pipeline
10.2% in step 14/15: generate inform6 -> auto.inf 9.8% in step 14/15: generate inform6 -> auto.inf
5.8% in step 6/15: make-synoptic-module 6.1% in step 6/15: make-synoptic-module
5.7% in step 5/15: load-binary-kits 5.7% in step 5/15: load-binary-kits
1.6% in step 9/15: make-identifiers-unique 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 12/15: eliminate-redundant-operations
0.4% in step 7/15: shorten-wiring 0.4% in step 4/15: compile-splats
0.3% in step 7/15: shorten-wiring
0.3% in step 8/15: detect-indirect-calls 0.3% in step 8/15: detect-indirect-calls
0.2% in step 11/15: eliminate-redundant-labels 0.2% in step 11/15: eliminate-redundant-labels
0.1% in step 10/15: reconcile-verbs 0.1% in step 10/15: reconcile-verbs
0.1% in step 2/15: parse-insertions 0.1% in step 2/15: parse-insertions
0.1% in step 3/15: resolve-conditional-compilation 0.1% in step 3/15: resolve-conditional-compilation
0.5% not specifically accounted for 0.8% not specifically accounted for
2.3% in supervisor 2.2% in supervisor
0.4% not specifically accounted for 0.4% not specifically accounted for

View file

@ -72,7 +72,7 @@ Section 2 - Current action
The noun -- documented at var_noun -- is an object that varies. The noun -- documented at var_noun -- is an object that varies.
The second noun is an object that varies. The second noun is an object that varies.
The person asked -- documented at var_person_asked -- is an object that varies. The person asked -- documented at var_person_asked -- is an object that varies.
The reason the action failed -- documented at var_reason -- is an action name The reason the action failed -- documented at var_reason -- is an action
based rule producing nothing that varies. based rule producing nothing that varies.
The item described is an object that varies. The item described is an object that varies.

View file

@ -615,7 +615,6 @@ int Kinds::compatible(kind *from, kind *to) {
if (Kinds::eq(from, to)) return ALWAYS_MATCH; if (Kinds::eq(from, to)) return ALWAYS_MATCH;
LOGIF(KIND_CHECKING, "(Is the kind %u compatible with %u?", from, to); LOGIF(KIND_CHECKING, "(Is the kind %u compatible with %u?", from, to);
switch(Latticework::order_relation(from, to, TRUE)) { switch(Latticework::order_relation(from, to, TRUE)) {
case NEVER_MATCH: LOGIF(KIND_CHECKING, " No)\n"); return NEVER_MATCH; case NEVER_MATCH: LOGIF(KIND_CHECKING, " No)\n"); return NEVER_MATCH;
case ALWAYS_MATCH: LOGIF(KIND_CHECKING, " Yes)\n"); return ALWAYS_MATCH; case ALWAYS_MATCH: LOGIF(KIND_CHECKING, " Yes)\n"); return ALWAYS_MATCH;

View file

@ -331,6 +331,8 @@ and, of course, "value".
o = Latticework::construct_compatible(from, to, allow_casts); o = Latticework::construct_compatible(from, to, allow_casts);
int i, this_o = NEVER_MATCH, fallen = FALSE; int i, this_o = NEVER_MATCH, fallen = FALSE;
for (i=0; i<arity; i++) { for (i=0; i<arity; i++) {
if ((Latticework::vacuous(from->kc_args[i])) && (Latticework::vacuous(to->kc_args[i])))
continue;
if (KindConstructors::variance(from->construct, i) == COVARIANT) if (KindConstructors::variance(from->construct, i) == COVARIANT)
this_o = Latticework::order_relation(from->kc_args[i], to->kc_args[i], allow_casts); this_o = Latticework::order_relation(from->kc_args[i], to->kc_args[i], allow_casts);
else { else {
@ -341,9 +343,15 @@ and, of course, "value".
case SOMETIMES_MATCH: if (o != NEVER_MATCH) { o = this_o; fallen = TRUE; } break; case SOMETIMES_MATCH: if (o != NEVER_MATCH) { o = this_o; fallen = TRUE; } break;
} }
} }
if ((o == fallen) && (to->construct != CON_list_of)) return NEVER_MATCH; if ((fallen) && (to->construct != CON_list_of)) return NEVER_MATCH;
return o; return o;
@ =
int Latticework::vacuous(kind *K) {
if ((Kinds::eq(K, K_nil)) || (Kinds::eq(K, K_void))) return TRUE;
return FALSE;
}
@ = @ =
int Latticework::construct_compatible(kind *from, kind *to, int allow_casts) { int Latticework::construct_compatible(kind *from, kind *to, int allow_casts) {
kind *K = from; kind *K = from;

View file

@ -36,23 +36,22 @@ void Kinds::Behaviour::set_range_number(kind *K, int r) {
= =
int Kinds::Behaviour::is_object(kind *K) { int Kinds::Behaviour::is_object(kind *K) {
if ((Kinds::conforms_to(K, K_object)) && (Kinds::eq(K, K_nil) == FALSE) && (Kinds::eq(K, K_void) == FALSE)) if ((Kinds::conforms_to(K, K_object)) &&
(Kinds::eq(K, K_nil) == FALSE) && (Kinds::eq(K, K_void) == FALSE))
return TRUE; return TRUE;
return FALSE; return FALSE;
} }
int Kinds::Behaviour::is_subkind_of_object(kind *K) { int Kinds::Behaviour::is_subkind_of_object(kind *K) {
if ((Kinds::conforms_to(K, K_object)) && (Kinds::eq(K, K_object) == FALSE) && if ((Kinds::conforms_to(K, K_object)) && (Kinds::eq(K, K_object) == FALSE) &&
(Kinds::eq(K, K_nil) == FALSE) && (Kinds::eq(K, K_nil) == FALSE) && (Kinds::eq(K, K_void) == FALSE))
(Kinds::eq(K, K_void) == FALSE))
return TRUE; return TRUE;
return FALSE; return FALSE;
} }
int Kinds::Behaviour::is_object_of_kind(kind *K, kind *L) { int Kinds::Behaviour::is_object_of_kind(kind *K, kind *L) {
if ((Kinds::conforms_to(K, K_object)) && (Kinds::conforms_to(K, L)) && if ((Kinds::conforms_to(K, K_object)) && (Kinds::conforms_to(K, L)) &&
(Kinds::eq(K, K_nil) == FALSE) && (Kinds::eq(K, K_nil) == FALSE) && (Kinds::eq(K, K_void) == FALSE))
(Kinds::eq(K, K_void) == FALSE))
return TRUE; return TRUE;
return FALSE; return FALSE;
} }