mirror of
https://github.com/ganelson/inform.git
synced 2024-06-16 23:30:44 +03:00
Better finding of extensions on case-sensitive file systems
This commit is contained in:
parent
a751fed71c
commit
f61aa8b6df
|
@ -1,6 +1,6 @@
|
|||
# Inform 7
|
||||
|
||||
v10.1.0-beta+6U96 'Krypton' (3 May 2022)
|
||||
v10.1.0-beta+6U97 'Krypton' (4 May 2022)
|
||||
|
||||
## About Inform 7
|
||||
|
||||
|
|
|
@ -1,3 +1,3 @@
|
|||
Prerelease: beta
|
||||
Build Date: 3 May 2022
|
||||
Build Number: 6U96
|
||||
Build Date: 4 May 2022
|
||||
Build Number: 6U97
|
||||
|
|
|
@ -168,7 +168,9 @@ requirements.
|
|||
|
||||
<p class="commentary">For efficiency's sake, since the nest could contain many hundreds of
|
||||
extensions, we narrow down to the author's subfolder if a specific
|
||||
author is required.
|
||||
author is required. We cannot safely assume that the author's name specified
|
||||
in <span class="extract"><span class="extract-syntax">req</span></span> has the same casing as in the subfolder name, so we go about this
|
||||
cautiously for the sake of case-sensitive file systems.
|
||||
</p>
|
||||
|
||||
<p class="commentary">Nobody should any longer be storing extension files without the file
|
||||
|
@ -182,8 +184,18 @@ so we'll quietly allow for it.
|
|||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">req</span><span class="plain-syntax">-></span><span class="element-syntax">work</span><span class="plain-syntax">-></span><span class="element-syntax">genre</span><span class="plain-syntax">) && (</span><span class="identifier-syntax">req</span><span class="plain-syntax">-></span><span class="element-syntax">work</span><span class="plain-syntax">-></span><span class="element-syntax">genre</span><span class="plain-syntax"> != </span><span class="identifier-syntax">extension_genre</span><span class="plain-syntax">)) </span><span class="reserved-syntax">return</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">pathname</span><span class="plain-syntax"> *</span><span class="identifier-syntax">P</span><span class="plain-syntax"> = </span><a href="4-em.html#SP3" class="function-link"><span class="function-syntax">ExtensionManager::path_within_nest</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">N</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">Str::len</span><span class="plain-syntax">(</span><span class="identifier-syntax">req</span><span class="plain-syntax">-></span><span class="element-syntax">work</span><span class="plain-syntax">-></span><span class="element-syntax">author_name</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">pathname</span><span class="plain-syntax"> *</span><span class="identifier-syntax">Q</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Pathnames::down</span><span class="plain-syntax">(</span><span class="identifier-syntax">P</span><span class="plain-syntax">, </span><span class="identifier-syntax">req</span><span class="plain-syntax">-></span><span class="element-syntax">work</span><span class="plain-syntax">-></span><span class="element-syntax">author_name</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><a href="4-em.html#SP6" class="function-link"><span class="function-syntax">ExtensionManager::search_nest_for_r</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">Q</span><span class="plain-syntax">, </span><span class="identifier-syntax">N</span><span class="plain-syntax">, </span><span class="identifier-syntax">req</span><span class="plain-syntax">, </span><span class="identifier-syntax">search_results</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">linked_list</span><span class="plain-syntax"> *</span><span class="identifier-syntax">L</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Directories::listing</span><span class="plain-syntax">(</span><span class="identifier-syntax">P</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">entry</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">LOOP_OVER_LINKED_LIST</span><span class="plain-syntax">(</span><span class="identifier-syntax">entry</span><span class="plain-syntax">, </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax">, </span><span class="identifier-syntax">L</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">Platform::is_folder_separator</span><span class="plain-syntax">(</span><span class="identifier-syntax">Str::get_last_char</span><span class="plain-syntax">(</span><span class="identifier-syntax">entry</span><span class="plain-syntax">))) {</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Str::delete_last_character</span><span class="plain-syntax">(</span><span class="identifier-syntax">entry</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">Str::ne</span><span class="plain-syntax">(</span><span class="identifier-syntax">entry</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"Reserved"</span><span class="plain-syntax">)) &&</span>
|
||||
<span class="plain-syntax"> (</span><span class="identifier-syntax">Str::eq_insensitive</span><span class="plain-syntax">(</span><span class="identifier-syntax">entry</span><span class="plain-syntax">, </span><span class="identifier-syntax">req</span><span class="plain-syntax">-></span><span class="element-syntax">work</span><span class="plain-syntax">-></span><span class="element-syntax">author_name</span><span class="plain-syntax">))) {</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">pathname</span><span class="plain-syntax"> *</span><span class="identifier-syntax">Q</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Pathnames::down</span><span class="plain-syntax">(</span><span class="identifier-syntax">P</span><span class="plain-syntax">, </span><span class="identifier-syntax">entry</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><a href="4-em.html#SP6" class="function-link"><span class="function-syntax">ExtensionManager::search_nest_for_r</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">Q</span><span class="plain-syntax">, </span><span class="identifier-syntax">N</span><span class="plain-syntax">, </span><span class="identifier-syntax">req</span><span class="plain-syntax">, </span><span class="identifier-syntax">search_results</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> }</span>
|
||||
<span class="plain-syntax"> }</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="4-em.html#SP6" class="function-link"><span class="function-syntax">ExtensionManager::search_nest_for_r</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">P</span><span class="plain-syntax">, </span><span class="identifier-syntax">N</span><span class="plain-syntax">, </span><span class="identifier-syntax">req</span><span class="plain-syntax">, </span><span class="identifier-syntax">search_results</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> }</span>
|
||||
|
|
|
@ -104,7 +104,9 @@ requirements.
|
|||
|
||||
For efficiency's sake, since the nest could contain many hundreds of
|
||||
extensions, we narrow down to the author's subfolder if a specific
|
||||
author is required.
|
||||
author is required. We cannot safely assume that the author's name specified
|
||||
in |req| has the same casing as in the subfolder name, so we go about this
|
||||
cautiously for the sake of case-sensitive file systems.
|
||||
|
||||
Nobody should any longer be storing extension files without the file
|
||||
extension |.i7x|, but this was allowed in the early days of Inform 7,
|
||||
|
@ -116,8 +118,18 @@ void ExtensionManager::search_nest_for(inbuild_genre *gen, inbuild_nest *N,
|
|||
if ((req->work->genre) && (req->work->genre != extension_genre)) return;
|
||||
pathname *P = ExtensionManager::path_within_nest(N);
|
||||
if (Str::len(req->work->author_name) > 0) {
|
||||
pathname *Q = Pathnames::down(P, req->work->author_name);
|
||||
ExtensionManager::search_nest_for_r(Q, N, req, search_results);
|
||||
linked_list *L = Directories::listing(P);
|
||||
text_stream *entry;
|
||||
LOOP_OVER_LINKED_LIST(entry, text_stream, L) {
|
||||
if (Platform::is_folder_separator(Str::get_last_char(entry))) {
|
||||
Str::delete_last_character(entry);
|
||||
if ((Str::ne(entry, I"Reserved")) &&
|
||||
(Str::eq_insensitive(entry, req->work->author_name))) {
|
||||
pathname *Q = Pathnames::down(P, entry);
|
||||
ExtensionManager::search_nest_for_r(Q, N, req, search_results);
|
||||
}
|
||||
}
|
||||
}
|
||||
} else {
|
||||
ExtensionManager::search_nest_for_r(P, N, req, search_results);
|
||||
}
|
||||
|
|
|
@ -1,10 +1,10 @@
|
|||
Total memory consumption was 123289K = 120 MB
|
||||
Total memory consumption was 123294K = 120 MB
|
||||
|
||||
---- was used for 2043757 objects, in 362472 frames in 0 x 800K = 0K = 0 MB:
|
||||
---- was used for 2043753 objects, in 362468 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 4600 x 100 = 460000 objects, 25907200 bytes
|
||||
19.2% linked_list 43442 objects, 24327520 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 129584 objects, 10366720 bytes
|
||||
|
@ -32,7 +32,7 @@ Total memory consumption was 123289K = 120 MB
|
|||
0.6% individual_form 2562 objects, 860832 bytes
|
||||
0.6% inter_schema_node 8917 objects, 856032 bytes
|
||||
0.5% unary_predicate_array 16 x 1000 = 16000 objects, 640512 bytes
|
||||
0.3% scan_directory 112 objects, 462336 bytes
|
||||
0.3% scan_directory 116 objects, 478848 bytes
|
||||
0.3% local_variable_array 47 x 100 = 4700 objects, 452704 bytes
|
||||
0.3% verb_usage 1128 objects, 388032 bytes
|
||||
0.2% rule 470 objects, 368480 bytes
|
||||
|
@ -111,8 +111,8 @@ Total memory consumption was 123289K = 120 MB
|
|||
---- adjective 137 objects, 15344 bytes
|
||||
---- generated_segment 14 objects, 14784 bytes
|
||||
---- booking_list 407 objects, 13024 bytes
|
||||
---- pathname 324 objects, 12960 bytes
|
||||
---- adjective_iname_holder 320 objects, 12800 bytes
|
||||
---- pathname 312 objects, 12480 bytes
|
||||
---- uniqueness_count 454 objects, 10896 bytes
|
||||
---- inter_construct 30 objects, 10320 bytes
|
||||
---- filename 246 objects, 9840 bytes
|
||||
|
@ -237,9 +237,9 @@ Total memory consumption was 123289K = 120 MB
|
|||
|
||||
100.0% was used for memory not allocated for objects:
|
||||
|
||||
57.7% text stream storage 72856620 bytes in 477518 claims
|
||||
57.7% text stream storage 72862020 bytes in 477538 claims
|
||||
4.1% dictionary storage 5227008 bytes in 7517 claims
|
||||
---- sorting 1448 bytes in 145 claims
|
||||
---- sorting 1448 bytes in 149 claims
|
||||
5.7% source text 7200000 bytes in 3 claims
|
||||
8.5% source text details 10800000 bytes in 2 claims
|
||||
0.2% documentation fragments 262144 bytes in 1 claim
|
||||
|
@ -255,5 +255,5 @@ Total memory consumption was 123289K = 120 MB
|
|||
---- code generation workspace for objects 1336 bytes in 4 claims
|
||||
0.2% emitter array storage 280032 bytes in 1997 claims
|
||||
|
||||
-145.-5% was overhead - -183740600 bytes = -179434K = -175 MB
|
||||
-145.-5% was overhead - -183758872 bytes = -179452K = -175 MB
|
||||
|
||||
|
|
|
@ -1,34 +1,32 @@
|
|||
100.0% in inform7 run
|
||||
71.2% in compilation to Inter
|
||||
50.8% in //Sequence::undertake_queued_tasks//
|
||||
4.3% in //MajorNodes::pre_pass//
|
||||
3.5% in //MajorNodes::pass_1//
|
||||
1.8% in //ImperativeDefinitions::assess_all//
|
||||
1.8% in //RTPhrasebook::compile_entries//
|
||||
71.0% in compilation to Inter
|
||||
50.6% in //Sequence::undertake_queued_tasks//
|
||||
4.5% in //MajorNodes::pre_pass//
|
||||
3.4% in //MajorNodes::pass_1//
|
||||
1.9% in //ImperativeDefinitions::assess_all//
|
||||
1.9% in //RTPhrasebook::compile_entries//
|
||||
1.5% in //RTKindConstructors::compile//
|
||||
1.1% in //Sequence::lint_inter//
|
||||
0.5% in //ImperativeDefinitions::compile_first_block//
|
||||
0.5% in //MajorNodes::pass_2//
|
||||
0.5% in //Sequence::undertake_queued_tasks//
|
||||
0.5% in //World::stage_V//
|
||||
0.3% in //Sequence::undertake_queued_tasks//
|
||||
0.1% in //CompletionModule::compile//
|
||||
0.1% in //InferenceSubjects::emit_all//
|
||||
0.1% in //RTKindConstructors::compile_permissions//
|
||||
0.1% in //Task::make_built_in_kind_constructors//
|
||||
0.1% in //World::stages_II_and_III//
|
||||
2.6% not specifically accounted for
|
||||
26.0% in running Inter pipeline
|
||||
1.0% in //Sequence::lint_inter//
|
||||
0.4% in //ImperativeDefinitions::compile_first_block//
|
||||
0.4% in //MajorNodes::pass_2//
|
||||
0.4% in //Sequence::undertake_queued_tasks//
|
||||
0.4% in //Sequence::undertake_queued_tasks//
|
||||
0.4% in //World::stage_V//
|
||||
0.2% in //CompletionModule::compile//
|
||||
0.2% in //InferenceSubjects::emit_all//
|
||||
0.2% in //RTKindConstructors::compile_permissions//
|
||||
0.2% in //Task::make_built_in_kind_constructors//
|
||||
3.0% not specifically accounted for
|
||||
26.1% in running Inter pipeline
|
||||
10.3% in step 14/15: generate inform6 -> auto.inf
|
||||
5.6% in step 5/15: load-binary-kits
|
||||
5.4% in step 6/15: make-synoptic-module
|
||||
5.7% in step 5/15: load-binary-kits
|
||||
5.5% in step 6/15: make-synoptic-module
|
||||
1.5% 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 10/15: reconcile-verbs
|
||||
0.1% in step 11/15: eliminate-redundant-labels
|
||||
0.4% in step 12/15: eliminate-redundant-operations
|
||||
0.4% in step 4/15: compile-splats
|
||||
0.4% in step 7/15: shorten-wiring
|
||||
0.2% in step 11/15: eliminate-redundant-labels
|
||||
0.2% in step 8/15: detect-indirect-calls
|
||||
1.3% not specifically accounted for
|
||||
2.2% in supervisor
|
||||
0.4% not specifically accounted for
|
||||
2.3% in supervisor
|
||||
0.5% not specifically accounted for
|
||||
|
|
Loading…
Reference in a new issue