1
0
Fork 0
mirror of https://github.com/ganelson/inform.git synced 2024-06-26 12:10:44 +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
---- 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
20.5% text_stream_array 4603 x 100 = 460300 objects, 25924096 bytes
19.2% linked_list 43446 objects, 24329760 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
8.2% parse_node 129721 objects, 10377680 bytes
8.2% parse_node 129720 objects, 10377600 bytes
5.8% verb_conjugation 160 objects, 7425280 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
@ -255,5 +255,5 @@ Total memory consumption was 123345K = 120 MB
---- code generation workspace for objects 1336 bytes in 4 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
70.8% in compilation to Inter
50.8% in //Sequence::undertake_queued_tasks//
70.9% in compilation to Inter
50.6% in //Sequence::undertake_queued_tasks//
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.7% in //RTPhrasebook::compile_entries//
1.5% in //RTKindConstructors::compile//
1.1% in //Sequence::lint_inter//
0.5% in //MajorNodes::pass_2//
0.5% in //Sequence::undertake_queued_tasks//
0.5% in //World::stage_V//
1.8% in //RTPhrasebook::compile_entries//
1.4% in //RTKindConstructors::compile//
1.0% in //Sequence::lint_inter//
0.6% in //MajorNodes::pass_2//
0.6% in //Sequence::undertake_queued_tasks//
0.6% in //World::stage_V//
0.4% in //ImperativeDefinitions::compile_first_block//
0.4% in //Sequence::undertake_queued_tasks//
0.2% in //CompletionModule::compile//
@ -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
2.3% not specifically accounted for
26.4% in running Inter pipeline
10.2% in step 14/15: generate inform6 -> auto.inf
5.8% in step 6/15: make-synoptic-module
9.8% in step 14/15: generate inform6 -> auto.inf
6.1% in step 6/15: make-synoptic-module
5.7% in step 5/15: load-binary-kits
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 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.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.5% not specifically accounted for
2.3% in supervisor
0.8% not specifically accounted for
2.2% in supervisor
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 second noun 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.
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;
LOGIF(KIND_CHECKING, "(Is the kind %u compatible with %u?", from, to);
switch(Latticework::order_relation(from, to, TRUE)) {
case NEVER_MATCH: LOGIF(KIND_CHECKING, " No)\n"); return NEVER_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);
int i, this_o = NEVER_MATCH, fallen = FALSE;
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)
this_o = Latticework::order_relation(from->kc_args[i], to->kc_args[i], allow_casts);
else {
@ -341,9 +343,15 @@ and, of course, "value".
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;
@ =
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) {
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) {
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 FALSE;
}
int Kinds::Behaviour::is_subkind_of_object(kind *K) {
if ((Kinds::conforms_to(K, K_object)) && (Kinds::eq(K, K_object) == FALSE) &&
(Kinds::eq(K, K_nil) == FALSE) &&
(Kinds::eq(K, K_void) == FALSE))
(Kinds::eq(K, K_nil) == FALSE) && (Kinds::eq(K, K_void) == FALSE))
return TRUE;
return FALSE;
}
int Kinds::Behaviour::is_object_of_kind(kind *K, kind *L) {
if ((Kinds::conforms_to(K, K_object)) && (Kinds::conforms_to(K, L)) &&
(Kinds::eq(K, K_nil) == FALSE) &&
(Kinds::eq(K, K_void) == FALSE))
(Kinds::eq(K, K_nil) == FALSE) && (Kinds::eq(K, K_void) == FALSE))
return TRUE;
return FALSE;
}